diff --git a/README.md b/README.md index 986587c1..739afe48 100644 --- a/README.md +++ b/README.md @@ -1,34 +1,37 @@ -## Lilishop B2B2C商城系统 +## 🔥Lilishop B2B2C商城系统 + +##### 🌹官方公众号 & 开源不易,如有帮助请点Star + +##### 官方qq群 961316482,官方公众号/小程序体验,扫描二维码 -##### 官方公众号 & 开源不易,如有帮助请点Star ![image-20210511171611793](https://pickmall.cn/assets/imgs/h5-qrcode.png) [![star](https://gitee.com/beijing_hongye_huicheng/lilishop/badge/star.svg?theme=dark)](https://gitee.com/beijing_hongye_huicheng/lilishop/stargazers) - -![github](https://img.shields.io/github/stars/hongyehuicheng/lilishop.svg?style=social&logo=#181717) +  ![github](https://img.shields.io/github/stars/hongyehuicheng/lilishop.svg?style=social&logo=#181717) -### 介绍 +### 🔥介绍 **官网**:https://pickmall.cn -Lilishop 是一款Java开发,基于SpringBoot研发的B2B2C多用户商城,前端使用 Vue、uniapp开发 **系统全端全部代码开源** +Lilishop 基于SpringBoot研发的B2B2C多用户商城系统,前端使用 Vue、uniapp开发 **系统全端全部代码开源** + +业务兼容O2O商城/B2B商城/B2B2C商城/F2B2C商城/S2B2C商城。支持小程序商城、H5商城、APP商城、 PC商城。 + + 产品前后端分离、支持分布式部署。 -商城展示端包含 PC、H5、微信小程序、APP。 - 商城包含 会员模块、**第三方登录模块**、**第三方支付模块**、**楼层装修模块**、订单模块、分销模块、文章模块、系统设置模块、流量分析模块 系统包含各种中间件、搜索引擎、多级缓存、分布式事务、分布式任务调度等,支持Docker,支持k8s。是一款高性能,支持高并发等商城系统。 -开箱即用,简单配置即可部署一套属于您的系统。 -### 文档 -**产品文档**(需求、架构、使用、部署、开发):https://docs.pickmall.cn -**功能清单** 功能列表:https://docs.qq.com/sheet/DQ1Z2dWJKUnBRZEt5 +### ☃️文档 -### 项目链接(gitee) +**产品文档**:https://docs.pickmall.cn + +### 💧项目链接(gitee) **Java后台**:https://gitee.com/beijing_hongye_huicheng/lilishop.git @@ -38,7 +41,7 @@ Lilishop 是一款Java开发,基于SpringBoot研发的B2B2C多用户商城, **docker一键部署**:https://gitee.com/beijing_hongye_huicheng/docker.git -### 项目链接(github) +### 💧项目链接(github) **Java后台**:https://github.com/hongyehuicheng/lilishop.git @@ -48,42 +51,27 @@ Lilishop 是一款Java开发,基于SpringBoot研发的B2B2C多用户商城, **docker一键部署**:https://github.com/hongyehuicheng/docker.git -### 演示地址 +### 💧演示地址(手机验证码为 ‘111111’) **运营后台**:https://admin-b2b2c.pickmall.cn 账号:admin/123456 **店铺后台**:https://store-b2b2c.pickmall.cn 账号:13011111111/111111 -**用户前台**:https://pc-b2b2c.pickmall.cn +**PC**:https://pc-b2b2c.pickmall.cn -**移动端**:https://m-b2b2c.pickmall.cn +**WAP**:https://m-b2b2c.pickmall.cn + +**小程序/公众号**:扫描二维码 ![image-20210511171611793](https://pickmall.cn/assets/imgs/h5-qrcode.png) -### 3行命令搭建本地环境 +### 🚙3行命令搭建本地环境 -温馨提示:由于服务较多,如果笔记本环境启动内存没有32g可能无法启动成功(macbookpro 2020 16g内存启动无法成功),台式机在16g内存、AMD 3700x 的ubuntu系统成功运行。 +温馨提示:由于服务中间件较多,如果笔记本环境启动内存没有32g可能无法启动成功(macbookpro 2020 16g内存启动无法成功),台式机在16g内存、AMD 3700x 的ubuntu系统成功运行。 -##### docker环境安装(已安装的用户可跳过) -```shell -#安装依赖 -sudo yum install -y yum-utils device-mapper-persistent-data lvm2 -#设置源 -sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -sudo yum makecache fast -#安装docker -sudo yum install docker-ce -#启动服务 -sudo systemctl start docker -#安装docker-compose -sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose -#授权 -sudo chmod +x /usr/local/bin/docker-compose -#检测版本号 -docker-compose -v -``` +##### docker环境安装 [点击跳转](https://docs.pickmall.cn/deploy/%E4%B8%80%E9%94%AE%E9%83%A8%E7%BD%B2.html) @@ -98,39 +86,39 @@ docker-compose -v -PS:单独部署的话,数据库文件访问这里:https://gitee.com/beijing_hongye_huicheng/docker/tree/master/init/mysql +PS:单独部署的话,商城数据库文件访问这里:https://gitee.com/beijing_hongye_huicheng/docker/tree/master/init/mysql -##### 各个地址 +##### 商城部署后 API/UI 地址 | API | 地址 | | -------------- | --------------- | -| 买家API | http://127.0.0.1:8888 | -| 商家API | http://127.0.0.1:8889 | -| 管理端API | http://127.0.0.1:8887 | -| 通用API | http://127.0.0.1:8890 | +| 商城买家API | http://127.0.0.1:8888 | +| 商城商家API | http://127.0.0.1:8889 | +| 商城管理端API | http://127.0.0.1:8887 | +| 商城基础API | http://127.0.0.1:8890 | | 前端演示 | 地址 | | -------------- | --------------- | -| PC | http://127.0.0.1:10000 | -| WAP | http://127.0.0.1:10001 | -| 商家 | http://127.0.0.1:10002 | -| 管理端 | http://127.0.0.1:10003 | +| 商城PC端 | http://127.0.0.1:10000 | +| 商城WAP端 | http://127.0.0.1:10001 | +| 商城卖家端 | http://127.0.0.1:10002 | +| 商城管理端 | http://127.0.0.1:10003 | -### 功能列表 +### ⚾️功能列表 -#### 平台功能 +#### 🥎商城平台功能 ![平台功能](https://pickmall.cn/assets/imgs/other/managerList.jpg) -#### 商家端功能 +#### 🥎商城卖家功能 ![商家端功能](https://pickmall.cn/assets/imgs/other/storeList.jpg) @@ -138,28 +126,28 @@ PS:单独部署的话,数据库文件访问这里:https://gitee.com/beijing_ -### 功能展示 +### 🧩商城前端功能展示 -#### 移动端 +#### ⚽️商城移动端 移动端功能展示 -#### 管理端 +#### ⚽️商城管理端 ![管理端功能展示](https://pickmall.cn/assets/imgs/other/manager.gif) -### 技术选型 +### 商城技术选型 -#### 架构图 +#### 🥅架构图 ![架构](https://lili-system.oss-cn-beijing.aliyuncs.com/docs/%E6%9E%B6%E6%9E%84.png) -##### Java后台 +##### 🕹后台技术选型 | 说明 | 框架 | 说明 | | | -------------- | --------------- | -------------- | ------------- | @@ -173,7 +161,7 @@ PS:单独部署的话,数据库文件访问这里:https://gitee.com/beijing_ | 短信 | 阿里云短信 | 认证 | JWT | | 日志处理 | Log4j | 接口规范 | RESTful | -##### 前端-运营后台、店铺后台 +##### 🖥前端-运营后台、店铺后台 | 说明 | 框架 | 说明 | 框架 | | ---------- | ---------- | ---------- | ------- | @@ -183,115 +171,23 @@ PS:单独部署的话,数据库文件访问这里:https://gitee.com/beijing_ | 基础UI库 | iView | UI界面基于 | iView | | 网络请求 | axios | | | -##### 前端-移动端 +##### 📱前端-移动端 | 说明 | 架构 | 说明 | 架构 | | --------- | ------- | -------- | ------- | | 基础UI库 | uViewui | 基础框架 | uni-app | | CSS预处理 | scss | 地图引擎 | amap | -### 升级计划 - -#### 计划每个月发布一个版本,具体时间可能有出入 - -时间:2021年7月15日 +### 🌟版本升级 ``` -新增功能: -1.积分商城 -2.店铺移动端 -3.店铺支持发货单 -4.供求单 -5.店铺自提点 -6.移动端展示附近店铺 -7.开屏广告 -8.会员站内消息 -9.移动端店铺入驻 -功能优化: -1.用户分享商城、关注店铺、邀请新用户可获取积分、经验值。 -2.隐私管理功能 -2.移动端店铺首页优化 +商城后续会持续版本升级,修复bug,完善功能,覆盖更多业务场景 o2o/b2b/s2b2b2c/跨境电商 + +后续会考虑推出微服务商城系统/中台商城等 ``` -时间:2021年8月16日 -``` -新增功能: -1.微淘功能 -2.相册管理功能 -3.店铺申请品牌 -4.第三方商品导入(淘宝、99api) -5.用户等级 -6.用户升级会员 -7.会员权益 -8.促销活动:第二件*折 -9.促销活动:商品打包价 -10.促销活动:商品组合购 -11.促销活动:进店赠券 -12.代客退单 -功能优化: -1.批量上传商品分类 -2.店铺维护开票项目 -3.店铺展示营销中心 -``` - -时间:2021年9月15日 - -``` -新增功能: -1.增加供应商功能 -2.商品预售 -3.商品预约 -4.电子券码 -5.企业会员 -6.企业会员购 -7.商品批发价 -功能优化: -1.店铺运费模板支持按照体积计算 -2.店铺支持自定义移动端首页 -``` - -### 版本升级 - -``` -后续会持续版本升级,修复bug,完善功能,覆盖更多业务场景 o2o/b2b/s2b2b2c/跨境电商 - -后续会考虑推出微服务/中台等 企业级版本 -``` - -### 技术亮点 - - - 1.后端框架基于Springboot,构建基于maven,持久层使用MyBatisPlus。使用elasticsearch、redis、mongodb、rocketmq 等各种中间健。都是主流架构,轻松应对各种环境。 - - 2.支持集群、分布式,支持docker 轻松部署,解决各种复杂场景! - - 3.代码模块清晰,主要分为三端api(买家、卖家、管理),各端API互相隔离,自己鉴权,自己操作业务。 - - 4.使用阿里开源的RocketMQ,基于mq解决各种并发场景,解决事务一致性,解决搞并发延迟场景问题。 - - 5.项目使用多级缓存,应用不同场景,redis缓存业务数据、mongodb缓存关系型多对多关系问题、nginx缓存高频访问低频修改的页面。 - - 6.支持各种联合登陆,支持各种客户端的支付问题,灵活配置灵活开启。 - - 7.内置完善的楼层装修机制,各种拖拉拽,维护跳转页面或外网,即便是一个什么都不懂的运营也可以轻松掌握。 - - 8.内置阿里短信接口,可以在线申请短信模版。内置阿里oss系统,可以对文件执行各种操作。oss商家端资源相互隔离。 - - 10.强大的统计报表,统计效果,可以实现各个场景,包含在线人数,历史在线人数,活跃人数等信息。 - - 11.标准Api接口、提供swagger文档,快速二开。 - - 12.分布式调度任务中心,解决分布式定时任务多次执行问题。 - - 13.代码注释完善,快速上手。 - - 14.非移动端采用IView框架,各种自定义插件、选择器实现。移动端采用uniapp,一次编写,全端使用 - - 15.已经对接好各种第三方插件,支持各种复杂等联合登陆,联合支付等场景。 - - -### 开源须知 +### ⚠️开源须知 1.仅允许用于个人学习研究使用. 2.禁止将本开源的代码和资源进行任何形式任何名义的出售. @@ -301,7 +197,7 @@ PS:单独部署的话,数据库文件访问这里:https://gitee.com/beijing_ 4.限制商用,如果需要商业使用请联系我们。QQ3409056806. -### 交流群 +### 🐧交流群 **QQ群**:961316482 diff --git a/buyer-api/pom.xml b/buyer-api/pom.xml index 22afda90..42426cbe 100644 --- a/buyer-api/pom.xml +++ b/buyer-api/pom.xml @@ -3,21 +3,19 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - - 4.3 - buyer-api cn.lili lili-shop-parent - 4.2.0 + ${revision} + ../pom.xml cn.lili framework - 4.2.0 + ${revision} diff --git a/buyer-api/src/main/java/cn/lili/controller/member/MemberCollectionController.java b/buyer-api/src/main/java/cn/lili/controller/member/MemberCollectionController.java index 7e6d102b..22a43a03 100644 --- a/buyer-api/src/main/java/cn/lili/controller/member/MemberCollectionController.java +++ b/buyer-api/src/main/java/cn/lili/controller/member/MemberCollectionController.java @@ -36,11 +36,16 @@ public class MemberCollectionController { @Autowired private StoreCollectionService storeCollectionService; + /** + * 商品收藏关键字 + */ + private String goods="GOODS"; + @ApiOperation(value = "查询会员收藏列表") @ApiImplicitParam(name = "type", value = "类型", dataType = "String", paramType = "path", example = "GOODS:商品,STORE:店铺") @GetMapping("/{type}") public ResultMessage goodsList(@PathVariable String type, PageVO page) { - if (type.equals("GOODS")) { + if (goods.equals(type)) { return ResultUtil.data(goodsCollectionService.goodsCollection(page)); } return ResultUtil.data(storeCollectionService.storeCollection(page)); @@ -54,7 +59,7 @@ public class MemberCollectionController { @PostMapping("/add/{type}/{id}") public ResultMessage addGoodsCollection(@PathVariable String type, @NotNull(message = "值不能为空") @PathVariable String id) { - if (type.equals("GOODS")) { + if (goods.equals(type)) { return ResultUtil.data(goodsCollectionService.addGoodsCollection(id)); } return ResultUtil.data(storeCollectionService.addStoreCollection(id)); @@ -69,7 +74,7 @@ public class MemberCollectionController { @DeleteMapping(value = "/delete/{type}/{id}") public ResultMessage deleteGoodsCollection(@PathVariable String type, @NotNull(message = "值不能为空") @PathVariable String id) { - if (type.equals("GOODS")) { + if (goods.equals(type)) { return ResultUtil.data(goodsCollectionService.deleteGoodsCollection(id)); } return ResultUtil.data(storeCollectionService.deleteStoreCollection(id)); @@ -83,7 +88,7 @@ public class MemberCollectionController { @GetMapping(value = "/isCollection/{type}/{id}") public ResultMessage isCollection(@PathVariable String type, @NotNull(message = "值不能为空") @PathVariable String id) { - if (type.equals("GOODS")) { + if (goods.equals(type)) { return ResultUtil.data(this.goodsCollectionService.isCollection(id)); } return ResultUtil.data(this.storeCollectionService.isCollection(id)); diff --git a/buyer-api/src/main/java/cn/lili/controller/member/MemberWithdrawApplyBuyerController.java b/buyer-api/src/main/java/cn/lili/controller/member/MemberWithdrawApplyBuyerController.java index a78f8b8d..059485f5 100644 --- a/buyer-api/src/main/java/cn/lili/controller/member/MemberWithdrawApplyBuyerController.java +++ b/buyer-api/src/main/java/cn/lili/controller/member/MemberWithdrawApplyBuyerController.java @@ -38,8 +38,8 @@ public class MemberWithdrawApplyBuyerController { public ResultMessage> getByPage(PageVO page, MemberWithdrawApplyQueryVO memberWithdrawApplyQueryVO) { memberWithdrawApplyQueryVO.setMemberId(UserContext.getCurrentUser().getId()); //构建查询 返回数据 - IPage memberWithdrawApplyIPage = memberWithdrawApplyService.getMemberWithdrawPage(page, memberWithdrawApplyQueryVO); - return ResultUtil.data(memberWithdrawApplyIPage); + IPage memberWithdrawApplyPage = memberWithdrawApplyService.getMemberWithdrawPage(page, memberWithdrawApplyQueryVO); + return ResultUtil.data(memberWithdrawApplyPage); } } diff --git a/buyer-api/src/main/java/cn/lili/controller/other/distribution/DistributionBuyerController.java b/buyer-api/src/main/java/cn/lili/controller/other/distribution/DistributionBuyerController.java index b8c97954..edc3d3f0 100644 --- a/buyer-api/src/main/java/cn/lili/controller/other/distribution/DistributionBuyerController.java +++ b/buyer-api/src/main/java/cn/lili/controller/other/distribution/DistributionBuyerController.java @@ -40,7 +40,6 @@ public class DistributionBuyerController { @Autowired private DistributionOrderService distributionOrderService; - //申请分销员 @ApiOperation(value = "申请分销员") @PostMapping public ResultMessage applyDistribution(DistributionApplyDTO distributionApplyDTO) { @@ -63,7 +62,6 @@ public class DistributionBuyerController { return ResultUtil.data(distributionService.getDistribution()); } - //申请分销员 @ApiOperation(value = "绑定分销员") @ApiImplicitParam(name = "distributionId", value = "分销员ID", required = true, paramType = "path") @GetMapping("/bindingDistribution/{distributionId}") diff --git a/buyer-api/src/main/java/cn/lili/controller/passport/connect/MiniProgramBuyerController.java b/buyer-api/src/main/java/cn/lili/controller/passport/connect/MiniProgramBuyerController.java index 99e59561..bd3db44d 100644 --- a/buyer-api/src/main/java/cn/lili/controller/passport/connect/MiniProgramBuyerController.java +++ b/buyer-api/src/main/java/cn/lili/controller/passport/connect/MiniProgramBuyerController.java @@ -34,6 +34,7 @@ public class MiniProgramBuyerController { public ConnectService connectService; @Autowired public WechatMpCodeUtil wechatMpCodeUtil; + @SuppressWarnings("AlibabaLowerCamelCaseVariableNaming") @Autowired public WechatMPMessageService wechatMPMessageService; @Autowired diff --git a/buyer-api/src/main/resources/banner.txt b/buyer-api/src/main/resources/banner.txt deleted file mode 100644 index be6731c5..00000000 --- a/buyer-api/src/main/resources/banner.txt +++ /dev/null @@ -1,19 +0,0 @@ - ___ ___ ___ ___ ________ ________ _______ ________ _____ ______ ___ __ ________ ________ ___ __ -|\ \ |\ \|\ \ |\ \ |\ _____\\ __ \|\ ___ \ |\ __ \|\ _ \ _ \|\ \ |\ \|\ __ \|\ __ \|\ \|\ \ -\ \ \ \ \ \ \ \ \ \ \ ____________\ \ \__/\ \ \|\ \ \ __/|\ \ \|\ \ \ \\\__\ \ \ \ \ \ \ \ \ \|\ \ \ \|\ \ \ \/ /|_ - \ \ \ \ \ \ \ \ \ \ \|\____________\ \ __\\ \ _ _\ \ \_|/_\ \ __ \ \ \\|__| \ \ \ \ __\ \ \ \ \\\ \ \ _ _\ \ ___ \ - \ \ \____\ \ \ \ \____\ \ \|____________|\ \ \_| \ \ \\ \\ \ \_|\ \ \ \ \ \ \ \ \ \ \ \ \|\__\_\ \ \ \\\ \ \ \\ \\ \ \\ \ \ - \ \_______\ \__\ \_______\ \__\ \ \__\ \ \__\\ _\\ \_______\ \__\ \__\ \__\ \ \__\ \____________\ \_______\ \__\\ _\\ \__\\ \__\ - \|_______|\|__|\|_______|\|__| \|__| \|__|\|__|\|_______|\|__|\|__|\|__| \|__|\|____________|\|_______|\|__|\|__|\|__| \|__| - - - - ___ ___ ___ ___ ________ ___ ___ ________ ________ - |\ \ |\ \|\ \ |\ \ |\ ____\|\ \|\ \|\ __ \|\ __ \ - \ \ \ \ \ \ \ \ \ \ \ ____________\ \ \___|\ \ \\\ \ \ \|\ \ \ \|\ \ - \ \ \ \ \ \ \ \ \ \ \|\____________\ \_____ \ \ __ \ \ \\\ \ \ ____\ - \ \ \____\ \ \ \ \____\ \ \|____________|\|____|\ \ \ \ \ \ \ \\\ \ \ \___| - \ \_______\ \__\ \_______\ \__\ ____\_\ \ \__\ \__\ \_______\ \__\ - \|_______|\|__|\|_______|\|__| |\_________\|__|\|__|\|_______|\|__| - \|_________| - diff --git a/common-api/pom.xml b/common-api/pom.xml index fe5a4ae7..0faa13d3 100644 --- a/common-api/pom.xml +++ b/common-api/pom.xml @@ -7,7 +7,8 @@ cn.lili lili-shop-parent - 4.2.0 + ${revision} + ../pom.xml cn.lili @@ -17,7 +18,7 @@ cn.lili framework - 4.2.0 + ${revision} diff --git a/common-api/src/main/java/cn/lili/controller/common/FileController.java b/common-api/src/main/java/cn/lili/controller/common/FileController.java index cc056c0d..20e33256 100644 --- a/common-api/src/main/java/cn/lili/controller/common/FileController.java +++ b/common-api/src/main/java/cn/lili/controller/common/FileController.java @@ -81,6 +81,7 @@ public class FileController { if (file.getUserEnums().equals(authUser.getRole().name())) { break; } + default: throw new ServiceException(ResultCode.USER_AUTHORITY_ERROR); } fileService.updateById(file); diff --git a/common-api/src/main/java/cn/lili/controller/common/SliderImageController.java b/common-api/src/main/java/cn/lili/controller/common/SliderImageController.java index ff8dbef5..b41d0ace 100644 --- a/common-api/src/main/java/cn/lili/controller/common/SliderImageController.java +++ b/common-api/src/main/java/cn/lili/controller/common/SliderImageController.java @@ -28,10 +28,9 @@ public class SliderImageController { @Autowired private VerificationService verificationService; - //一分钟同一个ip请求10次 @LimitPoint(name = "slider_image", key = "verification") @GetMapping("/{verificationEnums}") - @ApiOperation(value = "获取校验接口") + @ApiOperation(value = "获取校验接口,一分钟同一个ip请求10次") public ResultMessage getSliderImage(@RequestHeader String uuid, @PathVariable VerificationEnums verificationEnums) { try { return ResultUtil.data(verificationService.createVerification(verificationEnums, uuid)); diff --git a/common-api/src/main/java/cn/lili/controller/common/SmsController.java b/common-api/src/main/java/cn/lili/controller/common/SmsController.java index e69664a4..cfec27ab 100644 --- a/common-api/src/main/java/cn/lili/controller/common/SmsController.java +++ b/common-api/src/main/java/cn/lili/controller/common/SmsController.java @@ -31,14 +31,13 @@ public class SmsController { @Autowired private VerificationService verificationService; - //一分钟同一个ip请求1次 @LimitPoint(name = "sms_send", key = "sms") @ApiImplicitParams({ @ApiImplicitParam(paramType = "path", dataType = "String", name = "mobile", value = "手机号"), @ApiImplicitParam(paramType = "header", dataType = "String", name = "uuid", value = "uuid"), }) @GetMapping("/{verificationEnums}/{mobile}") - @ApiOperation(value = "发送短信验证码") + @ApiOperation(value = "发送短信验证码,一分钟同一个ip请求1次") public ResultMessage getSmsCode( @RequestHeader String uuid, @PathVariable String mobile, diff --git a/config/application.yml b/config/application.yml index 0e645d6b..2193b51f 100644 --- a/config/application.yml +++ b/config/application.yml @@ -121,7 +121,7 @@ spring: props: #是否打印逻辑SQL语句和实际SQL语句,建议调试时打印,在生产环境关闭 sql: - show: false + show: true # 忽略鉴权url ignored: @@ -144,6 +144,7 @@ ignored: - /buyer/promotion/pintuan/** - /buyer/promotion/seckill/** - /buyer/promotion/pointsGoods/** + - /buyer/promotion/coupon - /buyer/memberEvaluation/**/goodsEvaluation - /buyer/memberEvaluation/**/evaluationNumber - /buyer/appVersion/** @@ -163,6 +164,7 @@ ignored: - /v2/api-docs - /configuration/ui - /boot-admin + - /manager/promotion/seckill/init statics: - /**/*.js - /**/*.css @@ -194,9 +196,9 @@ logging: # 输出级别 level: cn.lili: info - org.hibernate: debug - org.springframework: debug - org.springframework.data.mongodb.core: debug +# org.hibernate: debug +# org.springframework: debug +# org.springframework.data.mongodb.core: debug file: # 指定路径 path: lili-logs @@ -295,6 +297,8 @@ lili: notice-send-group: lili_send_notice_group rocketmq: name-server: 192.168.0.116:9876 + namesrvAddr: 192.168.0.116:9876 + isVIPChannel: false producer: group: lili_group send-message-timeout: 30000 diff --git a/consumer/pom.xml b/consumer/pom.xml index b9b34c24..f743fae9 100644 --- a/consumer/pom.xml +++ b/consumer/pom.xml @@ -8,20 +8,21 @@ cn.lili lili-shop-parent - 4.2.0 + ${revision} + ../pom.xml cn.lili framework - 4.2.0 + ${revision} com.xuxueli xxl-job-core - 2.2.0 + ${xxl-job} diff --git a/consumer/src/main/java/cn/lili/event/impl/DistributionOrderExecute.java b/consumer/src/main/java/cn/lili/event/impl/DistributionOrderExecute.java index fefac047..21fe71f1 100644 --- a/consumer/src/main/java/cn/lili/event/impl/DistributionOrderExecute.java +++ b/consumer/src/main/java/cn/lili/event/impl/DistributionOrderExecute.java @@ -12,6 +12,7 @@ import cn.lili.modules.order.order.entity.dto.OrderMessage; import cn.lili.modules.order.trade.entity.enums.AfterSaleStatusEnum; import cn.lili.timetask.handler.EveryDayExecute; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -23,13 +24,18 @@ import javax.annotation.Resource; * @author Chopper * @date 2020-07-03 11:20 */ +@Slf4j @Service public class DistributionOrderExecute implements OrderStatusChangeEvent, EveryDayExecute, AfterSaleStatusChangeEvent { - //分销订单 + /** + * 分销订单 + */ @Autowired private DistributionOrderService distributionOrderService; - //分销订单持久层 + /** + * 分销订单持久层 + */ @Resource private DistributionOrderMapper distributionOrderMapper; @@ -48,6 +54,9 @@ public class DistributionOrderExecute implements OrderStatusChangeEvent, EveryDa distributionOrderService.cancelOrder(orderMessage.getOrderSn()); break; } + default: + log.error("分销订单执行异常:", orderMessage.getOrderSn()); + break; } } diff --git a/consumer/src/main/java/cn/lili/event/impl/GoodsSkuExecute.java b/consumer/src/main/java/cn/lili/event/impl/GoodsSkuExecute.java index 224f1f52..1d465dac 100644 --- a/consumer/src/main/java/cn/lili/event/impl/GoodsSkuExecute.java +++ b/consumer/src/main/java/cn/lili/event/impl/GoodsSkuExecute.java @@ -14,9 +14,11 @@ import org.springframework.stereotype.Service; * @date 2020-07-03 11:20 */ @Service -public class GoodsSkuExecute implements GoodsCommentCompleteEvent { +public class GoodsSkuExecute implements GoodsCommentCompleteEvent { - //商品 + /** + * 商品 + */ @Autowired private GoodsSkuService goodsSkuService; diff --git a/consumer/src/main/java/cn/lili/event/impl/MemberExperienceExecute.java b/consumer/src/main/java/cn/lili/event/impl/MemberExperienceExecute.java index 7c514764..7fa3318a 100644 --- a/consumer/src/main/java/cn/lili/event/impl/MemberExperienceExecute.java +++ b/consumer/src/main/java/cn/lili/event/impl/MemberExperienceExecute.java @@ -29,18 +29,25 @@ import org.springframework.stereotype.Service; @Service public class MemberExperienceExecute implements MemberRegisterEvent, GoodsCommentCompleteEvent, OrderStatusChangeEvent { - //配置 + /** + * 配置 + */ @Autowired private SettingService settingService; - //会员 + /** + * 会员 + */ @Autowired private MemberService memberService; - //订单 + /** + * 订单 + */ @Autowired private OrderService orderService; /** * 会员注册赠送经验值 + * * @param member 会员 */ @Override @@ -53,6 +60,7 @@ public class MemberExperienceExecute implements MemberRegisterEvent, GoodsCommen /** * 商品评价赠送经验值 + * * @param memberEvaluation 会员评价 */ @Override @@ -65,17 +73,18 @@ public class MemberExperienceExecute implements MemberRegisterEvent, GoodsCommen /** * 完成订单赠送经验值 + * * @param orderMessage 订单消息 */ @Override public void orderChange(OrderMessage orderMessage) { - if(orderMessage.getNewStatus().equals(OrderStatusEnum.COMPLETED)){ + if (orderMessage.getNewStatus().equals(OrderStatusEnum.COMPLETED)) { //获取经验值设置 ExperienceSetting experienceSetting = getExperienceSetting(); //获取订单信息 Order order = orderService.getBySn(orderMessage.getOrderSn()); //计算赠送经验值数量 - Double point= CurrencyUtil.mul(experienceSetting.getMoney(),order.getFlowPrice(),0); + Double point = CurrencyUtil.mul(experienceSetting.getMoney(), order.getFlowPrice(), 0); //赠送会员经验值 memberService.updateMemberExperience(point.longValue(), true, order.getMemberId(), "会员下单,赠送经验值" + point + "分"); } @@ -83,9 +92,10 @@ public class MemberExperienceExecute implements MemberRegisterEvent, GoodsCommen /** * 获取经验值设置 + * * @return 经验值设置 */ - private ExperienceSetting getExperienceSetting(){ + private ExperienceSetting getExperienceSetting() { Setting setting = settingService.get(SettingEnum.EXPERIENCE_SETTING.name()); return new Gson().fromJson(setting.getSettingValue(), ExperienceSetting.class); } diff --git a/consumer/src/main/java/cn/lili/event/impl/MemberPointExecute.java b/consumer/src/main/java/cn/lili/event/impl/MemberPointExecute.java index e4ce6de0..6891833d 100644 --- a/consumer/src/main/java/cn/lili/event/impl/MemberPointExecute.java +++ b/consumer/src/main/java/cn/lili/event/impl/MemberPointExecute.java @@ -33,57 +33,66 @@ import org.springframework.stereotype.Service; @Service public class MemberPointExecute implements MemberRegisterEvent, GoodsCommentCompleteEvent, OrderStatusChangeEvent, AfterSaleStatusChangeEvent { - //配置 + /** + * 配置 + */ @Autowired private SettingService settingService; - //会员 + /** + * 会员 + */ @Autowired private MemberService memberService; - //订单 + /** + * 订单 + */ @Autowired private OrderService orderService; /** * 会员注册赠送积分 + * * @param member 会员 */ @Override public void memberRegister(Member member) { //获取积分设置 - PointSetting pointSetting=getPointSetting(); + PointSetting pointSetting = getPointSetting(); //赠送会员积分 memberService.updateMemberPoint(Long.valueOf(pointSetting.getRegister().longValue()), true, member.getId(), "会员注册,赠送积分" + pointSetting.getRegister() + "分"); } /** * 会员评价赠送积分 + * * @param memberEvaluation 会员评价 */ @Override public void goodsComment(MemberEvaluation memberEvaluation) { //获取积分设置 - PointSetting pointSetting=getPointSetting(); + PointSetting pointSetting = getPointSetting(); //赠送会员积分 memberService.updateMemberPoint(Long.valueOf(pointSetting.getComment().longValue()), true, memberEvaluation.getMemberId(), "会员评价,赠送积分" + pointSetting.getComment() + "分"); } /** * 非积分订单订单完成后赠送积分 + * * @param orderMessage 订单消息 */ @Override public void orderChange(OrderMessage orderMessage) { - if(orderMessage.getNewStatus().equals(OrderStatusEnum.COMPLETED)){ + if (orderMessage.getNewStatus().equals(OrderStatusEnum.COMPLETED)) { //根据订单编号获取订单数据,如果为积分订单则跳回 Order order = orderService.getBySn(orderMessage.getOrderSn()); - if(order.getOrderPromotionType().equals(OrderPromotionTypeEnum.POINT.name())){ + if (order.getOrderPromotionType().equals(OrderPromotionTypeEnum.POINT.name())) { return; } //获取积分设置 - PointSetting pointSetting=getPointSetting(); + PointSetting pointSetting = getPointSetting(); //计算赠送积分数量 - Double point=CurrencyUtil.mul(pointSetting.getMoney(),order.getFlowPrice(),0); + Double point = CurrencyUtil.mul(pointSetting.getMoney(), order.getFlowPrice(), 0); //赠送会员积分 memberService.updateMemberPoint(point.longValue(), true, order.getMemberId(), "会员下单,赠送积分" + point + "分"); @@ -92,15 +101,16 @@ public class MemberPointExecute implements MemberRegisterEvent, GoodsCommentComp /** * 提交售后后扣除积分 + * * @param afterSale 售后 */ @Override public void afterSaleStatusChange(AfterSale afterSale) { if (afterSale.getServiceStatus().equals(AfterSaleStatusEnum.COMPLETE.name())) { //获取积分设置 - PointSetting pointSetting=getPointSetting(); + PointSetting pointSetting = getPointSetting(); //计算扣除积分数量 - Double point=CurrencyUtil.mul(pointSetting.getMoney(), afterSale.getActualRefundPrice(),0); + Double point = CurrencyUtil.mul(pointSetting.getMoney(), afterSale.getActualRefundPrice(), 0); //扣除会员积分 memberService.updateMemberPoint(point.longValue(), false, afterSale.getMemberId(), "会员退款,扣除积分" + point + "分"); @@ -109,9 +119,10 @@ public class MemberPointExecute implements MemberRegisterEvent, GoodsCommentComp /** * 获取积分设置 + * * @return 积分设置 */ - private PointSetting getPointSetting(){ + private PointSetting getPointSetting() { Setting setting = settingService.get(SettingEnum.POINT_SETTING.name()); return new Gson().fromJson(setting.getSettingValue(), PointSetting.class); } diff --git a/consumer/src/main/java/cn/lili/event/impl/NoticeMessageExecute.java b/consumer/src/main/java/cn/lili/event/impl/NoticeMessageExecute.java index e3346136..29bbec5a 100644 --- a/consumer/src/main/java/cn/lili/event/impl/NoticeMessageExecute.java +++ b/consumer/src/main/java/cn/lili/event/impl/NoticeMessageExecute.java @@ -44,7 +44,7 @@ public class NoticeMessageExecute implements TradeEvent, OrderStatusChangeEvent, NoticeMessageDTO noticeMessageDTO = new NoticeMessageDTO(); noticeMessageDTO.setMemberId(tradeDTO.getMemberId()); noticeMessageDTO.setNoticeMessageNodeEnum(NoticeMessageNodeEnum.ORDER_CREATE_SUCCESS); - Map params = new HashMap<>(); + Map params = new HashMap<>(2); params.put("goods", tradeDTO.getSkuList().get(0).getGoodsSku().getGoodsName()); noticeMessageDTO.setParameter(params); //保存站内信 @@ -58,7 +58,7 @@ public class NoticeMessageExecute implements TradeEvent, OrderStatusChangeEvent, NoticeMessageDTO noticeMessageDTO = new NoticeMessageDTO(); //如果订单状态不为空 if (orderDetailVO != null) { - Map params = new HashMap<>(); + Map params = new HashMap<>(2); switch (orderMessage.getNewStatus()) { //如果订单新的状态为已取消 则发送取消订单站内信 case CANCELLED: @@ -103,7 +103,7 @@ public class NoticeMessageExecute implements TradeEvent, OrderStatusChangeEvent, public void afterSaleStatusChange(AfterSale afterSale) { NoticeMessageDTO noticeMessageDTO = new NoticeMessageDTO(); noticeMessageDTO.setMemberId(afterSale.getMemberId()); - Map params = new HashMap<>(); + Map params = new HashMap<>(2); params.put("goods", afterSale.getGoodsName()); params.put("refuse", afterSale.getAuditRemark()); noticeMessageDTO.setParameter(params); @@ -154,7 +154,7 @@ public class NoticeMessageExecute implements TradeEvent, OrderStatusChangeEvent, //组织站内信参数 NoticeMessageDTO noticeMessageDTO = new NoticeMessageDTO(); noticeMessageDTO.setMemberId(memberPointMessage.getMemberId()); - Map params = new HashMap<>(); + Map params = new HashMap<>(2); if (memberPointMessage.getType()) { params.put("expenditure_points", "0"); params.put("income_points", memberPointMessage.getPoint().toString()); @@ -178,7 +178,7 @@ public class NoticeMessageExecute implements TradeEvent, OrderStatusChangeEvent, //组织参数 NoticeMessageDTO noticeMessageDTO = new NoticeMessageDTO(); noticeMessageDTO.setMemberId(memberWithdrawalMessage.getMemberId()); - Map params = new HashMap<>(); + Map params = new HashMap<>(2); params.put("income", memberWithdrawalMessage.getPrice().toString()); noticeMessageDTO.setParameter(params); noticeMessageDTO.setNoticeMessageNodeEnum(NoticeMessageNodeEnum.WALLET_WITHDRAWAL_SUCCESS); diff --git a/consumer/src/main/java/cn/lili/event/impl/PaymentExecute.java b/consumer/src/main/java/cn/lili/event/impl/PaymentExecute.java index c51b180d..6c3ed4e6 100644 --- a/consumer/src/main/java/cn/lili/event/impl/PaymentExecute.java +++ b/consumer/src/main/java/cn/lili/event/impl/PaymentExecute.java @@ -10,6 +10,7 @@ import cn.lili.modules.order.order.service.OrderService; import cn.lili.modules.payment.entity.RefundLog; import cn.lili.modules.payment.kit.Payment; import cn.lili.modules.payment.kit.enums.PaymentMethodEnum; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -19,10 +20,13 @@ import org.springframework.stereotype.Service; * @author Chopper * @date 2021-03-13 16:58 */ +@Slf4j @Service public class PaymentExecute implements OrderStatusChangeEvent { - //订单 + /** + * 订单 + */ @Autowired private OrderService orderService; @@ -36,7 +40,10 @@ public class PaymentExecute implements OrderStatusChangeEvent { if (order.getPayStatus() == PayStatusEnum.UNPAID.name()) { return; } - + //如果未付款,则不去要退回相关代码执行 + if (order.getPayStatus().equals(PayStatusEnum.UNPAID.name())) { + return; + } PaymentMethodEnum paymentMethodEnum = PaymentMethodEnum.valueOf(order.getPaymentMethod()); //进行退款操作 switch (paymentMethodEnum) { @@ -64,6 +71,9 @@ public class PaymentExecute implements OrderStatusChangeEvent { break; case BANK_TRANSFER: break; + default: + log.error("订单支付执行异常,订单编号:{}", orderMessage.getOrderSn()); + break; } break; default: diff --git a/consumer/src/main/java/cn/lili/event/impl/StockUpdateExecute.java b/consumer/src/main/java/cn/lili/event/impl/StockUpdateExecute.java index 216b4331..402b74f0 100644 --- a/consumer/src/main/java/cn/lili/event/impl/StockUpdateExecute.java +++ b/consumer/src/main/java/cn/lili/event/impl/StockUpdateExecute.java @@ -32,23 +32,35 @@ import java.util.List; @Service public class StockUpdateExecute implements OrderStatusChangeEvent { - //出库失败消息 + /** + * 出库失败消息 + */ static String outOfStockMessage = "库存不足,出库失败"; - //Redis + /** + * Redis + */ @Autowired private StringRedisTemplate stringRedisTemplate; @Autowired private DefaultRedisScript quantityScript; - //订单 + /** + * 订单 + */ @Autowired private OrderService orderService; - //规格商品 + /** + * 规格商品 + */ @Autowired private GoodsSkuService goodsSkuService; - //促销商品 + /** + * 促销商品 + */ @Autowired private PromotionGoodsService promotionGoodsService; - //缓存 + /** + * 缓存 + */ @Autowired private Cache cache; diff --git a/consumer/src/main/java/cn/lili/listener/AfterSaleMessageListener.java b/consumer/src/main/java/cn/lili/listener/AfterSaleMessageListener.java index 2db77d04..da5a5fa9 100644 --- a/consumer/src/main/java/cn/lili/listener/AfterSaleMessageListener.java +++ b/consumer/src/main/java/cn/lili/listener/AfterSaleMessageListener.java @@ -24,7 +24,9 @@ import java.util.List; @RocketMQMessageListener(topic = "${lili.data.rocketmq.after-sale-topic}", consumerGroup = "${lili.data.rocketmq.after-sale-group}") public class AfterSaleMessageListener implements RocketMQListener { - //售后订单状态 + /** + * 售后订单状态 + */ @Autowired private List afterSaleStatusChangeEvents; @@ -43,6 +45,8 @@ public class AfterSaleMessageListener implements RocketMQListener { e); } } + default: + log.error("售后状态修改事件执行异常:", new String(messageExt.getBody())); break; } diff --git a/consumer/src/main/java/cn/lili/listener/GoodsMessageListener.java b/consumer/src/main/java/cn/lili/listener/GoodsMessageListener.java index 16dd44dc..e0f24d7b 100644 --- a/consumer/src/main/java/cn/lili/listener/GoodsMessageListener.java +++ b/consumer/src/main/java/cn/lili/listener/GoodsMessageListener.java @@ -20,7 +20,6 @@ import cn.lili.modules.search.entity.dos.EsGoodsIndex; import cn.lili.modules.search.service.EsGoodsIndexService; import cn.lili.modules.store.service.StoreService; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import lombok.extern.slf4j.Slf4j; import org.apache.rocketmq.common.message.MessageExt; @@ -42,31 +41,49 @@ import java.util.List; @RocketMQMessageListener(topic = "${lili.data.rocketmq.goods-topic}", consumerGroup = "${lili.data.rocketmq.goods-group}") public class GoodsMessageListener implements RocketMQListener { - //ES商品 + /** + * ES商品 + */ @Autowired private EsGoodsIndexService goodsIndexService; - //店铺 + /** + * 店铺 + */ @Autowired private StoreService storeService; - //商品 + /** + * 商品 + */ @Autowired private GoodsService goodsService; - //商品 + /** + * 商品Sku + */ @Autowired private GoodsSkuService goodsSkuService; - //用户足迹 + /** + * 用户足迹 + */ @Autowired private FootprintService footprintService; - //商品收藏 + /** + * 商品收藏 + */ @Autowired private GoodsCollectionService goodsCollectionService; - //商品评价 + /** + * 商品评价 + */ @Autowired private List goodsCommentCompleteEvents; - //分销商品 + /** + * 分销商品 + */ @Autowired private DistributionGoodsService distributionGoodsService; - //分销员-商品关联表 + /** + * 分销员-商品关联表 + */ @Autowired private DistributionSelectedGoodsService distributionSelectedGoodsService; @@ -123,6 +140,9 @@ public class GoodsMessageListener implements RocketMQListener { case BUY_GOODS_COMPLETE: this.goodsBuyComplete(messageExt); break; + default: + log.error("商品执行异常:", new String(messageExt.getBody())); + break; } } @@ -131,20 +151,21 @@ public class GoodsMessageListener implements RocketMQListener { * 1.更新店铺的商品数量 * 2.删除分销员-分销商品绑定关系 * 3.删除分销商品 + * * @param messageExt 消息 */ - private void deleteGoods(MessageExt messageExt){ - Goods goods=JSONUtil.toBean(new String(messageExt.getBody()),Goods.class); + private void deleteGoods(MessageExt messageExt) { + Goods goods = JSONUtil.toBean(new String(messageExt.getBody()), Goods.class); //更新店铺商品数量 storeService.updateStoreGoodsNum(goods.getStoreId()); //删除获取分销商品 - DistributionGoods distributionGoods=distributionGoodsService.getOne(new LambdaQueryWrapper() - .eq(DistributionGoods::getGoodsId,goods.getId())); + DistributionGoods distributionGoods = distributionGoodsService.getOne(new LambdaQueryWrapper() + .eq(DistributionGoods::getGoodsId, goods.getId())); //删除分销商品绑定关系 distributionSelectedGoodsService.remove(new LambdaQueryWrapper() - .eq(DistributionSelectedGoods::getDistributionGoodsId,distributionGoods.getId())); + .eq(DistributionSelectedGoods::getDistributionGoodsId, distributionGoods.getId())); //删除分销商品 distributionGoodsService.removeById(distributionGoods.getId()); @@ -155,9 +176,10 @@ public class GoodsMessageListener implements RocketMQListener { * 1.更新商品购买数量 * 2.更新SKU购买数量 * 3.更新索引购买数量 + * * @param messageExt */ - private void goodsBuyComplete(MessageExt messageExt){ + private void goodsBuyComplete(MessageExt messageExt) { String goodsCompleteMessageStr = new String(messageExt.getBody()); List goodsCompleteMessageList = JSONUtil.toList(JSONUtil.parseArray(goodsCompleteMessageStr), GoodsCompleteMessage.class); for (GoodsCompleteMessage goodsCompleteMessage : goodsCompleteMessageList) { diff --git a/consumer/src/main/java/cn/lili/listener/MemberMessageListener.java b/consumer/src/main/java/cn/lili/listener/MemberMessageListener.java index 7f135776..4cc3b8fa 100644 --- a/consumer/src/main/java/cn/lili/listener/MemberMessageListener.java +++ b/consumer/src/main/java/cn/lili/listener/MemberMessageListener.java @@ -30,16 +30,24 @@ import java.util.List; @RocketMQMessageListener(topic = "${lili.data.rocketmq.member-topic}", consumerGroup = "${lili.data.rocketmq.member-group}") public class MemberMessageListener implements RocketMQListener { - //会员签到 + /** + * 会员签到 + */ @Autowired private MemberSignService memberSignService; - //会员积分变化 + /** + * 会员积分变化 + */ @Autowired private List memberPointChangeEvents; - //会员提现 + /** + * 会员提现 + */ @Autowired private List memberWithdrawalEvents; - //会员注册 + /** + * 会员注册 + */ @Autowired private List memberSignEvents; diff --git a/consumer/src/main/java/cn/lili/listener/NoticeMessageListener.java b/consumer/src/main/java/cn/lili/listener/NoticeMessageListener.java index 940eced2..98a894a6 100644 --- a/consumer/src/main/java/cn/lili/listener/NoticeMessageListener.java +++ b/consumer/src/main/java/cn/lili/listener/NoticeMessageListener.java @@ -3,7 +3,6 @@ package cn.lili.listener; import cn.hutool.json.JSONUtil; import cn.lili.modules.message.entity.dto.NoticeMessageDTO; import cn.lili.modules.message.service.NoticeMessageService; -import lombok.RequiredArgsConstructor; import org.apache.rocketmq.common.message.MessageExt; import org.apache.rocketmq.spring.annotation.RocketMQMessageListener; import org.apache.rocketmq.spring.core.RocketMQListener; @@ -20,7 +19,9 @@ import org.springframework.stereotype.Component; @RocketMQMessageListener(topic = "${lili.data.rocketmq.notice-topic}", consumerGroup = "${lili.data.rocketmq.notice-group}") public class NoticeMessageListener implements RocketMQListener { - //站内信 + /** + * 站内信 + */ @Autowired private NoticeMessageService noticeMessageService; diff --git a/consumer/src/main/java/cn/lili/listener/NoticeSendMessageListener.java b/consumer/src/main/java/cn/lili/listener/NoticeSendMessageListener.java index 659c1c53..fe7a4a21 100644 --- a/consumer/src/main/java/cn/lili/listener/NoticeSendMessageListener.java +++ b/consumer/src/main/java/cn/lili/listener/NoticeSendMessageListener.java @@ -28,6 +28,7 @@ import org.apache.rocketmq.spring.core.RocketMQListener; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import javax.annotation.Resource; import java.util.ArrayList; import java.util.List; @@ -41,22 +42,34 @@ import java.util.List; @RocketMQMessageListener(topic = "${lili.data.rocketmq.notice-send-topic}", consumerGroup = "${lili.data.rocketmq.notice-send-group}") public class NoticeSendMessageListener implements RocketMQListener { - //会员 - @Autowired + /** + * 会员 + */ + @Resource private MemberMapper memberMapper; - //短信 + /** + * 短信 + */ @Autowired private SmsUtil smsUtil; - //店铺消息 + /** + * 店铺消息 + */ @Autowired private StoreMessageService storeMessageService; - //会员消息 + /** + * 会员消息 + */ @Autowired private MemberMessageService memberMessageService; - //店铺 + /** + * 店铺 + */ @Autowired private StoreService storeService; - //会员 + /** + * 会员 + */ @Autowired private MemberService memberService; @@ -100,7 +113,7 @@ public class NoticeSendMessageListener implements RocketMQListener { private void saveStoreMessage(Message message) { List list = new ArrayList<>(); //发送全部商家情况 - if (message.getMessageRange().equals("ALL")) { + if ("ALL".equals(message.getMessageRange())) { List storeList = storeService.list(new QueryWrapper().eq("store_disable", "OPEN")); storeList.forEach(item -> { StoreMessage storeMessage = new StoreMessage(); @@ -141,7 +154,7 @@ public class NoticeSendMessageListener implements RocketMQListener { private void saveMemberMessage(Message message) { List list = new ArrayList<>(); //如果是给所有会员发送消息 - if (message.getMessageRange().equals("ALL")) { + if ("ALL".equals(message.getMessageRange())) { //查询所有会员总数,因为会员总数比较大 如果一次性查出来会占用数据库资源,所以要分页查询 MemberSearchVO memberSearchVO = new MemberSearchVO(); memberSearchVO.setDisabled(SwitchEnum.OPEN.name()); diff --git a/consumer/src/main/java/cn/lili/listener/OrderMessageListener.java b/consumer/src/main/java/cn/lili/listener/OrderMessageListener.java index 892139e5..508ec62c 100644 --- a/consumer/src/main/java/cn/lili/listener/OrderMessageListener.java +++ b/consumer/src/main/java/cn/lili/listener/OrderMessageListener.java @@ -27,13 +27,19 @@ import java.util.List; @RocketMQMessageListener(topic = "${lili.data.rocketmq.order-topic}", consumerGroup = "${lili.data.rocketmq.order-group}") public class OrderMessageListener implements RocketMQListener { - //交易 + /** + * 交易 + */ @Autowired private List tradeEvent; - //订单状态 + /** + * 订单状态 + */ @Autowired private List orderStatusChangeEvents; - //缓存 + /** + * 缓存 + */ @Autowired private Cache cache; diff --git a/consumer/src/main/java/cn/lili/timetask/handler/impl/bill/BillExecute.java b/consumer/src/main/java/cn/lili/timetask/handler/impl/bill/BillExecute.java index 89b8bf35..c32087ba 100644 --- a/consumer/src/main/java/cn/lili/timetask/handler/impl/bill/BillExecute.java +++ b/consumer/src/main/java/cn/lili/timetask/handler/impl/bill/BillExecute.java @@ -21,10 +21,14 @@ import java.util.List; @Component public class BillExecute implements EveryDayExecute { - //结算单 + /** + * 结算单 + */ @Autowired private BillService billService; - //店铺详情 + /** + * 店铺详情 + */ @Resource private StoreDetailMapper storeDetailMapper; diff --git a/consumer/src/main/java/cn/lili/timetask/handler/impl/goods/GoodsExecute.java b/consumer/src/main/java/cn/lili/timetask/handler/impl/goods/GoodsExecute.java index f9d92ea6..04a3bbca 100644 --- a/consumer/src/main/java/cn/lili/timetask/handler/impl/goods/GoodsExecute.java +++ b/consumer/src/main/java/cn/lili/timetask/handler/impl/goods/GoodsExecute.java @@ -8,9 +8,9 @@ import cn.lili.modules.member.entity.dos.MemberEvaluation; import cn.lili.modules.member.mapper.MemberEvaluationMapper; import cn.lili.timetask.handler.EveryDayExecute; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import javax.annotation.Resource; import java.util.List; import java.util.Map; @@ -22,11 +22,15 @@ import java.util.Map; */ @Component public class GoodsExecute implements EveryDayExecute { - //会员评价 - @Autowired + /** + * 会员评价 + */ + @Resource private MemberEvaluationMapper memberEvaluationMapper; - //商品 - @Autowired + /** + * 商品 + */ + @Resource private GoodsMapper goodsMapper; /** diff --git a/consumer/src/main/java/cn/lili/timetask/handler/impl/order/CancelOrderTaskExecute.java b/consumer/src/main/java/cn/lili/timetask/handler/impl/order/CancelOrderTaskExecute.java index 1202c425..31c5e587 100644 --- a/consumer/src/main/java/cn/lili/timetask/handler/impl/order/CancelOrderTaskExecute.java +++ b/consumer/src/main/java/cn/lili/timetask/handler/impl/order/CancelOrderTaskExecute.java @@ -12,7 +12,6 @@ import cn.lili.modules.system.entity.enums.SettingEnum; import cn.lili.modules.system.service.SettingService; import cn.lili.timetask.handler.EveryMinuteExecute; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -28,12 +27,15 @@ import java.util.stream.Collectors; **/ @Slf4j @Component - public class CancelOrderTaskExecute implements EveryMinuteExecute { - //订单 + /** + * 订单 + */ @Autowired private OrderService orderService; - //设置 + /** + * 设置 + */ @Autowired private SettingService settingService; diff --git a/consumer/src/main/java/cn/lili/timetask/handler/impl/order/OrderEveryDayTaskExecute.java b/consumer/src/main/java/cn/lili/timetask/handler/impl/order/OrderEveryDayTaskExecute.java index 84c0cabc..be91b37e 100644 --- a/consumer/src/main/java/cn/lili/timetask/handler/impl/order/OrderEveryDayTaskExecute.java +++ b/consumer/src/main/java/cn/lili/timetask/handler/impl/order/OrderEveryDayTaskExecute.java @@ -10,7 +10,12 @@ import cn.lili.modules.member.entity.enums.EvaluationGradeEnum; import cn.lili.modules.member.service.MemberEvaluationService; import cn.lili.modules.order.order.entity.dos.Order; import cn.lili.modules.order.order.entity.dos.OrderItem; +import cn.lili.modules.order.order.entity.enums.CommentStatusEnum; +import cn.lili.modules.order.order.entity.enums.OrderComplaintStatusEnum; +import cn.lili.modules.order.order.entity.enums.OrderItemAfterSaleStatusEnum; import cn.lili.modules.order.order.entity.enums.OrderStatusEnum; +import cn.lili.modules.order.order.mapper.OrderItemMapper; +import cn.lili.modules.order.order.service.AfterSaleService; import cn.lili.modules.order.order.service.OrderItemService; import cn.lili.modules.order.order.service.OrderService; import cn.lili.modules.system.entity.dos.Setting; @@ -19,12 +24,13 @@ import cn.lili.modules.system.entity.enums.SettingEnum; import cn.lili.modules.system.service.SettingService; import cn.lili.timetask.handler.EveryDayExecute; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import java.util.Date; +import javax.annotation.Resource; import java.util.List; import java.util.stream.Collectors; @@ -37,26 +43,40 @@ import java.util.stream.Collectors; public class OrderEveryDayTaskExecute implements EveryDayExecute { - //订单 + /** + * 订单 + */ @Autowired private OrderService orderService; - //订单货物 + /** + * 订单货物 + */ @Autowired private OrderItemService orderItemService; - //设置 + @Resource + private OrderItemMapper orderItemMapper; + /** + * 设置 + */ @Autowired private SettingService settingService; - //会员评价 + /** + * 会员评价 + */ @Autowired private MemberEvaluationService memberEvaluationService; + @Autowired + private AfterSaleService afterSaleService; + /** * 执行每日任务 */ @Override public void execute() { + Setting setting = settingService.get(SettingEnum.ORDER_SETTING.name()); - //自动确认收货 + //订单设置 OrderSetting orderSetting = JSONUtil.toBean(setting.getSettingValue(), OrderSetting.class); if (orderSetting == null) { throw new ServiceException(ResultCode.ORDER_SETTING_ERROR); @@ -66,6 +86,10 @@ public class OrderEveryDayTaskExecute implements EveryDayExecute { completedOrder(orderSetting); //自动好评 memberEvaluation(orderSetting); + //关闭允许售后申请 + closeAfterSale(orderSetting); + //关闭允许投诉 + closeComplaint(orderSetting); } /** @@ -74,21 +98,21 @@ public class OrderEveryDayTaskExecute implements EveryDayExecute { * @param orderSetting 订单设置 */ private void completedOrder(OrderSetting orderSetting) { + //订单自动收货时间 = 当前时间 - 自动收货时间天数 - DateTime receiveTime = DateUtil.offsetDay(DateUtil.date(), -orderSetting.getAutoEvaluation()); + DateTime receiveTime = DateUtil.offsetDay(DateUtil.date(), -orderSetting.getAutoReceive()); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(Order::getOrderStatus, OrderStatusEnum.DELIVERED.name()); + //订单发货时间 >= 订单自动收货时间 queryWrapper.ge(Order::getLogisticsTime, receiveTime); List list = orderService.list(queryWrapper); - List receiveSnList = list.stream().map(Order::getSn).collect(Collectors.toList()); - if (!receiveSnList.isEmpty()) { - LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); - updateWrapper.in(Order::getSn, receiveSnList); - updateWrapper.set(Order::getOrderStatus, OrderStatusEnum.COMPLETED.name()).set(Order::getCompleteTime, new Date()); - boolean update = orderService.update(updateWrapper); - if (Boolean.FALSE.equals(update)) { - log.error("自动收货订单失败!订单编号为[{}]", receiveSnList); + + //判断是否有符合条件的订单,进行订单完成处理 + if (!list.isEmpty()) { + List receiveSnList = list.stream().map(Order::getSn).collect(Collectors.toList()); + for (String orderSn : receiveSnList) { + orderService.complete(orderSn); } } } @@ -100,26 +124,93 @@ public class OrderEveryDayTaskExecute implements EveryDayExecute { */ private void memberEvaluation(OrderSetting orderSetting) { //订单自动收货时间 = 当前时间 - 自动收货时间天数 - DateTime receiveTime = DateUtil.offsetDay(DateUtil.date(), -orderSetting.getAutoReceive()); + DateTime receiveTime = DateUtil.offsetDay(DateUtil.date(), -orderSetting.getAutoEvaluation()); + //订单完成时间 <= 订单自动好评时间 - List orderItems = orderItemService.waitEvaluate(receiveTime); + QueryWrapper queryWrapper = new QueryWrapper(); + queryWrapper.ge("o.complete_time", receiveTime); + queryWrapper.eq("oi.comment_status", CommentStatusEnum.UNFINISHED.name()); + List orderItems = orderItemMapper.waitOperationOrderItem(queryWrapper); - for (OrderItem orderItem : orderItems) { - - MemberEvaluationDTO memberEvaluationDTO = new MemberEvaluationDTO(); - memberEvaluationDTO.setOrderItemSn(orderItem.getSn()); - memberEvaluationDTO.setContent("系统默认好评"); - memberEvaluationDTO.setGoodsId(orderItem.getGoodsId()); - memberEvaluationDTO.setSkuId(orderItem.getSkuId()); - memberEvaluationDTO.setGrade(EvaluationGradeEnum.GOOD.name()); - memberEvaluationDTO.setDeliveryScore(5); - memberEvaluationDTO.setDescriptionScore(5); - memberEvaluationDTO.setServiceScore(5); - - memberEvaluationService.addMemberEvaluation(memberEvaluationDTO); + //判断是否有符合条件的订单,进行自动评价处理 + if (!orderItems.isEmpty()) { + for (OrderItem orderItem : orderItems) { + MemberEvaluationDTO memberEvaluationDTO = new MemberEvaluationDTO(); + memberEvaluationDTO.setOrderItemSn(orderItem.getSn()); + memberEvaluationDTO.setContent("系统默认好评"); + memberEvaluationDTO.setGoodsId(orderItem.getGoodsId()); + memberEvaluationDTO.setSkuId(orderItem.getSkuId()); + memberEvaluationDTO.setGrade(EvaluationGradeEnum.GOOD.name()); + memberEvaluationDTO.setDeliveryScore(5); + memberEvaluationDTO.setDescriptionScore(5); + memberEvaluationDTO.setServiceScore(5); + memberEvaluationService.addMemberEvaluation(memberEvaluationDTO); + } } } + /** + * 关闭允许售后申请 + * + * @param orderSetting 订单设置 + */ + private void closeAfterSale(OrderSetting orderSetting) { + + //订单关闭售后申请时间 = 当前时间 - 自动关闭售后申请天数 + DateTime receiveTime = DateUtil.offsetDay(DateUtil.date(), -orderSetting.getAutoEvaluation()); + + //关闭售后订单=未售后订单+小于订单关闭售后申请时间 + QueryWrapper queryWrapper = new QueryWrapper(); + queryWrapper.ge("o.complete_time", receiveTime); + queryWrapper.eq("oi.after_sale_status", OrderItemAfterSaleStatusEnum.NOT_APPLIED.name()); + List orderItems = orderItemMapper.waitOperationOrderItem(queryWrapper); + + //判断是否有符合条件的订单,关闭允许售后申请处理 + if (!orderItems.isEmpty()) { + + //获取订单货物ID + List orderItemIdList = orderItems.stream().map(OrderItem::getId).collect(Collectors.toList()); + + //修改订单售后状态 + LambdaUpdateWrapper lambdaUpdateWrapper = new LambdaUpdateWrapper() + .set(OrderItem::getAfterSaleStatus, OrderItemAfterSaleStatusEnum.EXPIRED.name()) + .in(OrderItem::getId, orderItemIdList); + orderItemService.update(lambdaUpdateWrapper); + } + + } + + /** + * 关闭允许交易投诉 + * + * @param orderSetting 订单设置 + */ + private void closeComplaint(OrderSetting orderSetting) { + + //订单关闭交易投诉申请时间 = 当前时间 - 自动关闭交易投诉申请天数 + DateTime receiveTime = DateUtil.offsetDay(DateUtil.date(), -orderSetting.getCloseComplaint()); + + //关闭售后订单=未售后订单+小于订单关闭售后申请时间 + QueryWrapper queryWrapper = new QueryWrapper(); + queryWrapper.ge("o.complete_time", receiveTime); + queryWrapper.eq("oi.complain_status", OrderComplaintStatusEnum.NO_APPLY.name()); + List orderItems = orderItemMapper.waitOperationOrderItem(queryWrapper); + + //判断是否有符合条件的订单,关闭允许售后申请处理 + if (!orderItems.isEmpty()) { + + //获取订单货物ID + List orderItemIdList = orderItems.stream().map(OrderItem::getId).collect(Collectors.toList()); + + //修改订单投诉状态 + LambdaUpdateWrapper lambdaUpdateWrapper = new LambdaUpdateWrapper() + .set(OrderItem::getComplainStatus, OrderItemAfterSaleStatusEnum.EXPIRED.name()) + .in(OrderItem::getId, orderItemIdList); + orderItemService.update(lambdaUpdateWrapper); + } + + } + } diff --git a/consumer/src/main/java/cn/lili/timetask/handler/impl/promotion/PromotionEverydayExecute.java b/consumer/src/main/java/cn/lili/timetask/handler/impl/promotion/PromotionEverydayExecute.java index eb43758d..482963fb 100644 --- a/consumer/src/main/java/cn/lili/timetask/handler/impl/promotion/PromotionEverydayExecute.java +++ b/consumer/src/main/java/cn/lili/timetask/handler/impl/promotion/PromotionEverydayExecute.java @@ -39,33 +39,49 @@ import java.util.List; @Component public class PromotionEverydayExecute implements EveryDayExecute { - //Mongo + /** + * Mongo + */ @Autowired private MongoTemplate mongoTemplate; - //es + /** + * ES商品索引 + */ @Autowired private EsGoodsIndexService esGoodsIndexService; - //满额活动 + /** + * 满额活动 + */ @Autowired private FullDiscountService fullDiscountService; - //拼团 + /** + * 拼团 + */ @Autowired private PintuanService pintuanService; - //优惠券 + /** + * 优惠券 + */ @Autowired private CouponService couponService; - //会员优惠券 + /** + * 会员优惠券 + */ @Autowired private MemberCouponService memberCouponService; - //促销商品 + /** + * 促销商品 + */ @Autowired private PromotionGoodsService promotionGoodsService; - - //系统设置 + /** + * 系统设置 + */ @Autowired private SettingService settingService; - - //秒杀活动 + /** + * 秒杀活动 + */ @Autowired private SeckillService seckillService; diff --git a/consumer/src/main/java/cn/lili/timetask/handler/impl/statistics/MemberStatisticsExecute.java b/consumer/src/main/java/cn/lili/timetask/handler/impl/statistics/MemberStatisticsExecute.java index 73a3c940..a7d766dc 100644 --- a/consumer/src/main/java/cn/lili/timetask/handler/impl/statistics/MemberStatisticsExecute.java +++ b/consumer/src/main/java/cn/lili/timetask/handler/impl/statistics/MemberStatisticsExecute.java @@ -20,7 +20,9 @@ import java.util.Date; @Component public class MemberStatisticsExecute implements EveryDayExecute { - //会员统计 + /** + * 会员统计 + */ @Autowired private MemberStatisticsDataService memberStatisticsDataService; diff --git a/consumer/src/main/java/cn/lili/timetask/handler/impl/statistics/OnlineMemberStatistics.java b/consumer/src/main/java/cn/lili/timetask/handler/impl/statistics/OnlineMemberStatistics.java index 73979b97..2b80be56 100644 --- a/consumer/src/main/java/cn/lili/timetask/handler/impl/statistics/OnlineMemberStatistics.java +++ b/consumer/src/main/java/cn/lili/timetask/handler/impl/statistics/OnlineMemberStatistics.java @@ -24,10 +24,14 @@ import java.util.stream.Collectors; @Component public class OnlineMemberStatistics implements EveryHourExecute { - //缓存 + /** + * 缓存 + */ @Autowired private Cache cache; - //统计小时 + /** + * 统计小时 + */ @Autowired private StatisticsProperties statisticsProperties; diff --git a/consumer/src/main/java/cn/lili/timetask/handler/impl/storeRating/StoreRatingExecute.java b/consumer/src/main/java/cn/lili/timetask/handler/impl/storeRating/StoreRatingExecute.java index d6bfc93b..963ae544 100644 --- a/consumer/src/main/java/cn/lili/timetask/handler/impl/storeRating/StoreRatingExecute.java +++ b/consumer/src/main/java/cn/lili/timetask/handler/impl/storeRating/StoreRatingExecute.java @@ -11,10 +11,10 @@ import cn.lili.timetask.handler.EveryDayExecute; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import javax.annotation.Resource; import java.util.List; /** @@ -25,11 +25,15 @@ import java.util.List; */ @Component public class StoreRatingExecute implements EveryDayExecute { - //店铺 + /** + * 店铺 + */ @Autowired private StoreService storeService; - //会员评价 - @Autowired + /** + * 会员评价 + */ + @Resource private MemberEvaluationMapper memberEvaluationMapper; @@ -39,10 +43,10 @@ public class StoreRatingExecute implements EveryDayExecute { List storeList = storeService.list(new LambdaQueryWrapper().eq(Store::getStoreDisable, StoreStatusEnum.OPEN.name())); for (Store store : storeList) { //店铺所有开启的评价 - LambdaQueryWrapper QueryWrapper = Wrappers.lambdaQuery(); - QueryWrapper.eq(MemberEvaluation::getStoreId, store.getId()); - QueryWrapper.eq(MemberEvaluation::getStatus, SwitchEnum.OPEN.name()); - StoreRatingVO storeRatingVO = memberEvaluationMapper.getStoreRatingVO(QueryWrapper); + LambdaQueryWrapper lambdaQueryWrapper = Wrappers.lambdaQuery(); + lambdaQueryWrapper.eq(MemberEvaluation::getStoreId, store.getId()); + lambdaQueryWrapper.eq(MemberEvaluation::getStatus, SwitchEnum.OPEN.name()); + StoreRatingVO storeRatingVO = memberEvaluationMapper.getStoreRatingVO(lambdaQueryWrapper); if (storeRatingVO != null) { //保存评分 diff --git a/consumer/src/main/java/cn/lili/timetask/handler/impl/view/PageViewStatisticsExecute.java b/consumer/src/main/java/cn/lili/timetask/handler/impl/view/PageViewStatisticsExecute.java index 2daf4256..b39e455f 100644 --- a/consumer/src/main/java/cn/lili/timetask/handler/impl/view/PageViewStatisticsExecute.java +++ b/consumer/src/main/java/cn/lili/timetask/handler/impl/view/PageViewStatisticsExecute.java @@ -4,7 +4,6 @@ import cn.hutool.core.convert.Convert; import cn.lili.common.cache.Cache; import cn.lili.common.cache.CachePrefix; import cn.lili.common.utils.BeanUtil; -import cn.lili.common.utils.DateUtil; import cn.lili.modules.statistics.model.dos.PlatformViewData; import cn.lili.modules.statistics.service.PlatformViewDataService; import cn.lili.timetask.handler.EveryDayExecute; @@ -29,10 +28,14 @@ import java.util.List; @Slf4j @Component public class PageViewStatisticsExecute implements EveryDayExecute { - //缓存 + /** + * 缓存 + */ @Autowired private Cache cache; - //平台PV统计 + /** + * 平台PV统计 + */ @Autowired private PlatformViewDataService platformViewDataService; diff --git a/consumer/src/main/java/cn/lili/trigger/AbstractDelayQueueListen.java b/consumer/src/main/java/cn/lili/trigger/AbstractDelayQueueListen.java index d76fcdaa..9ddf2435 100644 --- a/consumer/src/main/java/cn/lili/trigger/AbstractDelayQueueListen.java +++ b/consumer/src/main/java/cn/lili/trigger/AbstractDelayQueueListen.java @@ -79,6 +79,7 @@ public abstract class AbstractDelayQueueListen { /** * 要实现延时队列的名字 + * @return 促销延时队列名称 */ public abstract String setDelayQueueName(); @@ -88,7 +89,7 @@ public abstract class AbstractDelayQueueListen { */ @PostConstruct public void init() { - new Thread(this::startDelayQueueMachine).start(); + ThreadPoolUtil.getPool().execute(this::startDelayQueueMachine); } } diff --git a/consumer/src/main/java/cn/lili/trigger/executor/PromotionTimeTriggerExecutor.java b/consumer/src/main/java/cn/lili/trigger/executor/PromotionTimeTriggerExecutor.java index 5abd9433..ddb90e51 100644 --- a/consumer/src/main/java/cn/lili/trigger/executor/PromotionTimeTriggerExecutor.java +++ b/consumer/src/main/java/cn/lili/trigger/executor/PromotionTimeTriggerExecutor.java @@ -25,16 +25,24 @@ import org.springframework.stereotype.Component; @Slf4j @Component(TimeExecuteConstant.PROMOTION_EXECUTOR) public class PromotionTimeTriggerExecutor implements TimeTriggerExecutor { - //促销 + /** + * 促销 + */ @Autowired private PromotionService promotionService; - //Rocketmq + /** + * RocketMQ + */ @Autowired private RocketmqCustomProperties rocketmqCustomProperties; - //延时任务 + /** + * 延时任务 + */ @Autowired private TimeTrigger timeTrigger; - //订单 + /** + * 订单 + */ @Autowired private OrderService orderService; diff --git a/framework/pom.xml b/framework/pom.xml index ba3991db..ded46f47 100644 --- a/framework/pom.xml +++ b/framework/pom.xml @@ -7,53 +7,13 @@ cn.lili lili-shop-parent - 4.2.0 + ${revision} + ../pom.xml framework jar - - 1.9.6 - 4.13.40.ALL - 5.1.48 - 3.3.1.tmp - 5.5.8 - 2.0.3.RELEASE - 3.0.0 - 2.9.10 - 1.18.10 - 6.0.11 - 4.5.18 - 3.11.1 - 2.0.1 - 2.1.1 - 0.10.7 - 4.7.2 - 4.0.0 - 1.1.20 - 1.0.3 - 4.7.2 - 4.4.1 - 4.5.12 - 2.9.10 - UTF-8 - UTF-8 - 1.8 - true - 2.0.8 - 2.3.1 - 1.21 - 1.2 - 4.1.2 - 4.1.2 - 6.6 - 3.4.1 - 1.7.28 - 2.2.0 - 1.4 - - org.springframework.boot diff --git a/framework/src/main/java/cn/lili/common/aop/limiter/LimitInterceptor.java b/framework/src/main/java/cn/lili/common/aop/limiter/LimitInterceptor.java index 2e625ef9..f6e5397d 100644 --- a/framework/src/main/java/cn/lili/common/aop/limiter/LimitInterceptor.java +++ b/framework/src/main/java/cn/lili/common/aop/limiter/LimitInterceptor.java @@ -75,10 +75,15 @@ public class LimitInterceptor { } - //默认unknown常量值 + /** + * 默认unknown常量值 + */ private static final String UNKNOWN = "unknown"; - //获取ip + /** + * 获取ip + * @return ip + */ public String getIpAddress() { HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); String ip = request.getHeader("x-forwarded-for"); diff --git a/framework/src/main/java/cn/lili/common/aop/syslog/interceptor/SystemLogAspect.java b/framework/src/main/java/cn/lili/common/aop/syslog/interceptor/SystemLogAspect.java index ea814963..aec4771b 100644 --- a/framework/src/main/java/cn/lili/common/aop/syslog/interceptor/SystemLogAspect.java +++ b/framework/src/main/java/cn/lili/common/aop/syslog/interceptor/SystemLogAspect.java @@ -7,7 +7,7 @@ import cn.lili.common.security.enums.UserEnums; import cn.lili.common.utils.IpHelper; import cn.lili.common.utils.SpelUtil; import cn.lili.common.utils.ThreadPoolUtil; -import cn.lili.modules.base.entity.systemlog.SystemLogVO; +import cn.lili.modules.permission.entity.vo.SystemLogVO; import cn.lili.modules.connect.util.IpUtils; import cn.lili.modules.permission.service.SystemLogService; import lombok.extern.slf4j.Slf4j; @@ -39,7 +39,7 @@ public class SystemLogAspect { /** * 启动线程异步记录日志 */ - private static final ThreadLocal beginTimeThreadLocal = new NamedThreadLocal<>("SYSTEM-LOG"); + private static final ThreadLocal BEGIN_TIME_THREAD_LOCAL = new NamedThreadLocal<>("SYSTEM-LOG"); @Autowired private SystemLogService systemLogService; @@ -61,7 +61,7 @@ public class SystemLogAspect { */ @Before("controllerAspect()") public void doBefore() { - beginTimeThreadLocal.set(new Date()); + BEGIN_TIME_THREAD_LOCAL.set(new Date()); } @@ -110,7 +110,7 @@ public class SystemLogAspect { //写入自定义日志内容 systemLogVO.setCustomerLog(customerLog); //请求开始时间 - long beginTime = beginTimeThreadLocal.get().getTime(); + long beginTime = BEGIN_TIME_THREAD_LOCAL.get().getTime(); long endTime = System.currentTimeMillis(); //请求耗时 Long usedTime = endTime - beginTime; @@ -157,7 +157,7 @@ public class SystemLogAspect { */ private static Map spelFormat(JoinPoint joinPoint, Object rvt) { - Map result = new HashMap<>(); + Map result = new HashMap<>(2); MethodSignature signature = (MethodSignature) joinPoint.getSignature(); SystemLogPoint systemLogPoint = signature.getMethod().getAnnotation(SystemLogPoint.class); String description = systemLogPoint.description(); diff --git a/framework/src/main/java/cn/lili/common/cache/Cache.java b/framework/src/main/java/cn/lili/common/cache/Cache.java index e2c86a7c..25d919ce 100644 --- a/framework/src/main/java/cn/lili/common/cache/Cache.java +++ b/framework/src/main/java/cn/lili/common/cache/Cache.java @@ -164,6 +164,7 @@ public interface Cache { * 如需清零,按照普通key 移除即可 * * @param key + * @param value * @return */ Long cumulative(Object key, Object value); diff --git a/framework/src/main/java/cn/lili/common/cache/CachePrefix.java b/framework/src/main/java/cn/lili/common/cache/CachePrefix.java index e2734e35..925766b1 100644 --- a/framework/src/main/java/cn/lili/common/cache/CachePrefix.java +++ b/framework/src/main/java/cn/lili/common/cache/CachePrefix.java @@ -454,25 +454,39 @@ public enum CachePrefix { /** * 店铺分类 */ - STORE_CATEGORY - ; + STORE_CATEGORY; public static String removePrefix(String str) { return str.substring(str.lastIndexOf("}_") + 2); } - //通用获取缓存key值 + /** + * 通用获取缓存key值 + * + * @return 缓存key值 + */ public String getPrefix() { return "{" + this.name() + "}_"; } - //通用获取缓存key值 + /** + * 通用获取缓存key值 + * + * @param typeEnum 促销枚举 + * @return 缓存key值 + */ public String getPrefix(PromotionTypeEnum typeEnum) { return "{" + this.name() + "_" + typeEnum.name() + "}_"; } - //获取缓存key值 + 用户端,例如:三端都有用户体系,需要分别登录,如果用户名一致,则redis中的权限可能会冲突出错 + /** + * 获取缓存key值 + 用户端 + * 例如:三端都有用户体系,需要分别登录,如果用户名一致,则redis中的权限可能会冲突出错 + * + * @param user 角色 + * @return 缓存key值 + 用户端 + */ public String getPrefix(UserEnums user) { return "{" + this.name() + "_" + user.name() + "}_"; } diff --git a/framework/src/main/java/cn/lili/common/cache/impl/RedisCache.java b/framework/src/main/java/cn/lili/common/cache/impl/RedisCache.java index 85ca4838..ef331665 100644 --- a/framework/src/main/java/cn/lili/common/cache/impl/RedisCache.java +++ b/framework/src/main/java/cn/lili/common/cache/impl/RedisCache.java @@ -160,7 +160,7 @@ public class RedisCache implements Cache { return null; } catch (IOException e) { - log.error("scan错误",e); + log.error("scan错误", e); throw new RuntimeException(e); } }); @@ -206,8 +206,8 @@ public class RedisCache implements Cache { public Long incr(String key, long liveTime) { RedisAtomicLong entityIdCounter = new RedisAtomicLong(key, redisTemplate.getConnectionFactory()); Long increment = entityIdCounter.getAndIncrement(); - - if ((null == increment || increment.longValue() == 0) && liveTime > 0) {//初始设置过期时间 + //初始设置过期时间 + if ((null == increment || increment.longValue() == 0) && liveTime > 0) { entityIdCounter.expire(liveTime, TimeUnit.SECONDS); } @@ -254,8 +254,7 @@ public class RedisCache implements Cache { */ @Override public boolean zAdd(String key, long score, String value) { - Boolean result = redisTemplate.opsForZSet().add(key, value, score); - return result; + return redisTemplate.opsForZSet().add(key, value, score); } diff --git a/framework/src/main/java/cn/lili/common/elasticsearch/BaseElasticsearchService.java b/framework/src/main/java/cn/lili/common/elasticsearch/BaseElasticsearchService.java index b5cbfe4e..a133da67 100644 --- a/framework/src/main/java/cn/lili/common/elasticsearch/BaseElasticsearchService.java +++ b/framework/src/main/java/cn/lili/common/elasticsearch/BaseElasticsearchService.java @@ -308,13 +308,6 @@ public abstract class BaseElasticsearchService { PutMappingRequest request = new PutMappingRequest(index) .source(source, XContentType.JSON); -// AcknowledgedResponse putMappingResponse = client.indices().putMapping(request, -// RequestOptions.DEFAULT); -// -// boolean acknowledged = putMappingResponse.isAcknowledged(); -// if (acknowledged) { -// log.error("Succeed to put mapping"); -// } CountDownLatch latch = new CountDownLatch(1); AtomicReference response = new AtomicReference(); client.indices().putMappingAsync( diff --git a/framework/src/main/java/cn/lili/common/enums/ResultCode.java b/framework/src/main/java/cn/lili/common/enums/ResultCode.java index 0abbff9c..e6d82ad5 100644 --- a/framework/src/main/java/cn/lili/common/enums/ResultCode.java +++ b/framework/src/main/java/cn/lili/common/enums/ResultCode.java @@ -34,8 +34,9 @@ public enum ResultCode { */ WECHAT_CONNECT_NOT_EXIST(1001, "微信联合登录未配置"), VERIFICATION_EXIST(1002, "验证码服务异常"), - LIMIT_ERROR(1003,"访问过于频繁,请稍后再试"), + LIMIT_ERROR(1003, "访问过于频繁,请稍后再试"), ILLEGAL_REQUEST_ERROR(1004, "非法请求,请重新刷新页面操作"), + IMAGE_FILE_EXT_ERROR(1005, "不支持图片格式"), /** * 分类 */ @@ -49,6 +50,7 @@ public enum ResultCode { CATEGORY_PARAMETER_SAVE_ERROR(10008, "分类绑定参数组添加失败"), CATEGORY_PARAMETER_UPDATE_ERROR(10009, "分类绑定参数组添加失败"), CATEGORY_DELETE_FLAG_ERROR(10010, "子类状态不能与父类不一致!"), + CATEGORY_COMMISSION_RATE_ERROR(10011, "分类的佣金不正确!"), /** * 商品 @@ -66,10 +68,10 @@ public enum ResultCode { GOODS_SKU_WEIGHT_ERROR(11010, "商品重量不能为负数"), GOODS_SKU_QUANTITY_ERROR(11011, "商品库存数量不能为负数"), GOODS_SKU_QUANTITY_NOT_ENOUGH(11011, "商品库存不足"), - MUST_HAVE_GOODS_SKU(11012,"规格必须要有一个!"), - GOODS_PARAMS_ERROR(11013,"商品参数错误,刷新后重试"), - PHYSICAL_GOODS_NEED_TEMP(11014,"实物商品需选择配送模板"), - VIRTUAL_GOODS_NOT_NEED_TEMP(11015,"实物商品需选择配送模板"), + MUST_HAVE_GOODS_SKU(11012, "规格必须要有一个!"), + GOODS_PARAMS_ERROR(11013, "商品参数错误,刷新后重试"), + PHYSICAL_GOODS_NEED_TEMP(11014, "实物商品需选择配送模板"), + VIRTUAL_GOODS_NOT_NEED_TEMP(11015, "实物商品需选择配送模板"), GOODS_TYPE_ERROR(11016, "需选择商品类型"), /** @@ -118,10 +120,10 @@ public enum ResultCode { USER_COLLECTION_EXIST(20017, "无法重复收藏"), USER_GRADE_IS_DEFAULT(20018, "会员等级为默认会员等级"), DELETE_EXIST(20019, "无法重复收藏"), - USER_NOT_BINDING(20020,"未绑定用户"), - USER_AUTO_REGISTER_ERROR(20021,"自动注册失败,请稍后重试"), - USER_OVERDUE_CONNECT_ERROR(20022,"授权信息已过期,请重新授权/登录"), - USER_CONNECT_BANDING_ERROR(20023,"当前联合登陆方式,已绑定其他账号,需进行解绑操作"), + USER_NOT_BINDING(20020, "未绑定用户"), + USER_AUTO_REGISTER_ERROR(20021, "自动注册失败,请稍后重试"), + USER_OVERDUE_CONNECT_ERROR(20022, "授权信息已过期,请重新授权/登录"), + USER_CONNECT_BANDING_ERROR(20023, "当前联合登陆方式,已绑定其他账号,需进行解绑操作"), USER_CONNECT_NOT_EXIST_ERROR(20024, "暂无联合登陆信息,无法实现一键注册功能,请点击第三方登录进行授权"), /** @@ -276,47 +278,47 @@ public enum ResultCode { PINTUAN_DELETE_ERROR(42010, "删除拼团活动失败"), PINTUAN_JOIN_ERROR(42011, "不能参与自己发起的拼团活动!"), PINTUAN_LIMIT_NUM_ERROR(42012, "购买数量超过拼团活动限制数量!"), - PINTUAN_NOT_EXIST_ERROR(42013,"当前拼团商品不存在!"), + PINTUAN_NOT_EXIST_ERROR(42013, "当前拼团商品不存在!"), /** * 满额活动 */ FULL_DISCOUNT_EDIT_SUCCESS(43001, "修改满优惠活动成功"), FULL_DISCOUNT_EDIT_DELETE(43002, "删除满优惠活动成功"), - FULL_DISCOUNT_MODIFY_ERROR(43003,"当前编辑的满优惠活动已经开始或者已经结束,无法修改"), - FULL_DISCOUNT_NOT_EXIST_ERROR(43004,"当前要操作的满优惠活动不存在!"), - FULL_DISCOUNT_WAY_ERROR(43005,"请选择一种优惠方式!"), - FULL_DISCOUNT_GIFT_ERROR(43006,"请选择赠品!"), - FULL_DISCOUNT_COUPON_TIME_ERROR(43007,"赠送的优惠券有效时间必须大于活动时间"), - FULL_DISCOUNT_MONEY_ERROR(43008,"请填写满减金额"), - FULL_DISCOUNT_MONEY_GREATER_THAN_MINUS(43009,"满减金额不能大于优惠门槛"), - FULL_RATE_NUM_ERROR(43010,"请填写打折数值"), + FULL_DISCOUNT_MODIFY_ERROR(43003, "当前编辑的满优惠活动已经开始或者已经结束,无法修改"), + FULL_DISCOUNT_NOT_EXIST_ERROR(43004, "当前要操作的满优惠活动不存在!"), + FULL_DISCOUNT_WAY_ERROR(43005, "请选择一种优惠方式!"), + FULL_DISCOUNT_GIFT_ERROR(43006, "请选择赠品!"), + FULL_DISCOUNT_COUPON_TIME_ERROR(43007, "赠送的优惠券有效时间必须大于活动时间"), + FULL_DISCOUNT_MONEY_ERROR(43008, "请填写满减金额"), + FULL_DISCOUNT_MONEY_GREATER_THAN_MINUS(43009, "满减金额不能大于优惠门槛"), + FULL_RATE_NUM_ERROR(43010, "请填写打折数值"), /** * 直播 */ - STODIO_GOODS_EXIST_ERROR(44001,"直播商品已存在"), - COMMODITY_ERROR(44002,"添加直播商品失败"), + STODIO_GOODS_EXIST_ERROR(44001, "直播商品已存在"), + COMMODITY_ERROR(44002, "添加直播商品失败"), /** * 秒杀 */ - SECKILL_NOT_EXIST_ERROR(45001,"当前参与的秒杀活动不存在!"), - SECKILL_UPDATE_ERROR(45002,"当前秒杀活动活动已经开始,无法修改!"), - SECKILL_PRICE_ERROR(45003,"活动价格不能大于商品原价"), - SECKILL_TIME_ERROR(45004,"时刻参数异常"), - SECKILL_DELETE_ERROR(45005,"该秒杀活动活动的状态不能删除"), - SECKILL_CLOSE_ERROR(45006,"该秒杀活动活动的状态不能关闭"), + SECKILL_NOT_EXIST_ERROR(45001, "当前参与的秒杀活动不存在!"), + SECKILL_UPDATE_ERROR(45002, "当前秒杀活动活动已经开始,无法修改!"), + SECKILL_PRICE_ERROR(45003, "活动价格不能大于商品原价"), + SECKILL_TIME_ERROR(45004, "时刻参数异常"), + SECKILL_DELETE_ERROR(45005, "该秒杀活动活动的状态不能删除"), + SECKILL_CLOSE_ERROR(45006, "该秒杀活动活动的状态不能关闭"), /** * 优惠券活动 */ - COUPON_ACTIVITY_START_TIME_ERROR(46001,"活动时间小于当前时间,不能进行编辑删除操作"), - COUPON_ACTIVITY_MEMBER_ERROR(46002,"指定精准发券则必须指定会员,会员不可以为空"), - COUPON_ACTIVITY_ITEM_ERROR(46003,"优惠券活动必须指定优惠券,不能为空"), - COUPON_ACTIVITY_ITEM_MUST_NUM_ERROR(46004,"优惠券活动最多指定10个优惠券"), - COUPON_ACTIVITY_ITEM_NUM_ERROR(46005,"赠券数量必须大于0"), + COUPON_ACTIVITY_START_TIME_ERROR(46001, "活动时间小于当前时间,不能进行编辑删除操作"), + COUPON_ACTIVITY_MEMBER_ERROR(46002, "指定精准发券则必须指定会员,会员不可以为空"), + COUPON_ACTIVITY_ITEM_ERROR(46003, "优惠券活动必须指定优惠券,不能为空"), + COUPON_ACTIVITY_ITEM_MUST_NUM_ERROR(46004, "优惠券活动最多指定10个优惠券"), + COUPON_ACTIVITY_ITEM_NUM_ERROR(46005, "赠券数量必须大于0"), /** * 其他促销 @@ -381,9 +383,9 @@ public enum ResultCode { ALIPAY_NOT_SETTING(70002, "支付宝支付未配置"), ALIPAY_EXCEPTION(70003, "支付宝支付错误,请稍后重试"), ALIPAY_PARAMS_EXCEPTION(70004, "支付宝参数异常"), - LOGISTICS_NOT_SETTING(70005,"您还未配置快递查询"), - ORDER_SETTING_ERROR(70006,"系统订单配置异常"), - ALI_SMS_SETTING_ERROR(70007,"您还未配置阿里云短信"), + LOGISTICS_NOT_SETTING(70005, "您还未配置快递查询"), + ORDER_SETTING_ERROR(70006, "系统订单配置异常"), + ALI_SMS_SETTING_ERROR(70007, "您还未配置阿里云短信"), SMS_SIGN_EXIST_ERROR(70008, "短信签名已存在"), /** @@ -416,10 +418,10 @@ public enum ResultCode { WECHAT_PAYMENT_NOT_SETTING(80301, "微信支付信息未配置"), WECHAT_QRCODE_ERROR(80302, "微信二维码生成异常"), WECHAT_MP_MESSAGE_ERROR(80303, "微信小程序小消息订阅异常"), - WECHAT_JSAPI_SIGN_ERROR(80304,"微信JsApi签名异常"), - WECHAT_CERT_ERROR(80305,"证书获取失败"), - WECHAT_MP_MESSAGE_TMPL_ERROR(80306,"未能获取到微信模版消息id"), - WECHAT_ERROR(80307,"微信接口异常"), + WECHAT_JSAPI_SIGN_ERROR(80304, "微信JsApi签名异常"), + WECHAT_CERT_ERROR(80305, "证书获取失败"), + WECHAT_MP_MESSAGE_TMPL_ERROR(80306, "未能获取到微信模版消息id"), + WECHAT_ERROR(80307, "微信接口异常"), APP_VERSION_EXIST(80307, "APP版本已存在"), /** @@ -427,8 +429,8 @@ public enum ResultCode { */ CUSTOM_WORDS_EXIST_ERROR(90000, "当前自定义分词已存在!"), CUSTOM_WORDS_NOT_EXIST_ERROR(90001, "当前自定义分词不存在!"), - CUSTOM_WORDS_SECRET_KEY_ERROR(90002, "秘钥验证失败!"), - CONNECT_NOT_EXIST(90000,"登录方式不存在"), + CUSTOM_WORDS_SECRET_KEY_ERROR(90002, "秘钥验证失败!"), + CONNECT_NOT_EXIST(90000, "登录方式不存在"), ; diff --git a/framework/src/main/java/cn/lili/common/enums/ResultUtil.java b/framework/src/main/java/cn/lili/common/enums/ResultUtil.java index 10f70a77..b4883e5a 100644 --- a/framework/src/main/java/cn/lili/common/enums/ResultUtil.java +++ b/framework/src/main/java/cn/lili/common/enums/ResultUtil.java @@ -56,7 +56,12 @@ public class ResultUtil { } - //抽象静态方法,返回结果集 + /** + * 抽象静态方法,返回结果集 + * @param t + * @param + * @return + */ public static ResultMessage data(T t) { return new ResultUtil().setData(t); } diff --git a/framework/src/main/java/cn/lili/common/exception/ServiceException.java b/framework/src/main/java/cn/lili/common/exception/ServiceException.java index 4f652afd..20e856f0 100644 --- a/framework/src/main/java/cn/lili/common/exception/ServiceException.java +++ b/framework/src/main/java/cn/lili/common/exception/ServiceException.java @@ -13,10 +13,14 @@ public class ServiceException extends RuntimeException { public static String DEFAULT_MESSAGE = "网络错误,请稍后重试!"; - //异常消息 + /** + * 异常消息 + */ private String msg = DEFAULT_MESSAGE; - //错误码 + /** + * 错误码 + */ private ResultCode resultCode; public ServiceException(String msg) { diff --git a/framework/src/main/java/cn/lili/common/rocketmq/tags/AfterSaleTagsEnum.java b/framework/src/main/java/cn/lili/common/rocketmq/tags/AfterSaleTagsEnum.java index 98322812..b668ee79 100644 --- a/framework/src/main/java/cn/lili/common/rocketmq/tags/AfterSaleTagsEnum.java +++ b/framework/src/main/java/cn/lili/common/rocketmq/tags/AfterSaleTagsEnum.java @@ -1,12 +1,20 @@ package cn.lili.common.rocketmq.tags; /** + * 售后标签枚举 + * * @author paulG * @since 2020/12/9 **/ public enum AfterSaleTagsEnum { + /** + * "售后退款" + */ REFUND("售后退款"), + /** + * "售后单状态改变" + */ AFTER_SALE_STATUS_CHANGE("售后单状态改变"); private final String description; diff --git a/framework/src/main/java/cn/lili/common/rocketmq/tags/GoodsTagsEnum.java b/framework/src/main/java/cn/lili/common/rocketmq/tags/GoodsTagsEnum.java index 0a7f3a39..f4dbd25b 100644 --- a/framework/src/main/java/cn/lili/common/rocketmq/tags/GoodsTagsEnum.java +++ b/framework/src/main/java/cn/lili/common/rocketmq/tags/GoodsTagsEnum.java @@ -6,13 +6,37 @@ package cn.lili.common.rocketmq.tags; **/ public enum GoodsTagsEnum { + /** + * "生成商品索引" + */ GENERATOR_GOODS_INDEX("生成商品索引"), + /** + * "删除商品" + */ GOODS_DELETE("删除商品"), + /** + * "审核商品" + */ GOODS_AUDIT("审核商品"), + /** + * "收藏商品" + */ GOODS_COLLECTION("收藏商品"), + /** + * "购买商品完成" + */ BUY_GOODS_COMPLETE("购买商品完成"), + /** + * "删除商品SKU" + */ SKU_DELETE("删除商品SKU"), + /** + * "查看商品" + */ VIEW_GOODS("查看商品"), + /** + * "商品评价" + */ GOODS_COMMENT_COMPLETE("商品评价"); private final String description; diff --git a/framework/src/main/java/cn/lili/common/rocketmq/tags/MemberTagsEnum.java b/framework/src/main/java/cn/lili/common/rocketmq/tags/MemberTagsEnum.java index 1b26b23b..88fb01fe 100644 --- a/framework/src/main/java/cn/lili/common/rocketmq/tags/MemberTagsEnum.java +++ b/framework/src/main/java/cn/lili/common/rocketmq/tags/MemberTagsEnum.java @@ -1,14 +1,27 @@ package cn.lili.common.rocketmq.tags; /** + * 会员操作枚举 + * * @author paulG * @since 2020/12/9 **/ public enum MemberTagsEnum { - + /** + * 会员注册 + */ MEMBER_REGISTER("会员注册"), + /** + * 会员签到 + */ MEMBER_SING("会员签到"), + /** + * 会员提现 + */ MEMBER_WITHDRAWAL("会员提现"), + /** + * 会员积分变动 + */ MEMBER_POINT_CHANGE("会员积分变动"); private final String description; diff --git a/framework/src/main/java/cn/lili/common/rocketmq/tags/MqOrderTagsEnum.java b/framework/src/main/java/cn/lili/common/rocketmq/tags/MqOrderTagsEnum.java index baf6bdf6..fde73145 100644 --- a/framework/src/main/java/cn/lili/common/rocketmq/tags/MqOrderTagsEnum.java +++ b/framework/src/main/java/cn/lili/common/rocketmq/tags/MqOrderTagsEnum.java @@ -1,18 +1,23 @@ package cn.lili.common.rocketmq.tags; /** + * 订单操作枚举 + * * @author paulG * @since 2020/12/9 **/ public enum MqOrderTagsEnum { - + /** + * 订单创建 + */ ORDER_CREATE("订单创建"), + /** + * 订单状态改变 + */ STATUS_CHANGE("订单状态改变"); - - private final String description; MqOrderTagsEnum(String description) { diff --git a/framework/src/main/java/cn/lili/common/rocketmq/tags/OtherTagsEnum.java b/framework/src/main/java/cn/lili/common/rocketmq/tags/OtherTagsEnum.java index 91e9dcf3..6117c636 100644 --- a/framework/src/main/java/cn/lili/common/rocketmq/tags/OtherTagsEnum.java +++ b/framework/src/main/java/cn/lili/common/rocketmq/tags/OtherTagsEnum.java @@ -1,12 +1,19 @@ package cn.lili.common.rocketmq.tags; /** + * 其他操作枚举 + * * @author paulG * @since 2020/12/9 **/ public enum OtherTagsEnum { - + /** + * 站内消息提醒 + */ MESSAGE("站内消息提醒"), + /** + * 短信消息提醒 + */ SMS("短信消息提醒"); private final String description; diff --git a/framework/src/main/java/cn/lili/common/security/context/UserContext.java b/framework/src/main/java/cn/lili/common/security/context/UserContext.java index f3c072ee..af1c4623 100644 --- a/framework/src/main/java/cn/lili/common/security/context/UserContext.java +++ b/framework/src/main/java/cn/lili/common/security/context/UserContext.java @@ -9,6 +9,10 @@ import cn.lili.common.token.SecretKeyUtil; import com.google.gson.Gson; import io.jsonwebtoken.Claims; import io.jsonwebtoken.Jwts; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.servlet.http.HttpServletRequest; /** * 用户上下文 @@ -20,15 +24,18 @@ import io.jsonwebtoken.Jwts; */ public class UserContext { - private static AuthenticationHandler authenticationHandler; - - public static void setHolder(AuthenticationHandler authenticationHandler) { - UserContext.authenticationHandler = authenticationHandler; - } - - + /** + * 根据request获取用户信息 + * + * @return + */ public static AuthUser getCurrentUser() { - return authenticationHandler.getAuthUser(); + if (RequestContextHolder.getRequestAttributes() != null) { + HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); + String accessToken = request.getHeader(SecurityEnum.HEADER_TOKEN.getValue()); + return getAuthUser(accessToken); + } + return null; } @@ -44,6 +51,20 @@ public class UserContext { if (cache.keys("*" + accessToken).size() == 0) { throw new ServiceException(ResultCode.USER_AUTHORITY_ERROR); } + return getAuthUser(accessToken); + } catch (Exception e) { + return null; + } + } + + /** + * 根据jwt获取token重的用户信息 + * + * @param accessToken token + * @return + */ + public static AuthUser getAuthUser(String accessToken) { + try { //获取token的信息 Claims claims = Jwts.parser() diff --git a/framework/src/main/java/cn/lili/common/security/context/UserContextInit.java b/framework/src/main/java/cn/lili/common/security/context/UserContextInit.java index a214eb60..f6dbaa1d 100644 --- a/framework/src/main/java/cn/lili/common/security/context/UserContextInit.java +++ b/framework/src/main/java/cn/lili/common/security/context/UserContextInit.java @@ -31,6 +31,6 @@ public class UserContextInit implements ApplicationRunner { */ @Override public void run(ApplicationArguments args) { - UserContext.setHolder(authenticationHandler); + //UserContext.setHolder(authenticationHandler); } } diff --git a/framework/src/main/java/cn/lili/common/security/filter/XssHttpServletRequestWrapper.java b/framework/src/main/java/cn/lili/common/security/filter/XssHttpServletRequestWrapper.java index cdc533e4..ce6fbca2 100644 --- a/framework/src/main/java/cn/lili/common/security/filter/XssHttpServletRequestWrapper.java +++ b/framework/src/main/java/cn/lili/common/security/filter/XssHttpServletRequestWrapper.java @@ -15,6 +15,10 @@ import java.util.regex.Pattern; public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper { private HttpServletRequest request; + + + + public XssHttpServletRequestWrapper(HttpServletRequest request) { super(request); this.request = request; @@ -90,46 +94,38 @@ public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper { return value; } + + private static final Pattern SCRIPT_PATTERN1 = Pattern.compile("", Pattern.CASE_INSENSITIVE); + private static final Pattern SCRIPT_PATTERN2 = Pattern.compile("", Pattern.CASE_INSENSITIVE); + private static final Pattern SCRIPT_PATTERN3 = Pattern.compile("", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL); + private static final Pattern SCRIPT_PATTERN4 = Pattern.compile("javascript:", Pattern.CASE_INSENSITIVE); + private static final Pattern SRC_PATTERN = Pattern.compile("src[\r\n]*=[\r\n]*\\\'(.*?)\\\'", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL); + private static final Pattern EVAL_PATTERN = Pattern.compile("eval\\((.*?)\\)", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL); + private static final Pattern E_­_XPRESSION_PATTERN = Pattern.compile("e­xpression\\((.*?)\\)", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL); + private static final Pattern VB_SCRIPT_PATTERN = Pattern.compile("vbscript:", Pattern.CASE_INSENSITIVE); + private static final Pattern ONLOAD_PATTERN = Pattern.compile("onload(.*?)=", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL); + private String cleanXSS(String value) { if (value != null) { //推荐使用ESAPI库来避免脚本攻击,value = ESAPI.encoder().canonicalize(value); -// //避免空字符串 -// value = value.replaceAll(" ", ""); //避免script 标签 - Pattern scriptPattern = Pattern.compile("", Pattern.CASE_INSENSITIVE); - value = scriptPattern.matcher(value).replaceAll(""); - //避免src形式的表达式 - scriptPattern = Pattern.compile("src[\r\n]*=[\r\n]*\\\'(.*?)\\\'", - Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL); - value = scriptPattern.matcher(value).replaceAll(""); - scriptPattern = Pattern.compile("src[\r\n]*=[\r\n]*\\\"(.*?)\\\"", - Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL); - value = scriptPattern.matcher(value).replaceAll(""); + value = SCRIPT_PATTERN1.matcher(value).replaceAll(""); //删除单个的 标签 - scriptPattern = Pattern.compile("", Pattern.CASE_INSENSITIVE); - value = scriptPattern.matcher(value).replaceAll(""); + value = SCRIPT_PATTERN2.matcher(value).replaceAll(""); //删除单个的