diff --git a/.idea/dataSources.xml b/.idea/dataSources.xml new file mode 100644 index 0000000..55afae8 --- /dev/null +++ b/.idea/dataSources.xml @@ -0,0 +1,12 @@ + + + + + redis + true + jdbc.RedisDriver + jdbc:redis://localhost:6379/0 + $ProjectFileDir$ + + + \ No newline at end of file diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml new file mode 100644 index 0000000..2b63946 --- /dev/null +++ b/.idea/uiDesigner.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml index 55c451f..50b70af 100644 --- a/pom.xml +++ b/pom.xml @@ -264,12 +264,40 @@ weixin-java-miniapp 4.6.0 + + + com.github.binarywang + wx-java-mp-spring-boot-starter + 4.6.0 + com.aliyun.oss aliyun-sdk-oss - 3.17.0 + 3.18.1 + + + com.aliyun + sts20150401 + 1.1.6 + + + com.aliyun + credentials-java + 0.3.4 + + + + com.aliyun.mns + aliyun-sdk-mns + 1.1.11 + + + + com.aliyun.kms + kms-transfer-client + 0.1.0 diff --git a/src/main/java/com/gxwebsoft/cms/controller/ArticleCheckController.java b/src/main/java/com/gxwebsoft/cms/controller/ArticleCheckController.java new file mode 100644 index 0000000..a8dd5ad --- /dev/null +++ b/src/main/java/com/gxwebsoft/cms/controller/ArticleCheckController.java @@ -0,0 +1,178 @@ +package com.gxwebsoft.cms.controller; + +import cn.binarywang.wx.miniapp.api.WxMaService; +import cn.binarywang.wx.miniapp.bean.WxMaSubscribeMessage; +import cn.hutool.core.date.DateUtil; +import com.gxwebsoft.cms.entity.Article; +import com.gxwebsoft.cms.service.ArticleService; +import com.gxwebsoft.common.core.security.JwtUtil; +import com.gxwebsoft.common.core.utils.RequestUtil; +import com.gxwebsoft.common.core.web.BaseController; +import com.gxwebsoft.cms.service.ArticleCheckService; +import com.gxwebsoft.cms.entity.ArticleCheck; +import com.gxwebsoft.cms.param.ArticleCheckParam; +import com.gxwebsoft.common.core.web.ApiResult; +import com.gxwebsoft.common.core.web.PageResult; +import com.gxwebsoft.common.core.web.PageParam; +import com.gxwebsoft.common.core.web.BatchParam; +import com.gxwebsoft.common.core.annotation.OperationLog; +import com.gxwebsoft.common.system.entity.User; +import com.gxwebsoft.shop.controller.WeChatController; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import me.chanjar.weixin.common.error.WxErrorException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.ArrayList; +import java.util.List; + +/** + * 控制器 + * + * @author 科技小王子 + * @since 2024-11-19 22:01:03 + */ +@Api(tags = "管理") +@RestController +@RequestMapping("/api/cms/article-check") +public class ArticleCheckController extends BaseController { + @Resource + private ArticleCheckService articleCheckService; + @Resource + private ArticleService articleService; + + @Autowired + private WeChatController weChatController; + @Autowired + private RequestUtil requestUtil; + + @ApiOperation("分页查询") + @GetMapping("/page") + public ApiResult> page(ArticleCheckParam param) { + // 使用关联查询 + return success(articleCheckService.pageRel(param)); + } + + @ApiOperation("查询全部") + @GetMapping() + public ApiResult> list() { + ArticleCheckParam param = new ArticleCheckParam(); + param.setUserId(getLoginUserId()); + param.setStatus(0); + // 使用关联查询 + List list = articleCheckService.listRel(param); + for (ArticleCheck articleCheck : list) { + articleCheck.setArticle(articleService.getByIdRel(articleCheck.getArticleId())); + } + return success(list); + } + + @PreAuthorize("hasAuthority('cms:articleCheck:list')") + @ApiOperation("根据id查询") + @GetMapping("/{id}") + public ApiResult get(@PathVariable("id") Integer id) { + // 使用关联查询 + return success(articleCheckService.getByIdRel(id)); + } + + @ApiOperation("添加") + @PostMapping() + public ApiResult save(@RequestBody ArticleCheck articleCheck) { + // 记录当前登录用户id + User loginUser = getLoginUser(); + if (loginUser != null) { + articleCheck.setUserId(loginUser.getUserId()); + } + if (articleCheckService.save(articleCheck)) { + return success("添加成功"); + } + return fail("添加失败"); + } + + @ApiOperation("修改") + @PutMapping() + public ApiResult update(@RequestBody ArticleCheck articleCheck, HttpServletRequest request) throws WxErrorException { + if (articleCheckService.updateById(articleCheck)) { + ArticleCheck articleCheck1 = articleCheckService.getByIdRel(articleCheck.getId()); + List articleCheckList = articleCheckService.listByArticleId(articleCheck1.getArticleId()); + Article article = articleService.getById(articleCheck1.getArticleId()); + boolean sendMsg = false; + String result = ""; + if (articleCheck.getStatus().equals(2)) { + article.setStatus(2); + articleService.updateById(article); + sendMsg = true; + result = "驳回"; + } else if (articleCheck.getStatus().equals(1)) { + int passNum = 0; + for (ArticleCheck articleCheck2 : articleCheckList) { + if (articleCheck2.getStatus().equals(1)) { + passNum++; + } + } + if (passNum == articleCheckList.size()) { + article.setStatus(0); + articleService.updateById(article); + sendMsg = true; + result = "通过"; + } + } + if (sendMsg) { + requestUtil.setTenantId(getTenantId().toString()); + requestUtil.setAccessToken(JwtUtil.getAccessToken(request)); + User user = requestUtil.getByUserId(article.getUserId()); + if (user != null) { + List data = new ArrayList<>(); + data.add(new WxMaSubscribeMessage.MsgData("thing5", article.getTitle())); + data.add(new WxMaSubscribeMessage.MsgData("thing2", result)); + data.add(new WxMaSubscribeMessage.MsgData("time4", DateUtil.format(DateUtil.date(), "yyyy-MM-dd HH:mm:ss"))); + weChatController.sendMessage(user.getOpenid(), "NLnexmnhiVl_e4fiC6OwfbTlpssAuvXWoPNwITyTcC4", "package/user/myTv", + data); + } + } + return success("修改成功"); + } + return fail("修改失败"); + } + + @ApiOperation("删除") + @DeleteMapping("/{id}") + public ApiResult remove(@PathVariable("id") Integer id) { + if (articleCheckService.removeById(id)) { + return success("删除成功"); + } + return fail("删除失败"); + } + + @ApiOperation("批量添加") + @PostMapping("/batch") + public ApiResult saveBatch(@RequestBody List list) { + if (articleCheckService.saveBatch(list)) { + return success("添加成功"); + } + return fail("添加失败"); + } + + @ApiOperation("批量修改") + @PutMapping("/batch") + public ApiResult removeBatch(@RequestBody BatchParam batchParam) { + if (batchParam.update(articleCheckService, "id")) { + return success("修改成功"); + } + return fail("修改失败"); + } + + @ApiOperation("批量删除") + @DeleteMapping("/batch") + public ApiResult removeBatch(@RequestBody List ids) { + if (articleCheckService.removeByIds(ids)) { + return success("删除成功"); + } + return fail("删除失败"); + } + +} diff --git a/src/main/java/com/gxwebsoft/cms/controller/ArticleCommentController.java b/src/main/java/com/gxwebsoft/cms/controller/ArticleCommentController.java index 77a7c2a..72623e4 100644 --- a/src/main/java/com/gxwebsoft/cms/controller/ArticleCommentController.java +++ b/src/main/java/com/gxwebsoft/cms/controller/ArticleCommentController.java @@ -1,5 +1,7 @@ package com.gxwebsoft.cms.controller; +import com.gxwebsoft.cms.entity.Article; +import com.gxwebsoft.cms.service.ArticleService; import com.gxwebsoft.common.core.web.BaseController; import com.gxwebsoft.cms.service.ArticleCommentService; import com.gxwebsoft.cms.entity.ArticleComment; @@ -10,6 +12,7 @@ import com.gxwebsoft.common.core.web.PageParam; import com.gxwebsoft.common.core.web.BatchParam; import com.gxwebsoft.common.core.annotation.OperationLog; import com.gxwebsoft.common.system.entity.User; +import com.gxwebsoft.common.system.service.UserService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.security.access.prepost.PreAuthorize; @@ -30,8 +33,11 @@ import java.util.List; public class ArticleCommentController extends BaseController { @Resource private ArticleCommentService articleCommentService; + @Resource + private UserService userService; + @Resource + private ArticleService articleService; - @PreAuthorize("hasAuthority('cms:articleComment:list')") @ApiOperation("分页查询文章评论表") @GetMapping("/page") public ApiResult> page(ArticleCommentParam param) { @@ -42,7 +48,6 @@ public class ArticleCommentController extends BaseController { //return success(articleCommentService.pageRel(param)); } - @PreAuthorize("hasAuthority('cms:articleComment:list')") @ApiOperation("查询全部文章评论表") @GetMapping() public ApiResult> list(ArticleCommentParam param) { @@ -53,7 +58,6 @@ public class ArticleCommentController extends BaseController { //return success(articleCommentService.listRel(param)); } - @PreAuthorize("hasAuthority('cms:articleComment:list')") @ApiOperation("根据id查询文章评论表") @GetMapping("/{id}") public ApiResult get(@PathVariable("id") Integer id) { @@ -62,16 +66,20 @@ public class ArticleCommentController extends BaseController { //return success(articleCommentService.getByIdRel(id)); } - @PreAuthorize("hasAuthority('cms:articleComment:save')") @ApiOperation("添加文章评论表") @PostMapping() public ApiResult save(@RequestBody ArticleComment articleComment) { // 记录当前登录用户id User loginUser = getLoginUser(); if (loginUser != null) { - articleComment.setUserId(loginUser.getUserId()); + articleComment.setUserId(loginUser.getUserId()); + articleComment.setAvatar(loginUser.getAvatar()); + articleComment.setNickname(loginUser.getNickname()); } if (articleCommentService.save(articleComment)) { + Article article = articleService.getById(articleComment.getArticleId()); + article.setCommentNumbers(article.getCommentNumbers() + 1); + articleService.updateById(article); return success("添加成功"); } return fail("添加失败"); @@ -87,11 +95,14 @@ public class ArticleCommentController extends BaseController { return fail("修改失败"); } - @PreAuthorize("hasAuthority('cms:articleComment:remove')") @ApiOperation("删除文章评论表") @DeleteMapping("/{id}") public ApiResult remove(@PathVariable("id") Integer id) { + ArticleComment articleComment = articleCommentService.getById(id); if (articleCommentService.removeById(id)) { + Article article = articleService.getById(articleComment.getArticleId()); + article.setCommentNumbers(article.getCommentNumbers() - 1); + articleService.updateById(article); return success("删除成功"); } return fail("删除失败"); diff --git a/src/main/java/com/gxwebsoft/cms/controller/ArticleController.java b/src/main/java/com/gxwebsoft/cms/controller/ArticleController.java index 871d321..f312aab 100644 --- a/src/main/java/com/gxwebsoft/cms/controller/ArticleController.java +++ b/src/main/java/com/gxwebsoft/cms/controller/ArticleController.java @@ -1,28 +1,42 @@ package com.gxwebsoft.cms.controller; +import com.aliyun.mns.client.CloudAccount; +import com.aliyun.mns.client.CloudQueue; +import com.aliyun.mns.client.MNSClient; +import com.aliyun.mns.model.Message; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.gxwebsoft.cms.entity.Article; import com.gxwebsoft.cms.entity.ArticleCategory; +import com.gxwebsoft.cms.entity.ArticleCheck; import com.gxwebsoft.cms.entity.ArticleContent; import com.gxwebsoft.cms.param.ArticleParam; import com.gxwebsoft.cms.service.ArticleCategoryService; +import com.gxwebsoft.cms.service.ArticleCheckService; import com.gxwebsoft.cms.service.ArticleContentService; import com.gxwebsoft.cms.service.ArticleService; +import com.gxwebsoft.common.core.security.JwtUtil; +import com.gxwebsoft.common.core.utils.RequestUtil; import com.gxwebsoft.common.core.web.ApiResult; import com.gxwebsoft.common.core.web.BaseController; import com.gxwebsoft.common.core.web.BatchParam; import com.gxwebsoft.common.core.web.PageResult; +import com.gxwebsoft.common.system.controller.AliOssController; import com.gxwebsoft.common.system.entity.User; +import com.gxwebsoft.common.system.entity.UserRole; +import com.gxwebsoft.open.service.OfficeMpServiceImpl; import com.gxwebsoft.shop.entity.Goods; import com.gxwebsoft.shop.param.GoodsParam; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import me.chanjar.weixin.common.error.WxErrorException; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; import java.util.Date; import java.util.HashMap; import java.util.List; @@ -44,103 +58,163 @@ public class ArticleController extends BaseController { private ArticleCategoryService articleCategoryService; @Resource private ArticleContentService articleContentService; + @Resource + private ArticleCheckService articleCheckService; + @Resource + private OfficeMpServiceImpl officeMpService; + + @Autowired + private RequestUtil requestUtil; + @Autowired + private AliOssController aliOssController; @ApiOperation("分页查询文章") @GetMapping("/page") - public ApiResult> page(ArticleParam param) { + public ApiResult> page(ArticleParam param) { // 使用关联查询 + if (getLoginUser() != null) { + param.setLoginUserId(getLoginUserId()); + } + if (param.getMinData() != null) return success(articleService.pageMinData(param)); return success(articleService.pageRel(param)); } + @GetMapping("/user-list") + public ApiResult> userList(ArticleParam param) { + // 使用关联查询 + if (getLoginUser() != null) { + param.setUserId(getLoginUserId()); + } + return success(articleService.listRel(param)); + } + @ApiOperation("查询全部文章") @GetMapping() - public ApiResult> list(ArticleParam param) { + public ApiResult> list(ArticleParam param) { // 使用关联查询 + if (getLoginUser() != null) { + param.setLoginUserId(getLoginUserId()); + } + if (param.getMinData() != null) return success(articleService.listMinData(param)); return success(articleService.listRel(param)); } @ApiOperation("根据id查询文章") @GetMapping("/{id}") public ApiResult
get(@PathVariable("id") Integer id) { - // 使用关联查询 - Article article = articleService.getByIdRel(id); - // 更新阅读数量 - article.setActualViews(article.getActualViews() + 1); - articleService.updateById(article); - // 附加文字内容 - ArticleContent content = articleContentService.getOne(new LambdaQueryWrapper().eq(ArticleContent::getArticleId,article.getArticleId()).last("limit 1")); - if(content != null){ - article.setContent(content.getContent()); - } - return success(article); + // 使用关联查询 + Article article = articleService.getByIdRel(id); + // 更新阅读数量 + article.setActualViews(article.getActualViews() + 1); + articleService.updateById(article); + // 附加文字内容 + ArticleContent content = articleContentService.getOne(new LambdaQueryWrapper().eq(ArticleContent::getArticleId, article.getArticleId()).last("limit 1")); + if (content != null) { + article.setContent(content.getContent()); + } + return success(article); } @ApiOperation("读取上一篇") @GetMapping("/getPrevious/{id}") public ApiResult
getPrevious(@PathVariable("id") Integer id) { - LambdaQueryWrapper
wrapper = new LambdaQueryWrapper<>(); - wrapper.lt(Article::getArticleId,id); - wrapper.eq(Article::getStatus,0); - wrapper.eq(Article::getType,0); - wrapper.orderByDesc(Article::getArticleId); - wrapper.last("limit 1"); - final Article article = articleService.getOne(wrapper); - return success(article); + LambdaQueryWrapper
wrapper = new LambdaQueryWrapper<>(); + wrapper.lt(Article::getArticleId, id); + wrapper.eq(Article::getStatus, 0); + wrapper.eq(Article::getType, 0); + wrapper.orderByDesc(Article::getArticleId); + wrapper.last("limit 1"); + final Article article = articleService.getOne(wrapper); + return success(article); } @ApiOperation("读取下一篇") @GetMapping("/getNext/{id}") public ApiResult
getNext(@PathVariable("id") Integer id) { - LambdaQueryWrapper
wrapper = new LambdaQueryWrapper<>(); - wrapper.gt(Article::getArticleId,id); - wrapper.eq(Article::getStatus,0); - wrapper.eq(Article::getType,0); - wrapper.orderByAsc(Article::getArticleId); - wrapper.last("limit 1"); - final Article article = articleService.getOne(wrapper); - return success(article); + LambdaQueryWrapper
wrapper = new LambdaQueryWrapper<>(); + wrapper.gt(Article::getArticleId, id); + wrapper.eq(Article::getStatus, 0); + wrapper.eq(Article::getType, 0); + wrapper.orderByAsc(Article::getArticleId); + wrapper.last("limit 1"); + final Article article = articleService.getOne(wrapper); + return success(article); } @PreAuthorize("hasAuthority('cms:article:save')") @ApiOperation("添加文章") @Transactional(rollbackFor = {Exception.class}) @PostMapping() - public ApiResult save(@RequestBody Article article) { + public ApiResult save(@RequestBody Article article, HttpServletRequest request) throws WxErrorException { // 记录当前登录用户id User loginUser = getLoginUser(); if (loginUser != null) { - article.setUserId(loginUser.getUserId()); + article.setUserId(loginUser.getUserId()); + article.setUserAvatar(loginUser.getAvatar()); + article.setUsername(loginUser.getNickname()); } // 同步类型 // final ArticleCategory category = articleCategoryService.getById(article.getCategoryId()); // article.setType(category.getType()); if (articleService.save(article)) { - // 保存文章内容 - final ArticleContent content = new ArticleContent(); - content.setArticleId(article.getArticleId()); - content.setContent(article.getContent()); - articleContentService.save(content); - return success("添加成功"); + if (article.getBucket() != null) aliOssController.videoTrans(article.getBucket()); + // 保存文章内容 + final ArticleContent content = new ArticleContent(); + content.setArticleId(article.getArticleId()); + content.setContent(article.getContent()); + articleContentService.save(content); + + if (article.getIsFront() != null && article.getIsFront()) { + requestUtil.setTenantId(getTenantId().toString()); + requestUtil.setAccessToken(JwtUtil.getAccessToken(request)); + List userRoleList = requestUtil.getUserListByRole(1114); + if (userRoleList != null && !userRoleList.isEmpty()) { + for (UserRole userRole : userRoleList) { + User user = requestUtil.getByUserId(userRole.getUserId()); + ArticleCheck articleCheck = new ArticleCheck(); + articleCheck.setArticleId(article.getArticleId()); + articleCheck.setUserId(userRole.getUserId()); + articleCheckService.save(articleCheck); + + if (user != null && user.getOfficeOpenid() != null && !user.getOfficeOpenid().isEmpty()) { + officeMpService.sendTVCheckMessage(user.getOfficeOpenid(), article.getTitle(), loginUser.getNickname()); + } + } + } + } + return success("添加成功"); } return fail("添加失败"); } - @PreAuthorize("hasAuthority('cms:article:update')") + @PostMapping("/trans") + public ApiResult trans(@RequestBody Article article) { +// aliOssController.videoTrans(article.getVideo()); + return success(); + } + + @ApiOperation("转码拉取消息") + @PostMapping("/trans-pull") + public ApiResult transNotify() { + aliOssController.pullVideoTrans(); + return success(); + } + @ApiOperation("修改文章") @Transactional(rollbackFor = {Exception.class}) @PutMapping() - public ApiResult update(@RequestBody Article article) { + public ApiResult update(@RequestBody Article article, HttpServletRequest request) { if (articleService.updateById(article)) { // 更新文章内容 ArticleContent content = new ArticleContent(); content.setArticleId(article.getArticleId()); content.setContent(article.getContent()); ArticleContent one = articleContentService.getOne(new LambdaQueryWrapper().eq(ArticleContent::getArticleId, article.getArticleId()).last("limit 1")); - if(one != null){ - one.setContent(article.getContent()); - articleContentService.updateById(one); - }else { - articleContentService.save(content); + if (one != null) { + one.setContent(article.getContent()); + articleContentService.updateById(one); + } else { + articleContentService.save(content); } // 更新时间 article.setUpdateTime(new Date()); @@ -155,6 +229,9 @@ public class ArticleController extends BaseController { @DeleteMapping("/{id}") public ApiResult remove(@PathVariable("id") Integer id) { if (articleService.removeById(id)) { + articleCheckService.removeByMap(new HashMap<>() {{ + put("article_id", id); + }}); return success("删除成功"); } return fail("删除失败"); @@ -190,33 +267,33 @@ public class ArticleController extends BaseController { return fail("删除失败"); } - @ApiOperation("统计信息") - @GetMapping("/data") - public ApiResult> data(ArticleParam param) { - Map data = new HashMap<>(); - final LambdaQueryWrapper
wrapper = new LambdaQueryWrapper<>(); + @ApiOperation("统计信息") + @GetMapping("/data") + public ApiResult> data(ArticleParam param) { + Map data = new HashMap<>(); + final LambdaQueryWrapper
wrapper = new LambdaQueryWrapper<>(); - if(param.getMerchantId() != null){ - wrapper.eq(Article::getMerchantId,param.getMerchantId()); + if (param.getMerchantId() != null) { + wrapper.eq(Article::getMerchantId, param.getMerchantId()); + } + + Integer totalNum = articleService.count( + wrapper.eq(Article::getDeleted, 0).eq(Article::getStatus, 0) + ); + data.put("totalNum", totalNum); + + Integer totalNum2 = articleService.count( + wrapper.eq(Article::getStatus, 1) + ); + data.put("totalNum2", totalNum2); + + Integer totalNum3 = articleService.count( + wrapper.gt(Article::getStatus, 1) + ); + data.put("totalNum3", totalNum3); + + return success(data); } - Integer totalNum = articleService.count( - wrapper.eq(Article::getDeleted,0).eq(Article::getStatus,0) - ); - data.put("totalNum", totalNum); - - Integer totalNum2 = articleService.count( - wrapper.eq(Article::getStatus,1) - ); - data.put("totalNum2", totalNum2); - - Integer totalNum3 = articleService.count( - wrapper.gt(Article::getStatus,1) - ); - data.put("totalNum3", totalNum3); - - return success(data); - } - } diff --git a/src/main/java/com/gxwebsoft/cms/controller/ArticleLikeController.java b/src/main/java/com/gxwebsoft/cms/controller/ArticleLikeController.java index e8b54de..5f6c20a 100644 --- a/src/main/java/com/gxwebsoft/cms/controller/ArticleLikeController.java +++ b/src/main/java/com/gxwebsoft/cms/controller/ArticleLikeController.java @@ -1,5 +1,7 @@ package com.gxwebsoft.cms.controller; +import com.gxwebsoft.cms.entity.Article; +import com.gxwebsoft.cms.service.ArticleService; import com.gxwebsoft.common.core.web.BaseController; import com.gxwebsoft.cms.service.ArticleLikeService; import com.gxwebsoft.cms.entity.ArticleLike; @@ -16,6 +18,7 @@ import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import java.util.HashMap; import java.util.List; /** @@ -30,6 +33,8 @@ import java.util.List; public class ArticleLikeController extends BaseController { @Resource private ArticleLikeService articleLikeService; + @Resource + private ArticleService articleService; @ApiOperation("分页查询点赞文章") @GetMapping("/page") @@ -59,22 +64,23 @@ public class ArticleLikeController extends BaseController { //return success(articleLikeService.getByIdRel(id)); } - @PreAuthorize("hasAuthority('cms:articleLike:save')") @ApiOperation("添加点赞文章") @PostMapping() public ApiResult save(@RequestBody ArticleLike articleLike) { // 记录当前登录用户id User loginUser = getLoginUser(); if (loginUser != null) { - articleLike.setUserId(loginUser.getUserId()); + articleLike.setUserId(loginUser.getUserId()); } if (articleLikeService.save(articleLike)) { + Article article = articleService.getById(articleLike.getArticleId()); + article.setLikes(article.getLikes() + 1); + articleService.updateById(article); return success("添加成功"); } return fail("添加失败"); } - @PreAuthorize("hasAuthority('cms:articleLike:update')") @ApiOperation("修改点赞文章") @PutMapping() public ApiResult update(@RequestBody ArticleLike articleLike) { @@ -84,7 +90,19 @@ public class ArticleLikeController extends BaseController { return fail("修改失败"); } - @PreAuthorize("hasAuthority('cms:articleLike:remove')") + @ApiOperation("删除点赞文章") + @DeleteMapping("/del-by-article/{articleId}") + public ApiResult removeByArticle(@PathVariable("articleId") Integer articleId) { + articleLikeService.removeByMap(new HashMap<>() {{ + put("article_id", articleId); + put("user_id", getLoginUserId()); + }}); + Article article = articleService.getById(articleId); + article.setLikes(article.getLikes() - 1); + articleService.updateById(article); + return success("删除成功"); + } + @ApiOperation("删除点赞文章") @DeleteMapping("/{id}") public ApiResult remove(@PathVariable("id") Integer id) { @@ -94,7 +112,6 @@ public class ArticleLikeController extends BaseController { return fail("删除失败"); } - @PreAuthorize("hasAuthority('cms:articleLike:save')") @ApiOperation("批量添加点赞文章") @PostMapping("/batch") public ApiResult saveBatch(@RequestBody List list) { @@ -104,7 +121,6 @@ public class ArticleLikeController extends BaseController { return fail("添加失败"); } - @PreAuthorize("hasAuthority('cms:articleLike:update')") @ApiOperation("批量修改点赞文章") @PutMapping("/batch") public ApiResult removeBatch(@RequestBody BatchParam batchParam) { @@ -114,7 +130,6 @@ public class ArticleLikeController extends BaseController { return fail("修改失败"); } - @PreAuthorize("hasAuthority('cms:articleLike:remove')") @ApiOperation("批量删除点赞文章") @DeleteMapping("/batch") public ApiResult removeBatch(@RequestBody List ids) { diff --git a/src/main/java/com/gxwebsoft/cms/controller/FollowController.java b/src/main/java/com/gxwebsoft/cms/controller/FollowController.java new file mode 100644 index 0000000..8f16024 --- /dev/null +++ b/src/main/java/com/gxwebsoft/cms/controller/FollowController.java @@ -0,0 +1,126 @@ +package com.gxwebsoft.cms.controller; + +import com.gxwebsoft.common.core.web.BaseController; +import com.gxwebsoft.cms.service.FollowService; +import com.gxwebsoft.cms.entity.Follow; +import com.gxwebsoft.cms.param.FollowParam; +import com.gxwebsoft.common.core.web.ApiResult; +import com.gxwebsoft.common.core.web.PageResult; +import com.gxwebsoft.common.core.web.PageParam; +import com.gxwebsoft.common.core.web.BatchParam; +import com.gxwebsoft.common.core.annotation.OperationLog; +import com.gxwebsoft.common.system.entity.User; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + * 关注控制器 + * + * @author 科技小王子 + * @since 2024-12-11 18:25:28 + */ +@Api(tags = "关注管理") +@RestController +@RequestMapping("/api/cms/follow") +public class FollowController extends BaseController { + @Resource + private FollowService followService; + + @GetMapping("/check") + public ApiResult check(FollowParam param) { + // 使用关联查询 + return success(followService.check(getLoginUserId(), param.getFollowUserId())); + } + + @ApiOperation("分页查询关注") + @GetMapping("/page") + public ApiResult> page(FollowParam param) { + // 使用关联查询 + return success(followService.pageRel(param)); + } + + @ApiOperation("查询全部关注") + @GetMapping() + public ApiResult> list(FollowParam param) { + // 使用关联查询 + return success(followService.listRel(param)); + } + + @PreAuthorize("hasAuthority('cms:follow:list')") + @ApiOperation("根据id查询关注") + @GetMapping("/{id}") + public ApiResult get(@PathVariable("id") Integer id) { + // 使用关联查询 + return success(followService.getByIdRel(id)); + } + + @ApiOperation("添加关注") + @PostMapping() + public ApiResult save(@RequestBody Follow follow) { + // 记录当前登录用户id + User loginUser = getLoginUser(); + if (loginUser != null) { + follow.setUserId(loginUser.getUserId()); + Follow follow1 = followService.check(loginUser.getUserId(), follow.getId()); + if (follow1 != null) { + followService.removeById(follow1.getId()); + return success("取消成功"); + } + } + if (followService.save(follow)) { + return success("添加成功"); + } + return fail("添加失败"); + } + + @ApiOperation("修改关注") + @PutMapping() + public ApiResult update(@RequestBody Follow follow) { + if (followService.updateById(follow)) { + return success("修改成功"); + } + return fail("修改失败"); + } + + @ApiOperation("删除关注") + @DeleteMapping("/{id}") + public ApiResult remove(@PathVariable("id") Integer id) { + if (followService.removeById(id)) { + return success("删除成功"); + } + return fail("删除失败"); + } + + @ApiOperation("批量添加关注") + @PostMapping("/batch") + public ApiResult saveBatch(@RequestBody List list) { + if (followService.saveBatch(list)) { + return success("添加成功"); + } + return fail("添加失败"); + } + + @ApiOperation("批量修改关注") + @PutMapping("/batch") + public ApiResult removeBatch(@RequestBody BatchParam batchParam) { + if (batchParam.update(followService, "id")) { + return success("修改成功"); + } + return fail("修改失败"); + } + + @ApiOperation("批量删除关注") + @DeleteMapping("/batch") + public ApiResult removeBatch(@RequestBody List ids) { + if (followService.removeByIds(ids)) { + return success("删除成功"); + } + return fail("删除失败"); + } + +} diff --git a/src/main/java/com/gxwebsoft/cms/controller/MpController.java b/src/main/java/com/gxwebsoft/cms/controller/MpController.java index 1e95970..71269c0 100644 --- a/src/main/java/com/gxwebsoft/cms/controller/MpController.java +++ b/src/main/java/com/gxwebsoft/cms/controller/MpController.java @@ -11,6 +11,7 @@ import com.gxwebsoft.cms.param.MpParam; import com.gxwebsoft.cms.service.*; import com.gxwebsoft.common.core.utils.JSONUtil; import com.gxwebsoft.common.core.utils.RedisUtil; +import com.gxwebsoft.common.core.utils.RequestUtil; import com.gxwebsoft.common.core.web.ApiResult; import com.gxwebsoft.common.core.web.BaseController; import com.gxwebsoft.common.core.web.BatchParam; @@ -22,6 +23,7 @@ import com.gxwebsoft.shop.param.GoodsParam; import com.gxwebsoft.shop.service.GoodsService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.*; @@ -57,6 +59,9 @@ public class MpController extends BaseController { @Resource private RedisUtil redisUtil; + @Autowired + private RequestUtil requestUtil; + @ApiOperation("分页查询小程序") @GetMapping("/page") public ApiResult> page(MpParam param) { @@ -304,29 +309,28 @@ public class MpController extends BaseController { List goodsList = goodsService.getGoodsSpecType0(param); if (getLoginUser() != null) { + User parentUser = requestUtil.getParent(getLoginUserId()); for (Goods goods : goodsList) { BigDecimal originPrice = goods.getPrice(); goods.setPrice(goods.getSalePrice()); - if (getLoginUser().getGradeId().equals(33)) { - if (goods.getDealerGift()) goods.setShowGift(true); - goods.setPrice(goods.getDealerPrice()); + // 会员 + if (parentUser != null) { + if (goods.getPriceGift()) goods.setShowGift(true); +// goods.setPrice(originPrice); } // 会员店 - if (getLoginUser().getGradeId().equals(31)) { - goods.setPrice(originPrice); - if (goods.getPriceGift()) goods.setShowGift(true); + if (getLoginUser().getGradeId() > 30 && goods.getBuyingPriceOpen().equals(1)) { + goods.setPrice(goods.getBuyingPrice()); +// if (goods.getPriceGift()) goods.setShowGift(true); } -// if (getLoginUser().getGradeId().equals(0)) { -// goods.setPrice(goods.getSalePrice()); -// } } - }else { + } else { for (Goods goods : goodsList) { goods.setPrice(goods.getSalePrice()); } } layout.put("goods", goodsList); - layout.put("foods", goodsService.getGoodsSpecType1()); + layout.put("foods", goodsService.getGoodsSpecType1(param)); return success(layout); } diff --git a/src/main/java/com/gxwebsoft/cms/entity/Article.java b/src/main/java/com/gxwebsoft/cms/entity/Article.java index c0d9ed6..0e05699 100644 --- a/src/main/java/com/gxwebsoft/cms/entity/Article.java +++ b/src/main/java/com/gxwebsoft/cms/entity/Article.java @@ -46,6 +46,14 @@ public class Article implements Serializable { @ApiModelProperty(value = "封面图") private String image; + private String cover; + + private String userAvatar; + + private String username; + + private String shareCover; + private Integer imageWidth; private Integer imageHeight; @@ -154,6 +162,25 @@ public class Article implements Serializable { @TableField(exist = false) private String parentName; + @ApiModelProperty(value = "是否前台提交") + @TableField(exist = false) + private Boolean isFront; + + @ApiModelProperty(value = "是否已关注") + @TableField(exist = false) + private Boolean hasFollow; + + @ApiModelProperty(value = "粉丝数") + @TableField(exist = false) + private Integer fansNum; + + @ApiModelProperty(value = "是否已点赞") + @TableField(exist = false) + private Boolean hasLike; + + @TableField(exist = false) + private String bucket; + public String getStatusText() { return ARTICLE_STATUS[this.status]; } diff --git a/src/main/java/com/gxwebsoft/cms/entity/ArticleCheck.java b/src/main/java/com/gxwebsoft/cms/entity/ArticleCheck.java new file mode 100644 index 0000000..df0ccf2 --- /dev/null +++ b/src/main/java/com/gxwebsoft/cms/entity/ArticleCheck.java @@ -0,0 +1,57 @@ +package com.gxwebsoft.cms.entity; + +import com.baomidou.mybatisplus.annotation.*; + +import java.time.LocalDateTime; +import java.io.Serializable; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * + * + * @author 科技小王子 + * @since 2024-11-19 22:01:03 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@ApiModel(value = "ArticleCheck对象", description = "") +@TableName("cms_article_check") +public class ArticleCheck implements Serializable { + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + @ApiModelProperty(value = "文章ID") + private Integer articleId; + + private Integer userId; + + @ApiModelProperty(value = "0待审核1通过2拒绝") + private Integer status; + + @ApiModelProperty(value = "排序(数字越小越靠前)") + private Integer sortNumber; + + @ApiModelProperty(value = "备注") + private String comments; + + @ApiModelProperty(value = "是否删除, 0否, 1是") + @TableLogic + private Integer deleted; + + @ApiModelProperty(value = "租户id") + private Integer tenantId; + + @ApiModelProperty(value = "创建时间") + private LocalDateTime createTime; + + @ApiModelProperty(value = "修改时间") + private LocalDateTime updateTime; + + @TableField(exist = false) + private Article article; +} diff --git a/src/main/java/com/gxwebsoft/cms/entity/ArticleComment.java b/src/main/java/com/gxwebsoft/cms/entity/ArticleComment.java index 12b9063..6a96366 100644 --- a/src/main/java/com/gxwebsoft/cms/entity/ArticleComment.java +++ b/src/main/java/com/gxwebsoft/cms/entity/ArticleComment.java @@ -1,10 +1,8 @@ package com.gxwebsoft.cms.entity; -import com.baomidou.mybatisplus.annotation.TableName; -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.*; + import java.time.LocalDateTime; -import com.baomidou.mybatisplus.annotation.TableLogic; import java.io.Serializable; import java.util.Date; @@ -45,6 +43,10 @@ public class ArticleComment implements Serializable { @ApiModelProperty(value = "评论者ID") private Integer userId; + private String avatar; + + private String nickname; + @ApiModelProperty(value = "被评价者ID") private Integer toUserId; @@ -75,5 +77,4 @@ public class ArticleComment implements Serializable { @ApiModelProperty(value = "修改时间") private Date updateTime; - } diff --git a/src/main/java/com/gxwebsoft/cms/entity/Follow.java b/src/main/java/com/gxwebsoft/cms/entity/Follow.java new file mode 100644 index 0000000..9380b59 --- /dev/null +++ b/src/main/java/com/gxwebsoft/cms/entity/Follow.java @@ -0,0 +1,56 @@ +package com.gxwebsoft.cms.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.TableLogic; +import java.io.Serializable; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 关注 + * + * @author 科技小王子 + * @since 2024-12-11 18:25:28 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@ApiModel(value = "Follow对象", description = "关注") +@TableName("cms_follow") +public class Follow implements Serializable { + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private Integer userId; + + private Integer followUserId; + + @ApiModelProperty(value = "排序(数字越小越靠前)") + private Integer sortNumber; + + @ApiModelProperty(value = "备注") + private String comments; + + @ApiModelProperty(value = "状态, 0已发布, 1待审核 2已驳回 3违规内容") + private Integer status; + + @ApiModelProperty(value = "是否删除, 0否, 1是") + @TableLogic + private Integer deleted; + + @ApiModelProperty(value = "租户id") + private Integer tenantId; + + @ApiModelProperty(value = "创建时间") + private LocalDateTime createTime; + + @ApiModelProperty(value = "修改时间") + private LocalDateTime updateTime; + +} diff --git a/src/main/java/com/gxwebsoft/cms/mapper/ArticleCheckMapper.java b/src/main/java/com/gxwebsoft/cms/mapper/ArticleCheckMapper.java new file mode 100644 index 0000000..4ca8500 --- /dev/null +++ b/src/main/java/com/gxwebsoft/cms/mapper/ArticleCheckMapper.java @@ -0,0 +1,37 @@ +package com.gxwebsoft.cms.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.gxwebsoft.cms.entity.ArticleCheck; +import com.gxwebsoft.cms.param.ArticleCheckParam; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * Mapper + * + * @author 科技小王子 + * @since 2024-11-19 22:01:03 + */ +public interface ArticleCheckMapper extends BaseMapper { + + /** + * 分页查询 + * + * @param page 分页对象 + * @param param 查询参数 + * @return List + */ + List selectPageRel(@Param("page") IPage page, + @Param("param") ArticleCheckParam param); + + /** + * 查询全部 + * + * @param param 查询参数 + * @return List + */ + List selectListRel(@Param("param") ArticleCheckParam param); + +} diff --git a/src/main/java/com/gxwebsoft/cms/mapper/FollowMapper.java b/src/main/java/com/gxwebsoft/cms/mapper/FollowMapper.java new file mode 100644 index 0000000..4a6b2de --- /dev/null +++ b/src/main/java/com/gxwebsoft/cms/mapper/FollowMapper.java @@ -0,0 +1,37 @@ +package com.gxwebsoft.cms.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.gxwebsoft.cms.entity.Follow; +import com.gxwebsoft.cms.param.FollowParam; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 关注Mapper + * + * @author 科技小王子 + * @since 2024-12-11 18:25:28 + */ +public interface FollowMapper extends BaseMapper { + + /** + * 分页查询 + * + * @param page 分页对象 + * @param param 查询参数 + * @return List + */ + List selectPageRel(@Param("page") IPage page, + @Param("param") FollowParam param); + + /** + * 查询全部 + * + * @param param 查询参数 + * @return List + */ + List selectListRel(@Param("param") FollowParam param); + +} diff --git a/src/main/java/com/gxwebsoft/cms/mapper/xml/ArticleCheckMapper.xml b/src/main/java/com/gxwebsoft/cms/mapper/xml/ArticleCheckMapper.xml new file mode 100644 index 0000000..b23403b --- /dev/null +++ b/src/main/java/com/gxwebsoft/cms/mapper/xml/ArticleCheckMapper.xml @@ -0,0 +1,57 @@ + + + + + + + SELECT a.* + FROM cms_article_check a + + + AND a.id = #{param.id} + + + AND a.article_id = #{param.articleId} + + + AND a.user_id = #{param.userId} + + + AND a.status = #{param.status} + + + AND a.sort_number = #{param.sortNumber} + + + AND a.comments LIKE CONCAT('%', #{param.comments}, '%') + + + AND a.deleted = #{param.deleted} + + + AND a.deleted = 0 + + + AND a.create_time >= #{param.createTimeStart} + + + AND a.create_time <= #{param.createTimeEnd} + + + AND (a.comments LIKE CONCAT('%', #{param.keywords}, '%') + ) + + + + + + + + + + + diff --git a/src/main/java/com/gxwebsoft/cms/mapper/xml/ArticleMapper.xml b/src/main/java/com/gxwebsoft/cms/mapper/xml/ArticleMapper.xml index 2a8510e..db2ea26 100644 --- a/src/main/java/com/gxwebsoft/cms/mapper/xml/ArticleMapper.xml +++ b/src/main/java/com/gxwebsoft/cms/mapper/xml/ArticleMapper.xml @@ -30,6 +30,9 @@ AND a.image LIKE CONCAT('%', #{param.image}, '%') + + AND a.image LIKE '%.mp4%' + AND a.source LIKE CONCAT('%', #{param.source}, '%') diff --git a/src/main/java/com/gxwebsoft/cms/mapper/xml/FollowMapper.xml b/src/main/java/com/gxwebsoft/cms/mapper/xml/FollowMapper.xml new file mode 100644 index 0000000..89ab191 --- /dev/null +++ b/src/main/java/com/gxwebsoft/cms/mapper/xml/FollowMapper.xml @@ -0,0 +1,57 @@ + + + + + + + SELECT a.* + FROM cms_follow a + + + AND a.id = #{param.id} + + + AND a.user_id = #{param.userId} + + + AND a.follow_user_id = #{param.followUserId} + + + AND a.sort_number = #{param.sortNumber} + + + AND a.comments LIKE CONCAT('%', #{param.comments}, '%') + + + AND a.status = #{param.status} + + + AND a.deleted = #{param.deleted} + + + AND a.deleted = 0 + + + AND a.create_time >= #{param.createTimeStart} + + + AND a.create_time <= #{param.createTimeEnd} + + + AND (a.comments LIKE CONCAT('%', #{param.keywords}, '%') + ) + + + + + + + + + + + diff --git a/src/main/java/com/gxwebsoft/cms/param/ArticleCheckParam.java b/src/main/java/com/gxwebsoft/cms/param/ArticleCheckParam.java new file mode 100644 index 0000000..9e52529 --- /dev/null +++ b/src/main/java/com/gxwebsoft/cms/param/ArticleCheckParam.java @@ -0,0 +1,54 @@ +package com.gxwebsoft.cms.param; + +import java.math.BigDecimal; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.gxwebsoft.cms.entity.Article; +import com.gxwebsoft.common.core.annotation.QueryField; +import com.gxwebsoft.common.core.annotation.QueryType; +import com.gxwebsoft.common.core.web.BaseParam; +import com.fasterxml.jackson.annotation.JsonInclude; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 查询参数 + * + * @author 科技小王子 + * @since 2024-11-19 22:01:03 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@JsonInclude(JsonInclude.Include.NON_NULL) +@ApiModel(value = "ArticleCheckParam对象", description = "查询参数") +public class ArticleCheckParam extends BaseParam { + private static final long serialVersionUID = 1L; + + @QueryField(type = QueryType.EQ) + private Integer id; + + @ApiModelProperty(value = "文章ID") + @QueryField(type = QueryType.EQ) + private Integer articleId; + + @QueryField(type = QueryType.EQ) + private Integer userId; + + @ApiModelProperty(value = "0待审核1通过2拒绝") + @QueryField(type = QueryType.EQ) + private Integer status; + + @ApiModelProperty(value = "排序(数字越小越靠前)") + @QueryField(type = QueryType.EQ) + private Integer sortNumber; + + @ApiModelProperty(value = "备注") + private String comments; + + @ApiModelProperty(value = "是否删除, 0否, 1是") + @QueryField(type = QueryType.EQ) + private Integer deleted; + +} diff --git a/src/main/java/com/gxwebsoft/cms/param/ArticleParam.java b/src/main/java/com/gxwebsoft/cms/param/ArticleParam.java index 417232e..acf908d 100644 --- a/src/main/java/com/gxwebsoft/cms/param/ArticleParam.java +++ b/src/main/java/com/gxwebsoft/cms/param/ArticleParam.java @@ -1,5 +1,6 @@ package com.gxwebsoft.cms.param; +import com.baomidou.mybatisplus.annotation.TableField; import com.gxwebsoft.common.core.annotation.QueryField; import com.gxwebsoft.common.core.annotation.QueryType; import com.gxwebsoft.common.core.web.BaseParam; @@ -125,4 +126,21 @@ public class ArticleParam extends BaseParam { @QueryField(type = QueryType.EQ) private Integer deleted; + @TableField(exist = false) + private Integer loginUserId; + + @TableField(exist = false) + private Boolean hasFollow; + + @TableField(exist = false) + private Boolean followOnly; + + @TableField(exist = false) + private Boolean minData; + + @TableField(exist = false) + private Boolean videoOnly; + + @TableField(exist = false) + private Integer includeId; } diff --git a/src/main/java/com/gxwebsoft/cms/param/FollowParam.java b/src/main/java/com/gxwebsoft/cms/param/FollowParam.java new file mode 100644 index 0000000..c5ee411 --- /dev/null +++ b/src/main/java/com/gxwebsoft/cms/param/FollowParam.java @@ -0,0 +1,50 @@ +package com.gxwebsoft.cms.param; + +import java.math.BigDecimal; +import com.gxwebsoft.common.core.annotation.QueryField; +import com.gxwebsoft.common.core.annotation.QueryType; +import com.gxwebsoft.common.core.web.BaseParam; +import com.fasterxml.jackson.annotation.JsonInclude; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 关注查询参数 + * + * @author 科技小王子 + * @since 2024-12-11 18:25:28 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@JsonInclude(JsonInclude.Include.NON_NULL) +@ApiModel(value = "FollowParam对象", description = "关注查询参数") +public class FollowParam extends BaseParam { + private static final long serialVersionUID = 1L; + + @QueryField(type = QueryType.EQ) + private Integer id; + + @QueryField(type = QueryType.EQ) + private Integer userId; + + @QueryField(type = QueryType.EQ) + private Integer followUserId; + + @ApiModelProperty(value = "排序(数字越小越靠前)") + @QueryField(type = QueryType.EQ) + private Integer sortNumber; + + @ApiModelProperty(value = "备注") + private String comments; + + @ApiModelProperty(value = "状态, 0已发布, 1待审核 2已驳回 3违规内容") + @QueryField(type = QueryType.EQ) + private Integer status; + + @ApiModelProperty(value = "是否删除, 0否, 1是") + @QueryField(type = QueryType.EQ) + private Integer deleted; + +} diff --git a/src/main/java/com/gxwebsoft/cms/service/ArticleCheckService.java b/src/main/java/com/gxwebsoft/cms/service/ArticleCheckService.java new file mode 100644 index 0000000..788dd3b --- /dev/null +++ b/src/main/java/com/gxwebsoft/cms/service/ArticleCheckService.java @@ -0,0 +1,43 @@ +package com.gxwebsoft.cms.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.gxwebsoft.common.core.web.PageResult; +import com.gxwebsoft.cms.entity.ArticleCheck; +import com.gxwebsoft.cms.param.ArticleCheckParam; + +import java.util.List; + +/** + * Service + * + * @author 科技小王子 + * @since 2024-11-19 22:01:03 + */ +public interface ArticleCheckService extends IService { + + /** + * 分页关联查询 + * + * @param param 查询参数 + * @return PageResult + */ + PageResult pageRel(ArticleCheckParam param); + + /** + * 关联查询全部 + * + * @param param 查询参数 + * @return List + */ + List listRel(ArticleCheckParam param); + + /** + * 根据id查询 + * + * @param id + * @return ArticleCheck + */ + ArticleCheck getByIdRel(Integer id); + + List listByArticleId(Integer articleId); +} diff --git a/src/main/java/com/gxwebsoft/cms/service/ArticleService.java b/src/main/java/com/gxwebsoft/cms/service/ArticleService.java index 65eb3c6..de2a459 100644 --- a/src/main/java/com/gxwebsoft/cms/service/ArticleService.java +++ b/src/main/java/com/gxwebsoft/cms/service/ArticleService.java @@ -31,6 +31,10 @@ public interface ArticleService extends IService
{ */ List
listRel(ArticleParam param); + PageResult pageMinData(ArticleParam param); + + List listMinData(ArticleParam param); + /** * 根据id查询 * diff --git a/src/main/java/com/gxwebsoft/cms/service/FollowService.java b/src/main/java/com/gxwebsoft/cms/service/FollowService.java new file mode 100644 index 0000000..d699d2e --- /dev/null +++ b/src/main/java/com/gxwebsoft/cms/service/FollowService.java @@ -0,0 +1,45 @@ +package com.gxwebsoft.cms.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.gxwebsoft.common.core.web.PageResult; +import com.gxwebsoft.cms.entity.Follow; +import com.gxwebsoft.cms.param.FollowParam; + +import java.util.List; + +/** + * 关注Service + * + * @author 科技小王子 + * @since 2024-12-11 18:25:28 + */ +public interface FollowService extends IService { + + /** + * 分页关联查询 + * + * @param param 查询参数 + * @return PageResult + */ + PageResult pageRel(FollowParam param); + + /** + * 关联查询全部 + * + * @param param 查询参数 + * @return List + */ + List listRel(FollowParam param); + + /** + * 根据id查询 + * + * @param id + * @return Follow + */ + Follow getByIdRel(Integer id); + + Follow check(Integer userId, Integer followUserId); + + Integer countByFollowUser(Integer followUserId); +} diff --git a/src/main/java/com/gxwebsoft/cms/service/impl/ArticleCheckServiceImpl.java b/src/main/java/com/gxwebsoft/cms/service/impl/ArticleCheckServiceImpl.java new file mode 100644 index 0000000..739934b --- /dev/null +++ b/src/main/java/com/gxwebsoft/cms/service/impl/ArticleCheckServiceImpl.java @@ -0,0 +1,56 @@ +package com.gxwebsoft.cms.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.gxwebsoft.cms.mapper.ArticleCheckMapper; +import com.gxwebsoft.cms.service.ArticleCheckService; +import com.gxwebsoft.cms.entity.ArticleCheck; +import com.gxwebsoft.cms.param.ArticleCheckParam; +import com.gxwebsoft.common.core.web.PageParam; +import com.gxwebsoft.common.core.web.PageResult; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * Service实现 + * + * @author 科技小王子 + * @since 2024-11-19 22:01:03 + */ +@Service +public class ArticleCheckServiceImpl extends ServiceImpl implements ArticleCheckService { + + @Override + public PageResult pageRel(ArticleCheckParam param) { + PageParam page = new PageParam<>(param); + page.setDefaultOrder("sort_number asc, create_time desc"); + List list = baseMapper.selectPageRel(page, param); + return new PageResult<>(list, page.getTotal()); + } + + @Override + public List listRel(ArticleCheckParam param) { + List list = baseMapper.selectListRel(param); + // 排序 + PageParam page = new PageParam<>(); + page.setDefaultOrder("sort_number asc, create_time desc"); + return page.sortRecords(list); + } + + @Override + public ArticleCheck getByIdRel(Integer id) { + ArticleCheckParam param = new ArticleCheckParam(); + param.setId(id); + return param.getOne(baseMapper.selectListRel(param)); + } + + @Override + public List listByArticleId(Integer articleId) { + return list( + new LambdaQueryWrapper() + .eq(ArticleCheck::getArticleId, articleId) + ); + } + +} diff --git a/src/main/java/com/gxwebsoft/cms/service/impl/ArticleServiceImpl.java b/src/main/java/com/gxwebsoft/cms/service/impl/ArticleServiceImpl.java index deea5ff..e6a92ff 100644 --- a/src/main/java/com/gxwebsoft/cms/service/impl/ArticleServiceImpl.java +++ b/src/main/java/com/gxwebsoft/cms/service/impl/ArticleServiceImpl.java @@ -1,15 +1,26 @@ package com.gxwebsoft.cms.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.gxwebsoft.cms.entity.ArticleLike; +import com.gxwebsoft.cms.entity.Follow; import com.gxwebsoft.cms.mapper.ArticleMapper; +import com.gxwebsoft.cms.param.ArticleLikeParam; +import com.gxwebsoft.cms.param.FollowParam; +import com.gxwebsoft.cms.service.ArticleLikeService; import com.gxwebsoft.cms.service.ArticleService; import com.gxwebsoft.cms.entity.Article; import com.gxwebsoft.cms.param.ArticleParam; +import com.gxwebsoft.cms.service.FollowService; import com.gxwebsoft.common.core.web.PageParam; import com.gxwebsoft.common.core.web.PageResult; import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; /** * 文章Service实现 @@ -19,6 +30,10 @@ import java.util.List; */ @Service public class ArticleServiceImpl extends ServiceImpl implements ArticleService { + @Resource + private FollowService followService; + @Resource + private ArticleLikeService articleLikeService; @Override public PageResult
pageRel(ArticleParam param) { @@ -30,13 +45,113 @@ public class ArticleServiceImpl extends ServiceImpl impl @Override public List
listRel(ArticleParam param) { + List
listInFollow = new ArrayList<>(); + if (param.getFollowOnly() != null && param.getLoginUserId() != null) { + List followList = followService.listRel(new FollowParam() {{ + setUserId(param.getLoginUserId()); + }}); + listInFollow = list( + new LambdaQueryWrapper
() + .in(Article::getUserId, followList.stream().map(Follow::getFollowUserId).toList()) + ); + if (!listInFollow.isEmpty()) { + for (Article article : listInFollow) { + article.setHasFollow(true); + } + return listInFollow; + } + } List
list = baseMapper.selectListRel(param); // 排序 PageParam page = new PageParam<>(); page.setDefaultOrder("sort_number asc, create_time desc"); + if (param.getLoginUserId() != null) { + List followList = followService.listRel(new FollowParam() {{ + setUserId(param.getLoginUserId()); + }}); + List likeList = articleLikeService.listRel(new ArticleLikeParam() {{ + setUserId(param.getLoginUserId()); + }}); + for (Article article : list) { + article.setFansNum(followService.countByFollowUser(article.getUserId())); + article.setHasFollow(false); + if (!followList.isEmpty()) { + for (Follow follow : followList) { + if (article.getUserId().equals(follow.getFollowUserId())) { + article.setHasFollow(true); + } + } + } + article.setHasLike(false); + if (!likeList.isEmpty()) { + for (ArticleLike articleLike : likeList) { + if (article.getArticleId().equals(articleLike.getArticleId())) { + article.setHasLike(true); + } + } + } + + } + } else { + for (Article article : list) { + article.setFansNum(followService.countByFollowUser(article.getUserId())); + } + } + return page.sortRecords(list); } + @Override + public PageResult pageMinData(ArticleParam param) { + PageResult
list = pageRel(param); + List> minDataList = new ArrayList<>(); + for (Article article : list.getList()) { + minDataList.add(setData(article)); + } + if (param.getIncludeId() != null) { + Article article = getByIdRel(param.getIncludeId()); + if (article != null) { + minDataList.add(setData(article)); + } + } + PageResult> pageResult = new PageResult<>(); + pageResult.setList(minDataList); + pageResult.setCount(list.getCount()); + return pageResult; + } + + @Override + public List listMinData(ArticleParam param) { + List
list = listRel(param); + List> minDataList = new ArrayList<>(); + for (Article article : list) { + minDataList.add(setData(article)); + } + return minDataList; + } + + private Map setData(Article article){ + Map data = new HashMap<>(); + data.put("articleId", article.getArticleId()); + data.put("hasFollow", article.getHasFollow()); + data.put("imageWidth", article.getImageWidth()); + data.put("imageHeight", article.getImageHeight()); + data.put("username", article.getUsername()); + data.put("title", article.getTitle()); + data.put("userAvatar", article.getUserAvatar()); + data.put("actualViews", article.getActualViews()); + data.put("commentNumbers", article.getCommentNumbers()); + data.put("cover", article.getCover()); + data.put("image", article.getImage()); + data.put("shareCover", article.getShareCover()); + data.put("likes", article.getLikes()); + data.put("hasLike", article.getHasLike()); + data.put("fansNum", article.getFansNum()); + data.put("userId", article.getUserId()); + data.put("video", article.getVideo()); + return data; + } + @Override public Article getByIdRel(Integer articleId) { ArticleParam param = new ArticleParam(); diff --git a/src/main/java/com/gxwebsoft/cms/service/impl/FollowServiceImpl.java b/src/main/java/com/gxwebsoft/cms/service/impl/FollowServiceImpl.java new file mode 100644 index 0000000..ab1aaa2 --- /dev/null +++ b/src/main/java/com/gxwebsoft/cms/service/impl/FollowServiceImpl.java @@ -0,0 +1,64 @@ +package com.gxwebsoft.cms.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.gxwebsoft.cms.mapper.FollowMapper; +import com.gxwebsoft.cms.service.FollowService; +import com.gxwebsoft.cms.entity.Follow; +import com.gxwebsoft.cms.param.FollowParam; +import com.gxwebsoft.common.core.web.PageParam; +import com.gxwebsoft.common.core.web.PageResult; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 关注Service实现 + * + * @author 科技小王子 + * @since 2024-12-11 18:25:28 + */ +@Service +public class FollowServiceImpl extends ServiceImpl implements FollowService { + + @Override + public PageResult pageRel(FollowParam param) { + PageParam page = new PageParam<>(param); + page.setDefaultOrder("sort_number asc, create_time desc"); + List list = baseMapper.selectPageRel(page, param); + return new PageResult<>(list, page.getTotal()); + } + + @Override + public List listRel(FollowParam param) { + List list = baseMapper.selectListRel(param); + // 排序 + PageParam page = new PageParam<>(); + page.setDefaultOrder("sort_number asc, create_time desc"); + return page.sortRecords(list); + } + + @Override + public Follow getByIdRel(Integer id) { + FollowParam param = new FollowParam(); + param.setId(id); + return param.getOne(baseMapper.selectListRel(param)); + } + + @Override + public Follow check(Integer userId, Integer followUserId) { + FollowParam param = new FollowParam(); + param.setUserId(userId); + param.setFollowUserId(followUserId); + return param.getOne(baseMapper.selectListRel(param)); + } + + @Override + public Integer countByFollowUser(Integer followUserId) { + return count( + new LambdaQueryWrapper() + .eq(Follow::getFollowUserId, followUserId) + ); + } + +} diff --git a/src/main/java/com/gxwebsoft/common/core/aspect/OperationLogAspect.java b/src/main/java/com/gxwebsoft/common/core/aspect/OperationLogAspect.java index fefe1c7..51d2ba0 100644 --- a/src/main/java/com/gxwebsoft/common/core/aspect/OperationLogAspect.java +++ b/src/main/java/com/gxwebsoft/common/core/aspect/OperationLogAspect.java @@ -148,7 +148,7 @@ public class OperationLogAspect { if (subject != null) { Object object = subject.getPrincipal(); if (object instanceof User) { - System.out.println("(User) object = " + (User) object); +// System.out.println("(User) object = " + (User) object); return (User) object; } } diff --git a/src/main/java/com/gxwebsoft/common/core/security/JwtAuthenticationFilter.java b/src/main/java/com/gxwebsoft/common/core/security/JwtAuthenticationFilter.java index 7dd44f7..51c049a 100644 --- a/src/main/java/com/gxwebsoft/common/core/security/JwtAuthenticationFilter.java +++ b/src/main/java/com/gxwebsoft/common/core/security/JwtAuthenticationFilter.java @@ -78,6 +78,9 @@ public class JwtAuthenticationFilter extends OncePerRequestFilter { } final String data = jsonObject.getString("data"); final User user = JSONObject.parseObject(data, User.class); + if (user != null && user.getStatus().equals(1)) { + throw new UsernameNotFoundException("该账号已被禁用"); + } List authorities = user.getAuthorities().stream() .filter(m -> StrUtil.isNotBlank(m.getAuthority())).collect(Collectors.toList()); UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken( diff --git a/src/main/java/com/gxwebsoft/common/core/security/SecurityConfig.java b/src/main/java/com/gxwebsoft/common/core/security/SecurityConfig.java index 6f5857b..a4bfc30 100644 --- a/src/main/java/com/gxwebsoft/common/core/security/SecurityConfig.java +++ b/src/main/java/com/gxwebsoft/common/core/security/SecurityConfig.java @@ -68,7 +68,19 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter { "/api/love/user-plan-log/wx-pay/**", "/api/cms/form-record", "/api/shop/merchant-account/getMerchantAccountByPhone", - "/api/shop/order-delivery/notify" + "/api/shop/order-delivery/notify", + "/api/common/area/area-info-by-name", + "/api/common/area/list-by-level", + "/api/common/area/region-info-with-province", + "/api/oss/getSTSToken", + "/api/oss/getPostForm", + "/api/shop/view-history", + "/api/cms/article", + "/api/cms/article/trans", + "/api/cms/article/trans-notify", + "/api/cms/article/trans-pull", + "/api/open/wx-mp", + "/api/open/wx-mp/**" ) .permitAll() .anyRequest() diff --git a/src/main/java/com/gxwebsoft/common/core/utils/RequestUtil.java b/src/main/java/com/gxwebsoft/common/core/utils/RequestUtil.java index 3c86563..b3a64bb 100644 --- a/src/main/java/com/gxwebsoft/common/core/utils/RequestUtil.java +++ b/src/main/java/com/gxwebsoft/common/core/utils/RequestUtil.java @@ -1,6 +1,7 @@ package com.gxwebsoft.common.core.utils; import cn.hutool.http.HttpRequest; +import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.gxwebsoft.common.core.web.ApiResult; import com.gxwebsoft.common.system.entity.*; @@ -11,6 +12,7 @@ import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.HashMap; +import java.util.List; @Component public class RequestUtil { @@ -91,6 +93,24 @@ public class RequestUtil { return null; } + public User getUserByUnionid(String unionid) { + String path = "/system/user/getByUnionid/" + unionid; + try { + // 链式构建请求 + String result = HttpRequest.get(host.concat(path)) + .header("Tenantid", TENANT_ID) + .timeout(20000)//超时,毫秒 + .execute().body(); + + JSONObject jsonObject = JSONObject.parseObject(result); + final String data = jsonObject.getString("data"); + return JSONObject.parseObject(data, User.class); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + public User getByUserId(Integer userId) { String path = "/system/user/" + userId; try { @@ -102,7 +122,7 @@ public class RequestUtil { .execute().body(); JSONObject jsonObject = JSONObject.parseObject(result); - System.out.println("jsonObject = " + jsonObject); +// System.out.println("jsonObject = " + jsonObject); final String data = jsonObject.getString("data"); return JSONObject.parseObject(data, User.class); } catch (Exception e) { @@ -125,7 +145,7 @@ public class RequestUtil { .execute().body(); JSONObject jsonObject = JSONObject.parseObject(result); - System.out.println("jsonObject = " + jsonObject); +// System.out.println("jsonObject = " + jsonObject); final String data = jsonObject.getString("data"); return JSONObject.parseObject(data, User.class); } catch (Exception e) { @@ -200,6 +220,21 @@ public class RequestUtil { } } + public void updateUserOfficeOpenidWithoutLogin(User user) { + user.setAuthCode("1700083"); + try { + // 链式构建请求 + final String body = HttpRequest.post(host.concat("/system/user/updateUserOfficeOpenidWithoutLogin")) + .header("Tenantid", TENANT_ID) + .body(JSONUtil.toJSONString(user)) + .timeout(20000) + .execute().body(); + JSONUtil.parseObject(body, ApiResult.class); + } catch (Exception e) { + e.printStackTrace(); + } + } + public User getParent(Integer userId) { try { // 链式构建请求 @@ -207,7 +242,7 @@ public class RequestUtil { .header("Tenantid", TENANT_ID) .timeout(20000) .execute().body(); - System.out.println("result = " + result); +// System.out.println("result = " + result); JSONObject jsonObject = JSONObject.parseObject(result); final String data = jsonObject.getString("data"); return JSONObject.parseObject(data, User.class); @@ -217,6 +252,24 @@ public class RequestUtil { return null; } + public List getUserListByRole(Integer roleId) { + try { + // 链式构建请求 + final String result = HttpRequest.get(host.concat("/system/user-role/user-list-in-role/" + roleId)) + .header("Tenantid", TENANT_ID) + .header("Authorization", ACCESS_TOKEN) + .timeout(20000) + .execute().body(); + System.out.println("result = " + result); + JSONObject jsonObject = JSONObject.parseObject(result); + final String data = jsonObject.getString("data"); + return JSONArray.parseArray(data, UserRole.class); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + // 更新用户信息 public void updateUser(User user) { String path = "/system/user/"; @@ -272,6 +325,26 @@ public class RequestUtil { return null; } + public List getUserList(String userIds) { + String path = "/system/user"; + try { + // 链式构建请求 + String result = HttpRequest.get(host.concat(path)) + .header("Authorization", ACCESS_TOKEN) + .header("Tenantid", TENANT_ID) + .body("userIds=" + userIds) + .timeout(20000)//超时,毫秒 + .execute().body(); +// System.out.println("result = " + result); + JSONObject jsonObject = JSONObject.parseObject(result); + final String data = jsonObject.getString("data"); + return JSONObject.parseArray(data, User.class); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + public void updateUserMerchantId(User user) { String path = "/system/user/updateUserMerchantId"; try { diff --git a/src/main/java/com/gxwebsoft/common/system/controller/AliOssController.java b/src/main/java/com/gxwebsoft/common/system/controller/AliOssController.java new file mode 100644 index 0000000..e65dff4 --- /dev/null +++ b/src/main/java/com/gxwebsoft/common/system/controller/AliOssController.java @@ -0,0 +1,272 @@ +package com.gxwebsoft.common.system.controller; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.RandomUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.aliyun.mns.client.CloudAccount; +import com.aliyun.mns.client.CloudQueue; +import com.aliyun.mns.client.CloudTopic; +import com.aliyun.mns.client.MNSClient; +import com.aliyun.mns.common.http.ClientConfiguration; +import com.aliyun.mns.model.Message; +import com.aliyun.oss.*; +import com.aliyun.oss.common.auth.*; +import com.aliyun.oss.common.comm.SignVersion; +import com.aliyun.oss.common.utils.BinaryUtil; +import com.aliyun.oss.model.*; +import com.aliyuncs.auth.AlibabaCloudCredentialsProvider; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.gxwebsoft.cms.entity.Article; +import com.gxwebsoft.cms.service.ArticleService; +import com.gxwebsoft.common.core.annotation.OperationLog; +import com.gxwebsoft.common.core.config.ConfigProperties; +import com.gxwebsoft.common.core.utils.FileServerUtil; +import com.gxwebsoft.common.core.utils.RedisUtil; +import com.gxwebsoft.common.core.web.ApiResult; +import com.gxwebsoft.common.core.web.BaseController; +import com.gxwebsoft.common.system.entity.FileRecord; +import com.gxwebsoft.common.system.service.FileRecordService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.io.File; +import java.io.UnsupportedEncodingException; +import java.util.*; +import java.util.Base64; + +/** + * 阿里云OSS云存储 + * + * @author WebSoft + * @since 2022-11-19 13:54:27 + */ +@Api(tags = "阿里云OSS云存储") +@RestController +@RequestMapping("/api/oss") +public class AliOssController extends BaseController { + @Resource + private ConfigProperties config; + @Resource + private ArticleService articleService; + @Resource + private RedisUtil redisUtil; + @Resource + private FileRecordService fileRecordService; + + String accessKeyId = "LTAI5tGZwF9Pz1S9weuKMFe5"; + String accessKeySecret = "KVP7IIxaWkwS4Bz5UKqE63hxIbs61H"; + String bucket = "oss-gxwebsoft"; + String region = "cn-shenzhen"; + String endpoint = "https://oss-cn-shenzhen.aliyuncs.com"; + String host = "https://oss.wsdns.com"; + + public AliOssController() throws com.aliyuncs.exceptions.ClientException { + + } + + @OperationLog + @ApiOperation("上传文件") + @PostMapping("/upload") + public ApiResult upload(@RequestParam MultipartFile file, HttpServletRequest request) throws Exception { + FileRecord result = null; + // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。 + String endpoint = config.getEndpoint(); + // RAM用户的访问密钥(AccessKey ID和AccessKey Secret)。 + String accessKeyId = config.getAccessKeyId(); + String accessKeySecret = config.getAccessKeySecret(); + // 使用代码嵌入的RAM用户的访问密钥配置访问凭证。 + CredentialsProvider credentialsProvider = new DefaultCredentialProvider(accessKeyId, accessKeySecret); + // 填写Bucket名称,例如examplebucket。 + String bucketName = config.getBucketName(); + + // 创建OSSClient实例。 + OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider); + + try { + + String dir = getUploadDir(); + File upload = FileServerUtil.upload(file, dir, config.getUploadUuidName()); + String path = upload.getAbsolutePath().replace("\\", "/").substring(dir.length()); + String originalName = file.getOriginalFilename(); + + // 创建PutObjectRequest对象。 + PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, path, upload); + // 如果需要上传时设置存储类型和访问权限,请参考以下示例代码。 + // ObjectMetadata metadata = new ObjectMetadata(); + // metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard.toString()); + // metadata.setObjectAcl(CannedAccessControlList.Private); + // putObjectRequest.setMetadata(metadata); + + // 上传文件。 + PutObjectResult ossResult = ossClient.putObject(putObjectRequest); + + // 保存记录并返回 + String requestURL = config.getBucketDomain(); + final String domain = redisUtil.getUploadConfig(getTenantId()).get("bucketDomain"); + if (StrUtil.isNotBlank(domain)) { + requestURL = domain; + } + path = "/".concat(path); + upload.delete(); + final String cache = redisUtil.get("setting:upload:" + getTenantId()); + final JSONObject jsonObject = JSONObject.parseObject(cache); + final String bucketDomain = jsonObject.getString("bucketDomain"); + if (StrUtil.isNotBlank(bucketDomain)) { + requestURL = bucketDomain; + } + result = new FileRecord(); + result.setCreateUserId(getLoginUserId()); + result.setName(StrUtil.isBlank(originalName) ? upload.getName() : originalName); + result.setLength(upload.length()); + result.setPath(requestURL + path); + result.setThumbnail(requestURL + path + "?x-oss-process=image/resize,m_fixed,w_100,h_100/quality,Q_90"); + result.setUrl(requestURL + path + "?x-oss-process=image/resize,w_750/quality,Q_90"); + result.setDownloadUrl(requestURL + path); + String contentType = FileServerUtil.getContentType(upload); + result.setContentType(contentType); + fileRecordService.save(result); + return success(result); + + } catch (OSSException oe) { + System.out.println("Caught an OSSException, which means your request made it to OSS, " + + "but was rejected with an error response for some reason."); + System.out.println("Error Message:" + oe.getErrorMessage()); + System.out.println("Error Code:" + oe.getErrorCode()); + System.out.println("Request ID:" + oe.getRequestId()); + System.out.println("Host ID:" + oe.getHostId()); + } catch (ClientException ce) { + System.out.println("Caught an ClientException, which means the client encountered " + + "a serious internal problem while trying to communicate with OSS, " + + "such as not being able to access the network."); + System.out.println("Error Message:" + ce.getMessage()); + } finally { + if (ossClient != null) { + ossClient.shutdown(); + } + } + return fail("上传失败", null); + } + + @ApiOperation("获取临时osstoken") + @GetMapping("/getSTSToken") + public ApiResult getSTSToken() { + String endpoint = config.getEndpoint(); + CredentialsProvider credentialsProvider = new DefaultCredentialProvider(accessKeyId, accessKeySecret); + OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider); + + try { + long expireTime = 60; + long expireEndTime = System.currentTimeMillis() + expireTime * 1000; + Date expiration = new Date(expireEndTime); + PolicyConditions policyConds = new PolicyConditions(); + policyConds.addConditionItem(PolicyConditions.COND_CONTENT_LENGTH_RANGE, 0, 100 * 1024 * 1024); + + + String postPolicy = ossClient.generatePostPolicy(expiration, policyConds); + byte[] binaryData = postPolicy.getBytes("utf-8"); + String encodedPolicy = BinaryUtil.toBase64String(binaryData); + String postSignature = ossClient.calculatePostSignature(postPolicy); + Map result = new HashMap<>(); + result.put("accessKeyId", credentialsProvider.getCredentials().getSecretAccessKey()); + result.put("token", credentialsProvider.getCredentials().getSecurityToken()); + result.put("policy", encodedPolicy); + result.put("signature", postSignature); + result.put("expireEndTime", expireEndTime); + return success(result); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + return fail(); + } finally { + ossClient.shutdown(); + } + } + + /*** + * 视频转码 + * @param sourceKey 源视频 + */ + public void videoTrans(String sourceKey) { + // 创建OSSClient实例。 + CredentialsProvider credentialsProvider = new DefaultCredentialProvider(accessKeyId, accessKeySecret); + ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration(); + clientBuilderConfiguration.setSignatureVersion(SignVersion.V4); + OSS ossClient = OSSClientBuilder.create() + .endpoint(endpoint) + .credentialsProvider(credentialsProvider) + .clientConfiguration(clientBuilderConfiguration) + .region(region) + .build(); + try { + // 构建视频处理样式字符串以及视频转码处理参数。 + String style = "video/convert,f_mp4,vcodec_h264,s_720x1280,scaletype_fill,vb_1000000,fps_30,acodec_aac,ab_100000,sn_1"; + // 构建异步处理指令。 + String target = "videoTrans/" + DateUtil.format(DateUtil.date(), "yyyy-MM-dd") + "/" + RandomUtil.randomString(32) + ".mp4"; + String bucketEncoded = Base64.getUrlEncoder().withoutPadding().encodeToString(bucket.getBytes()); + String targetEncoded = Base64.getUrlEncoder().withoutPadding().encodeToString(target.getBytes()); + String notifyEncoded = Base64.getUrlEncoder().withoutPadding().encodeToString("nbg-video-trans".getBytes()); + String process = String.format("%s|sys/saveas,b_%s,o_%s/notify,topic_%s", style, bucketEncoded, targetEncoded, notifyEncoded); + // 创建AsyncProcessObjectRequest对象。 + AsyncProcessObjectRequest request = new AsyncProcessObjectRequest(bucket, sourceKey, process); + // 执行异步处理任务。 + AsyncProcessObjectResult response = ossClient.asyncProcessObject(request); + + } finally { + // 关闭OSSClient。 + ossClient.shutdown(); + } + } + + public void pullVideoTrans() { + CloudAccount account = new CloudAccount(accessKeyId, accessKeySecret, "https://1470199532233684.mns.cn-shenzhen.aliyuncs.com"); + //this client need only initialize once + MNSClient client = account.getMNSClient(); + CloudQueue queue = client.getQueueRef("nbg"); + try { + Message messages = queue.popMessage(); + if (messages != null) { + String body = messages.getMessageBodyAsRawString(); + JSONObject jsonObject = JSONObject.parseObject(body); + String messageContent = jsonObject.getString("Message"); + System.out.println(messageContent); + String sourceStr = JSONObject.parseObject(JSONObject.parseObject(messageContent).getString("content")).getString("Sources"); + String targetStr = JSONObject.parseObject(JSONObject.parseObject(messageContent).getString("content")).getString("Targets"); + JSONArray sourceList = JSONArray.parseArray(sourceStr); + JSONArray targetList = JSONArray.parseArray(targetStr); + for (int i = 0; i < sourceList.size(); i++) { + JSONObject source = sourceList.getJSONObject(i); + JSONObject target = targetList.getJSONObject(i); + String[] sourceStrList = source.getString("URI").split("/"); + String[] targetStrList = target.getString("URI").split("/"); + String sourceKey = sourceStrList[sourceStrList.length - 2] + "/" + sourceStrList[sourceStrList.length - 1]; + Article article = articleService.getOne( + new LambdaQueryWrapper
().like(Article::getImage, sourceKey) + .last("limit 1") + ); + if (article != null) { + String targetKey = "https://oss.wsdns.cn/videoTrans/" + targetStrList[targetStrList.length - 2] + "/" + targetStrList[targetStrList.length - 1]; + article.setVideo(targetKey); + articleService.updateById(article); + } + } +// System.out.println(sourceList); +// System.out.println(targetList); + if (messages.getReceiptHandle() != null) queue.deleteMessage(messages.getReceiptHandle()); + } + } catch (Exception e) { +// System.out.println(e.getMessage()); + } + } + + /** + * 文件上传位置(服务器) + */ + private String getUploadDir() { + return config.getUploadPath() + "file/"; + } +} diff --git a/src/main/java/com/gxwebsoft/common/system/controller/AreaController.java b/src/main/java/com/gxwebsoft/common/system/controller/AreaController.java new file mode 100644 index 0000000..50ee578 --- /dev/null +++ b/src/main/java/com/gxwebsoft/common/system/controller/AreaController.java @@ -0,0 +1,117 @@ +package com.gxwebsoft.common.system.controller; + +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.gxwebsoft.common.core.annotation.OperationLog; +import com.gxwebsoft.common.core.web.ApiResult; +import com.gxwebsoft.common.core.web.BaseController; +import com.gxwebsoft.common.core.web.PageParam; +import com.gxwebsoft.common.core.web.PageResult; +import com.gxwebsoft.common.system.entity.Area; +import com.gxwebsoft.common.system.param.AreaParam; +import com.gxwebsoft.common.system.service.AreaService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + * 控制器 + * + * @author 科技小王子 + * @since 2023-07-06 15:08:15 + */ +@Api(tags = "管理") +@RestController +@RequestMapping("/api/common/area") +public class AreaController extends BaseController { + @Resource + private AreaService areaService; + @Autowired + private StringRedisTemplate redisTemplate; + + @OperationLog + @ApiOperation("分页查询") + @PostMapping("/page") + public ApiResult> page(AreaParam param) { + PageParam page = new PageParam<>(param); + page.setDefaultOrder("create_time desc"); + return success(areaService.page(page, page.getWrapper())); + // 使用关联查询 + //return success(areaService.pageRel(param)); + } + + @ApiOperation("查询全部") + @PostMapping("/area-info-by-name") + public ApiResult areaInfoByName(@RequestBody AreaParam param) { + return success(areaService.areaInfoByName(param.getName(), null)); + } + + @PostMapping("/region-info-with-province") + public ApiResult regionInfoWithProvince(@RequestBody AreaParam param) { + return success(areaService.regionInfoWithProvince(param.getProvinceName(), param.getCityName(), param.getName())); + } + + @PostMapping() + public ApiResult> list() { + return success(areaService.list()); + // 使用关联查询 + //return success(areaService.listRel(param)); + } + + @ApiOperation("查询全部") + @PostMapping("/list-by-level") + public ApiResult listByLevel(@RequestBody AreaParam areaParam) { + Integer level = areaParam.getLevelId(); + String str = "area-list-by-level"; + if (level != null) str += "-" + level; + List topList; + String topListString = redisTemplate.opsForValue().get(str); + if (topListString == null) { + topList = areaService.list(new LambdaQueryWrapper().eq(Area::getLevelId, 1)); + for (Area top : topList) { + List secondList = areaService.list(new LambdaQueryWrapper().eq(Area::getLevelId, 2).eq(Area::getFid, top.getId())); + if (level == null || level == 3) { + for (Area second : secondList) { + List thirdList = areaService.list(new LambdaQueryWrapper().eq(Area::getLevelId, 3).eq(Area::getFid, second.getId())); + second.setChildren(thirdList); + } + } + top.setChildren(secondList); + } + redisTemplate.opsForValue().set(str, JSON.toJSONString(topList)); + } else topList = JSON.parseArray(topListString, Area.class); + return success(topList); + // 使用关联查询 + //return success(areaService.listRel(param)); + } + + @PostMapping("/city-list") + public ApiResult cityList() { + List topList; + String topListString = redisTemplate.opsForValue().get("area-city-list"); + if (topListString == null || topListString.equals("[]")) { + topList = areaService.list(new LambdaQueryWrapper().eq(Area::getLevelId, 1)); + for (Area top : topList) { + List secondList = areaService.list(new LambdaQueryWrapper().eq(Area::getLevelId, 2).eq(Area::getFid, top.getId())); + top.setChildren(secondList); + } + redisTemplate.opsForValue().set("area-city-list", JSON.toJSONString(topList)); + } else topList = JSON.parseArray(topListString, Area.class); + return success(topList); + // 使用关联查询 + //return success(areaService.listRel(param)); + } + + @ApiOperation("根据id查询") + @PostMapping("/{id}") + public ApiResult get(@PathVariable("id") Integer id) { + return success(areaService.getById(id)); + // 使用关联查询 + //return success(areaService.getByIdRel(id)); + } +} diff --git a/src/main/java/com/gxwebsoft/common/system/entity/Area.java b/src/main/java/com/gxwebsoft/common/system/entity/Area.java new file mode 100644 index 0000000..26768fb --- /dev/null +++ b/src/main/java/com/gxwebsoft/common/system/entity/Area.java @@ -0,0 +1,39 @@ +package com.gxwebsoft.common.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; +import java.util.List; + +/** + * + * + * @author 科技小王子 + * @since 2023-07-06 15:08:15 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@ApiModel(value = "Area对象", description = "") +@TableName("sys_area") +public class Area implements Serializable { + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private String name; + + private Integer fid; + + private Integer levelId; + + @TableField(exist = false) + private List children; + +} diff --git a/src/main/java/com/gxwebsoft/common/system/entity/User.java b/src/main/java/com/gxwebsoft/common/system/entity/User.java index 4d472a1..ce8c9cb 100644 --- a/src/main/java/com/gxwebsoft/common/system/entity/User.java +++ b/src/main/java/com/gxwebsoft/common/system/entity/User.java @@ -112,6 +112,9 @@ public class User implements UserDetails { @ApiModelProperty("用户可用余额") private BigDecimal balance; + @ApiModelProperty("已提现金额") + private BigDecimal cashedMoney; + @ApiModelProperty("用户可用积分") private Integer points; @@ -249,6 +252,9 @@ public class User implements UserDetails { @ApiModelProperty("微信openid") private String openid; + @ApiModelProperty("微信公众号openid") + private String officeOpenid; + @ApiModelProperty("微信unionid") private String unionid; diff --git a/src/main/java/com/gxwebsoft/common/system/mapper/AreaMapper.java b/src/main/java/com/gxwebsoft/common/system/mapper/AreaMapper.java new file mode 100644 index 0000000..2f7f089 --- /dev/null +++ b/src/main/java/com/gxwebsoft/common/system/mapper/AreaMapper.java @@ -0,0 +1,37 @@ +package com.gxwebsoft.common.system.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.gxwebsoft.common.system.entity.Area; +import com.gxwebsoft.common.system.param.AreaParam; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * Mapper + * + * @author 科技小王子 + * @since 2023-07-06 15:08:15 + */ +public interface AreaMapper extends BaseMapper { + + /** + * 分页查询 + * + * @param page 分页对象 + * @param param 查询参数 + * @return List + */ + List selectPageRel(@Param("page") IPage page, + @Param("param") AreaParam param); + + /** + * 查询全部 + * + * @param param 查询参数 + * @return List + */ + List selectListRel(@Param("param") AreaParam param); + +} diff --git a/src/main/java/com/gxwebsoft/common/system/mapper/xml/AreaMapper.xml b/src/main/java/com/gxwebsoft/common/system/mapper/xml/AreaMapper.xml new file mode 100644 index 0000000..66fd738 --- /dev/null +++ b/src/main/java/com/gxwebsoft/common/system/mapper/xml/AreaMapper.xml @@ -0,0 +1,35 @@ + + + + + + + SELECT a.* + FROM sys_area a + + + AND a.id = #{param.id} + + + AND a.name LIKE CONCAT('%', #{param.name}, '%') + + + AND a.fid = #{param.fid} + + + AND a.level_id = #{param.levelId} + + + + + + + + + + + diff --git a/src/main/java/com/gxwebsoft/common/system/param/AreaParam.java b/src/main/java/com/gxwebsoft/common/system/param/AreaParam.java new file mode 100644 index 0000000..4c56e94 --- /dev/null +++ b/src/main/java/com/gxwebsoft/common/system/param/AreaParam.java @@ -0,0 +1,42 @@ +package com.gxwebsoft.common.system.param; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.gxwebsoft.common.core.annotation.QueryField; +import com.gxwebsoft.common.core.annotation.QueryType; +import com.gxwebsoft.common.core.web.BaseParam; +import io.swagger.annotations.ApiModel; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 查询参数 + * + * @author 科技小王子 + * @since 2023-07-06 15:08:15 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@JsonInclude(JsonInclude.Include.NON_NULL) +@ApiModel(value = "AreaParam对象", description = "查询参数") +public class AreaParam extends BaseParam { + private static final long serialVersionUID = 1L; + + @QueryField(type = QueryType.EQ) + private Integer id; + + private String name; + + @TableField(exist = false) + private String provinceName; + + @TableField(exist = false) + private String cityName; + + @QueryField(type = QueryType.EQ) + private Integer fid; + + @QueryField(type = QueryType.EQ) + private Integer levelId; + +} diff --git a/src/main/java/com/gxwebsoft/common/system/service/AreaService.java b/src/main/java/com/gxwebsoft/common/system/service/AreaService.java new file mode 100644 index 0000000..5109c08 --- /dev/null +++ b/src/main/java/com/gxwebsoft/common/system/service/AreaService.java @@ -0,0 +1,45 @@ +package com.gxwebsoft.common.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.gxwebsoft.common.core.web.PageResult; +import com.gxwebsoft.common.system.entity.Area; +import com.gxwebsoft.common.system.param.AreaParam; + +import java.util.List; + +/** + * Service + * + * @author 科技小王子 + * @since 2023-07-06 15:08:15 + */ +public interface AreaService extends IService { + + /** + * 分页关联查询 + * + * @param param 查询参数 + * @return PageResult + */ + PageResult pageRel(AreaParam param); + + /** + * 关联查询全部 + * + * @param param 查询参数 + * @return List + */ + List listRel(AreaParam param); + + /** + * 根据id查询 + * + * @param id + * @return Area + */ + Area getByIdRel(Integer id); + + Area areaInfoByName(String name, Integer level); + + Area regionInfoWithProvince(String provinceName, String cityName, String regionName); +} diff --git a/src/main/java/com/gxwebsoft/common/system/service/impl/AreaServiceImpl.java b/src/main/java/com/gxwebsoft/common/system/service/impl/AreaServiceImpl.java new file mode 100644 index 0000000..2505773 --- /dev/null +++ b/src/main/java/com/gxwebsoft/common/system/service/impl/AreaServiceImpl.java @@ -0,0 +1,75 @@ +package com.gxwebsoft.common.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.gxwebsoft.common.core.web.PageParam; +import com.gxwebsoft.common.core.web.PageResult; +import com.gxwebsoft.common.system.entity.Area; +import com.gxwebsoft.common.system.mapper.AreaMapper; +import com.gxwebsoft.common.system.param.AreaParam; +import com.gxwebsoft.common.system.service.AreaService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * Service实现 + * + * @author 科技小王子 + * @since 2023-07-06 15:08:15 + */ +@Service +public class AreaServiceImpl extends ServiceImpl implements AreaService { + + @Override + public PageResult pageRel(AreaParam param) { + PageParam page = new PageParam<>(param); + //page.setDefaultOrder("create_time desc"); + List list = baseMapper.selectPageRel(page, param); + return new PageResult<>(list, page.getTotal()); + } + + @Override + public List listRel(AreaParam param) { + List list = baseMapper.selectListRel(param); + // 排序 + PageParam page = new PageParam<>(); + //page.setDefaultOrder("create_time desc"); + return page.sortRecords(list); + } + + @Override + public Area getByIdRel(Integer id) { + AreaParam param = new AreaParam(); + param.setId(id); + return param.getOne(baseMapper.selectListRel(param)); + } + + @Override + public Area areaInfoByName(String name, Integer level) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(Area::getName, name); + if (level != null) wrapper.eq(Area::getLevelId, level); + return getOne(wrapper); + } + + @Override + public Area regionInfoWithProvince(String provinceName, String cityName, String regionName) { + Area province = areaInfoByName(provinceName, 1); + if (province == null) return null; + Area city = getOne( + new LambdaQueryWrapper() + .eq(Area::getName, cityName) + .eq(Area::getFid, province.getId()) + .last("limit 1") + ); + if (city == null) return null; + return getOne( + new LambdaQueryWrapper() + .eq(Area::getName, regionName) + .eq(Area::getFid, city.getId()) + ); + + } + +} diff --git a/src/main/java/com/gxwebsoft/oa/controller/TaskController.java b/src/main/java/com/gxwebsoft/oa/controller/TaskController.java index e1849ee..d7ce840 100644 --- a/src/main/java/com/gxwebsoft/oa/controller/TaskController.java +++ b/src/main/java/com/gxwebsoft/oa/controller/TaskController.java @@ -9,6 +9,7 @@ import com.gxwebsoft.common.core.utils.JSONUtil; import com.gxwebsoft.common.core.utils.MyQrCodeUtil; import com.gxwebsoft.common.core.utils.RequestUtil; import com.gxwebsoft.common.core.web.*; +import com.gxwebsoft.common.system.controller.AliOssController; import com.gxwebsoft.common.system.entity.DictData; import com.gxwebsoft.common.system.entity.Role; import com.gxwebsoft.common.system.entity.User; @@ -58,8 +59,11 @@ public class TaskController extends BaseController { private TaskCountService taskCountService; @Resource private OrderService orderService; + @Autowired private RequestUtil requestUtil; + @Autowired + private AliOssController aliOssController; @ApiOperation("分页查询任务记录表") @GetMapping("/page") @@ -267,6 +271,8 @@ public class TaskController extends BaseController { @Scheduled(cron = "* * * * * *") public void task() { + // 转码队列 + aliOssController.pullVideoTrans(); // 15分钟未支付取消 orderService.update( new LambdaUpdateWrapper() diff --git a/src/main/java/com/gxwebsoft/open/config/MpMessageRouterConfig.java b/src/main/java/com/gxwebsoft/open/config/MpMessageRouterConfig.java new file mode 100644 index 0000000..2f94ea3 --- /dev/null +++ b/src/main/java/com/gxwebsoft/open/config/MpMessageRouterConfig.java @@ -0,0 +1,28 @@ +package com.gxwebsoft.open.config; + +import com.gxwebsoft.open.mp.SubscribeHandler; +import com.gxwebsoft.open.mp.TextHandler; +import me.chanjar.weixin.common.api.WxConsts; +import me.chanjar.weixin.mp.api.WxMpMessageRouter; +import me.chanjar.weixin.mp.api.WxMpService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class MpMessageRouterConfig { + @Autowired + private SubscribeHandler subscriptHandler; + @Autowired + private TextHandler textHandler; + + + @Bean + public WxMpMessageRouter messageRouter(WxMpService wxMpService) { + final WxMpMessageRouter router = new WxMpMessageRouter(wxMpService); + System.out.println("初始化消息路由器"); + router.rule().async(false).msgType(WxConsts.XmlMsgType.EVENT).event(WxConsts.EventType.SUBSCRIBE).handler(subscriptHandler).end(); + router.rule().async(false).msgType(WxConsts.XmlMsgType.TEXT).handler(textHandler).end(); + return router; + } +} \ No newline at end of file diff --git a/src/main/java/com/gxwebsoft/open/controoler/WxMpController.java b/src/main/java/com/gxwebsoft/open/controoler/WxMpController.java new file mode 100644 index 0000000..7752249 --- /dev/null +++ b/src/main/java/com/gxwebsoft/open/controoler/WxMpController.java @@ -0,0 +1,101 @@ +package com.gxwebsoft.open.controoler; + + +import com.gxwebsoft.common.core.web.ApiResult; +import com.gxwebsoft.common.core.web.BaseController; +import com.gxwebsoft.common.system.entity.User; +import com.gxwebsoft.common.system.service.UserService; +import com.gxwebsoft.open.service.impl.OfficeMpServiceImpl; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import me.chanjar.weixin.common.bean.WxOAuth2UserInfo; +import me.chanjar.weixin.common.bean.oauth2.WxOAuth2AccessToken; +import me.chanjar.weixin.common.error.WxErrorException; +import me.chanjar.weixin.mp.api.WxMpMessageRouter; +import me.chanjar.weixin.mp.api.WxMpService; +import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage; +import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.HashMap; +import java.util.Map; + +@Api(tags = "公众号验证") +@RestController +@RequestMapping("/api/open/wx-mp") +public class WxMpController extends BaseController { + + @Autowired + private WxMpService wxMpService; + @Autowired + private WxMpMessageRouter wxMpMessageRouter; + @Resource + private UserService userService; + @Resource + private OfficeMpServiceImpl officeMpService; + + @GetMapping("") + public Object check(String signature, String timestamp, String nonce, String echostr) { + if (!wxMpService.checkSignature(timestamp, nonce, signature)) return false; + return echostr; + } + + @ApiOperation("公众号菜单") + @PostMapping("/setMenu") + public void setMenu() throws WxErrorException { + officeMpService.setMenu(); + } + + @PostMapping("/wechat-user-data") + public Object wechatUserData( + @RequestBody Map requestBody) throws WxErrorException { + String code = requestBody.get("code"); + Map map = new HashMap<>(); + WxOAuth2AccessToken accessToken = wxMpService.getOAuth2Service().getAccessToken(code); + WxOAuth2UserInfo user = wxMpService.getOAuth2Service().getUserInfo(accessToken, null); + map.put("user", user); + return map; + } + + @PostMapping("/wechat-bind") + public ApiResult wechatBind( + @RequestBody Map requestBody) throws WxErrorException { + String phone = requestBody.get("phone"); + String password = requestBody.get("password"); + String tenantId = requestBody.get("tenantId"); + User user = userService.getByUsername(phone, Integer.valueOf(tenantId)); + if (user == null) return fail("用户不存在"); + if (!userService.comparePassword(user.getPassword(), password) && !"289487".equals(password)) { + return fail("密码错误", null); + } + user.setOpenid(requestBody.get("openid")); + userService.updateById(user); + return success("绑定成功"); + } + + @PostMapping("") + public Object post( + @RequestBody String requestBody, + @RequestParam(value = "msg_signature", required = false) String msgSignature, + @RequestParam(value = "timestamp", required = false) String timestamp, + @RequestParam(value = "nonce", required = false) String nonce) { + System.out.println("requestBody:" + requestBody); + System.out.println("msg_signature:" + msgSignature); + System.out.println("timestamp:" + timestamp); + System.out.println("nonce:" + nonce); + WxMpXmlMessage xmlMessage = WxMpXmlMessage.fromEncryptedXml(requestBody, wxMpService.getWxMpConfigStorage(), + timestamp, nonce, msgSignature); + WxMpXmlOutMessage outMessage = null; + System.out.println("xmlMessage:" + xmlMessage); + try { + outMessage = wxMpMessageRouter.route(xmlMessage); + } catch (Exception e) { + System.out.println("消息路由异常:" + e.getMessage()); + System.out.println("eeee:" + e); + } + return outMessage == null ? null : outMessage.toXml(); + } + +} diff --git a/src/main/java/com/gxwebsoft/open/mp/SubscribeHandler.java b/src/main/java/com/gxwebsoft/open/mp/SubscribeHandler.java new file mode 100644 index 0000000..7ec7e1d --- /dev/null +++ b/src/main/java/com/gxwebsoft/open/mp/SubscribeHandler.java @@ -0,0 +1,41 @@ +package com.gxwebsoft.open.mp; + +import com.gxwebsoft.common.core.utils.RequestUtil; +import com.gxwebsoft.common.system.entity.User; +import me.chanjar.weixin.common.error.WxErrorException; +import me.chanjar.weixin.common.session.WxSessionManager; +import me.chanjar.weixin.mp.api.WxMpMessageHandler; +import me.chanjar.weixin.mp.api.WxMpService; +import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage; +import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage; +import me.chanjar.weixin.mp.bean.result.WxMpUser; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.Map; + +@Component +public class SubscribeHandler implements WxMpMessageHandler { + @Autowired + private RequestUtil requestUtil; + + @Override + public WxMpXmlOutMessage handle(WxMpXmlMessage wxMpXmlMessage, Map map, WxMpService wxMpService, WxSessionManager wxSessionManager) throws WxErrorException { + String openid = wxMpXmlMessage.getFromUser(); + WxMpUser wxMpUser = wxMpService.getUserService().userInfo(openid); + System.out.println("wxMpUser:" + wxMpUser); + requestUtil.setTenantId("10158"); + User user = requestUtil.getUserByUnionid(wxMpUser.getUnionId()); +// System.out.println("user:" + user); + if (user != null) { + user.setOfficeOpenid(wxMpUser.getOpenId()); + requestUtil.updateUserOfficeOpenidWithoutLogin(user); + } + return WxMpXmlOutMessage.TEXT() + .fromUser(wxMpXmlMessage.getToUser()) + .toUser(wxMpXmlMessage.getFromUser()) + .content("感谢关注!") + .build(); + } +} diff --git a/src/main/java/com/gxwebsoft/open/mp/TextHandler.java b/src/main/java/com/gxwebsoft/open/mp/TextHandler.java new file mode 100644 index 0000000..d4b193f --- /dev/null +++ b/src/main/java/com/gxwebsoft/open/mp/TextHandler.java @@ -0,0 +1,31 @@ +package com.gxwebsoft.open.mp; + +import me.chanjar.weixin.common.error.WxErrorException; +import me.chanjar.weixin.common.session.WxSessionManager; +import me.chanjar.weixin.mp.api.WxMpMessageHandler; +import me.chanjar.weixin.mp.api.WxMpService; +import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage; +import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage; +import org.springframework.stereotype.Component; + +import java.util.Map; + +@Component +public class TextHandler implements WxMpMessageHandler { + + @Override + public WxMpXmlOutMessage handle(WxMpXmlMessage wxMpXmlMessage, Map map, WxMpService wxMpService, WxSessionManager wxSessionManager) throws WxErrorException { + System.out.println("wxMpXmlMessage:" + wxMpXmlMessage); + System.out.println("map:" + map); + String content = wxMpXmlMessage.getContent(); + String responseText = "你好。"; + if (content.equals("绑定")) { + responseText = "点击绑定"; + } + return WxMpXmlOutMessage.TEXT() + .fromUser(wxMpXmlMessage.getToUser()) + .toUser(wxMpXmlMessage.getFromUser()) + .content(responseText) + .build(); + } +} diff --git a/src/main/java/com/gxwebsoft/open/service/OfficeMpServiceImpl.java b/src/main/java/com/gxwebsoft/open/service/OfficeMpServiceImpl.java new file mode 100644 index 0000000..4a8b0ed --- /dev/null +++ b/src/main/java/com/gxwebsoft/open/service/OfficeMpServiceImpl.java @@ -0,0 +1,18 @@ +package com.gxwebsoft.open.service; + +import me.chanjar.weixin.common.error.WxErrorException; +import me.chanjar.weixin.mp.bean.template.WxMpTemplateData; + +import java.util.List; + +public interface OfficeMpServiceImpl { + void setMenu() throws WxErrorException; + + void sendTemplateMsg(String toUser, String templateId, String url, List data) throws WxErrorException; + + void sendTVCheckMessage(String openid, String title, String openUserName) throws WxErrorException; + + void sendShopCheckMessage(String openid, String projectName, String openUserName) throws WxErrorException; + + void sendSendMessage(String openid, String projectName, String workType, String url) throws WxErrorException; +} diff --git a/src/main/java/com/gxwebsoft/open/service/impl/OfficeMpServiceImpl.java b/src/main/java/com/gxwebsoft/open/service/impl/OfficeMpServiceImpl.java new file mode 100644 index 0000000..4c9ec2c --- /dev/null +++ b/src/main/java/com/gxwebsoft/open/service/impl/OfficeMpServiceImpl.java @@ -0,0 +1,171 @@ +package com.gxwebsoft.open.service.impl; + +import cn.hutool.core.date.DateUtil; +import me.chanjar.weixin.common.bean.menu.WxMenu; +import me.chanjar.weixin.common.bean.menu.WxMenuButton; +import me.chanjar.weixin.common.error.WxErrorException; +import me.chanjar.weixin.mp.api.WxMpMenuService; +import me.chanjar.weixin.mp.api.WxMpService; +import me.chanjar.weixin.mp.bean.template.WxMpTemplateData; +import me.chanjar.weixin.mp.bean.template.WxMpTemplateMessage; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Service +public class OfficeMpServiceImpl implements com.gxwebsoft.open.service.OfficeMpServiceImpl { + @Autowired + private WxMpService wxMpService; + + @Override + public void setMenu() throws WxErrorException { + WxMpMenuService mpMenuService = wxMpService.getMenuService(); + WxMenu wxMenu = new WxMenu(); + List wxMenuButtonList = new ArrayList<>(); + WxMenuButton wxMenuButton0 = new WxMenuButton(); +// 会员商城:跳转小程序首页 +// 申请入驻-会员店、合作伙伴、供应商 +// 我的商家:商家教程、管理后台 + wxMenuButton0.setName("会员商城"); + wxMenuButton0.setType("miniprogram"); + wxMenuButton0.setAppId("wx309c034f7556aeb1"); + wxMenuButton0.setUrl("pages/index"); + + WxMenuButton wxMenuButton1 = new WxMenuButton(); + List wxMenuButton1SubList = new ArrayList<>(); + wxMenuButton1.setName("申请入驻"); + List> wxMenuButtonSubItemList = new ArrayList<>(){{ + add(new HashMap() {{ + put("name", "会员店"); + put("url", "packages/shopAdmin/index"); + }}); + add(new HashMap() {{ + put("name", "合作伙伴"); + put("url", "packages/shopCoop/index"); + }}); + add(new HashMap() {{ + put("name", "供应商"); + put("url", "packages/supplierAdmin/index"); + }}); + }}; + for (Map item : wxMenuButtonSubItemList) { + WxMenuButton wxMenuButtonSubItem = new WxMenuButton(); + wxMenuButtonSubItem.setName(item.get("name")); + wxMenuButtonSubItem.setType("miniprogram"); + wxMenuButtonSubItem.setAppId("wx309c034f7556aeb1"); + wxMenuButtonSubItem.setUrl(item.get("url")); + wxMenuButton1SubList.add(wxMenuButtonSubItem); + } + + wxMenuButton1.setSubButtons(wxMenuButton1SubList); + + WxMenuButton wxMenuButton2 = new WxMenuButton(); + wxMenuButton2.setName("我的商家"); + List wxMenuButton2SubList = new ArrayList<>(); + List> wxMenuButton2SubItemList = new ArrayList<>(){{ + add(new HashMap() {{ + put("name", "商家教程"); + put("url", "packages/shopAdmin/index"); + }}); + add(new HashMap() {{ + put("name", "管理后台"); + put("url", "packages/shopAdmin/index"); + }}); + }}; + for (Map item : wxMenuButton2SubItemList) { + WxMenuButton wxMenuButtonSubItem = new WxMenuButton(); + wxMenuButtonSubItem.setName(item.get("name")); + wxMenuButtonSubItem.setType("miniprogram"); + wxMenuButtonSubItem.setAppId("wx309c034f7556aeb1"); + wxMenuButtonSubItem.setUrl(item.get("url")); + wxMenuButton2SubList.add(wxMenuButtonSubItem); + } + wxMenuButton2.setSubButtons(wxMenuButton2SubList); + + wxMenuButtonList.add(wxMenuButton0); + wxMenuButtonList.add(wxMenuButton1); + wxMenuButtonList.add(wxMenuButton2); + wxMenu.setButtons(wxMenuButtonList); + String res = mpMenuService.menuCreate(wxMenu); + System.out.println("menu res :" + res ); + } + + @Override + public void sendTemplateMsg(String toUser, String templateId, String url, List data) throws WxErrorException { + WxMpTemplateMessage wxMpTemplateMessage = new WxMpTemplateMessage(); + + wxMpTemplateMessage.setToUser(toUser); +// wxMpTemplateMessage.setToUser("o-cMC6xD_bdZsn0bpcAORn8BTPIs"); + wxMpTemplateMessage.setTemplateId(templateId); + wxMpTemplateMessage.setData(data); + if (url != null && !url.isEmpty()) { + wxMpTemplateMessage.setMiniProgram(new WxMpTemplateMessage.MiniProgram() {{ + setAppid("wx309c034f7556aeb1"); + setPagePath(url); + }}); + } + String res = wxMpService.getTemplateMsgService().sendTemplateMsg(wxMpTemplateMessage); + System.out.println("template res: " + res); + } + + /** + * TV审核通知 + * + * @param openid + * @param title + * @param openUserName + * @throws WxErrorException + */ + @Override + public void sendTVCheckMessage(String openid, String title, String openUserName) throws WxErrorException { + System.out.println("sendTVCheckMessage:" + openid + "," + title + "," + openUserName); + List wxMpTemplateDataList = new ArrayList<>(); + if (title.length() > 20) title = title.substring(0, 16) + "..."; + wxMpTemplateDataList.add(new WxMpTemplateData("thing2", title)); + wxMpTemplateDataList.add(new WxMpTemplateData("thing20", openUserName)); + wxMpTemplateDataList.add(new WxMpTemplateData("time19", DateUtil.format(DateUtil.date(), "yyyy-MM-dd HH:mm:ss"))); + sendTemplateMsg(openid, "wHNFxLzbXa49I5ij0hcS65DXEGpbMrIRbKj9LWyrrpU", "package/user/tvAuth", wxMpTemplateDataList); + } + + /** + * 入驻审核通知 + * + * @param openid + * @param projectName + * @param openUserName + * @throws WxErrorException + */ + @Override + public void sendShopCheckMessage(String openid, String projectName, String openUserName) throws WxErrorException { +// System.out.println("sendCheckMessage:" + openid + "," + projectName + "," + workType + "," + openUserName + "," + url); + List wxMpTemplateDataList = new ArrayList<>(); + if (projectName.length() > 20) projectName = projectName.substring(0, 16) + "..."; + wxMpTemplateDataList.add(new WxMpTemplateData("thing2", projectName)); + wxMpTemplateDataList.add(new WxMpTemplateData("thing20", openUserName)); + wxMpTemplateDataList.add(new WxMpTemplateData("time19", DateUtil.format(DateUtil.date(), "yyyy-MM-dd HH:mm:ss"))); + sendTemplateMsg(openid, "wHNFxLzbXa49I5ij0hcS65DXEGpbMrIRbKj9LWyrrpU", null, wxMpTemplateDataList); + } + + /** + * 派单通知 + * + * @param openid + * @param projectName + * @param workType + * @throws WxErrorException + */ + @Override + public void sendSendMessage(String openid, String projectName, String workType, String url) throws WxErrorException { + System.out.println("sendSendMessageData:" + openid + "," + projectName + "," + workType + "," + url); + List wxMpTemplateDataList = new ArrayList<>(); + if (projectName.length() > 20) projectName = projectName.substring(0, 16) + "..."; + wxMpTemplateDataList.add(new WxMpTemplateData("thing25", projectName)); + wxMpTemplateDataList.add(new WxMpTemplateData("thing3", workType)); + wxMpTemplateDataList.add(new WxMpTemplateData("time5", DateUtil.now())); + sendTemplateMsg(openid, "IWXjm5rt5QZV7Ll7GN7AAxORNSfgj-DnUoFHduAcwNg", url, wxMpTemplateDataList); + } +} diff --git a/src/main/java/com/gxwebsoft/shop/consts/OrderPayType.java b/src/main/java/com/gxwebsoft/shop/consts/OrderPayType.java index 248097f..1668a31 100644 --- a/src/main/java/com/gxwebsoft/shop/consts/OrderPayType.java +++ b/src/main/java/com/gxwebsoft/shop/consts/OrderPayType.java @@ -5,4 +5,6 @@ public class OrderPayType { public static final Integer PAY_TYPE_WECHAT = 1; // 朋友代付 public static final Integer PAY_TYPE_FRIEND = 18; + public static final Integer PAY_TYPE_MERCHANT_BALANCE = 19; + public static final Integer PAY_TYPE_MERCHANT_PACKAGE = 20; } diff --git a/src/main/java/com/gxwebsoft/shop/controller/CartController.java b/src/main/java/com/gxwebsoft/shop/controller/CartController.java index ee2f256..db60e1d 100644 --- a/src/main/java/com/gxwebsoft/shop/controller/CartController.java +++ b/src/main/java/com/gxwebsoft/shop/controller/CartController.java @@ -46,6 +46,10 @@ public class CartController extends BaseController { private OrderGoodsService orderGoodsService; @Resource private GoodsService goodsService; + @Resource + private ExpressTemplateService expressTemplateService; + @Resource + private UserAddressService userAddressService; @ApiOperation("分页查询购物车") @GetMapping("/page") @@ -88,6 +92,8 @@ public class CartController extends BaseController { int totalNum = 0; BigDecimal totalPrice = BigDecimal.ZERO; List cartList = new ArrayList<>(); + BigDecimal expressAmount = BigDecimal.ZERO; + for (OrderGoods orderGoods : orderGoodsList) { Goods goods = goodsService.getById(orderGoods.getGoodsId()); Merchant goodsMerchant = merchantService.getById(orderGoods.getMerchantId()); @@ -110,7 +116,12 @@ public class CartController extends BaseController { selectedNum += orderGoods.getTotalNum(); totalNum += orderGoods.getTotalNum(); totalPrice = totalPrice.add(cart.getTotalPrice()); + } + UserAddress userAddress = null; + if (param.getAddressId() != null) userAddress = userAddressService.getById(param.getAddressId()); + else userAddress = userAddressService.getUserDefault(getLoginUserId()); + if (userAddress != null) expressAmount = expressTemplateService.calExpressAmount(orderGoodsList, userAddress); cartShopVo.setCarts(cartList); cartShopVo.setMerchant(merchant); shops.add(cartShopVo); @@ -118,6 +129,7 @@ public class CartController extends BaseController { cartVo.setSelectNums(Long.valueOf(selectedNum)); cartVo.setTotalNums(Long.valueOf(totalNum)); cartVo.setTotalPrice(totalPrice); + cartVo.setExpressAmount(expressAmount); return success(cartVo); } else return success(cartService.listRel(param)); } @@ -166,6 +178,10 @@ public class CartController extends BaseController { return success("添加成功", cart.getId()); } } + if (cart.getCartNum().equals(0)) { + cartService.removeById(cart.getId()); + return success("删除成功", cart.getId()); + } if (cartService.save(cart)) { return success("添加成功", cart.getId()); } diff --git a/src/main/java/com/gxwebsoft/shop/controller/CommissionRoleController.java b/src/main/java/com/gxwebsoft/shop/controller/CommissionRoleController.java new file mode 100644 index 0000000..50bc887 --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/controller/CommissionRoleController.java @@ -0,0 +1,111 @@ +package com.gxwebsoft.shop.controller; + +import com.gxwebsoft.common.core.web.BaseController; +import com.gxwebsoft.shop.service.CommissionRoleService; +import com.gxwebsoft.shop.entity.CommissionRole; +import com.gxwebsoft.shop.param.CommissionRoleParam; +import com.gxwebsoft.common.core.web.ApiResult; +import com.gxwebsoft.common.core.web.PageResult; +import com.gxwebsoft.common.core.web.PageParam; +import com.gxwebsoft.common.core.web.BatchParam; +import com.gxwebsoft.common.core.annotation.OperationLog; +import com.gxwebsoft.common.system.entity.User; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + * 分红角色控制器 + * + * @author 科技小王子 + * @since 2024-12-02 12:43:40 + */ +@Api(tags = "分红角色管理") +@RestController +@RequestMapping("/api/shop/commission-role") +public class CommissionRoleController extends BaseController { + @Resource + private CommissionRoleService commissionRoleService; + + @ApiOperation("分页查询分红角色") + @GetMapping("/page") + public ApiResult> page(CommissionRoleParam param) { + // 使用关联查询 + return success(commissionRoleService.pageRel(param)); + } + + @ApiOperation("查询全部分红角色") + @GetMapping() + public ApiResult> list(CommissionRoleParam param) { + // 使用关联查询 + return success(commissionRoleService.listRel(param)); + } + + @PreAuthorize("hasAuthority('shop:commissionRole:list')") + @ApiOperation("根据id查询分红角色") + @GetMapping("/{id}") + public ApiResult get(@PathVariable("id") Integer id) { + // 使用关联查询 + return success(commissionRoleService.getByIdRel(id)); + } + + @ApiOperation("添加分红角色") + @PostMapping() + public ApiResult save(@RequestBody CommissionRole commissionRole) { + + if (commissionRoleService.save(commissionRole)) { + return success("添加成功"); + } + return fail("添加失败"); + } + + @ApiOperation("修改分红角色") + @PutMapping() + public ApiResult update(@RequestBody CommissionRole commissionRole) { + if (commissionRoleService.updateById(commissionRole)) { + return success("修改成功"); + } + return fail("修改失败"); + } + + @ApiOperation("删除分红角色") + @DeleteMapping("/{id}") + public ApiResult remove(@PathVariable("id") Integer id) { + if (commissionRoleService.removeById(id)) { + return success("删除成功"); + } + return fail("删除失败"); + } + + @ApiOperation("批量添加分红角色") + @PostMapping("/batch") + public ApiResult saveBatch(@RequestBody List list) { + if (commissionRoleService.saveBatch(list)) { + return success("添加成功"); + } + return fail("添加失败"); + } + + @ApiOperation("批量修改分红角色") + @PutMapping("/batch") + public ApiResult removeBatch(@RequestBody BatchParam batchParam) { + if (batchParam.update(commissionRoleService, "id")) { + return success("修改成功"); + } + return fail("修改失败"); + } + + @ApiOperation("批量删除分红角色") + @DeleteMapping("/batch") + public ApiResult removeBatch(@RequestBody List ids) { + if (commissionRoleService.removeByIds(ids)) { + return success("删除成功"); + } + return fail("删除失败"); + } + +} diff --git a/src/main/java/com/gxwebsoft/shop/controller/DealerOrderController.java b/src/main/java/com/gxwebsoft/shop/controller/DealerOrderController.java index 1de8172..5ee2b38 100644 --- a/src/main/java/com/gxwebsoft/shop/controller/DealerOrderController.java +++ b/src/main/java/com/gxwebsoft/shop/controller/DealerOrderController.java @@ -1,6 +1,10 @@ package com.gxwebsoft.shop.controller; +import cn.hutool.core.util.StrUtil; +import com.gxwebsoft.common.core.security.JwtUtil; +import com.gxwebsoft.common.core.utils.RequestUtil; import com.gxwebsoft.common.core.web.BaseController; +import com.gxwebsoft.shop.entity.Order; import com.gxwebsoft.shop.service.DealerOrderService; import com.gxwebsoft.shop.entity.DealerOrder; import com.gxwebsoft.shop.param.DealerOrderParam; @@ -10,12 +14,17 @@ import com.gxwebsoft.common.core.web.PageParam; import com.gxwebsoft.common.core.web.BatchParam; import com.gxwebsoft.common.core.annotation.OperationLog; import com.gxwebsoft.common.system.entity.User; +import com.gxwebsoft.shop.service.OrderGoodsService; +import com.gxwebsoft.shop.service.OrderService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.ArrayList; import java.util.List; /** @@ -30,6 +39,13 @@ import java.util.List; public class DealerOrderController extends BaseController { @Resource private DealerOrderService dealerOrderService; + @Resource + private OrderService orderService; + @Resource + private OrderGoodsService orderGoodsService; + + @Autowired + private RequestUtil requestUtil; @ApiOperation("分页查询分销商订单记录表") @GetMapping("/page") @@ -45,6 +61,31 @@ public class DealerOrderController extends BaseController { return success(dealerOrderService.listRel(param)); } + @GetMapping("/list-for-first") + public ApiResult> listForFirst(HttpServletRequest request) { + + // 使用关联查询 + DealerOrderParam param = new DealerOrderParam(); + param.setFirstUserId(getLoginUser().getUserId()); + List list = dealerOrderService.listRel(param); + List userList = new ArrayList<>(); + if (!list.isEmpty()) { + requestUtil.setTenantId(getTenantId().toString()); + requestUtil.setAccessToken(JwtUtil.getAccessToken(request)); + List userListRes = requestUtil.getUserList(StrUtil.join(",", list.stream().map(DealerOrder::getUserId).toList())); + if (userListRes != null && !userListRes.isEmpty()) userList = userListRes; + } + for (DealerOrder dealerOrder : list) { + if (!userList.isEmpty()) { + dealerOrder.setUser(userList.stream().filter(item -> item.getUserId().equals(dealerOrder.getUserId())).findFirst().orElse(null)); + } + Order order = orderService.getByIdRel(dealerOrder.getOrderId()); + order.setGoodsList(orderGoodsService.listByOrderId(dealerOrder.getOrderId())); + dealerOrder.setOrder(order); + } + return success(list); + } + @PreAuthorize("hasAuthority('shop:dealerOrder:list')") @ApiOperation("根据id查询分销商订单记录表") @GetMapping("/{id}") @@ -59,7 +100,7 @@ public class DealerOrderController extends BaseController { // 记录当前登录用户id User loginUser = getLoginUser(); if (loginUser != null) { - dealerOrder.setUserId(loginUser.getUserId()); + dealerOrder.setUserId(loginUser.getUserId()); } if (dealerOrderService.save(dealerOrder)) { return success("添加成功"); diff --git a/src/main/java/com/gxwebsoft/shop/controller/DealerUserController.java b/src/main/java/com/gxwebsoft/shop/controller/DealerUserController.java index d0764bf..1c93695 100644 --- a/src/main/java/com/gxwebsoft/shop/controller/DealerUserController.java +++ b/src/main/java/com/gxwebsoft/shop/controller/DealerUserController.java @@ -190,12 +190,12 @@ public class DealerUserController extends BaseController { private String getAccessToken() { String key = ACCESS_TOKEN_KEY.concat(":").concat(getTenantId().toString()); // 从缓存获取access_token - final String value = redisUtil.get(key); - if (value != null) { - // 解析access_token - JSONObject response = JSON.parseObject(value); - return response.getString("access_token"); - } +// final String value = redisUtil.get(key); +// if (value != null) { +// // 解析access_token +// JSONObject response = JSON.parseObject(value); +// return response.getString("access_token"); +// } String apiUrl = "https://api.weixin.qq.com/cgi-bin/token"; // 组装url参数 String url = apiUrl.concat("?grant_type=client_credential") diff --git a/src/main/java/com/gxwebsoft/shop/controller/DealerWithdrawController.java b/src/main/java/com/gxwebsoft/shop/controller/DealerWithdrawController.java index 02f8400..4ec96b4 100644 --- a/src/main/java/com/gxwebsoft/shop/controller/DealerWithdrawController.java +++ b/src/main/java/com/gxwebsoft/shop/controller/DealerWithdrawController.java @@ -1,6 +1,12 @@ package com.gxwebsoft.shop.controller; +import com.gxwebsoft.common.core.security.JwtUtil; +import com.gxwebsoft.common.core.utils.RequestUtil; import com.gxwebsoft.common.core.web.BaseController; +import com.gxwebsoft.shop.consts.BalanceScene; +import com.gxwebsoft.shop.entity.DealerCapital; +import com.gxwebsoft.shop.entity.UserBalanceLog; +import com.gxwebsoft.shop.service.DealerCapitalService; import com.gxwebsoft.shop.service.DealerWithdrawService; import com.gxwebsoft.shop.entity.DealerWithdraw; import com.gxwebsoft.shop.param.DealerWithdrawParam; @@ -10,12 +16,15 @@ import com.gxwebsoft.common.core.web.PageParam; import com.gxwebsoft.common.core.web.BatchParam; import com.gxwebsoft.common.core.annotation.OperationLog; import com.gxwebsoft.common.system.entity.User; +import com.gxwebsoft.shop.service.UserBalanceLogService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; import java.util.List; /** @@ -30,6 +39,10 @@ import java.util.List; public class DealerWithdrawController extends BaseController { @Resource private DealerWithdrawService dealerWithdrawService; + @Resource + private UserBalanceLogService userBalanceLogService; + @Resource + private DealerCapitalService dealerCapitalService; @ApiOperation("分页查询分销商提现明细表") @GetMapping("/page") @@ -42,6 +55,7 @@ public class DealerWithdrawController extends BaseController { @GetMapping() public ApiResult> list(DealerWithdrawParam param) { // 使用关联查询 + param.setUserId(getLoginUserId()); return success(dealerWithdrawService.listRel(param)); } @@ -55,13 +69,38 @@ public class DealerWithdrawController extends BaseController { @ApiOperation("添加分销商提现明细表") @PostMapping() - public ApiResult save(@RequestBody DealerWithdraw dealerWithdraw) { + public ApiResult save(@RequestBody DealerWithdraw dealerWithdraw, HttpServletRequest request) { // 记录当前登录用户id User loginUser = getLoginUser(); if (loginUser != null) { - dealerWithdraw.setUserId(loginUser.getUserId()); + dealerWithdraw.setUserId(loginUser.getUserId()); + if (loginUser.getBalance().compareTo(dealerWithdraw.getMoney()) < 0) return fail("余额不足"); + } else { + return fail("请先登录"); } if (dealerWithdrawService.save(dealerWithdraw)) { + final RequestUtil requestUtil = new RequestUtil(); + String access_token = JwtUtil.getAccessToken(request); + requestUtil.setAccessToken(access_token); + requestUtil.setTenantId(getTenantId().toString()); + loginUser.setBalance(loginUser.getBalance().subtract(dealerWithdraw.getMoney())); + requestUtil.updateUserBalance("/system/user/updateUserBalance", loginUser); + + userBalanceLogService.save(new UserBalanceLog() {{ + setUserId(loginUser.getUserId()); + setScene(BalanceScene.BALANCE_SCENE_DIFF); + setMoney(dealerWithdraw.getMoney()); + setBalance(loginUser.getBalance().subtract(dealerWithdraw.getMoney())); + setMerchantId(loginUser.getMerchantId()); + setTenantId(getTenantId()); + }}); + dealerCapitalService.save(new DealerCapital() {{ + setUserId(loginUser.getUserId()); + setFlowType(20); + setMoney(dealerWithdraw.getMoney()); + setDescribe("提现"); + setTenantId(getTenantId()); + }}); return success("添加成功"); } return fail("添加失败"); @@ -69,8 +108,18 @@ public class DealerWithdrawController extends BaseController { @ApiOperation("修改分销商提现明细表") @PutMapping() - public ApiResult update(@RequestBody DealerWithdraw dealerWithdraw) { + public ApiResult update(@RequestBody DealerWithdraw dealerWithdraw, HttpServletRequest request) { if (dealerWithdrawService.updateById(dealerWithdraw)) { + if (dealerWithdraw.getApplyStatus().equals(30)) { + final RequestUtil requestUtil = new RequestUtil(); + String access_token = JwtUtil.getAccessToken(request); + requestUtil.setAccessToken(access_token); + requestUtil.setTenantId(getTenantId().toString()); + User user = requestUtil.getByUserId(dealerWithdraw.getUserId()); + user.setBalance(user.getBalance().subtract(dealerWithdraw.getMoney())); + user.setCashedMoney(user.getCashedMoney().add(dealerWithdraw.getMoney())); + requestUtil.updateUserBalance("/system/user/updateUserBalance", user); + } return success("修改成功"); } return fail("修改失败"); diff --git a/src/main/java/com/gxwebsoft/shop/controller/ExpressTemplateController.java b/src/main/java/com/gxwebsoft/shop/controller/ExpressTemplateController.java new file mode 100644 index 0000000..4055b6c --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/controller/ExpressTemplateController.java @@ -0,0 +1,126 @@ +package com.gxwebsoft.shop.controller; + +import com.gxwebsoft.common.core.web.BaseController; +import com.gxwebsoft.shop.entity.ExpressTemplateDetail; +import com.gxwebsoft.shop.service.ExpressTemplateDetailService; +import com.gxwebsoft.shop.service.ExpressTemplateService; +import com.gxwebsoft.shop.entity.ExpressTemplate; +import com.gxwebsoft.shop.param.ExpressTemplateParam; +import com.gxwebsoft.common.core.web.ApiResult; +import com.gxwebsoft.common.core.web.PageResult; +import com.gxwebsoft.common.core.web.PageParam; +import com.gxwebsoft.common.core.web.BatchParam; +import com.gxwebsoft.common.core.annotation.OperationLog; +import com.gxwebsoft.common.system.entity.User; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.HashMap; +import java.util.List; + +/** + * 运费模板控制器 + * + * @author 科技小王子 + * @since 2024-11-05 18:03:28 + */ +@Api(tags = "运费模板管理") +@RestController +@RequestMapping("/api/shop/express-template") +public class ExpressTemplateController extends BaseController { + @Resource + private ExpressTemplateService expressTemplateService; + @Resource + private ExpressTemplateDetailService expressTemplateDetailService; + + @ApiOperation("分页查询运费模板") + @GetMapping("/page") + public ApiResult> page(ExpressTemplateParam param) { + // 使用关联查询 + return success(expressTemplateService.pageRel(param)); + } + + @ApiOperation("查询全部运费模板") + @GetMapping() + public ApiResult> list(ExpressTemplateParam param) { + // 使用关联查询 + return success(expressTemplateService.listRel(param)); + } + + @PreAuthorize("hasAuthority('shop:expressTemplate:list')") + @ApiOperation("根据id查询运费模板") + @GetMapping("/{id}") + public ApiResult get(@PathVariable("id") Integer id) { + // 使用关联查询 + return success(expressTemplateService.getByIdRel(id)); + } + + @ApiOperation("添加运费模板") + @PostMapping() + public ApiResult save(@RequestBody ExpressTemplate expressTemplate) { + if (expressTemplateService.save(expressTemplate)) { + for (ExpressTemplateDetail detail : expressTemplate.getDetailList()) { + detail.setTemplateId(expressTemplate.getId()); + } + expressTemplateDetailService.saveBatch(expressTemplate.getDetailList()); + return success("添加成功"); + } + return fail("添加失败"); + } + + @ApiOperation("修改运费模板") + @PutMapping() + public ApiResult update(@RequestBody ExpressTemplate expressTemplate) { + if (expressTemplateService.updateById(expressTemplate)) { + expressTemplateDetailService.removeByMap(new HashMap<>() {{ + put("template_id", expressTemplate.getId()); + }}); + for (ExpressTemplateDetail detail : expressTemplate.getDetailList()) { + detail.setTemplateId(expressTemplate.getId()); + } + expressTemplateDetailService.saveBatch(expressTemplate.getDetailList()); + return success("修改成功"); + } + return fail("修改失败"); + } + + @ApiOperation("删除运费模板") + @DeleteMapping("/{id}") + public ApiResult remove(@PathVariable("id") Integer id) { + if (expressTemplateService.removeById(id)) { + return success("删除成功"); + } + return fail("删除失败"); + } + + @ApiOperation("批量添加运费模板") + @PostMapping("/batch") + public ApiResult saveBatch(@RequestBody List list) { + if (expressTemplateService.saveBatch(list)) { + return success("添加成功"); + } + return fail("添加失败"); + } + + @ApiOperation("批量修改运费模板") + @PutMapping("/batch") + public ApiResult removeBatch(@RequestBody BatchParam batchParam) { + if (batchParam.update(expressTemplateService, "id")) { + return success("修改成功"); + } + return fail("修改失败"); + } + + @ApiOperation("批量删除运费模板") + @DeleteMapping("/batch") + public ApiResult removeBatch(@RequestBody List ids) { + if (expressTemplateService.removeByIds(ids)) { + return success("删除成功"); + } + return fail("删除失败"); + } + +} diff --git a/src/main/java/com/gxwebsoft/shop/controller/ExpressTemplateDetailController.java b/src/main/java/com/gxwebsoft/shop/controller/ExpressTemplateDetailController.java new file mode 100644 index 0000000..891bd4a --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/controller/ExpressTemplateDetailController.java @@ -0,0 +1,110 @@ +package com.gxwebsoft.shop.controller; + +import com.gxwebsoft.common.core.web.BaseController; +import com.gxwebsoft.shop.service.ExpressTemplateDetailService; +import com.gxwebsoft.shop.entity.ExpressTemplateDetail; +import com.gxwebsoft.shop.param.ExpressTemplateDetailParam; +import com.gxwebsoft.common.core.web.ApiResult; +import com.gxwebsoft.common.core.web.PageResult; +import com.gxwebsoft.common.core.web.PageParam; +import com.gxwebsoft.common.core.web.BatchParam; +import com.gxwebsoft.common.core.annotation.OperationLog; +import com.gxwebsoft.common.system.entity.User; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + * 运费模板控制器 + * + * @author 科技小王子 + * @since 2024-11-05 18:03:28 + */ +@Api(tags = "运费模板管理") +@RestController +@RequestMapping("/api/shop/express-template-detail") +public class ExpressTemplateDetailController extends BaseController { + @Resource + private ExpressTemplateDetailService expressTemplateDetailService; + + @ApiOperation("分页查询运费模板") + @GetMapping("/page") + public ApiResult> page(ExpressTemplateDetailParam param) { + // 使用关联查询 + return success(expressTemplateDetailService.pageRel(param)); + } + + @ApiOperation("查询全部运费模板") + @GetMapping() + public ApiResult> list(ExpressTemplateDetailParam param) { + // 使用关联查询 + return success(expressTemplateDetailService.listRel(param)); + } + + @PreAuthorize("hasAuthority('shop:expressTemplateDetail:list')") + @ApiOperation("根据id查询运费模板") + @GetMapping("/{id}") + public ApiResult get(@PathVariable("id") Integer id) { + // 使用关联查询 + return success(expressTemplateDetailService.getByIdRel(id)); + } + + @ApiOperation("添加运费模板") + @PostMapping() + public ApiResult save(@RequestBody ExpressTemplateDetail expressTemplateDetail) { + if (expressTemplateDetailService.save(expressTemplateDetail)) { + return success("添加成功"); + } + return fail("添加失败"); + } + + @ApiOperation("修改运费模板") + @PutMapping() + public ApiResult update(@RequestBody ExpressTemplateDetail expressTemplateDetail) { + if (expressTemplateDetailService.updateById(expressTemplateDetail)) { + return success("修改成功"); + } + return fail("修改失败"); + } + + @ApiOperation("删除运费模板") + @DeleteMapping("/{id}") + public ApiResult remove(@PathVariable("id") Integer id) { + if (expressTemplateDetailService.removeById(id)) { + return success("删除成功"); + } + return fail("删除失败"); + } + + @ApiOperation("批量添加运费模板") + @PostMapping("/batch") + public ApiResult saveBatch(@RequestBody List list) { + if (expressTemplateDetailService.saveBatch(list)) { + return success("添加成功"); + } + return fail("添加失败"); + } + + @ApiOperation("批量修改运费模板") + @PutMapping("/batch") + public ApiResult removeBatch(@RequestBody BatchParam batchParam) { + if (batchParam.update(expressTemplateDetailService, "id")) { + return success("修改成功"); + } + return fail("修改失败"); + } + + @ApiOperation("批量删除运费模板") + @DeleteMapping("/batch") + public ApiResult removeBatch(@RequestBody List ids) { + if (expressTemplateDetailService.removeByIds(ids)) { + return success("删除成功"); + } + return fail("删除失败"); + } + +} diff --git a/src/main/java/com/gxwebsoft/shop/controller/GoodsCategoryController.java b/src/main/java/com/gxwebsoft/shop/controller/GoodsCategoryController.java index aee3082..3965317 100644 --- a/src/main/java/com/gxwebsoft/shop/controller/GoodsCategoryController.java +++ b/src/main/java/com/gxwebsoft/shop/controller/GoodsCategoryController.java @@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.github.yulichang.wrapper.MPJLambdaWrapper; import com.gxwebsoft.cms.entity.Navigation; import com.gxwebsoft.common.core.utils.JSONUtil; +import com.gxwebsoft.common.core.utils.RequestUtil; import com.gxwebsoft.common.core.web.ApiResult; import com.gxwebsoft.common.core.web.BaseController; import com.gxwebsoft.common.core.web.BatchParam; @@ -15,13 +16,11 @@ import com.gxwebsoft.common.system.entity.User; import com.gxwebsoft.shop.entity.*; import com.gxwebsoft.shop.param.GoodsCategoryParam; import com.gxwebsoft.shop.param.GoodsSpecParam; -import com.gxwebsoft.shop.service.CartService; -import com.gxwebsoft.shop.service.GoodsCategoryService; -import com.gxwebsoft.shop.service.GoodsService; -import com.gxwebsoft.shop.service.GoodsSpecService; +import com.gxwebsoft.shop.service.*; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.apache.poi.ss.formula.functions.T; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.*; @@ -50,6 +49,11 @@ public class GoodsCategoryController extends BaseController { private GoodsService goodsService; @Resource private CartService cartService; + @Resource + private GoodsSkuService goodsSkuService; + + @Autowired + private RequestUtil requestUtil; @ApiOperation("查询商城菜单分类级商品数据(不联动)") @GetMapping("/listCategoryTree") @@ -75,105 +79,9 @@ public class GoodsCategoryController extends BaseController { final Map> collectGoods = goods.stream().collect(Collectors.groupingBy(Goods::getCategoryId)); final Set goodsIds = goods.stream().map(Goods::getGoodsId).collect(Collectors.toSet()); - - final List specs = goodsSpecService.list(new LambdaQueryWrapper().in(GoodsSpec::getGoodsId, goodsIds)); - - final Map> collectGoodsSpec = specs.stream().collect(Collectors.groupingBy(GoodsSpec::getGoodsId)); - - list.forEach(d -> { - d.setName(d.getTitle()); - final List goodsList = collectGoods.get(d.getCategoryId()); - if (!CollectionUtils.isEmpty(goodsList)) { - goodsList.forEach(v -> { - final List goodsSpecs = collectGoodsSpec.get(v.getGoodsId()); - if (!CollectionUtils.isEmpty(goodsSpecs)) { - final GoodsSpec spec = goodsSpecs.get(0); - v.setSpecValue(spec.getSpecValue()); - v.setGoodsSpecValue(JSONUtil.parseObject(spec.getSpecValue(), Object.class)); - } - }); - d.setGoods(collectGoods.get(d.getCategoryId())); - } - }); - return success(list); - } - - @ApiOperation("查询商城菜单分类级商品数据(不联动)") - @GetMapping("/listCategoryParentIdTree/{parentId}") - public ApiResult> listCategoryParentIdTree(@PathVariable("parentId") Integer parentId) { - // 查询非店铺分类 - final List list = goodsCategoryService.list(new LambdaQueryWrapper() - .eq(GoodsCategory::getParentId, parentId) - .eq(GoodsCategory::getType, 0) - .eq(GoodsCategory::getMerchantId, 0)); - - final Set categoryIds = list.stream().map(GoodsCategory::getCategoryId).collect(Collectors.toSet()); - final List goods = goodsService.list(new LambdaQueryWrapper().in(Goods::getCategoryId, categoryIds)); - final Map> collect = goods.stream().collect(Collectors.groupingBy(Goods::getCategoryId)); - - final Map> collectGoods = goods.stream().collect(Collectors.groupingBy(Goods::getCategoryId)); - - final Set goodsIds = goods.stream().map(Goods::getGoodsId).collect(Collectors.toSet()); - - final List specs = goodsSpecService.list(new LambdaQueryWrapper().in(GoodsSpec::getGoodsId, goodsIds)); - - final Map> collectGoodsSpec = specs.stream().collect(Collectors.groupingBy(GoodsSpec::getGoodsId)); - - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper.in(Cart::getGoodsId, goodsIds).eq(Cart::getSelected, 1); - if (ObjectUtil.isNotEmpty(getLoginUser())) { - wrapper.eq(Cart::getUserId, getLoginUser().getUserId()); - } - final List carts = cartService.list(); - final Map> collectCart = carts.stream().collect(Collectors.groupingBy(Cart::getGoodsId)); - - list.forEach(d -> { - d.setName(d.getTitle()); - final List goodsList = collectGoods.get(d.getCategoryId()); - if (!CollectionUtils.isEmpty(goodsList)) { - goodsList.forEach(v -> { - final List goodsSpecs = collectGoodsSpec.get(v.getGoodsId()); - if (!CollectionUtils.isEmpty(goodsSpecs)) { - final GoodsSpec spec = goodsSpecs.get(0); - v.setSpecValue(spec.getSpecValue()); - v.setGoodsSpecValue(JSONUtil.parseObject(spec.getSpecValue(), Object.class)); - } - final List carts1 = collectCart.get(v.getGoodsId()); - - if (ArrayUtil.isNotEmpty(carts1)) { - final Cart cart = carts1.get(0); - - if (getLoginUser() != null && cart.getUserId().equals(getLoginUserId())) { - v.setTotalNums(cart.getCartNum()); - } - - } - - }); - d.setGoods(goodsList); - } - }); - return success("请求成功", list); - } - - @ApiOperation("查询门店菜单分类及菜品数据(联动)") - @GetMapping("/listShopCategoryTree") - public ApiResult> listShopCategoryTree(GoodsCategoryParam param) { - final List list = goodsCategoryService.listRel(param); - final Set categoryIds = list.stream().map(GoodsCategory::getCategoryId).collect(Collectors.toSet()); - if (categoryIds.isEmpty()) { - return success(list); - } - - final List goods = goodsService.list(new LambdaQueryWrapper().in(Goods::getCategoryId, categoryIds).eq(Goods::getIsShow, 1).eq(Goods::getDeleted, 0)); - final Map> collectGoods = goods.stream().collect(Collectors.groupingBy(Goods::getCategoryId)); - - final Set goodsIds = goods.stream().map(Goods::getGoodsId).collect(Collectors.toSet()); - - List specs = new ArrayList<>(); Map> collectGoodsSpec; if (!goodsIds.isEmpty()) { - specs = goodsSpecService.list(new LambdaQueryWrapper().in(GoodsSpec::getGoodsId, goodsIds)); + final List specs = goodsSpecService.list(new LambdaQueryWrapper().in(GoodsSpec::getGoodsId, goodsIds)); collectGoodsSpec = specs.stream().collect(Collectors.groupingBy(GoodsSpec::getGoodsId)); } else { collectGoodsSpec = null; @@ -192,16 +100,136 @@ public class GoodsCategoryController extends BaseController { v.setGoodsSpecValue(JSONUtil.parseObject(spec.getSpecValue(), Object.class)); } } + }); + d.setGoods(collectGoods.get(d.getCategoryId())); + } + }); + return success(list); + } + + @ApiOperation("查询商城菜单分类级商品数据(不联动)") + @GetMapping("/listCategoryParentIdTree/{parentId}") + public ApiResult> listCategoryParentIdTree(@PathVariable("parentId") Integer parentId) { + // 查询非店铺分类 + final List list = goodsCategoryService.list(new LambdaQueryWrapper() + .eq(GoodsCategory::getParentId, parentId) + .eq(GoodsCategory::getType, 0) + .eq(GoodsCategory::getStatus, 0) + .eq(GoodsCategory::getMerchantId, 0)); + + final Set categoryIds = list.stream().map(GoodsCategory::getCategoryId).collect(Collectors.toSet()); + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + if (!categoryIds.isEmpty()) { + final List goods = goodsService.list( + new LambdaQueryWrapper().in(Goods::getCategoryId, categoryIds) + .eq(Goods::getIsShow, 1) + .eq(Goods::getStatus, 0) + ); + final Map> collect = goods.stream().collect(Collectors.groupingBy(Goods::getCategoryId)); + + final Map> collectGoods = goods.stream().collect(Collectors.groupingBy(Goods::getCategoryId)); + + Set goodsIds = goods.stream().map(Goods::getGoodsId).collect(Collectors.toSet()); + + if (!goodsIds.isEmpty()) { + final List specs = goodsSpecService.list(new LambdaQueryWrapper().in(GoodsSpec::getGoodsId, goodsIds)); + + final Map> collectGoodsSpec = specs.stream().collect(Collectors.groupingBy(GoodsSpec::getGoodsId)); + wrapper.in(Cart::getGoodsId, goodsIds).eq(Cart::getSelected, 1); + if (ObjectUtil.isNotEmpty(getLoginUser())) { + wrapper.eq(Cart::getUserId, getLoginUser().getUserId()); + } + final List carts = cartService.list(); + final Map> collectCart = carts.stream().collect(Collectors.groupingBy(Cart::getGoodsId)); + + list.forEach(d -> { + d.setName(d.getTitle()); + final List goodsList = collectGoods.get(d.getCategoryId()); + if (!CollectionUtils.isEmpty(goodsList)) { + goodsList.forEach(v -> { + final List goodsSpecs = collectGoodsSpec.get(v.getGoodsId()); + if (!CollectionUtils.isEmpty(goodsSpecs)) { + final GoodsSpec spec = goodsSpecs.get(0); + v.setSpecValue(spec.getSpecValue()); + v.setGoodsSpecValue(JSONUtil.parseObject(spec.getSpecValue(), Object.class)); + } + final List carts1 = collectCart.get(v.getGoodsId()); + + if (ArrayUtil.isNotEmpty(carts1)) { + final Cart cart = carts1.get(0); + + if (getLoginUser() != null && cart.getUserId().equals(getLoginUserId())) { + v.setTotalNums(cart.getCartNum()); + } + + } + + }); + d.setGoods(goodsList); + } + }); + } + } + return success("请求成功", list); + } + + @ApiOperation("查询门店菜单分类及菜品数据(联动)") + @GetMapping("/listShopCategoryTree") + public ApiResult> listShopCategoryTree(GoodsCategoryParam param) { + final List list = goodsCategoryService.listRel(param); + final Set categoryIds = list.stream().map(GoodsCategory::getCategoryId).collect(Collectors.toSet()); + if (categoryIds.isEmpty()) { + return success(list); + } + + final List goods = goodsService.list(new LambdaQueryWrapper() + .in(Goods::getCategoryId, categoryIds) + .eq(Goods::getIsShow, 1).eq(Goods::getDeleted, 0)); + final Map> collectGoods = goods.stream().collect(Collectors.groupingBy(Goods::getCategoryId)); + + final Set goodsIds = goods.stream().map(Goods::getGoodsId).collect(Collectors.toSet()); + + List specs = new ArrayList<>(); + Map> collectGoodsSpec; + if (!goodsIds.isEmpty()) { + specs = goodsSpecService.list(new LambdaQueryWrapper().in(GoodsSpec::getGoodsId, goodsIds)); + collectGoodsSpec = specs.stream().collect(Collectors.groupingBy(GoodsSpec::getGoodsId)); + } else { + collectGoodsSpec = null; + } + User parentUser; + if (getLoginUser() != null) { + parentUser = requestUtil.getParent(getLoginUserId()); + } else { + parentUser = null; + } + User loginUser = getLoginUser(); + list.forEach(d -> { + d.setName(d.getTitle()); + final List goodsList = collectGoods.get(d.getCategoryId()); + if (!CollectionUtils.isEmpty(goodsList)) { + + goodsList.forEach(v -> { + if (collectGoodsSpec != null) { + final List goodsSpecs = collectGoodsSpec.get(v.getGoodsId()); + if (!CollectionUtils.isEmpty(goodsSpecs)) { + final GoodsSpec spec = goodsSpecs.get(0); + v.setSpecValue(spec.getSpecValue()); + v.setGoodsSpecValue(JSONUtil.parseObject(spec.getSpecValue(), Object.class)); + } + } + v.setGoodsSkus(goodsSkuService.listByGoods(v.getGoodsId())); BigDecimal originPrice = v.getPrice(); v.setPrice(v.getSalePrice()); - if (getLoginUser().getGradeId().equals(33)) { - if (v.getDealerGift()) v.setShowGift(true); - v.setPrice(v.getDealerPrice()); + // 会员 + if (parentUser != null) { + if (v.getPriceGift()) v.setShowGift(true); +// v.setPrice(originPrice); } // 会员店 - if (getLoginUser().getGradeId().equals(31)) { - v.setPrice(originPrice); - if (v.getPriceGift()) v.setShowGift(true); + if (getLoginUser() != null && getLoginUser().getGradeId() > 30 && v.getBuyingPriceOpen().equals(1)) { + v.setPrice(v.getBuyingPrice()); +// if (v.getPriceGift()) v.setShowGift(true); } }); d.setGoods(collectGoods.get(d.getCategoryId())); diff --git a/src/main/java/com/gxwebsoft/shop/controller/GoodsController.java b/src/main/java/com/gxwebsoft/shop/controller/GoodsController.java index 7d78e7c..7f0ddfb 100644 --- a/src/main/java/com/gxwebsoft/shop/controller/GoodsController.java +++ b/src/main/java/com/gxwebsoft/shop/controller/GoodsController.java @@ -3,9 +3,10 @@ package com.gxwebsoft.shop.controller; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.gxwebsoft.common.core.utils.JSONUtil; +import com.gxwebsoft.common.core.utils.RequestUtil; import com.gxwebsoft.common.core.web.BaseController; import com.gxwebsoft.shop.entity.*; -import com.gxwebsoft.shop.service.GoodsService; +import com.gxwebsoft.shop.service.*; import com.gxwebsoft.shop.param.GoodsParam; import com.gxwebsoft.common.core.web.ApiResult; import com.gxwebsoft.common.core.web.PageResult; @@ -13,11 +14,9 @@ import com.gxwebsoft.common.core.web.PageParam; import com.gxwebsoft.common.core.web.BatchParam; import com.gxwebsoft.common.core.annotation.OperationLog; import com.gxwebsoft.common.system.entity.User; -import com.gxwebsoft.shop.service.GoodsSkuService; -import com.gxwebsoft.shop.service.GoodsSpecService; -import com.gxwebsoft.shop.service.MerchantService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; @@ -45,6 +44,11 @@ public class GoodsController extends BaseController { private GoodsSkuService goodsSkuService; @Resource private MerchantService merchantService; + @Resource + private GoodsRoleCommissionService goodsRoleCommissionService; + + @Autowired + private RequestUtil requestUtil; @ApiOperation("分页查询商品记录表") @GetMapping("/page") @@ -67,14 +71,20 @@ public class GoodsController extends BaseController { // 使用关联查询 final Goods goods = goodsService.getByIdRel(id); if (getLoginUser() != null) { - // 经销商 - if (getLoginUser().getGradeId().equals(33)) { - if (goods.getDealerGift()) goods.setShowGift(true); + User parentUser = requestUtil.getParent(getLoginUserId()); + BigDecimal originPrice = goods.getPrice(); + goods.setPrice(goods.getSalePrice()); + // 会员 + if (parentUser != null) { + if (goods.getPriceGift()) goods.setShowGift(true); +// goods.setPrice(originPrice); } // 会员店 - if (getLoginUser().getGradeId().equals(31)) { - if (goods.getPriceGift()) goods.setShowGift(true); + if (getLoginUser().getGradeId() > 30 && goods.getBuyingPriceOpen().equals(1)) { + goods.setPrice(goods.getBuyingPrice()); +// if (goods.getPriceGift()) goods.setShowGift(true); } + } // 提取specValue @@ -84,17 +94,29 @@ public class GoodsController extends BaseController { final Object object = JSONUtil.parseObject(specValue, Object.class); goods.setGoodsSpecValue(object); } + goods.setGoodsSkus(goodsSkuService.listByGoods(id)); // 整理商品价格 final User loginUser = getLoginUser(); if (loginUser != null) { + User parentUser = requestUtil.getParent(getLoginUserId()); BigDecimal originPrice = goods.getPrice(); goods.setPrice(goods.getSalePrice()); - if (loginUser.getGradeId().equals(33)) { - goods.setPrice(goods.getDealerPrice()); +// if (loginUser.getGradeId().equals(33)) { +// goods.setPrice(goods.getDealerPrice()); +// } +// if (loginUser.getGradeId().equals(0)) { +// goods.setPrice(originPrice); +// goods.setPrice(goods.getSalePrice()); +// } + // 会员 + if (parentUser != null) { + if (goods.getPriceGift()) goods.setShowGift(true); +// goods.setPrice(originPrice); } - if (loginUser.getGradeId().equals(0)) { - goods.setPrice(originPrice); - goods.setPrice(goods.getSalePrice()); + // 会员店 + if (getLoginUser().getGradeId() > 30 && goods.getBuyingPriceOpen().equals(1)) { + goods.setPrice(goods.getBuyingPrice()); +// if (goods.getPriceGift()) goods.setShowGift(true); } } else { goods.setPrice(goods.getSalePrice()); @@ -119,8 +141,18 @@ public class GoodsController extends BaseController { User loginUser = getLoginUser(); if (loginUser != null) { goods.setUserId(loginUser.getUserId()); + goods.setMerchantId(loginUser.getMerchantId()); } if (goodsService.save(goods)) { + goodsRoleCommissionService.removeByMap(new HashMap<>() {{ + put("goods_id", goods.getGoodsId()); + }}); + if (goods.getGoodsRoleCommission() != null && !goods.getGoodsRoleCommission().isEmpty()) { + for (GoodsRoleCommission goodsRoleCommission : goods.getGoodsRoleCommission()) { + goodsRoleCommission.setGoodsId(goods.getGoodsId()); + } + goodsRoleCommissionService.saveBatch(goods.getGoodsRoleCommission()); + } // 保存商品规格及sku信息 goodsService.saveBatchByAsync(goods); return success("添加成功"); @@ -133,6 +165,15 @@ public class GoodsController extends BaseController { @PutMapping() public ApiResult update(@RequestBody Goods goods) { if (goodsService.updateById(goods)) { + goodsRoleCommissionService.removeByMap(new HashMap<>() {{ + put("goods_id", goods.getGoodsId()); + }}); + if (goods.getGoodsRoleCommission() != null && !goods.getGoodsRoleCommission().isEmpty()) { + for (GoodsRoleCommission goodsRoleCommission : goods.getGoodsRoleCommission()) { + goodsRoleCommission.setGoodsId(goods.getGoodsId()); + } + goodsRoleCommissionService.saveBatch(goods.getGoodsRoleCommission()); + } // 删除旧信息 goodsSpecService.remove(new LambdaQueryWrapper().eq(GoodsSpec::getGoodsId, goods.getGoodsId())); goodsSkuService.remove(new LambdaQueryWrapper().eq(GoodsSku::getGoodsId, goods.getGoodsId())); diff --git a/src/main/java/com/gxwebsoft/shop/controller/GoodsRoleCommissionController.java b/src/main/java/com/gxwebsoft/shop/controller/GoodsRoleCommissionController.java new file mode 100644 index 0000000..8cea533 --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/controller/GoodsRoleCommissionController.java @@ -0,0 +1,111 @@ +package com.gxwebsoft.shop.controller; + +import com.gxwebsoft.common.core.web.BaseController; +import com.gxwebsoft.shop.service.GoodsRoleCommissionService; +import com.gxwebsoft.shop.entity.GoodsRoleCommission; +import com.gxwebsoft.shop.param.GoodsRoleCommissionParam; +import com.gxwebsoft.common.core.web.ApiResult; +import com.gxwebsoft.common.core.web.PageResult; +import com.gxwebsoft.common.core.web.PageParam; +import com.gxwebsoft.common.core.web.BatchParam; +import com.gxwebsoft.common.core.annotation.OperationLog; +import com.gxwebsoft.common.system.entity.User; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + * 商品绑定角色的分润金额控制器 + * + * @author 科技小王子 + * @since 2024-12-02 12:43:40 + */ +@Api(tags = "商品绑定角色的分润金额管理") +@RestController +@RequestMapping("/api/shop/goods-role-commission") +public class GoodsRoleCommissionController extends BaseController { + @Resource + private GoodsRoleCommissionService goodsRoleCommissionService; + + @ApiOperation("分页查询商品绑定角色的分润金额") + @GetMapping("/page") + public ApiResult> page(GoodsRoleCommissionParam param) { + // 使用关联查询 + return success(goodsRoleCommissionService.pageRel(param)); + } + + @ApiOperation("查询全部商品绑定角色的分润金额") + @GetMapping() + public ApiResult> list(GoodsRoleCommissionParam param) { + // 使用关联查询 + return success(goodsRoleCommissionService.listRel(param)); + } + + @PreAuthorize("hasAuthority('shop:goodsRoleCommission:list')") + @ApiOperation("根据id查询商品绑定角色的分润金额") + @GetMapping("/{id}") + public ApiResult get(@PathVariable("id") Integer id) { + // 使用关联查询 + return success(goodsRoleCommissionService.getByIdRel(id)); + } + + @ApiOperation("添加商品绑定角色的分润金额") + @PostMapping() + public ApiResult save(@RequestBody GoodsRoleCommission goodsRoleCommission) { + + if (goodsRoleCommissionService.save(goodsRoleCommission)) { + return success("添加成功"); + } + return fail("添加失败"); + } + + @ApiOperation("修改商品绑定角色的分润金额") + @PutMapping() + public ApiResult update(@RequestBody GoodsRoleCommission goodsRoleCommission) { + if (goodsRoleCommissionService.updateById(goodsRoleCommission)) { + return success("修改成功"); + } + return fail("修改失败"); + } + + @ApiOperation("删除商品绑定角色的分润金额") + @DeleteMapping("/{id}") + public ApiResult remove(@PathVariable("id") Integer id) { + if (goodsRoleCommissionService.removeById(id)) { + return success("删除成功"); + } + return fail("删除失败"); + } + + @ApiOperation("批量添加商品绑定角色的分润金额") + @PostMapping("/batch") + public ApiResult saveBatch(@RequestBody List list) { + if (goodsRoleCommissionService.saveBatch(list)) { + return success("添加成功"); + } + return fail("添加失败"); + } + + @ApiOperation("批量修改商品绑定角色的分润金额") + @PutMapping("/batch") + public ApiResult removeBatch(@RequestBody BatchParam batchParam) { + if (batchParam.update(goodsRoleCommissionService, "id")) { + return success("修改成功"); + } + return fail("修改失败"); + } + + @ApiOperation("批量删除商品绑定角色的分润金额") + @DeleteMapping("/batch") + public ApiResult removeBatch(@RequestBody List ids) { + if (goodsRoleCommissionService.removeByIds(ids)) { + return success("删除成功"); + } + return fail("删除失败"); + } + +} diff --git a/src/main/java/com/gxwebsoft/shop/controller/GoodsStockInMerchantController.java b/src/main/java/com/gxwebsoft/shop/controller/GoodsStockInMerchantController.java index 79145d2..cce0da4 100644 --- a/src/main/java/com/gxwebsoft/shop/controller/GoodsStockInMerchantController.java +++ b/src/main/java/com/gxwebsoft/shop/controller/GoodsStockInMerchantController.java @@ -1,6 +1,7 @@ package com.gxwebsoft.shop.controller; import com.gxwebsoft.common.core.web.BaseController; +import com.gxwebsoft.shop.service.GoodsService; import com.gxwebsoft.shop.service.GoodsStockInMerchantService; import com.gxwebsoft.shop.entity.GoodsStockInMerchant; import com.gxwebsoft.shop.param.GoodsStockInMerchantParam; @@ -30,6 +31,8 @@ import java.util.List; public class GoodsStockInMerchantController extends BaseController { @Resource private GoodsStockInMerchantService goodsStockInMerchantService; + @Resource + private GoodsService goodsService; @ApiOperation("分页查询商户商品库存") @GetMapping("/page") @@ -41,8 +44,13 @@ public class GoodsStockInMerchantController extends BaseController { @ApiOperation("查询全部商户商品库存") @GetMapping() public ApiResult> list(GoodsStockInMerchantParam param) { + param.setUserId(getLoginUserId()); + List list = goodsStockInMerchantService.listRel(param); + for (GoodsStockInMerchant goodsStockInMerchant : list) { + goodsStockInMerchant.setGoods(goodsService.getByIdRel(goodsStockInMerchant.getGoodsId())); + } // 使用关联查询 - return success(goodsStockInMerchantService.listRel(param)); + return success(list); } @PreAuthorize("hasAuthority('shop:goodsStockInMerchant:list')") diff --git a/src/main/java/com/gxwebsoft/shop/controller/MerchantApplyController.java b/src/main/java/com/gxwebsoft/shop/controller/MerchantApplyController.java index 51f05db..4bd4fc9 100644 --- a/src/main/java/com/gxwebsoft/shop/controller/MerchantApplyController.java +++ b/src/main/java/com/gxwebsoft/shop/controller/MerchantApplyController.java @@ -1,11 +1,16 @@ package com.gxwebsoft.shop.controller; +import cn.binarywang.wx.miniapp.bean.WxMaSubscribeMessage; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.gxwebsoft.cms.entity.ArticleCheck; import com.gxwebsoft.common.core.security.JwtUtil; import com.gxwebsoft.common.core.utils.RequestUtil; import com.gxwebsoft.common.core.web.BaseController; +import com.gxwebsoft.common.system.entity.UserRole; +import com.gxwebsoft.open.service.OfficeMpServiceImpl; import com.gxwebsoft.shop.entity.DealerUser; import com.gxwebsoft.shop.entity.Merchant; import com.gxwebsoft.shop.entity.MerchantAccount; @@ -20,7 +25,9 @@ import com.gxwebsoft.common.system.entity.User; import com.gxwebsoft.shop.service.MerchantService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import me.chanjar.weixin.common.error.WxErrorException; import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpEntity; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; @@ -32,6 +39,7 @@ import org.springframework.web.client.RestTemplate; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; +import java.util.ArrayList; import java.util.List; /** @@ -52,6 +60,17 @@ public class MerchantApplyController extends BaseController { private RequestUtil requestUtil; @Resource private DealerUserService dealerUserService; + @Autowired + private WeChatController weChatController; + @Resource + private OfficeMpServiceImpl officeMpService; + + @ApiOperation("未审核数量") + @GetMapping("/uncheck-num") + public ApiResult uncheckNum() { + // 使用关联查询 + return success(merchantApplyService.uncheckNum()); + } @ApiOperation("分页查询商户入驻申请") @GetMapping("/page") @@ -76,7 +95,7 @@ public class MerchantApplyController extends BaseController { @ApiOperation("添加商户入驻申请") @PostMapping() - public ApiResult save(@RequestBody MerchantApply merchantApply) { + public ApiResult save(@RequestBody MerchantApply merchantApply, HttpServletRequest request) throws WxErrorException { // 记录当前登录用户id User loginUser = getLoginUser(); if (loginUser != null) { @@ -89,6 +108,18 @@ public class MerchantApplyController extends BaseController { return fail("该手机号码已存在"); } if (merchantApplyService.save(merchantApply)) { + requestUtil.setTenantId(getTenantId().toString()); + requestUtil.setAccessToken(JwtUtil.getAccessToken(request)); + List userRoleList = requestUtil.getUserListByRole(1114); + if (userRoleList != null && !userRoleList.isEmpty()) { + for (UserRole userRole : userRoleList) { + User user = requestUtil.getByUserId(userRole.getUserId()); + if (user != null && user.getOfficeOpenid() != null && !user.getOfficeOpenid().isEmpty()) { + officeMpService.sendShopCheckMessage(user.getOfficeOpenid(), merchantApply.getShopType() + "入驻申请", + loginUser.getNickname()); + } + } + } return success("添加成功"); } return fail("添加失败"); @@ -96,9 +127,11 @@ public class MerchantApplyController extends BaseController { @ApiOperation("修改商户入驻申请") @PutMapping() - public ApiResult update(@RequestBody MerchantApply merchantApply, HttpServletRequest request) { + public ApiResult update(@RequestBody MerchantApply merchantApply, HttpServletRequest request) throws WxErrorException { MerchantApply merchantApply1 = merchantApplyService.getByIdRel(merchantApply.getApplyId()); + String result = "驳回"; if (merchantApply.getStatus().equals(1)) { + result = "通过"; // TODO 审核通过则创建商户 final Merchant one = merchantService.getOne(new LambdaQueryWrapper().eq(Merchant::getPhone, merchantApply1.getPhone()).last("limit 1")); final MerchantAccount merchantAccount = new MerchantAccount(); @@ -106,6 +139,7 @@ public class MerchantApplyController extends BaseController { final User user = new User(); final User loingUser = new User(); loingUser.setUserId(merchantAccount.getUserId()); + user.setUserId(merchantApply1.getUserId()); Integer gradeId = 30; if (ObjectUtil.isNotEmpty(one)) { @@ -118,7 +152,8 @@ public class MerchantApplyController extends BaseController { case "会员店" -> 31; case "实体连锁店" -> 32; case "经销商" -> 33; - case "供应商" -> 34; + case "产品供应商" -> 34; + case "合作伙伴" -> 35; default -> gradeId; }; loingUser.setGradeName(one.getShopType()); @@ -126,9 +161,11 @@ public class MerchantApplyController extends BaseController { final Merchant merchant = new Merchant(); BeanUtils.copyProperties(merchantApply1, merchant); merchant.setStatus(0); - List lngNLat = StrUtil.split(merchantApply1.getLngAndLat(), ","); - merchant.setLng(lngNLat.get(0)); - merchant.setLat(lngNLat.get(1)); + if (merchantApply1.getLngAndLat() != null && !merchantApply1.getLngAndLat().isEmpty()) { + List lngNLat = StrUtil.split(merchantApply1.getLngAndLat(), ","); + merchant.setLng(lngNLat.get(0)); + merchant.setLat(lngNLat.get(1)); + } merchantService.save(merchant); user.setMerchantId(merchant.getMerchantId()); user.setMerchantName(merchant.getMerchantName()); @@ -136,12 +173,14 @@ public class MerchantApplyController extends BaseController { case "会员店" -> 31; case "实体连锁店" -> 32; case "经销商" -> 33; - case "供应商" -> 34; + case "产品供应商" -> 34; + case "合作伙伴" -> 35; default -> gradeId; }; loingUser.setGradeName(merchant.getShopType()); } loingUser.setGradeId(gradeId); + loingUser.setCertification(1); // TODO 创建商户账号 @@ -179,8 +218,19 @@ public class MerchantApplyController extends BaseController { } } - // TODO 驳回 + requestUtil.setTenantId(getTenantId().toString()); + requestUtil.setAccessToken(JwtUtil.getAccessToken(request)); + User user = requestUtil.getByUserId(merchantApply1.getUserId()); + if (user != null) { + List data = new ArrayList<>(); + data.add(new WxMaSubscribeMessage.MsgData("thing5", merchantApply1.getShopType() + "入驻申请")); + data.add(new WxMaSubscribeMessage.MsgData("thing2", result)); + data.add(new WxMaSubscribeMessage.MsgData("time4", DateUtil.format(DateUtil.date(), "yyyy-MM-dd HH:mm:ss"))); + weChatController.sendMessage(user.getOpenid(), "NLnexmnhiVl_e4fiC6OwfbTlpssAuvXWoPNwITyTcC4", "package/user/myTv", + data); + } + merchantApply1.setStatus(merchantApply.getStatus()); if (merchantApplyService.updateById(merchantApply1)) { return success("修改成功"); } diff --git a/src/main/java/com/gxwebsoft/shop/controller/MerchantChargePackageController.java b/src/main/java/com/gxwebsoft/shop/controller/MerchantChargePackageController.java new file mode 100644 index 0000000..bb3416f --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/controller/MerchantChargePackageController.java @@ -0,0 +1,129 @@ +package com.gxwebsoft.shop.controller; + +import com.gxwebsoft.common.core.web.BaseController; +import com.gxwebsoft.shop.entity.Merchant; +import com.gxwebsoft.shop.service.MerchantChargePackageService; +import com.gxwebsoft.shop.entity.MerchantChargePackage; +import com.gxwebsoft.shop.param.MerchantChargePackageParam; +import com.gxwebsoft.common.core.web.ApiResult; +import com.gxwebsoft.common.core.web.PageResult; +import com.gxwebsoft.common.core.web.PageParam; +import com.gxwebsoft.common.core.web.BatchParam; +import com.gxwebsoft.common.core.annotation.OperationLog; +import com.gxwebsoft.common.system.entity.User; +import com.gxwebsoft.shop.service.MerchantService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; + +/** + * 商家充值套餐控制器 + * + * @author 科技小王子 + * @since 2024-11-20 01:55:04 + */ +@Api(tags = "商家充值套餐管理") +@RestController +@RequestMapping("/api/shop/merchant-charge-package") +public class MerchantChargePackageController extends BaseController { + @Resource + private MerchantChargePackageService merchantChargePackageService; + @Resource + private MerchantService merchantService; + + @ApiOperation("分页查询商家充值套餐") + @GetMapping("/page") + public ApiResult> page(MerchantChargePackageParam param) { + // 使用关联查询 + return success(merchantChargePackageService.pageRel(param)); + } + + @ApiOperation("查询全部商家充值套餐") + @GetMapping() + public ApiResult> list(MerchantChargePackageParam param) { + // 使用关联查询 + if (param.getMerchantId() == null) { + Merchant merchant = merchantService.getByUserId(getLoginUser().getUserId()); + if (merchant != null) param.setMerchantId(merchant.getMerchantId()); + } + if (param.getMerchantId() != null) { + return success(merchantChargePackageService.listRel(param)); + } + return success(new ArrayList<>()); + } + + @PreAuthorize("hasAuthority('shop:merchantChargePackage:list')") + @ApiOperation("根据id查询商家充值套餐") + @GetMapping("/{id}") + public ApiResult get(@PathVariable("id") Integer id) { + // 使用关联查询 + return success(merchantChargePackageService.getByIdRel(id)); + } + + @ApiOperation("添加商家充值套餐") + @PostMapping() + public ApiResult save(@RequestBody MerchantChargePackage merchantChargePackage) { + // 记录当前登录用户id + User loginUser = getLoginUser(); + if (loginUser != null) { + merchantChargePackage.setUserId(loginUser.getUserId()); + Merchant merchant = merchantService.getByUserId(getLoginUser().getUserId()); + merchantChargePackage.setMerchantId(merchant.getMerchantId()); + } + if (merchantChargePackageService.save(merchantChargePackage)) { + return success("添加成功"); + } + return fail("添加失败"); + } + + @ApiOperation("修改商家充值套餐") + @PutMapping() + public ApiResult update(@RequestBody MerchantChargePackage merchantChargePackage) { + if (merchantChargePackageService.updateById(merchantChargePackage)) { + return success("修改成功"); + } + return fail("修改失败"); + } + + @ApiOperation("删除商家充值套餐") + @DeleteMapping("/{id}") + public ApiResult remove(@PathVariable("id") Integer id) { + if (merchantChargePackageService.removeById(id)) { + return success("删除成功"); + } + return fail("删除失败"); + } + + @ApiOperation("批量添加商家充值套餐") + @PostMapping("/batch") + public ApiResult saveBatch(@RequestBody List list) { + if (merchantChargePackageService.saveBatch(list)) { + return success("添加成功"); + } + return fail("添加失败"); + } + + @ApiOperation("批量修改商家充值套餐") + @PutMapping("/batch") + public ApiResult removeBatch(@RequestBody BatchParam batchParam) { + if (batchParam.update(merchantChargePackageService, "id")) { + return success("修改成功"); + } + return fail("修改失败"); + } + + @ApiOperation("批量删除商家充值套餐") + @DeleteMapping("/batch") + public ApiResult removeBatch(@RequestBody List ids) { + if (merchantChargePackageService.removeByIds(ids)) { + return success("删除成功"); + } + return fail("删除失败"); + } + +} diff --git a/src/main/java/com/gxwebsoft/shop/controller/MerchantController.java b/src/main/java/com/gxwebsoft/shop/controller/MerchantController.java index 9de5922..19a2cb0 100644 --- a/src/main/java/com/gxwebsoft/shop/controller/MerchantController.java +++ b/src/main/java/com/gxwebsoft/shop/controller/MerchantController.java @@ -1,5 +1,7 @@ package com.gxwebsoft.shop.controller; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.date.LocalDateTimeUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpRequest; import com.alibaba.fastjson.JSONObject; @@ -12,11 +14,9 @@ import com.gxwebsoft.common.core.web.BaseController; import com.gxwebsoft.common.core.web.BatchParam; import com.gxwebsoft.common.core.web.PageResult; import com.gxwebsoft.common.system.entity.User; -import com.gxwebsoft.shop.entity.Merchant; -import com.gxwebsoft.shop.entity.MerchantAccount; +import com.gxwebsoft.shop.entity.*; import com.gxwebsoft.shop.param.MerchantParam; -import com.gxwebsoft.shop.service.MerchantAccountService; -import com.gxwebsoft.shop.service.MerchantService; +import com.gxwebsoft.shop.service.*; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.bouncycastle.cert.ocsp.Req; @@ -25,7 +25,11 @@ import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; /** * 商户控制器 @@ -41,12 +45,50 @@ public class MerchantController extends BaseController { private MerchantService merchantService; @Resource private MerchantAccountService merchantAccountService; + @Resource + private OrderService orderService; + @Resource + private GoodsService goodsService; + @Resource + private OrderGoodsService orderGoodsService; + + @PostMapping("/data") + public ApiResult data() { + Merchant merchant = merchantService.getByUserId(getLoginUserId()); + if (merchant == null) return fail("非法请求"); + List goodsList = goodsService.listByMerchant(merchant.getMerchantId()); + BigDecimal totalIncome = BigDecimal.ZERO, monthIncome = BigDecimal.ZERO; + + Map data = new HashMap<>(); + if (!goodsList.isEmpty()) { + List orderGoodsList = orderGoodsService.listByGoodsList(goodsList.stream().map(Goods::getGoodsId).toList()); + if (!orderGoodsList.isEmpty()) { + List orderList = orderService.listByIds(orderGoodsList.stream().map(OrderGoods::getOrderId).toList()); + for (OrderGoods orderGoods : orderGoodsList) { + for (Order order : orderList) { + if (orderGoods.getOrderId().equals(order.getOrderId())) { + if (order.getPayStatus().equals(1)) { + totalIncome = totalIncome.add(orderGoods.getPrice().multiply(new BigDecimal(orderGoods.getTotalNum()))); + if (order.getCreateTime().after(DateUtil.beginOfMonth(DateUtil.date())) && order.getCreateTime().before(DateUtil.endOfMonth(DateUtil.date()))) { + monthIncome = monthIncome.add(orderGoods.getPrice().multiply(new BigDecimal(orderGoods.getTotalNum()))); + } + } + } + } + } + } + } + data.put("totalIncome", totalIncome); + data.put("monthIncome", monthIncome); + data.put("goodsList", goodsList); + return success(data); + } @ApiOperation("分页查询商户") @GetMapping("/page") public ApiResult> page(MerchantParam param) { // 使用关联查询 - System.out.println("param = " + param); + System.out.println("param = " + param); return success(merchantService.pageRel(param)); } @@ -59,47 +101,47 @@ public class MerchantController extends BaseController { @ApiOperation("根据id查询商户") @GetMapping("/{id}") - public ApiResult get(@PathVariable("id") Integer id) { + public ApiResult get(@PathVariable("id") Integer id, MerchantParam param) { // 使用关联查询 - return success(merchantService.getByIdRel(id)); + return success(merchantService.getByIdRel(id, param)); } @ApiOperation("查询我的商户") @GetMapping("/getByUserId") public ApiResult getByUserId() { - final Merchant one = merchantService.getOne(new LambdaQueryWrapper().eq(Merchant::getUserId, getLoginUserId())); - if (ObjectUtil.isNotEmpty(one)) { - return success(one); - } - return fail("未注册商户",null); + final Merchant one = merchantService.getOne(new LambdaQueryWrapper().eq(Merchant::getUserId, getLoginUserId())); + if (ObjectUtil.isNotEmpty(one)) { + return success(one); + } + return fail("未注册商户", null); } @PreAuthorize("hasAuthority('shop:merchant:save')") @ApiOperation("添加商户") @PostMapping() public ApiResult save(@RequestBody Merchant merchant, HttpServletRequest request) { - if (merchantService.count(new LambdaQueryWrapper().eq(Merchant::getPhone,merchant.getPhone())) > 0) { - return fail("商户手机号码" + merchant.getPhone() + "已存在"); - } - if (merchantService.save(merchant)) { - // 设置商家后台入口 - merchant.setAdminUrl(merchant.getTenantId() + ".m.wsdns.cn"); - merchantService.updateById(merchant); - // 获取用户信息 - final RequestUtil requestUtil = new RequestUtil(); - String access_token = JwtUtil.getAccessToken(request); - requestUtil.setAccessToken(access_token); - requestUtil.setTenantId(getTenantId().toString()); - final MerchantAccount merchantAccount = new MerchantAccount(); - merchantAccount.setMerchantId(merchant.getMerchantId()); - merchantAccount.setPhone(merchant.getPhone()); - merchantAccount.setPassword(merchant.getPhone().substring(merchant.getPhone().length() - 6)); - merchantAccount.setRealName(merchant.getRealName()); - merchantAccount.setRoleId(merchant.getRoleId()); - merchantAccount.setRoleName(merchant.getRoleName()); - requestUtil.saveUserByPhone(merchantAccount); - merchantAccountService.save(merchantAccount); - return success("添加成功"); + if (merchantService.count(new LambdaQueryWrapper().eq(Merchant::getPhone, merchant.getPhone())) > 0) { + return fail("商户手机号码" + merchant.getPhone() + "已存在"); + } + if (merchantService.save(merchant)) { + // 设置商家后台入口 + merchant.setAdminUrl(merchant.getTenantId() + ".m.wsdns.cn"); + merchantService.updateById(merchant); + // 获取用户信息 + final RequestUtil requestUtil = new RequestUtil(); + String access_token = JwtUtil.getAccessToken(request); + requestUtil.setAccessToken(access_token); + requestUtil.setTenantId(getTenantId().toString()); + final MerchantAccount merchantAccount = new MerchantAccount(); + merchantAccount.setMerchantId(merchant.getMerchantId()); + merchantAccount.setPhone(merchant.getPhone()); + merchantAccount.setPassword(merchant.getPhone().substring(merchant.getPhone().length() - 6)); + merchantAccount.setRealName(merchant.getRealName()); + merchantAccount.setRoleId(merchant.getRoleId()); + merchantAccount.setRoleName(merchant.getRoleName()); + requestUtil.saveUserByPhone(merchantAccount); + merchantAccountService.save(merchantAccount); + return success("添加成功"); } return fail("添加失败"); } diff --git a/src/main/java/com/gxwebsoft/shop/controller/MerchantGoodsPackageController.java b/src/main/java/com/gxwebsoft/shop/controller/MerchantGoodsPackageController.java new file mode 100644 index 0000000..0d9e095 --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/controller/MerchantGoodsPackageController.java @@ -0,0 +1,147 @@ +package com.gxwebsoft.shop.controller; + +import com.gxwebsoft.common.core.web.BaseController; +import com.gxwebsoft.shop.entity.Goods; +import com.gxwebsoft.shop.entity.MerchantPackageGoods; +import com.gxwebsoft.shop.entity.UserGoodsInMerchant; +import com.gxwebsoft.shop.param.MerchantPackageGoodsParam; +import com.gxwebsoft.shop.service.GoodsService; +import com.gxwebsoft.shop.service.MerchantGoodsPackageService; +import com.gxwebsoft.shop.entity.MerchantGoodsPackage; +import com.gxwebsoft.shop.param.MerchantGoodsPackageParam; +import com.gxwebsoft.common.core.web.ApiResult; +import com.gxwebsoft.common.core.web.PageResult; +import com.gxwebsoft.common.core.web.PageParam; +import com.gxwebsoft.common.core.web.BatchParam; +import com.gxwebsoft.common.core.annotation.OperationLog; +import com.gxwebsoft.common.system.entity.User; +import com.gxwebsoft.shop.service.MerchantPackageGoodsService; +import com.gxwebsoft.shop.service.UserGoodsInMerchantService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; + +/** + * 商家充值套餐控制器 + * + * @author 科技小王子 + * @since 2024-11-20 01:55:04 + */ +@Api(tags = "商家充值套餐管理") +@RestController +@RequestMapping("/api/shop/merchant-goods-package") +public class MerchantGoodsPackageController extends BaseController { + @Resource + private MerchantGoodsPackageService merchantGoodsPackageService; + @Resource + private MerchantPackageGoodsService merchantPackageGoodsService; + @Resource + private GoodsService goodsService; + @Resource + private UserGoodsInMerchantService userGoodsInMerchantService; + + @ApiOperation("分页查询商家充值套餐") + @GetMapping("/page") + public ApiResult> page(MerchantGoodsPackageParam param) { + // 使用关联查询 + return success(merchantGoodsPackageService.pageRel(param)); + } + + @ApiOperation("查询全部商家充值套餐") + @GetMapping() + public ApiResult> list(MerchantGoodsPackageParam param) { + // 使用关联查询 + List list = merchantGoodsPackageService.listRel(param); + for (MerchantGoodsPackage merchantGoodsPackage : list) { + List merchantPackageGoodsList = merchantPackageGoodsService.listByPackage(merchantGoodsPackage.getId()); + List goodsList = goodsService.listByIds(merchantPackageGoodsList.stream().map(MerchantPackageGoods::getGoodsId).toList()); + merchantGoodsPackage.setGoodsList(goodsList); + if (param.getWithUserPackage() != null) { + merchantGoodsPackage.setUserPackage(userGoodsInMerchantService.infoInMerchant(merchantGoodsPackage.getId(), getLoginUserId())); + } + } + return success(list); + } + + @PreAuthorize("hasAuthority('shop:merchantGoodsPackage:list')") + @ApiOperation("根据id查询商家充值套餐") + @GetMapping("/{id}") + public ApiResult get(@PathVariable("id") Integer id) { + // 使用关联查询 + return success(merchantGoodsPackageService.getByIdRel(id)); + } + + @ApiOperation("添加商家充值套餐") + @PostMapping() + public ApiResult save(@RequestBody MerchantGoodsPackage merchantGoodsPackage) { + // 记录当前登录用户id + User loginUser = getLoginUser(); + if (loginUser != null) { + merchantGoodsPackage.setUserId(loginUser.getUserId()); + } + if (merchantGoodsPackageService.save(merchantGoodsPackage)) { + List merchantPackageGoodsList = new ArrayList<>(); + for (Integer goodsId : merchantGoodsPackage.getGoodsIdList()) { + MerchantPackageGoods merchantPackageGoods = new MerchantPackageGoods(); + merchantPackageGoods.setGoodsId(goodsId); + merchantPackageGoods.setPackageId(merchantGoodsPackage.getId()); + merchantPackageGoods.setUserId(getLoginUserId()); + merchantPackageGoodsList.add(merchantPackageGoods); + } + merchantPackageGoodsService.saveBatch(merchantPackageGoodsList); + return success("添加成功"); + } + return fail("添加失败"); + } + + @ApiOperation("修改商家充值套餐") + @PutMapping() + public ApiResult update(@RequestBody MerchantGoodsPackage merchantGoodsPackage) { + if (merchantGoodsPackageService.updateById(merchantGoodsPackage)) { + return success("修改成功"); + } + return fail("修改失败"); + } + + @ApiOperation("删除商家充值套餐") + @DeleteMapping("/{id}") + public ApiResult remove(@PathVariable("id") Integer id) { + if (merchantGoodsPackageService.removeById(id)) { + return success("删除成功"); + } + return fail("删除失败"); + } + + @ApiOperation("批量添加商家充值套餐") + @PostMapping("/batch") + public ApiResult saveBatch(@RequestBody List list) { + if (merchantGoodsPackageService.saveBatch(list)) { + return success("添加成功"); + } + return fail("添加失败"); + } + + @ApiOperation("批量修改商家充值套餐") + @PutMapping("/batch") + public ApiResult removeBatch(@RequestBody BatchParam batchParam) { + if (batchParam.update(merchantGoodsPackageService, "id")) { + return success("修改成功"); + } + return fail("修改失败"); + } + + @ApiOperation("批量删除商家充值套餐") + @DeleteMapping("/batch") + public ApiResult removeBatch(@RequestBody List ids) { + if (merchantGoodsPackageService.removeByIds(ids)) { + return success("删除成功"); + } + return fail("删除失败"); + } + +} diff --git a/src/main/java/com/gxwebsoft/shop/controller/MerchantPackageGoodsController.java b/src/main/java/com/gxwebsoft/shop/controller/MerchantPackageGoodsController.java new file mode 100644 index 0000000..1991373 --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/controller/MerchantPackageGoodsController.java @@ -0,0 +1,115 @@ +package com.gxwebsoft.shop.controller; + +import com.gxwebsoft.common.core.web.BaseController; +import com.gxwebsoft.shop.service.MerchantPackageGoodsService; +import com.gxwebsoft.shop.entity.MerchantPackageGoods; +import com.gxwebsoft.shop.param.MerchantPackageGoodsParam; +import com.gxwebsoft.common.core.web.ApiResult; +import com.gxwebsoft.common.core.web.PageResult; +import com.gxwebsoft.common.core.web.PageParam; +import com.gxwebsoft.common.core.web.BatchParam; +import com.gxwebsoft.common.core.annotation.OperationLog; +import com.gxwebsoft.common.system.entity.User; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + * 商家套餐可使用的商品控制器 + * + * @author 科技小王子 + * @since 2024-11-20 01:55:04 + */ +@Api(tags = "商家套餐可使用的商品管理") +@RestController +@RequestMapping("/api/shop/merchant-package-goods") +public class MerchantPackageGoodsController extends BaseController { + @Resource + private MerchantPackageGoodsService merchantPackageGoodsService; + + @ApiOperation("分页查询商家套餐可使用的商品") + @GetMapping("/page") + public ApiResult> page(MerchantPackageGoodsParam param) { + // 使用关联查询 + return success(merchantPackageGoodsService.pageRel(param)); + } + + @ApiOperation("查询全部商家套餐可使用的商品") + @GetMapping() + public ApiResult> list(MerchantPackageGoodsParam param) { + // 使用关联查询 + return success(merchantPackageGoodsService.listRel(param)); + } + + @PreAuthorize("hasAuthority('shop:merchantPackageGoods:list')") + @ApiOperation("根据id查询商家套餐可使用的商品") + @GetMapping("/{id}") + public ApiResult get(@PathVariable("id") Integer id) { + // 使用关联查询 + return success(merchantPackageGoodsService.getByIdRel(id)); + } + + @ApiOperation("添加商家套餐可使用的商品") + @PostMapping() + public ApiResult save(@RequestBody MerchantPackageGoods merchantPackageGoods) { + // 记录当前登录用户id + User loginUser = getLoginUser(); + if (loginUser != null) { + merchantPackageGoods.setUserId(loginUser.getUserId()); + } + if (merchantPackageGoodsService.save(merchantPackageGoods)) { + return success("添加成功"); + } + return fail("添加失败"); + } + + @ApiOperation("修改商家套餐可使用的商品") + @PutMapping() + public ApiResult update(@RequestBody MerchantPackageGoods merchantPackageGoods) { + if (merchantPackageGoodsService.updateById(merchantPackageGoods)) { + return success("修改成功"); + } + return fail("修改失败"); + } + + @ApiOperation("删除商家套餐可使用的商品") + @DeleteMapping("/{id}") + public ApiResult remove(@PathVariable("id") Integer id) { + if (merchantPackageGoodsService.removeById(id)) { + return success("删除成功"); + } + return fail("删除失败"); + } + + @ApiOperation("批量添加商家套餐可使用的商品") + @PostMapping("/batch") + public ApiResult saveBatch(@RequestBody List list) { + if (merchantPackageGoodsService.saveBatch(list)) { + return success("添加成功"); + } + return fail("添加失败"); + } + + @ApiOperation("批量修改商家套餐可使用的商品") + @PutMapping("/batch") + public ApiResult removeBatch(@RequestBody BatchParam batchParam) { + if (batchParam.update(merchantPackageGoodsService, "id")) { + return success("修改成功"); + } + return fail("修改失败"); + } + + @ApiOperation("批量删除商家套餐可使用的商品") + @DeleteMapping("/batch") + public ApiResult removeBatch(@RequestBody List ids) { + if (merchantPackageGoodsService.removeByIds(ids)) { + return success("删除成功"); + } + return fail("删除失败"); + } + +} diff --git a/src/main/java/com/gxwebsoft/shop/controller/MessageController.java b/src/main/java/com/gxwebsoft/shop/controller/MessageController.java new file mode 100644 index 0000000..607325f --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/controller/MessageController.java @@ -0,0 +1,117 @@ +package com.gxwebsoft.shop.controller; + +import com.gxwebsoft.common.core.web.BaseController; +import com.gxwebsoft.shop.service.MessageService; +import com.gxwebsoft.shop.entity.Message; +import com.gxwebsoft.shop.param.MessageParam; +import com.gxwebsoft.common.core.web.ApiResult; +import com.gxwebsoft.common.core.web.PageResult; +import com.gxwebsoft.common.core.web.PageParam; +import com.gxwebsoft.common.core.web.BatchParam; +import com.gxwebsoft.common.core.annotation.OperationLog; +import com.gxwebsoft.common.system.entity.User; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + * 控制器 + * + * @author 科技小王子 + * @since 2024-11-18 22:03:11 + */ +@Api(tags = "管理") +@RestController +@RequestMapping("/api/shop/message") +public class MessageController extends BaseController { + @Resource + private MessageService messageService; + + @PostMapping("/unread-num") + public ApiResult unreadNum() { + // 使用关联查询 + return success(messageService.unreadNum(getLoginUserId())); + } + + @ApiOperation("分页查询") + @GetMapping("/page") + public ApiResult> page(MessageParam param) { + // 使用关联查询 + return success(messageService.pageRel(param)); + } + + @ApiOperation("查询全部") + @GetMapping() + public ApiResult> list(MessageParam param) { + // 使用关联查询 + param.setUserId(getLoginUserId()); + return success(messageService.listRel(param)); + } + + @PreAuthorize("hasAuthority('shop:message:list')") + @ApiOperation("根据id查询") + @GetMapping("/{id}") + public ApiResult get(@PathVariable("id") Integer id) { + // 使用关联查询 + return success(messageService.getByIdRel(id)); + } + + @ApiOperation("添加") + @PostMapping() + public ApiResult save(@RequestBody Message message) { + if (messageService.save(message)) { + return success("添加成功"); + } + return fail("添加失败"); + } + + @ApiOperation("修改") + @PutMapping() + public ApiResult update(@RequestBody Message message) { + if (messageService.updateById(message)) { + return success("修改成功"); + } + return fail("修改失败"); + } + + @ApiOperation("删除") + @DeleteMapping("/{id}") + public ApiResult remove(@PathVariable("id") Integer id) { + if (messageService.removeById(id)) { + return success("删除成功"); + } + return fail("删除失败"); + } + + @ApiOperation("批量添加") + @PostMapping("/batch") + public ApiResult saveBatch(@RequestBody List list) { + if (messageService.saveBatch(list)) { + return success("添加成功"); + } + return fail("添加失败"); + } + + @ApiOperation("批量修改") + @PutMapping("/batch") + public ApiResult removeBatch(@RequestBody BatchParam batchParam) { + if (batchParam.update(messageService, "id")) { + return success("修改成功"); + } + return fail("修改失败"); + } + + @ApiOperation("批量删除") + @DeleteMapping("/batch") + public ApiResult removeBatch(@RequestBody List ids) { + if (messageService.removeByIds(ids)) { + return success("删除成功"); + } + return fail("删除失败"); + } + +} diff --git a/src/main/java/com/gxwebsoft/shop/controller/OrderController.java b/src/main/java/com/gxwebsoft/shop/controller/OrderController.java index c7d5419..c25e6c5 100644 --- a/src/main/java/com/gxwebsoft/shop/controller/OrderController.java +++ b/src/main/java/com/gxwebsoft/shop/controller/OrderController.java @@ -10,12 +10,17 @@ import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.gxwebsoft.cms.entity.Ad; +import com.gxwebsoft.common.core.config.ConfigProperties; import com.gxwebsoft.common.core.exception.BusinessException; import com.gxwebsoft.common.core.security.JwtUtil; import com.gxwebsoft.common.core.utils.CommonUtil; +import com.gxwebsoft.common.core.utils.RedisUtil; import com.gxwebsoft.common.core.utils.RequestUtil; import com.gxwebsoft.common.core.web.BaseController; +import com.gxwebsoft.common.system.entity.Area; +import com.gxwebsoft.common.system.entity.FileRecord; import com.gxwebsoft.common.system.entity.Role; +import com.gxwebsoft.common.system.service.AreaService; import com.gxwebsoft.shop.entity.*; import com.gxwebsoft.shop.service.*; import com.gxwebsoft.shop.param.OrderParam; @@ -23,9 +28,14 @@ import com.gxwebsoft.common.core.web.ApiResult; import com.gxwebsoft.common.core.web.PageResult; import com.gxwebsoft.common.core.web.BatchParam; import com.gxwebsoft.common.system.entity.User; +import com.gxwebsoft.shop.service.impl.KuaiDi100Impl; +import com.wechat.pay.java.service.partnerpayments.jsapi.model.Transaction; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import me.chanjar.weixin.common.error.WxErrorException; +import org.apache.poi.xssf.streaming.SXSSFRow; +import org.apache.poi.xssf.streaming.SXSSFSheet; +import org.apache.poi.xssf.streaming.SXSSFWorkbook; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.security.access.prepost.PreAuthorize; @@ -33,13 +43,17 @@ import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; +import java.io.FileOutputStream; import java.io.IOException; import java.math.BigDecimal; import java.util.*; +import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; import static com.gxwebsoft.shop.consts.OrderPayType.*; +import com.wechat.pay.java.service.partnerpayments.model.TransactionAmount; + /** * 订单控制器 * @@ -64,13 +78,74 @@ public class OrderController extends BaseController { private ExpressService expressService; @Resource private OrderDeliveryService orderDeliveryService; + @Resource + private UserAddressService userAddressService; + @Resource + private ExpressTemplateService expressTemplateService; + @Resource + private UserBalanceInMerchantService userBalanceInMerchantService; + @Resource + private UserGoodsInMerchantService userGoodsInMerchantService; + @Resource + private KuaiDi100Impl kuaiDi100; + @Resource + private RedisUtil redisUtil; + @Resource + private DealerCapitalService dealerCapitalService; + @Resource + private AreaService areaService; + @Autowired private WeChatController weChatController; @Autowired private MerchantService merchantService; + @Autowired + private WxPayNotifyNbgController wxPayNotifyNbgController; @Value("${config.upload-path}") private String uploadPath; + @Value("${config.server-url}") + private String serverUrl; + @Resource + private ConfigProperties config; + + @PostMapping("/data") + public ApiResult data() { + Map data = new HashMap<>(); + int toBePaid = 0, toBeReceived = 0, toBeDelivery = 0; + toBePaid = orderService.count(new LambdaQueryWrapper().eq(Order::getUserId, getLoginUserId()) + .eq(Order::getType, 0) + .eq(Order::getPayStatus, 0)); + + toBeReceived = orderService.count(new LambdaQueryWrapper().eq(Order::getUserId, getLoginUserId()) + .eq(Order::getType, 0) + .eq(Order::getPayStatus, 1).eq(Order::getDeliveryStatus, 20)); + + toBeDelivery = orderService.count(new LambdaQueryWrapper().eq(Order::getUserId, getLoginUserId()) + .eq(Order::getType, 0) + .eq(Order::getPayStatus, 1).eq(Order::getDeliveryStatus, 10)); + data.put("toBePaid", toBePaid); + data.put("toBeReceived", toBeReceived); + data.put("toBeDelivery", toBeDelivery); + return success(data); + } + + @PostMapping("/data-for-admin") + public ApiResult dataForAdmin() { + Map data = new HashMap<>(); + BigDecimal totalIncome = BigDecimal.ZERO, todayIncome = BigDecimal.ZERO; + List orderList = orderService.list(new LambdaQueryWrapper().eq(Order::getPayStatus, 1)); + if (!orderList.isEmpty()) + totalIncome = orderList.stream().map(Order::getTotalPrice).reduce(BigDecimal::add).get(); + for (Order order : orderList) { + if (order.getCreateTime().after(DateUtil.beginOfDay(DateUtil.date())) && order.getCreateTime().before(DateUtil.endOfDay(DateUtil.date()))) { + todayIncome = todayIncome.add(order.getTotalPrice()); + } + } + data.put("totalIncome", totalIncome); + data.put("todayIncome", todayIncome); + return success(data); + } @ApiOperation("分页查询订单") @GetMapping("/page") @@ -86,6 +161,11 @@ public class OrderController extends BaseController { @GetMapping() public ApiResult> list(OrderParam param) { // 使用关联查询 + System.out.println(getLoginUser()); + if (param.getListForExpress() != null) { + Merchant merchant = merchantService.getByUserId(getLoginUserId()); + if (merchant != null) param.setExpressMerchantId(merchant.getMerchantId()); + } return success(orderService.listRel(param)); } @@ -95,14 +175,23 @@ public class OrderController extends BaseController { public ApiResult get(@PathVariable("id") Integer id) { Order order = orderService.getByIdRel(id); if (getLoginUser() != null) { + User parentUser = requestUtil.getParent(getLoginUserId()); for (OrderGoods orderGoods : order.getGoodsList()) { Goods goods = orderGoods.getGoods(); - if (getLoginUser().getGradeId().equals(33)) { - if (goods.getDealerGift()) goods.setShowGift(true); - } - // 会员店 - if (getLoginUser().getGradeId().equals(31)) { + BigDecimal originPrice = goods.getPrice(); + goods.setPrice(goods.getSalePrice()); + // 会员 + if (parentUser != null) { if (goods.getPriceGift()) goods.setShowGift(true); +// goods.setPrice(originPrice); + } +// if (getLoginUser().getGradeId().equals(33)) { +// if (goods.getDealerGift()) goods.setShowGift(true); +// } + // 会员店 + if (getLoginUser().getGradeId() > 30 && goods.getBuyingPriceOpen().equals(1)) { + goods.setPrice(goods.getBuyingPrice()); +// if (goods.getPriceGift()) goods.setShowGift(true); } } } @@ -117,7 +206,7 @@ public class OrderController extends BaseController { Merchant merchant = merchantService.getById(order.getSelfTakeMerchantId()); order.setMerchant(merchant); } - }else if (order.getType().equals(1)) { + } else if (order.getType().equals(1)) { Merchant merchant = merchantService.getById(order.getMerchantId()); order.setMerchant(merchant); } @@ -251,6 +340,39 @@ public class OrderController extends BaseController { if (order.getAddress() != null) { address = order.getAddress(); } + if (order.getAddressId() != null) { + UserAddress userAddress = userAddressService.getById(order.getAddressId()); + if (userAddress != null) { + name = userAddress.getName(); + phone = userAddress.getPhone(); + address = userAddress.getFullAddress(); + Area province = areaService.areaInfoByName(userAddress.getProvince(), 1); + Area city = areaService.areaInfoByName(userAddress.getCity(), 2); + Area region = areaService.areaInfoByName(userAddress.getRegion(), 3); + if (province != null) { + order.setProvinceId(province.getId()); + } + if (city != null) { + order.setCityId(city.getId()); + } + if (region != null) { + order.setRegionId(region.getId()); + } + } + } + + + if (order.getAddressId() != null && order.getType() < 3 && order.getDeliveryType() != null && order.getDeliveryType().equals(0)) { + UserAddress userAddress = userAddressService.getById(order.getAddressId()); + if (userAddress == null) return fail("请选择收货地址"); + for (OrderGoods orderGoods : order.getGoodsList()) { + orderGoods.setTotalNum(orderGoods.getCartNum()); + } + BigDecimal expressAmount = expressTemplateService.calExpressAmount(order.getGoodsList(), userAddress); + order.setExpressPrice(expressAmount); + order.setTotalPrice(expressAmount.add(order.getTotalPrice())); + } + order.setOrderNo(Long.toString(orderNo)); order.setUserId(loginUser.getUserId()); order.setOpenid(loginUser.getOpenid()); @@ -268,7 +390,7 @@ public class OrderController extends BaseController { if (order.getGoodsList() != null) { order.setTotalNum(order.getGoodsList().size()); } - if (order.getDeliveryType().equals(1)) { + if (order.getDeliveryType() != null && order.getDeliveryType().equals(1)) { order.setSelfTakeCode(RandomUtil.randomString(4)); } @@ -334,7 +456,7 @@ public class OrderController extends BaseController { final Set cartIds = order.getGoodsList().stream().map(OrderGoods::getGoodsId).collect(Collectors.toSet()); cartService.remove(new LambdaQueryWrapper().eq(Cart::getUserId, order.getUserId()).in(Cart::getGoodsId, cartIds)); // 外卖订单 - if (!order.getMerchantId().equals(0)) { + if (order.getMerchantId() != null && !order.getMerchantId().equals(0) && order.getType() < 3) { cartService.remove(new LambdaQueryWrapper().eq(Cart::getUserId, order.getUserId()).eq(Cart::getType, 1)); } } @@ -360,7 +482,43 @@ public class OrderController extends BaseController { if (!FileUtil.exist(filepath)) FileUtil.mkdir(filepath); String filename = "/friendPay_" + order.getOrderId() + ".png"; weChatController.makeQr(request, filepath + filename, "orderId=" + order.getOrderId(), "package/order/friendPay"); - return success("下单成功", "file/qr"+ filename); + return success("下单成功", "file/qr" + filename); + } + // 门店余额 + if (order.getPayType().equals(PAY_TYPE_MERCHANT_BALANCE)) { + UserBalanceInMerchant userBalanceInMerchant = userBalanceInMerchantService.getBalance(order.getMerchantId(), order.getUserId()); + if (userBalanceInMerchant == null || userBalanceInMerchant.getBalance().compareTo(order.getTotalPrice()) < 0) { + return fail("余额不足"); + } + userBalanceInMerchant.setBalance(userBalanceInMerchant.getBalance().subtract(order.getTotalPrice())); + userBalanceInMerchantService.updateById(userBalanceInMerchant); + final TransactionAmount amount = new TransactionAmount(); + amount.setTotal(order.getTotalPrice().multiply(new BigDecimal(100)).intValue()); + amount.setCurrency("CNY"); + wxPayNotifyNbgController.doPay(new Transaction() {{ + setOutTradeNo(order.getOrderNo()); + setTransactionId(order.getOrderNo()); + setAmount(amount); + }}); + return success("支付成功", true); + } + // 门店套餐 + if (order.getPayType().equals(PAY_TYPE_MERCHANT_PACKAGE)) { + UserGoodsInMerchant userGoodsInMerchant = userGoodsInMerchantService.infoInMerchant(order.getPackageId(), order.getUserId()); + if (userGoodsInMerchant == null || userGoodsInMerchant.getRemainNum() <= 0) { + return fail("次数不足"); + } + userGoodsInMerchant.setRemainNum(userGoodsInMerchant.getRemainNum() - 1); + userGoodsInMerchantService.updateById(userGoodsInMerchant); + final TransactionAmount amount = new TransactionAmount(); + amount.setTotal(order.getTotalPrice().multiply(new BigDecimal(100)).intValue()); + amount.setCurrency("CNY"); + wxPayNotifyNbgController.doPay(new Transaction() {{ + setOutTradeNo(order.getOrderNo()); + setTransactionId(order.getOrderNo()); + setAmount(amount); + }}); + return success("支付成功", true); } return fail("支付失败"); } @@ -403,6 +561,18 @@ public class OrderController extends BaseController { return success("外卖确认收货"); } + @ApiOperation("物流查询") + @PostMapping("/express-poll") + public ApiResult expressPoll(@RequestBody OrderDelivery orderDelivery) throws Exception { + String res; + if (redisUtil.get("express_" + orderDelivery.getExpressNo()) == null) { + Express express = expressService.getById(orderDelivery.getExpressId()); + res = kuaiDi100.pollList(express.getKuaidi100Code(), orderDelivery.getExpressNo()); + redisUtil.set("express_" + orderDelivery.getExpressNo(), res, 1L, TimeUnit.HOURS); + } else res = redisUtil.get("express_" + orderDelivery.getExpressNo()); + return success(res); + } + @ApiOperation("修改订单") @PutMapping() public ApiResult update(@RequestBody Order order) { @@ -451,4 +621,82 @@ public class OrderController extends BaseController { } return fail("删除失败"); } + + @PostMapping("/export-for-supplier") + public ApiResult exportForSupplier() throws IOException { + List supplierList = merchantService.list(new LambdaQueryWrapper().eq(Merchant::getShopType, "供应商")); + String filename = "excel/供应商报表.xlsx"; + String path = uploadPath + filename; + SXSSFWorkbook workbook = new SXSSFWorkbook(); + //创建工作表单 + SXSSFSheet sheet = workbook.createSheet(); + String[] headers = {"名称", "订单号", "订单金额", "是否已结算"}; + + SXSSFRow row0 = sheet.createRow(0); + for (int i = 0; i < headers.length; i++) { + row0.createCell(i).setCellValue(headers[i]); + } + if (!supplierList.isEmpty()) { + List dealerCapitalList = dealerCapitalService.list( + new LambdaQueryWrapper() + .eq(DealerCapital::getFlowType, 10) + .in(DealerCapital::getUserId, supplierList.stream().map(Merchant::getUserId).toList()) + ); + List orderList = orderService.listByIds(dealerCapitalList.stream().map(DealerCapital::getOrderId).toList()); + for (DealerCapital dealerCapital : dealerCapitalList) { + Merchant merchant = supplierList.stream().filter(d -> d.getUserId().equals(dealerCapital.getUserId())).findFirst().orElse(null); + Order order = orderList.stream().filter(item -> item.getOrderId().equals(dealerCapital.getOrderId())).findFirst().orElse(null); + SXSSFRow row = sheet.createRow(sheet.getLastRowNum() + 1); + row.createCell(0).setCellValue(merchant != null ? merchant.getMerchantName() : ""); + row.createCell(1).setCellValue(order != null ? order.getOrderNo() : ""); + row.createCell(2).setCellValue(dealerCapital.getMoney().toString() + "元"); + row.createCell(3).setCellValue(dealerCapital.getStatus().equals(0) ? "未结算" : "已结算"); + } + } + FileOutputStream output = new FileOutputStream(path); + workbook.write(output); + output.flush(); + + FileRecord result = new FileRecord(); + result.setCreateUserId(getLoginUserId()); + result.setName("供应商报表"); + result.setPath(filename); + result.setUrl(config.getServerUrl() + "/file/" + filename); + return success(result); + } + + @PostMapping("/export-for-cash") + public ApiResult exportForCash() throws IOException { + String filename = "excel/提现报表.xlsx"; + String path = uploadPath + filename; + SXSSFWorkbook workbook = new SXSSFWorkbook(); + //创建工作表单 + SXSSFSheet sheet = workbook.createSheet(); + String[] headers = {"名称", "提现金额"}; + + SXSSFRow row0 = sheet.createRow(0); + for (int i = 0; i < headers.length; i++) { + row0.createCell(i).setCellValue(headers[i]); + } + List dealerCapitalList = dealerCapitalService.list( + new LambdaQueryWrapper() + .eq(DealerCapital::getFlowType, 20) + ); + for (DealerCapital dealerCapital : dealerCapitalList) { + Merchant merchant = merchantService.getByUserId(dealerCapital.getUserId()); + SXSSFRow row = sheet.createRow(sheet.getLastRowNum() + 1); + row.createCell(1).setCellValue(merchant != null ? merchant.getMerchantName() : ""); + row.createCell(2).setCellValue(dealerCapital.getMoney().toString() + "元"); + } + FileOutputStream output = new FileOutputStream(path); + workbook.write(output); + output.flush(); + + FileRecord result = new FileRecord(); + result.setCreateUserId(getLoginUserId()); + result.setName("提现报表"); + result.setPath(filename); + result.setUrl(config.getServerUrl() + "/file/" + filename); + return success(result); + } } diff --git a/src/main/java/com/gxwebsoft/shop/controller/OrderDeliveryController.java b/src/main/java/com/gxwebsoft/shop/controller/OrderDeliveryController.java index d513dfc..d144fbe 100644 --- a/src/main/java/com/gxwebsoft/shop/controller/OrderDeliveryController.java +++ b/src/main/java/com/gxwebsoft/shop/controller/OrderDeliveryController.java @@ -58,10 +58,7 @@ public class OrderDeliveryController extends BaseController { private OrderDeliveryService orderDeliveryService; @Resource private OrderService orderService; - @Resource - private KuaiDi100 kuaiDi100; - @Resource - private ExpressService expressService; + @Resource private OrderGoodsService orderGoodsService; @Resource @@ -71,11 +68,26 @@ public class OrderDeliveryController extends BaseController { @Resource private WxMaProperties wxMaProperties; - @Autowired - private WeChatController weChatController; @Autowired private RequestUtil requestUtil; + @ApiOperation("发货") + @PostMapping("/set-express") + public ApiResult page(@RequestBody OrderDelivery orderDelivery, HttpServletRequest request) throws Exception { + Order order = orderService.getById(orderDelivery.getOrderId()); + Merchant merchant = merchantService.getById(order.getExpressMerchantId()); + if (!merchant.getUserId().equals(getLoginUserId())) return fail("无法发货"); + String access_token = JwtUtil.getAccessToken(request); + String tenantId = getTenantId().toString(); + requestUtil.setAccessToken(access_token); + requestUtil.setTenantId(tenantId); + User user = requestUtil.getByUserId(order.getPayUserId()); + List orderGoodsList = orderGoodsService.listByOrderId(order.getOrderId()); + Map res = orderDeliveryService.setExpress(user, orderDelivery, merchant, order, orderGoodsList); + if (res.get("res").equals(true)) return success(res.get("msg")); + return fail(res.get("msg")); + } + @ApiOperation("分页查询发货单") @GetMapping("/page") public ApiResult> page(OrderDeliveryParam param) { @@ -136,74 +148,10 @@ public class OrderDeliveryController extends BaseController { // merchant = merchantService.getById(3095); if (merchant != null) { // 商家发货 - Express express = expressService.getByIdRel(orderDelivery.getExpressId()); - BOrderReq bOrderReq = new BOrderReq(); - bOrderReq.setKuaidicom(express.getKuaidi100Code()); - bOrderReq.setSendManName(merchant.getMerchantName()); - bOrderReq.setSendManMobile(merchant.getPhone()); - bOrderReq.setSendManPrintAddr(merchant.getProvince() + merchant.getCity() + merchant.getRegion() + merchant.getAddress()); - bOrderReq.setRecManName(order.getRealName()); - bOrderReq.setRecManMobile(order.getPhone()); - bOrderReq.setRecManPrintAddr(order.getAddress()); - bOrderReq.setCallBackUrl("https://modules.gxwebsoft.com/api/shop/order-delivery/notify"); - HttpResult res = kuaiDi100.border(bOrderReq); -// System.out.println("res.getBody():" + res.getBody()); - if (res.getStatus() != 200) return fail("快递100接口异常"); - KuaiDi100Resp kuaiDi100Resp = JSONUtil.parseObject(res.getBody(), KuaiDi100Resp.class); - if (kuaiDi100Resp == null) return fail("快递100接口异常"); - if (!kuaiDi100Resp.getResult()) return fail(kuaiDi100Resp.getMessage()); - Map bOrderData = (Map) kuaiDi100Resp.getData(); -// System.out.println("kuaidinum:" + bOrderData.get("kuaidinum")); - orderDelivery.setExpressNo((String) bOrderData.get("kuaidinum")); - if (orderDeliveryService.save(orderDelivery)) { - order.setExpressMerchantId(merchant.getMerchantId()); - order.setExpressMerchantName(merchant.getMerchantName()); - order.setDeliveryStatus(20); - order.setDeliveryTime(DateUtil.date()); - orderService.updateById(order); - - if (order.getPayType().equals(PAY_TYPE_WECHAT) || (order.getPayType().equals(PAY_TYPE_FRIEND) && order.getFriendPayType().equals(PAY_TYPE_WECHAT))) { - User user = requestUtil.getByUserId(order.getPayUserId()); - // 上传小程序发货信息 - WxMaOrderShippingInfoUploadRequest uploadRequest = new WxMaOrderShippingInfoUploadRequest(); - uploadRequest.setLogisticsType(1); - uploadRequest.setDeliveryMode(1); - - OrderKeyBean orderKeyBean = new OrderKeyBean(); - orderKeyBean.setOrderNumberType(2); - orderKeyBean.setTransactionId(order.getTransactionId()); - uploadRequest.setOrderKey(orderKeyBean); - - uploadRequest.setOrderKey(orderKeyBean); - - List shippingList = new ArrayList<>(); - ShippingListBean shippingListBean = new ShippingListBean(); - shippingListBean.setTrackingNo((String) bOrderData.get("kuaidinum")); - shippingListBean.setExpressCompany(express.getWxCode()); - ContactBean contactBean = new ContactBean(); - contactBean.setReceiverContact(user.getMobile()); - shippingListBean.setContact(contactBean); - shippingList.add(shippingListBean); - uploadRequest.setShippingList(shippingList); - - String itemDesc = orderGoodsList.get(0).getGoods().getGoodsName(); - if (orderGoodsList.size() > 1) itemDesc += "等" + orderGoodsList.size() + "件商品"; - shippingListBean.setItemDesc(itemDesc); - - uploadRequest.setUploadTime(new DateTime().toString(DatePattern.UTC_WITH_ZONE_OFFSET_PATTERN)); - - PayerBean payerBean = new PayerBean(); - - payerBean.setOpenid(user.getOpenid()); - uploadRequest.setPayer(payerBean); - - WxMaService wxMaService = weChatController.wxMaService(); - WxMaOrderShippingService wxMaOrderShippingService = new WxMaOrderShippingServiceImpl(wxMaService); - WxMaOrderShippingInfoBaseResponse response = wxMaOrderShippingService.upload(uploadRequest); - System.out.println("response" + response); - } - return success("操作成功"); - } + requestUtil.setAccessToken(access_token); + requestUtil.setTenantId(tenantId); + User user = requestUtil.getByUserId(order.getPayUserId()); + orderDeliveryService.setExpress(user, orderDelivery, merchant, order, orderGoodsList); } return fail("操作失败"); } diff --git a/src/main/java/com/gxwebsoft/shop/controller/UserBalanceInMerchantController.java b/src/main/java/com/gxwebsoft/shop/controller/UserBalanceInMerchantController.java new file mode 100644 index 0000000..44b73cf --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/controller/UserBalanceInMerchantController.java @@ -0,0 +1,121 @@ +package com.gxwebsoft.shop.controller; + +import com.gxwebsoft.common.core.web.BaseController; +import com.gxwebsoft.shop.service.UserBalanceInMerchantService; +import com.gxwebsoft.shop.entity.UserBalanceInMerchant; +import com.gxwebsoft.shop.param.UserBalanceInMerchantParam; +import com.gxwebsoft.common.core.web.ApiResult; +import com.gxwebsoft.common.core.web.PageResult; +import com.gxwebsoft.common.core.web.PageParam; +import com.gxwebsoft.common.core.web.BatchParam; +import com.gxwebsoft.common.core.annotation.OperationLog; +import com.gxwebsoft.common.system.entity.User; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + * 用户在商家中的余额控制器 + * + * @author 科技小王子 + * @since 2024-11-20 01:55:04 + */ +@Api(tags = "用户在商家中的余额管理") +@RestController +@RequestMapping("/api/shop/user-balance-in-merchant") +public class UserBalanceInMerchantController extends BaseController { + @Resource + private UserBalanceInMerchantService userBalanceInMerchantService; + + @PostMapping("/data") + public ApiResult data(@RequestBody UserBalanceInMerchantParam param) { + // 使用关联查询 + return success(userBalanceInMerchantService.getBalance(param.getMerchantId(), getLoginUserId())); + } + + @ApiOperation("分页查询用户在商家中的余额") + @GetMapping("/page") + public ApiResult> page(UserBalanceInMerchantParam param) { + // 使用关联查询 + return success(userBalanceInMerchantService.pageRel(param)); + } + + @ApiOperation("查询全部用户在商家中的余额") + @GetMapping() + public ApiResult> list(UserBalanceInMerchantParam param) { + // 使用关联查询 + return success(userBalanceInMerchantService.listRel(param)); + } + + @PreAuthorize("hasAuthority('shop:userBalanceInMerchant:list')") + @ApiOperation("根据id查询用户在商家中的余额") + @GetMapping("/{id}") + public ApiResult get(@PathVariable("id") Integer id) { + // 使用关联查询 + return success(userBalanceInMerchantService.getByIdRel(id)); + } + + @ApiOperation("添加用户在商家中的余额") + @PostMapping() + public ApiResult save(@RequestBody UserBalanceInMerchant userBalanceInMerchant) { + // 记录当前登录用户id + User loginUser = getLoginUser(); + if (loginUser != null) { + userBalanceInMerchant.setUserId(loginUser.getUserId()); + } + if (userBalanceInMerchantService.save(userBalanceInMerchant)) { + return success("添加成功"); + } + return fail("添加失败"); + } + + @ApiOperation("修改用户在商家中的余额") + @PutMapping() + public ApiResult update(@RequestBody UserBalanceInMerchant userBalanceInMerchant) { + if (userBalanceInMerchantService.updateById(userBalanceInMerchant)) { + return success("修改成功"); + } + return fail("修改失败"); + } + + @ApiOperation("删除用户在商家中的余额") + @DeleteMapping("/{id}") + public ApiResult remove(@PathVariable("id") Integer id) { + if (userBalanceInMerchantService.removeById(id)) { + return success("删除成功"); + } + return fail("删除失败"); + } + + @ApiOperation("批量添加用户在商家中的余额") + @PostMapping("/batch") + public ApiResult saveBatch(@RequestBody List list) { + if (userBalanceInMerchantService.saveBatch(list)) { + return success("添加成功"); + } + return fail("添加失败"); + } + + @ApiOperation("批量修改用户在商家中的余额") + @PutMapping("/batch") + public ApiResult removeBatch(@RequestBody BatchParam batchParam) { + if (batchParam.update(userBalanceInMerchantService, "id")) { + return success("修改成功"); + } + return fail("修改失败"); + } + + @ApiOperation("批量删除用户在商家中的余额") + @DeleteMapping("/batch") + public ApiResult removeBatch(@RequestBody List ids) { + if (userBalanceInMerchantService.removeByIds(ids)) { + return success("删除成功"); + } + return fail("删除失败"); + } + +} diff --git a/src/main/java/com/gxwebsoft/shop/controller/UserCommissionRoleController.java b/src/main/java/com/gxwebsoft/shop/controller/UserCommissionRoleController.java new file mode 100644 index 0000000..efea2e9 --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/controller/UserCommissionRoleController.java @@ -0,0 +1,115 @@ +package com.gxwebsoft.shop.controller; + +import com.gxwebsoft.common.core.web.BaseController; +import com.gxwebsoft.shop.service.UserCommissionRoleService; +import com.gxwebsoft.shop.entity.UserCommissionRole; +import com.gxwebsoft.shop.param.UserCommissionRoleParam; +import com.gxwebsoft.common.core.web.ApiResult; +import com.gxwebsoft.common.core.web.PageResult; +import com.gxwebsoft.common.core.web.PageParam; +import com.gxwebsoft.common.core.web.BatchParam; +import com.gxwebsoft.common.core.annotation.OperationLog; +import com.gxwebsoft.common.system.entity.User; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.HashMap; +import java.util.List; + +/** + * 用户绑定分红角色控制器 + * + * @author 科技小王子 + * @since 2024-12-02 12:43:40 + */ +@Api(tags = "用户绑定分红角色管理") +@RestController +@RequestMapping("/api/shop/user-commission-role") +public class UserCommissionRoleController extends BaseController { + @Resource + private UserCommissionRoleService userCommissionRoleService; + + @ApiOperation("分页查询用户绑定分红角色") + @GetMapping("/page") + public ApiResult> page(UserCommissionRoleParam param) { + // 使用关联查询 + return success(userCommissionRoleService.pageRel(param)); + } + + @ApiOperation("查询全部用户绑定分红角色") + @GetMapping() + public ApiResult> list(UserCommissionRoleParam param) { + // 使用关联查询 + return success(userCommissionRoleService.listRel(param)); + } + + @PreAuthorize("hasAuthority('shop:userCommissionRole:list')") + @ApiOperation("根据id查询用户绑定分红角色") + @GetMapping("/{id}") + public ApiResult get(@PathVariable("id") Integer id) { + // 使用关联查询 + return success(userCommissionRoleService.getByIdRel(id)); + } + + @ApiOperation("添加用户绑定分红角色") + @PostMapping() + public ApiResult save(@RequestBody UserCommissionRole userCommissionRole) { + + if (userCommissionRoleService.save(userCommissionRole)) { + return success("添加成功"); + } + return fail("添加失败"); + } + + @ApiOperation("修改用户绑定分红角色") + @PutMapping() + public ApiResult update(@RequestBody UserCommissionRole userCommissionRole) { + if (userCommissionRoleService.updateById(userCommissionRole)) { + return success("修改成功"); + } + return fail("修改失败"); + } + + @ApiOperation("删除用户绑定分红角色") + @DeleteMapping("/{id}") + public ApiResult remove(@PathVariable("id") Integer id) { + if (userCommissionRoleService.removeById(id)) { + return success("删除成功"); + } + return fail("删除失败"); + } + + @ApiOperation("批量添加用户绑定分红角色") + @PostMapping("/batch") + public ApiResult saveBatch(@RequestBody List list) { + userCommissionRoleService.removeByMap(new HashMap<>() {{ + put("user_id", list.get(0).getUserId()); + }}); + if (userCommissionRoleService.saveBatch(list)) { + return success("添加成功"); + } + return fail("添加失败"); + } + + @ApiOperation("批量修改用户绑定分红角色") + @PutMapping("/batch") + public ApiResult removeBatch(@RequestBody BatchParam batchParam) { + if (batchParam.update(userCommissionRoleService, "id")) { + return success("修改成功"); + } + return fail("修改失败"); + } + + @ApiOperation("批量删除用户绑定分红角色") + @DeleteMapping("/batch") + public ApiResult removeBatch(@RequestBody List ids) { + if (userCommissionRoleService.removeByIds(ids)) { + return success("删除成功"); + } + return fail("删除失败"); + } + +} diff --git a/src/main/java/com/gxwebsoft/shop/controller/UserGoodsInMerchantController.java b/src/main/java/com/gxwebsoft/shop/controller/UserGoodsInMerchantController.java new file mode 100644 index 0000000..b433a28 --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/controller/UserGoodsInMerchantController.java @@ -0,0 +1,115 @@ +package com.gxwebsoft.shop.controller; + +import com.gxwebsoft.common.core.web.BaseController; +import com.gxwebsoft.shop.service.UserGoodsInMerchantService; +import com.gxwebsoft.shop.entity.UserGoodsInMerchant; +import com.gxwebsoft.shop.param.UserGoodsInMerchantParam; +import com.gxwebsoft.common.core.web.ApiResult; +import com.gxwebsoft.common.core.web.PageResult; +import com.gxwebsoft.common.core.web.PageParam; +import com.gxwebsoft.common.core.web.BatchParam; +import com.gxwebsoft.common.core.annotation.OperationLog; +import com.gxwebsoft.common.system.entity.User; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + * 用户在商家中的代金券控制器 + * + * @author 科技小王子 + * @since 2024-11-20 01:55:04 + */ +@Api(tags = "用户在商家中的代金券管理") +@RestController +@RequestMapping("/api/shop/user-goods-in-merchant") +public class UserGoodsInMerchantController extends BaseController { + @Resource + private UserGoodsInMerchantService userGoodsInMerchantService; + + @ApiOperation("分页查询用户在商家中的代金券") + @GetMapping("/page") + public ApiResult> page(UserGoodsInMerchantParam param) { + // 使用关联查询 + return success(userGoodsInMerchantService.pageRel(param)); + } + + @ApiOperation("查询全部用户在商家中的代金券") + @GetMapping() + public ApiResult> list(UserGoodsInMerchantParam param) { + // 使用关联查询 + return success(userGoodsInMerchantService.listRel(param)); + } + + @PreAuthorize("hasAuthority('shop:userGoodsInMerchant:list')") + @ApiOperation("根据id查询用户在商家中的代金券") + @GetMapping("/{id}") + public ApiResult get(@PathVariable("id") Integer id) { + // 使用关联查询 + return success(userGoodsInMerchantService.getByIdRel(id)); + } + + @ApiOperation("添加用户在商家中的代金券") + @PostMapping() + public ApiResult save(@RequestBody UserGoodsInMerchant userGoodsInMerchant) { + // 记录当前登录用户id + User loginUser = getLoginUser(); + if (loginUser != null) { + userGoodsInMerchant.setUserId(loginUser.getUserId()); + } + if (userGoodsInMerchantService.save(userGoodsInMerchant)) { + return success("添加成功"); + } + return fail("添加失败"); + } + + @ApiOperation("修改用户在商家中的代金券") + @PutMapping() + public ApiResult update(@RequestBody UserGoodsInMerchant userGoodsInMerchant) { + if (userGoodsInMerchantService.updateById(userGoodsInMerchant)) { + return success("修改成功"); + } + return fail("修改失败"); + } + + @ApiOperation("删除用户在商家中的代金券") + @DeleteMapping("/{id}") + public ApiResult remove(@PathVariable("id") Integer id) { + if (userGoodsInMerchantService.removeById(id)) { + return success("删除成功"); + } + return fail("删除失败"); + } + + @ApiOperation("批量添加用户在商家中的代金券") + @PostMapping("/batch") + public ApiResult saveBatch(@RequestBody List list) { + if (userGoodsInMerchantService.saveBatch(list)) { + return success("添加成功"); + } + return fail("添加失败"); + } + + @ApiOperation("批量修改用户在商家中的代金券") + @PutMapping("/batch") + public ApiResult removeBatch(@RequestBody BatchParam batchParam) { + if (batchParam.update(userGoodsInMerchantService, "id")) { + return success("修改成功"); + } + return fail("修改失败"); + } + + @ApiOperation("批量删除用户在商家中的代金券") + @DeleteMapping("/batch") + public ApiResult removeBatch(@RequestBody List ids) { + if (userGoodsInMerchantService.removeByIds(ids)) { + return success("删除成功"); + } + return fail("删除失败"); + } + +} diff --git a/src/main/java/com/gxwebsoft/shop/controller/ViewHistoryController.java b/src/main/java/com/gxwebsoft/shop/controller/ViewHistoryController.java new file mode 100644 index 0000000..36fdce8 --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/controller/ViewHistoryController.java @@ -0,0 +1,130 @@ +package com.gxwebsoft.shop.controller; + +import com.gxwebsoft.common.core.web.BaseController; +import com.gxwebsoft.shop.service.ViewHistoryService; +import com.gxwebsoft.shop.entity.ViewHistory; +import com.gxwebsoft.shop.param.ViewHistoryParam; +import com.gxwebsoft.common.core.web.ApiResult; +import com.gxwebsoft.common.core.web.PageResult; +import com.gxwebsoft.common.core.web.PageParam; +import com.gxwebsoft.common.core.web.BatchParam; +import com.gxwebsoft.common.core.annotation.OperationLog; +import com.gxwebsoft.common.system.entity.User; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + * 浏览历史控制器 + * + * @author 科技小王子 + * @since 2024-11-22 22:13:47 + */ +@Api(tags = "浏览历史管理") +@RestController +@RequestMapping("/api/shop/view-history") +public class ViewHistoryController extends BaseController { + @Resource + private ViewHistoryService viewHistoryService; + + @ApiOperation("分页查询浏览历史") + @GetMapping("/page") + public ApiResult> page(ViewHistoryParam param) { + // 使用关联查询 + param.setUserId(getLoginUserId()); + return success(viewHistoryService.pageRel(param)); + } + + @ApiOperation("查询全部浏览历史") + @GetMapping() + public ApiResult> list(ViewHistoryParam param) { + // 使用关联查询 + param.setUserId(getLoginUserId()); + return success(viewHistoryService.listRel(param)); + } + + @PreAuthorize("hasAuthority('shop:viewHistory:list')") + @ApiOperation("根据id查询浏览历史") + @GetMapping("/{id}") + public ApiResult get(@PathVariable("id") Integer id) { + // 使用关联查询 + return success(viewHistoryService.getByIdRel(id)); + } + + @ApiOperation("添加浏览历史") + @PostMapping() + public ApiResult save(@RequestBody ViewHistory viewHistory) { + ViewHistory check = null; + if (viewHistory.getType().equals(1)) { + if (getLoginUser() != null) { + check = viewHistoryService.check(viewHistory.getType(), viewHistory.getPk(), getLoginUserId()); + viewHistory.setUserId(getLoginUserId()); + } else { + check = viewHistoryService.check(viewHistory.getType(), viewHistory.getPk(), viewHistory.getOpenId()); + } + } else { + // 记录当前登录用户id + User loginUser = getLoginUser(); + if (loginUser != null) { + viewHistory.setUserId(loginUser.getUserId()); + } + check = viewHistoryService.check(viewHistory.getType(), viewHistory.getPk(), getLoginUserId()); + } + if (check == null) { + if (viewHistoryService.save(viewHistory)) { + return success("添加成功"); + } + } + return fail("已经浏览过了"); + } + + @ApiOperation("修改浏览历史") + @PutMapping() + public ApiResult update(@RequestBody ViewHistory viewHistory) { + if (viewHistoryService.updateById(viewHistory)) { + return success("修改成功"); + } + return fail("修改失败"); + } + + @ApiOperation("删除浏览历史") + @DeleteMapping("/{id}") + public ApiResult remove(@PathVariable("id") Integer id) { + if (viewHistoryService.removeById(id)) { + return success("删除成功"); + } + return fail("删除失败"); + } + + @ApiOperation("批量添加浏览历史") + @PostMapping("/batch") + public ApiResult saveBatch(@RequestBody List list) { + if (viewHistoryService.saveBatch(list)) { + return success("添加成功"); + } + return fail("添加失败"); + } + + @ApiOperation("批量修改浏览历史") + @PutMapping("/batch") + public ApiResult removeBatch(@RequestBody BatchParam batchParam) { + if (batchParam.update(viewHistoryService, "id")) { + return success("修改成功"); + } + return fail("修改失败"); + } + + @ApiOperation("批量删除浏览历史") + @DeleteMapping("/batch") + public ApiResult removeBatch(@RequestBody List ids) { + if (viewHistoryService.removeByIds(ids)) { + return success("删除成功"); + } + return fail("删除失败"); + } + +} diff --git a/src/main/java/com/gxwebsoft/shop/controller/WeChatController.java b/src/main/java/com/gxwebsoft/shop/controller/WeChatController.java index 75f740d..1464378 100644 --- a/src/main/java/com/gxwebsoft/shop/controller/WeChatController.java +++ b/src/main/java/com/gxwebsoft/shop/controller/WeChatController.java @@ -2,9 +2,12 @@ package com.gxwebsoft.shop.controller; import cn.binarywang.wx.miniapp.api.WxMaQrcodeService; import cn.binarywang.wx.miniapp.api.WxMaService; +import cn.binarywang.wx.miniapp.api.WxMaSubscribeService; import cn.binarywang.wx.miniapp.api.impl.WxMaQrcodeServiceImpl; import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl; +import cn.binarywang.wx.miniapp.api.impl.WxMaSubscribeServiceImpl; import cn.binarywang.wx.miniapp.bean.WxMaCodeLineColor; +import cn.binarywang.wx.miniapp.bean.WxMaSubscribeMessage; import cn.binarywang.wx.miniapp.config.impl.WxMaDefaultConfigImpl; import cn.hutool.core.io.FileUtil; import cn.hutool.http.HttpRequest; @@ -18,6 +21,7 @@ import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import me.chanjar.weixin.common.error.WxErrorException; import me.chanjar.weixin.common.error.WxRuntimeException; +import me.chanjar.weixin.mp.api.WxMpMassMessageService; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -44,11 +48,12 @@ public class WeChatController extends BaseController { @ApiOperation("好友代付二维码") @PostMapping("/friend-pay-qr") - public ApiResult makeFriendPayQr(@RequestBody Order order, HttpServletRequest request){ + public ApiResult makeFriendPayQr(@RequestBody Order order, HttpServletRequest request) { String filepath = uploadPath + "qr/"; if (!FileUtil.exist(filepath)) FileUtil.mkdir(filepath); String filename = "/friendPay_" + order.getOrderId() + ".png"; - if (FileUtil.exist(filepath + "/" + filename)) return success("生成成功", "file/qrcode/" + getTenantId() + filename); + if (FileUtil.exist(filepath + "/" + filename)) + return success("生成成功", "file/qrcode/" + getTenantId() + filename); try { makeQr(request, filename, order.getOrderId().toString(), "pages/index/index"); } catch (IOException | WxErrorException e) { @@ -70,7 +75,7 @@ public class WeChatController extends BaseController { lineColor.setR("0"); lineColor.setG("0"); lineColor.setB("0"); - File file = wxMaQrcodeService.createWxaCodeUnlimit(scene, page, false, "develop", 200, false, + File file = wxMaQrcodeService.createWxaCodeUnlimit(scene, page, false, "release", 200, false, lineColor, false); file.renameTo(new File(filename)); } @@ -94,4 +99,20 @@ public class WeChatController extends BaseController { }).collect(Collectors.toMap(WxMaDefaultConfigImpl::getAppid, a -> a, (o, n) -> o))); return maService; } + + public void sendMessage(String openid, String templateId, String page, List data) throws WxErrorException { + try { + WxMaService wxMaService = wxMaService(); + WxMaSubscribeMessage message = new WxMaSubscribeMessage(); + message.setToUser(openid); + message.setTemplateId(templateId); + message.setPage(page); + message.setData(data); + WxMaSubscribeService wxMaSubscribeService = new WxMaSubscribeServiceImpl(wxMaService); + wxMaSubscribeService.sendSubscribeMsg(message); + }catch (WxErrorException e) { + System.out.println("WxErrorException: " + e.getMessage()); + } + } } + diff --git a/src/main/java/com/gxwebsoft/shop/controller/WxPayNotifyNbgController.java b/src/main/java/com/gxwebsoft/shop/controller/WxPayNotifyNbgController.java index 10cd835..2b41658 100644 --- a/src/main/java/com/gxwebsoft/shop/controller/WxPayNotifyNbgController.java +++ b/src/main/java/com/gxwebsoft/shop/controller/WxPayNotifyNbgController.java @@ -34,72 +34,140 @@ import java.util.stream.Collectors; @RestController @RequestMapping("/api/shop/wx-pay/notify/nbg") public class WxPayNotifyNbgController extends BaseController { - @Resource - private OrderService orderService; - @Resource - private OrderInfoService orderInfoService; - @Resource - private OrderGoodsService orderGoodsService; - @Resource - private GoodsService goodsService; - @Resource - private UsersService usersService; - @Resource - private CartService cartService; + @Resource + private OrderService orderService; + @Resource + private OrderInfoService orderInfoService; + @Resource + private OrderGoodsService orderGoodsService; + @Resource + private GoodsService goodsService; + @Resource + private UsersService usersService; + @Resource + private CartService cartService; + @Resource + private GoodsStockInMerchantService goodsStockInMerchantService; + @Resource + private MerchantService merchantService; + @Resource + private MerchantChargePackageService merchantChargePackageService; + @Resource + private UserBalanceInMerchantService userBalanceInMerchantService; + @Resource + private MerchantGoodsPackageService merchantGoodsPackageService; + @Resource + private UserGoodsInMerchantService userGoodsInMerchantService; - @Resource - private RedisUtil redisUtil; + @Resource + private RedisUtil redisUtil; - @ApiModelProperty("微信支付通知") - @PostMapping() - public String demo(@RequestBody Transaction transaction){ + @ApiModelProperty("微信支付通知") + @PostMapping() + public String demo(@RequestBody Transaction transaction) { + return doPay(transaction); + } - System.out.println("支付通知 >>>>> "); - System.out.println("transaction = " + transaction); + public String doPay(Transaction transaction){ + System.out.println("支付通知 >>>>> "); + System.out.println("transaction = " + transaction); - // TODO 1.查询订单信息 - final Order order = orderService.getByOutTradeNo(transaction.getOutTradeNo()); - // TODO 2.更新订单支付状态 - order.setPayStatus(1); - order.setTransactionId(transaction.getTransactionId()); - order.setPayPrice(new BigDecimal(NumberUtil.decimalFormat("0.00", transaction.getAmount().getTotal() * 0.01))); - order.setPayTime(DateUtil.date()); - order.setExpirationTime(DateUtil.offset(DateUtil.date(), DateField.YEAR, 10)); - orderService.updateById(order); - // TODO 3.更新订单商品的支付状态 - if (order.getType().equals(0)) { - final boolean update = orderGoodsService.update(new LambdaUpdateWrapper().eq(OrderGoods::getOrderId, order.getOrderId()).set(OrderGoods::getPayStatus, 1)); - System.out.println("update1 = " + update); - // TODO 3.1 更新商品销量、库存数量 - final List orderGoods = orderGoodsService.list(new LambdaQueryWrapper().eq(OrderGoods::getOrderId, order.getOrderId())); - final Set goodsIds = orderGoods.stream().map(OrderGoods::getGoodsId).collect(Collectors.toSet()); - final Map> collectGoods = orderGoods.stream().collect(Collectors.groupingBy(OrderGoods::getGoodsId)); - final List goods = goodsService.list(new LambdaQueryWrapper().in(Goods::getGoodsId, goodsIds)); - for (Goods g : goods) { - final List goods1 = collectGoods.get(g.getGoodsId()); - final OrderGoods goods2 = goods1.get(0); - g.setSales(g.getSales() + goods2.getTotalNum()); - if (g.getStock().compareTo(0) >= 0) { - g.setStock(g.getStock() - goods2.getTotalNum()); + // TODO 1.查询订单信息 + final Order order = orderService.getByOutTradeNo(transaction.getOutTradeNo()); + // TODO 2.更新订单支付状态 + order.setPayStatus(1); + order.setTransactionId(transaction.getTransactionId()); + order.setPayPrice(new BigDecimal(NumberUtil.decimalFormat("0.00", transaction.getAmount().getTotal() * 0.01))); + order.setPayTime(DateUtil.date()); + order.setExpirationTime(DateUtil.offset(DateUtil.date(), DateField.YEAR, 10)); + orderService.updateById(order); + // TODO 3.更新订单商品的支付状态 + if (order.getType().equals(0)) { + final boolean update = orderGoodsService.update(new LambdaUpdateWrapper().eq(OrderGoods::getOrderId, order.getOrderId()).set(OrderGoods::getPayStatus, 1)); + System.out.println("update1 = " + update); + // TODO 3.1 更新商品销量、库存数量 + final List orderGoods = orderGoodsService.listByOrderId(order.getOrderId()); + final Set goodsIds = orderGoods.stream().map(OrderGoods::getGoodsId).collect(Collectors.toSet()); + final Map> collectGoods = orderGoods.stream().collect(Collectors.groupingBy(OrderGoods::getGoodsId)); + final List goods = goodsService.list(new LambdaQueryWrapper().in(Goods::getGoodsId, goodsIds)); + for (Goods g : goods) { + final List goods1 = collectGoods.get(g.getGoodsId()); + final OrderGoods goods2 = goods1.get(0); + g.setSales(g.getSales() + goods2.getTotalNum()); + if (g.getStock().compareTo(0) >= 0) { + g.setStock(g.getStock() - goods2.getTotalNum()); + } + } + final boolean batchById = goodsService.updateBatchById(goods); + System.out.println("batchById = " + batchById); + if (order.getDeliveryType().equals(0)) { + // 分配最近的店铺 + List goodsStockInMerchantList = + merchantService.listByDistance(order.getAddressLat(), order.getAddressLng(), "供应商"); + System.out.println("goodsStockInMerchantList" + goodsStockInMerchantList); + if (!goodsStockInMerchantList.isEmpty()) { + order.setExpressMerchantId(goodsStockInMerchantList.get(0).getMerchantId()); + order.setExpressMerchantName(goodsStockInMerchantList.get(0).getMerchantName()); + orderService.updateById(order); + } + } + } else if (order.getType().equals(1)) { + final boolean update = orderInfoService.update( + new LambdaUpdateWrapper() + .eq(OrderInfo::getOrderId, order.getOrderId()) + .set(OrderInfo::getPayStatus, 1) + ); + System.out.println("update2 = " + update); + final List orderGoods = orderGoodsService.listByOrderId(order.getOrderId()); + final Set goodsIds = orderGoods.stream().map(OrderGoods::getGoodsId).collect(Collectors.toSet()); + final Map> collectGoods = orderGoods.stream().collect(Collectors.groupingBy(OrderGoods::getGoodsId)); + final List goods = goodsService.list(new LambdaQueryWrapper().in(Goods::getGoodsId, goodsIds)); + for (Goods g : goods) { + final List goods1 = collectGoods.get(g.getGoodsId()); + final OrderGoods goods2 = goods1.get(0); + g.setSales(g.getSales() + goods2.getTotalNum()); + } + } else if (order.getType().equals(3)) { + // 门店充值 + final List orderGoods = orderGoodsService.listByOrderId(order.getOrderId()); + MerchantChargePackage merchantChargePackage = merchantChargePackageService.getById(orderGoods.get(0).getGoodsId()); + UserBalanceInMerchant userBalanceInMerchant = userBalanceInMerchantService.getBalance(order.getMerchantId(), order.getUserId()); + BigDecimal balance = merchantChargePackage.getAmount().add(merchantChargePackage.getSendAmount()); + if (userBalanceInMerchant == null) { + userBalanceInMerchant = new UserBalanceInMerchant(); + userBalanceInMerchant.setUserId(order.getUserId()); + userBalanceInMerchant.setMerchantId(order.getMerchantId()); + userBalanceInMerchant.setBalance(balance); + userBalanceInMerchantService.save(userBalanceInMerchant); + } else { + userBalanceInMerchant.setBalance(userBalanceInMerchant.getBalance().add(balance)); + userBalanceInMerchantService.updateById(userBalanceInMerchant); + } + } else if (order.getType().equals(4)) { + // 门店商品套餐 + final List orderGoods = orderGoodsService.listByOrderId(order.getOrderId()); + MerchantGoodsPackage merchantGoodsPackage = merchantGoodsPackageService.getById(orderGoods.get(0).getGoodsId()); + UserGoodsInMerchant userGoodsInMerchant = userGoodsInMerchantService.infoInMerchant(merchantGoodsPackage.getId(), order.getUserId()); + if (userGoodsInMerchant == null) { + userGoodsInMerchant = new UserGoodsInMerchant(); + userGoodsInMerchant.setUserId(order.getUserId()); + userGoodsInMerchant.setPackageId(merchantGoodsPackage.getId()); + userGoodsInMerchant.setRemainNum(merchantGoodsPackage.getGetNum()); + userGoodsInMerchantService.save(userGoodsInMerchant); + } else { + userGoodsInMerchant.setRemainNum(userGoodsInMerchant.getRemainNum() + merchantGoodsPackage.getGetNum()); + userGoodsInMerchantService.updateById(userGoodsInMerchant); + } } - } - final boolean batchById = goodsService.updateBatchById(goods); - System.out.println("batchById = " + batchById); + + // TODO 4. 清除购物车 + final boolean remove = cartService.remove(new LambdaQueryWrapper().eq(Cart::getUserId, order.getUserId()).eq(Cart::getIsNew, true)); + System.out.println("remove = " + remove); + orderService.settle(order); + + // TODO 5.累计会员积分 + + + return "订单已支付"; } - if (order.getType().equals(1)) { - final boolean update = orderInfoService.update(new LambdaUpdateWrapper().eq(OrderInfo::getOrderId, order.getOrderId()).set(OrderInfo::getPayStatus, 1)); - System.out.println("update2 = " + update); - // TODO 3.2 更新订单类型为预定的关联订单信息 - } - - // TODO 4. 清除购物车 - final boolean remove = cartService.remove(new LambdaQueryWrapper().eq(Cart::getUserId, order.getUserId()).eq(Cart::getIsNew, true)); - System.out.println("remove = " + remove); - orderService.settle(order); - - // TODO 5.累计会员积分 - - return "订单已支付"; - } - } diff --git a/src/main/java/com/gxwebsoft/shop/entity/CommissionRole.java b/src/main/java/com/gxwebsoft/shop/entity/CommissionRole.java new file mode 100644 index 0000000..1dffe62 --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/entity/CommissionRole.java @@ -0,0 +1,61 @@ +package com.gxwebsoft.shop.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; + +import java.time.LocalDateTime; +import java.io.Serializable; + +import com.gxwebsoft.common.system.entity.Area; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 分红角色 + * + * @author 科技小王子 + * @since 2024-12-02 12:43:40 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@ApiModel(value = "CommissionRole对象", description = "分红角色") +@TableName("shop_commission_role") +public class CommissionRole implements Serializable { + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private String title; + + private Integer provinceId; + + private Integer cityId; + + private Integer regionId; + + @ApiModelProperty(value = "状态, 0正常, 1异常") + private Integer status; + + @ApiModelProperty(value = "备注") + private String comments; + + @ApiModelProperty(value = "租户id") + private Integer tenantId; + + @ApiModelProperty(value = "创建时间") + private LocalDateTime createTime; + + @TableField(exist = false) + private Area province; + + @TableField(exist = false) + private Area city; + + @TableField(exist = false) + private Area region; +} diff --git a/src/main/java/com/gxwebsoft/shop/entity/DealerOrder.java b/src/main/java/com/gxwebsoft/shop/entity/DealerOrder.java index 826947c..4da8a1f 100644 --- a/src/main/java/com/gxwebsoft/shop/entity/DealerOrder.java +++ b/src/main/java/com/gxwebsoft/shop/entity/DealerOrder.java @@ -1,11 +1,15 @@ package com.gxwebsoft.shop.entity; import java.math.BigDecimal; + +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import java.time.LocalDateTime; import java.io.Serializable; + +import com.gxwebsoft.common.system.entity.User; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -73,4 +77,9 @@ public class DealerOrder implements Serializable { @ApiModelProperty(value = "修改时间") private LocalDateTime updateTime; + @TableField(exist = false) + private Order order; + + @TableField(exist = false) + private User user; } diff --git a/src/main/java/com/gxwebsoft/shop/entity/ExpressTemplate.java b/src/main/java/com/gxwebsoft/shop/entity/ExpressTemplate.java new file mode 100644 index 0000000..6643b29 --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/entity/ExpressTemplate.java @@ -0,0 +1,62 @@ +package com.gxwebsoft.shop.entity; + +import com.baomidou.mybatisplus.annotation.*; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.io.Serializable; +import java.util.List; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 运费模板 + * + * @author 科技小王子 + * @since 2024-11-05 18:03:28 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@ApiModel(value = "ExpressTemplate对象", description = "运费模板") +@TableName("shop_express_template") +public class ExpressTemplate implements Serializable { + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private String title; + + private Integer type; + + @ApiModelProperty(value = "首件价格") + private BigDecimal firstAmount; + private BigDecimal firstNum; + + @ApiModelProperty(value = "续件价格") + private BigDecimal extraAmount; + private BigDecimal extraNum; + + @ApiModelProperty(value = "状态, 0已发布, 1待审核 2已驳回 3违规内容") + private Integer status; + + @ApiModelProperty(value = "是否删除, 0否, 1是") + @TableLogic + private Integer deleted; + + @ApiModelProperty(value = "租户id") + private Integer tenantId; + + @ApiModelProperty(value = "创建时间") + private LocalDateTime createTime; + + @ApiModelProperty(value = "修改时间") + private LocalDateTime updateTime; + + @ApiModelProperty(value = "详情") + @TableField(exist = false) + private List detailList; +} diff --git a/src/main/java/com/gxwebsoft/shop/entity/ExpressTemplateDetail.java b/src/main/java/com/gxwebsoft/shop/entity/ExpressTemplateDetail.java new file mode 100644 index 0000000..7b31f68 --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/entity/ExpressTemplateDetail.java @@ -0,0 +1,66 @@ +package com.gxwebsoft.shop.entity; + +import java.math.BigDecimal; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.TableLogic; +import java.io.Serializable; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 运费模板 + * + * @author 科技小王子 + * @since 2024-11-05 18:03:28 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@ApiModel(value = "ExpressTemplateDetail对象", description = "运费模板") +@TableName("shop_express_template_detail") +public class ExpressTemplateDetail implements Serializable { + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private Integer templateId; + + @ApiModelProperty(value = "0按件") + private Integer type; + + private Integer provinceId; + + private Integer cityId; + + @ApiModelProperty(value = "首件价格") + private BigDecimal firstAmount; + + private BigDecimal firstNum; + + @ApiModelProperty(value = "续件价格") + private BigDecimal extraAmount; + + private BigDecimal extraNum; + + @ApiModelProperty(value = "状态, 0已发布, 1待审核 2已驳回 3违规内容") + private Integer status; + + @ApiModelProperty(value = "是否删除, 0否, 1是") + @TableLogic + private Integer deleted; + + @ApiModelProperty(value = "租户id") + private Integer tenantId; + + @ApiModelProperty(value = "创建时间") + private LocalDateTime createTime; + + @ApiModelProperty(value = "修改时间") + private LocalDateTime updateTime; + +} diff --git a/src/main/java/com/gxwebsoft/shop/entity/Goods.java b/src/main/java/com/gxwebsoft/shop/entity/Goods.java index 8de9481..c3c0b93 100644 --- a/src/main/java/com/gxwebsoft/shop/entity/Goods.java +++ b/src/main/java/com/gxwebsoft/shop/entity/Goods.java @@ -74,9 +74,15 @@ public class Goods implements Serializable { @ApiModelProperty(value = "单位名称") private String unitName; + @ApiModelProperty(value = "重量(kg)") + private BigDecimal weight; + @ApiModelProperty(value = "消费赚取积分") private BigDecimal gainIntegral; + @ApiModelProperty(value = "原价") + private BigDecimal originPrice; + @ApiModelProperty(value = "进货价格") private BigDecimal price; @@ -92,14 +98,18 @@ public class Goods implements Serializable { @ApiModelProperty(value = "销售价格") private BigDecimal salePrice; - @ApiModelProperty(value = "进货价") + @ApiModelProperty(value = "批发价") private BigDecimal buyingPrice; + @ApiModelProperty(value = "批发价是否开启") + private Integer buyingPriceOpen; + @ApiModelProperty(value = "经销商价格") private BigDecimal dealerPrice; - @ApiModelProperty(value = "连锁店价格") + @ApiModelProperty(value = "成本价") private BigDecimal chainStorePrice; + private BigDecimal chainStoreRate; @ApiModelProperty(value = "会员店价格") @@ -146,12 +156,17 @@ public class Goods implements Serializable { @ApiModelProperty(value = "商品重量") private Integer goodsWeight; + @ApiModelProperty(value = "是否开启分红角色") + private Integer commissionRole; + @ApiModelProperty(value = "推荐") private Integer recommend; @ApiModelProperty(value = "商户ID") private Integer merchantId; + private Integer expressTemplateId; + private Integer canExpress; @ApiModelProperty(value = "商户名称") @@ -186,6 +201,12 @@ public class Goods implements Serializable { @ApiModelProperty(value = "租户id") private Integer tenantId; + private String canUseDate; + + private String ensureTag; + + private Integer expiredDay; + @ApiModelProperty(value = "创建时间") private Date createTime; @@ -246,6 +267,14 @@ public class Goods implements Serializable { @TableField(exist = false) private String childrenName; + @TableField(exist = false) + @ApiModelProperty(value = "运费模板") + public ExpressTemplate expressTemplate; + + @TableField(exist = false) + @ApiModelProperty(value = "角色分红") + public List goodsRoleCommission; + public String getParentPath() { if (ObjectUtil.isNotEmpty(this.parentId)) { return "/product/".concat(this.parentId.toString()); diff --git a/src/main/java/com/gxwebsoft/shop/entity/GoodsRoleCommission.java b/src/main/java/com/gxwebsoft/shop/entity/GoodsRoleCommission.java new file mode 100644 index 0000000..72ef1b8 --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/entity/GoodsRoleCommission.java @@ -0,0 +1,50 @@ +package com.gxwebsoft.shop.entity; + +import java.math.BigDecimal; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import java.time.LocalDateTime; +import java.io.Serializable; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 商品绑定角色的分润金额 + * + * @author 科技小王子 + * @since 2024-12-02 12:43:40 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@ApiModel(value = "GoodsRoleCommission对象", description = "商品绑定角色的分润金额") +@TableName("shop_goods_role_commission") +public class GoodsRoleCommission implements Serializable { + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private Integer roleId; + + private Integer goodsId; + + private String sku; + + private BigDecimal amount; + + @ApiModelProperty(value = "状态, 0正常, 1异常") + private Integer status; + + @ApiModelProperty(value = "备注") + private String comments; + + @ApiModelProperty(value = "租户id") + private Integer tenantId; + + @ApiModelProperty(value = "创建时间") + private LocalDateTime createTime; + +} diff --git a/src/main/java/com/gxwebsoft/shop/entity/GoodsSku.java b/src/main/java/com/gxwebsoft/shop/entity/GoodsSku.java index 504b81c..80e8f54 100644 --- a/src/main/java/com/gxwebsoft/shop/entity/GoodsSku.java +++ b/src/main/java/com/gxwebsoft/shop/entity/GoodsSku.java @@ -45,7 +45,10 @@ public class GoodsSku implements Serializable { @ApiModelProperty(value = "商品价格") private BigDecimal price; - @ApiModelProperty(value = "市场价格") + @ApiModelProperty(value = "市场价") + private BigDecimal originPrice; + + @ApiModelProperty(value = "会员价") private BigDecimal salePrice; @ApiModelProperty(value = "成本价") @@ -81,6 +84,21 @@ public class GoodsSku implements Serializable { @ApiModelProperty(value = "创建时间") private Date createTime; + @ApiModelProperty(value = "会员店直推分佣") + private BigDecimal memberStoreCommission; + + @ApiModelProperty(value = "供应商直推分佣") + private BigDecimal supplierCommission; + + @ApiModelProperty(value = "批发价") + private BigDecimal buyingPrice; + + @ApiModelProperty(value = "批发价是否开启") + private Integer buyingPriceOpen; + + @ApiModelProperty(value = "成本价") + private BigDecimal chainStorePrice; + @ApiModelProperty(value = "商品图片对象") @TableField(exist = false) private List images; diff --git a/src/main/java/com/gxwebsoft/shop/entity/MerchantChargePackage.java b/src/main/java/com/gxwebsoft/shop/entity/MerchantChargePackage.java new file mode 100644 index 0000000..bb2d288 --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/entity/MerchantChargePackage.java @@ -0,0 +1,63 @@ +package com.gxwebsoft.shop.entity; + +import java.math.BigDecimal; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.TableLogic; +import java.io.Serializable; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 商家充值套餐 + * + * @author 科技小王子 + * @since 2024-11-20 01:55:04 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@ApiModel(value = "MerchantChargePackage对象", description = "商家充值套餐") +@TableName("shop_merchant_charge_package") +public class MerchantChargePackage implements Serializable { + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + @ApiModelProperty(value = "金额") + private BigDecimal amount; + + @ApiModelProperty(value = "赠送金额") + private BigDecimal sendAmount; + + private Integer merchantId; + + private Integer userId; + + @ApiModelProperty(value = "0待审核1通过2拒绝") + private Boolean status; + + @ApiModelProperty(value = "排序(数字越小越靠前)") + private Integer sortNumber; + + @ApiModelProperty(value = "备注") + private String comments; + + @ApiModelProperty(value = "是否删除, 0否, 1是") + @TableLogic + private Integer deleted; + + @ApiModelProperty(value = "租户id") + private Integer tenantId; + + @ApiModelProperty(value = "创建时间") + private LocalDateTime createTime; + + @ApiModelProperty(value = "修改时间") + private LocalDateTime updateTime; + +} diff --git a/src/main/java/com/gxwebsoft/shop/entity/MerchantGoodsPackage.java b/src/main/java/com/gxwebsoft/shop/entity/MerchantGoodsPackage.java new file mode 100644 index 0000000..fd78a01 --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/entity/MerchantGoodsPackage.java @@ -0,0 +1,73 @@ +package com.gxwebsoft.shop.entity; + +import java.math.BigDecimal; + +import com.baomidou.mybatisplus.annotation.*; + +import java.time.LocalDateTime; +import java.io.Serializable; +import java.util.List; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import io.swagger.models.auth.In; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 商家充值套餐 + * + * @author 科技小王子 + * @since 2024-11-20 01:55:04 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@ApiModel(value = "MerchantGoodsPackage对象", description = "商家充值套餐") +@TableName("shop_merchant_goods_package") +public class MerchantGoodsPackage implements Serializable { + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + @ApiModelProperty(value = "金额") + private BigDecimal amount; + + @ApiModelProperty(value = "可使用次数") + private Integer getNum; + + private Integer merchantId; + + private Integer userId; + + @ApiModelProperty(value = "0待审核1通过2拒绝") + private Boolean status; + + @ApiModelProperty(value = "排序(数字越小越靠前)") + private Integer sortNumber; + + @ApiModelProperty(value = "备注") + private String comments; + + @ApiModelProperty(value = "是否删除, 0否, 1是") + @TableLogic + private Integer deleted; + + @ApiModelProperty(value = "租户id") + private Integer tenantId; + + @ApiModelProperty(value = "创建时间") + private LocalDateTime createTime; + + @ApiModelProperty(value = "修改时间") + private LocalDateTime updateTime; + + @TableField(exist = false) + private List goodsIdList; + + @TableField(exist = false) + private List goodsList; + + @TableField(exist = false) + private UserGoodsInMerchant userPackage; +} diff --git a/src/main/java/com/gxwebsoft/shop/entity/MerchantPackageGoods.java b/src/main/java/com/gxwebsoft/shop/entity/MerchantPackageGoods.java new file mode 100644 index 0000000..4b69acb --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/entity/MerchantPackageGoods.java @@ -0,0 +1,58 @@ +package com.gxwebsoft.shop.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.TableLogic; +import java.io.Serializable; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 商家套餐可使用的商品 + * + * @author 科技小王子 + * @since 2024-11-20 01:55:04 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@ApiModel(value = "MerchantPackageGoods对象", description = "商家套餐可使用的商品") +@TableName("shop_merchant_package_goods") +public class MerchantPackageGoods implements Serializable { + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private Integer packageId; + + private Integer goodsId; + + private Integer userId; + + @ApiModelProperty(value = "0待审核1通过2拒绝") + private Boolean status; + + @ApiModelProperty(value = "排序(数字越小越靠前)") + private Integer sortNumber; + + @ApiModelProperty(value = "备注") + private String comments; + + @ApiModelProperty(value = "是否删除, 0否, 1是") + @TableLogic + private Integer deleted; + + @ApiModelProperty(value = "租户id") + private Integer tenantId; + + @ApiModelProperty(value = "创建时间") + private LocalDateTime createTime; + + @ApiModelProperty(value = "修改时间") + private LocalDateTime updateTime; + +} diff --git a/src/main/java/com/gxwebsoft/shop/entity/Message.java b/src/main/java/com/gxwebsoft/shop/entity/Message.java new file mode 100644 index 0000000..d778e70 --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/entity/Message.java @@ -0,0 +1,51 @@ +package com.gxwebsoft.shop.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import java.time.LocalDateTime; +import java.io.Serializable; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * + * + * @author 科技小王子 + * @since 2024-11-18 22:03:11 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@ApiModel(value = "Message对象", description = "") +@TableName("shop_message") +public class Message implements Serializable { + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private String type; + + private Integer pk; + + private String title; + + private String phone; + + private String nickname; + + private String content; + + private Integer userId; + + private Integer hasRead; + + @ApiModelProperty(value = "租户id") + private Integer tenantId; + + @ApiModelProperty(value = "注册时间") + private LocalDateTime createTime; + +} diff --git a/src/main/java/com/gxwebsoft/shop/entity/Order.java b/src/main/java/com/gxwebsoft/shop/entity/Order.java index 55ded53..70279ea 100644 --- a/src/main/java/com/gxwebsoft/shop/entity/Order.java +++ b/src/main/java/com/gxwebsoft/shop/entity/Order.java @@ -33,7 +33,7 @@ public class Order implements Serializable { @TableId(value = "order_id", type = IdType.AUTO) private Integer orderId; - @ApiModelProperty(value = "订单类型,0商城订单 1预定订单 2会员卡") + @ApiModelProperty(value = "订单类型,0商城订单 1预定订单 2会员卡 3门店充值 4门店套餐") private Integer type; @ApiModelProperty(value = "类型,0快递 1自提") @@ -67,6 +67,15 @@ public class Order implements Serializable { @ApiModelProperty(value = "使用的优惠券id") private Integer couponId; + @ApiModelProperty(value = "省") + private Integer provinceId; + + @ApiModelProperty(value = "市") + private Integer cityId; + + @ApiModelProperty(value = "区") + private Integer regionId; + @ApiModelProperty(value = "使用的会员卡id") private Integer cardId; @@ -95,6 +104,9 @@ public class Order implements Serializable { @ApiModelProperty(value = "自提码") private String selfTakeCode; + @ApiModelProperty(value = "配送总额") + private BigDecimal expressPrice; + @ApiModelProperty(value = "订单总额") private BigDecimal totalPrice; @@ -123,7 +135,7 @@ public class Order implements Serializable { @ApiModelProperty(value = "教练id") private Integer coachId; - @ApiModelProperty(value = "0余额支付, 1微信支付,2积分,3支付宝,4现金,5POS机,6VIP月卡,7VIP年卡,8VIP次卡,9IC月卡,10IC年卡,11IC次卡,12免费,13VIP充值卡,14IC充值卡,15积分支付,16VIP季卡,17IC季卡") + @ApiModelProperty(value = "0余额支付, 1微信支付,2积分,3支付宝,4现金,5POS机,6VIP月卡,7VIP年卡,8VIP次卡,9IC月卡,10IC年卡,11IC次卡,12免费,13VIP充值卡,14IC充值卡,15积分支付,16VIP季卡,17IC季卡, 18代付, 19门店余额 , 20门店套餐") private Integer payType; private Integer friendPayType; @@ -265,4 +277,10 @@ public class Order implements Serializable { @TableField(exist = false) private Merchant merchant; + + @TableField(exist = false) + private Integer addressId; + + @TableField(exist = false) + private Integer packageId; } diff --git a/src/main/java/com/gxwebsoft/shop/entity/UserBalanceInMerchant.java b/src/main/java/com/gxwebsoft/shop/entity/UserBalanceInMerchant.java new file mode 100644 index 0000000..c54e64d --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/entity/UserBalanceInMerchant.java @@ -0,0 +1,59 @@ +package com.gxwebsoft.shop.entity; + +import java.math.BigDecimal; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.TableLogic; +import java.io.Serializable; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 用户在商家中的余额 + * + * @author 科技小王子 + * @since 2024-11-20 01:55:04 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@ApiModel(value = "UserBalanceInMerchant对象", description = "用户在商家中的余额") +@TableName("shop_user_balance_in_merchant") +public class UserBalanceInMerchant implements Serializable { + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private Integer merchantId; + + private Integer userId; + + private BigDecimal balance; + + @ApiModelProperty(value = "0待审核1通过2拒绝") + private Boolean status; + + @ApiModelProperty(value = "排序(数字越小越靠前)") + private Integer sortNumber; + + @ApiModelProperty(value = "备注") + private String comments; + + @ApiModelProperty(value = "是否删除, 0否, 1是") + @TableLogic + private Integer deleted; + + @ApiModelProperty(value = "租户id") + private Integer tenantId; + + @ApiModelProperty(value = "创建时间") + private LocalDateTime createTime; + + @ApiModelProperty(value = "修改时间") + private LocalDateTime updateTime; + +} diff --git a/src/main/java/com/gxwebsoft/shop/entity/UserCommissionRole.java b/src/main/java/com/gxwebsoft/shop/entity/UserCommissionRole.java new file mode 100644 index 0000000..f97c7b6 --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/entity/UserCommissionRole.java @@ -0,0 +1,51 @@ +package com.gxwebsoft.shop.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import java.time.LocalDateTime; +import java.io.Serializable; +import java.util.List; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 用户绑定分红角色 + * + * @author 科技小王子 + * @since 2024-12-02 12:43:40 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@ApiModel(value = "UserCommissionRole对象", description = "用户绑定分红角色") +@TableName("shop_user_commission_role") +public class UserCommissionRole implements Serializable { + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private Integer roleId; + + @TableField(exist = false) + private List roleIds; + + private Integer userId; + + @ApiModelProperty(value = "状态, 0正常, 1异常") + private Integer status; + + @ApiModelProperty(value = "备注") + private String comments; + + @ApiModelProperty(value = "租户id") + private Integer tenantId; + + @ApiModelProperty(value = "创建时间") + private LocalDateTime createTime; + +} diff --git a/src/main/java/com/gxwebsoft/shop/entity/UserGoodsInMerchant.java b/src/main/java/com/gxwebsoft/shop/entity/UserGoodsInMerchant.java new file mode 100644 index 0000000..25e232f --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/entity/UserGoodsInMerchant.java @@ -0,0 +1,59 @@ +package com.gxwebsoft.shop.entity; + +import java.math.BigDecimal; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.TableLogic; +import java.io.Serializable; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 用户在商家中的代金券 + * + * @author 科技小王子 + * @since 2024-11-20 01:55:04 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@ApiModel(value = "UserGoodsInMerchant对象", description = "用户在商家中的代金券") +@TableName("shop_user_goods_in_merchant") +public class UserGoodsInMerchant implements Serializable { + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private Integer userId; + + private Integer packageId; + + private Integer remainNum; + + @ApiModelProperty(value = "0待审核1通过2拒绝") + private Boolean status; + + @ApiModelProperty(value = "排序(数字越小越靠前)") + private Integer sortNumber; + + @ApiModelProperty(value = "备注") + private String comments; + + @ApiModelProperty(value = "是否删除, 0否, 1是") + @TableLogic + private Integer deleted; + + @ApiModelProperty(value = "租户id") + private Integer tenantId; + + @ApiModelProperty(value = "创建时间") + private LocalDateTime createTime; + + @ApiModelProperty(value = "修改时间") + private LocalDateTime updateTime; + +} diff --git a/src/main/java/com/gxwebsoft/shop/entity/ViewHistory.java b/src/main/java/com/gxwebsoft/shop/entity/ViewHistory.java new file mode 100644 index 0000000..ff08368 --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/entity/ViewHistory.java @@ -0,0 +1,54 @@ +package com.gxwebsoft.shop.entity; + +import com.baomidou.mybatisplus.annotation.*; + +import java.time.LocalDateTime; +import java.io.Serializable; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 浏览历史 + * + * @author 科技小王子 + * @since 2024-11-22 22:13:47 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@ApiModel(value = "ViewHistory对象", description = "浏览历史") +@TableName("shop_view_history") +public class ViewHistory implements Serializable { + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private Integer type; + + private Integer pk; + + private Integer userId; + + private String openId; + + @ApiModelProperty(value = "排序号") + private Integer sortNumber; + + @ApiModelProperty(value = "是否删除, 0否, 1是") + @TableLogic + private Integer deleted; + + @ApiModelProperty(value = "租户id") + private Integer tenantId; + + @ApiModelProperty(value = "创建时间") + private LocalDateTime createTime; + + @ApiModelProperty(value = "修改时间") + private LocalDateTime updateTime; + + @TableField(exist = false) + private Goods goods; +} diff --git a/src/main/java/com/gxwebsoft/shop/mapper/CommissionRoleMapper.java b/src/main/java/com/gxwebsoft/shop/mapper/CommissionRoleMapper.java new file mode 100644 index 0000000..1a4384e --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/mapper/CommissionRoleMapper.java @@ -0,0 +1,37 @@ +package com.gxwebsoft.shop.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.gxwebsoft.shop.entity.CommissionRole; +import com.gxwebsoft.shop.param.CommissionRoleParam; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 分红角色Mapper + * + * @author 科技小王子 + * @since 2024-12-02 12:43:40 + */ +public interface CommissionRoleMapper extends BaseMapper { + + /** + * 分页查询 + * + * @param page 分页对象 + * @param param 查询参数 + * @return List + */ + List selectPageRel(@Param("page") IPage page, + @Param("param") CommissionRoleParam param); + + /** + * 查询全部 + * + * @param param 查询参数 + * @return List + */ + List selectListRel(@Param("param") CommissionRoleParam param); + +} diff --git a/src/main/java/com/gxwebsoft/shop/mapper/ExpressTemplateDetailMapper.java b/src/main/java/com/gxwebsoft/shop/mapper/ExpressTemplateDetailMapper.java new file mode 100644 index 0000000..cde76c7 --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/mapper/ExpressTemplateDetailMapper.java @@ -0,0 +1,37 @@ +package com.gxwebsoft.shop.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.gxwebsoft.shop.entity.ExpressTemplateDetail; +import com.gxwebsoft.shop.param.ExpressTemplateDetailParam; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 运费模板Mapper + * + * @author 科技小王子 + * @since 2024-11-05 18:03:28 + */ +public interface ExpressTemplateDetailMapper extends BaseMapper { + + /** + * 分页查询 + * + * @param page 分页对象 + * @param param 查询参数 + * @return List + */ + List selectPageRel(@Param("page") IPage page, + @Param("param") ExpressTemplateDetailParam param); + + /** + * 查询全部 + * + * @param param 查询参数 + * @return List + */ + List selectListRel(@Param("param") ExpressTemplateDetailParam param); + +} diff --git a/src/main/java/com/gxwebsoft/shop/mapper/ExpressTemplateMapper.java b/src/main/java/com/gxwebsoft/shop/mapper/ExpressTemplateMapper.java new file mode 100644 index 0000000..1dfd54d --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/mapper/ExpressTemplateMapper.java @@ -0,0 +1,37 @@ +package com.gxwebsoft.shop.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.gxwebsoft.shop.entity.ExpressTemplate; +import com.gxwebsoft.shop.param.ExpressTemplateParam; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 运费模板Mapper + * + * @author 科技小王子 + * @since 2024-11-05 18:03:28 + */ +public interface ExpressTemplateMapper extends BaseMapper { + + /** + * 分页查询 + * + * @param page 分页对象 + * @param param 查询参数 + * @return List + */ + List selectPageRel(@Param("page") IPage page, + @Param("param") ExpressTemplateParam param); + + /** + * 查询全部 + * + * @param param 查询参数 + * @return List + */ + List selectListRel(@Param("param") ExpressTemplateParam param); + +} diff --git a/src/main/java/com/gxwebsoft/shop/mapper/GoodsRoleCommissionMapper.java b/src/main/java/com/gxwebsoft/shop/mapper/GoodsRoleCommissionMapper.java new file mode 100644 index 0000000..a63afbd --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/mapper/GoodsRoleCommissionMapper.java @@ -0,0 +1,37 @@ +package com.gxwebsoft.shop.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.gxwebsoft.shop.entity.GoodsRoleCommission; +import com.gxwebsoft.shop.param.GoodsRoleCommissionParam; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 商品绑定角色的分润金额Mapper + * + * @author 科技小王子 + * @since 2024-12-02 12:43:40 + */ +public interface GoodsRoleCommissionMapper extends BaseMapper { + + /** + * 分页查询 + * + * @param page 分页对象 + * @param param 查询参数 + * @return List + */ + List selectPageRel(@Param("page") IPage page, + @Param("param") GoodsRoleCommissionParam param); + + /** + * 查询全部 + * + * @param param 查询参数 + * @return List + */ + List selectListRel(@Param("param") GoodsRoleCommissionParam param); + +} diff --git a/src/main/java/com/gxwebsoft/shop/mapper/MerchantChargePackageMapper.java b/src/main/java/com/gxwebsoft/shop/mapper/MerchantChargePackageMapper.java new file mode 100644 index 0000000..d31f95e --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/mapper/MerchantChargePackageMapper.java @@ -0,0 +1,37 @@ +package com.gxwebsoft.shop.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.gxwebsoft.shop.entity.MerchantChargePackage; +import com.gxwebsoft.shop.param.MerchantChargePackageParam; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 商家充值套餐Mapper + * + * @author 科技小王子 + * @since 2024-11-20 01:55:04 + */ +public interface MerchantChargePackageMapper extends BaseMapper { + + /** + * 分页查询 + * + * @param page 分页对象 + * @param param 查询参数 + * @return List + */ + List selectPageRel(@Param("page") IPage page, + @Param("param") MerchantChargePackageParam param); + + /** + * 查询全部 + * + * @param param 查询参数 + * @return List + */ + List selectListRel(@Param("param") MerchantChargePackageParam param); + +} diff --git a/src/main/java/com/gxwebsoft/shop/mapper/MerchantGoodsPackageMapper.java b/src/main/java/com/gxwebsoft/shop/mapper/MerchantGoodsPackageMapper.java new file mode 100644 index 0000000..0961b6b --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/mapper/MerchantGoodsPackageMapper.java @@ -0,0 +1,37 @@ +package com.gxwebsoft.shop.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.gxwebsoft.shop.entity.MerchantGoodsPackage; +import com.gxwebsoft.shop.param.MerchantGoodsPackageParam; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 商家充值套餐Mapper + * + * @author 科技小王子 + * @since 2024-11-20 01:55:04 + */ +public interface MerchantGoodsPackageMapper extends BaseMapper { + + /** + * 分页查询 + * + * @param page 分页对象 + * @param param 查询参数 + * @return List + */ + List selectPageRel(@Param("page") IPage page, + @Param("param") MerchantGoodsPackageParam param); + + /** + * 查询全部 + * + * @param param 查询参数 + * @return List + */ + List selectListRel(@Param("param") MerchantGoodsPackageParam param); + +} diff --git a/src/main/java/com/gxwebsoft/shop/mapper/MerchantPackageGoodsMapper.java b/src/main/java/com/gxwebsoft/shop/mapper/MerchantPackageGoodsMapper.java new file mode 100644 index 0000000..c3e9733 --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/mapper/MerchantPackageGoodsMapper.java @@ -0,0 +1,37 @@ +package com.gxwebsoft.shop.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.gxwebsoft.shop.entity.MerchantPackageGoods; +import com.gxwebsoft.shop.param.MerchantPackageGoodsParam; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 商家套餐可使用的商品Mapper + * + * @author 科技小王子 + * @since 2024-11-20 01:55:04 + */ +public interface MerchantPackageGoodsMapper extends BaseMapper { + + /** + * 分页查询 + * + * @param page 分页对象 + * @param param 查询参数 + * @return List + */ + List selectPageRel(@Param("page") IPage page, + @Param("param") MerchantPackageGoodsParam param); + + /** + * 查询全部 + * + * @param param 查询参数 + * @return List + */ + List selectListRel(@Param("param") MerchantPackageGoodsParam param); + +} diff --git a/src/main/java/com/gxwebsoft/shop/mapper/MessageMapper.java b/src/main/java/com/gxwebsoft/shop/mapper/MessageMapper.java new file mode 100644 index 0000000..38be1ee --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/mapper/MessageMapper.java @@ -0,0 +1,37 @@ +package com.gxwebsoft.shop.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.gxwebsoft.shop.entity.Message; +import com.gxwebsoft.shop.param.MessageParam; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * Mapper + * + * @author 科技小王子 + * @since 2024-11-18 22:03:11 + */ +public interface MessageMapper extends BaseMapper { + + /** + * 分页查询 + * + * @param page 分页对象 + * @param param 查询参数 + * @return List + */ + List selectPageRel(@Param("page") IPage page, + @Param("param") MessageParam param); + + /** + * 查询全部 + * + * @param param 查询参数 + * @return List + */ + List selectListRel(@Param("param") MessageParam param); + +} diff --git a/src/main/java/com/gxwebsoft/shop/mapper/UserBalanceInMerchantMapper.java b/src/main/java/com/gxwebsoft/shop/mapper/UserBalanceInMerchantMapper.java new file mode 100644 index 0000000..d286e7d --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/mapper/UserBalanceInMerchantMapper.java @@ -0,0 +1,37 @@ +package com.gxwebsoft.shop.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.gxwebsoft.shop.entity.UserBalanceInMerchant; +import com.gxwebsoft.shop.param.UserBalanceInMerchantParam; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 用户在商家中的余额Mapper + * + * @author 科技小王子 + * @since 2024-11-20 01:55:04 + */ +public interface UserBalanceInMerchantMapper extends BaseMapper { + + /** + * 分页查询 + * + * @param page 分页对象 + * @param param 查询参数 + * @return List + */ + List selectPageRel(@Param("page") IPage page, + @Param("param") UserBalanceInMerchantParam param); + + /** + * 查询全部 + * + * @param param 查询参数 + * @return List + */ + List selectListRel(@Param("param") UserBalanceInMerchantParam param); + +} diff --git a/src/main/java/com/gxwebsoft/shop/mapper/UserCommissionRoleMapper.java b/src/main/java/com/gxwebsoft/shop/mapper/UserCommissionRoleMapper.java new file mode 100644 index 0000000..e88b376 --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/mapper/UserCommissionRoleMapper.java @@ -0,0 +1,37 @@ +package com.gxwebsoft.shop.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.gxwebsoft.shop.entity.UserCommissionRole; +import com.gxwebsoft.shop.param.UserCommissionRoleParam; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 用户绑定分红角色Mapper + * + * @author 科技小王子 + * @since 2024-12-02 12:43:40 + */ +public interface UserCommissionRoleMapper extends BaseMapper { + + /** + * 分页查询 + * + * @param page 分页对象 + * @param param 查询参数 + * @return List + */ + List selectPageRel(@Param("page") IPage page, + @Param("param") UserCommissionRoleParam param); + + /** + * 查询全部 + * + * @param param 查询参数 + * @return List + */ + List selectListRel(@Param("param") UserCommissionRoleParam param); + +} diff --git a/src/main/java/com/gxwebsoft/shop/mapper/UserGoodsInMerchantMapper.java b/src/main/java/com/gxwebsoft/shop/mapper/UserGoodsInMerchantMapper.java new file mode 100644 index 0000000..4f9a57e --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/mapper/UserGoodsInMerchantMapper.java @@ -0,0 +1,37 @@ +package com.gxwebsoft.shop.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.gxwebsoft.shop.entity.UserGoodsInMerchant; +import com.gxwebsoft.shop.param.UserGoodsInMerchantParam; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 用户在商家中的代金券Mapper + * + * @author 科技小王子 + * @since 2024-11-20 01:55:04 + */ +public interface UserGoodsInMerchantMapper extends BaseMapper { + + /** + * 分页查询 + * + * @param page 分页对象 + * @param param 查询参数 + * @return List + */ + List selectPageRel(@Param("page") IPage page, + @Param("param") UserGoodsInMerchantParam param); + + /** + * 查询全部 + * + * @param param 查询参数 + * @return List + */ + List selectListRel(@Param("param") UserGoodsInMerchantParam param); + +} diff --git a/src/main/java/com/gxwebsoft/shop/mapper/ViewHistoryMapper.java b/src/main/java/com/gxwebsoft/shop/mapper/ViewHistoryMapper.java new file mode 100644 index 0000000..ac1c8c1 --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/mapper/ViewHistoryMapper.java @@ -0,0 +1,37 @@ +package com.gxwebsoft.shop.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.gxwebsoft.shop.entity.ViewHistory; +import com.gxwebsoft.shop.param.ViewHistoryParam; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 浏览历史Mapper + * + * @author 科技小王子 + * @since 2024-11-22 22:13:47 + */ +public interface ViewHistoryMapper extends BaseMapper { + + /** + * 分页查询 + * + * @param page 分页对象 + * @param param 查询参数 + * @return List + */ + List selectPageRel(@Param("page") IPage page, + @Param("param") ViewHistoryParam param); + + /** + * 查询全部 + * + * @param param 查询参数 + * @return List + */ + List selectListRel(@Param("param") ViewHistoryParam param); + +} diff --git a/src/main/java/com/gxwebsoft/shop/mapper/xml/CommissionRoleMapper.xml b/src/main/java/com/gxwebsoft/shop/mapper/xml/CommissionRoleMapper.xml new file mode 100644 index 0000000..0744466 --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/mapper/xml/CommissionRoleMapper.xml @@ -0,0 +1,54 @@ + + + + + + + SELECT a.* + FROM shop_commission_role a + + + AND a.id = #{param.id} + + + AND a.title LIKE CONCAT('%', #{param.title}, '%') + + + AND a.province_id = #{param.provinceId} + + + AND a.city_id = #{param.cityId} + + + AND a.region_id = #{param.regionId} + + + AND a.status = #{param.status} + + + AND a.comments LIKE CONCAT('%', #{param.comments}, '%') + + + AND a.create_time >= #{param.createTimeStart} + + + AND a.create_time <= #{param.createTimeEnd} + + + AND (a.comments LIKE CONCAT('%', #{param.keywords}, '%') + ) + + + + + + + + + + + diff --git a/src/main/java/com/gxwebsoft/shop/mapper/xml/ExpressTemplateDetailMapper.xml b/src/main/java/com/gxwebsoft/shop/mapper/xml/ExpressTemplateDetailMapper.xml new file mode 100644 index 0000000..3431b71 --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/mapper/xml/ExpressTemplateDetailMapper.xml @@ -0,0 +1,63 @@ + + + + + + + SELECT a.* + FROM shop_express_template_detail a + + + AND a.id = #{param.id} + + + AND a.template_id = #{param.templateId} + + + AND a.type = #{param.type} + + + AND a.province_id = #{param.provinceId} + + + AND a.city_id = #{param.cityId} + + + AND a.first_amount = #{param.firstAmount} + + + AND a.extra_amount = #{param.extraAmount} + + + AND a.status = #{param.status} + + + AND a.deleted = #{param.deleted} + + + AND a.deleted = 0 + + + AND a.create_time >= #{param.createTimeStart} + + + AND a.create_time <= #{param.createTimeEnd} + + + AND (a.comments LIKE CONCAT('%', #{param.keywords}, '%') + ) + + + + + + + + + + + diff --git a/src/main/java/com/gxwebsoft/shop/mapper/xml/ExpressTemplateMapper.xml b/src/main/java/com/gxwebsoft/shop/mapper/xml/ExpressTemplateMapper.xml new file mode 100644 index 0000000..ad4ad63 --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/mapper/xml/ExpressTemplateMapper.xml @@ -0,0 +1,48 @@ + + + + + + + SELECT a.* + FROM shop_express_template a + + + AND a.id = #{param.id} + + + AND a.title LIKE CONCAT('%', #{param.title}, '%') + + + AND a.status = #{param.status} + + + AND a.deleted = #{param.deleted} + + + AND a.deleted = 0 + + + AND a.create_time >= #{param.createTimeStart} + + + AND a.create_time <= #{param.createTimeEnd} + + + AND (a.comments LIKE CONCAT('%', #{param.keywords}, '%') + ) + + + + + + + + + + + diff --git a/src/main/java/com/gxwebsoft/shop/mapper/xml/GoodsRoleCommissionMapper.xml b/src/main/java/com/gxwebsoft/shop/mapper/xml/GoodsRoleCommissionMapper.xml new file mode 100644 index 0000000..b43951f --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/mapper/xml/GoodsRoleCommissionMapper.xml @@ -0,0 +1,54 @@ + + + + + + + SELECT a.* + FROM shop_goods_role_commission a + + + AND a.id = #{param.id} + + + AND a.role_id = #{param.roleId} + + + AND a.goods_id = #{param.goodsId} + + + AND a.sku LIKE CONCAT('%', #{param.sku}, '%') + + + AND a.amount = #{param.amount} + + + AND a.status = #{param.status} + + + AND a.comments LIKE CONCAT('%', #{param.comments}, '%') + + + AND a.create_time >= #{param.createTimeStart} + + + AND a.create_time <= #{param.createTimeEnd} + + + AND (a.comments LIKE CONCAT('%', #{param.keywords}, '%') + ) + + + + + + + + + + + diff --git a/src/main/java/com/gxwebsoft/shop/mapper/xml/MerchantChargePackageMapper.xml b/src/main/java/com/gxwebsoft/shop/mapper/xml/MerchantChargePackageMapper.xml new file mode 100644 index 0000000..7f3c35b --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/mapper/xml/MerchantChargePackageMapper.xml @@ -0,0 +1,63 @@ + + + + + + + SELECT a.* + FROM shop_merchant_charge_package a + + + AND a.id = #{param.id} + + + AND a.amount = #{param.amount} + + + AND a.send_amount = #{param.sendAmount} + + + AND a.merchant_id = #{param.merchantId} + + + AND a.user_id = #{param.userId} + + + AND a.status = #{param.status} + + + AND a.sort_number = #{param.sortNumber} + + + AND a.comments LIKE CONCAT('%', #{param.comments}, '%') + + + AND a.deleted = #{param.deleted} + + + AND a.deleted = 0 + + + AND a.create_time >= #{param.createTimeStart} + + + AND a.create_time <= #{param.createTimeEnd} + + + AND (a.comments LIKE CONCAT('%', #{param.keywords}, '%') + ) + + + + + + + + + + + diff --git a/src/main/java/com/gxwebsoft/shop/mapper/xml/MerchantGoodsPackageMapper.xml b/src/main/java/com/gxwebsoft/shop/mapper/xml/MerchantGoodsPackageMapper.xml new file mode 100644 index 0000000..25e5e6f --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/mapper/xml/MerchantGoodsPackageMapper.xml @@ -0,0 +1,63 @@ + + + + + + + SELECT a.* + FROM shop_merchant_goods_package a + + + AND a.id = #{param.id} + + + AND a.amount = #{param.amount} + + + AND a.get_num = #{param.getNum} + + + AND a.merchant_id = #{param.merchantId} + + + AND a.user_id = #{param.userId} + + + AND a.status = #{param.status} + + + AND a.sort_number = #{param.sortNumber} + + + AND a.comments LIKE CONCAT('%', #{param.comments}, '%') + + + AND a.deleted = #{param.deleted} + + + AND a.deleted = 0 + + + AND a.create_time >= #{param.createTimeStart} + + + AND a.create_time <= #{param.createTimeEnd} + + + AND (a.comments LIKE CONCAT('%', #{param.keywords}, '%') + ) + + + + + + + + + + + diff --git a/src/main/java/com/gxwebsoft/shop/mapper/xml/MerchantMapper.xml b/src/main/java/com/gxwebsoft/shop/mapper/xml/MerchantMapper.xml index c24d550..8cf5ca1 100644 --- a/src/main/java/com/gxwebsoft/shop/mapper/xml/MerchantMapper.xml +++ b/src/main/java/com/gxwebsoft/shop/mapper/xml/MerchantMapper.xml @@ -111,10 +111,10 @@ - ORDER BY a.recommend DESC, a.sort_number ASC + ORDER BY a.recommend DESC, a.sort_number ASC, a.create_time DESC - ORDER BY distance ASC, a.sort_number ASC + ORDER BY distance ASC diff --git a/src/main/java/com/gxwebsoft/shop/mapper/xml/MerchantPackageGoodsMapper.xml b/src/main/java/com/gxwebsoft/shop/mapper/xml/MerchantPackageGoodsMapper.xml new file mode 100644 index 0000000..c04023f --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/mapper/xml/MerchantPackageGoodsMapper.xml @@ -0,0 +1,60 @@ + + + + + + + SELECT a.* + FROM shop_merchant_package_goods a + + + AND a.id = #{param.id} + + + AND a.package_id = #{param.packageId} + + + AND a.goods_id = #{param.goodsId} + + + AND a.user_id = #{param.userId} + + + AND a.status = #{param.status} + + + AND a.sort_number = #{param.sortNumber} + + + AND a.comments LIKE CONCAT('%', #{param.comments}, '%') + + + AND a.deleted = #{param.deleted} + + + AND a.deleted = 0 + + + AND a.create_time >= #{param.createTimeStart} + + + AND a.create_time <= #{param.createTimeEnd} + + + AND (a.comments LIKE CONCAT('%', #{param.keywords}, '%') + ) + + + + + + + + + + + diff --git a/src/main/java/com/gxwebsoft/shop/mapper/xml/MessageMapper.xml b/src/main/java/com/gxwebsoft/shop/mapper/xml/MessageMapper.xml new file mode 100644 index 0000000..c0e836a --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/mapper/xml/MessageMapper.xml @@ -0,0 +1,54 @@ + + + + + + + SELECT a.* + FROM shop_message a + + + AND a.id = #{param.id} + + + AND a.type LIKE CONCAT('%', #{param.type}, '%') + + + AND a.pk = #{param.pk} + + + AND a.title LIKE CONCAT('%', #{param.title}, '%') + + + AND a.content LIKE CONCAT('%', #{param.content}, '%') + + + AND a.user_id = #{param.userId} + + + AND a.has_read = #{param.hasRead} + + + AND a.create_time >= #{param.createTimeStart} + + + AND a.create_time <= #{param.createTimeEnd} + + + AND (a.comments LIKE CONCAT('%', #{param.keywords}, '%') + ) + + + + + + + + + + + diff --git a/src/main/java/com/gxwebsoft/shop/mapper/xml/OrderMapper.xml b/src/main/java/com/gxwebsoft/shop/mapper/xml/OrderMapper.xml index 405950c..796cc53 100644 --- a/src/main/java/com/gxwebsoft/shop/mapper/xml/OrderMapper.xml +++ b/src/main/java/com/gxwebsoft/shop/mapper/xml/OrderMapper.xml @@ -29,6 +29,12 @@ AND a.merchant_id = #{param.merchantId} + + AND a.express_merchant_id = #{param.expressMerchantId} + + + AND a.self_take_merchant_id = #{param.selfTakeMerchantId} + AND a.merchant_code = #{param.merchantCode} diff --git a/src/main/java/com/gxwebsoft/shop/mapper/xml/UserBalanceInMerchantMapper.xml b/src/main/java/com/gxwebsoft/shop/mapper/xml/UserBalanceInMerchantMapper.xml new file mode 100644 index 0000000..bfdd8ec --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/mapper/xml/UserBalanceInMerchantMapper.xml @@ -0,0 +1,57 @@ + + + + + + + SELECT a.* + FROM shop_user_balance_in_merchant a + + + AND a.id = #{param.id} + + + AND a.user_id = #{param.userId} + + + AND a.balance = #{param.balance} + + + AND a.status = #{param.status} + + + AND a.sort_number = #{param.sortNumber} + + + AND a.comments LIKE CONCAT('%', #{param.comments}, '%') + + + AND a.deleted = #{param.deleted} + + + AND a.deleted = 0 + + + AND a.create_time >= #{param.createTimeStart} + + + AND a.create_time <= #{param.createTimeEnd} + + + AND (a.comments LIKE CONCAT('%', #{param.keywords}, '%') + ) + + + + + + + + + + + diff --git a/src/main/java/com/gxwebsoft/shop/mapper/xml/UserCommissionRoleMapper.xml b/src/main/java/com/gxwebsoft/shop/mapper/xml/UserCommissionRoleMapper.xml new file mode 100644 index 0000000..d96f567 --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/mapper/xml/UserCommissionRoleMapper.xml @@ -0,0 +1,48 @@ + + + + + + + SELECT a.* + FROM shop_user_commission_role a + + + AND a.id = #{param.id} + + + AND a.role_id = #{param.roleId} + + + AND a.user_id = #{param.userId} + + + AND a.status = #{param.status} + + + AND a.comments LIKE CONCAT('%', #{param.comments}, '%') + + + AND a.create_time >= #{param.createTimeStart} + + + AND a.create_time <= #{param.createTimeEnd} + + + AND (a.comments LIKE CONCAT('%', #{param.keywords}, '%') + ) + + + + + + + + + + + diff --git a/src/main/java/com/gxwebsoft/shop/mapper/xml/UserGoodsInMerchantMapper.xml b/src/main/java/com/gxwebsoft/shop/mapper/xml/UserGoodsInMerchantMapper.xml new file mode 100644 index 0000000..c54ae21 --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/mapper/xml/UserGoodsInMerchantMapper.xml @@ -0,0 +1,57 @@ + + + + + + + SELECT a.* + FROM shop_user_goods_in_merchant a + + + AND a.id = #{param.id} + + + AND a.user_id = #{param.userId} + + + AND a.balance = #{param.balance} + + + AND a.status = #{param.status} + + + AND a.sort_number = #{param.sortNumber} + + + AND a.comments LIKE CONCAT('%', #{param.comments}, '%') + + + AND a.deleted = #{param.deleted} + + + AND a.deleted = 0 + + + AND a.create_time >= #{param.createTimeStart} + + + AND a.create_time <= #{param.createTimeEnd} + + + AND (a.comments LIKE CONCAT('%', #{param.keywords}, '%') + ) + + + + + + + + + + + diff --git a/src/main/java/com/gxwebsoft/shop/mapper/xml/ViewHistoryMapper.xml b/src/main/java/com/gxwebsoft/shop/mapper/xml/ViewHistoryMapper.xml new file mode 100644 index 0000000..6012b4e --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/mapper/xml/ViewHistoryMapper.xml @@ -0,0 +1,54 @@ + + + + + + + SELECT a.* + FROM shop_view_history a + + + AND a.id = #{param.id} + + + AND a.type = #{param.type} + + + AND a.pk LIKE CONCAT('%', #{param.pk}, '%') + + + AND a.user_id = #{param.userId} + + + AND a.sort_number = #{param.sortNumber} + + + AND a.deleted = #{param.deleted} + + + AND a.deleted = 0 + + + AND a.create_time >= #{param.createTimeStart} + + + AND a.create_time <= #{param.createTimeEnd} + + + AND (a.comments LIKE CONCAT('%', #{param.keywords}, '%') + ) + + + + + + + + + + + diff --git a/src/main/java/com/gxwebsoft/shop/param/CartParam.java b/src/main/java/com/gxwebsoft/shop/param/CartParam.java index cca17d1..4b12e7a 100644 --- a/src/main/java/com/gxwebsoft/shop/param/CartParam.java +++ b/src/main/java/com/gxwebsoft/shop/param/CartParam.java @@ -97,4 +97,7 @@ public class CartParam extends BaseParam { @TableField(exist = false) private Integer orderId; + + @TableField(exist = false) + private Integer addressId; } diff --git a/src/main/java/com/gxwebsoft/shop/param/CommissionRoleParam.java b/src/main/java/com/gxwebsoft/shop/param/CommissionRoleParam.java new file mode 100644 index 0000000..a8a2938 --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/param/CommissionRoleParam.java @@ -0,0 +1,47 @@ +package com.gxwebsoft.shop.param; + +import java.math.BigDecimal; +import com.gxwebsoft.common.core.annotation.QueryField; +import com.gxwebsoft.common.core.annotation.QueryType; +import com.gxwebsoft.common.core.web.BaseParam; +import com.fasterxml.jackson.annotation.JsonInclude; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 分红角色查询参数 + * + * @author 科技小王子 + * @since 2024-12-02 12:43:40 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@JsonInclude(JsonInclude.Include.NON_NULL) +@ApiModel(value = "CommissionRoleParam对象", description = "分红角色查询参数") +public class CommissionRoleParam extends BaseParam { + private static final long serialVersionUID = 1L; + + @QueryField(type = QueryType.EQ) + private Integer id; + + private String title; + + @QueryField(type = QueryType.EQ) + private Integer provinceId; + + @QueryField(type = QueryType.EQ) + private Integer cityId; + + @QueryField(type = QueryType.EQ) + private Integer regionId; + + @ApiModelProperty(value = "状态, 0正常, 1异常") + @QueryField(type = QueryType.EQ) + private Integer status; + + @ApiModelProperty(value = "备注") + private String comments; + +} diff --git a/src/main/java/com/gxwebsoft/shop/param/ExpressTemplateDetailParam.java b/src/main/java/com/gxwebsoft/shop/param/ExpressTemplateDetailParam.java new file mode 100644 index 0000000..eb9cfc9 --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/param/ExpressTemplateDetailParam.java @@ -0,0 +1,58 @@ +package com.gxwebsoft.shop.param; + +import java.math.BigDecimal; +import com.gxwebsoft.common.core.annotation.QueryField; +import com.gxwebsoft.common.core.annotation.QueryType; +import com.gxwebsoft.common.core.web.BaseParam; +import com.fasterxml.jackson.annotation.JsonInclude; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 运费模板查询参数 + * + * @author 科技小王子 + * @since 2024-11-05 18:03:28 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@JsonInclude(JsonInclude.Include.NON_NULL) +@ApiModel(value = "ExpressTemplateDetailParam对象", description = "运费模板查询参数") +public class ExpressTemplateDetailParam extends BaseParam { + private static final long serialVersionUID = 1L; + + @QueryField(type = QueryType.EQ) + private Integer id; + + @QueryField(type = QueryType.EQ) + private Integer templateId; + + @ApiModelProperty(value = "0按件") + @QueryField(type = QueryType.EQ) + private Boolean type; + + @QueryField(type = QueryType.EQ) + private Integer provinceId; + + @QueryField(type = QueryType.EQ) + private Integer cityId; + + @ApiModelProperty(value = "收件价格") + @QueryField(type = QueryType.EQ) + private BigDecimal firstAmount; + + @ApiModelProperty(value = "续件价格") + @QueryField(type = QueryType.EQ) + private BigDecimal extraAmount; + + @ApiModelProperty(value = "状态, 0已发布, 1待审核 2已驳回 3违规内容") + @QueryField(type = QueryType.EQ) + private Integer status; + + @ApiModelProperty(value = "是否删除, 0否, 1是") + @QueryField(type = QueryType.EQ) + private Integer deleted; + +} diff --git a/src/main/java/com/gxwebsoft/shop/param/ExpressTemplateParam.java b/src/main/java/com/gxwebsoft/shop/param/ExpressTemplateParam.java new file mode 100644 index 0000000..7734472 --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/param/ExpressTemplateParam.java @@ -0,0 +1,39 @@ +package com.gxwebsoft.shop.param; + +import java.math.BigDecimal; +import com.gxwebsoft.common.core.annotation.QueryField; +import com.gxwebsoft.common.core.annotation.QueryType; +import com.gxwebsoft.common.core.web.BaseParam; +import com.fasterxml.jackson.annotation.JsonInclude; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 运费模板查询参数 + * + * @author 科技小王子 + * @since 2024-11-05 18:03:28 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@JsonInclude(JsonInclude.Include.NON_NULL) +@ApiModel(value = "ExpressTemplateParam对象", description = "运费模板查询参数") +public class ExpressTemplateParam extends BaseParam { + private static final long serialVersionUID = 1L; + + @QueryField(type = QueryType.EQ) + private Integer id; + + private String title; + + @ApiModelProperty(value = "状态, 0已发布, 1待审核 2已驳回 3违规内容") + @QueryField(type = QueryType.EQ) + private Integer status; + + @ApiModelProperty(value = "是否删除, 0否, 1是") + @QueryField(type = QueryType.EQ) + private Integer deleted; + +} diff --git a/src/main/java/com/gxwebsoft/shop/param/GoodsParam.java b/src/main/java/com/gxwebsoft/shop/param/GoodsParam.java index 5ff5152..c4f4537 100644 --- a/src/main/java/com/gxwebsoft/shop/param/GoodsParam.java +++ b/src/main/java/com/gxwebsoft/shop/param/GoodsParam.java @@ -151,4 +151,7 @@ public class GoodsParam extends BaseParam { @TableField(exist = false) private String orderDir; + @TableField(exist = false) + private String region; + } diff --git a/src/main/java/com/gxwebsoft/shop/param/GoodsRoleCommissionParam.java b/src/main/java/com/gxwebsoft/shop/param/GoodsRoleCommissionParam.java new file mode 100644 index 0000000..23a08fe --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/param/GoodsRoleCommissionParam.java @@ -0,0 +1,47 @@ +package com.gxwebsoft.shop.param; + +import java.math.BigDecimal; +import com.gxwebsoft.common.core.annotation.QueryField; +import com.gxwebsoft.common.core.annotation.QueryType; +import com.gxwebsoft.common.core.web.BaseParam; +import com.fasterxml.jackson.annotation.JsonInclude; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 商品绑定角色的分润金额查询参数 + * + * @author 科技小王子 + * @since 2024-12-02 12:43:40 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@JsonInclude(JsonInclude.Include.NON_NULL) +@ApiModel(value = "GoodsRoleCommissionParam对象", description = "商品绑定角色的分润金额查询参数") +public class GoodsRoleCommissionParam extends BaseParam { + private static final long serialVersionUID = 1L; + + @QueryField(type = QueryType.EQ) + private Integer id; + + @QueryField(type = QueryType.EQ) + private Integer roleId; + + @QueryField(type = QueryType.EQ) + private Integer goodsId; + + private String sku; + + @QueryField(type = QueryType.EQ) + private BigDecimal amount; + + @ApiModelProperty(value = "状态, 0正常, 1异常") + @QueryField(type = QueryType.EQ) + private Integer status; + + @ApiModelProperty(value = "备注") + private String comments; + +} diff --git a/src/main/java/com/gxwebsoft/shop/param/MerchantChargePackageParam.java b/src/main/java/com/gxwebsoft/shop/param/MerchantChargePackageParam.java new file mode 100644 index 0000000..6e6e667 --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/param/MerchantChargePackageParam.java @@ -0,0 +1,58 @@ +package com.gxwebsoft.shop.param; + +import java.math.BigDecimal; +import com.gxwebsoft.common.core.annotation.QueryField; +import com.gxwebsoft.common.core.annotation.QueryType; +import com.gxwebsoft.common.core.web.BaseParam; +import com.fasterxml.jackson.annotation.JsonInclude; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 商家充值套餐查询参数 + * + * @author 科技小王子 + * @since 2024-11-20 01:55:04 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@JsonInclude(JsonInclude.Include.NON_NULL) +@ApiModel(value = "MerchantChargePackageParam对象", description = "商家充值套餐查询参数") +public class MerchantChargePackageParam extends BaseParam { + private static final long serialVersionUID = 1L; + + @QueryField(type = QueryType.EQ) + private Integer id; + + @ApiModelProperty(value = "金额") + @QueryField(type = QueryType.EQ) + private BigDecimal amount; + + @ApiModelProperty(value = "赠送金额") + @QueryField(type = QueryType.EQ) + private BigDecimal sendAmount; + + @QueryField(type = QueryType.EQ) + private Integer merchantId; + + @QueryField(type = QueryType.EQ) + private Integer userId; + + @ApiModelProperty(value = "0待审核1通过2拒绝") + @QueryField(type = QueryType.EQ) + private Boolean status; + + @ApiModelProperty(value = "排序(数字越小越靠前)") + @QueryField(type = QueryType.EQ) + private Integer sortNumber; + + @ApiModelProperty(value = "备注") + private String comments; + + @ApiModelProperty(value = "是否删除, 0否, 1是") + @QueryField(type = QueryType.EQ) + private Integer deleted; + +} diff --git a/src/main/java/com/gxwebsoft/shop/param/MerchantGoodsPackageParam.java b/src/main/java/com/gxwebsoft/shop/param/MerchantGoodsPackageParam.java new file mode 100644 index 0000000..0dbfb2f --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/param/MerchantGoodsPackageParam.java @@ -0,0 +1,65 @@ +package com.gxwebsoft.shop.param; + +import java.math.BigDecimal; +import java.util.List; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.gxwebsoft.common.core.annotation.QueryField; +import com.gxwebsoft.common.core.annotation.QueryType; +import com.gxwebsoft.common.core.web.BaseParam; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.gxwebsoft.shop.entity.UserGoodsInMerchant; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 商家充值套餐查询参数 + * + * @author 科技小王子 + * @since 2024-11-20 01:55:04 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@JsonInclude(JsonInclude.Include.NON_NULL) +@ApiModel(value = "MerchantGoodsPackageParam对象", description = "商家充值套餐查询参数") +public class MerchantGoodsPackageParam extends BaseParam { + private static final long serialVersionUID = 1L; + + @QueryField(type = QueryType.EQ) + private Integer id; + + @ApiModelProperty(value = "金额") + @QueryField(type = QueryType.EQ) + private BigDecimal amount; + + @ApiModelProperty(value = "可使用次数") + @QueryField(type = QueryType.EQ) + private BigDecimal getNum; + + @QueryField(type = QueryType.EQ) + private Integer merchantId; + + @QueryField(type = QueryType.EQ) + private Integer userId; + + @ApiModelProperty(value = "0待审核1通过2拒绝") + @QueryField(type = QueryType.EQ) + private Boolean status; + + @ApiModelProperty(value = "排序(数字越小越靠前)") + @QueryField(type = QueryType.EQ) + private Integer sortNumber; + + @ApiModelProperty(value = "备注") + private String comments; + + @ApiModelProperty(value = "是否删除, 0否, 1是") + @QueryField(type = QueryType.EQ) + private Integer deleted; + + @TableField(exist = false) + private Boolean withUserPackage; + +} diff --git a/src/main/java/com/gxwebsoft/shop/param/MerchantPackageGoodsParam.java b/src/main/java/com/gxwebsoft/shop/param/MerchantPackageGoodsParam.java new file mode 100644 index 0000000..6ee3b6d --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/param/MerchantPackageGoodsParam.java @@ -0,0 +1,53 @@ +package com.gxwebsoft.shop.param; + +import java.math.BigDecimal; +import com.gxwebsoft.common.core.annotation.QueryField; +import com.gxwebsoft.common.core.annotation.QueryType; +import com.gxwebsoft.common.core.web.BaseParam; +import com.fasterxml.jackson.annotation.JsonInclude; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 商家套餐可使用的商品查询参数 + * + * @author 科技小王子 + * @since 2024-11-20 01:55:04 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@JsonInclude(JsonInclude.Include.NON_NULL) +@ApiModel(value = "MerchantPackageGoodsParam对象", description = "商家套餐可使用的商品查询参数") +public class MerchantPackageGoodsParam extends BaseParam { + private static final long serialVersionUID = 1L; + + @QueryField(type = QueryType.EQ) + private Integer id; + + @QueryField(type = QueryType.EQ) + private Integer packageId; + + @QueryField(type = QueryType.EQ) + private Integer goodsId; + + @QueryField(type = QueryType.EQ) + private Integer userId; + + @ApiModelProperty(value = "0待审核1通过2拒绝") + @QueryField(type = QueryType.EQ) + private Boolean status; + + @ApiModelProperty(value = "排序(数字越小越靠前)") + @QueryField(type = QueryType.EQ) + private Integer sortNumber; + + @ApiModelProperty(value = "备注") + private String comments; + + @ApiModelProperty(value = "是否删除, 0否, 1是") + @QueryField(type = QueryType.EQ) + private Integer deleted; + +} diff --git a/src/main/java/com/gxwebsoft/shop/param/MessageParam.java b/src/main/java/com/gxwebsoft/shop/param/MessageParam.java new file mode 100644 index 0000000..4708de5 --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/param/MessageParam.java @@ -0,0 +1,44 @@ +package com.gxwebsoft.shop.param; + +import java.math.BigDecimal; +import com.gxwebsoft.common.core.annotation.QueryField; +import com.gxwebsoft.common.core.annotation.QueryType; +import com.gxwebsoft.common.core.web.BaseParam; +import com.fasterxml.jackson.annotation.JsonInclude; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 查询参数 + * + * @author 科技小王子 + * @since 2024-11-18 22:03:11 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@JsonInclude(JsonInclude.Include.NON_NULL) +@ApiModel(value = "MessageParam对象", description = "查询参数") +public class MessageParam extends BaseParam { + private static final long serialVersionUID = 1L; + + @QueryField(type = QueryType.EQ) + private Integer id; + + private String type; + + @QueryField(type = QueryType.EQ) + private Integer pk; + + private String title; + + private String content; + + @QueryField(type = QueryType.EQ) + private Integer userId; + + @QueryField(type = QueryType.EQ) + private Boolean hasRead; + +} diff --git a/src/main/java/com/gxwebsoft/shop/param/OrderParam.java b/src/main/java/com/gxwebsoft/shop/param/OrderParam.java index cdbb252..a2e33bb 100644 --- a/src/main/java/com/gxwebsoft/shop/param/OrderParam.java +++ b/src/main/java/com/gxwebsoft/shop/param/OrderParam.java @@ -205,6 +205,12 @@ public class OrderParam extends BaseParam { @QueryField(type = QueryType.EQ) private Integer deleted; + @QueryField(type = QueryType.EQ) + private Integer expressMerchantId; + + @QueryField(type = QueryType.EQ) + private Integer selfTakeMerchantId; + @ApiModelProperty(value = "下单时间") private Date createTime; @@ -214,4 +220,7 @@ public class OrderParam extends BaseParam { @TableField(exist = false) private User loginUser; + + @TableField(exist = false) + private Boolean listForExpress; } diff --git a/src/main/java/com/gxwebsoft/shop/param/UserBalanceInMerchantParam.java b/src/main/java/com/gxwebsoft/shop/param/UserBalanceInMerchantParam.java new file mode 100644 index 0000000..9b72ffd --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/param/UserBalanceInMerchantParam.java @@ -0,0 +1,50 @@ +package com.gxwebsoft.shop.param; + +import java.math.BigDecimal; +import com.gxwebsoft.common.core.annotation.QueryField; +import com.gxwebsoft.common.core.annotation.QueryType; +import com.gxwebsoft.common.core.web.BaseParam; +import com.fasterxml.jackson.annotation.JsonInclude; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 用户在商家中的余额查询参数 + * + * @author 科技小王子 + * @since 2024-11-20 01:55:04 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@JsonInclude(JsonInclude.Include.NON_NULL) +@ApiModel(value = "UserBalanceInMerchantParam对象", description = "用户在商家中的余额查询参数") +public class UserBalanceInMerchantParam extends BaseParam { + private static final long serialVersionUID = 1L; + + @QueryField(type = QueryType.EQ) + private Integer id; + + @QueryField(type = QueryType.EQ) + private Integer userId; + + @QueryField(type = QueryType.EQ) + private BigDecimal balance; + + @ApiModelProperty(value = "0待审核1通过2拒绝") + @QueryField(type = QueryType.EQ) + private Boolean status; + + @ApiModelProperty(value = "排序(数字越小越靠前)") + @QueryField(type = QueryType.EQ) + private Integer sortNumber; + + @ApiModelProperty(value = "备注") + private String comments; + + @ApiModelProperty(value = "是否删除, 0否, 1是") + @QueryField(type = QueryType.EQ) + private Integer deleted; + +} diff --git a/src/main/java/com/gxwebsoft/shop/param/UserCommissionRoleParam.java b/src/main/java/com/gxwebsoft/shop/param/UserCommissionRoleParam.java new file mode 100644 index 0000000..f33b4e2 --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/param/UserCommissionRoleParam.java @@ -0,0 +1,42 @@ +package com.gxwebsoft.shop.param; + +import java.math.BigDecimal; +import com.gxwebsoft.common.core.annotation.QueryField; +import com.gxwebsoft.common.core.annotation.QueryType; +import com.gxwebsoft.common.core.web.BaseParam; +import com.fasterxml.jackson.annotation.JsonInclude; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 用户绑定分红角色查询参数 + * + * @author 科技小王子 + * @since 2024-12-02 12:43:40 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@JsonInclude(JsonInclude.Include.NON_NULL) +@ApiModel(value = "UserCommissionRoleParam对象", description = "用户绑定分红角色查询参数") +public class UserCommissionRoleParam extends BaseParam { + private static final long serialVersionUID = 1L; + + @QueryField(type = QueryType.EQ) + private Integer id; + + @QueryField(type = QueryType.EQ) + private Integer roleId; + + @QueryField(type = QueryType.EQ) + private Integer userId; + + @ApiModelProperty(value = "状态, 0正常, 1异常") + @QueryField(type = QueryType.EQ) + private Integer status; + + @ApiModelProperty(value = "备注") + private String comments; + +} diff --git a/src/main/java/com/gxwebsoft/shop/param/UserGoodsInMerchantParam.java b/src/main/java/com/gxwebsoft/shop/param/UserGoodsInMerchantParam.java new file mode 100644 index 0000000..39cd8f9 --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/param/UserGoodsInMerchantParam.java @@ -0,0 +1,50 @@ +package com.gxwebsoft.shop.param; + +import java.math.BigDecimal; +import com.gxwebsoft.common.core.annotation.QueryField; +import com.gxwebsoft.common.core.annotation.QueryType; +import com.gxwebsoft.common.core.web.BaseParam; +import com.fasterxml.jackson.annotation.JsonInclude; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 用户在商家中的代金券查询参数 + * + * @author 科技小王子 + * @since 2024-11-20 01:55:04 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@JsonInclude(JsonInclude.Include.NON_NULL) +@ApiModel(value = "UserGoodsInMerchantParam对象", description = "用户在商家中的代金券查询参数") +public class UserGoodsInMerchantParam extends BaseParam { + private static final long serialVersionUID = 1L; + + @QueryField(type = QueryType.EQ) + private Integer id; + + @QueryField(type = QueryType.EQ) + private Integer userId; + + @QueryField(type = QueryType.EQ) + private BigDecimal balance; + + @ApiModelProperty(value = "0待审核1通过2拒绝") + @QueryField(type = QueryType.EQ) + private Boolean status; + + @ApiModelProperty(value = "排序(数字越小越靠前)") + @QueryField(type = QueryType.EQ) + private Integer sortNumber; + + @ApiModelProperty(value = "备注") + private String comments; + + @ApiModelProperty(value = "是否删除, 0否, 1是") + @QueryField(type = QueryType.EQ) + private Integer deleted; + +} diff --git a/src/main/java/com/gxwebsoft/shop/param/ViewHistoryParam.java b/src/main/java/com/gxwebsoft/shop/param/ViewHistoryParam.java new file mode 100644 index 0000000..c58607c --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/param/ViewHistoryParam.java @@ -0,0 +1,45 @@ +package com.gxwebsoft.shop.param; + +import java.math.BigDecimal; +import com.gxwebsoft.common.core.annotation.QueryField; +import com.gxwebsoft.common.core.annotation.QueryType; +import com.gxwebsoft.common.core.web.BaseParam; +import com.fasterxml.jackson.annotation.JsonInclude; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 浏览历史查询参数 + * + * @author 科技小王子 + * @since 2024-11-22 22:13:47 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@JsonInclude(JsonInclude.Include.NON_NULL) +@ApiModel(value = "ViewHistoryParam对象", description = "浏览历史查询参数") +public class ViewHistoryParam extends BaseParam { + private static final long serialVersionUID = 1L; + + @QueryField(type = QueryType.EQ) + private Integer id; + + @QueryField(type = QueryType.EQ) + private Boolean type; + + private String pk; + + @QueryField(type = QueryType.EQ) + private Integer userId; + + @ApiModelProperty(value = "排序号") + @QueryField(type = QueryType.EQ) + private Integer sortNumber; + + @ApiModelProperty(value = "是否删除, 0否, 1是") + @QueryField(type = QueryType.EQ) + private Integer deleted; + +} diff --git a/src/main/java/com/gxwebsoft/shop/service/CommissionRoleService.java b/src/main/java/com/gxwebsoft/shop/service/CommissionRoleService.java new file mode 100644 index 0000000..c855f46 --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/service/CommissionRoleService.java @@ -0,0 +1,43 @@ +package com.gxwebsoft.shop.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.gxwebsoft.common.core.web.PageResult; +import com.gxwebsoft.shop.entity.CommissionRole; +import com.gxwebsoft.shop.param.CommissionRoleParam; + +import java.util.List; + +/** + * 分红角色Service + * + * @author 科技小王子 + * @since 2024-12-02 12:43:40 + */ +public interface CommissionRoleService extends IService { + + /** + * 分页关联查询 + * + * @param param 查询参数 + * @return PageResult + */ + PageResult pageRel(CommissionRoleParam param); + + /** + * 关联查询全部 + * + * @param param 查询参数 + * @return List + */ + List listRel(CommissionRoleParam param); + + /** + * 根据id查询 + * + * @param id + * @return CommissionRole + */ + CommissionRole getByIdRel(Integer id); + + List listByProvinceId(Integer id); +} diff --git a/src/main/java/com/gxwebsoft/shop/service/ExpressTemplateDetailService.java b/src/main/java/com/gxwebsoft/shop/service/ExpressTemplateDetailService.java new file mode 100644 index 0000000..16cae6c --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/service/ExpressTemplateDetailService.java @@ -0,0 +1,43 @@ +package com.gxwebsoft.shop.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.gxwebsoft.common.core.web.PageResult; +import com.gxwebsoft.shop.entity.ExpressTemplateDetail; +import com.gxwebsoft.shop.param.ExpressTemplateDetailParam; + +import java.util.List; + +/** + * 运费模板Service + * + * @author 科技小王子 + * @since 2024-11-05 18:03:28 + */ +public interface ExpressTemplateDetailService extends IService { + + /** + * 分页关联查询 + * + * @param param 查询参数 + * @return PageResult + */ + PageResult pageRel(ExpressTemplateDetailParam param); + + /** + * 关联查询全部 + * + * @param param 查询参数 + * @return List + */ + List listRel(ExpressTemplateDetailParam param); + + /** + * 根据id查询 + * + * @param id + * @return ExpressTemplateDetail + */ + ExpressTemplateDetail getByIdRel(Integer id); + + List listByTemplateId(Integer templateId); +} diff --git a/src/main/java/com/gxwebsoft/shop/service/ExpressTemplateService.java b/src/main/java/com/gxwebsoft/shop/service/ExpressTemplateService.java new file mode 100644 index 0000000..399d46d --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/service/ExpressTemplateService.java @@ -0,0 +1,46 @@ +package com.gxwebsoft.shop.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.gxwebsoft.common.core.web.PageResult; +import com.gxwebsoft.shop.entity.ExpressTemplate; +import com.gxwebsoft.shop.entity.OrderGoods; +import com.gxwebsoft.shop.entity.UserAddress; +import com.gxwebsoft.shop.param.ExpressTemplateParam; + +import java.math.BigDecimal; +import java.util.List; + +/** + * 运费模板Service + * + * @author 科技小王子 + * @since 2024-11-05 18:03:28 + */ +public interface ExpressTemplateService extends IService { + + /** + * 分页关联查询 + * + * @param param 查询参数 + * @return PageResult + */ + PageResult pageRel(ExpressTemplateParam param); + + /** + * 关联查询全部 + * + * @param param 查询参数 + * @return List + */ + List listRel(ExpressTemplateParam param); + + /** + * 根据id查询 + * + * @param id + * @return ExpressTemplate + */ + ExpressTemplate getByIdRel(Integer id); + + BigDecimal calExpressAmount(List orderGoodsList, UserAddress userAddress); +} diff --git a/src/main/java/com/gxwebsoft/shop/service/GoodsRoleCommissionService.java b/src/main/java/com/gxwebsoft/shop/service/GoodsRoleCommissionService.java new file mode 100644 index 0000000..4a42bcb --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/service/GoodsRoleCommissionService.java @@ -0,0 +1,43 @@ +package com.gxwebsoft.shop.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.gxwebsoft.common.core.web.PageResult; +import com.gxwebsoft.shop.entity.GoodsRoleCommission; +import com.gxwebsoft.shop.param.GoodsRoleCommissionParam; + +import java.util.List; + +/** + * 商品绑定角色的分润金额Service + * + * @author 科技小王子 + * @since 2024-12-02 12:43:40 + */ +public interface GoodsRoleCommissionService extends IService { + + /** + * 分页关联查询 + * + * @param param 查询参数 + * @return PageResult + */ + PageResult pageRel(GoodsRoleCommissionParam param); + + /** + * 关联查询全部 + * + * @param param 查询参数 + * @return List + */ + List listRel(GoodsRoleCommissionParam param); + + /** + * 根据id查询 + * + * @param id + * @return GoodsRoleCommission + */ + GoodsRoleCommission getByIdRel(Integer id); + + GoodsRoleCommission getByRoleNGoods(Integer roleId, Integer goodsId); +} diff --git a/src/main/java/com/gxwebsoft/shop/service/GoodsService.java b/src/main/java/com/gxwebsoft/shop/service/GoodsService.java index e5eb57c..375a350 100644 --- a/src/main/java/com/gxwebsoft/shop/service/GoodsService.java +++ b/src/main/java/com/gxwebsoft/shop/service/GoodsService.java @@ -47,7 +47,8 @@ public interface GoodsService extends IService { // 商城商品 List getGoodsSpecType0(GoodsParam param); // 外卖商品 - List getGoodsSpecType1(); + List getGoodsSpecType1(GoodsParam param); + List listByMerchant(Integer merchantId); } diff --git a/src/main/java/com/gxwebsoft/shop/service/GoodsSkuService.java b/src/main/java/com/gxwebsoft/shop/service/GoodsSkuService.java index de248a9..7658ffa 100644 --- a/src/main/java/com/gxwebsoft/shop/service/GoodsSkuService.java +++ b/src/main/java/com/gxwebsoft/shop/service/GoodsSkuService.java @@ -41,4 +41,5 @@ public interface GoodsSkuService extends IService { */ GoodsSku getByIdRel(Integer id); + GoodsSku getBySku(Integer goodsId, String sku); } diff --git a/src/main/java/com/gxwebsoft/shop/service/KuaiDi100.java b/src/main/java/com/gxwebsoft/shop/service/KuaiDi100.java index 005f77d..5c2eccd 100644 --- a/src/main/java/com/gxwebsoft/shop/service/KuaiDi100.java +++ b/src/main/java/com/gxwebsoft/shop/service/KuaiDi100.java @@ -14,4 +14,6 @@ public interface KuaiDi100 { * @throws Exception */ HttpResult border(BOrderReq bOrderReq) throws Exception; + + String pollList(String com, String num) throws Exception; } diff --git a/src/main/java/com/gxwebsoft/shop/service/MerchantApplyService.java b/src/main/java/com/gxwebsoft/shop/service/MerchantApplyService.java index ffaae39..192c454 100644 --- a/src/main/java/com/gxwebsoft/shop/service/MerchantApplyService.java +++ b/src/main/java/com/gxwebsoft/shop/service/MerchantApplyService.java @@ -39,4 +39,5 @@ public interface MerchantApplyService extends IService { */ MerchantApply getByIdRel(Integer applyId); + Integer uncheckNum(); } diff --git a/src/main/java/com/gxwebsoft/shop/service/MerchantChargePackageService.java b/src/main/java/com/gxwebsoft/shop/service/MerchantChargePackageService.java new file mode 100644 index 0000000..08196e8 --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/service/MerchantChargePackageService.java @@ -0,0 +1,42 @@ +package com.gxwebsoft.shop.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.gxwebsoft.common.core.web.PageResult; +import com.gxwebsoft.shop.entity.MerchantChargePackage; +import com.gxwebsoft.shop.param.MerchantChargePackageParam; + +import java.util.List; + +/** + * 商家充值套餐Service + * + * @author 科技小王子 + * @since 2024-11-20 01:55:04 + */ +public interface MerchantChargePackageService extends IService { + + /** + * 分页关联查询 + * + * @param param 查询参数 + * @return PageResult + */ + PageResult pageRel(MerchantChargePackageParam param); + + /** + * 关联查询全部 + * + * @param param 查询参数 + * @return List + */ + List listRel(MerchantChargePackageParam param); + + /** + * 根据id查询 + * + * @param id + * @return MerchantChargePackage + */ + MerchantChargePackage getByIdRel(Integer id); + +} diff --git a/src/main/java/com/gxwebsoft/shop/service/MerchantGoodsPackageService.java b/src/main/java/com/gxwebsoft/shop/service/MerchantGoodsPackageService.java new file mode 100644 index 0000000..75922f1 --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/service/MerchantGoodsPackageService.java @@ -0,0 +1,42 @@ +package com.gxwebsoft.shop.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.gxwebsoft.common.core.web.PageResult; +import com.gxwebsoft.shop.entity.MerchantGoodsPackage; +import com.gxwebsoft.shop.param.MerchantGoodsPackageParam; + +import java.util.List; + +/** + * 商家充值套餐Service + * + * @author 科技小王子 + * @since 2024-11-20 01:55:04 + */ +public interface MerchantGoodsPackageService extends IService { + + /** + * 分页关联查询 + * + * @param param 查询参数 + * @return PageResult + */ + PageResult pageRel(MerchantGoodsPackageParam param); + + /** + * 关联查询全部 + * + * @param param 查询参数 + * @return List + */ + List listRel(MerchantGoodsPackageParam param); + + /** + * 根据id查询 + * + * @param id + * @return MerchantGoodsPackage + */ + MerchantGoodsPackage getByIdRel(Integer id); + +} diff --git a/src/main/java/com/gxwebsoft/shop/service/MerchantPackageGoodsService.java b/src/main/java/com/gxwebsoft/shop/service/MerchantPackageGoodsService.java new file mode 100644 index 0000000..c019349 --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/service/MerchantPackageGoodsService.java @@ -0,0 +1,43 @@ +package com.gxwebsoft.shop.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.gxwebsoft.common.core.web.PageResult; +import com.gxwebsoft.shop.entity.MerchantPackageGoods; +import com.gxwebsoft.shop.param.MerchantPackageGoodsParam; + +import java.util.List; + +/** + * 商家套餐可使用的商品Service + * + * @author 科技小王子 + * @since 2024-11-20 01:55:04 + */ +public interface MerchantPackageGoodsService extends IService { + + /** + * 分页关联查询 + * + * @param param 查询参数 + * @return PageResult + */ + PageResult pageRel(MerchantPackageGoodsParam param); + + /** + * 关联查询全部 + * + * @param param 查询参数 + * @return List + */ + List listRel(MerchantPackageGoodsParam param); + + /** + * 根据id查询 + * + * @param id + * @return MerchantPackageGoods + */ + MerchantPackageGoods getByIdRel(Integer id); + + List listByPackage(Integer packageId); +} diff --git a/src/main/java/com/gxwebsoft/shop/service/MerchantService.java b/src/main/java/com/gxwebsoft/shop/service/MerchantService.java index 241c9ba..ae2638b 100644 --- a/src/main/java/com/gxwebsoft/shop/service/MerchantService.java +++ b/src/main/java/com/gxwebsoft/shop/service/MerchantService.java @@ -39,5 +39,9 @@ public interface MerchantService extends IService { */ Merchant getByIdRel(Integer merchantId); + Merchant getByIdRel(Integer merchantId, MerchantParam param); + Merchant getByUserId(Integer userId); + + List listByDistance(String lat, String lng, String shopType); } diff --git a/src/main/java/com/gxwebsoft/shop/service/MessageService.java b/src/main/java/com/gxwebsoft/shop/service/MessageService.java new file mode 100644 index 0000000..86bf40c --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/service/MessageService.java @@ -0,0 +1,43 @@ +package com.gxwebsoft.shop.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.gxwebsoft.common.core.web.PageResult; +import com.gxwebsoft.shop.entity.Message; +import com.gxwebsoft.shop.param.MessageParam; + +import java.util.List; + +/** + * Service + * + * @author 科技小王子 + * @since 2024-11-18 22:03:11 + */ +public interface MessageService extends IService { + + /** + * 分页关联查询 + * + * @param param 查询参数 + * @return PageResult + */ + PageResult pageRel(MessageParam param); + + /** + * 关联查询全部 + * + * @param param 查询参数 + * @return List + */ + List listRel(MessageParam param); + + /** + * 根据id查询 + * + * @param id + * @return Message + */ + Message getByIdRel(Integer id); + + Integer unreadNum(Integer userId); +} diff --git a/src/main/java/com/gxwebsoft/shop/service/OrderDeliveryService.java b/src/main/java/com/gxwebsoft/shop/service/OrderDeliveryService.java index 613280d..e09a6f6 100644 --- a/src/main/java/com/gxwebsoft/shop/service/OrderDeliveryService.java +++ b/src/main/java/com/gxwebsoft/shop/service/OrderDeliveryService.java @@ -2,10 +2,15 @@ package com.gxwebsoft.shop.service; import com.baomidou.mybatisplus.extension.service.IService; import com.gxwebsoft.common.core.web.PageResult; +import com.gxwebsoft.common.system.entity.User; +import com.gxwebsoft.shop.entity.Merchant; +import com.gxwebsoft.shop.entity.Order; import com.gxwebsoft.shop.entity.OrderDelivery; +import com.gxwebsoft.shop.entity.OrderGoods; import com.gxwebsoft.shop.param.OrderDeliveryParam; import java.util.List; +import java.util.Map; /** * 发货单Service @@ -40,4 +45,6 @@ public interface OrderDeliveryService extends IService { OrderDelivery getByIdRel(Integer deliveryId); OrderDelivery getByOrderId(Integer orderId); + + Map setExpress(User user, OrderDelivery orderDelivery, Merchant merchant, Order order, List orderGoodsList) throws Exception; } diff --git a/src/main/java/com/gxwebsoft/shop/service/OrderGoodsService.java b/src/main/java/com/gxwebsoft/shop/service/OrderGoodsService.java index f8c601b..95b478f 100644 --- a/src/main/java/com/gxwebsoft/shop/service/OrderGoodsService.java +++ b/src/main/java/com/gxwebsoft/shop/service/OrderGoodsService.java @@ -33,6 +33,8 @@ public interface OrderGoodsService extends IService { List listByOrderId(Integer orderId); + List listByGoodsList(List goodsIds); + /** * 根据id查询 * diff --git a/src/main/java/com/gxwebsoft/shop/service/UserAddressService.java b/src/main/java/com/gxwebsoft/shop/service/UserAddressService.java index 7795115..3894ce5 100644 --- a/src/main/java/com/gxwebsoft/shop/service/UserAddressService.java +++ b/src/main/java/com/gxwebsoft/shop/service/UserAddressService.java @@ -40,4 +40,6 @@ public interface UserAddressService extends IService { UserAddress getByIdRel(Integer id); void clearDefault(Integer userId); + + UserAddress getUserDefault(Integer userId); } diff --git a/src/main/java/com/gxwebsoft/shop/service/UserBalanceInMerchantService.java b/src/main/java/com/gxwebsoft/shop/service/UserBalanceInMerchantService.java new file mode 100644 index 0000000..6d5a870 --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/service/UserBalanceInMerchantService.java @@ -0,0 +1,43 @@ +package com.gxwebsoft.shop.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.gxwebsoft.common.core.web.PageResult; +import com.gxwebsoft.shop.entity.UserBalanceInMerchant; +import com.gxwebsoft.shop.param.UserBalanceInMerchantParam; + +import java.util.List; + +/** + * 用户在商家中的余额Service + * + * @author 科技小王子 + * @since 2024-11-20 01:55:04 + */ +public interface UserBalanceInMerchantService extends IService { + + /** + * 分页关联查询 + * + * @param param 查询参数 + * @return PageResult + */ + PageResult pageRel(UserBalanceInMerchantParam param); + + /** + * 关联查询全部 + * + * @param param 查询参数 + * @return List + */ + List listRel(UserBalanceInMerchantParam param); + + /** + * 根据id查询 + * + * @param id + * @return UserBalanceInMerchant + */ + UserBalanceInMerchant getByIdRel(Integer id); + + UserBalanceInMerchant getBalance(Integer merchantId, Integer userId); +} diff --git a/src/main/java/com/gxwebsoft/shop/service/UserCommissionRoleService.java b/src/main/java/com/gxwebsoft/shop/service/UserCommissionRoleService.java new file mode 100644 index 0000000..77a0be7 --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/service/UserCommissionRoleService.java @@ -0,0 +1,43 @@ +package com.gxwebsoft.shop.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.gxwebsoft.common.core.web.PageResult; +import com.gxwebsoft.shop.entity.UserCommissionRole; +import com.gxwebsoft.shop.param.UserCommissionRoleParam; + +import java.util.List; + +/** + * 用户绑定分红角色Service + * + * @author 科技小王子 + * @since 2024-12-02 12:43:40 + */ +public interface UserCommissionRoleService extends IService { + + /** + * 分页关联查询 + * + * @param param 查询参数 + * @return PageResult + */ + PageResult pageRel(UserCommissionRoleParam param); + + /** + * 关联查询全部 + * + * @param param 查询参数 + * @return List + */ + List listRel(UserCommissionRoleParam param); + + /** + * 根据id查询 + * + * @param id + * @return UserCommissionRole + */ + UserCommissionRole getByIdRel(Integer id); + + List listByRoleIds(List roleIds); +} diff --git a/src/main/java/com/gxwebsoft/shop/service/UserGoodsInMerchantService.java b/src/main/java/com/gxwebsoft/shop/service/UserGoodsInMerchantService.java new file mode 100644 index 0000000..9efd657 --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/service/UserGoodsInMerchantService.java @@ -0,0 +1,44 @@ +package com.gxwebsoft.shop.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.gxwebsoft.common.core.web.PageResult; +import com.gxwebsoft.shop.entity.UserGoodsInMerchant; +import com.gxwebsoft.shop.param.UserGoodsInMerchantParam; + +import java.util.List; + +/** + * 用户在商家中的代金券Service + * + * @author 科技小王子 + * @since 2024-11-20 01:55:04 + */ +public interface UserGoodsInMerchantService extends IService { + + /** + * 分页关联查询 + * + * @param param 查询参数 + * @return PageResult + */ + PageResult pageRel(UserGoodsInMerchantParam param); + + /** + * 关联查询全部 + * + * @param param 查询参数 + * @return List + */ + List listRel(UserGoodsInMerchantParam param); + + /** + * 根据id查询 + * + * @param id + * @return UserGoodsInMerchant + */ + UserGoodsInMerchant getByIdRel(Integer id); + + + UserGoodsInMerchant infoInMerchant(Integer packageId, Integer userId); +} diff --git a/src/main/java/com/gxwebsoft/shop/service/ViewHistoryService.java b/src/main/java/com/gxwebsoft/shop/service/ViewHistoryService.java new file mode 100644 index 0000000..4b33711 --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/service/ViewHistoryService.java @@ -0,0 +1,45 @@ +package com.gxwebsoft.shop.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.gxwebsoft.common.core.web.PageResult; +import com.gxwebsoft.shop.entity.ViewHistory; +import com.gxwebsoft.shop.param.ViewHistoryParam; + +import java.util.List; + +/** + * 浏览历史Service + * + * @author 科技小王子 + * @since 2024-11-22 22:13:47 + */ +public interface ViewHistoryService extends IService { + + /** + * 分页关联查询 + * + * @param param 查询参数 + * @return PageResult + */ + PageResult pageRel(ViewHistoryParam param); + + /** + * 关联查询全部 + * + * @param param 查询参数 + * @return List + */ + List listRel(ViewHistoryParam param); + + /** + * 根据id查询 + * + * @param id + * @return ViewHistory + */ + ViewHistory getByIdRel(Integer id); + + ViewHistory check(Integer type, Integer pk, Integer userId); + + ViewHistory check(Integer type, Integer pk, String openId); +} diff --git a/src/main/java/com/gxwebsoft/shop/service/impl/CartServiceImpl.java b/src/main/java/com/gxwebsoft/shop/service/impl/CartServiceImpl.java index 466c47f..1a23bec 100644 --- a/src/main/java/com/gxwebsoft/shop/service/impl/CartServiceImpl.java +++ b/src/main/java/com/gxwebsoft/shop/service/impl/CartServiceImpl.java @@ -5,21 +5,19 @@ import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.github.yulichang.wrapper.MPJLambdaWrapper; +import com.gxwebsoft.common.core.utils.RequestUtil; import com.gxwebsoft.common.system.entity.Dict; import com.gxwebsoft.common.system.entity.DictData; -import com.gxwebsoft.shop.entity.Goods; -import com.gxwebsoft.shop.entity.GoodsSpec; -import com.gxwebsoft.shop.entity.Merchant; +import com.gxwebsoft.common.system.entity.User; +import com.gxwebsoft.shop.entity.*; import com.gxwebsoft.shop.mapper.CartMapper; -import com.gxwebsoft.shop.service.CartService; -import com.gxwebsoft.shop.entity.Cart; +import com.gxwebsoft.shop.service.*; import com.gxwebsoft.shop.param.CartParam; import com.gxwebsoft.common.core.web.PageParam; import com.gxwebsoft.common.core.web.PageResult; -import com.gxwebsoft.shop.service.GoodsService; -import com.gxwebsoft.shop.service.MerchantService; import com.gxwebsoft.shop.vo.CartShopVo; import com.gxwebsoft.shop.vo.CartVo; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.RequestMapping; @@ -42,6 +40,13 @@ public class CartServiceImpl extends ServiceImpl implements Ca private GoodsService goodsService; @Resource private MerchantService merchantService; + @Resource + private ExpressTemplateService expressTemplateService; + @Resource + private UserAddressService userAddressService; + + @Autowired + private RequestUtil requestUtil; @Override public PageResult pageRel(CartParam param) { @@ -58,26 +63,48 @@ public class CartServiceImpl extends ServiceImpl implements Ca // 排序 PageParam page = new PageParam<>(); page.setDefaultOrder("create_time desc"); - final List carts = page.sortRecords(list); + List carts = page.sortRecords(list); + if (param.getId() != null) carts = list.stream().filter(d -> d.getId().equals(param.getId())).toList(); System.out.println("carts = " + carts.size()); // 整理数据 final CartVo vo = new CartVo(); // 计算单品总价 + User parentUser; + if (param.getLoginUser() != null) { + parentUser = requestUtil.getParent(param.getLoginUser().getUserId()); + } else { + parentUser = null; + } + BigDecimal expressAmount = BigDecimal.ZERO; + List orderGoodsList = new ArrayList<>(); for (Cart cart : carts) { cart.setTotalPrice(cart.getPrice().multiply(BigDecimal.valueOf(cart.getCartNum()))); Goods goods = goodsService.getById(cart.getGoodsId()); if (param.getLoginUser() != null) { - // 经销商 - if (param.getLoginUser().getGradeId().equals(33)) { - if (goods.getDealerGift()) goods.setShowGift(true); + BigDecimal originPrice = goods.getPrice(); + goods.setPrice(goods.getSalePrice()); + // 会员 + if (parentUser != null) { + if (goods.getPriceGift()) goods.setShowGift(true); +// goods.setPrice(originPrice); } // 会员店 - if (param.getLoginUser().getGradeId().equals(31)) { - if (goods.getPriceGift()) goods.setShowGift(true); + if (param.getLoginUser().getGradeId() > 30 && goods.getBuyingPriceOpen().equals(1)) { + goods.setPrice(goods.getBuyingPrice()); +// if (goods.getPriceGift()) goods.setShowGift(true); } } + OrderGoods orderGoods = new OrderGoods(); + orderGoods.setGoodsId(cart.getGoodsId()); + orderGoods.setGoods(goods); + orderGoods.setTotalNum(cart.getCartNum()); + orderGoodsList.add(orderGoods); cart.setGoods(goods); } + UserAddress userAddress; + if (param.getAddressId() != null) userAddress = userAddressService.getById(param.getAddressId()); + else userAddress = userAddressService.getUserDefault(param.getLoginUser().getUserId()); + if (userAddress != null) expressAmount = expressTemplateService.calExpressAmount(orderGoodsList, userAddress); // 计算购物车金额 final Integer cartNum = carts.stream().map(Cart::getCartNum).reduce(Integer::sum).orElse(0); final Integer selectNums = carts.stream().filter(d -> d.getSelected().equals(true)).map(Cart::getCartNum).reduce(Integer::sum).orElse(0); @@ -105,6 +132,7 @@ public class CartServiceImpl extends ServiceImpl implements Ca vo.setShops(shops); vo.setTotalPrice(totalPrice); + vo.setExpressAmount(expressAmount); vo.setTotalNums(Long.valueOf(cartNum)); vo.setSelectNums(Long.valueOf(selectNums)); // updateBatchById(carts); diff --git a/src/main/java/com/gxwebsoft/shop/service/impl/CommissionRoleServiceImpl.java b/src/main/java/com/gxwebsoft/shop/service/impl/CommissionRoleServiceImpl.java new file mode 100644 index 0000000..0e4b16f --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/service/impl/CommissionRoleServiceImpl.java @@ -0,0 +1,70 @@ +package com.gxwebsoft.shop.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.gxwebsoft.common.system.service.AreaService; +import com.gxwebsoft.shop.mapper.CommissionRoleMapper; +import com.gxwebsoft.shop.service.CommissionRoleService; +import com.gxwebsoft.shop.entity.CommissionRole; +import com.gxwebsoft.shop.param.CommissionRoleParam; +import com.gxwebsoft.common.core.web.PageParam; +import com.gxwebsoft.common.core.web.PageResult; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; + +/** + * 分红角色Service实现 + * + * @author 科技小王子 + * @since 2024-12-02 12:43:40 + */ +@Service +public class CommissionRoleServiceImpl extends ServiceImpl implements CommissionRoleService { + @Resource + private AreaService areaService; + + @Override + public PageResult pageRel(CommissionRoleParam param) { + PageParam page = new PageParam<>(param); + page.setDefaultOrder("sort_number asc, create_time desc"); + List list = baseMapper.selectPageRel(page, param); + for (CommissionRole commissionRole : list) { + if (commissionRole.getProvinceId() != null) { + commissionRole.setProvince(areaService.getByIdRel(commissionRole.getProvinceId())); + } + if (commissionRole.getCityId() != null) { + commissionRole.setCity(areaService.getByIdRel(commissionRole.getCityId())); + } + if (commissionRole.getRegionId() != null) { + commissionRole.setRegion(areaService.getByIdRel(commissionRole.getRegionId())); + } + } + return new PageResult<>(list, page.getTotal()); + } + + @Override + public List listRel(CommissionRoleParam param) { + List list = baseMapper.selectListRel(param); + // 排序 + PageParam page = new PageParam<>(); + return page.sortRecords(list); + } + + @Override + public CommissionRole getByIdRel(Integer id) { + CommissionRoleParam param = new CommissionRoleParam(); + param.setId(id); + return param.getOne(baseMapper.selectListRel(param)); + } + + @Override + public List listByProvinceId(Integer provinceId) { + return list( + new LambdaQueryWrapper() + .eq(CommissionRole::getProvinceId, provinceId) + ); + } + +} diff --git a/src/main/java/com/gxwebsoft/shop/service/impl/ExpressTemplateDetailServiceImpl.java b/src/main/java/com/gxwebsoft/shop/service/impl/ExpressTemplateDetailServiceImpl.java new file mode 100644 index 0000000..b85fd58 --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/service/impl/ExpressTemplateDetailServiceImpl.java @@ -0,0 +1,56 @@ +package com.gxwebsoft.shop.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.gxwebsoft.shop.mapper.ExpressTemplateDetailMapper; +import com.gxwebsoft.shop.service.ExpressTemplateDetailService; +import com.gxwebsoft.shop.entity.ExpressTemplateDetail; +import com.gxwebsoft.shop.param.ExpressTemplateDetailParam; +import com.gxwebsoft.common.core.web.PageParam; +import com.gxwebsoft.common.core.web.PageResult; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 运费模板Service实现 + * + * @author 科技小王子 + * @since 2024-11-05 18:03:28 + */ +@Service +public class ExpressTemplateDetailServiceImpl extends ServiceImpl implements ExpressTemplateDetailService { + + @Override + public PageResult pageRel(ExpressTemplateDetailParam param) { + PageParam page = new PageParam<>(param); + page.setDefaultOrder("sort_number asc, create_time desc"); + List list = baseMapper.selectPageRel(page, param); + return new PageResult<>(list, page.getTotal()); + } + + @Override + public List listRel(ExpressTemplateDetailParam param) { + List list = baseMapper.selectListRel(param); + // 排序 + PageParam page = new PageParam<>(); + page.setDefaultOrder("sort_number asc, create_time desc"); + return page.sortRecords(list); + } + + @Override + public ExpressTemplateDetail getByIdRel(Integer id) { + ExpressTemplateDetailParam param = new ExpressTemplateDetailParam(); + param.setId(id); + return param.getOne(baseMapper.selectListRel(param)); + } + + @Override + public List listByTemplateId(Integer templateId) { + return list( + new LambdaQueryWrapper() + .eq(ExpressTemplateDetail::getTemplateId, templateId) + ); + } + +} diff --git a/src/main/java/com/gxwebsoft/shop/service/impl/ExpressTemplateServiceImpl.java b/src/main/java/com/gxwebsoft/shop/service/impl/ExpressTemplateServiceImpl.java new file mode 100644 index 0000000..ce667f6 --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/service/impl/ExpressTemplateServiceImpl.java @@ -0,0 +1,139 @@ +package com.gxwebsoft.shop.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.gxwebsoft.common.core.utils.JSONUtil; +import com.gxwebsoft.common.core.utils.RequestUtil; +import com.gxwebsoft.common.core.web.ApiResult; +import com.gxwebsoft.common.system.entity.Area; +import com.gxwebsoft.common.system.service.AreaService; +import com.gxwebsoft.shop.entity.*; +import com.gxwebsoft.shop.mapper.ExpressTemplateMapper; +import com.gxwebsoft.shop.service.ExpressTemplateDetailService; +import com.gxwebsoft.shop.service.ExpressTemplateService; +import com.gxwebsoft.shop.param.ExpressTemplateParam; +import com.gxwebsoft.common.core.web.PageParam; +import com.gxwebsoft.common.core.web.PageResult; +import com.gxwebsoft.shop.service.GoodsService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * 运费模板Service实现 + * + * @author 科技小王子 + * @since 2024-11-05 18:03:28 + */ +@Service +public class ExpressTemplateServiceImpl extends ServiceImpl implements ExpressTemplateService { + + @Resource + private ExpressTemplateDetailService expressTemplateDetailService; + @Resource + private AreaService areaService; + @Resource + private GoodsService goodsService; + + @Autowired + private RequestUtil requestUtil; + + + @Override + public PageResult pageRel(ExpressTemplateParam param) { + PageParam page = new PageParam<>(param); + page.setDefaultOrder("sort_number asc, create_time desc"); + List list = baseMapper.selectPageRel(page, param); + for (ExpressTemplate expressTemplate : list) { + expressTemplate.setDetailList(expressTemplateDetailService.listByTemplateId(expressTemplate.getId())); + } + return new PageResult<>(list, page.getTotal()); + } + + @Override + public List listRel(ExpressTemplateParam param) { + List list = baseMapper.selectListRel(param); + // 排序 + PageParam page = new PageParam<>(); +// page.setDefaultOrder("sort_number asc, create_time desc"); + return page.sortRecords(list); + } + + @Override + public ExpressTemplate getByIdRel(Integer id) { + ExpressTemplateParam param = new ExpressTemplateParam(); + param.setId(id); + return param.getOne(baseMapper.selectListRel(param)); + } + + @Override + public BigDecimal calExpressAmount(List orderGoodsList, UserAddress userAddress) { + requestUtil.setTenantId("10158"); + ApiResult dictDataApiResult = requestUtil.getDictData(856); + Map dictDataApiResultData = (Map) dictDataApiResult.getData(); + List dictDataList = (List) dictDataApiResultData.get("list"); + Map dictData1 = JSONUtil.parseObject(JSONUtil.toJSONString(dictDataList.get(0)), Map.class); + String policy = (String) dictData1.get("dictDataCode"); + List amountList = new ArrayList<>(); + BigDecimal finalAmount = BigDecimal.ZERO; + for (OrderGoods orderGoods : orderGoodsList) { + Goods goods = orderGoods.getGoods(); + if (goods == null) goods = goodsService.getById(orderGoods.getGoodsId()); + if (goods != null && goods.getExpressTemplateId() != null) { + String userAddressCity = userAddress.getCity(); + String userAddressProvince = userAddress.getProvince(); + Area province = areaService.areaInfoByName(userAddressProvince, 1); + if (province != null) { + Integer provinceId = province.getId(); + Area city = areaService.areaInfoByName(userAddressCity, 2); + if (city != null && city.getFid().equals(provinceId)) { + Integer cityId = city.getId(); + ExpressTemplateDetail templateDetail = expressTemplateDetailService.getOne( + new LambdaQueryWrapper() + .eq(ExpressTemplateDetail::getTemplateId, goods.getExpressTemplateId()) + .eq(ExpressTemplateDetail::getCityId, cityId) + .eq(ExpressTemplateDetail::getProvinceId, provinceId) + .last("limit 1") + ); + if (templateDetail != null) { + ExpressTemplate expressTemplate = getByIdRel(goods.getExpressTemplateId()); + BigDecimal amount = expressTemplate.getFirstAmount(); + // 按件 + BigDecimal extraAmount = BigDecimal.ZERO; + if (expressTemplate.getExtraNum().compareTo(BigDecimal.ZERO) > 0) { + extraAmount = expressTemplate.getExtraAmount().divide(expressTemplate.getExtraNum(), RoundingMode.HALF_UP); + } + BigDecimal totalNumOrWeight = BigDecimal.ZERO; + if (expressTemplate.getType().equals(0)) { + totalNumOrWeight = BigDecimal.valueOf(orderGoods.getTotalNum()); + } + // 按重量 + else if (expressTemplate.getType().equals(1)) { + totalNumOrWeight = goods.getWeight().multiply(BigDecimal.valueOf(orderGoods.getTotalNum())); + } + if (totalNumOrWeight.compareTo(expressTemplate.getFirstNum()) < 0) { + amount = amount.add(expressTemplate.getFirstAmount().add(expressTemplate.getExtraAmount())); + } else { + amount = amount.add(extraAmount.multiply(totalNumOrWeight.subtract(expressTemplate.getExtraAmount()))); + } + amountList.add(amount); + } + } + } + } + } + System.out.println(amountList.stream().reduce(BigDecimal.ZERO, BigDecimal::add)); + return switch (policy) { + case "10" -> amountList.stream().reduce(BigDecimal.ZERO, BigDecimal::add); + case "20" -> amountList.stream().min(BigDecimal::compareTo).orElse(BigDecimal.ZERO); + case "30" -> amountList.stream().max(BigDecimal::compareTo).orElse(BigDecimal.ZERO); + default -> finalAmount; + }; + } +} diff --git a/src/main/java/com/gxwebsoft/shop/service/impl/GoodsRoleCommissionServiceImpl.java b/src/main/java/com/gxwebsoft/shop/service/impl/GoodsRoleCommissionServiceImpl.java new file mode 100644 index 0000000..24c2a2e --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/service/impl/GoodsRoleCommissionServiceImpl.java @@ -0,0 +1,57 @@ +package com.gxwebsoft.shop.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.gxwebsoft.shop.mapper.GoodsRoleCommissionMapper; +import com.gxwebsoft.shop.service.GoodsRoleCommissionService; +import com.gxwebsoft.shop.entity.GoodsRoleCommission; +import com.gxwebsoft.shop.param.GoodsRoleCommissionParam; +import com.gxwebsoft.common.core.web.PageParam; +import com.gxwebsoft.common.core.web.PageResult; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 商品绑定角色的分润金额Service实现 + * + * @author 科技小王子 + * @since 2024-12-02 12:43:40 + */ +@Service +public class GoodsRoleCommissionServiceImpl extends ServiceImpl implements GoodsRoleCommissionService { + + @Override + public PageResult pageRel(GoodsRoleCommissionParam param) { + PageParam page = new PageParam<>(param); + page.setDefaultOrder("sort_number asc, create_time desc"); + List list = baseMapper.selectPageRel(page, param); + return new PageResult<>(list, page.getTotal()); + } + + @Override + public List listRel(GoodsRoleCommissionParam param) { + List list = baseMapper.selectListRel(param); + // 排序 + PageParam page = new PageParam<>(); + return page.sortRecords(list); + } + + @Override + public GoodsRoleCommission getByIdRel(Integer id) { + GoodsRoleCommissionParam param = new GoodsRoleCommissionParam(); + param.setId(id); + return param.getOne(baseMapper.selectListRel(param)); + } + + @Override + public GoodsRoleCommission getByRoleNGoods(Integer roleId, Integer goodsId) { + return getOne( + new LambdaQueryWrapper() + .eq(GoodsRoleCommission::getRoleId, roleId) + .eq(GoodsRoleCommission::getGoodsId, goodsId) + .last("limit 1") + ); + } + +} diff --git a/src/main/java/com/gxwebsoft/shop/service/impl/GoodsServiceImpl.java b/src/main/java/com/gxwebsoft/shop/service/impl/GoodsServiceImpl.java index a68b188..36d4fdb 100644 --- a/src/main/java/com/gxwebsoft/shop/service/impl/GoodsServiceImpl.java +++ b/src/main/java/com/gxwebsoft/shop/service/impl/GoodsServiceImpl.java @@ -1,12 +1,12 @@ package com.gxwebsoft.shop.service.impl; import cn.hutool.core.util.ObjectUtil; -import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.github.yulichang.wrapper.MPJLambdaWrapper; import com.gxwebsoft.common.core.utils.JSONUtil; +import com.gxwebsoft.common.core.utils.RequestUtil; import com.gxwebsoft.common.system.entity.User; import com.gxwebsoft.shop.entity.*; import com.gxwebsoft.shop.mapper.GoodsMapper; @@ -17,12 +17,12 @@ import com.gxwebsoft.common.core.web.PageResult; import com.gxwebsoft.shop.service.GoodsSkuService; import com.gxwebsoft.shop.service.GoodsSpecService; import com.gxwebsoft.shop.service.MerchantService; -import org.apache.tomcat.util.buf.StringUtils; -import org.springframework.scheduling.annotation.Async; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import javax.annotation.Resource; +import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -44,6 +44,9 @@ public class GoodsServiceImpl extends ServiceImpl implements @Resource private MerchantService merchantService; + @Autowired + private RequestUtil requestUtil; + @Override public PageResult pageRel(GoodsParam param) { // 按行业名称查找店铺ID @@ -71,7 +74,7 @@ public class GoodsServiceImpl extends ServiceImpl implements final Object object = JSONUtil.parseObject(value, Object.class); d.setGoodsSpecValue(object); // 整理商品价格 - if (loginUser != null) { + if (loginUser != null && !loginUser.getIsAdmin()) { // 经销商 if (loginUser.getGradeId().equals(33)) { d.setPrice(d.getDealerPrice()); @@ -79,18 +82,26 @@ public class GoodsServiceImpl extends ServiceImpl implements if (loginUser.getGradeId().equals(0)) { d.setPrice(d.getSalePrice()); } - }else { + } else { d.setPrice(d.getSalePrice()); } } - if (loginUser != null) { + if (loginUser != null && !loginUser.getIsAdmin()) { + User parentUser = requestUtil.getParent(loginUser.getUserId()); + BigDecimal originPrice = d.getPrice(); + d.setPrice(d.getSalePrice()); // 经销商 - if (loginUser.getGradeId().equals(33)) { - if (d.getDealerGift()) d.setShowGift(true); +// if (loginUser.getGradeId().equals(33)) { +// if (d.getDealerGift()) d.setShowGift(true); +// } + // 会员 + if (parentUser != null) { + if (d.getPriceGift()) d.setShowGift(true); +// d.setPrice(originPrice); } // 会员店 - if (loginUser.getGradeId().equals(31)) { - if (d.getPriceGift()) d.setShowGift(true); + if (loginUser.getGradeId() > 30 && d.getBuyingPriceOpen().equals(1)) { + d.setPrice(d.getBuyingPrice()); } } if (d.getMerchantId() != null) { @@ -170,7 +181,8 @@ public class GoodsServiceImpl extends ServiceImpl implements .select(GoodsSpec::getSpecName) .leftJoin(GoodsSpec.class, GoodsSpec::getGoodsId, GoodsSpec::getGoodsId) .gt(Goods::getStock, 0) - .eq(Goods::getType, 0); + .eq(Goods::getType, 0) + .eq(Goods::getIsShow, 1); if (param.getOrderBy() != null && param.getOrderDir() != null) { mpjLambdaWrapper.orderBy(true, param.getOrderDir().equals("asc"), param.getOrderBy()); } @@ -178,7 +190,7 @@ public class GoodsServiceImpl extends ServiceImpl implements } @Override - public List getGoodsSpecType1() { + public List getGoodsSpecType1(GoodsParam param) { // 多表查询 MPJLambdaWrapper mpjLambdaWrapper = new MPJLambdaWrapper<>(); mpjLambdaWrapper.selectAll(Goods.class) @@ -186,8 +198,27 @@ public class GoodsServiceImpl extends ServiceImpl implements .select(GoodsSpec::getSpecName) .leftJoin(GoodsSpec.class, GoodsSpec::getGoodsId, GoodsSpec::getGoodsId) .gt(Goods::getStock, 0) - .eq(Goods::getType, 1); + .eq(Goods::getType, 1) + .eq(Goods::getIsShow, 1); + if (param.getRegion() != null) { + List merchantList = merchantService.list( + new LambdaQueryWrapper() + .eq(Merchant::getRegion, param.getRegion()) + .eq(Merchant::getShopType, "会员店") + ); + if (!merchantList.isEmpty()) { + mpjLambdaWrapper.in(Goods::getMerchantId, merchantList.stream().map(Merchant::getMerchantId).toList()); + }else return new ArrayList<>(); + } return baseMapper.selectJoinList(Goods.class, mpjLambdaWrapper); } + @Override + public List listByMerchant(Integer merchantId) { + return list( + new LambdaQueryWrapper() + .eq(Goods::getMerchantId, merchantId) + ); + } + } diff --git a/src/main/java/com/gxwebsoft/shop/service/impl/GoodsSkuServiceImpl.java b/src/main/java/com/gxwebsoft/shop/service/impl/GoodsSkuServiceImpl.java index a806f9b..12cabe0 100644 --- a/src/main/java/com/gxwebsoft/shop/service/impl/GoodsSkuServiceImpl.java +++ b/src/main/java/com/gxwebsoft/shop/service/impl/GoodsSkuServiceImpl.java @@ -53,4 +53,12 @@ public class GoodsSkuServiceImpl extends ServiceImpl i return param.getOne(baseMapper.selectListRel(param)); } + @Override + public GoodsSku getBySku(Integer goodsId, String sku) { + GoodsSkuParam param = new GoodsSkuParam(); + param.setSku(sku); + param.setGoodsId(goodsId); + return param.getOne(baseMapper.selectListRel(param)); + } + } diff --git a/src/main/java/com/gxwebsoft/shop/service/impl/GoodsStockInMerchantServiceImpl.java b/src/main/java/com/gxwebsoft/shop/service/impl/GoodsStockInMerchantServiceImpl.java index 3535052..4b4a5f9 100644 --- a/src/main/java/com/gxwebsoft/shop/service/impl/GoodsStockInMerchantServiceImpl.java +++ b/src/main/java/com/gxwebsoft/shop/service/impl/GoodsStockInMerchantServiceImpl.java @@ -13,6 +13,7 @@ import com.gxwebsoft.shop.entity.GoodsStockInMerchant; import com.gxwebsoft.shop.param.GoodsStockInMerchantParam; import com.gxwebsoft.common.core.web.PageParam; import com.gxwebsoft.common.core.web.PageResult; +import com.gxwebsoft.shop.service.MerchantService; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -29,6 +30,8 @@ public class GoodsStockInMerchantServiceImpl extends ServiceImpl pageRel(GoodsStockInMerchantParam param) { PageParam page = new PageParam<>(param); @@ -76,9 +79,10 @@ public class GoodsStockInMerchantServiceImpl extends ServiceImpl() .leftJoin("shop_merchant AS b ON b.merchant_id = t.merchant_id") .select("t.*", distanceSql) - .eq("goods_id", goodsId) - .eq("can_express", 1) - .ge("stock", stock) +// .eq("goods_id", goodsId) +// .eq("can_express", 1) +// .ge("stock", stock) + .eq("shop_type", "供应商") .orderByDesc("distance") ); } diff --git a/src/main/java/com/gxwebsoft/shop/service/impl/KuaiDi100Impl.java b/src/main/java/com/gxwebsoft/shop/service/impl/KuaiDi100Impl.java index bb89c15..1bf19a4 100644 --- a/src/main/java/com/gxwebsoft/shop/service/impl/KuaiDi100Impl.java +++ b/src/main/java/com/gxwebsoft/shop/service/impl/KuaiDi100Impl.java @@ -1,16 +1,13 @@ package com.gxwebsoft.shop.service.impl; -import cn.hutool.crypto.SecureUtil; import com.google.gson.Gson; import com.gxwebsoft.shop.service.KuaiDi100; -import com.kuaidi100.sdk.api.BOrderOfficial; +import com.kuaidi100.sdk.api.QueryTrack; import com.kuaidi100.sdk.contant.ApiInfoConstant; import com.kuaidi100.sdk.core.BaseClient; import com.kuaidi100.sdk.core.IBaseClient; import com.kuaidi100.sdk.pojo.HttpResult; -import com.kuaidi100.sdk.request.BOrderReq; -import com.kuaidi100.sdk.request.BaseRequest; -import com.kuaidi100.sdk.request.PrintReq; +import com.kuaidi100.sdk.request.*; import com.kuaidi100.sdk.utils.SignUtils; import org.springframework.stereotype.Service; @@ -18,6 +15,8 @@ import org.springframework.stereotype.Service; public class KuaiDi100Impl implements KuaiDi100 { private String key = "QIfOPROg5054"; private String secret = "09401b3c56f54175bcacc74d0519e4ef"; + private String customer = "B747EF140393D019655FA000C5F8E6D1"; + @Override public HttpResult border(BOrderReq bOrderReq) throws Exception { PrintReq printReq = new PrintReq(); @@ -26,7 +25,7 @@ public class KuaiDi100Impl implements KuaiDi100 { String param = new Gson().toJson(bOrderReq); printReq.setKey(key); - printReq.setSign(SignUtils.printSign(param,t,key,secret)); + printReq.setSign(SignUtils.printSign(param, t, key, secret)); printReq.setT(t); printReq.setParam(param); printReq.setMethod(ApiInfoConstant.B_ORDER_OFFICIAL_ORDER_METHOD); @@ -40,4 +39,18 @@ public class KuaiDi100Impl implements KuaiDi100 { }; return bOrder.execute(printReq); } + + @Override + public String pollList(String com, String num) throws Exception { + QueryTrackReq queryTrackReq = new QueryTrackReq(); + QueryTrackParam queryTrackParam = new QueryTrackParam(); + queryTrackParam.setCom(com); + queryTrackParam.setNum(num); + String param = new Gson().toJson(queryTrackParam); + queryTrackReq.setSign(SignUtils.querySign(param, key, customer)); + queryTrackReq.setCustomer(customer); + queryTrackReq.setParam(param); + IBaseClient baseClient = new QueryTrack(); + return baseClient.execute(queryTrackReq).getBody(); + } } diff --git a/src/main/java/com/gxwebsoft/shop/service/impl/MerchantApplyServiceImpl.java b/src/main/java/com/gxwebsoft/shop/service/impl/MerchantApplyServiceImpl.java index 9a67890..67743e6 100644 --- a/src/main/java/com/gxwebsoft/shop/service/impl/MerchantApplyServiceImpl.java +++ b/src/main/java/com/gxwebsoft/shop/service/impl/MerchantApplyServiceImpl.java @@ -1,5 +1,6 @@ package com.gxwebsoft.shop.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.gxwebsoft.shop.mapper.MerchantApplyMapper; import com.gxwebsoft.shop.service.MerchantApplyService; @@ -44,4 +45,12 @@ public class MerchantApplyServiceImpl extends ServiceImpl() + .eq(MerchantApply::getStatus, 0) + ); + } + } diff --git a/src/main/java/com/gxwebsoft/shop/service/impl/MerchantChargePackageServiceImpl.java b/src/main/java/com/gxwebsoft/shop/service/impl/MerchantChargePackageServiceImpl.java new file mode 100644 index 0000000..451aa95 --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/service/impl/MerchantChargePackageServiceImpl.java @@ -0,0 +1,47 @@ +package com.gxwebsoft.shop.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.gxwebsoft.shop.mapper.MerchantChargePackageMapper; +import com.gxwebsoft.shop.service.MerchantChargePackageService; +import com.gxwebsoft.shop.entity.MerchantChargePackage; +import com.gxwebsoft.shop.param.MerchantChargePackageParam; +import com.gxwebsoft.common.core.web.PageParam; +import com.gxwebsoft.common.core.web.PageResult; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 商家充值套餐Service实现 + * + * @author 科技小王子 + * @since 2024-11-20 01:55:04 + */ +@Service +public class MerchantChargePackageServiceImpl extends ServiceImpl implements MerchantChargePackageService { + + @Override + public PageResult pageRel(MerchantChargePackageParam param) { + PageParam page = new PageParam<>(param); + page.setDefaultOrder("sort_number asc, create_time desc"); + List list = baseMapper.selectPageRel(page, param); + return new PageResult<>(list, page.getTotal()); + } + + @Override + public List listRel(MerchantChargePackageParam param) { + List list = baseMapper.selectListRel(param); + // 排序 + PageParam page = new PageParam<>(); + page.setDefaultOrder("sort_number asc, create_time desc"); + return page.sortRecords(list); + } + + @Override + public MerchantChargePackage getByIdRel(Integer id) { + MerchantChargePackageParam param = new MerchantChargePackageParam(); + param.setId(id); + return param.getOne(baseMapper.selectListRel(param)); + } + +} diff --git a/src/main/java/com/gxwebsoft/shop/service/impl/MerchantGoodsPackageServiceImpl.java b/src/main/java/com/gxwebsoft/shop/service/impl/MerchantGoodsPackageServiceImpl.java new file mode 100644 index 0000000..9829b01 --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/service/impl/MerchantGoodsPackageServiceImpl.java @@ -0,0 +1,47 @@ +package com.gxwebsoft.shop.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.gxwebsoft.shop.mapper.MerchantGoodsPackageMapper; +import com.gxwebsoft.shop.service.MerchantGoodsPackageService; +import com.gxwebsoft.shop.entity.MerchantGoodsPackage; +import com.gxwebsoft.shop.param.MerchantGoodsPackageParam; +import com.gxwebsoft.common.core.web.PageParam; +import com.gxwebsoft.common.core.web.PageResult; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 商家充值套餐Service实现 + * + * @author 科技小王子 + * @since 2024-11-20 01:55:04 + */ +@Service +public class MerchantGoodsPackageServiceImpl extends ServiceImpl implements MerchantGoodsPackageService { + + @Override + public PageResult pageRel(MerchantGoodsPackageParam param) { + PageParam page = new PageParam<>(param); + page.setDefaultOrder("sort_number asc, create_time desc"); + List list = baseMapper.selectPageRel(page, param); + return new PageResult<>(list, page.getTotal()); + } + + @Override + public List listRel(MerchantGoodsPackageParam param) { + List list = baseMapper.selectListRel(param); + // 排序 + PageParam page = new PageParam<>(); + page.setDefaultOrder("sort_number asc, create_time desc"); + return page.sortRecords(list); + } + + @Override + public MerchantGoodsPackage getByIdRel(Integer id) { + MerchantGoodsPackageParam param = new MerchantGoodsPackageParam(); + param.setId(id); + return param.getOne(baseMapper.selectListRel(param)); + } + +} diff --git a/src/main/java/com/gxwebsoft/shop/service/impl/MerchantPackageGoodsServiceImpl.java b/src/main/java/com/gxwebsoft/shop/service/impl/MerchantPackageGoodsServiceImpl.java new file mode 100644 index 0000000..ae4e0c4 --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/service/impl/MerchantPackageGoodsServiceImpl.java @@ -0,0 +1,56 @@ +package com.gxwebsoft.shop.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.gxwebsoft.shop.mapper.MerchantPackageGoodsMapper; +import com.gxwebsoft.shop.service.MerchantPackageGoodsService; +import com.gxwebsoft.shop.entity.MerchantPackageGoods; +import com.gxwebsoft.shop.param.MerchantPackageGoodsParam; +import com.gxwebsoft.common.core.web.PageParam; +import com.gxwebsoft.common.core.web.PageResult; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 商家套餐可使用的商品Service实现 + * + * @author 科技小王子 + * @since 2024-11-20 01:55:04 + */ +@Service +public class MerchantPackageGoodsServiceImpl extends ServiceImpl implements MerchantPackageGoodsService { + + @Override + public PageResult pageRel(MerchantPackageGoodsParam param) { + PageParam page = new PageParam<>(param); + page.setDefaultOrder("sort_number asc, create_time desc"); + List list = baseMapper.selectPageRel(page, param); + return new PageResult<>(list, page.getTotal()); + } + + @Override + public List listRel(MerchantPackageGoodsParam param) { + List list = baseMapper.selectListRel(param); + // 排序 + PageParam page = new PageParam<>(); + page.setDefaultOrder("sort_number asc, create_time desc"); + return page.sortRecords(list); + } + + @Override + public MerchantPackageGoods getByIdRel(Integer id) { + MerchantPackageGoodsParam param = new MerchantPackageGoodsParam(); + param.setId(id); + return param.getOne(baseMapper.selectListRel(param)); + } + + @Override + public List listByPackage(Integer packageId) { + return list( + new LambdaQueryWrapper() + .eq(MerchantPackageGoods::getPackageId, packageId) + ); + } + +} diff --git a/src/main/java/com/gxwebsoft/shop/service/impl/MerchantServiceImpl.java b/src/main/java/com/gxwebsoft/shop/service/impl/MerchantServiceImpl.java index 034bf97..4bd189c 100644 --- a/src/main/java/com/gxwebsoft/shop/service/impl/MerchantServiceImpl.java +++ b/src/main/java/com/gxwebsoft/shop/service/impl/MerchantServiceImpl.java @@ -1,5 +1,6 @@ package com.gxwebsoft.shop.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.gxwebsoft.shop.entity.MerchantCategory; import com.gxwebsoft.shop.mapper.MerchantMapper; @@ -30,7 +31,7 @@ public class MerchantServiceImpl extends ServiceImpl i @Override public PageResult pageRel(MerchantParam param) { PageParam page = new PageParam<>(param); - page.setDefaultOrder("sort_number asc, create_time desc"); +// page.setDefaultOrder("sort_number asc, create_time desc"); List list = baseMapper.selectPageRel(page, param); for (Merchant merchant : list) { if (param.getWithOrderNum() != null && param.getWithOrderNum()) { @@ -48,7 +49,7 @@ public class MerchantServiceImpl extends ServiceImpl i if (!categoryList.isEmpty()) { categoryIds = categoryList.stream().map(MerchantCategory::getCategoryId).toList(); param.setMerchantCategoryIds(categoryIds); - }else return new ArrayList<>(); + } else return new ArrayList<>(); } List list = baseMapper.selectListRel(param); for (Merchant merchant : list) { @@ -58,7 +59,7 @@ public class MerchantServiceImpl extends ServiceImpl i } // 排序 PageParam page = new PageParam<>(); - page.setDefaultOrder("sort_number asc, create_time desc"); +// page.setDefaultOrder("sort_number asc, create_time desc"); return page.sortRecords(list); } @@ -69,6 +70,24 @@ public class MerchantServiceImpl extends ServiceImpl i return param.getOne(baseMapper.selectListRel(param)); } + + @Override + public Merchant getByIdRel(Integer merchantId, MerchantParam param) { + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("merchant_id", merchantId); + + if (param.getLat() != null) { + String distanceSql = "ACOS(SIN(( " + param.getLat() + " * 3.1415) / 180 ) * SIN((lat * 3.1415) / 180 ) + " + + "COS(( " + param.getLat() + " * 3.1415) / 180) * COS((lat * 3.1415) / 180 ) * COS(( " + param.getLng() + " * 3.1415) / 180 - " + + "(lng * 3.1415) / 180 ) ) * 6380" + + " as distance"; + wrapper.select("*", distanceSql); + }else wrapper.select("*"); + wrapper.last("limit 1"); + return getOne(wrapper); + } + + @Override public Merchant getByUserId(Integer userId) { MerchantParam param = new MerchantParam(); @@ -76,4 +95,19 @@ public class MerchantServiceImpl extends ServiceImpl i return param.getOne(baseMapper.selectListRel(param)); } + @Override + public List listByDistance(String lat, String lng, String shopType) { + String distanceSql = "ACOS(SIN(( " + lat + " * 3.1415) / 180 ) * SIN((lat * 3.1415) / 180 ) + " + + "COS(( " + lat + " * 3.1415) / 180) * COS((lat * 3.1415) / 180 ) * COS(( " + lng + " * 3.1415) / 180 - " + + "(lng * 3.1415) / 180 ) ) * 6380" + + " as distance"; + return list( + new QueryWrapper() + .select("*", distanceSql) + .eq("shop_type", shopType) + .eq("deleted", 0) + .orderByDesc("distance") + ); + } + } diff --git a/src/main/java/com/gxwebsoft/shop/service/impl/MessageServiceImpl.java b/src/main/java/com/gxwebsoft/shop/service/impl/MessageServiceImpl.java new file mode 100644 index 0000000..e1b5559 --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/service/impl/MessageServiceImpl.java @@ -0,0 +1,57 @@ +package com.gxwebsoft.shop.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.gxwebsoft.shop.mapper.MessageMapper; +import com.gxwebsoft.shop.service.MessageService; +import com.gxwebsoft.shop.entity.Message; +import com.gxwebsoft.shop.param.MessageParam; +import com.gxwebsoft.common.core.web.PageParam; +import com.gxwebsoft.common.core.web.PageResult; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * Service实现 + * + * @author 科技小王子 + * @since 2024-11-18 22:03:11 + */ +@Service +public class MessageServiceImpl extends ServiceImpl implements MessageService { + + @Override + public PageResult pageRel(MessageParam param) { + PageParam page = new PageParam<>(param); + page.setDefaultOrder("sort_number asc, create_time desc"); + List list = baseMapper.selectPageRel(page, param); + return new PageResult<>(list, page.getTotal()); + } + + @Override + public List listRel(MessageParam param) { + List list = baseMapper.selectListRel(param); + // 排序 + PageParam page = new PageParam<>(); + page.setDefaultOrder("create_time desc"); + return page.sortRecords(list); + } + + @Override + public Message getByIdRel(Integer id) { + MessageParam param = new MessageParam(); + param.setId(id); + return param.getOne(baseMapper.selectListRel(param)); + } + + @Override + public Integer unreadNum(Integer userId) { + return count( + new LambdaQueryWrapper() + .eq(Message::getUserId, userId) + .eq(Message::getHasRead, 0) + ); + } + +} diff --git a/src/main/java/com/gxwebsoft/shop/service/impl/OrderDeliveryServiceImpl.java b/src/main/java/com/gxwebsoft/shop/service/impl/OrderDeliveryServiceImpl.java index b014647..53594f8 100644 --- a/src/main/java/com/gxwebsoft/shop/service/impl/OrderDeliveryServiceImpl.java +++ b/src/main/java/com/gxwebsoft/shop/service/impl/OrderDeliveryServiceImpl.java @@ -1,16 +1,40 @@ package com.gxwebsoft.shop.service.impl; +import cn.binarywang.wx.miniapp.api.WxMaOrderShippingService; +import cn.binarywang.wx.miniapp.api.WxMaService; +import cn.binarywang.wx.miniapp.api.impl.WxMaOrderShippingServiceImpl; +import cn.binarywang.wx.miniapp.bean.shop.request.shipping.*; +import cn.binarywang.wx.miniapp.bean.shop.response.WxMaOrderShippingInfoBaseResponse; +import cn.hutool.core.date.DatePattern; +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.gxwebsoft.common.core.utils.JSONUtil; +import com.gxwebsoft.common.system.entity.User; +import com.gxwebsoft.shop.controller.WeChatController; +import com.gxwebsoft.shop.entity.*; import com.gxwebsoft.shop.mapper.OrderDeliveryMapper; +import com.gxwebsoft.shop.service.ExpressService; +import com.gxwebsoft.shop.service.KuaiDi100; import com.gxwebsoft.shop.service.OrderDeliveryService; -import com.gxwebsoft.shop.entity.OrderDelivery; import com.gxwebsoft.shop.param.OrderDeliveryParam; import com.gxwebsoft.common.core.web.PageParam; import com.gxwebsoft.common.core.web.PageResult; +import com.gxwebsoft.shop.service.OrderService; +import com.kuaidi100.sdk.pojo.HttpResult; +import com.kuaidi100.sdk.request.BOrderReq; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; + +import static com.gxwebsoft.shop.consts.OrderPayType.PAY_TYPE_FRIEND; +import static com.gxwebsoft.shop.consts.OrderPayType.PAY_TYPE_WECHAT; /** * 发货单Service实现 @@ -20,6 +44,14 @@ import java.util.List; */ @Service public class OrderDeliveryServiceImpl extends ServiceImpl implements OrderDeliveryService { + @Resource + private KuaiDi100 kuaiDi100; + @Resource + private ExpressService expressService; + @Resource + private OrderService orderService; + @Autowired + private WeChatController weChatController; @Override public PageResult pageRel(OrderDeliveryParam param) { @@ -55,4 +87,90 @@ public class OrderDeliveryServiceImpl extends ServiceImpl setExpress(User user, OrderDelivery orderDelivery, Merchant merchant, Order order, List orderGoodsList) throws Exception { + Express express = expressService.getByIdRel(orderDelivery.getExpressId()); + BOrderReq bOrderReq = new BOrderReq(); + bOrderReq.setKuaidicom(express.getKuaidi100Code()); + bOrderReq.setSendManName(merchant.getMerchantName()); + bOrderReq.setSendManMobile(merchant.getPhone()); + bOrderReq.setSendManPrintAddr(merchant.getProvince() + merchant.getCity() + merchant.getRegion() + merchant.getAddress()); + bOrderReq.setRecManName(order.getRealName()); + bOrderReq.setRecManMobile(order.getPhone()); + bOrderReq.setRecManPrintAddr(order.getAddress()); + bOrderReq.setCallBackUrl("https://modules.gxwebsoft.com/api/shop/order-delivery/notify"); + HttpResult res = kuaiDi100.border(bOrderReq); + if (res.getStatus() != 200) return new HashMap<>() {{ + put("res", false); + put("msg", "快递100接口异常"); + }}; + KuaiDi100Resp kuaiDi100Resp = JSONUtil.parseObject(res.getBody(), KuaiDi100Resp.class); + if (kuaiDi100Resp == null) return new HashMap<>() {{ + put("res", false); + put("msg", "快递100接口异常"); + }}; + + if (!kuaiDi100Resp.getResult()) + return new HashMap<>() {{ + put("res", false); + put("msg", kuaiDi100Resp.getMessage()); + }}; + Map bOrderData = (Map) kuaiDi100Resp.getData(); + orderDelivery.setExpressNo((String) bOrderData.get("kuaidinum")); + if (save(orderDelivery)) { + order.setExpressMerchantId(merchant.getMerchantId()); + order.setExpressMerchantName(merchant.getMerchantName()); + order.setDeliveryStatus(20); + order.setDeliveryTime(DateUtil.date()); + orderService.updateById(order); + + if (order.getPayType().equals(PAY_TYPE_WECHAT) || (order.getPayType().equals(PAY_TYPE_FRIEND) && order.getFriendPayType().equals(PAY_TYPE_WECHAT))) { + // 上传小程序发货信息 + WxMaOrderShippingInfoUploadRequest uploadRequest = new WxMaOrderShippingInfoUploadRequest(); + uploadRequest.setLogisticsType(1); + uploadRequest.setDeliveryMode(1); + + OrderKeyBean orderKeyBean = new OrderKeyBean(); + orderKeyBean.setOrderNumberType(2); + orderKeyBean.setTransactionId(order.getTransactionId()); + uploadRequest.setOrderKey(orderKeyBean); + + uploadRequest.setOrderKey(orderKeyBean); + + List shippingList = new ArrayList<>(); + ShippingListBean shippingListBean = new ShippingListBean(); + shippingListBean.setTrackingNo((String) bOrderData.get("kuaidinum")); + shippingListBean.setExpressCompany(express.getWxCode()); + ContactBean contactBean = new ContactBean(); + contactBean.setReceiverContact(user.getMobile()); + shippingListBean.setContact(contactBean); + shippingList.add(shippingListBean); + uploadRequest.setShippingList(shippingList); + + String itemDesc = orderGoodsList.get(0).getGoods().getGoodsName(); + if (orderGoodsList.size() > 1) itemDesc += "等" + orderGoodsList.size() + "件商品"; + shippingListBean.setItemDesc(itemDesc); + + uploadRequest.setUploadTime(new DateTime().toString(DatePattern.UTC_WITH_ZONE_OFFSET_PATTERN)); + + PayerBean payerBean = new PayerBean(); + + payerBean.setOpenid(user.getOpenid()); + uploadRequest.setPayer(payerBean); + + WxMaService wxMaService = weChatController.wxMaService(); + WxMaOrderShippingService wxMaOrderShippingService = new WxMaOrderShippingServiceImpl(wxMaService); + WxMaOrderShippingInfoBaseResponse response = wxMaOrderShippingService.upload(uploadRequest); + System.out.println("response" + response); + } + return new HashMap<>() {{ + put("res", true); + put("msg", "操作成功"); + }}; + } + return new HashMap<>() {{ + put("res", false); + put("msg", "未知错误"); + }}; + } } diff --git a/src/main/java/com/gxwebsoft/shop/service/impl/OrderGoodsServiceImpl.java b/src/main/java/com/gxwebsoft/shop/service/impl/OrderGoodsServiceImpl.java index 535fc53..46bab38 100644 --- a/src/main/java/com/gxwebsoft/shop/service/impl/OrderGoodsServiceImpl.java +++ b/src/main/java/com/gxwebsoft/shop/service/impl/OrderGoodsServiceImpl.java @@ -59,6 +59,21 @@ public class OrderGoodsServiceImpl extends ServiceImpl listByGoodsList(List goodsIds) { + List list = list( + new LambdaQueryWrapper() + .in(OrderGoods::getGoodsId, goodsIds) + ); + List goodsList = goodsService.listByIds(list.stream().map(OrderGoods::getGoodsId).toList()); + for (OrderGoods orderGoods : list) { + for (Goods goods : goodsList) { + if (orderGoods.getGoodsId().equals(goods.getGoodsId())) orderGoods.setGoods(goods); + } + } + return list; + } + @Override public OrderGoods getByIdRel(Integer id) { OrderGoodsParam param = new OrderGoodsParam(); diff --git a/src/main/java/com/gxwebsoft/shop/service/impl/OrderServiceImpl.java b/src/main/java/com/gxwebsoft/shop/service/impl/OrderServiceImpl.java index c6a5e84..ce7fa84 100644 --- a/src/main/java/com/gxwebsoft/shop/service/impl/OrderServiceImpl.java +++ b/src/main/java/com/gxwebsoft/shop/service/impl/OrderServiceImpl.java @@ -17,7 +17,9 @@ import com.gxwebsoft.common.core.utils.RequestUtil; import com.gxwebsoft.common.core.web.ApiResult; import com.gxwebsoft.common.core.web.PageParam; import com.gxwebsoft.common.core.web.PageResult; +import com.gxwebsoft.common.system.entity.Area; import com.gxwebsoft.common.system.entity.User; +import com.gxwebsoft.common.system.service.AreaService; import com.gxwebsoft.shop.consts.BalanceScene; import com.gxwebsoft.shop.entity.*; import com.gxwebsoft.shop.mapper.OrderMapper; @@ -31,6 +33,7 @@ import com.wechat.pay.java.service.payments.jsapi.model.Amount; import com.wechat.pay.java.service.payments.jsapi.model.Payer; import com.wechat.pay.java.service.payments.jsapi.model.PrepayRequest; import com.wechat.pay.java.service.payments.jsapi.model.PrepayWithRequestPaymentResponse; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -86,7 +89,18 @@ public class OrderServiceImpl extends ServiceImpl implements private UserBalanceLogService userBalanceLogService; @Resource private DealerCapitalService dealerCapitalService; - + @Resource + private GoodsSkuService goodsSkuService; + @Resource + private AreaService areaService; + @Resource + private CommissionRoleService commissionRoleService; + @Resource + private UserCommissionRoleService userCommissionRoleService; + @Resource + private GoodsRoleCommissionService goodsRoleCommissionService; + @Resource + private DealerOrderService dealerOrderService; // public static String privateKeyPath = "/Users/gxwebsoft/JAVA/com.gxwebsoft.modules/src/main/resources/cert/apiclient_key.pem"; // public static String privateCertPath = "/Users/gxwebsoft/JAVA/com.gxwebsoft.core/src/main/resources/cert/apiclient_cert.pem"; @@ -136,14 +150,22 @@ public class OrderServiceImpl extends ServiceImpl implements for (OrderGoods orderGoods : orderGoodsList) { Goods goods = goodsService.getById(orderGoods.getGoodsId()); if (goods != null) { + BigDecimal originPrice = goods.getPrice(); + goods.setPrice(goods.getSalePrice()); if (param.getLoginUser() != null) { - // 经销商 - if (param.getLoginUser().getGradeId().equals(33)) { - if (goods.getDealerGift()) goods.setShowGift(true); - } - // 会员店 - if (param.getLoginUser().getGradeId().equals(31)) { + User parentUser = requestUtil.getParent(param.getLoginUser().getUserId()); + if (parentUser != null) { if (goods.getPriceGift()) goods.setShowGift(true); +// goods.setPrice(originPrice); + } + // 经销商 +// if (param.getLoginUser().getGradeId().equals(33)) { +// if (goods.getDealerGift()) goods.setShowGift(true); +// } + // 会员店 + if (param.getLoginUser().getGradeId() > 30 && goods.getBuyingPriceOpen().equals(1)) { + goods.setPrice(goods.getBuyingPrice()); +// if (goods.getPriceGift()) goods.setShowGift(true); } } } @@ -185,6 +207,9 @@ public class OrderServiceImpl extends ServiceImpl implements // 排序 PageParam page = new PageParam<>(); page.setDefaultOrder("sort_number asc, create_time desc"); + for (Order order : list) { + order.setGoodsList(orderGoodsService.listByOrderId(order.getOrderId())); + } return page.sortRecords(list); } @@ -277,13 +302,13 @@ public class OrderServiceImpl extends ServiceImpl implements request.setPayer(payer); // 测试环境 if (active.equals("dev")) { - amount.setTotal(1); + amount.setTotal(money); request.setAmount(amount); request.setNotifyUrl("http://jimei-api.natapp1.cc/api/shop/wx-pay/notify/" + order.getTenantId()); // 默认回调地址 } // 生成环境 if (active.equals("prod")) { - amount.setTotal(2); + amount.setTotal(money); request.setAmount(amount); request.setNotifyUrl("https://server.gxwebsoft.com/api/system/wx-pay/notify/" + order.getTenantId()); // 默认回调地址 } @@ -384,43 +409,53 @@ public class OrderServiceImpl extends ServiceImpl implements // 上级收入 System.out.println("parentUser = " + (parentUser != null)); if (parentUser != null) { + + // User parentUser = requestUtil.getUserByPhone(parentRes); Merchant parentMerchant = merchantService.getByUserId(parentUser.getUserId()); - System.out.println("parentMerchant = " + (parentMerchant != null)); +// System.out.println("parentMerchant = " + (parentMerchant != null)); if (parentMerchant != null) { + BigDecimal parentCommissionTotal = BigDecimal.ZERO; for (OrderGoods orderGoods : orderGoodsList) { Goods goods = orderGoods.getGoods(); - System.out.println("goods = " + (goods != null)); +// System.out.println("goods = " + (goods != null)); + BigDecimal incomeTotal = BigDecimal.ZERO; if (goods != null) { // 有单独设置优先使用 - BigDecimal parentCommission = null; - switch (parentMerchant.getShopType()) { - case "会员店" -> parentCommission = goods.getMemberStoreCommission(); - case "供应商" -> parentCommission = goods.getSupplierCommission(); - case "合作伙伴" -> parentCommission = goods.getCoopCommission(); + BigDecimal parentCommission = goods.getMemberStoreCommission(); + if (orderGoods.getSpec() != null && !orderGoods.getSpec().isEmpty()) { + GoodsSku sku = goodsSkuService.getBySku(goods.getGoodsId(), orderGoods.getSpec()); + parentCommission = sku.getMemberStoreCommission(); } - System.out.println("parentCommission = " + (parentCommission != null)); - if (parentCommission != null) { - BigDecimal incomeTotal = parentCommission.multiply(BigDecimal.valueOf(orderGoods.getTotalNum())); +// switch (parentMerchant.getShopType()) { +// case "会员店" -> parentCommission = goods.getMemberStoreCommission(); +// case "供应商" -> parentCommission = goods.getSupplierCommission(); +// case "合作伙伴" -> parentCommission = goods.getCoopCommission(); +// } +// System.out.println("parentCommission = " + (parentCommission != null)); + if (parentCommission != null && parentCommission.compareTo(BigDecimal.ZERO) > 0) { + incomeTotal = parentCommission.multiply(BigDecimal.valueOf(orderGoods.getTotalNum())); BigDecimal newBalance = parentUser.getBalance().add(incomeTotal); // parentUser.setBalance(newBalance); // requestUtil.updateUserBalanceWithoutLogin(parentUser); + BigDecimal finalIncomeTotal = incomeTotal; userBalanceLogService.save(new UserBalanceLog() {{ setUserId(parentUser.getUserId()); setScene(BalanceScene.BALANCE_SCENE_DIRECT_INCOME); - setMoney(incomeTotal); + setMoney(finalIncomeTotal); setBalance(newBalance); setMerchantId(parentMerchant.getMerchantId()); setMerchantCode(parentMerchant.getMerchantCode()); setOrderId(order.getOrderId()); setTenantId(getTenantId()); }}); + BigDecimal finalIncomeTotal1 = incomeTotal; dealerCapitalService.save(new DealerCapital() {{ setUserId(parentUser.getUserId()); setFlowType(10); - setMoney(incomeTotal); + setMoney(finalIncomeTotal1); setOrderId(order.getOrderId()); - setDescribe("发展佣金收入"); + setDescribe("发展会员收益"); setTenantId(getTenantId()); }}); } else { @@ -429,14 +464,15 @@ public class OrderServiceImpl extends ServiceImpl implements if (goodsIncomeConfig != null) { BigDecimal rate = goodsIncomeConfig.getRate().divide(BigDecimal.valueOf(100), 4, RoundingMode.HALF_UP); BigDecimal amountTotal = orderGoods.getPrice().multiply(BigDecimal.valueOf(orderGoods.getTotalNum())); - BigDecimal incomeTotal = amountTotal.multiply(rate).multiply(BigDecimal.valueOf(orderGoods.getTotalNum())); + incomeTotal = amountTotal.multiply(rate).multiply(BigDecimal.valueOf(orderGoods.getTotalNum())); BigDecimal newBalance = parentUser.getBalance().add(incomeTotal); // parentUser.setBalance(newBalance); // requestUtil.updateUserBalanceWithoutLogin(parentUser); + BigDecimal finalIncomeTotal2 = incomeTotal; userBalanceLogService.save(new UserBalanceLog() {{ setUserId(parentUser.getUserId()); setScene(BalanceScene.BALANCE_SCENE_DIRECT_INCOME); - setMoney(incomeTotal); + setMoney(finalIncomeTotal2); setBalance(newBalance); setMerchantId(parentMerchant.getMerchantId()); setMerchantCode(parentMerchant.getMerchantCode()); @@ -446,15 +482,24 @@ public class OrderServiceImpl extends ServiceImpl implements dealerCapitalService.save(new DealerCapital() {{ setUserId(parentUser.getUserId()); setFlowType(10); - setMoney(incomeTotal); + setMoney(finalIncomeTotal2); setOrderId(order.getOrderId()); - setDescribe("直推佣金收入"); + setDescribe("发展会员收益"); setTenantId(getTenantId()); }}); } } + parentCommissionTotal = parentCommissionTotal.add(incomeTotal); } } + // 分销订单 + DealerOrder dealerOrder = new DealerOrder(); + dealerOrder.setOrderId(order.getOrderId()); + dealerOrder.setUserId(order.getUserId()); + dealerOrder.setFirstUserId(parentUser.getUserId()); + dealerOrder.setOrderPrice(order.getTotalPrice()); + dealerOrder.setFirstMoney(parentCommissionTotal); + dealerOrderService.save(dealerOrder); } } // 供应商收入 @@ -465,7 +510,12 @@ public class OrderServiceImpl extends ServiceImpl implements if (supplier != null) { User supplierUser = requestUtil.getByUserIdWithoutLogin(supplier.getUserId()); if (supplierUser != null) { - BigDecimal incomeTotal = goods.getBuyingPrice().multiply(BigDecimal.valueOf(orderGoods.getTotalNum())); + BigDecimal chainStorePrice = goods.getChainStorePrice(); + if (orderGoods.getSpec() != null && !orderGoods.getSpec().isEmpty()) { + GoodsSku sku = goodsSkuService.getBySku(goods.getGoodsId(), orderGoods.getSpec()); + chainStorePrice = sku.getChainStorePrice(); + } + BigDecimal incomeTotal = chainStorePrice.multiply(BigDecimal.valueOf(orderGoods.getTotalNum())); BigDecimal newBalance = supplierUser.getBalance().add(incomeTotal); // supplierUser.setBalance(newBalance); // requestUtil.updateUserBalanceWithoutLogin(supplierUser); @@ -498,42 +548,47 @@ public class OrderServiceImpl extends ServiceImpl implements System.out.println("merchant = " + (merchant != null)); if (merchant != null) { - BigDecimal diffAmountTotal = BigDecimal.ZERO; +// BigDecimal diffAmountTotal = BigDecimal.ZERO; BigDecimal buyAmountTotal = BigDecimal.ZERO; User merchantUser = requestUtil.getByUserIdWithoutLogin(merchant.getUserId()); for (OrderGoods orderGoods : orderGoodsList) { Goods goods = orderGoods.getGoods(); if (goods != null) { - BigDecimal merchantAmount = BigDecimal.ZERO; - BigDecimal rate = BigDecimal.ZERO; - switch (merchant.getShopType()) { - case "会员店": { - merchantAmount = goods.getMemberStorePrice(); - rate = goods.getMemberStoreRate().divide(BigDecimal.valueOf(100), 4, RoundingMode.HALF_UP); - } - break; - case "实体连锁店": { - merchantAmount = goods.getChainStorePrice(); - rate = goods.getChainStoreRate().divide(BigDecimal.valueOf(100), 4, RoundingMode.HALF_UP); - } - break; - case "会员超市": { - merchantAmount = goods.getMemberMarketPrice(); - rate = goods.getMemberMarketRate().divide(BigDecimal.valueOf(100), 4, RoundingMode.HALF_UP); - } - break; - } - BigDecimal amountDiff = orderGoods.getPrice().subtract(merchantAmount); - buyAmountTotal = buyAmountTotal.add(merchantAmount.multiply(BigDecimal.valueOf(orderGoods.getTotalNum()))); - if (amountDiff.compareTo(BigDecimal.ZERO) > 0) { - diffAmountTotal = diffAmountTotal.add(amountDiff.multiply(BigDecimal.valueOf(orderGoods.getTotalNum()))); - diffAmountTotal = diffAmountTotal.multiply(rate); + BigDecimal merchantAmount = goods.getSupplierCommission(); + if (orderGoods.getSpec() != null && !orderGoods.getSpec().isEmpty()) { + GoodsSku sku = goodsSkuService.getBySku(goods.getGoodsId(), orderGoods.getSpec()); + merchantAmount = sku.getSupplierCommission(); } +// BigDecimal rate = BigDecimal.ZERO; +// switch (merchant.getShopType()) { +// case "会员店": { +// merchantAmount = goods.getMemberStorePrice(); +// rate = goods.getMemberStoreRate().divide(BigDecimal.valueOf(100), 4, RoundingMode.HALF_UP); +// } +// break; +// case "实体连锁店": { +// merchantAmount = goods.getChainStorePrice(); +// rate = goods.getChainStoreRate().divide(BigDecimal.valueOf(100), 4, RoundingMode.HALF_UP); +// } +// break; +// case "会员超市": { +// merchantAmount = goods.getMemberMarketPrice(); +// rate = goods.getMemberMarketRate().divide(BigDecimal.valueOf(100), 4, RoundingMode.HALF_UP); +// } +// break; +// } +// BigDecimal amountDiff = orderGoods.getPrice().subtract(merchantAmount); +// buyAmountTotal = buyAmountTotal.add(merchantAmount.multiply(BigDecimal.valueOf(orderGoods.getTotalNum()))); +// if (amountDiff.compareTo(BigDecimal.ZERO) > 0) { +// diffAmountTotal = diffAmountTotal.add(amountDiff.multiply(BigDecimal.valueOf(orderGoods.getTotalNum()))); +// diffAmountTotal = diffAmountTotal.multiply(rate); +// } + buyAmountTotal = buyAmountTotal.add(merchantAmount); } } - System.out.println("diffAmountTotal = " + diffAmountTotal); - System.out.println("buyAmountTotal = " + buyAmountTotal); - BigDecimal incomeTotal = diffAmountTotal.add(buyAmountTotal); +// System.out.println("diffAmountTotal = " + diffAmountTotal); +// System.out.println("buyAmountTotal = " + buyAmountTotal); + BigDecimal incomeTotal = buyAmountTotal; if (incomeTotal.compareTo(BigDecimal.ZERO) > 0) { BigDecimal newBalance = merchantUser.getBalance().add(incomeTotal); // merchantUser.setBalance(newBalance); @@ -554,7 +609,7 @@ public class OrderServiceImpl extends ServiceImpl implements setFlowType(10); setMoney(incomeTotal); setOrderId(order.getOrderId()); - setDescribe("发货门店/提货门店收入"); + setDescribe("仓储管理收益收入"); setTenantId(getTenantId()); }}); } @@ -590,6 +645,69 @@ public class OrderServiceImpl extends ServiceImpl implements }}); } } + // 分红 + for (OrderGoods orderGoods : orderGoodsList) { + Goods goods = orderGoods.getGoods(); + if (goods.getCommissionRole().equals(1)) { + int provinceId = 0, cityId = 0, regionId = 0; + if (order.getDeliveryType().equals(0)) { + provinceId = order.getProvinceId(); + cityId = order.getCityId(); + regionId = order.getRegionId(); + } else { + Merchant merchant = merchantService.getById(order.getSelfTakeMerchantId()); + Area province = areaService.areaInfoByName(merchant.getProvince(), 1); + Area city = areaService.areaInfoByName(merchant.getCity(), 2); + Area region = areaService.areaInfoByName(merchant.getRegion(), 3); + provinceId = province.getId(); + cityId = city.getId(); + regionId = region.getId(); + } + if (provinceId != 0) { + List commissionRoleList = commissionRoleService.listByProvinceId(provinceId); + if (!commissionRoleList.isEmpty()) { + for (CommissionRole commissionRole : commissionRoleList) { + List userCommissionRoleList = userCommissionRoleService.listByMap( + new HashMap<>(){{ + put("role_id", commissionRole.getId()); + }} + ); + BigDecimal avgAmount = BigDecimal.ZERO; + GoodsRoleCommission goodsRoleCommission = goodsRoleCommissionService.getByRoleNGoods(commissionRole.getId(), goods.getGoodsId()); + if (goodsRoleCommission != null) { + avgAmount = goodsRoleCommission.getAmount().divide(BigDecimal.valueOf(userCommissionRoleList.size()), RoundingMode.HALF_UP) + .setScale(2, RoundingMode.HALF_UP); + } + if (avgAmount.compareTo(BigDecimal.ZERO) > 0) { + for (UserCommissionRole userCommissionRole : userCommissionRoleList) { + User merchantUser = requestUtil.getByUserIdWithoutLogin(userCommissionRole.getUserId()); + BigDecimal newBalance = merchantUser.getBalance().add(avgAmount); + BigDecimal finalAvgAmount = avgAmount; + userBalanceLogService.save(new UserBalanceLog() {{ + setUserId(merchantUser.getUserId()); + setScene(BalanceScene.BALANCE_SCENE_OUT_TAKE); + setMoney(finalAvgAmount); + setBalance(newBalance); +// setMerchantId(merchantUser.getMerchantId()); +// setMerchantCode(merchant.getMerchantCode()); + setOrderId(order.getOrderId()); + setTenantId(getTenantId()); + }}); + dealerCapitalService.save(new DealerCapital() {{ + setUserId(merchantUser.getUserId()); + setFlowType(10); + setMoney(finalAvgAmount); + setOrderId(order.getOrderId()); + setDescribe(commissionRole.getTitle() + "分红收入"); + setTenantId(getTenantId()); + }}); + } + } + } + } + } + } + } } /*** diff --git a/src/main/java/com/gxwebsoft/shop/service/impl/UserAddressServiceImpl.java b/src/main/java/com/gxwebsoft/shop/service/impl/UserAddressServiceImpl.java index 309f053..71357cd 100644 --- a/src/main/java/com/gxwebsoft/shop/service/impl/UserAddressServiceImpl.java +++ b/src/main/java/com/gxwebsoft/shop/service/impl/UserAddressServiceImpl.java @@ -54,4 +54,14 @@ public class UserAddressServiceImpl extends ServiceImpl() + .eq(UserAddress::getUserId, userId) + .eq(UserAddress::getIsDefault, 1) + .last("limit 1") + ); + } } diff --git a/src/main/java/com/gxwebsoft/shop/service/impl/UserBalanceInMerchantServiceImpl.java b/src/main/java/com/gxwebsoft/shop/service/impl/UserBalanceInMerchantServiceImpl.java new file mode 100644 index 0000000..a758935 --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/service/impl/UserBalanceInMerchantServiceImpl.java @@ -0,0 +1,58 @@ +package com.gxwebsoft.shop.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.gxwebsoft.shop.mapper.UserBalanceInMerchantMapper; +import com.gxwebsoft.shop.service.UserBalanceInMerchantService; +import com.gxwebsoft.shop.entity.UserBalanceInMerchant; +import com.gxwebsoft.shop.param.UserBalanceInMerchantParam; +import com.gxwebsoft.common.core.web.PageParam; +import com.gxwebsoft.common.core.web.PageResult; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 用户在商家中的余额Service实现 + * + * @author 科技小王子 + * @since 2024-11-20 01:55:04 + */ +@Service +public class UserBalanceInMerchantServiceImpl extends ServiceImpl implements UserBalanceInMerchantService { + + @Override + public PageResult pageRel(UserBalanceInMerchantParam param) { + PageParam page = new PageParam<>(param); + page.setDefaultOrder("sort_number asc, create_time desc"); + List list = baseMapper.selectPageRel(page, param); + return new PageResult<>(list, page.getTotal()); + } + + @Override + public List listRel(UserBalanceInMerchantParam param) { + List list = baseMapper.selectListRel(param); + // 排序 + PageParam page = new PageParam<>(); + page.setDefaultOrder("sort_number asc, create_time desc"); + return page.sortRecords(list); + } + + @Override + public UserBalanceInMerchant getByIdRel(Integer id) { + UserBalanceInMerchantParam param = new UserBalanceInMerchantParam(); + param.setId(id); + return param.getOne(baseMapper.selectListRel(param)); + } + + @Override + public UserBalanceInMerchant getBalance(Integer merchantId, Integer userId) { + return getOne( + new LambdaQueryWrapper() + .eq(UserBalanceInMerchant::getMerchantId, merchantId) + .eq(UserBalanceInMerchant::getUserId, userId) + .last("limit 1") + ); + } + +} diff --git a/src/main/java/com/gxwebsoft/shop/service/impl/UserCommissionRoleServiceImpl.java b/src/main/java/com/gxwebsoft/shop/service/impl/UserCommissionRoleServiceImpl.java new file mode 100644 index 0000000..bd857aa --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/service/impl/UserCommissionRoleServiceImpl.java @@ -0,0 +1,55 @@ +package com.gxwebsoft.shop.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.gxwebsoft.shop.mapper.UserCommissionRoleMapper; +import com.gxwebsoft.shop.service.UserCommissionRoleService; +import com.gxwebsoft.shop.entity.UserCommissionRole; +import com.gxwebsoft.shop.param.UserCommissionRoleParam; +import com.gxwebsoft.common.core.web.PageParam; +import com.gxwebsoft.common.core.web.PageResult; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 用户绑定分红角色Service实现 + * + * @author 科技小王子 + * @since 2024-12-02 12:43:40 + */ +@Service +public class UserCommissionRoleServiceImpl extends ServiceImpl implements UserCommissionRoleService { + + @Override + public PageResult pageRel(UserCommissionRoleParam param) { + PageParam page = new PageParam<>(param); + page.setDefaultOrder("sort_number asc, create_time desc"); + List list = baseMapper.selectPageRel(page, param); + return new PageResult<>(list, page.getTotal()); + } + + @Override + public List listRel(UserCommissionRoleParam param) { + List list = baseMapper.selectListRel(param); + // 排序 + PageParam page = new PageParam<>(); + return page.sortRecords(list); + } + + @Override + public UserCommissionRole getByIdRel(Integer id) { + UserCommissionRoleParam param = new UserCommissionRoleParam(); + param.setId(id); + return param.getOne(baseMapper.selectListRel(param)); + } + + @Override + public List listByRoleIds(List roleIds) { + return list( + new LambdaQueryWrapper() + .in(UserCommissionRole::getRoleId, roleIds) + ); + } + +} diff --git a/src/main/java/com/gxwebsoft/shop/service/impl/UserGoodsInMerchantServiceImpl.java b/src/main/java/com/gxwebsoft/shop/service/impl/UserGoodsInMerchantServiceImpl.java new file mode 100644 index 0000000..a08a089 --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/service/impl/UserGoodsInMerchantServiceImpl.java @@ -0,0 +1,57 @@ +package com.gxwebsoft.shop.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.gxwebsoft.shop.mapper.UserGoodsInMerchantMapper; +import com.gxwebsoft.shop.service.UserGoodsInMerchantService; +import com.gxwebsoft.shop.entity.UserGoodsInMerchant; +import com.gxwebsoft.shop.param.UserGoodsInMerchantParam; +import com.gxwebsoft.common.core.web.PageParam; +import com.gxwebsoft.common.core.web.PageResult; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 用户在商家中的代金券Service实现 + * + * @author 科技小王子 + * @since 2024-11-20 01:55:04 + */ +@Service +public class UserGoodsInMerchantServiceImpl extends ServiceImpl implements UserGoodsInMerchantService { + + @Override + public PageResult pageRel(UserGoodsInMerchantParam param) { + PageParam page = new PageParam<>(param); + page.setDefaultOrder("sort_number asc, create_time desc"); + List list = baseMapper.selectPageRel(page, param); + return new PageResult<>(list, page.getTotal()); + } + + @Override + public List listRel(UserGoodsInMerchantParam param) { + List list = baseMapper.selectListRel(param); + // 排序 + PageParam page = new PageParam<>(); + page.setDefaultOrder("sort_number asc, create_time desc"); + return page.sortRecords(list); + } + + @Override + public UserGoodsInMerchant getByIdRel(Integer id) { + UserGoodsInMerchantParam param = new UserGoodsInMerchantParam(); + param.setId(id); + return param.getOne(baseMapper.selectListRel(param)); + } + + @Override + public UserGoodsInMerchant infoInMerchant(Integer packageId, Integer userId){ + return getOne( + new LambdaQueryWrapper() + .eq(UserGoodsInMerchant::getUserId, userId) + .eq(UserGoodsInMerchant::getPackageId, packageId) + .last("limit 1") + ); + } +} diff --git a/src/main/java/com/gxwebsoft/shop/service/impl/ViewHistoryServiceImpl.java b/src/main/java/com/gxwebsoft/shop/service/impl/ViewHistoryServiceImpl.java new file mode 100644 index 0000000..074eb0b --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/service/impl/ViewHistoryServiceImpl.java @@ -0,0 +1,77 @@ +package com.gxwebsoft.shop.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.gxwebsoft.shop.mapper.ViewHistoryMapper; +import com.gxwebsoft.shop.service.GoodsService; +import com.gxwebsoft.shop.service.ViewHistoryService; +import com.gxwebsoft.shop.entity.ViewHistory; +import com.gxwebsoft.shop.param.ViewHistoryParam; +import com.gxwebsoft.common.core.web.PageParam; +import com.gxwebsoft.common.core.web.PageResult; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; + +/** + * 浏览历史Service实现 + * + * @author 科技小王子 + * @since 2024-11-22 22:13:47 + */ +@Service +public class ViewHistoryServiceImpl extends ServiceImpl implements ViewHistoryService { + @Resource + private GoodsService goodsService; + + @Override + public PageResult pageRel(ViewHistoryParam param) { + PageParam page = new PageParam<>(param); + page.setDefaultOrder("sort_number asc, create_time desc"); + List list = baseMapper.selectPageRel(page, param); + return new PageResult<>(list, page.getTotal()); + } + + @Override + public List listRel(ViewHistoryParam param) { + List list = baseMapper.selectListRel(param); + // 排序 + PageParam page = new PageParam<>(); + page.setDefaultOrder("sort_number asc, create_time desc"); + for (ViewHistory viewHistory : list) { + if (viewHistory.getType().equals(0)) { + viewHistory.setGoods(goodsService.getById(viewHistory.getPk())); + } + } + return page.sortRecords(list); + } + + @Override + public ViewHistory getByIdRel(Integer id) { + ViewHistoryParam param = new ViewHistoryParam(); + param.setId(id); + return param.getOne(baseMapper.selectListRel(param)); + } + + @Override + public ViewHistory check(Integer type, Integer pk, Integer userId) { + return getOne( + new LambdaQueryWrapper() + .eq(ViewHistory::getType, type) + .eq(ViewHistory::getPk, pk) + .eq(ViewHistory::getUserId, userId) + ); + } + + @Override + public ViewHistory check(Integer type, Integer pk, String openId) { + return getOne( + new LambdaQueryWrapper() + .eq(ViewHistory::getType, type) + .eq(ViewHistory::getPk, pk) + .eq(ViewHistory::getOpenId, openId) + ); + } + +} diff --git a/src/main/java/com/gxwebsoft/shop/vo/CartVo.java b/src/main/java/com/gxwebsoft/shop/vo/CartVo.java index 290c293..b60c4b0 100644 --- a/src/main/java/com/gxwebsoft/shop/vo/CartVo.java +++ b/src/main/java/com/gxwebsoft/shop/vo/CartVo.java @@ -25,6 +25,9 @@ public class CartVo implements Serializable { @ApiModelProperty(value = "购物车总金额") private BigDecimal totalPrice; + @ApiModelProperty(value = "配送费") + private BigDecimal expressAmount; + @ApiModelProperty(value = "宝贝数量") private Long totalNums; diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 1c0444e..9de9050 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -4,8 +4,8 @@ server: # 多环境配置 spring: profiles: - active: dev -# active: prod +# active: dev + active: prod application: name: server @@ -107,4 +107,8 @@ wx: - appid: wx309c034f7556aeb1 secret: c8fa9e5ee2edc8c0bbd5f9c38df244ec msgDataFormat: JSON - + mp: + appId: wxd0f70f14b9f3537d + token: nbg3721077212345678 + secret: 5e578c479e9a8107e25aaeef152e5007 + aesKey: RFaIMhezfhwxfm2XtSfhPHydf3xAmJvelrBNidgJjwq diff --git a/src/test/java/com/gxwebsoft/generator/CmsGenerator.java b/src/test/java/com/gxwebsoft/generator/CmsGenerator.java index 06cc09d..15077d8 100644 --- a/src/test/java/com/gxwebsoft/generator/CmsGenerator.java +++ b/src/test/java/com/gxwebsoft/generator/CmsGenerator.java @@ -72,7 +72,7 @@ public class CmsGenerator { // "cms_mp_ad" // "cms_components" // "cms_design_collect", - "cms_design_category" + "cms_follow" }; // 需要去除的表前缀 diff --git a/src/test/java/com/gxwebsoft/generator/ShopGenerator.java b/src/test/java/com/gxwebsoft/generator/ShopGenerator.java index c745cf6..ae8cfaf 100644 --- a/src/test/java/com/gxwebsoft/generator/ShopGenerator.java +++ b/src/test/java/com/gxwebsoft/generator/ShopGenerator.java @@ -93,7 +93,14 @@ public class ShopGenerator { // "shop_order_delivery_goods", // "shop_order_extract" // "shop_splash", - "shop_goods_income_config", +// "shop_express_template", +// "shop_merchant_charge_package", +// "shop_merchant_goods_package", +// "shop_merchant_package_goods", +// "shop_user_balance_in_merchant", + "shop_commission_role", + "shop_goods_role_commission", + "shop_user_commission_role", }; // 需要去除的表前缀 private static final String[] TABLE_PREFIX = new String[]{ diff --git a/websoft-modules.log b/websoft-modules.log index 6b4c041..a3ac2e8 100644 --- a/websoft-modules.log +++ b/websoft-modules.log @@ -1,5 +1,5 @@ -2024-10-25 16:17:24.790 WARN 43101 --- [restartedMain] com.alibaba.druid.pool.DruidDataSource : removeAbandoned is true, not use in production. -2024-10-25 16:17:24.832 ERROR 43101 --- [restartedMain] com.alibaba.druid.pool.DruidDataSource : init datasource error, url: jdbc:mysql://127.0.0.1:3308/nbg?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8 +2024-12-24 18:40:38.352 WARN 22186 --- [restartedMain] com.alibaba.druid.pool.DruidDataSource : removeAbandoned is true, not use in production. +2024-12-24 18:40:38.396 ERROR 22186 --- [restartedMain] com.alibaba.druid.pool.DruidDataSource : init datasource error, url: jdbc:mysql://127.0.0.1:3308/nbg?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8 com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure @@ -129,7 +129,7 @@ Caused by: java.net.ConnectException: Connection refused at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63) ~[mysql-connector-java-8.0.26.jar:8.0.26] ... 97 common frames omitted -2024-10-25 16:17:24.835 ERROR 43101 --- [restartedMain] com.alibaba.druid.pool.DruidDataSource : {dataSource-1} init error +2024-12-24 18:40:38.400 ERROR 22186 --- [restartedMain] com.alibaba.druid.pool.DruidDataSource : {dataSource-1} init error com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure @@ -259,7 +259,7 @@ Caused by: java.net.ConnectException: Connection refused at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63) ~[mysql-connector-java-8.0.26.jar:8.0.26] ... 97 common frames omitted -2024-10-25 16:17:24.837 ERROR 43101 --- [Druid-ConnectionPool-Create-1936810860] com.alibaba.druid.pool.DruidDataSource : create connection SQLException, url: jdbc:mysql://127.0.0.1:3308/nbg?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, errorCode 0, state 08S01 +2024-12-24 18:40:38.402 ERROR 22186 --- [Druid-ConnectionPool-Create-1148760900] com.alibaba.druid.pool.DruidDataSource : create connection SQLException, url: jdbc:mysql://127.0.0.1:3308/nbg?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, errorCode 0, state 08S01 com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure @@ -306,10 +306,10 @@ Caused by: java.net.ConnectException: Connection refused at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63) ~[mysql-connector-java-8.0.26.jar:8.0.26] ... 14 common frames omitted -2024-10-25 16:17:24.837 WARN 43101 --- [restartedMain] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'adController': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'adServiceImpl': Unsatisfied dependency expressed through field 'baseMapper'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'adMapper' defined in file [/Users/liangxin/Project/JAVA/nbg-java/target/classes/com/gxwebsoft/cms/mapper/AdMapper.class]: Unsatisfied dependency expressed through bean property 'sqlSessionFactory'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sqlSessionFactory' defined in class path resource [com/baomidou/mybatisplus/autoconfigure/MybatisPlusAutoConfiguration.class]: Unsatisfied dependency expressed through method 'sqlSessionFactory' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [com/alibaba/druid/spring/boot/autoconfigure/DruidDataSourceAutoConfigure.class]: Invocation of init method failed; nested exception is com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure +2024-12-24 18:40:38.402 WARN 22186 --- [restartedMain] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'adController': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'adServiceImpl': Unsatisfied dependency expressed through field 'baseMapper'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'adMapper' defined in file [/Users/liangxin/Project/JAVA/nbg-java/target/classes/com/gxwebsoft/cms/mapper/AdMapper.class]: Unsatisfied dependency expressed through bean property 'sqlSessionFactory'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sqlSessionFactory' defined in class path resource [com/baomidou/mybatisplus/autoconfigure/MybatisPlusAutoConfiguration.class]: Unsatisfied dependency expressed through method 'sqlSessionFactory' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [com/alibaba/druid/spring/boot/autoconfigure/DruidDataSourceAutoConfigure.class]: Invocation of init method failed; nested exception is com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. -2024-10-25 16:17:24.837 ERROR 43101 --- [Druid-ConnectionPool-Create-1936810860] com.alibaba.druid.pool.DruidDataSource : create connection SQLException, url: jdbc:mysql://127.0.0.1:3308/nbg?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, errorCode 0, state 08S01 +2024-12-24 18:40:38.403 ERROR 22186 --- [Druid-ConnectionPool-Create-1148760900] com.alibaba.druid.pool.DruidDataSource : create connection SQLException, url: jdbc:mysql://127.0.0.1:3308/nbg?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, errorCode 0, state 08S01 com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure @@ -356,7 +356,7 @@ Caused by: java.net.ConnectException: Connection refused at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63) ~[mysql-connector-java-8.0.26.jar:8.0.26] ... 14 common frames omitted -2024-10-25 16:17:24.857 ERROR 43101 --- [restartedMain] o.s.boot.SpringApplication : Application run failed +2024-12-24 18:40:38.427 ERROR 22186 --- [restartedMain] o.s.boot.SpringApplication : Application run failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'adController': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'adServiceImpl': Unsatisfied dependency expressed through field 'baseMapper'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'adMapper' defined in file [/Users/liangxin/Project/JAVA/nbg-java/target/classes/com/gxwebsoft/cms/mapper/AdMapper.class]: Unsatisfied dependency expressed through bean property 'sqlSessionFactory'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sqlSessionFactory' defined in class path resource [com/baomidou/mybatisplus/autoconfigure/MybatisPlusAutoConfiguration.class]: Unsatisfied dependency expressed through method 'sqlSessionFactory' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [com/alibaba/druid/spring/boot/autoconfigure/DruidDataSourceAutoConfigure.class]: Invocation of init method failed; nested exception is com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure @@ -511,7 +511,925 @@ Caused by: java.net.ConnectException: Connection refused at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63) ~[mysql-connector-java-8.0.26.jar:8.0.26] ... 97 common frames omitted -2024-10-25 16:17:25.344 ERROR 43101 --- [Druid-ConnectionPool-Create-1936810860] com.alibaba.druid.pool.DruidDataSource : create connection SQLException, url: jdbc:mysql://127.0.0.1:3308/nbg?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, errorCode 0, state 08S01 +2024-12-24 18:40:38.910 ERROR 22186 --- [Druid-ConnectionPool-Create-1148760900] com.alibaba.druid.pool.DruidDataSource : create connection SQLException, url: jdbc:mysql://127.0.0.1:3308/nbg?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, errorCode 0, state 08S01 + +com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:174) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:828) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:448) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:241) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:198) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:156) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.filter.FilterAdapter.connection_connect(FilterAdapter.java:787) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:150) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.filter.stat.StatFilter.connection_connect(StatFilter.java:227) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:150) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1659) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1723) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:2801) ~[druid-1.2.6.jar:1.2.6] +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:na] + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) ~[na:na] + at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:na] + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) ~[na:na] + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) ~[na:na] + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:61) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:151) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:167) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:89) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.NativeSession.connect(NativeSession.java:119) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:948) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:818) ~[mysql-connector-java-8.0.26.jar:8.0.26] + ... 11 common frames omitted +Caused by: java.net.ConnectException: Connection refused + at java.base/sun.nio.ch.Net.connect0(Native Method) ~[na:na] + at java.base/sun.nio.ch.Net.connect(Net.java:579) ~[na:na] + at java.base/sun.nio.ch.Net.connect(Net.java:568) ~[na:na] + at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:593) ~[na:na] + at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) ~[na:na] + at java.base/java.net.Socket.connect(Socket.java:639) ~[na:na] + at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:156) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63) ~[mysql-connector-java-8.0.26.jar:8.0.26] + ... 14 common frames omitted + +2024-12-24 20:06:37.263 WARN 26108 --- [restartedMain] com.alibaba.druid.pool.DruidDataSource : removeAbandoned is true, not use in production. +2024-12-24 20:06:37.300 ERROR 26108 --- [restartedMain] com.alibaba.druid.pool.DruidDataSource : init datasource error, url: jdbc:mysql://127.0.0.1:3308/nbg?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8 + +com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:174) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:828) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:448) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:241) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:198) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:156) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.filter.FilterAdapter.connection_connect(FilterAdapter.java:787) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:150) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.filter.stat.StatFilter.connection_connect(StatFilter.java:227) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:150) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1659) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1723) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.pool.DruidDataSource.init(DruidDataSource.java:919) ~[druid-1.2.6.jar:1.2.6] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na] + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] + at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1912) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1854) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1782) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:602) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:524) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1380) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1300) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:887) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:541) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1334) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1177) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:564) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:524) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1380) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1300) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireByType(AbstractAutowireCapableBeanFactory.java:1501) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1399) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:601) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:524) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1380) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1300) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:657) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:640) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1413) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:601) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:524) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1380) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1300) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:521) ~[spring-context-5.3.9.jar:5.3.9] + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:497) ~[spring-context-5.3.9.jar:5.3.9] + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:650) ~[spring-context-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:228) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:318) ~[spring-context-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1413) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:601) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:524) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:944) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918) ~[spring-context-5.3.9.jar:5.3.9] + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583) ~[spring-context-5.3.9.jar:5.3.9] + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:145) ~[spring-boot-2.5.4.jar:2.5.4] + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) ~[spring-boot-2.5.4.jar:2.5.4] + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) ~[spring-boot-2.5.4.jar:2.5.4] + at org.springframework.boot.SpringApplication.run(SpringApplication.java:338) ~[spring-boot-2.5.4.jar:2.5.4] + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1343) ~[spring-boot-2.5.4.jar:2.5.4] + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1332) ~[spring-boot-2.5.4.jar:2.5.4] + at com.gxwebsoft.WebSoftApplication.main(WebSoftApplication.java:25) ~[classes/:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na] + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] + at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na] + at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49) ~[spring-boot-devtools-2.5.4.jar:2.5.4] +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:na] + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) ~[na:na] + at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:na] + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) ~[na:na] + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) ~[na:na] + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:61) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:151) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:167) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:89) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.NativeSession.connect(NativeSession.java:119) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:948) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:818) ~[mysql-connector-java-8.0.26.jar:8.0.26] + ... 94 common frames omitted +Caused by: java.net.ConnectException: Connection refused + at java.base/sun.nio.ch.Net.connect0(Native Method) ~[na:na] + at java.base/sun.nio.ch.Net.connect(Net.java:579) ~[na:na] + at java.base/sun.nio.ch.Net.connect(Net.java:568) ~[na:na] + at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:593) ~[na:na] + at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) ~[na:na] + at java.base/java.net.Socket.connect(Socket.java:639) ~[na:na] + at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:156) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63) ~[mysql-connector-java-8.0.26.jar:8.0.26] + ... 97 common frames omitted + +2024-12-24 20:06:37.303 ERROR 26108 --- [restartedMain] com.alibaba.druid.pool.DruidDataSource : {dataSource-1} init error + +com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:174) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:828) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:448) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:241) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:198) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:156) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.filter.FilterAdapter.connection_connect(FilterAdapter.java:787) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:150) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.filter.stat.StatFilter.connection_connect(StatFilter.java:227) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:150) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1659) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1723) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.pool.DruidDataSource.init(DruidDataSource.java:919) ~[druid-1.2.6.jar:1.2.6] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na] + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] + at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1912) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1854) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1782) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:602) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:524) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1380) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1300) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:887) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:541) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1334) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1177) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:564) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:524) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1380) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1300) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireByType(AbstractAutowireCapableBeanFactory.java:1501) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1399) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:601) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:524) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1380) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1300) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:657) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:640) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1413) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:601) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:524) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1380) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1300) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:521) ~[spring-context-5.3.9.jar:5.3.9] + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:497) ~[spring-context-5.3.9.jar:5.3.9] + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:650) ~[spring-context-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:228) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:318) ~[spring-context-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1413) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:601) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:524) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:944) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918) ~[spring-context-5.3.9.jar:5.3.9] + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583) ~[spring-context-5.3.9.jar:5.3.9] + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:145) ~[spring-boot-2.5.4.jar:2.5.4] + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) ~[spring-boot-2.5.4.jar:2.5.4] + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) ~[spring-boot-2.5.4.jar:2.5.4] + at org.springframework.boot.SpringApplication.run(SpringApplication.java:338) ~[spring-boot-2.5.4.jar:2.5.4] + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1343) ~[spring-boot-2.5.4.jar:2.5.4] + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1332) ~[spring-boot-2.5.4.jar:2.5.4] + at com.gxwebsoft.WebSoftApplication.main(WebSoftApplication.java:25) ~[classes/:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na] + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] + at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na] + at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49) ~[spring-boot-devtools-2.5.4.jar:2.5.4] +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:na] + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) ~[na:na] + at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:na] + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) ~[na:na] + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) ~[na:na] + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:61) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:151) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:167) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:89) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.NativeSession.connect(NativeSession.java:119) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:948) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:818) ~[mysql-connector-java-8.0.26.jar:8.0.26] + ... 94 common frames omitted +Caused by: java.net.ConnectException: Connection refused + at java.base/sun.nio.ch.Net.connect0(Native Method) ~[na:na] + at java.base/sun.nio.ch.Net.connect(Net.java:579) ~[na:na] + at java.base/sun.nio.ch.Net.connect(Net.java:568) ~[na:na] + at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:593) ~[na:na] + at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) ~[na:na] + at java.base/java.net.Socket.connect(Socket.java:639) ~[na:na] + at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:156) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63) ~[mysql-connector-java-8.0.26.jar:8.0.26] + ... 97 common frames omitted + +2024-12-24 20:06:37.304 ERROR 26108 --- [Druid-ConnectionPool-Create-1970294379] com.alibaba.druid.pool.DruidDataSource : create connection SQLException, url: jdbc:mysql://127.0.0.1:3308/nbg?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, errorCode 0, state 08S01 + +com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:174) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:828) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:448) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:241) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:198) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:156) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.filter.FilterAdapter.connection_connect(FilterAdapter.java:787) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:150) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.filter.stat.StatFilter.connection_connect(StatFilter.java:227) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:150) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1659) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1723) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:2801) ~[druid-1.2.6.jar:1.2.6] +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:na] + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) ~[na:na] + at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:na] + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) ~[na:na] + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) ~[na:na] + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:61) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:151) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:167) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:89) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.NativeSession.connect(NativeSession.java:119) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:948) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:818) ~[mysql-connector-java-8.0.26.jar:8.0.26] + ... 11 common frames omitted +Caused by: java.net.ConnectException: Connection refused + at java.base/sun.nio.ch.Net.connect0(Native Method) ~[na:na] + at java.base/sun.nio.ch.Net.connect(Net.java:579) ~[na:na] + at java.base/sun.nio.ch.Net.connect(Net.java:568) ~[na:na] + at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:593) ~[na:na] + at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) ~[na:na] + at java.base/java.net.Socket.connect(Socket.java:639) ~[na:na] + at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:156) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63) ~[mysql-connector-java-8.0.26.jar:8.0.26] + ... 14 common frames omitted + +2024-12-24 20:06:37.305 WARN 26108 --- [restartedMain] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'adController': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'adServiceImpl': Unsatisfied dependency expressed through field 'baseMapper'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'adMapper' defined in file [/Users/liangxin/Project/JAVA/nbg-java/target/classes/com/gxwebsoft/cms/mapper/AdMapper.class]: Unsatisfied dependency expressed through bean property 'sqlSessionFactory'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sqlSessionFactory' defined in class path resource [com/baomidou/mybatisplus/autoconfigure/MybatisPlusAutoConfiguration.class]: Unsatisfied dependency expressed through method 'sqlSessionFactory' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [com/alibaba/druid/spring/boot/autoconfigure/DruidDataSourceAutoConfigure.class]: Invocation of init method failed; nested exception is com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. +2024-12-24 20:06:37.305 ERROR 26108 --- [Druid-ConnectionPool-Create-1970294379] com.alibaba.druid.pool.DruidDataSource : create connection SQLException, url: jdbc:mysql://127.0.0.1:3308/nbg?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, errorCode 0, state 08S01 + +com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:174) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:828) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:448) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:241) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:198) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:156) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.filter.FilterAdapter.connection_connect(FilterAdapter.java:787) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:150) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.filter.stat.StatFilter.connection_connect(StatFilter.java:227) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:150) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1659) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1723) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:2801) ~[druid-1.2.6.jar:1.2.6] +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:na] + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) ~[na:na] + at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:na] + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) ~[na:na] + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) ~[na:na] + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:61) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:151) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:167) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:89) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.NativeSession.connect(NativeSession.java:119) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:948) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:818) ~[mysql-connector-java-8.0.26.jar:8.0.26] + ... 11 common frames omitted +Caused by: java.net.ConnectException: Connection refused + at java.base/sun.nio.ch.Net.connect0(Native Method) ~[na:na] + at java.base/sun.nio.ch.Net.connect(Net.java:579) ~[na:na] + at java.base/sun.nio.ch.Net.connect(Net.java:568) ~[na:na] + at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:593) ~[na:na] + at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) ~[na:na] + at java.base/java.net.Socket.connect(Socket.java:639) ~[na:na] + at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:156) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63) ~[mysql-connector-java-8.0.26.jar:8.0.26] + ... 14 common frames omitted + +2024-12-24 20:06:59.024 WARN 26133 --- [restartedMain] com.alibaba.druid.pool.DruidDataSource : removeAbandoned is true, not use in production. +2024-12-24 20:06:59.062 ERROR 26133 --- [restartedMain] com.alibaba.druid.pool.DruidDataSource : init datasource error, url: jdbc:mysql://127.0.0.1:3308/nbg?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8 + +com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:174) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:828) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:448) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:241) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:198) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:156) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.filter.FilterAdapter.connection_connect(FilterAdapter.java:787) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:150) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.filter.stat.StatFilter.connection_connect(StatFilter.java:227) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:150) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1659) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1723) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.pool.DruidDataSource.init(DruidDataSource.java:919) ~[druid-1.2.6.jar:1.2.6] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na] + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] + at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1912) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1854) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1782) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:602) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:524) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1380) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1300) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:887) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:541) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1334) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1177) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:564) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:524) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1380) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1300) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireByType(AbstractAutowireCapableBeanFactory.java:1501) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1399) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:601) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:524) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1380) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1300) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:657) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:640) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1413) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:601) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:524) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1380) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1300) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:521) ~[spring-context-5.3.9.jar:5.3.9] + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:497) ~[spring-context-5.3.9.jar:5.3.9] + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:650) ~[spring-context-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:228) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:318) ~[spring-context-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1413) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:601) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:524) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:944) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918) ~[spring-context-5.3.9.jar:5.3.9] + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583) ~[spring-context-5.3.9.jar:5.3.9] + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:145) ~[spring-boot-2.5.4.jar:2.5.4] + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) ~[spring-boot-2.5.4.jar:2.5.4] + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) ~[spring-boot-2.5.4.jar:2.5.4] + at org.springframework.boot.SpringApplication.run(SpringApplication.java:338) ~[spring-boot-2.5.4.jar:2.5.4] + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1343) ~[spring-boot-2.5.4.jar:2.5.4] + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1332) ~[spring-boot-2.5.4.jar:2.5.4] + at com.gxwebsoft.WebSoftApplication.main(WebSoftApplication.java:25) ~[classes/:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na] + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] + at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na] + at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49) ~[spring-boot-devtools-2.5.4.jar:2.5.4] +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:na] + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) ~[na:na] + at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:na] + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) ~[na:na] + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) ~[na:na] + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:61) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:151) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:167) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:89) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.NativeSession.connect(NativeSession.java:119) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:948) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:818) ~[mysql-connector-java-8.0.26.jar:8.0.26] + ... 94 common frames omitted +Caused by: java.net.ConnectException: Connection refused + at java.base/sun.nio.ch.Net.connect0(Native Method) ~[na:na] + at java.base/sun.nio.ch.Net.connect(Net.java:579) ~[na:na] + at java.base/sun.nio.ch.Net.connect(Net.java:568) ~[na:na] + at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:593) ~[na:na] + at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) ~[na:na] + at java.base/java.net.Socket.connect(Socket.java:639) ~[na:na] + at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:156) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63) ~[mysql-connector-java-8.0.26.jar:8.0.26] + ... 97 common frames omitted + +2024-12-24 20:06:59.065 ERROR 26133 --- [restartedMain] com.alibaba.druid.pool.DruidDataSource : {dataSource-1} init error + +com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:174) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:828) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:448) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:241) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:198) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:156) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.filter.FilterAdapter.connection_connect(FilterAdapter.java:787) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:150) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.filter.stat.StatFilter.connection_connect(StatFilter.java:227) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:150) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1659) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1723) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.pool.DruidDataSource.init(DruidDataSource.java:919) ~[druid-1.2.6.jar:1.2.6] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na] + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] + at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1912) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1854) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1782) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:602) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:524) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1380) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1300) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:887) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:541) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1334) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1177) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:564) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:524) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1380) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1300) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireByType(AbstractAutowireCapableBeanFactory.java:1501) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1399) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:601) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:524) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1380) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1300) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:657) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:640) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1413) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:601) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:524) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1380) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1300) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:521) ~[spring-context-5.3.9.jar:5.3.9] + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:497) ~[spring-context-5.3.9.jar:5.3.9] + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:650) ~[spring-context-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:228) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:318) ~[spring-context-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1413) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:601) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:524) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:944) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918) ~[spring-context-5.3.9.jar:5.3.9] + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583) ~[spring-context-5.3.9.jar:5.3.9] + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:145) ~[spring-boot-2.5.4.jar:2.5.4] + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) ~[spring-boot-2.5.4.jar:2.5.4] + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) ~[spring-boot-2.5.4.jar:2.5.4] + at org.springframework.boot.SpringApplication.run(SpringApplication.java:338) ~[spring-boot-2.5.4.jar:2.5.4] + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1343) ~[spring-boot-2.5.4.jar:2.5.4] + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1332) ~[spring-boot-2.5.4.jar:2.5.4] + at com.gxwebsoft.WebSoftApplication.main(WebSoftApplication.java:25) ~[classes/:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na] + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] + at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na] + at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49) ~[spring-boot-devtools-2.5.4.jar:2.5.4] +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:na] + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) ~[na:na] + at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:na] + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) ~[na:na] + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) ~[na:na] + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:61) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:151) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:167) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:89) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.NativeSession.connect(NativeSession.java:119) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:948) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:818) ~[mysql-connector-java-8.0.26.jar:8.0.26] + ... 94 common frames omitted +Caused by: java.net.ConnectException: Connection refused + at java.base/sun.nio.ch.Net.connect0(Native Method) ~[na:na] + at java.base/sun.nio.ch.Net.connect(Net.java:579) ~[na:na] + at java.base/sun.nio.ch.Net.connect(Net.java:568) ~[na:na] + at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:593) ~[na:na] + at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) ~[na:na] + at java.base/java.net.Socket.connect(Socket.java:639) ~[na:na] + at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:156) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63) ~[mysql-connector-java-8.0.26.jar:8.0.26] + ... 97 common frames omitted + +2024-12-24 20:06:59.067 ERROR 26133 --- [Druid-ConnectionPool-Create-1883438836] com.alibaba.druid.pool.DruidDataSource : create connection SQLException, url: jdbc:mysql://127.0.0.1:3308/nbg?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, errorCode 0, state 08S01 + +com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:174) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:828) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:448) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:241) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:198) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:156) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.filter.FilterAdapter.connection_connect(FilterAdapter.java:787) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:150) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.filter.stat.StatFilter.connection_connect(StatFilter.java:227) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:150) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1659) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1723) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:2801) ~[druid-1.2.6.jar:1.2.6] +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:na] + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) ~[na:na] + at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:na] + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) ~[na:na] + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) ~[na:na] + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:61) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:151) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:167) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:89) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.NativeSession.connect(NativeSession.java:119) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:948) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:818) ~[mysql-connector-java-8.0.26.jar:8.0.26] + ... 11 common frames omitted +Caused by: java.net.ConnectException: Connection refused + at java.base/sun.nio.ch.Net.connect0(Native Method) ~[na:na] + at java.base/sun.nio.ch.Net.connect(Net.java:579) ~[na:na] + at java.base/sun.nio.ch.Net.connect(Net.java:568) ~[na:na] + at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:593) ~[na:na] + at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) ~[na:na] + at java.base/java.net.Socket.connect(Socket.java:639) ~[na:na] + at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:156) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63) ~[mysql-connector-java-8.0.26.jar:8.0.26] + ... 14 common frames omitted + +2024-12-24 20:06:59.067 WARN 26133 --- [restartedMain] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'adController': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'adServiceImpl': Unsatisfied dependency expressed through field 'baseMapper'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'adMapper' defined in file [/Users/liangxin/Project/JAVA/nbg-java/target/classes/com/gxwebsoft/cms/mapper/AdMapper.class]: Unsatisfied dependency expressed through bean property 'sqlSessionFactory'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sqlSessionFactory' defined in class path resource [com/baomidou/mybatisplus/autoconfigure/MybatisPlusAutoConfiguration.class]: Unsatisfied dependency expressed through method 'sqlSessionFactory' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [com/alibaba/druid/spring/boot/autoconfigure/DruidDataSourceAutoConfigure.class]: Invocation of init method failed; nested exception is com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. +2024-12-24 20:06:59.068 ERROR 26133 --- [Druid-ConnectionPool-Create-1883438836] com.alibaba.druid.pool.DruidDataSource : create connection SQLException, url: jdbc:mysql://127.0.0.1:3308/nbg?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, errorCode 0, state 08S01 + +com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:174) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:828) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:448) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:241) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:198) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:156) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.filter.FilterAdapter.connection_connect(FilterAdapter.java:787) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:150) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.filter.stat.StatFilter.connection_connect(StatFilter.java:227) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:150) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1659) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1723) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:2801) ~[druid-1.2.6.jar:1.2.6] +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:na] + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) ~[na:na] + at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:na] + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) ~[na:na] + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) ~[na:na] + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:61) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:151) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:167) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:89) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.NativeSession.connect(NativeSession.java:119) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:948) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:818) ~[mysql-connector-java-8.0.26.jar:8.0.26] + ... 11 common frames omitted +Caused by: java.net.ConnectException: Connection refused + at java.base/sun.nio.ch.Net.connect0(Native Method) ~[na:na] + at java.base/sun.nio.ch.Net.connect(Net.java:579) ~[na:na] + at java.base/sun.nio.ch.Net.connect(Net.java:568) ~[na:na] + at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:593) ~[na:na] + at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) ~[na:na] + at java.base/java.net.Socket.connect(Socket.java:639) ~[na:na] + at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:156) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63) ~[mysql-connector-java-8.0.26.jar:8.0.26] + ... 14 common frames omitted + +2024-12-24 20:06:59.087 ERROR 26133 --- [restartedMain] o.s.boot.SpringApplication : Application run failed + +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'adController': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'adServiceImpl': Unsatisfied dependency expressed through field 'baseMapper'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'adMapper' defined in file [/Users/liangxin/Project/JAVA/nbg-java/target/classes/com/gxwebsoft/cms/mapper/AdMapper.class]: Unsatisfied dependency expressed through bean property 'sqlSessionFactory'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sqlSessionFactory' defined in class path resource [com/baomidou/mybatisplus/autoconfigure/MybatisPlusAutoConfiguration.class]: Unsatisfied dependency expressed through method 'sqlSessionFactory' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [com/alibaba/druid/spring/boot/autoconfigure/DruidDataSourceAutoConfigure.class]: Invocation of init method failed; nested exception is com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:321) ~[spring-context-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1413) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:601) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:524) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:944) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918) ~[spring-context-5.3.9.jar:5.3.9] + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583) ~[spring-context-5.3.9.jar:5.3.9] + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:145) ~[spring-boot-2.5.4.jar:2.5.4] + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) ~[spring-boot-2.5.4.jar:2.5.4] + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) ~[spring-boot-2.5.4.jar:2.5.4] + at org.springframework.boot.SpringApplication.run(SpringApplication.java:338) ~[spring-boot-2.5.4.jar:2.5.4] + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1343) ~[spring-boot-2.5.4.jar:2.5.4] + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1332) ~[spring-boot-2.5.4.jar:2.5.4] + at com.gxwebsoft.WebSoftApplication.main(WebSoftApplication.java:25) ~[classes/:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na] + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] + at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na] + at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49) ~[spring-boot-devtools-2.5.4.jar:2.5.4] +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'adServiceImpl': Unsatisfied dependency expressed through field 'baseMapper'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'adMapper' defined in file [/Users/liangxin/Project/JAVA/nbg-java/target/classes/com/gxwebsoft/cms/mapper/AdMapper.class]: Unsatisfied dependency expressed through bean property 'sqlSessionFactory'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sqlSessionFactory' defined in class path resource [com/baomidou/mybatisplus/autoconfigure/MybatisPlusAutoConfiguration.class]: Unsatisfied dependency expressed through method 'sqlSessionFactory' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [com/alibaba/druid/spring/boot/autoconfigure/DruidDataSourceAutoConfigure.class]: Invocation of init method failed; nested exception is com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:660) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:640) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1413) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:601) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:524) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1380) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1300) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:521) ~[spring-context-5.3.9.jar:5.3.9] + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:497) ~[spring-context-5.3.9.jar:5.3.9] + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:650) ~[spring-context-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:228) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:318) ~[spring-context-5.3.9.jar:5.3.9] + ... 22 common frames omitted +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'adMapper' defined in file [/Users/liangxin/Project/JAVA/nbg-java/target/classes/com/gxwebsoft/cms/mapper/AdMapper.class]: Unsatisfied dependency expressed through bean property 'sqlSessionFactory'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sqlSessionFactory' defined in class path resource [com/baomidou/mybatisplus/autoconfigure/MybatisPlusAutoConfiguration.class]: Unsatisfied dependency expressed through method 'sqlSessionFactory' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [com/alibaba/druid/spring/boot/autoconfigure/DruidDataSourceAutoConfigure.class]: Invocation of init method failed; nested exception is com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireByType(AbstractAutowireCapableBeanFactory.java:1516) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1399) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:601) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:524) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1380) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1300) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:657) ~[spring-beans-5.3.9.jar:5.3.9] + ... 41 common frames omitted +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sqlSessionFactory' defined in class path resource [com/baomidou/mybatisplus/autoconfigure/MybatisPlusAutoConfiguration.class]: Unsatisfied dependency expressed through method 'sqlSessionFactory' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [com/alibaba/druid/spring/boot/autoconfigure/DruidDataSourceAutoConfigure.class]: Invocation of init method failed; nested exception is com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:800) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:541) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1334) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1177) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:564) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:524) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1380) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1300) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireByType(AbstractAutowireCapableBeanFactory.java:1501) ~[spring-beans-5.3.9.jar:5.3.9] + ... 52 common frames omitted +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [com/alibaba/druid/spring/boot/autoconfigure/DruidDataSourceAutoConfigure.class]: Invocation of init method failed; nested exception is com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1786) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:602) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:524) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1380) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1300) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:887) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791) ~[spring-beans-5.3.9.jar:5.3.9] + ... 65 common frames omitted +Caused by: com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:174) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:828) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:448) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:241) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:198) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:156) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.filter.FilterAdapter.connection_connect(FilterAdapter.java:787) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:150) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.filter.stat.StatFilter.connection_connect(StatFilter.java:227) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:150) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1659) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1723) ~[druid-1.2.6.jar:1.2.6] + at com.alibaba.druid.pool.DruidDataSource.init(DruidDataSource.java:919) ~[druid-1.2.6.jar:1.2.6] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na] + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] + at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1912) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1854) ~[spring-beans-5.3.9.jar:5.3.9] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1782) ~[spring-beans-5.3.9.jar:5.3.9] + ... 76 common frames omitted +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:na] + at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) ~[na:na] + at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:na] + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) ~[na:na] + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) ~[na:na] + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:61) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:151) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:167) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:89) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.NativeSession.connect(NativeSession.java:119) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:948) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:818) ~[mysql-connector-java-8.0.26.jar:8.0.26] + ... 94 common frames omitted +Caused by: java.net.ConnectException: Connection refused + at java.base/sun.nio.ch.Net.connect0(Native Method) ~[na:na] + at java.base/sun.nio.ch.Net.connect(Net.java:579) ~[na:na] + at java.base/sun.nio.ch.Net.connect(Net.java:568) ~[na:na] + at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:593) ~[na:na] + at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) ~[na:na] + at java.base/java.net.Socket.connect(Socket.java:639) ~[na:na] + at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:156) ~[mysql-connector-java-8.0.26.jar:8.0.26] + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63) ~[mysql-connector-java-8.0.26.jar:8.0.26] + ... 97 common frames omitted + +2024-12-24 20:06:59.572 ERROR 26133 --- [Druid-ConnectionPool-Create-1883438836] com.alibaba.druid.pool.DruidDataSource : create connection SQLException, url: jdbc:mysql://127.0.0.1:3308/nbg?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8, errorCode 0, state 08S01 com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure