diff --git a/.gitignore b/.gitignore index 6d9167f5..d7370a10 100644 --- a/.gitignore +++ b/.gitignore @@ -10,6 +10,7 @@ target .factorypath log/ +logs/ *.factorypath lili-shop/src/main/java/cn/lili/generator/CodeGenerator.java lili-logs diff --git a/DB/README.md b/DB/README.md index d65fbd1c..da94b706 100644 --- a/DB/README.md +++ b/DB/README.md @@ -1,3 +1,6 @@ ## PS:数据库位置 点击跳转 https://gitee.com/beijing_hongye_huicheng/docker/tree/master/init/mysql 这里有与tag版本一致的sql,根据tag获取sql,如果使用master代码,则需要在lilishop项目根目录的update-sql目录中,获取对应的升级sql。 + + +使用master分支代码时,可能会无法运行,执行完初始化sql之后需要执行当前目录下'versiontXXXXtoMASTER.sql'。 \ No newline at end of file diff --git a/DB/version4.2.3toMASTER.sql b/DB/version4.2.3toMASTER.sql new file mode 100644 index 00000000..a9eeb7ee --- /dev/null +++ b/DB/version4.2.3toMASTER.sql @@ -0,0 +1,56 @@ +/** 新增已退货数量 **/ +ALTER TABLE li_order_item ADD return_goods_number int DEFAULT 0 COMMENT '退货数量 '; + + +-- 促销重构sql +ALTER TABLE li_coupon DROP COLUMN promotion_status; + +ALTER TABLE li_coupon_activity DROP COLUMN promotion_status; +ALTER TABLE li_coupon_activity ADD `scope_id` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '范围关联的ID'; +ALTER TABLE li_coupon_activity ADD `scope_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT 'PORTION_GOODS' COMMENT '关联范围类型'; + +ALTER TABLE li_full_discount DROP COLUMN promotion_status; +ALTER TABLE li_full_discount ADD `scope_id` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT '范围关联的ID'; +ALTER TABLE li_full_discount ADD `scope_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT 'PORTION_GOODS' COMMENT '关联范围类型'; + +ALTER TABLE li_kanjia_activity_goods DROP COLUMN promotion_status; +ALTER TABLE li_kanjia_activity_goods ADD `scope_id` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT '范围关联的ID'; +ALTER TABLE li_kanjia_activity_goods ADD `scope_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT 'PORTION_GOODS' COMMENT '关联范围类型'; +ALTER TABLE li_kanjia_activity_goods ADD `goods_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL; + +ALTER TABLE li_pintuan DROP COLUMN promotion_status; +ALTER TABLE li_pintuan ADD `scope_id` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT '范围关联的ID'; +ALTER TABLE li_pintuan ADD `scope_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT 'PORTION_GOODS' COMMENT '关联范围类型'; + +ALTER TABLE li_points_goods DROP COLUMN promotion_status; +ALTER TABLE li_points_goods ADD `scope_id` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT '范围关联的ID'; +ALTER TABLE li_points_goods ADD `scope_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT 'PORTION_GOODS' COMMENT '关联范围类型'; +ALTER TABLE li_points_goods ADD `original_price` double(10,2) DEFAULT NULL COMMENT '原价'; +ALTER TABLE li_points_goods ADD `thumbnail` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '缩略图'; +ALTER TABLE li_points_goods ADD `goods_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '商品编号'; +ALTER TABLE li_points_goods ADD `goods_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '货品名称'; + +ALTER TABLE li_promotion_goods DROP COLUMN promotion_status; +ALTER TABLE li_promotion_goods ADD `scope_id` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT '范围关联的ID'; +ALTER TABLE li_promotion_goods ADD `scope_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT 'PORTION_GOODS' COMMENT '关联范围类型'; +ALTER TABLE li_promotion_goods ADD `original_price` double(10,2) DEFAULT NULL COMMENT '原价'; +ALTER TABLE li_promotion_goods ADD `points` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '兑换积分'; +ALTER TABLE li_promotion_goods ADD `goods_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '商品编号'; + +ALTER TABLE li_seckill DROP COLUMN promotion_status; +ALTER TABLE li_seckill ADD `scope_id` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT '范围关联的ID'; +ALTER TABLE li_seckill ADD `scope_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT 'PORTION_GOODS' COMMENT '关联范围类型'; + +ALTER TABLE li_full_discount RENAME COLUMN is_coupon TO coupon_flag; +ALTER TABLE li_full_discount RENAME COLUMN is_free_freight TO free_freight_flag; +ALTER TABLE li_full_discount RENAME COLUMN is_full_minus TO full_minus_flag; +ALTER TABLE li_full_discount RENAME COLUMN is_full_rate TO full_rate_flag; +ALTER TABLE li_full_discount RENAME COLUMN is_gift TO gift_flag; +ALTER TABLE li_full_discount RENAME COLUMN is_point TO point_flag; + +ALTER TABLE li_member_coupon RENAME COLUMN is_platform TO platform_flag; + +ALTER TABLE li_goods RENAME COLUMN is_auth TO auth_flag; + +ALTER TABLE li_goods_sku RENAME COLUMN is_promotion TO promotion_flag; +ALTER TABLE li_goods_sku RENAME COLUMN is_auth TO auth_flag; diff --git a/README.md b/README.md index 6094762c..7707fe53 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ -## 🔥 Lilishop B2B2C商城系统 +## Lilishop B2B2C商城系统 -##### 🌹 开源不易,如有帮助请点Star +##### 开源不易,如有帮助请点Star @@ -20,51 +20,33 @@   ![github](https://img.shields.io/github/stars/hongyehuicheng/lilishop.svg?style=social&logo=#181717) -### 🔥 商城介绍 +### 商城介绍 **官网**:https://pickmall.cn Lilishop商城系统支持商家入驻,后端基于SpringBoot 研发,前端使用 Vue、uniapp开发, **系统全端全部代码开源** -商城前后端分离,支持分布式部署,各个API独立,并且有独立的消费者。 - -商城包含 会员模块、**第三方登录模块**、**第三方支付模块**、**楼层装修模块**、订单模块、商品模块、促销模块、分销模块、文章模块、系统设置模块、流量分析模块和平台运营模块 - -商城包含各种中间件、搜索引擎、多级缓存、分布式事务、分布式任务调度等,支持Docker,支持k8s。是一款高性能、支持分布式、支持扩展的商城系统。 +商城前后端分离,支持分布式部署,支持Docker,各个API独立,并且有独立的消费者。 ### 商城 API/消费者 聚合版 api不需要单独部署,只需启动一个jar包就可以正常运转 如有需要,可以点击跳转 https://gitee.com/beijing_hongye_huicheng/lilishop-simplify -### ☃️ 商城 开发/使用/常见问题 帮助文档 +### 商城 开发/使用/常见问题 帮助文档 https://docs.pickmall.cn -### 💧 开源商城项目地址(gitee) +### 项目地址 -**API(商城所有API)**:https://gitee.com/beijing_hongye_huicheng/lilishop.git +gitee : https://gitee.com/beijing_hongye_huicheng -**UI(平台管理端/商家端/买家PC端)**: https://gitee.com/beijing_hongye_huicheng/lilishop-ui.git +github 镜像: https://github.com/lilishop?tab=repositories -**uniapp(商城移动端,支持小程序/APP/H5)**:https://gitee.com/beijing_hongye_huicheng/lilishop-uniapp.git - -**docker一键部署(商城部署脚本)**:https://gitee.com/beijing_hongye_huicheng/docker.git - -### 💧 开源商城项目地址(github) - -**API(商城所有API)**:https://github.com/hongyehuicheng/lilishop.git - -**UI(平台管理端/商家端/买家PC端)**: https://github.com/hongyehuicheng/lilishop-ui.git - -**uniapp(商城移动端,支持小程序/APP/H5)**:https://github.com/hongyehuicheng/lilishop-uniapp.git - -**docker一键部署(商城部署脚本)**:https://github.com/hongyehuicheng/docker.git +商城UI 项目下3个文件夹 +buyer:买家PC端,seller:商家端,manager:后台管理端 - -☃️ UI 项目下3个文件夹 buyer:买家PC端,seller:商家端,manager:后台管理端 - - -### 💧 演示地址(手机验证码为 ‘111111’) +### 演示地址 +PS:手机验证码为 ‘111111’ **平台管理端**:https://admin-b2b2c.pickmall.cn 账号:admin/123456 @@ -72,88 +54,54 @@ https://docs.pickmall.cn **商城PC页面**:https://pc-b2b2c.pickmall.cn -**商城移动端(请使浏览器手机模式,或者用手机浏览器打开)**:https://m-b2b2c.pickmall.cn - -**商城 小程序/公众号/APP(支持ios、android)**:扫描二维码 +**商城 小程序/公众号/APP**:扫描二维码 ![image-20210511171611793](https://pickmall.cn/assets/imgs/h5-qrcode.png) -### 🚙 3行命令搭建本地商城(注:只能本机访问,前端镜像固定访问 127.0.0.1,如果是非本机体验,请自行下载源码操作镜像) +### 快速部署本地商城 -温馨提示:由于服务中间件较多,如果笔记本环境启动内存没有32g可能无法启动成功(macbookpro 2020 16g内存启动无法成功),台式机在16g内存、AMD 3700x 的ubuntu系统成功运行。 +[点击跳转](https://docs.pickmall.cn/deploy/%E8%BF%90%E8%A1%8C%E7%8E%AF%E5%A2%83%E5%87%86%E5%A4%87.html) -##### docker环境安装 [点击跳转](https://docs.pickmall.cn/deploy/%E8%BF%90%E8%A1%8C%E7%8E%AF%E5%A2%83%E5%87%86%E5%A4%87.html) +**商城数据库** +使用docker-compose部署数据库,自动初始化数据库,不需要手动下载等操作 -##### 下载docker-compose脚本 -`git clone https://gitee.com/beijing_hongye_huicheng/docker.git ` - -##### 部署商城所需中间件 -`docker-compose up -d` - -##### 部署商城应用 -`docker-compose -f docker-compose-application.yml up -d` - -PS:商城数据库非docker部署 -https://gitee.com/beijing_hongye_huicheng/docker/tree/master/init/mysql - -这里有与tag版本一致的sql,根据tag获取sql,如果使用master代码 - -##### 商城 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 | - -| 前端演示 | 地址 | -| -------------- | --------------- | -| 商城PC端 | http://127.0.0.1:10000 | -| 商城H5端 | http://127.0.0.1:10001 | -| 卖家端 | http://127.0.0.1:10002 | -| 平台管理端 | http://127.0.0.1:10003 | - -其他小程序/app等需自行打包。 +如果手动部署,才需要获取sql [点击跳转](https://gitee.com/beijing_hongye_huicheng/docker/tree/master/init/mysql) (PS:这里有与tag版本一致的sql,如果是历史版本,则docker项目也切换至历史版本获取sql即可,历史版本升级则根据java相聚的根目录DB目录下的升级sql,按需执行)。 -### ⚾️ 功能列表 +### 功能列表 -#### 🥎 平台管理端功能 +#### 平台管理端功能 ![平台管理端功能](https://pickmall.cn/assets/imgs/other/managerList.jpg) -#### 🥎 卖家功能 +#### 卖家功能 ![商家端功能](https://pickmall.cn/assets/imgs/other/storeList.jpg) +### 商城前端功能展示 - - -### 🧩 商城前端功能展示 - -#### ⚽️ 商城移动端 +#### 商城移动端 移动端功能展示 -#### ⚽️ 平台管理端 +#### 平台管理端 ![管理端功能展示](https://pickmall.cn/assets/imgs/other/manager.gif) ### 技术选型 -#### 🥅 架构图 +#### 架构图 ![技术选型](https://lili-system.oss-cn-beijing.aliyuncs.com/docs/%E6%9E%B6%E6%9E%84.png) -##### 🕹 后台技术选型 +##### 后台技术选型 | 说明 | 框架 | 说明 | | | -------------- | --------------- | -------------- | ------------- | @@ -167,7 +115,7 @@ https://gitee.com/beijing_hongye_huicheng/docker/tree/master/init/mysql | 短信 | 阿里云短信 | 认证 | JWT | | 日志处理 | Log4j | 接口规范 | RESTful | -##### 🖥 前端-运营后台、店铺后台 +##### 前端-运营后台、店铺后台 | 说明 | 框架 | 说明 | 框架 | | ---------- | ---------- | ---------- | ------- | @@ -177,14 +125,14 @@ https://gitee.com/beijing_hongye_huicheng/docker/tree/master/init/mysql | 基础UI库 | iView | UI界面基于 | iView | | 网络请求 | axios | | | -##### 📱前端-移动端 +##### 前端-移动端 | 说明 | 架构 | 说明 | 架构 | | --------- | ------- | -------- | ------- | | 基础UI库 | uViewui | 基础框架 | uni-app | | CSS预处理 | scss | 地图引擎 | amap | -### 🌟 版本升级 +### 版本升级 ``` 商城后续会持续版本升级,修复bug,完善功能,覆盖更多业务场景 o2o/b2b/s2b2b2c/跨境电商 @@ -193,7 +141,7 @@ https://gitee.com/beijing_hongye_huicheng/docker/tree/master/init/mysql ``` -### ⚠️ 开源须知 +### 开源须知 1.仅允许用于个人学习研究使用. 2.禁止将本开源的代码和资源进行任何形式任何名义的出售. @@ -203,7 +151,7 @@ https://gitee.com/beijing_hongye_huicheng/docker/tree/master/init/mysql 4.限制商用,如果需要商业使用请联系我们。QQ3409056806. -### 🐧 交流群 +### 交流群 ##### 官方qq 1群 961316482(已满) ##### 官方qq 2群 875294241 diff --git a/buyer-api/src/main/java/cn/lili/controller/other/distribution/DistributionBuyerController.java b/buyer-api/src/main/java/cn/lili/controller/distribution/DistributionBuyerController.java similarity index 98% rename from buyer-api/src/main/java/cn/lili/controller/other/distribution/DistributionBuyerController.java rename to buyer-api/src/main/java/cn/lili/controller/distribution/DistributionBuyerController.java index 2fb64782..c5332ed3 100644 --- a/buyer-api/src/main/java/cn/lili/controller/other/distribution/DistributionBuyerController.java +++ b/buyer-api/src/main/java/cn/lili/controller/distribution/DistributionBuyerController.java @@ -1,4 +1,4 @@ -package cn.lili.controller.other.distribution; +package cn.lili.controller.distribution; import cn.lili.common.enums.ResultUtil; import cn.lili.common.vo.ResultMessage; diff --git a/buyer-api/src/main/java/cn/lili/controller/other/distribution/DistributionCashBuyerController.java b/buyer-api/src/main/java/cn/lili/controller/distribution/DistributionCashBuyerController.java similarity index 88% rename from buyer-api/src/main/java/cn/lili/controller/other/distribution/DistributionCashBuyerController.java rename to buyer-api/src/main/java/cn/lili/controller/distribution/DistributionCashBuyerController.java index d27ee742..ceaef297 100644 --- a/buyer-api/src/main/java/cn/lili/controller/other/distribution/DistributionCashBuyerController.java +++ b/buyer-api/src/main/java/cn/lili/controller/distribution/DistributionCashBuyerController.java @@ -1,4 +1,4 @@ -package cn.lili.controller.other.distribution; +package cn.lili.controller.distribution; import cn.lili.common.enums.ResultCode; import cn.lili.common.enums.ResultUtil; @@ -13,6 +13,7 @@ import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; @@ -33,6 +34,7 @@ import javax.validation.constraints.NotNull; @RestController @Api(tags = "买家端,分销商品佣金提现接口") @RequestMapping("/buyer/distribution/cash") +@Validated public class DistributionCashBuyerController { /** @@ -52,10 +54,10 @@ public class DistributionCashBuyerController { @ApiImplicitParam(name = "price", value = "申请金额", required = true, paramType = "query", dataType = "double") }) @PostMapping - public ResultMessage cash(@Max(value = 1000, message = "提现金额单次最多允许提现1000元") + public ResultMessage cash(@Validated @Max(value = 9999, message = "提现金额单次最多允许提现9999元") @Min(value = 1, message = "提现金额单次最少提现金额为1元") @NotNull @ApiIgnore Double price) { - if (distributionCashService.cash(price)) { + if (Boolean.TRUE.equals(distributionCashService.cash(price))) { return ResultUtil.success(); } throw new ServiceException(ResultCode.ERROR); diff --git a/buyer-api/src/main/java/cn/lili/controller/other/distribution/DistributionGoodsBuyerController.java b/buyer-api/src/main/java/cn/lili/controller/distribution/DistributionGoodsBuyerController.java similarity index 98% rename from buyer-api/src/main/java/cn/lili/controller/other/distribution/DistributionGoodsBuyerController.java rename to buyer-api/src/main/java/cn/lili/controller/distribution/DistributionGoodsBuyerController.java index e1b73bed..8ce8e5d5 100644 --- a/buyer-api/src/main/java/cn/lili/controller/other/distribution/DistributionGoodsBuyerController.java +++ b/buyer-api/src/main/java/cn/lili/controller/distribution/DistributionGoodsBuyerController.java @@ -1,4 +1,4 @@ -package cn.lili.controller.other.distribution; +package cn.lili.controller.distribution; import cn.lili.common.enums.ResultCode; import cn.lili.common.enums.ResultUtil; diff --git a/buyer-api/src/main/java/cn/lili/controller/other/distribution/DistributionOrderBuyerController.java b/buyer-api/src/main/java/cn/lili/controller/distribution/DistributionOrderBuyerController.java similarity index 97% rename from buyer-api/src/main/java/cn/lili/controller/other/distribution/DistributionOrderBuyerController.java rename to buyer-api/src/main/java/cn/lili/controller/distribution/DistributionOrderBuyerController.java index 4ed20e94..4c7c3ddd 100644 --- a/buyer-api/src/main/java/cn/lili/controller/other/distribution/DistributionOrderBuyerController.java +++ b/buyer-api/src/main/java/cn/lili/controller/distribution/DistributionOrderBuyerController.java @@ -1,4 +1,4 @@ -package cn.lili.controller.other.distribution; +package cn.lili.controller.distribution; import cn.lili.common.enums.ResultUtil; import cn.lili.common.vo.ResultMessage; diff --git a/buyer-api/src/main/java/cn/lili/controller/member/MemberAddressBuyerController.java b/buyer-api/src/main/java/cn/lili/controller/member/MemberAddressBuyerController.java index d1763e88..16caae69 100644 --- a/buyer-api/src/main/java/cn/lili/controller/member/MemberAddressBuyerController.java +++ b/buyer-api/src/main/java/cn/lili/controller/member/MemberAddressBuyerController.java @@ -1,12 +1,12 @@ package cn.lili.controller.member; import cn.lili.common.enums.ResultUtil; +import cn.lili.common.security.OperationalJudgment; import cn.lili.common.security.context.UserContext; import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.member.entity.dos.MemberAddress; import cn.lili.modules.member.service.MemberAddressService; -import cn.lili.common.security.OperationalJudgment; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; diff --git a/buyer-api/src/main/java/cn/lili/controller/member/ServiceNoticeBuyerController.java b/buyer-api/src/main/java/cn/lili/controller/member/ServiceNoticeBuyerController.java deleted file mode 100644 index 4cb786e7..00000000 --- a/buyer-api/src/main/java/cn/lili/controller/member/ServiceNoticeBuyerController.java +++ /dev/null @@ -1,57 +0,0 @@ -package cn.lili.controller.member; - -import cn.lili.common.enums.ResultUtil; -import cn.lili.common.vo.PageVO; -import cn.lili.common.vo.ResultMessage; -import cn.lili.modules.system.entity.dos.ServiceNotice; -import cn.lili.modules.system.service.ServiceNoticeService; -import cn.lili.mybatis.util.PageUtil; -import com.baomidou.mybatisplus.core.metadata.IPage; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiImplicitParam; -import io.swagger.annotations.ApiOperation; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - - -/** - * 买家端,会员站服务消息接口 - * - * @author Chopper - * @since 2020/11/17 2:31 下午 - */ -@RestController -@RequestMapping("/service/notice") -@Api(tags = "买家端,会员站服务消息接口") -public class ServiceNoticeBuyerController { - - /** - * 服务消息 - */ - @Autowired - private ServiceNoticeService serviceNoticeService; - - @ApiOperation(value = "获取消息详情") - @ApiImplicitParam(name = "id", value = "商品ID", required = true, dataType = "Long", paramType = "path") - @GetMapping(value = "/{id}") - public ResultMessage get(@PathVariable String id) { - ServiceNotice serviceNotice = serviceNoticeService.getById(id); - return ResultUtil.data(serviceNotice); - } - - @ApiOperation(value = "分页获取服务消息") - @GetMapping - @ApiImplicitParam(name = "storeId", value = "商家id,默认为-1,代表平台消息,如果查询某商家发布的消息,传递商家id即可", dataType = "int", paramType = "query") - public ResultMessage> getByPage(PageVO page, String storeId) { - ServiceNotice serviceNotice = new ServiceNotice(); - if (storeId == null) { - storeId = "-1"; - } - serviceNotice.setStoreId(storeId); - IPage data = serviceNoticeService.page(PageUtil.initPage(page)); - return ResultUtil.data(data); - } -} diff --git a/buyer-api/src/main/java/cn/lili/controller/member/MemberMessageBuyerController.java b/buyer-api/src/main/java/cn/lili/controller/message/MemberMessageBuyerController.java similarity index 98% rename from buyer-api/src/main/java/cn/lili/controller/member/MemberMessageBuyerController.java rename to buyer-api/src/main/java/cn/lili/controller/message/MemberMessageBuyerController.java index f6a16d37..726b31f0 100644 --- a/buyer-api/src/main/java/cn/lili/controller/member/MemberMessageBuyerController.java +++ b/buyer-api/src/main/java/cn/lili/controller/message/MemberMessageBuyerController.java @@ -1,4 +1,4 @@ -package cn.lili.controller.member; +package cn.lili.controller.message; import cn.lili.common.enums.ResultUtil; import cn.lili.common.security.context.UserContext; diff --git a/buyer-api/src/main/java/cn/lili/controller/trade/AfterSaleBuyerController.java b/buyer-api/src/main/java/cn/lili/controller/order/AfterSaleBuyerController.java similarity index 89% rename from buyer-api/src/main/java/cn/lili/controller/trade/AfterSaleBuyerController.java rename to buyer-api/src/main/java/cn/lili/controller/order/AfterSaleBuyerController.java index d840b282..98324f89 100644 --- a/buyer-api/src/main/java/cn/lili/controller/trade/AfterSaleBuyerController.java +++ b/buyer-api/src/main/java/cn/lili/controller/order/AfterSaleBuyerController.java @@ -1,19 +1,19 @@ -package cn.lili.controller.trade; +package cn.lili.controller.order; import cn.lili.common.enums.ResultUtil; -import cn.lili.common.vo.ResultMessage; -import cn.lili.modules.order.order.entity.dos.AfterSale; -import cn.lili.modules.order.order.entity.dos.AfterSaleReason; -import cn.lili.modules.order.order.entity.dto.AfterSaleDTO; -import cn.lili.modules.order.order.entity.vo.AfterSaleApplyVO; -import cn.lili.modules.order.order.entity.vo.AfterSaleSearchParams; -import cn.lili.modules.order.order.entity.vo.AfterSaleVO; -import cn.lili.modules.order.order.service.AfterSaleLogService; -import cn.lili.modules.order.order.service.AfterSaleReasonService; -import cn.lili.modules.order.order.service.AfterSaleService; -import cn.lili.modules.order.trade.entity.dos.AfterSaleLog; -import cn.lili.modules.store.entity.dto.StoreAfterSaleAddressDTO; import cn.lili.common.security.OperationalJudgment; +import cn.lili.common.vo.ResultMessage; +import cn.lili.modules.order.aftersale.entity.dos.AfterSale; +import cn.lili.modules.order.aftersale.entity.dos.AfterSaleLog; +import cn.lili.modules.order.aftersale.entity.dos.AfterSaleReason; +import cn.lili.modules.order.aftersale.entity.dto.AfterSaleDTO; +import cn.lili.modules.order.aftersale.entity.vo.AfterSaleApplyVO; +import cn.lili.modules.order.aftersale.entity.vo.AfterSaleSearchParams; +import cn.lili.modules.order.aftersale.entity.vo.AfterSaleVO; +import cn.lili.modules.order.aftersale.service.AfterSaleLogService; +import cn.lili.modules.order.aftersale.service.AfterSaleReasonService; +import cn.lili.modules.order.aftersale.service.AfterSaleService; +import cn.lili.modules.store.entity.dto.StoreAfterSaleAddressDTO; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; diff --git a/buyer-api/src/main/java/cn/lili/controller/trade/CartController.java b/buyer-api/src/main/java/cn/lili/controller/order/CartController.java similarity index 99% rename from buyer-api/src/main/java/cn/lili/controller/trade/CartController.java rename to buyer-api/src/main/java/cn/lili/controller/order/CartController.java index 46b1107a..c2a4508a 100644 --- a/buyer-api/src/main/java/cn/lili/controller/trade/CartController.java +++ b/buyer-api/src/main/java/cn/lili/controller/order/CartController.java @@ -1,8 +1,8 @@ -package cn.lili.controller.trade; +package cn.lili.controller.order; import cn.lili.common.enums.ResultCode; -import cn.lili.common.exception.ServiceException; import cn.lili.common.enums.ResultUtil; +import cn.lili.common.exception.ServiceException; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.order.cart.entity.dto.TradeDTO; import cn.lili.modules.order.cart.entity.enums.CartTypeEnum; @@ -246,7 +246,7 @@ public class CartController { throw se; } catch (Exception e) { log.error(ResultCode.ORDER_ERROR.message(), e); - throw new ServiceException(ResultCode.ORDER_ERROR); + throw e; } } } diff --git a/buyer-api/src/main/java/cn/lili/controller/trade/OrderBuyerController.java b/buyer-api/src/main/java/cn/lili/controller/order/OrderBuyerController.java similarity index 99% rename from buyer-api/src/main/java/cn/lili/controller/trade/OrderBuyerController.java rename to buyer-api/src/main/java/cn/lili/controller/order/OrderBuyerController.java index ce80967b..877c26d6 100644 --- a/buyer-api/src/main/java/cn/lili/controller/trade/OrderBuyerController.java +++ b/buyer-api/src/main/java/cn/lili/controller/order/OrderBuyerController.java @@ -1,9 +1,10 @@ -package cn.lili.controller.trade; +package cn.lili.controller.order; import cn.lili.common.enums.ResultCode; import cn.lili.common.enums.ResultUtil; import cn.lili.common.exception.ServiceException; import cn.lili.common.security.AuthUser; +import cn.lili.common.security.OperationalJudgment; import cn.lili.common.security.context.UserContext; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.order.order.entity.dos.Order; @@ -12,7 +13,6 @@ import cn.lili.modules.order.order.entity.enums.OrderStatusEnum; import cn.lili.modules.order.order.entity.vo.OrderDetailVO; import cn.lili.modules.order.order.entity.vo.OrderSimpleVO; import cn.lili.modules.order.order.service.OrderService; -import cn.lili.common.security.OperationalJudgment; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; diff --git a/buyer-api/src/main/java/cn/lili/controller/trade/OrderComplaintBuyerController.java b/buyer-api/src/main/java/cn/lili/controller/order/OrderComplaintBuyerController.java similarity index 99% rename from buyer-api/src/main/java/cn/lili/controller/trade/OrderComplaintBuyerController.java rename to buyer-api/src/main/java/cn/lili/controller/order/OrderComplaintBuyerController.java index 17d47fcd..663b7c52 100644 --- a/buyer-api/src/main/java/cn/lili/controller/trade/OrderComplaintBuyerController.java +++ b/buyer-api/src/main/java/cn/lili/controller/order/OrderComplaintBuyerController.java @@ -1,7 +1,8 @@ -package cn.lili.controller.trade; +package cn.lili.controller.order; import cn.lili.common.enums.ResultUtil; import cn.lili.common.security.AuthUser; +import cn.lili.common.security.OperationalJudgment; import cn.lili.common.security.context.UserContext; import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; @@ -13,7 +14,6 @@ import cn.lili.modules.order.order.entity.vo.OrderComplaintSearchParams; import cn.lili.modules.order.order.entity.vo.OrderComplaintVO; import cn.lili.modules.order.order.service.OrderComplaintCommunicationService; import cn.lili.modules.order.order.service.OrderComplaintService; -import cn.lili.common.security.OperationalJudgment; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; diff --git a/buyer-api/src/main/java/cn/lili/controller/trade/ReceiptBuyerController.java b/buyer-api/src/main/java/cn/lili/controller/order/ReceiptBuyerController.java similarity index 97% rename from buyer-api/src/main/java/cn/lili/controller/trade/ReceiptBuyerController.java rename to buyer-api/src/main/java/cn/lili/controller/order/ReceiptBuyerController.java index 220e3520..c707c2ea 100644 --- a/buyer-api/src/main/java/cn/lili/controller/trade/ReceiptBuyerController.java +++ b/buyer-api/src/main/java/cn/lili/controller/order/ReceiptBuyerController.java @@ -1,4 +1,4 @@ -package cn.lili.controller.trade; +package cn.lili.controller.order; import cn.lili.common.enums.ResultUtil; import cn.lili.common.vo.PageVO; diff --git a/buyer-api/src/main/java/cn/lili/controller/trade/RechargeTradeBuyerController.java b/buyer-api/src/main/java/cn/lili/controller/order/RechargeTradeBuyerController.java similarity index 91% rename from buyer-api/src/main/java/cn/lili/controller/trade/RechargeTradeBuyerController.java rename to buyer-api/src/main/java/cn/lili/controller/order/RechargeTradeBuyerController.java index 2cfc49ae..81c38bb2 100644 --- a/buyer-api/src/main/java/cn/lili/controller/trade/RechargeTradeBuyerController.java +++ b/buyer-api/src/main/java/cn/lili/controller/order/RechargeTradeBuyerController.java @@ -1,9 +1,9 @@ -package cn.lili.controller.trade; +package cn.lili.controller.order; import cn.lili.common.enums.ResultUtil; import cn.lili.common.vo.ResultMessage; -import cn.lili.modules.order.trade.entity.dos.Recharge; -import cn.lili.modules.order.trade.service.RechargeService; +import cn.lili.modules.wallet.entity.dos.Recharge; +import cn.lili.modules.wallet.service.RechargeService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; diff --git a/buyer-api/src/main/java/cn/lili/controller/passport/MemberBuyerController.java b/buyer-api/src/main/java/cn/lili/controller/passport/MemberBuyerController.java index 189f83c8..e8e438bc 100644 --- a/buyer-api/src/main/java/cn/lili/controller/passport/MemberBuyerController.java +++ b/buyer-api/src/main/java/cn/lili/controller/passport/MemberBuyerController.java @@ -1,13 +1,15 @@ package cn.lili.controller.passport; +import cn.lili.common.enums.ResultCode; import cn.lili.common.enums.ResultUtil; +import cn.lili.common.exception.ServiceException; import cn.lili.common.security.enums.UserEnums; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.member.entity.dos.Member; import cn.lili.modules.member.entity.dto.MemberEditDTO; import cn.lili.modules.member.service.MemberService; -import cn.lili.modules.system.sms.SmsUtil; -import cn.lili.modules.verification.enums.VerificationEnums; +import cn.lili.modules.sms.SmsUtil; +import cn.lili.modules.verification.entity.enums.VerificationEnums; import cn.lili.modules.verification.service.VerificationService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; @@ -66,8 +68,11 @@ public class MemberBuyerController { public ResultMessage smsLogin(@NotNull(message = "手机号为空") @RequestParam String mobile, @NotNull(message = "验证码为空") @RequestParam String code, @RequestHeader String uuid) { - smsUtil.verifyCode(mobile, VerificationEnums.LOGIN, uuid, code); - return ResultUtil.data(memberService.mobilePhoneLogin(mobile)); + if (smsUtil.verifyCode(mobile, VerificationEnums.LOGIN, uuid, code)) { + return ResultUtil.data(memberService.mobilePhoneLogin(mobile)); + } else { + throw new ServiceException(ResultCode.VERIFICATION_SMS_CHECKED_ERROR); + } } @ApiOperation(value = "注册用户") @@ -84,8 +89,11 @@ public class MemberBuyerController { @RequestHeader String uuid, @NotNull(message = "验证码不能为空") @RequestParam String code) { - smsUtil.verifyCode(mobilePhone, VerificationEnums.REGISTER, uuid, code); - return ResultUtil.data(memberService.register(username, password, mobilePhone)); + if (smsUtil.verifyCode(mobilePhone, VerificationEnums.REGISTER, uuid, code)) { + return ResultUtil.data(memberService.register(username, password, mobilePhone)); + } else { + throw new ServiceException(ResultCode.VERIFICATION_SMS_CHECKED_ERROR); + } } @@ -106,11 +114,13 @@ public class MemberBuyerController { @NotNull(message = "验证码为空") @RequestParam String code, @RequestHeader String uuid) { //校验短信验证码是否正确 - smsUtil.verifyCode(mobile, VerificationEnums.FIND_USER, uuid, code); - //校验是否通过手机号可获取会员,存在则将会员信息存入缓存,有效时间3分钟 - memberService.findByMobile(uuid, mobile); - - return ResultUtil.success(); + if (smsUtil.verifyCode(mobile, VerificationEnums.FIND_USER, uuid, code)) { + //校验是否通过手机号可获取会员,存在则将会员信息存入缓存,有效时间3分钟 + memberService.findByMobile(uuid, mobile); + return ResultUtil.success(); + } else { + throw new ServiceException(ResultCode.VERIFICATION_SMS_CHECKED_ERROR); + } } @ApiOperation(value = "修改密码") diff --git a/buyer-api/src/main/java/cn/lili/controller/passport/connect/ConnectBuyerWebController.java b/buyer-api/src/main/java/cn/lili/controller/passport/connect/ConnectBuyerWebController.java index a6cbd775..fa99b2fe 100644 --- a/buyer-api/src/main/java/cn/lili/controller/passport/connect/ConnectBuyerWebController.java +++ b/buyer-api/src/main/java/cn/lili/controller/passport/connect/ConnectBuyerWebController.java @@ -2,16 +2,16 @@ package cn.lili.controller.passport.connect; import cn.lili.common.enums.ResultCode; +import cn.lili.common.enums.ResultUtil; import cn.lili.common.exception.ServiceException; import cn.lili.common.security.token.Token; -import cn.lili.common.enums.ResultUtil; +import cn.lili.common.utils.UuidUtils; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.connect.entity.dto.AuthCallback; import cn.lili.modules.connect.entity.dto.ConnectAuthUser; import cn.lili.modules.connect.request.AuthRequest; import cn.lili.modules.connect.service.ConnectService; import cn.lili.modules.connect.util.ConnectUtil; -import cn.lili.modules.connect.util.UuidUtils; import cn.lili.modules.member.service.MemberService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; 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 bdc0bed5..a3c1a6a0 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 @@ -1,14 +1,14 @@ package cn.lili.controller.passport.connect; -import cn.lili.common.security.token.Token; import cn.lili.common.enums.ResultUtil; +import cn.lili.common.security.token.Token; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.connect.entity.dto.WechatMPLoginParams; import cn.lili.modules.connect.service.ConnectService; -import cn.lili.modules.message.entity.dos.WechatMPMessage; import cn.lili.modules.message.service.ShortLinkService; -import cn.lili.modules.message.service.WechatMPMessageService; -import cn.lili.modules.message.util.WechatMpCodeUtil; +import cn.lili.modules.wechat.entity.dos.WechatMPMessage; +import cn.lili.modules.wechat.service.WechatMPMessageService; +import cn.lili.modules.wechat.util.WechatMpCodeUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; diff --git a/buyer-api/src/main/java/cn/lili/controller/member/CouponBuyerController.java b/buyer-api/src/main/java/cn/lili/controller/promotion/CouponBuyerController.java similarity index 82% rename from buyer-api/src/main/java/cn/lili/controller/member/CouponBuyerController.java rename to buyer-api/src/main/java/cn/lili/controller/promotion/CouponBuyerController.java index 65c5a391..4d0dfed4 100644 --- a/buyer-api/src/main/java/cn/lili/controller/member/CouponBuyerController.java +++ b/buyer-api/src/main/java/cn/lili/controller/promotion/CouponBuyerController.java @@ -1,16 +1,19 @@ -package cn.lili.controller.member; +package cn.lili.controller.promotion; import cn.lili.common.enums.ResultUtil; import cn.lili.common.security.AuthUser; +import cn.lili.common.security.OperationalJudgment; import cn.lili.common.security.context.UserContext; import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.promotion.entity.dos.MemberCoupon; -import cn.lili.modules.promotion.entity.vos.CouponSearchParams; +import cn.lili.modules.promotion.entity.dto.search.CouponSearchParams; +import cn.lili.modules.promotion.entity.dto.search.MemberCouponSearchParams; +import cn.lili.modules.promotion.entity.enums.CouponGetEnum; +import cn.lili.modules.promotion.entity.enums.PromotionsStatusEnum; import cn.lili.modules.promotion.entity.vos.CouponVO; import cn.lili.modules.promotion.service.CouponService; import cn.lili.modules.promotion.service.MemberCouponService; -import cn.lili.common.security.OperationalJudgment; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; @@ -51,13 +54,15 @@ public class CouponBuyerController { @GetMapping @ApiOperation(value = "获取可领取优惠券列表") public ResultMessage> getCouponList(CouponSearchParams queryParam, PageVO page) { - IPage canUseCoupons = couponService.getCanReceiveCoupons(queryParam, page); + queryParam.setPromotionStatus(PromotionsStatusEnum.START.name()); + queryParam.setGetType(CouponGetEnum.FREE.name()); + IPage canUseCoupons = couponService.pageVOFindAll(queryParam, page); return ResultUtil.data(canUseCoupons); } @ApiOperation(value = "获取当前会员的优惠券列表") @GetMapping("/getCoupons") - public ResultMessage> getCoupons(CouponSearchParams param, PageVO pageVo) { + public ResultMessage> getCoupons(MemberCouponSearchParams param, PageVO pageVo) { AuthUser currentUser = Objects.requireNonNull(UserContext.getCurrentUser()); param.setMemberId(currentUser.getId()); return ResultUtil.data(memberCouponService.getMemberCoupons(param, pageVo)); @@ -65,7 +70,7 @@ public class CouponBuyerController { @ApiOperation(value = "获取当前会员的对于当前商品可使用的优惠券列表") @GetMapping("/canUse") - public ResultMessage> getCouponsByCanUse(CouponSearchParams param, Double totalPrice, PageVO pageVo) { + public ResultMessage> getCouponsByCanUse(MemberCouponSearchParams param, Double totalPrice, PageVO pageVo) { AuthUser currentUser = Objects.requireNonNull(UserContext.getCurrentUser()); param.setMemberId(currentUser.getId()); return ResultUtil.data(memberCouponService.getMemberCouponsByCanUse(param, totalPrice, pageVo)); @@ -84,8 +89,7 @@ public class CouponBuyerController { @GetMapping("/receive/{couponId}") public ResultMessage receiveCoupon(@NotNull(message = "优惠券ID不能为空") @PathVariable("couponId") String couponId) { AuthUser currentUser = Objects.requireNonNull(UserContext.getCurrentUser()); - memberCouponService.checkCouponLimit(couponId, currentUser.getId()); - memberCouponService.receiveCoupon(couponId, currentUser.getId(), currentUser.getNickName()); + memberCouponService.receiveBuyerCoupon(couponId, currentUser.getId(), currentUser.getNickName()); return ResultUtil.success(); } diff --git a/buyer-api/src/main/java/cn/lili/controller/promotion/KanjiaGoodsActivityBuyerController.java b/buyer-api/src/main/java/cn/lili/controller/promotion/KanjiaGoodsActivityBuyerController.java index e1c70780..5fcf7832 100644 --- a/buyer-api/src/main/java/cn/lili/controller/promotion/KanjiaGoodsActivityBuyerController.java +++ b/buyer-api/src/main/java/cn/lili/controller/promotion/KanjiaGoodsActivityBuyerController.java @@ -1,16 +1,20 @@ package cn.lili.controller.promotion; -import cn.hutool.core.util.StrUtil; +import cn.hutool.core.text.CharSequenceUtil; import cn.lili.common.enums.ResultUtil; import cn.lili.common.security.context.UserContext; import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.promotion.entity.dos.KanjiaActivity; import cn.lili.modules.promotion.entity.dos.KanjiaActivityLog; -import cn.lili.modules.promotion.entity.dto.KanJiaActivityLogQuery; -import cn.lili.modules.promotion.entity.dto.KanjiaActivityQuery; -import cn.lili.modules.promotion.entity.enums.PromotionStatusEnum; -import cn.lili.modules.promotion.entity.vos.kanjia.*; +import cn.lili.modules.promotion.entity.dto.search.KanJiaActivityLogQuery; +import cn.lili.modules.promotion.entity.dto.search.KanjiaActivityGoodsParams; +import cn.lili.modules.promotion.entity.dto.search.KanjiaActivityQuery; +import cn.lili.modules.promotion.entity.dto.search.KanjiaActivitySearchParams; +import cn.lili.modules.promotion.entity.enums.PromotionsStatusEnum; +import cn.lili.modules.promotion.entity.vos.kanjia.KanjiaActivityGoodsListVO; +import cn.lili.modules.promotion.entity.vos.kanjia.KanjiaActivityGoodsVO; +import cn.lili.modules.promotion.entity.vos.kanjia.KanjiaActivityVO; import cn.lili.modules.promotion.service.KanjiaActivityGoodsService; import cn.lili.modules.promotion.service.KanjiaActivityLogService; import cn.lili.modules.promotion.service.KanjiaActivityService; @@ -52,9 +56,9 @@ public class KanjiaGoodsActivityBuyerController { @ApiOperation(value = "分页获取砍价商品") public ResultMessage> kanjiaActivityGoodsPage(KanjiaActivityGoodsParams kanjiaActivityGoodsParams, PageVO page) { // 会员端查询到的肯定是已经开始的活动商品 - kanjiaActivityGoodsParams.setPromotionStatus(PromotionStatusEnum.START.name()); - kanjiaActivityGoodsParams.setStartTime(System.currentTimeMillis()); - kanjiaActivityGoodsParams.setEndTime(System.currentTimeMillis()); + kanjiaActivityGoodsParams.setPromotionStatus(PromotionsStatusEnum.START.name()); +// kanjiaActivityGoodsParams.setStartTime(System.currentTimeMillis()); +// kanjiaActivityGoodsParams.setEndTime(System.currentTimeMillis()); return ResultUtil.data(kanJiaActivityGoodsService.kanjiaGoodsVOPage(kanjiaActivityGoodsParams, page)); } @@ -75,7 +79,7 @@ public class KanjiaGoodsActivityBuyerController { @ApiOperation(value = "获取砍价活动") public ResultMessage getKanJiaActivity(KanjiaActivitySearchParams kanjiaActivitySearchParams) { //如果是非被邀请关系则填写会员ID - if (StrUtil.isEmpty(kanjiaActivitySearchParams.getKanjiaActivityId())) { + if (CharSequenceUtil.isEmpty(kanjiaActivitySearchParams.getKanjiaActivityId())) { kanjiaActivitySearchParams.setMemberId(UserContext.getCurrentUser().getId()); } return ResultUtil.data(kanJiaActivityService.getKanjiaActivityVO(kanjiaActivitySearchParams)); diff --git a/buyer-api/src/main/java/cn/lili/controller/promotion/PintuanBuyerController.java b/buyer-api/src/main/java/cn/lili/controller/promotion/PintuanBuyerController.java index 9ec1ed22..62e928c8 100644 --- a/buyer-api/src/main/java/cn/lili/controller/promotion/PintuanBuyerController.java +++ b/buyer-api/src/main/java/cn/lili/controller/promotion/PintuanBuyerController.java @@ -1,15 +1,14 @@ package cn.lili.controller.promotion; -import cn.hutool.core.date.DateUtil; +import cn.lili.common.enums.PromotionTypeEnum; import cn.lili.common.enums.ResultUtil; import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; -import cn.lili.modules.promotion.entity.dto.PromotionGoodsDTO; -import cn.lili.modules.promotion.entity.enums.PromotionStatusEnum; -import cn.lili.common.enums.PromotionTypeEnum; +import cn.lili.modules.promotion.entity.dos.PromotionGoods; +import cn.lili.modules.promotion.entity.dto.search.PromotionGoodsSearchParams; +import cn.lili.modules.promotion.entity.enums.PromotionsStatusEnum; import cn.lili.modules.promotion.entity.vos.PintuanMemberVO; import cn.lili.modules.promotion.entity.vos.PintuanShareVO; -import cn.lili.modules.promotion.entity.vos.PromotionGoodsSearchParams; import cn.lili.modules.promotion.service.PintuanService; import cn.lili.modules.promotion.service.PromotionGoodsService; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -40,14 +39,13 @@ public class PintuanBuyerController { @ApiOperation(value = "获取拼团商品") @GetMapping - public ResultMessage> getPintuanCategory(String goodsName, String categoryPath, PageVO pageVo) { + public ResultMessage> getPintuanCategory(String goodsName, String categoryPath, PageVO pageVo) { PromotionGoodsSearchParams searchParams = new PromotionGoodsSearchParams(); searchParams.setGoodsName(goodsName); searchParams.setPromotionType(PromotionTypeEnum.PINTUAN.name()); - searchParams.setPromotionStatus(PromotionStatusEnum.START.name()); + searchParams.setPromotionStatus(PromotionsStatusEnum.START.name()); searchParams.setCategoryPath(categoryPath); - searchParams.setEndTime(DateUtil.date().getTime()); - return ResultUtil.data(promotionGoodsService.getPromotionGoods(searchParams, pageVo)); + return ResultUtil.data(promotionGoodsService.pageFindAll(searchParams, pageVo)); } diff --git a/buyer-api/src/main/java/cn/lili/controller/promotion/PointsGoodsBuyerController.java b/buyer-api/src/main/java/cn/lili/controller/promotion/PointsGoodsBuyerController.java index 6bd0ee33..08932f1f 100644 --- a/buyer-api/src/main/java/cn/lili/controller/promotion/PointsGoodsBuyerController.java +++ b/buyer-api/src/main/java/cn/lili/controller/promotion/PointsGoodsBuyerController.java @@ -3,8 +3,10 @@ package cn.lili.controller.promotion; import cn.lili.common.enums.ResultUtil; import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; +import cn.lili.modules.promotion.entity.dos.PointsGoods; import cn.lili.modules.promotion.entity.dos.PointsGoodsCategory; -import cn.lili.modules.promotion.entity.vos.PointsGoodsSearchParams; +import cn.lili.modules.promotion.entity.dto.search.PointsGoodsSearchParams; +import cn.lili.modules.promotion.entity.enums.PromotionsStatusEnum; import cn.lili.modules.promotion.entity.vos.PointsGoodsVO; import cn.lili.modules.promotion.service.PointsGoodsCategoryService; import cn.lili.modules.promotion.service.PointsGoodsService; @@ -35,8 +37,9 @@ public class PointsGoodsBuyerController { @GetMapping @ApiOperation(value = "分页获取积分商品") - public ResultMessage> getPointsGoodsPage(PointsGoodsSearchParams searchParams, PageVO page) { - IPage pointsGoodsByPage = pointsGoodsService.getPointsGoodsByPage(searchParams, page); + public ResultMessage> getPointsGoodsPage(PointsGoodsSearchParams searchParams, PageVO page) { + searchParams.setPromotionStatus(PromotionsStatusEnum.START.name()); + IPage pointsGoodsByPage = pointsGoodsService.pageFindAll(searchParams, page); return ResultUtil.data(pointsGoodsByPage); } diff --git a/buyer-api/src/main/java/cn/lili/controller/store/StoreBuyerController.java b/buyer-api/src/main/java/cn/lili/controller/store/StoreBuyerController.java index eda14066..6e6a7ca7 100644 --- a/buyer-api/src/main/java/cn/lili/controller/store/StoreBuyerController.java +++ b/buyer-api/src/main/java/cn/lili/controller/store/StoreBuyerController.java @@ -5,12 +5,12 @@ import cn.lili.common.security.context.UserContext; import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.goods.entity.vos.StoreGoodsLabelVO; +import cn.lili.modules.goods.service.StoreGoodsLabelService; import cn.lili.modules.store.entity.dto.StoreBankDTO; import cn.lili.modules.store.entity.dto.StoreCompanyDTO; import cn.lili.modules.store.entity.dto.StoreOtherInfoDTO; import cn.lili.modules.store.entity.vos.*; import cn.lili.modules.store.service.StoreDetailService; -import cn.lili.modules.goods.service.StoreGoodsLabelService; import cn.lili.modules.store.service.StoreService; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.Api; diff --git a/buyer-api/src/main/java/cn/lili/controller/member/MemberReceiptController.java b/buyer-api/src/main/java/cn/lili/controller/wallet/MemberReceiptController.java similarity index 98% rename from buyer-api/src/main/java/cn/lili/controller/member/MemberReceiptController.java rename to buyer-api/src/main/java/cn/lili/controller/wallet/MemberReceiptController.java index dfbec8c3..09395e16 100644 --- a/buyer-api/src/main/java/cn/lili/controller/member/MemberReceiptController.java +++ b/buyer-api/src/main/java/cn/lili/controller/wallet/MemberReceiptController.java @@ -1,4 +1,4 @@ -package cn.lili.controller.member; +package cn.lili.controller.wallet; import cn.lili.common.enums.ResultUtil; diff --git a/buyer-api/src/main/java/cn/lili/controller/member/MemberWalletBuyerController.java b/buyer-api/src/main/java/cn/lili/controller/wallet/MemberWalletBuyerController.java similarity index 92% rename from buyer-api/src/main/java/cn/lili/controller/member/MemberWalletBuyerController.java rename to buyer-api/src/main/java/cn/lili/controller/wallet/MemberWalletBuyerController.java index 65fecc4a..a3ab1380 100644 --- a/buyer-api/src/main/java/cn/lili/controller/member/MemberWalletBuyerController.java +++ b/buyer-api/src/main/java/cn/lili/controller/wallet/MemberWalletBuyerController.java @@ -1,4 +1,4 @@ -package cn.lili.controller.member; +package cn.lili.controller.wallet; import cn.lili.common.enums.ResultCode; import cn.lili.common.enums.ResultUtil; @@ -7,12 +7,12 @@ import cn.lili.common.security.AuthUser; import cn.lili.common.security.context.UserContext; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.member.entity.dos.Member; -import cn.lili.modules.member.entity.dos.MemberWallet; -import cn.lili.modules.member.entity.vo.MemberWalletVO; import cn.lili.modules.member.service.MemberService; -import cn.lili.modules.member.service.MemberWalletService; -import cn.lili.modules.verification.enums.VerificationEnums; +import cn.lili.modules.verification.entity.enums.VerificationEnums; import cn.lili.modules.verification.service.VerificationService; +import cn.lili.modules.wallet.entity.dos.MemberWallet; +import cn.lili.modules.wallet.entity.vo.MemberWalletVO; +import cn.lili.modules.wallet.service.MemberWalletService; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; @@ -125,7 +125,7 @@ public class MemberWalletBuyerController { @ApiImplicitParams({ @ApiImplicitParam(name = "price", value = "提现金额", required = true, dataType = "double", paramType = "query") }) - public ResultMessage withdrawal(@Max(value = 1000, message = "充值金额单次最多允许提现1000元") @Min(value = 1, message = "充值金额单次最少提现金额为1元") Double price) { + public ResultMessage withdrawal(@Max(value = 9999, message = "充值金额单次最多允许提现9999元") @Min(value = 1, message = "充值金额单次最少提现金额为1元") Double price) { return ResultUtil.data(memberWalletService.applyWithdrawal(price)); } diff --git a/buyer-api/src/main/java/cn/lili/controller/member/MemberWithdrawApplyBuyerController.java b/buyer-api/src/main/java/cn/lili/controller/wallet/MemberWithdrawApplyBuyerController.java similarity index 87% rename from buyer-api/src/main/java/cn/lili/controller/member/MemberWithdrawApplyBuyerController.java rename to buyer-api/src/main/java/cn/lili/controller/wallet/MemberWithdrawApplyBuyerController.java index 60498f5d..ae0f45d6 100644 --- a/buyer-api/src/main/java/cn/lili/controller/member/MemberWithdrawApplyBuyerController.java +++ b/buyer-api/src/main/java/cn/lili/controller/wallet/MemberWithdrawApplyBuyerController.java @@ -1,13 +1,13 @@ -package cn.lili.controller.member; +package cn.lili.controller.wallet; import cn.lili.common.enums.ResultUtil; import cn.lili.common.security.context.UserContext; import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; -import cn.lili.modules.member.entity.dos.MemberWithdrawApply; -import cn.lili.modules.member.entity.vo.MemberWithdrawApplyQueryVO; -import cn.lili.modules.member.service.MemberWithdrawApplyService; +import cn.lili.modules.wallet.entity.dos.MemberWithdrawApply; +import cn.lili.modules.wallet.entity.vo.MemberWithdrawApplyQueryVO; +import cn.lili.modules.wallet.service.MemberWithdrawApplyService; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; diff --git a/buyer-api/src/main/java/cn/lili/controller/member/RechargeBuyerController.java b/buyer-api/src/main/java/cn/lili/controller/wallet/RechargeBuyerController.java similarity index 91% rename from buyer-api/src/main/java/cn/lili/controller/member/RechargeBuyerController.java rename to buyer-api/src/main/java/cn/lili/controller/wallet/RechargeBuyerController.java index a7ff4f46..58c95c87 100644 --- a/buyer-api/src/main/java/cn/lili/controller/member/RechargeBuyerController.java +++ b/buyer-api/src/main/java/cn/lili/controller/wallet/RechargeBuyerController.java @@ -1,12 +1,12 @@ -package cn.lili.controller.member; +package cn.lili.controller.wallet; import cn.lili.common.enums.ResultUtil; import cn.lili.common.security.context.UserContext; import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; -import cn.lili.modules.order.trade.entity.dos.Recharge; import cn.lili.modules.order.trade.entity.vo.RechargeQueryVO; -import cn.lili.modules.order.trade.service.RechargeService; +import cn.lili.modules.wallet.entity.dos.Recharge; +import cn.lili.modules.wallet.service.RechargeService; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; diff --git a/buyer-api/src/main/java/cn/lili/controller/trade/WalletLogBuyerController.java b/buyer-api/src/main/java/cn/lili/controller/wallet/WalletLogBuyerController.java similarity index 91% rename from buyer-api/src/main/java/cn/lili/controller/trade/WalletLogBuyerController.java rename to buyer-api/src/main/java/cn/lili/controller/wallet/WalletLogBuyerController.java index b48918f3..676301fe 100644 --- a/buyer-api/src/main/java/cn/lili/controller/trade/WalletLogBuyerController.java +++ b/buyer-api/src/main/java/cn/lili/controller/wallet/WalletLogBuyerController.java @@ -1,12 +1,12 @@ -package cn.lili.controller.trade; +package cn.lili.controller.wallet; import cn.lili.common.enums.ResultUtil; import cn.lili.common.security.AuthUser; import cn.lili.common.security.context.UserContext; import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; -import cn.lili.modules.order.trade.entity.dos.WalletLog; -import cn.lili.modules.order.trade.service.WalletLogService; +import cn.lili.modules.wallet.entity.dos.WalletLog; +import cn.lili.modules.wallet.service.WalletLogService; import cn.lili.mybatis.util.PageUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; diff --git a/buyer-api/src/main/resources/application.yml b/buyer-api/src/main/resources/application.yml index 2a84e6be..1a6abf13 100644 --- a/buyer-api/src/main/resources/application.yml +++ b/buyer-api/src/main/resources/application.yml @@ -43,16 +43,6 @@ spring: #关闭jackson 对json做解析 fail-on-empty-beans: false - # mongodb - data: - mongodb: - uri: 127.0.0.1:27017 - database: lilishop - username: root - password: lilishop - authentication-database: admin - # replica-set-name: mongoreplset - # Redis redis: host: 127.0.0.1 @@ -189,7 +179,6 @@ logging: cn.lili: debug org.hibernate: debug # org.springframework: debug - # org.springframework.data.mongodb.core: debug file: # 指定路径 path: lili-logs diff --git a/buyer-api/src/test/resources/application.yml b/buyer-api/src/test/resources/application.yml index a0140a54..ac3d2b4d 100644 --- a/buyer-api/src/test/resources/application.yml +++ b/buyer-api/src/test/resources/application.yml @@ -25,16 +25,6 @@ spring: admin: client: url: http://192.168.0.116:8000 - # mongodb - data: - mongodb: - host: 192.168.0.116 - port: 27017 - database: lilishop - username: root - password: lilishop - authentication-database: admin - # replica-set-name: mongoreplset cache: type: redis #amqp @@ -186,7 +176,6 @@ logging: cn.lili: info # org.hibernate: debug # org.springframework: debug - # org.springframework.data.mongodb.core: debug file: # 指定路径 path: lili-logs 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 255499b7..01aa0045 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 @@ -2,11 +2,11 @@ package cn.lili.controller.common; import cn.lili.cache.Cache; import cn.lili.common.enums.ResultCode; +import cn.lili.common.enums.ResultUtil; import cn.lili.common.exception.ServiceException; import cn.lili.common.security.AuthUser; import cn.lili.common.security.context.UserContext; import cn.lili.common.security.enums.UserEnums; -import cn.lili.common.enums.ResultUtil; import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; import cn.lili.common.vo.SearchVO; @@ -78,9 +78,7 @@ public class FileController { } throw new ServiceException(ResultCode.USER_AUTHORITY_ERROR); case MANAGER: - if (file.getUserEnums().equals(authUser.getRole().name())) { - break; - } + break; default: throw new ServiceException(ResultCode.USER_AUTHORITY_ERROR); } diff --git a/manager-api/src/main/java/cn/lili/controller/member/IpInfoManagerController.java b/common-api/src/main/java/cn/lili/controller/common/IpInfoManagerController.java similarity index 99% rename from manager-api/src/main/java/cn/lili/controller/member/IpInfoManagerController.java rename to common-api/src/main/java/cn/lili/controller/common/IpInfoManagerController.java index fe31af25..f7da86a7 100644 --- a/manager-api/src/main/java/cn/lili/controller/member/IpInfoManagerController.java +++ b/common-api/src/main/java/cn/lili/controller/common/IpInfoManagerController.java @@ -1,7 +1,7 @@ package cn.lili.controller.member; -import cn.lili.common.enums.ResultUtil; import cn.lili.common.utils.IpHelper; +import cn.lili.common.enums.ResultUtil; import cn.lili.common.vo.ResultMessage; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -28,6 +28,7 @@ public class IpInfoManagerController { @RequestMapping(value = "/info", method = RequestMethod.GET) @ApiOperation(value = "IP及天气相关信息") public ResultMessage upload(HttpServletRequest request) { + String result = ipHelper.getIpCity(request); return ResultUtil.data(result); } 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 6b233507..5eb62d1b 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 @@ -3,7 +3,7 @@ package cn.lili.controller.common; import cn.lili.cache.limit.annotation.LimitPoint; import cn.lili.common.enums.ResultUtil; import cn.lili.common.vo.ResultMessage; -import cn.lili.modules.verification.enums.VerificationEnums; +import cn.lili.modules.verification.entity.enums.VerificationEnums; import cn.lili.modules.verification.service.VerificationService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; 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 b690e022..3914d62c 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 @@ -4,8 +4,8 @@ import cn.lili.cache.limit.annotation.LimitPoint; import cn.lili.common.enums.ResultCode; import cn.lili.common.enums.ResultUtil; import cn.lili.common.vo.ResultMessage; -import cn.lili.modules.system.sms.SmsUtil; -import cn.lili.modules.verification.enums.VerificationEnums; +import cn.lili.modules.sms.SmsUtil; +import cn.lili.modules.verification.entity.enums.VerificationEnums; import cn.lili.modules.verification.service.VerificationService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; diff --git a/common-api/src/main/resources/application.yml b/common-api/src/main/resources/application.yml index 3da84738..5c35ef17 100644 --- a/common-api/src/main/resources/application.yml +++ b/common-api/src/main/resources/application.yml @@ -29,15 +29,6 @@ spring: admin: client: url: http://127.0.0.1:8000 - # mongodb - data: - mongodb: - uri: 127.0.0.1:27017 - database: lilishop - username: root - password: lilishop - authentication-database: admin - # replica-set-name: mongoreplset cache: type: redis # Redis @@ -188,7 +179,6 @@ logging: cn.lili: info # org.hibernate: debug # org.springframework: debug - # org.springframework.data.mongodb.core: debug file: # 指定路径 path: lili-logs diff --git a/consumer/src/main/java/cn/lili/event/AfterSaleStatusChangeEvent.java b/consumer/src/main/java/cn/lili/event/AfterSaleStatusChangeEvent.java index 0229cfb0..b81196e8 100644 --- a/consumer/src/main/java/cn/lili/event/AfterSaleStatusChangeEvent.java +++ b/consumer/src/main/java/cn/lili/event/AfterSaleStatusChangeEvent.java @@ -1,7 +1,7 @@ package cn.lili.event; -import cn.lili.modules.order.order.entity.dos.AfterSale; +import cn.lili.modules.order.aftersale.entity.dos.AfterSale; /** * 售后单改变状态 diff --git a/consumer/src/main/java/cn/lili/event/MemberWithdrawalEvent.java b/consumer/src/main/java/cn/lili/event/MemberWithdrawalEvent.java index 0a2b333d..97904347 100644 --- a/consumer/src/main/java/cn/lili/event/MemberWithdrawalEvent.java +++ b/consumer/src/main/java/cn/lili/event/MemberWithdrawalEvent.java @@ -1,6 +1,6 @@ package cn.lili.event; -import cn.lili.modules.member.entity.dto.MemberWithdrawalMessage; +import cn.lili.modules.wallet.entity.dto.MemberWithdrawalMessage; /** * 会员提现消息 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 fed28ee0..7b9f138a 100644 --- a/consumer/src/main/java/cn/lili/event/impl/DistributionOrderExecute.java +++ b/consumer/src/main/java/cn/lili/event/impl/DistributionOrderExecute.java @@ -7,7 +7,7 @@ import cn.lili.modules.distribution.entity.dos.DistributionOrder; import cn.lili.modules.distribution.entity.enums.DistributionOrderStatusEnum; import cn.lili.modules.distribution.mapper.DistributionOrderMapper; import cn.lili.modules.distribution.service.DistributionOrderService; -import cn.lili.modules.order.order.entity.dos.AfterSale; +import cn.lili.modules.order.aftersale.entity.dos.AfterSale; import cn.lili.modules.order.order.entity.dto.OrderMessage; import cn.lili.modules.order.trade.entity.enums.AfterSaleStatusEnum; import cn.lili.timetask.handler.EveryDayExecute; diff --git a/consumer/src/main/java/cn/lili/event/impl/FullDiscountExecute.java b/consumer/src/main/java/cn/lili/event/impl/FullDiscountExecute.java index fadf757a..a1bb9847 100644 --- a/consumer/src/main/java/cn/lili/event/impl/FullDiscountExecute.java +++ b/consumer/src/main/java/cn/lili/event/impl/FullDiscountExecute.java @@ -26,7 +26,7 @@ import cn.lili.modules.order.trade.entity.dos.OrderLog; import cn.lili.modules.order.trade.service.OrderLogService; import cn.lili.modules.promotion.service.MemberCouponService; import cn.lili.rocketmq.RocketmqSendCallbackBuilder; -import cn.lili.rocketmq.tags.MqOrderTagsEnum; +import cn.lili.rocketmq.tags.OrderTagsEnum; import lombok.extern.slf4j.Slf4j; import org.apache.rocketmq.spring.core.RocketMQTemplate; import org.springframework.beans.factory.annotation.Autowired; @@ -82,7 +82,7 @@ public class FullDiscountExecute implements TradeEvent, OrderStatusChangeEvent { if ((cartVO.getGiftList() != null && !cartVO.getGiftList().isEmpty()) || (cartVO.getGiftPoint() != null && cartVO.getGiftPoint() > 0) || (cartVO.getGiftCouponList() != null && !cartVO.getGiftCouponList().isEmpty())) { - cache.put(CachePrefix.ORDER.getPrefix() + cartVO.getSn(), cartVO); + cache.put(CachePrefix.ORDER.getPrefix() + cartVO.getSn(), JSONUtil.toJsonStr(cartVO)); } } ); @@ -92,7 +92,7 @@ public class FullDiscountExecute implements TradeEvent, OrderStatusChangeEvent { public void orderChange(OrderMessage orderMessage) { if (orderMessage.getNewStatus().equals(OrderStatusEnum.PAID)) { log.debug("满减活动,订单状态操作 {}", CachePrefix.ORDER.getPrefix() + orderMessage.getOrderSn()); - renderGift((CartVO) cache.get(CachePrefix.ORDER.getPrefix() + orderMessage.getOrderSn()), orderMessage); + renderGift(JSONUtil.toBean(cache.getString(CachePrefix.ORDER.getPrefix() + orderMessage.getOrderSn()), CartVO.class), orderMessage); } } @@ -190,7 +190,7 @@ public class FullDiscountExecute implements TradeEvent, OrderStatusChangeEvent { orderMessage.setPaymentMethod(order.getPaymentMethod()); orderMessage.setNewStatus(OrderStatusEnum.PAID); - String destination = rocketmqCustomProperties.getOrderTopic() + ":" + MqOrderTagsEnum.STATUS_CHANGE.name(); + String destination = rocketmqCustomProperties.getOrderTopic() + ":" + OrderTagsEnum.STATUS_CHANGE.name(); //发送订单变更mq消息 rocketMQTemplate.asyncSend(destination, JSONUtil.toJsonStr(orderMessage), RocketmqSendCallbackBuilder.commonCallback()); 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 6c32b979..ab4a8d1a 100644 --- a/consumer/src/main/java/cn/lili/event/impl/MemberPointExecute.java +++ b/consumer/src/main/java/cn/lili/event/impl/MemberPointExecute.java @@ -1,7 +1,6 @@ package cn.lili.event.impl; -import cn.hutool.core.convert.Convert; import cn.lili.common.utils.CurrencyUtil; import cn.lili.common.utils.StringUtils; import cn.lili.event.AfterSaleStatusChangeEvent; @@ -12,11 +11,10 @@ import cn.lili.modules.member.entity.dos.Member; import cn.lili.modules.member.entity.dos.MemberEvaluation; import cn.lili.modules.member.entity.enums.PointTypeEnum; import cn.lili.modules.member.service.MemberService; -import cn.lili.modules.order.order.entity.dos.AfterSale; +import cn.lili.modules.order.aftersale.entity.dos.AfterSale; import cn.lili.modules.order.order.entity.dos.Order; import cn.lili.modules.order.order.entity.dto.OrderMessage; import cn.lili.modules.order.order.entity.enums.OrderPromotionTypeEnum; -import cn.lili.modules.order.order.entity.enums.OrderStatusEnum; import cn.lili.modules.order.order.entity.enums.PayStatusEnum; import cn.lili.modules.order.order.service.OrderService; import cn.lili.modules.order.trade.entity.enums.AfterSaleStatusEnum; diff --git a/consumer/src/main/java/cn/lili/event/impl/MemberWalletExecute.java b/consumer/src/main/java/cn/lili/event/impl/MemberWalletExecute.java index 99703c25..79713ce2 100644 --- a/consumer/src/main/java/cn/lili/event/impl/MemberWalletExecute.java +++ b/consumer/src/main/java/cn/lili/event/impl/MemberWalletExecute.java @@ -3,8 +3,7 @@ package cn.lili.event.impl; import cn.lili.event.MemberRegisterEvent; import cn.lili.modules.member.entity.dos.Member; -import cn.lili.modules.member.service.MemberWalletService; -import lombok.RequiredArgsConstructor; +import cn.lili.modules.wallet.service.MemberWalletService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -22,6 +21,7 @@ public class MemberWalletExecute implements MemberRegisterEvent { @Override public void memberRegister(Member member) { - memberWalletService.save(member.getId(),member.getUsername()); + // 有些情况下,会同时创建一个member_id的两条数据 +// memberWalletService.save(member.getId(),member.getUsername()); } } 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 81d120d2..386732a7 100644 --- a/consumer/src/main/java/cn/lili/event/impl/NoticeMessageExecute.java +++ b/consumer/src/main/java/cn/lili/event/impl/NoticeMessageExecute.java @@ -2,22 +2,22 @@ package cn.lili.event.impl; import cn.lili.event.*; import cn.lili.modules.member.entity.dto.MemberPointMessage; -import cn.lili.modules.member.entity.dto.MemberWithdrawalMessage; -import cn.lili.modules.member.entity.enums.MemberWithdrawalDestinationEnum; import cn.lili.modules.member.entity.enums.PointTypeEnum; -import cn.lili.modules.member.entity.enums.WithdrawStatusEnum; import cn.lili.modules.message.entity.dto.NoticeMessageDTO; import cn.lili.modules.message.entity.enums.NoticeMessageNodeEnum; import cn.lili.modules.message.entity.enums.NoticeMessageParameterEnum; import cn.lili.modules.message.service.NoticeMessageService; +import cn.lili.modules.order.aftersale.entity.dos.AfterSale; import cn.lili.modules.order.cart.entity.dto.TradeDTO; -import cn.lili.modules.order.order.entity.dos.AfterSale; import cn.lili.modules.order.order.entity.dto.OrderMessage; import cn.lili.modules.order.order.entity.enums.OrderPromotionTypeEnum; import cn.lili.modules.order.order.entity.vo.OrderDetailVO; import cn.lili.modules.order.order.service.OrderService; import cn.lili.modules.order.trade.entity.enums.AfterSaleStatusEnum; import cn.lili.modules.order.trade.entity.enums.AfterSaleTypeEnum; +import cn.lili.modules.wallet.entity.dto.MemberWithdrawalMessage; +import cn.lili.modules.wallet.entity.enums.MemberWithdrawalDestinationEnum; +import cn.lili.modules.wallet.entity.enums.WithdrawStatusEnum; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; diff --git a/consumer/src/main/java/cn/lili/event/impl/OrderCreateReceiptExecute.java b/consumer/src/main/java/cn/lili/event/impl/OrderCreateReceiptExecute.java index 36826a60..a7126774 100644 --- a/consumer/src/main/java/cn/lili/event/impl/OrderCreateReceiptExecute.java +++ b/consumer/src/main/java/cn/lili/event/impl/OrderCreateReceiptExecute.java @@ -8,7 +8,6 @@ import cn.lili.modules.order.order.entity.dos.Receipt; import cn.lili.modules.order.order.entity.vo.OrderVO; import cn.lili.modules.order.order.entity.vo.ReceiptVO; import cn.lili.modules.order.order.service.ReceiptService; -import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -34,25 +33,23 @@ public class OrderCreateReceiptExecute implements TradeEvent { //获取发票信息 ReceiptVO receiptVO = tradeDTO.getReceiptVO(); //如果需要获取发票则保存发票信息 - if (tradeDTO.getNeedReceipt()) { - if (orderList.size() > 0) { - List receipts = new ArrayList<>(); - for (OrderVO orderVO : orderList) { - Receipt receipt = new Receipt(); - BeanUtil.copyProperties(receiptVO, receipt); - receipt.setMemberId(orderVO.getMemberId()); - receipt.setMemberName(orderVO.getMemberName()); - receipt.setStoreId(orderVO.getStoreId()); - receipt.setStoreName(orderVO.getStoreName()); - receipt.setOrderSn(orderVO.getSn()); - receipt.setReceiptDetail(JSONUtil.toJsonStr(orderVO.getOrderItems())); - receipt.setReceiptPrice(orderVO.getFlowPrice()); - receipt.setReceiptStatus(0); - receipts.add(receipt); - } - //保存发票 - receiptService.saveBatch(receipts); + if (Boolean.TRUE.equals(tradeDTO.getNeedReceipt()) && !orderList.isEmpty()) { + List receipts = new ArrayList<>(); + for (OrderVO orderVO : orderList) { + Receipt receipt = new Receipt(); + BeanUtil.copyProperties(receiptVO, receipt); + receipt.setMemberId(orderVO.getMemberId()); + receipt.setMemberName(orderVO.getMemberName()); + receipt.setStoreId(orderVO.getStoreId()); + receipt.setStoreName(orderVO.getStoreName()); + receipt.setOrderSn(orderVO.getSn()); + receipt.setReceiptDetail(JSONUtil.toJsonStr(orderVO.getOrderItems())); + receipt.setReceiptPrice(orderVO.getFlowPrice()); + receipt.setReceiptStatus(0); + receipts.add(receipt); } + //保存发票 + receiptService.saveBatch(receipts); } } } diff --git a/consumer/src/main/java/cn/lili/event/impl/RegisteredCouponActivityExecute.java b/consumer/src/main/java/cn/lili/event/impl/RegisteredCouponActivityExecute.java index a6b7d6cf..a103b767 100644 --- a/consumer/src/main/java/cn/lili/event/impl/RegisteredCouponActivityExecute.java +++ b/consumer/src/main/java/cn/lili/event/impl/RegisteredCouponActivityExecute.java @@ -4,9 +4,10 @@ import cn.lili.event.MemberRegisterEvent; import cn.lili.modules.member.entity.dos.Member; import cn.lili.modules.promotion.entity.dos.CouponActivity; import cn.lili.modules.promotion.entity.enums.CouponActivityTypeEnum; -import cn.lili.modules.promotion.entity.enums.PromotionStatusEnum; +import cn.lili.modules.promotion.entity.enums.PromotionsStatusEnum; import cn.lili.modules.promotion.service.CouponActivityService; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import cn.lili.modules.promotion.tools.PromotionTools; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -32,10 +33,9 @@ public class RegisteredCouponActivityExecute implements MemberRegisterEvent { */ @Override public void memberRegister(Member member) { - List couponActivities = couponActivityService.list(new LambdaQueryWrapper() - .eq(CouponActivity::getCouponActivityType, CouponActivityTypeEnum.REGISTERED.name()) - .eq(CouponActivity::getPromotionStatus, PromotionStatusEnum.START.name())); + List couponActivities = couponActivityService.list(new QueryWrapper() + .eq("coupon_activity_type", CouponActivityTypeEnum.REGISTERED.name()) + .and(PromotionTools.queryPromotionStatus(PromotionsStatusEnum.START))); couponActivityService.registered(couponActivities, member); - } } 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 d87a1e77..ec18b31f 100644 --- a/consumer/src/main/java/cn/lili/event/impl/StockUpdateExecute.java +++ b/consumer/src/main/java/cn/lili/event/impl/StockUpdateExecute.java @@ -14,11 +14,14 @@ import cn.lili.modules.order.order.service.OrderService; import cn.lili.modules.promotion.entity.dos.KanjiaActivity; import cn.lili.modules.promotion.entity.dos.PromotionGoods; import cn.lili.modules.promotion.entity.dto.KanjiaActivityGoodsDTO; +import cn.lili.modules.promotion.entity.dto.search.PromotionGoodsSearchParams; import cn.lili.modules.promotion.entity.vos.PointsGoodsVO; -import cn.lili.modules.promotion.service.*; +import cn.lili.modules.promotion.service.KanjiaActivityGoodsService; +import cn.lili.modules.promotion.service.KanjiaActivityService; +import cn.lili.modules.promotion.service.PointsGoodsService; +import cn.lili.modules.promotion.service.PromotionGoodsService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.data.redis.core.script.DefaultRedisScript; import org.springframework.stereotype.Service; @@ -62,11 +65,6 @@ public class StockUpdateExecute implements OrderStatusChangeEvent { */ @Autowired private PromotionGoodsService promotionGoodsService; - /** - * 促销商品 - */ - @Autowired - private SeckillApplyService seckillApplyService; /** * 缓存 */ @@ -79,8 +77,6 @@ public class StockUpdateExecute implements OrderStatusChangeEvent { private KanjiaActivityGoodsService kanjiaActivityGoodsService; @Autowired private PointsGoodsService pointsGoodsService; - @Autowired - private MongoTemplate mongoTemplate; @Override public void orderChange(OrderMessage orderMessage) { @@ -202,10 +198,10 @@ public class StockUpdateExecute implements OrderStatusChangeEvent { switch (promotionTypeEnum) { case KANJIA: - cache.put(cacheKey, kanjiaActivityGoodsService.getKanJiaGoodsBySku(orderItem.getSkuId()).getStock().intValue()); + cache.put(cacheKey, kanjiaActivityGoodsService.getKanjiaGoodsBySkuId(orderItem.getSkuId()).getStock()); return; case POINTS_GOODS: - cache.put(cacheKey, pointsGoodsService.getPointsGoodsVOByMongo(orderItem.getSkuId()).getActiveStock().intValue()); + cache.put(cacheKey, pointsGoodsService.getPointsGoodsDetailBySkuId(orderItem.getSkuId()).getActiveStock()); return; case SECKILL: case PINTUAN: @@ -294,23 +290,27 @@ public class StockUpdateExecute implements OrderStatusChangeEvent { kanjiaActivityGoodsDTO.setStock(stock); kanjiaActivityGoodsService.updateById(kanjiaActivityGoodsDTO); - this.mongoTemplate.save(kanjiaActivityGoodsDTO); //修改积分商品库存 } else if (promotionTypeEnum.equals(PromotionTypeEnum.POINTS_GOODS)) { PointsGoodsVO pointsGoodsVO = pointsGoodsService.getPointsGoodsDetail(orderItem.getPromotionId()); Integer stock = Integer.parseInt(cache.get(PromotionGoodsService.getPromotionGoodsStockCacheKey(promotionTypeEnum, orderItem.getPromotionId(), orderItem.getSkuId())).toString()); pointsGoodsVO.setActiveStock(stock); pointsGoodsService.updateById(pointsGoodsVO); - this.mongoTemplate.save(pointsGoodsVO); } else { - PromotionGoods pGoods = promotionGoodsService.getPromotionGoods(promotionTypeEnum, orderItem.getPromotionId(), orderItem.getSkuId()); + PromotionGoodsSearchParams searchParams = new PromotionGoodsSearchParams(); + searchParams.setPromotionType(promotionTypeEnum.name()); + searchParams.setPromotionId(orderItem.getPromotionId()); + searchParams.setSkuId(orderItem.getSkuId()); + PromotionGoods pGoods = promotionGoodsService.getPromotionsGoods(searchParams); //记录需要更新的促销库存信息 promotionKey.add( PromotionGoodsService.getPromotionGoodsStockCacheKey( promotionTypeEnum, orderItem.getPromotionId(), orderItem.getSkuId()) ); - promotionGoods.add(pGoods); + if (pGoods != null) { + promotionGoods.add(pGoods); + } } } goodsSkus.add(goodsSku); diff --git a/consumer/src/main/java/cn/lili/event/impl/WechatMessageExecute.java b/consumer/src/main/java/cn/lili/event/impl/WechatMessageExecute.java index dbd1d6ea..cbab13e4 100644 --- a/consumer/src/main/java/cn/lili/event/impl/WechatMessageExecute.java +++ b/consumer/src/main/java/cn/lili/event/impl/WechatMessageExecute.java @@ -2,10 +2,10 @@ package cn.lili.event.impl; import cn.lili.event.OrderStatusChangeEvent; import cn.lili.event.TradeEvent; -import cn.lili.modules.message.util.WechatMessageUtil; import cn.lili.modules.order.cart.entity.dto.TradeDTO; import cn.lili.modules.order.order.entity.dto.OrderMessage; import cn.lili.modules.order.order.entity.vo.OrderVO; +import cn.lili.modules.wechat.util.WechatMessageUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; diff --git a/consumer/src/main/java/cn/lili/init/SensitiveWordsInit.java b/consumer/src/main/java/cn/lili/init/SensitiveWordsInit.java new file mode 100644 index 00000000..7099d68c --- /dev/null +++ b/consumer/src/main/java/cn/lili/init/SensitiveWordsInit.java @@ -0,0 +1,34 @@ +package cn.lili.init; + +import cn.lili.modules.system.service.SensitiveWordsService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.ApplicationArguments; +import org.springframework.boot.ApplicationRunner; +import org.springframework.stereotype.Component; + +/** + * SensitiveWordsInit + * + * @author Chopper + * @version v1.0 + * 2021-11-29 11:38 + */ +@Slf4j +@Component +public class SensitiveWordsInit implements ApplicationRunner { + + @Autowired + private SensitiveWordsService sensitiveWordsService; + + /** + * consumer 启动时,实时更新一下过滤词 + * + * @param args 启动参数 + */ + @Override + public void run(ApplicationArguments args) { + sensitiveWordsService.resetCache(); + } + +} \ No newline at end of file diff --git a/consumer/src/main/java/cn/lili/listener/AfterSaleMessageListener.java b/consumer/src/main/java/cn/lili/listener/AfterSaleMessageListener.java index 21af1ac3..13dd5860 100644 --- a/consumer/src/main/java/cn/lili/listener/AfterSaleMessageListener.java +++ b/consumer/src/main/java/cn/lili/listener/AfterSaleMessageListener.java @@ -1,9 +1,9 @@ package cn.lili.listener; import cn.hutool.json.JSONUtil; -import cn.lili.rocketmq.tags.AfterSaleTagsEnum; import cn.lili.event.AfterSaleStatusChangeEvent; -import cn.lili.modules.order.order.entity.dos.AfterSale; +import cn.lili.modules.order.aftersale.entity.dos.AfterSale; +import cn.lili.rocketmq.tags.AfterSaleTagsEnum; import lombok.extern.slf4j.Slf4j; import org.apache.rocketmq.common.message.MessageExt; import org.apache.rocketmq.spring.annotation.RocketMQMessageListener; diff --git a/consumer/src/main/java/cn/lili/listener/GoodsMessageListener.java b/consumer/src/main/java/cn/lili/listener/GoodsMessageListener.java index 4f7afc51..4b9f3053 100644 --- a/consumer/src/main/java/cn/lili/listener/GoodsMessageListener.java +++ b/consumer/src/main/java/cn/lili/listener/GoodsMessageListener.java @@ -3,52 +3,44 @@ package cn.lili.listener; import cn.hutool.core.map.MapUtil; import cn.hutool.core.text.CharSequenceUtil; import cn.hutool.core.util.ArrayUtil; +import cn.hutool.core.util.ClassLoaderUtil; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; -import cn.lili.common.properties.RocketmqCustomProperties; import cn.lili.event.GoodsCommentCompleteEvent; import cn.lili.modules.distribution.entity.dos.DistributionGoods; -import cn.lili.modules.distribution.entity.dos.DistributionSelectedGoods; +import cn.lili.modules.distribution.entity.dto.DistributionGoodsSearchParams; import cn.lili.modules.distribution.service.DistributionGoodsService; import cn.lili.modules.distribution.service.DistributionSelectedGoodsService; -import cn.lili.modules.goods.entity.dos.Brand; -import cn.lili.modules.goods.entity.dos.Category; -import cn.lili.modules.goods.entity.dos.Goods; -import cn.lili.modules.goods.entity.dos.GoodsSku; +import cn.lili.modules.goods.entity.dos.*; import cn.lili.modules.goods.entity.dto.GoodsCompleteMessage; import cn.lili.modules.goods.entity.dto.GoodsParamsDTO; +import cn.lili.modules.goods.entity.dto.GoodsSearchParams; import cn.lili.modules.goods.entity.enums.GoodsAuthEnum; import cn.lili.modules.goods.entity.enums.GoodsStatusEnum; -import cn.lili.modules.goods.service.BrandService; -import cn.lili.modules.goods.service.CategoryService; -import cn.lili.modules.goods.service.GoodsService; -import cn.lili.modules.goods.service.GoodsSkuService; +import cn.lili.modules.goods.service.*; import cn.lili.modules.member.entity.dos.FootPrint; import cn.lili.modules.member.entity.dos.MemberEvaluation; import cn.lili.modules.member.service.FootprintService; import cn.lili.modules.member.service.GoodsCollectionService; +import cn.lili.modules.promotion.entity.dos.BasePromotions; +import cn.lili.modules.promotion.entity.dos.PromotionGoods; +import cn.lili.modules.promotion.entity.dto.search.PromotionGoodsSearchParams; +import cn.lili.modules.promotion.entity.enums.PromotionsScopeTypeEnum; +import cn.lili.modules.promotion.service.PromotionGoodsService; +import cn.lili.modules.promotion.service.PromotionService; import cn.lili.modules.search.entity.dos.EsGoodsIndex; import cn.lili.modules.search.service.EsGoodsIndexService; -import cn.lili.modules.search.utils.EsIndexUtil; -import cn.lili.modules.goods.entity.dos.StoreGoodsLabel; -import cn.lili.modules.goods.service.StoreGoodsLabelService; import cn.lili.modules.store.service.StoreService; -import cn.lili.rocketmq.RocketmqSendCallbackBuilder; import cn.lili.rocketmq.tags.GoodsTagsEnum; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import lombok.extern.slf4j.Slf4j; import org.apache.rocketmq.common.message.MessageExt; import org.apache.rocketmq.spring.annotation.RocketMQMessageListener; import org.apache.rocketmq.spring.core.RocketMQListener; -import org.apache.rocketmq.spring.core.RocketMQTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Map; +import java.util.*; +import java.util.stream.Collectors; /** * 商品消息 @@ -122,16 +114,11 @@ public class GoodsMessageListener implements RocketMQListener { @Autowired private StoreGoodsLabelService storeGoodsLabelService; - /** - * rocketMq - */ @Autowired - private RocketMQTemplate rocketMQTemplate; - /** - * rocketMq配置 - */ + private PromotionService promotionService; + @Autowired - private RocketmqCustomProperties rocketmqCustomProperties; + private PromotionGoodsService promotionGoodsService; @Override public void onMessage(MessageExt messageExt) { @@ -145,17 +132,31 @@ public class GoodsMessageListener implements RocketMQListener { //生成索引 case GENERATOR_GOODS_INDEX: try { - String goodsJsonStr = new String(messageExt.getBody()); - Goods goods = JSONUtil.toBean(goodsJsonStr, Goods.class); + String goodsId = new String(messageExt.getBody()); + log.info("生成索引: {}", goodsId); + Goods goods = this.goodsService.getById(goodsId); updateGoodsIndex(goods); } catch (Exception e) { log.error("生成商品索引事件执行异常,商品信息 {}", new String(messageExt.getBody())); } break; + case UPDATE_GOODS_INDEX_PROMOTIONS: + this.updateGoodsIndexPromotions(new String(messageExt.getBody())); + break; + case DELETE_GOODS_INDEX_PROMOTIONS: + BasePromotions promotions = JSONUtil.toBean(new String(messageExt.getBody()), BasePromotions.class); + if (CharSequenceUtil.isNotEmpty(promotions.getScopeId())) { + this.goodsIndexService.deleteEsGoodsPromotionByPromotionId(Arrays.asList(promotions.getScopeId().split(",")), promotions.getId()); + } else { + this.goodsIndexService.deleteEsGoodsPromotionByPromotionId(null, promotions.getId()); + } + break; case UPDATE_GOODS_INDEX: try { String goodsIdsJsonStr = new String(messageExt.getBody()); - List goodsList = goodsService.list(new LambdaQueryWrapper().in(Goods::getId, JSONUtil.toList(goodsIdsJsonStr, String.class))); + GoodsSearchParams searchParams = new GoodsSearchParams(); + searchParams.setId(ArrayUtil.join(JSONUtil.toList(goodsIdsJsonStr, String.class).toArray(), ",")); + List goodsList = goodsService.queryListByParams(searchParams); this.updateGoodsIndex(goodsList); } catch (Exception e) { log.error("更新商品索引事件执行异常,商品信息 {}", new String(messageExt.getBody())); @@ -185,12 +186,29 @@ public class GoodsMessageListener implements RocketMQListener { break; //审核商品 case GOODS_AUDIT: - updateGoodsNum(messageExt); + Goods goods = JSONUtil.toBean(new String(messageExt.getBody()), Goods.class); + updateGoodsNum(goods); + updateGoodsIndex(goods); break; //删除商品 case GOODS_DELETE: - deleteGoods(messageExt); - updateGoodsNum(messageExt); + try { + String goodsIdsJsonStr = new String(messageExt.getBody()); + for (String goodsId : JSONUtil.toList(goodsIdsJsonStr, String.class)) { + Goods goodsById = this.goodsService.getById(goodsId); + if (goodsById != null) { + this.deleteGoods(goodsById); + this.updateGoodsNum(goodsById); + List skuIdsByGoodsId = this.goodsSkuService.getSkuIdsByGoodsId(goodsId); + if (skuIdsByGoodsId != null && !skuIdsByGoodsId.isEmpty()) { + this.goodsIndexService.deleteIndexByIds(skuIdsByGoodsId); + } + } + } + + } catch (Exception e) { + log.error("删除商品索引事件执行异常,商品信息 {}", new String(messageExt.getBody())); + } break; //规格删除 case SKU_DELETE: @@ -198,10 +216,6 @@ public class GoodsMessageListener implements RocketMQListener { List skuIds = JSONUtil.toList(message, String.class); goodsCollectionService.deleteSkuCollection(skuIds); break; - //收藏商品 - case GOODS_COLLECTION: - storeService.updateStoreCollectionNum(new String(messageExt.getBody())); - break; //商品评价 case GOODS_COMMENT_COMPLETE: MemberEvaluation memberEvaluation = JSONUtil.toBean(new String(messageExt.getBody()), MemberEvaluation.class); @@ -226,6 +240,35 @@ public class GoodsMessageListener implements RocketMQListener { } } + private void updateGoodsIndexPromotions(String promotionsJsonStr) { + try { + log.info("更新商品索引促销信息: {}", promotionsJsonStr); + JSONObject jsonObject = JSONUtil.parseObj(promotionsJsonStr); + BasePromotions promotions = (BasePromotions) jsonObject.get("promotions", + ClassLoaderUtil.loadClass(jsonObject.get("promotionsType").toString())); + String esPromotionKey = jsonObject.get("esPromotionKey").toString(); + if (PromotionsScopeTypeEnum.PORTION_GOODS.name().equals(promotions.getScopeType())) { + PromotionGoodsSearchParams searchParams = new PromotionGoodsSearchParams(); + searchParams.setPromotionId(promotions.getId()); + List promotionGoodsList = this.promotionGoodsService.listFindAll(searchParams); + List skuIds = promotionGoodsList.stream().map(PromotionGoods::getSkuId).collect(Collectors.toList()); + this.goodsIndexService.deleteEsGoodsPromotionByPromotionId(skuIds, promotions.getId()); + this.goodsIndexService.updateEsGoodsIndexByList(promotionGoodsList, promotions, esPromotionKey); + } else if (PromotionsScopeTypeEnum.PORTION_GOODS_CATEGORY.name().equals(promotions.getScopeType())) { + GoodsSearchParams searchParams = new GoodsSearchParams(); + searchParams.setCategoryPath(promotions.getScopeId()); + List goodsSkuByList = this.goodsSkuService.getGoodsSkuByList(searchParams); + List skuIds = goodsSkuByList.stream().map(GoodsSku::getId).collect(Collectors.toList()); + this.goodsIndexService.deleteEsGoodsPromotionByPromotionId(skuIds, promotions.getId()); + this.goodsIndexService.updateEsGoodsIndexPromotions(skuIds, promotions, esPromotionKey); + } else if (PromotionsScopeTypeEnum.ALL.name().equals(promotions.getScopeType())) { + this.goodsIndexService.updateEsGoodsIndexAllByList(promotions, esPromotionKey); + } + } catch (Exception e) { + log.error("生成商品索引促销信息执行异常", e); + } + } + /** * 更新商品索引 * @@ -235,8 +278,11 @@ public class GoodsMessageListener implements RocketMQListener { List goodsIndices = new ArrayList<>(); for (Goods goods : goodsList) { //如果商品通过审核&&并且已上架 - List goodsSkuList = this.goodsSkuService.list(new LambdaQueryWrapper().eq(GoodsSku::getGoodsId, goods.getId()).gt(GoodsSku::getQuantity, 0)); - if (goods.getIsAuth().equals(GoodsAuthEnum.PASS.name()) + GoodsSearchParams searchParams = new GoodsSearchParams(); + searchParams.setGoodsId(goods.getId()); + searchParams.setGeQuantity(0); + List goodsSkuList = this.goodsSkuService.getGoodsSkuByList(searchParams); + if (goods.getAuthFlag().equals(GoodsAuthEnum.PASS.name()) && goods.getMarketEnable().equals(GoodsStatusEnum.UPPER.name()) && Boolean.FALSE.equals(goods.getDeleteFlag())) { goodsSkuList.forEach(goodsSku -> { @@ -264,8 +310,12 @@ public class GoodsMessageListener implements RocketMQListener { */ private void updateGoodsIndex(Goods goods) { //如果商品通过审核&&并且已上架 - List goodsSkuList = this.goodsSkuService.list(new LambdaQueryWrapper().eq(GoodsSku::getGoodsId, goods.getId())); - if (goods.getIsAuth().equals(GoodsAuthEnum.PASS.name()) + GoodsSearchParams searchParams = new GoodsSearchParams(); + searchParams.setGoodsId(goods.getId()); + List goodsSkuList = this.goodsSkuService.getGoodsSkuByList(searchParams); + log.info("goods:{}", goods); + log.info("goodsSkuList:{}", goodsSkuList); + if (goods.getAuthFlag().equals(GoodsAuthEnum.PASS.name()) && goods.getMarketEnable().equals(GoodsStatusEnum.UPPER.name()) && Boolean.FALSE.equals(goods.getDeleteFlag())) { this.generatorGoodsIndex(goods, goodsSkuList); @@ -293,6 +343,8 @@ public class GoodsMessageListener implements RocketMQListener { EsGoodsIndex esGoodsOld = goodsIndexService.findById(goodsSku.getId()); EsGoodsIndex goodsIndex = this.settingUpGoodsIndexData(goods, goodsSku); goodsIndex.setSkuSource(skuSource--); + log.info("goodsSku:{}", goodsSku); + log.info("esGoodsOld:{}", esGoodsOld); //如果商品库存不为0,并且es中有数据 if (goodsSku.getQuantity() > 0 && esGoodsOld == null) { log.info("生成商品索引 {}", goodsIndex); @@ -309,7 +361,7 @@ public class GoodsMessageListener implements RocketMQListener { List goodsParamDTOS = JSONUtil.toList(goods.getParams(), GoodsParamsDTO.class); goodsIndex = new EsGoodsIndex(goodsSku, goodsParamDTOS); } - goodsIndex.setIsAuth(goods.getIsAuth()); + goodsIndex.setAuthFlag(goods.getAuthFlag()); goodsIndex.setMarketEnable(goods.getMarketEnable()); this.settingUpGoodsIndexOtherParam(goodsIndex); return goodsIndex; @@ -336,6 +388,11 @@ public class GoodsMessageListener implements RocketMQListener { goodsIndex.setStoreCategoryNamePath(ArrayUtil.join(storeGoodsLabels.stream().map(StoreGoodsLabel::getLabelName).toArray(), ",")); } } + + if (goodsIndex.getPromotionMap() == null || goodsIndex.getPromotionMap().isEmpty()) { + Map goodsCurrentPromotionMap = promotionService.getGoodsPromotionMap(goodsIndex); + goodsIndex.setPromotionMapJson(JSONUtil.toJsonStr(goodsCurrentPromotionMap)); + } } @@ -345,38 +402,37 @@ public class GoodsMessageListener implements RocketMQListener { * 2.删除分销员-分销商品绑定关系 * 3.删除分销商品 * - * @param messageExt 消息 + * @param goods 消息 */ - private void deleteGoods(MessageExt messageExt) { - Goods goods = JSONUtil.toBean(new String(messageExt.getBody()), Goods.class); + private void deleteGoods(Goods goods) { + DistributionGoodsSearchParams searchParams = new DistributionGoodsSearchParams(); + searchParams.setGoodsId(goods.getId()); //删除获取分销商品 - DistributionGoods distributionGoods = distributionGoodsService.getOne(new LambdaQueryWrapper() - .eq(DistributionGoods::getGoodsId, goods.getId())); + DistributionGoods distributionGoods = distributionGoodsService.getDistributionGoods(searchParams); - //删除分销商品绑定关系 - distributionSelectedGoodsService.remove(new LambdaQueryWrapper() - .eq(DistributionSelectedGoods::getDistributionGoodsId, distributionGoods.getId())); + if (distributionGoods != null) { - //删除分销商品 - distributionGoodsService.removeById(distributionGoods.getId()); + //删除分销商品绑定关系 + distributionSelectedGoodsService.deleteByDistributionGoodsId(distributionGoods.getId()); + + //删除分销商品 + distributionGoodsService.removeById(distributionGoods.getId()); + } } /** * 修改商品数量 * - * @param messageExt 信息体 + * @param goods 信息体 */ - private void updateGoodsNum(MessageExt messageExt) { - - Goods goods; + private void updateGoodsNum(Goods goods) { try { - goods = JSONUtil.toBean(new String(messageExt.getBody()), Goods.class); //更新店铺商品数量 assert goods != null; storeService.updateStoreGoodsNum(goods.getStoreId()); } catch (Exception e) { - log.error("商品MQ信息错误:{}", messageExt.toString()); + log.error("修改商品数量错误"); } } @@ -399,9 +455,7 @@ public class GoodsMessageListener implements RocketMQListener { goods.setBuyCount(0); } int buyCount = goods.getBuyCount() + goodsCompleteMessage.getBuyNum(); - goodsService.update(new LambdaUpdateWrapper() - .eq(Goods::getId, goodsCompleteMessage.getGoodsId()) - .set(Goods::getBuyCount, buyCount)); + this.goodsService.updateGoodsBuyCount(goodsCompleteMessage.getGoodsId(), buyCount); } else { log.error("商品Id为[" + goodsCompleteMessage.getGoodsId() + "的商品不存在,更新商品失败!"); } @@ -415,13 +469,10 @@ public class GoodsMessageListener implements RocketMQListener { goodsSku.setBuyCount(buyCount); goodsSkuService.update(goodsSku); - //修改规格索引,发送mq消息 - Map updateIndexFieldsMap = EsIndexUtil.getUpdateIndexFieldsMap( - MapUtil.builder().put("id", goodsCompleteMessage.getSkuId()).build(), - MapUtil.builder().put("buyCount", buyCount).build()); - String destination = rocketmqCustomProperties.getGoodsTopic() + ":" + GoodsTagsEnum.UPDATE_GOODS_INDEX_FIELD.name(); - rocketMQTemplate.asyncSend(destination, JSONUtil.toJsonStr(updateIndexFieldsMap), RocketmqSendCallbackBuilder.commonCallback()); - goodsIndexService.updateIndex(goodsCompleteMessage.getSkuId(), new EsGoodsIndex().setBuyCount(buyCount)); + this.goodsIndexService.updateIndex( + MapUtil.builder(new HashMap()).put("id", goodsCompleteMessage.getSkuId()).build(), + MapUtil.builder(new HashMap()).put("buyCount", buyCount).build()); + } else { log.error("商品SkuId为[" + goodsCompleteMessage.getGoodsId() + "的商品不存在,更新商品失败!"); } diff --git a/consumer/src/main/java/cn/lili/listener/MemberMessageListener.java b/consumer/src/main/java/cn/lili/listener/MemberMessageListener.java index 48800bb5..2e69d28a 100644 --- a/consumer/src/main/java/cn/lili/listener/MemberMessageListener.java +++ b/consumer/src/main/java/cn/lili/listener/MemberMessageListener.java @@ -1,15 +1,15 @@ package cn.lili.listener; import cn.hutool.json.JSONUtil; -import cn.lili.rocketmq.tags.MemberTagsEnum; import cn.lili.event.MemberPointChangeEvent; import cn.lili.event.MemberRegisterEvent; import cn.lili.event.MemberWithdrawalEvent; import cn.lili.modules.member.entity.dos.Member; import cn.lili.modules.member.entity.dos.MemberSign; import cn.lili.modules.member.entity.dto.MemberPointMessage; -import cn.lili.modules.member.entity.dto.MemberWithdrawalMessage; import cn.lili.modules.member.service.MemberSignService; +import cn.lili.modules.wallet.entity.dto.MemberWithdrawalMessage; +import cn.lili.rocketmq.tags.MemberTagsEnum; import lombok.extern.slf4j.Slf4j; import org.apache.rocketmq.common.message.MessageExt; import org.apache.rocketmq.spring.annotation.RocketMQMessageListener; diff --git a/consumer/src/main/java/cn/lili/listener/NoticeSendMessageListener.java b/consumer/src/main/java/cn/lili/listener/NoticeSendMessageListener.java index c45dad05..983fd87a 100644 --- a/consumer/src/main/java/cn/lili/listener/NoticeSendMessageListener.java +++ b/consumer/src/main/java/cn/lili/listener/NoticeSendMessageListener.java @@ -10,15 +10,15 @@ import cn.lili.modules.member.service.MemberService; import cn.lili.modules.message.entity.dos.MemberMessage; import cn.lili.modules.message.entity.dos.Message; import cn.lili.modules.message.entity.dos.StoreMessage; -import cn.lili.modules.message.entity.dto.SmsReachDTO; import cn.lili.modules.message.entity.enums.MessageSendClient; import cn.lili.modules.message.entity.enums.MessageStatusEnum; import cn.lili.modules.message.entity.enums.RangeEnum; import cn.lili.modules.message.service.MemberMessageService; import cn.lili.modules.message.service.StoreMessageService; +import cn.lili.modules.sms.SmsUtil; +import cn.lili.modules.sms.entity.dto.SmsReachDTO; import cn.lili.modules.store.entity.dos.Store; import cn.lili.modules.store.service.StoreService; -import cn.lili.modules.system.sms.SmsUtil; import cn.lili.rocketmq.tags.OtherTagsEnum; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -158,12 +158,12 @@ public class NoticeSendMessageListener implements RocketMQListener { //查询所有会员总数,因为会员总数比较大 如果一次性查出来会占用数据库资源,所以要分页查询 MemberSearchVO memberSearchVO = new MemberSearchVO(); memberSearchVO.setDisabled(SwitchEnum.OPEN.name()); - Integer memberNum = memberService.getMemberNum(memberSearchVO); + long memberNum = memberService.getMemberNum(memberSearchVO); //构建分页查询参数 //100条查一次 - Integer pageSize = 100; - Integer pageCount = 0; - pageCount = memberNum / pageSize; + int pageSize = 100; + int pageCount; + pageCount = (int) (memberNum / pageSize); pageCount = memberNum % pageSize > 0 ? pageCount + 1 : pageCount; for (int i = 1; i <= pageCount; i++) { PageVO pageVO = new PageVO(); diff --git a/consumer/src/main/java/cn/lili/listener/OrderMessageListener.java b/consumer/src/main/java/cn/lili/listener/OrderMessageListener.java index 6c32fc44..d72ff5fd 100644 --- a/consumer/src/main/java/cn/lili/listener/OrderMessageListener.java +++ b/consumer/src/main/java/cn/lili/listener/OrderMessageListener.java @@ -2,11 +2,11 @@ package cn.lili.listener; import cn.hutool.json.JSONUtil; import cn.lili.cache.Cache; -import cn.lili.rocketmq.tags.MqOrderTagsEnum; import cn.lili.event.OrderStatusChangeEvent; import cn.lili.event.TradeEvent; import cn.lili.modules.order.cart.entity.dto.TradeDTO; import cn.lili.modules.order.order.entity.dto.OrderMessage; +import cn.lili.rocketmq.tags.OrderTagsEnum; import lombok.extern.slf4j.Slf4j; import org.apache.rocketmq.common.message.MessageExt; import org.apache.rocketmq.spring.annotation.RocketMQMessageListener; @@ -58,11 +58,11 @@ public class OrderMessageListener implements RocketMQListener { */ public void orderStatusEvent(MessageExt messageExt) { - switch (MqOrderTagsEnum.valueOf(messageExt.getTags())) { + switch (OrderTagsEnum.valueOf(messageExt.getTags())) { //订单创建 case ORDER_CREATE: String key = new String(messageExt.getBody()); - TradeDTO tradeDTO = (TradeDTO) cache.get(key); + TradeDTO tradeDTO = JSONUtil.toBean(cache.getString(key), TradeDTO.class); boolean result = true; for (TradeEvent event : tradeEvent) { try { diff --git a/consumer/src/main/java/cn/lili/service/NoticeSendMessageConsumer.java b/consumer/src/main/java/cn/lili/service/NoticeSendMessageConsumer.java deleted file mode 100644 index ef07b637..00000000 --- a/consumer/src/main/java/cn/lili/service/NoticeSendMessageConsumer.java +++ /dev/null @@ -1,22 +0,0 @@ -package cn.lili.service; - -import cn.lili.event.OrderStatusChangeEvent; -import cn.lili.modules.order.order.entity.dto.OrderMessage; -import org.springframework.stereotype.Component; - -/** - * 消息发送 - * - * @author paulG - * @since 2020/12/9 - */ -@Component -public class NoticeSendMessageConsumer implements OrderStatusChangeEvent { - - - @Override - public void orderChange(OrderMessage orderMessage) { - - - } -} 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 f197ab07..958402db 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 @@ -3,13 +3,12 @@ package cn.lili.timetask.handler.impl.bill; import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; import cn.lili.modules.store.entity.dto.StoreSettlementDay; -import cn.lili.modules.store.mapper.StoreDetailMapper; import cn.lili.modules.store.service.BillService; +import cn.lili.modules.store.service.StoreDetailService; import cn.lili.timetask.handler.EveryDayExecute; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import javax.annotation.Resource; import java.util.List; /** @@ -29,8 +28,8 @@ public class BillExecute implements EveryDayExecute { /** * 店铺详情 */ - @Resource - private StoreDetailMapper storeDetailMapper; + @Autowired + private StoreDetailService storeDetailService; /** * 1.查询今日待结算的商家 @@ -44,18 +43,18 @@ public class BillExecute implements EveryDayExecute { int day = DateUtil.date().dayOfMonth(); //获取待结算商家列表 - List storeList = storeDetailMapper.getSettlementStore(day); + List storeList = storeDetailService.getSettlementStore(day); //获取当前时间 - DateTime endTime =DateUtil.date(); + DateTime endTime = DateUtil.date(); //批量商家结算 for (StoreSettlementDay storeSettlementDay : storeList) { //生成结算单 - billService.createBill(storeSettlementDay.getStoreId(), storeSettlementDay.getSettlementDay(),endTime); + billService.createBill(storeSettlementDay.getStoreId(), storeSettlementDay.getSettlementDay(), endTime); //修改店铺结算时间 - storeDetailMapper.updateSettlementDay(storeSettlementDay.getStoreId(), endTime); + storeDetailService.updateSettlementDay(storeSettlementDay.getStoreId(), endTime); } } } 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 820d5aff..bfe509b3 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 @@ -8,6 +8,7 @@ import cn.lili.common.exception.ServiceException; import cn.lili.modules.member.entity.dto.MemberEvaluationDTO; import cn.lili.modules.member.entity.enums.EvaluationGradeEnum; import cn.lili.modules.member.service.MemberEvaluationService; +import cn.lili.modules.order.aftersale.service.AfterSaleService; 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; @@ -15,7 +16,6 @@ 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; diff --git a/consumer/src/main/java/cn/lili/timetask/handler/impl/order/RechargeOrderTaskExecute.java b/consumer/src/main/java/cn/lili/timetask/handler/impl/order/RechargeOrderTaskExecute.java index b64f740c..e0ca23a1 100644 --- a/consumer/src/main/java/cn/lili/timetask/handler/impl/order/RechargeOrderTaskExecute.java +++ b/consumer/src/main/java/cn/lili/timetask/handler/impl/order/RechargeOrderTaskExecute.java @@ -4,12 +4,12 @@ import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; import cn.hutool.json.JSONUtil; import cn.lili.modules.order.order.entity.enums.PayStatusEnum; -import cn.lili.modules.order.trade.entity.dos.Recharge; -import cn.lili.modules.order.trade.service.RechargeService; import cn.lili.modules.system.entity.dos.Setting; import cn.lili.modules.system.entity.dto.OrderSetting; import cn.lili.modules.system.entity.enums.SettingEnum; import cn.lili.modules.system.service.SettingService; +import cn.lili.modules.wallet.entity.dos.Recharge; +import cn.lili.modules.wallet.service.RechargeService; import cn.lili.timetask.handler.EveryMinuteExecute; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.extern.slf4j.Slf4j; 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 0cf33727..c996005a 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 @@ -1,34 +1,18 @@ package cn.lili.timetask.handler.impl.promotion; -import cn.lili.modules.order.cart.entity.vo.FullDiscountVO; -import cn.lili.modules.promotion.entity.dos.MemberCoupon; -import cn.lili.modules.promotion.entity.dos.PromotionGoods; import cn.lili.modules.promotion.entity.dos.Seckill; -import cn.lili.modules.promotion.entity.enums.MemberCouponStatusEnum; -import cn.lili.modules.promotion.entity.enums.PromotionStatusEnum; -import cn.lili.modules.promotion.entity.vos.CouponVO; -import cn.lili.modules.promotion.entity.vos.PintuanVO; -import cn.lili.modules.promotion.service.*; +import cn.lili.modules.promotion.service.SeckillService; import cn.lili.modules.search.service.EsGoodsIndexService; import cn.lili.modules.system.entity.dos.Setting; import cn.lili.modules.system.entity.dto.SeckillSetting; 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.update.LambdaUpdateWrapper; -import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.google.gson.Gson; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.mongodb.core.MongoTemplate; -import org.springframework.data.mongodb.core.query.Criteria; -import org.springframework.data.mongodb.core.query.Query; import org.springframework.stereotype.Component; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; - /** * 促销活动每日定时器 * @@ -39,41 +23,11 @@ import java.util.List; @Component public class PromotionEverydayExecute implements EveryDayExecute { - /** - * Mongo - */ - @Autowired - private MongoTemplate mongoTemplate; /** * 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; /** * 系统设置 */ @@ -90,125 +44,13 @@ public class PromotionEverydayExecute implements EveryDayExecute { */ @Override public void execute() { - //mongo查询条件 - Query query = new Query(); - //结束条件 活动未关闭/活动未结束 - query.addCriteria(Criteria.where("promotionStatus").ne(PromotionStatusEnum.END.name()) - .orOperator(Criteria.where("promotionStatus").ne(PromotionStatusEnum.CLOSE.name()))); - //结束条件 活动结束时间大于当前时间 - query.addCriteria(Criteria.where("endTime").lte(new Date())); - - //结束满减活动 - endFullDiscount(query); - - //关闭拼团活动 - endPintuan(query); - - //结束优惠券 - endCoupon(query); - + //清除所以商品索引的无效促销活动 + this.esGoodsIndexService.cleanInvalidPromotion(); //定时创建活动 addSeckill(); } - /** - * 结束优惠券活动 - * - * @param query - */ - private void endCoupon(Query query) { - - try { - //关闭优惠券活动 - List couponVOS = mongoTemplate.find(query, CouponVO.class); - if (!couponVOS.isEmpty()) { - List ids = new ArrayList<>(); - // //关闭的优惠券活动 - for (CouponVO vo : couponVOS) { - vo.setPromotionStatus(PromotionStatusEnum.END.name()); - if (vo.getPromotionGoodsList() != null && !vo.getPromotionGoodsList().isEmpty()) { - for (PromotionGoods promotionGoods : vo.getPromotionGoodsList()) { - promotionGoods.setPromotionStatus(PromotionStatusEnum.END.name()); - esGoodsIndexService.deleteEsGoodsPromotionByPromotionId(promotionGoods.getSkuId(), vo.getId()); - } - } - mongoTemplate.save(vo); - ids.add(vo.getId()); - } - couponService.update(this.getUpdatePromotionWrapper(ids)); - LambdaUpdateWrapper memberCouponLambdaUpdateWrapper = new LambdaUpdateWrapper().in(MemberCoupon::getCouponId, ids).set(MemberCoupon::getMemberCouponStatus, MemberCouponStatusEnum.EXPIRE.name()); - memberCouponService.update(memberCouponLambdaUpdateWrapper); - //将活动商品对照表进行结束处理 - promotionGoodsService.update(this.getUpdatePromotionGoodsWrapper(ids)); - } - } catch (Exception e) { - log.error("优惠券活动关闭错误", e); - } - } - - /** - * 结束拼团活动 - * - * @param query - */ - private void endPintuan(Query query) { - try { - //关闭拼团活动 - List pintuanVOS = mongoTemplate.find(query, PintuanVO.class); - if (!pintuanVOS.isEmpty()) { - //准备修改活动的id - List ids = new ArrayList<>(); - for (PintuanVO vo : pintuanVOS) { - vo.setPromotionStatus(PromotionStatusEnum.END.name()); - if (vo.getPromotionGoodsList() != null && !vo.getPromotionGoodsList().isEmpty()) { - for (PromotionGoods promotionGoods : vo.getPromotionGoodsList()) { - promotionGoods.setPromotionStatus(PromotionStatusEnum.END.name()); - esGoodsIndexService.deleteEsGoodsPromotionByPromotionId(promotionGoods.getSkuId(), vo.getId()); - } - } - mongoTemplate.save(vo); - ids.add(vo.getId()); - } - pintuanService.update(this.getUpdatePromotionWrapper(ids)); - //将活动商品对照表进行结束处理 - promotionGoodsService.update(this.getUpdatePromotionGoodsWrapper(ids)); - } - } catch (Exception e) { - log.error("拼团活动关闭错误", e); - } - } - - /** - * 结束满减活动 - * - * @param query - */ - private void endFullDiscount(Query query) { - try { - //关闭满减活动 - List fullDiscountVOS = mongoTemplate.find(query, FullDiscountVO.class); - if (!fullDiscountVOS.isEmpty()) { - List ids = new ArrayList<>(); - //循环活动 关闭活动 - for (FullDiscountVO vo : fullDiscountVOS) { - vo.setPromotionStatus(PromotionStatusEnum.END.name()); - if (vo.getPromotionGoodsList() != null && !vo.getPromotionGoodsList().isEmpty()) { - for (PromotionGoods promotionGoods : vo.getPromotionGoodsList()) { - promotionGoods.setPromotionStatus(PromotionStatusEnum.END.name()); - esGoodsIndexService.deleteEsGoodsPromotionByPromotionId(promotionGoods.getSkuId(), vo.getId()); - } - } - mongoTemplate.save(vo); - ids.add(vo.getId()); - } - fullDiscountService.update(this.getUpdatePromotionWrapper(ids)); - } - } catch (Exception e) { - log.error("满减活动关闭错误", e); - } - } - /** * 添加秒杀活动 * 从系统设置中获取秒杀活动的配置 @@ -218,32 +60,6 @@ public class PromotionEverydayExecute implements EveryDayExecute { Setting setting = settingService.get(SettingEnum.SECKILL_SETTING.name()); SeckillSetting seckillSetting = new Gson().fromJson(setting.getSettingValue(), SeckillSetting.class); Seckill seckill = new Seckill(SeckillService.PRE_CREATION, seckillSetting.getHours(), seckillSetting.getSeckillRule()); - seckillService.saveSeckill(seckill); - } - - /** - * 获取促销修改查询条件 修改活动状态 - * - * @param ids 促销活动ID - * @return 促销活动商品查询Wrapper - */ - private UpdateWrapper getUpdatePromotionWrapper(List ids) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.in("id", ids); - updateWrapper.set("promotion_status", PromotionStatusEnum.END.name()); - return updateWrapper; - } - - /** - * 获取商品的促销修改查询条件 修改商品状态 - * - * @param ids 促销活动ID - * @return 促销活动商品修改Wrapper - */ - private UpdateWrapper getUpdatePromotionGoodsWrapper(List ids) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.in("promotion_id", ids); - updateWrapper.set("promotion_status", PromotionStatusEnum.END.name()); - return updateWrapper; + seckillService.savePromotions(seckill); } } 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 63b43f2b..b349250d 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 @@ -1,7 +1,7 @@ package cn.lili.timetask.handler.impl.statistics; import cn.lili.modules.statistics.entity.dos.MemberStatisticsData; -import cn.lili.modules.statistics.service.MemberStatisticsDataService; +import cn.lili.modules.statistics.service.MemberStatisticsService; import cn.lili.timetask.handler.EveryDayExecute; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -24,7 +24,7 @@ public class MemberStatisticsExecute implements EveryDayExecute { * 会员统计 */ @Autowired - private MemberStatisticsDataService memberStatisticsDataService; + private MemberStatisticsService memberStatisticsService; @Override public void execute() { @@ -43,30 +43,13 @@ public class MemberStatisticsExecute implements EveryDayExecute { calendar.set(Calendar.DAY_OF_MONTH, calendar.get(Calendar.DAY_OF_MONTH) - 1); startTime = calendar.getTime(); MemberStatisticsData memberStatisticsData = new MemberStatisticsData(); - memberStatisticsData.setMemberCount(memberStatisticsDataService.memberCount(endTime)); + memberStatisticsData.setMemberCount(memberStatisticsService.memberCount(endTime)); memberStatisticsData.setCreateDate(startTime); - memberStatisticsData.setActiveQuantity(memberStatisticsDataService.activeQuantity(startTime)); - memberStatisticsData.setNewlyAdded(memberStatisticsDataService.newlyAdded(startTime, endTime)); - memberStatisticsDataService.save(memberStatisticsData); + memberStatisticsData.setActiveQuantity(memberStatisticsService.activeQuantity(startTime)); + memberStatisticsData.setNewlyAdded(memberStatisticsService.newlyAdded(startTime, endTime)); + memberStatisticsService.save(memberStatisticsData); } catch (Exception e) { log.error("每日会员统计功能异常:", e); } } - - public static void main(String[] args) { - - //统计的时间(开始。结束时间) - Date startTime, endTime; - //初始值 - Calendar calendar = Calendar.getInstance(); - calendar.set(Calendar.SECOND, 0); - calendar.set(Calendar.MILLISECOND, 1); - calendar.set(Calendar.MINUTE, 0); - calendar.set(Calendar.HOUR_OF_DAY, 0); - endTime = calendar.getTime(); - //-1天,即为开始时间 - calendar.set(Calendar.DAY_OF_MONTH, calendar.get(Calendar.DAY_OF_MONTH) - 1); - startTime = calendar.getTime(); - System.out.println(startTime); - } } \ No newline at end of file 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 3821f8b6..0783517b 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 @@ -5,7 +5,7 @@ import cn.lili.cache.Cache; import cn.lili.cache.CachePrefix; import cn.lili.common.utils.BeanUtil; import cn.lili.modules.statistics.entity.dos.PlatformViewData; -import cn.lili.modules.statistics.service.PlatformViewDataService; +import cn.lili.modules.statistics.service.PlatformViewService; import cn.lili.timetask.handler.EveryDayExecute; import lombok.Data; import lombok.extern.slf4j.Slf4j; @@ -37,7 +37,7 @@ public class PageViewStatisticsExecute implements EveryDayExecute { * 平台PV统计 */ @Autowired - private PlatformViewDataService platformViewDataService; + private PlatformViewService platformViewService; @Override public void execute() { @@ -123,7 +123,7 @@ public class PageViewStatisticsExecute implements EveryDayExecute { @Transactional(rollbackFor = Exception.class) void batchSave(List pvKeys, List uvKeys, List platformViewData) { log.debug("批量保存流量数据,共计【{}】条", platformViewData.size()); - platformViewDataService.saveBatch(platformViewData); + platformViewService.saveBatch(platformViewData); //批量删除缓存key cache.multiDel(pvKeys); cache.multiDel(uvKeys); 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 9d6cf1fe..70e908e8 100644 --- a/consumer/src/main/java/cn/lili/trigger/executor/PromotionTimeTriggerExecutor.java +++ b/consumer/src/main/java/cn/lili/trigger/executor/PromotionTimeTriggerExecutor.java @@ -1,16 +1,11 @@ package cn.lili.trigger.executor; import cn.hutool.json.JSONUtil; -import cn.lili.common.properties.RocketmqCustomProperties; import cn.lili.modules.order.order.service.OrderService; -import cn.lili.modules.promotion.entity.enums.PromotionStatusEnum; -import cn.lili.modules.promotion.service.PromotionService; +import cn.lili.modules.promotion.entity.dos.Pintuan; import cn.lili.trigger.TimeTriggerExecutor; -import cn.lili.trigger.interfaces.TimeTrigger; import cn.lili.trigger.message.PintuanOrderMessage; -import cn.lili.trigger.message.PromotionMessage; import cn.lili.trigger.model.TimeExecuteConstant; -import cn.lili.trigger.model.TimeTriggerMsg; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -25,21 +20,6 @@ import org.springframework.stereotype.Component; @Slf4j @Component(TimeExecuteConstant.PROMOTION_EXECUTOR) public class PromotionTimeTriggerExecutor implements TimeTriggerExecutor { - /** - * 促销 - */ - @Autowired - private PromotionService promotionService; - /** - * RocketMQ - */ - @Autowired - private RocketmqCustomProperties rocketmqCustomProperties; - /** - * 延时任务 - */ - @Autowired - private TimeTrigger timeTrigger; /** * 订单 */ @@ -49,32 +29,6 @@ public class PromotionTimeTriggerExecutor implements TimeTriggerExecutor { @Override public void execute(Object object) { - PromotionMessage promotionMessage = JSONUtil.toBean(JSONUtil.parseObj(object), PromotionMessage.class); - //促销延时信息 - if (promotionMessage != null && promotionMessage.getPromotionId() != null) { - log.info("促销活动信息消费:{}", promotionMessage); - //如果为促销活动开始,则需要发布促销活动结束的定时任务 - if (PromotionStatusEnum.START.name().equals(promotionMessage.getPromotionStatus())) { - if (!promotionService.updatePromotionStatus(promotionMessage)) { - log.error("开始促销活动失败: {}", promotionMessage); - return; - } - //促销活动开始后,设置促销活动结束的定时任务 - promotionMessage.setPromotionStatus(PromotionStatusEnum.END.name()); - String uniqueKey = "{TIME_TRIGGER_" + promotionMessage.getPromotionType() + "}_" + promotionMessage.getPromotionId(); - if (promotionMessage.getEndTime() != null) { - //结束时间(延时一分钟) - long closeTime = promotionMessage.getEndTime().getTime() + 60000; - TimeTriggerMsg timeTriggerMsg = new TimeTriggerMsg(TimeExecuteConstant.PROMOTION_EXECUTOR, closeTime, promotionMessage, uniqueKey, rocketmqCustomProperties.getPromotionTopic()); - //添加延时任务 - timeTrigger.addDelay(timeTriggerMsg); - } - } else { - //不是开始,则修改活动状态 - promotionService.updatePromotionStatus(promotionMessage); - } - return; - } //拼团订单消息 PintuanOrderMessage pintuanOrderMessage = JSONUtil.toBean(JSONUtil.parseObj(object), PintuanOrderMessage.class); if (pintuanOrderMessage != null && pintuanOrderMessage.getPintuanId() != null) { @@ -82,6 +36,10 @@ public class PromotionTimeTriggerExecutor implements TimeTriggerExecutor { //拼团订单自动处理 orderService.agglomeratePintuanOrder(pintuanOrderMessage.getPintuanId(), pintuanOrderMessage.getOrderSn()); } + Pintuan pintuan = JSONUtil.toBean(JSONUtil.parseObj(object), Pintuan.class); + if (pintuan != null && pintuan.getId() != null) { + this.orderService.checkFictitiousOrder(pintuan.getId(), pintuan.getRequiredNum(), pintuan.getFictitious()); + } } diff --git a/consumer/src/main/resources/application.yml b/consumer/src/main/resources/application.yml index dc60ddfa..e142ef08 100644 --- a/consumer/src/main/resources/application.yml +++ b/consumer/src/main/resources/application.yml @@ -32,15 +32,6 @@ spring: admin: client: url: http://127.0.0.1:8000 - # mongodb - data: - mongodb: - uri: 127.0.0.1:27017 - database: lilishop - username: root - password: lilishop - authentication-database: admin - # replica-set-name: mongoreplset cache: type: redis # Redis @@ -191,7 +182,6 @@ logging: cn.lili: info # org.hibernate: debug # org.springframework: debug - # org.springframework.data.mongodb.core: debug file: # 指定路径 path: lili-logs diff --git a/consumer/src/test/java/cn/lili/buyer/test/bill/BillTest.java b/consumer/src/test/java/cn/lili/buyer/test/bill/BillTest.java new file mode 100644 index 00000000..969fa7fc --- /dev/null +++ b/consumer/src/test/java/cn/lili/buyer/test/bill/BillTest.java @@ -0,0 +1,61 @@ +package cn.lili.buyer.test.bill; + +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import cn.lili.modules.store.entity.dto.StoreSettlementDay; +import cn.lili.modules.store.service.BillService; +import cn.lili.modules.store.service.StoreDetailService; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +import java.util.List; + +/** + * @author paulG + * @since 2022/1/10 + **/ +@ExtendWith(SpringExtension.class) +@SpringBootTest +public class BillTest { + + + /** + * 结算单 + */ + @Autowired + private BillService billService; + + /** + * 店铺详情 + */ + @Autowired + private StoreDetailService storeDetailService; + + @Test + void createBillTest() { + //获取当前天数 + int day = DateUtil.date().dayOfMonth(); + + //获取待结算商家列表 + List storeList = storeDetailService.getSettlementStore(day); + + //获取当前时间 + DateTime endTime = DateUtil.date(); + //批量商家结算 + for (StoreSettlementDay storeSettlementDay : storeList) { + + //生成结算单 + billService.createBill(storeSettlementDay.getStoreId(), storeSettlementDay.getSettlementDay(), endTime); + + //修改店铺结算时间 + storeDetailService.updateSettlementDay(storeSettlementDay.getStoreId(), endTime); + } + Assertions.assertTrue(true); + } + + +} diff --git a/framework/pom.xml b/framework/pom.xml index 170bd277..952d1c71 100644 --- a/framework/pom.xml +++ b/framework/pom.xml @@ -26,9 +26,21 @@ + + + org.springframework.boot + spring-boot-starter-quartz + + org.springframework.boot spring-boot-starter-web + + + log4j-to-slf4j + org.apache.logging.log4j + + org.springframework.boot @@ -69,16 +81,11 @@ org.apache.commons commons-pool2 - - - org.springframework.boot - spring-boot-starter-data-mongodb - - - - - - + + + + + com.baomidou @@ -88,7 +95,7 @@ org.mybatis.spring.boot mybatis-spring-boot-starter-test - 1.3.2 + 2.2.0 @@ -265,11 +272,11 @@ logstash-logback-encoder ${logstash-logback-encoder} - - - - - + + + + + de.codecentric spring-boot-admin-starter-client diff --git a/framework/src/main/java/cn/lili/cache/CachePrefix.java b/framework/src/main/java/cn/lili/cache/CachePrefix.java index 8b3bab3f..27740abe 100644 --- a/framework/src/main/java/cn/lili/cache/CachePrefix.java +++ b/framework/src/main/java/cn/lili/cache/CachePrefix.java @@ -480,7 +480,11 @@ public enum CachePrefix { /** * 订单暂时缓存 */ - ORDER; + ORDER, + /** + * 敏感词 + */ + SENSITIVE; public static String removePrefix(String str) { diff --git a/framework/src/main/java/cn/lili/cache/config/mongo/MongoConfig.java b/framework/src/main/java/cn/lili/cache/config/mongo/MongoConfig.java deleted file mode 100644 index 1420ec23..00000000 --- a/framework/src/main/java/cn/lili/cache/config/mongo/MongoConfig.java +++ /dev/null @@ -1,55 +0,0 @@ -package cn.lili.cache.config.mongo; - -import com.mongodb.MongoClientSettings; -import com.mongodb.MongoCredential; -import com.mongodb.ServerAddress; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Configuration; -import org.springframework.data.mongodb.config.AbstractMongoClientConfiguration; -import org.springframework.data.mongodb.repository.config.EnableMongoRepositories; - -import java.util.ArrayList; -import java.util.List; - -/** - * @author paulG - * @since 2020/10/22 - **/ -@Configuration -@EnableMongoRepositories -public class MongoConfig extends AbstractMongoClientConfiguration { - - @Value("${spring.data.mongodb.database}") - private String databaseName; - - @Value("${spring.data.mongodb.uri}") - private List uri = new ArrayList<>(); - - @Value("${spring.data.mongodb.username}") - private String username; - - @Value("${spring.data.mongodb.password}") - private String password; - - @Value("${spring.data.mongodb.authentication-database}") - private String authenticationDatabase; - - @Override - protected String getDatabaseName() { - return databaseName; - } - - @Override - protected void configureClientSettings(MongoClientSettings.Builder builder) { - builder.credential(MongoCredential.createCredential(username, authenticationDatabase, password.toCharArray())) - .applyToClusterSettings(settings -> { - List serverAddresses = new ArrayList<>(); - for (String s : uri) { - String[] node = s.split(":"); - serverAddresses.add(new ServerAddress(node[0], Integer.parseInt(node[1]))); - } - settings.hosts(serverAddresses); - }); - } - -} diff --git a/framework/src/main/java/cn/lili/cache/config/redis/RedisConfig.java b/framework/src/main/java/cn/lili/cache/config/redis/RedisConfig.java index 62d505b2..f7bf18e5 100644 --- a/framework/src/main/java/cn/lili/cache/config/redis/RedisConfig.java +++ b/framework/src/main/java/cn/lili/cache/config/redis/RedisConfig.java @@ -78,6 +78,7 @@ public class RedisConfig extends CachingConfigurerSupport { 可参考 https://blog.csdn.net/u012240455/article/details/80538540 */ ParserConfig.getGlobalInstance().addAccept("cn.lili."); + ParserConfig.getGlobalInstance().addAccept("cn.hutool.json."); return cacheManager; } diff --git a/framework/src/main/java/cn/lili/cache/util/RedisUtil.java b/framework/src/main/java/cn/lili/cache/util/RedisUtil.java deleted file mode 100644 index 98516a63..00000000 --- a/framework/src/main/java/cn/lili/cache/util/RedisUtil.java +++ /dev/null @@ -1,250 +0,0 @@ -package cn.lili.cache.util; - -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.redis.core.DefaultTypedTuple; -import org.springframework.data.redis.core.RedisTemplate; -import org.springframework.stereotype.Component; - -import java.util.List; -import java.util.Set; -import java.util.concurrent.TimeUnit; - -/** - * Redis封装工具类 - * - * @author paulG - * @since 2020/11/7 - **/ -@Slf4j -@Component -public class RedisUtil { - @Autowired - private RedisTemplate redisTemplate; - - //=============================common============================ - - /** - * 指定缓存失效时间 - * - * @param key 键 - * @param time 时间(秒) - * @return 操作结果 - */ - public boolean expire(String key, long time) { - try { - if (time > 0) { - redisTemplate.expire(key, time, TimeUnit.SECONDS); - } - return true; - } catch (Exception e) { - log.error("指定缓存失效时间错误",e); - return false; - } - } - - - //============================String============================= - - /** - * 普通缓存获取 - * - * @param key 键 - * @return 值 - */ - public Object get(String key) { - return key == null ? null : redisTemplate.opsForValue().get(key); - } - - - /** - * 普通缓存获取 - * - * @param key 键 - * @return 值 - */ - public T get(String key, Class clazz) { - Object o = key == null ? null : redisTemplate.opsForValue().get(key); - return (T) o; - } - - /** - * 普通缓存放入 - * - * @param key 键 - * @param value 值 - * @return true成功 false失败 - */ - public boolean set(String key, Object value) { - try { - redisTemplate.opsForValue().set(key, value); - return true; - } catch (Exception e) { - log.error("缓存放入错误",e); - return false; - } - - } - - /** - * 普通缓存放入并设置时间 - * - * @param key 键 - * @param value 值 - * @param time 时间(秒) time要大于0 如果time小于等于0 将设置无限期 - * @return true成功 false 失败 - */ - public boolean set(String key, Object value, long time) { - try { - if (time > 0) { - redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS); - } else { - set(key, value); - } - return true; - } catch (Exception e) { - log.error("普通缓存放入并设置时间错误",e); - return false; - } - } - - //================================Map================================= - - - /** - * 将数据放入set缓存 - * - * @param key 键 - * @param values 值 可以是多个 - * @return 成功个数 - */ - public long sSet(String key, Object... values) { - try { - return redisTemplate.opsForSet().add(key, values); - } catch (Exception e) { - log.error("将数据放入set缓存错误",e); - return 0; - } - } - - - /** - * 将list放入缓存 - * - * @param key 键 - * @param value 值 - * @return 操作结果 - */ - public boolean lSet(String key, Object value) { - try { - redisTemplate.opsForList().rightPush(key, value); - return true; - } catch (Exception e) { - log.error("将list放入缓存错误",e); - return false; - } - } - - /** - * 将list放入缓存 - * - * @param key 键 - * @param value 值 - * @param time 时间(秒) - * @return 操作结果 - */ - public boolean lSet(String key, Object value, long time) { - try { - redisTemplate.opsForList().rightPush(key, value); - if (time > 0) { - expire(key, time); - } - return true; - } catch (Exception e) { - log.error("将list放入缓存错误",e); - return false; - } - } - - /** - * 将list放入缓存 - * - * @param key 键 - * @param value 值 - * @return 操作结果 - */ - public boolean lSet(String key, List value) { - try { - redisTemplate.opsForList().rightPushAll(key, value); - return true; - } catch (Exception e) { - log.error("将list放入缓存错误",e); - return false; - } - } - - - /** - * 将list放入缓存 - * - * @param key 键 - * @param value 值 - * @param time 时间(秒) - * @return 操作结果 - */ - public boolean lSet(String key, List value, long time) { - try { - redisTemplate.opsForList().rightPushAll(key, value); - if (time > 0) { - expire(key, time); - } - return true; - } catch (Exception e) { - log.error("将list放入缓存错误",e); - return false; - } - } - - - //===============================ZSet================================= - - /** - * 向Zset里添加成员 - * - * @param key 键 - * @param score 分数 - * @param value 值 - * @return 操作结果 - */ - public boolean zadd(String key, long score, String value) { - return redisTemplate.opsForZSet().add(key, value, score); - - } - - - /** - * 获取 某key 下 某一分值区间的队列 - * - * @param key 键 - * @param from 起始位置 - * @param to 结束为止 - * @return 符合条件的结果集 - */ - public Set zrangeByScoreWithScores(String key, int from, long to) { - Set set = redisTemplate.opsForZSet().rangeByScoreWithScores(key, from, to); - return set; - } - - /** - * 移除 Zset队列值 - * - * @param key 键 - * @param value 值集合 - * @return 移除数量 - */ - public Long zremove(String key, String... value) { - return redisTemplate.opsForZSet().remove(key, value); - - } - -} diff --git a/framework/src/main/java/cn/lili/modules/system/aspect/annotation/DemoSite.java b/framework/src/main/java/cn/lili/common/aop/annotation/DemoSite.java similarity index 82% rename from framework/src/main/java/cn/lili/modules/system/aspect/annotation/DemoSite.java rename to framework/src/main/java/cn/lili/common/aop/annotation/DemoSite.java index b522aee2..48facbd3 100644 --- a/framework/src/main/java/cn/lili/modules/system/aspect/annotation/DemoSite.java +++ b/framework/src/main/java/cn/lili/common/aop/annotation/DemoSite.java @@ -1,4 +1,4 @@ -package cn.lili.modules.system.aspect.annotation; +package cn.lili.common.aop.annotation; import java.lang.annotation.*; diff --git a/framework/src/main/java/cn/lili/modules/system/aspect/interceptor/DemoInterceptor.java b/framework/src/main/java/cn/lili/common/aop/interceptor/DemoInterceptor.java similarity index 88% rename from framework/src/main/java/cn/lili/modules/system/aspect/interceptor/DemoInterceptor.java rename to framework/src/main/java/cn/lili/common/aop/interceptor/DemoInterceptor.java index 3a6fc434..d021b474 100644 --- a/framework/src/main/java/cn/lili/modules/system/aspect/interceptor/DemoInterceptor.java +++ b/framework/src/main/java/cn/lili/common/aop/interceptor/DemoInterceptor.java @@ -1,9 +1,9 @@ -package cn.lili.modules.system.aspect.interceptor; +package cn.lili.common.aop.interceptor; +import cn.lili.common.aop.annotation.DemoSite; import cn.lili.common.enums.ResultCode; import cn.lili.common.exception.ServiceException; import cn.lili.common.properties.SystemSettingProperties; -import cn.lili.modules.system.aspect.annotation.DemoSite; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.springframework.beans.factory.annotation.Autowired; diff --git a/framework/src/main/java/cn/lili/common/enums/PromotionTypeEnum.java b/framework/src/main/java/cn/lili/common/enums/PromotionTypeEnum.java index 68006dac..44dfa687 100644 --- a/framework/src/main/java/cn/lili/common/enums/PromotionTypeEnum.java +++ b/framework/src/main/java/cn/lili/common/enums/PromotionTypeEnum.java @@ -23,7 +23,7 @@ public enum PromotionTypeEnum { /** * 有促销库存的活动类型 */ - static PromotionTypeEnum[] haveStockPromotion = new PromotionTypeEnum[]{PINTUAN, SECKILL, KANJIA, POINTS_GOODS}; + static final PromotionTypeEnum[] haveStockPromotion = new PromotionTypeEnum[]{PINTUAN, SECKILL, KANJIA, POINTS_GOODS}; private final String description; 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 b8d30c8c..6b621a35 100644 --- a/framework/src/main/java/cn/lili/common/enums/ResultCode.java +++ b/framework/src/main/java/cn/lili/common/enums/ResultCode.java @@ -66,6 +66,8 @@ public enum ResultCode { GOODS_UPPER_ERROR(11004, "商品上架失败"), GOODS_AUTH_ERROR(11005, "商品审核失败"), POINT_GOODS_ERROR(11006, "积分商品业务异常,请稍后重试"), + POINT_GOODS_NOT_EXIST(11020, "积分商品不存在"), + POINT_GOODS_CATEGORY_EXIST(11021, "当前积分商品分类已存在"), GOODS_SKU_SN_ERROR(11007, "商品SKU货号不能为空"), GOODS_SKU_PRICE_ERROR(11008, "商品SKU价格不能小于等于0"), GOODS_SKU_COST_ERROR(11009, "商品SKU成本价不能小于等于0"), @@ -178,6 +180,7 @@ public enum ResultCode { ORDER_CAN_NOT_CANCEL(31012, "当前订单状态不可取消"), ORDER_BATCH_DELIVER_ERROR(31013, "批量发货,文件读取失败"), ORDER_ITEM_NOT_EXIST(31014, "当前订单项不存在!"), + POINT_NOT_ENOUGH(31015, "当前会员积分不足购买当前积分商品!"), /** @@ -248,6 +251,7 @@ public enum ResultCode { PROMOTION_START_TIME_ERROR(40002, "活动起始时间不能小于当前时间"), PROMOTION_END_TIME_ERROR(40003, "活动结束时间不能小于当前时间"), PROMOTION_TIME_ERROR(40004, "活动起始时间必须大于结束时间"), + PROMOTION_TIME_NOT_EXIST(40011, "活动起始时间和活动结束时间不能为空"), PROMOTION_SAME_ERROR(40005, "当前时间段已存在相同活动!"), PROMOTION_GOODS_ERROR(40006, "请选择要参与活动的商品"), PROMOTION_STATUS_END(40007, "当前活动已停止"), @@ -267,6 +271,11 @@ public enum ResultCode { COUPON_RECEIVE_ERROR(41005, "当前优惠券已经被领取完了,下次要早点来哦"), COUPON_NUM_INSUFFICIENT_ERROR(41006, "优惠券剩余领取数量不足"), COUPON_NOT_EXIST(41007, "当前优惠券不存在"), + COUPON_DO_NOT_RECEIVER(41030, "当前优惠券不允许主动领取"), + COUPON_ACTIVITY_NOT_EXIST(410022, "当前优惠券活动不存在"), + COUPON_SAVE_ERROR(41020, "保存优惠券失败"), + COUPON_ACTIVITY_SAVE_ERROR(41023, "保存优惠券活动失败"), + COUPON_DELETE_ERROR(41021, "删除优惠券失败"), COUPON_LIMIT_NUM_LESS_THAN_0(41008, "领取限制数量不能为负数"), COUPON_LIMIT_GREATER_THAN_PUBLISH(41009, "领取限制数量超出发行数量"), COUPON_DISCOUNT_ERROR(41010, "优惠券折扣必须小于10且大于0"), @@ -294,7 +303,8 @@ 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, "当前拼团活动不存在!"), + PINTUAN_GOODS_NOT_EXIST_ERROR(42014, "当前拼团商品不存在!"), /** * 满额活动 @@ -321,10 +331,12 @@ public enum ResultCode { */ SECKILL_NOT_START_ERROR(45000, "今日没有限时抢购活动,请明天再来看看吧。"), SECKILL_NOT_EXIST_ERROR(45001, "当前参与的秒杀活动不存在!"), + SECKILL_APPLY_NOT_EXIST_ERROR(45010, "当前参与的秒杀活动不存在!"), SECKILL_UPDATE_ERROR(45002, "当前秒杀活动活动已经开始,无法修改!"), SECKILL_PRICE_ERROR(45003, "活动价格不能大于商品原价"), SECKILL_TIME_ERROR(45004, "时刻参数异常"), SECKILL_DELETE_ERROR(45005, "该秒杀活动活动的状态不能删除"), + SECKILL_OPEN_ERROR(45010, "该秒杀活动活动的状态不能删除"), SECKILL_CLOSE_ERROR(45006, "该秒杀活动活动的状态不能关闭"), @@ -354,6 +366,7 @@ public enum ResultCode { KANJIA_GOODS_ACTIVE_HIGHEST_LOWEST_PRICE_ERROR(48005, "最低砍价金额不能高于最高砍价金额"), KANJIA_GOODS_ACTIVE_SETTLEMENT_PRICE_ERROR(48006, "结算金额不能高于商品金额"), KANJIA_GOODS_DELETE_ERROR(48007, "删除砍价商品异常"), + KANJIA_GOODS_UPDATE_ERROR(48012, "更新砍价商品异常"), KANJIA_ACTIVITY_NOT_FOUND_ERROR(48008, "砍价记录不存在"), KANJIA_ACTIVITY_LOG_MEMBER_ERROR(48009, "当前会员已经帮砍"), KANJIA_ACTIVITY_MEMBER_ERROR(48010, "当前会员已经发起此砍价商品活动"), diff --git a/framework/src/main/java/cn/lili/common/exception/GlobalControllerExceptionHandler.java b/framework/src/main/java/cn/lili/common/exception/GlobalControllerExceptionHandler.java index c7ad4bc8..bead4682 100644 --- a/framework/src/main/java/cn/lili/common/exception/GlobalControllerExceptionHandler.java +++ b/framework/src/main/java/cn/lili/common/exception/GlobalControllerExceptionHandler.java @@ -14,6 +14,7 @@ import org.springframework.web.bind.annotation.RestControllerAdvice; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import javax.validation.ConstraintViolationException; import java.util.List; /** @@ -122,4 +123,18 @@ public class GlobalControllerExceptionHandler { return ResultUtil.error(ResultCode.PARAMS_ERROR); } + /** + * bean校验未通过异常 + * + * @see javax.validation.Valid + * @see org.springframework.validation.Validator + * @see org.springframework.validation.DataBinder + */ + @ExceptionHandler(ConstraintViolationException.class) + @ResponseStatus(HttpStatus.BAD_REQUEST) + @ResponseBody + public ResultMessage constraintViolationExceptionHandler(HttpServletRequest request, final Exception e, HttpServletResponse response) { + ConstraintViolationException exception = (ConstraintViolationException) e; + return ResultUtil.error(ResultCode.PARAMS_ERROR.code(), exception.getMessage()); + } } diff --git a/framework/src/main/java/cn/lili/common/security/AuthUser.java b/framework/src/main/java/cn/lili/common/security/AuthUser.java index 7364421f..eb170192 100644 --- a/framework/src/main/java/cn/lili/common/security/AuthUser.java +++ b/framework/src/main/java/cn/lili/common/security/AuthUser.java @@ -25,6 +25,11 @@ public class AuthUser implements Serializable { */ private String nickName; + /** + * 头像 + */ + private String face; + /** * id */ @@ -58,16 +63,18 @@ public class AuthUser implements Serializable { */ private Boolean isSuper = false; - public AuthUser(String username, String id, String nickName, UserEnums role) { + public AuthUser(String username, String id, String nickName, String face, UserEnums role) { this.username = username; + this.face = face; this.id = id; this.role = role; this.nickName = nickName; } - public AuthUser(String username, String id, UserEnums manager, String nickName, Boolean isSuper) { + public AuthUser(String username, String id, String face, UserEnums manager, String nickName, Boolean isSuper) { this.username = username; this.id = id; + this.face = face; this.role = manager; this.isSuper = isSuper; this.nickName = nickName; diff --git a/framework/src/main/java/cn/lili/common/security/OperationalJudgment.java b/framework/src/main/java/cn/lili/common/security/OperationalJudgment.java index 6cb7696e..c9a53675 100644 --- a/framework/src/main/java/cn/lili/common/security/OperationalJudgment.java +++ b/framework/src/main/java/cn/lili/common/security/OperationalJudgment.java @@ -2,7 +2,6 @@ package cn.lili.common.security; import cn.lili.common.enums.ResultCode; import cn.lili.common.exception.ServiceException; -import cn.lili.common.security.AuthUser; import cn.lili.common.security.context.UserContext; import cn.lili.common.utils.BeanUtil; 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 d7061cf2..ad694aea 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 @@ -4,6 +4,9 @@ package cn.lili.common.security.filter; import cn.hutool.core.text.CharSequenceUtil; import cn.hutool.http.HtmlUtil; import cn.hutool.json.JSONUtil; +import lombok.extern.slf4j.Slf4j; +import org.owasp.html.HtmlPolicyBuilder; +import org.owasp.html.PolicyFactory; import org.owasp.html.Sanitizers; import javax.servlet.ReadListener; @@ -17,7 +20,6 @@ import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; import java.util.HashMap; import java.util.LinkedHashMap; -import java.util.Locale; import java.util.Map; /** @@ -27,6 +29,7 @@ import java.util.Map; * @version v1.0 * 2021-06-04 10:39 */ +@Slf4j public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper { @@ -35,7 +38,44 @@ public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper { * * @todo 这里的参数应该更智能些,例如iv,前端的参数包含这两个字母就会放过,这是有问题的 */ - private static final String[] IGNORE_FIELD = {"logo", "url", "photo", "intro", "content", "name", "image", "encrypted", "iv","mail"}; + private static final String[] IGNORE_FIELD = { + "logo", + "url", + "photo", + "intro", + "content", + "name", + "image", + "encrypted", + "iv", + "mail", + "sell", + "id", + "price", + "prop", + "reply", + "profile", + "privateKey", + "wechatpay", + }; + + //允许的标签 + private static final String[] allowedTags = {"h1", "h2", "h3", "h4", "h5", "h6", + "span", "strong", + "img", "video", "source", "iframe", "code", + "blockquote", "p", "div", + "ul", "ol", "li", + "table", "thead", "caption", "tbody", "tr", "th", "td", "br", + "a" + }; + + //需要转化的标签 + private static final String[] needTransformTags = {"article", "aside", "command", "datalist", "details", "figcaption", "figure", + "footer", "header", "hgroup", "section", "summary"}; + + //带有超链接的标签 + private static final String[] linkTags = {"img", "video", "source", "a", "iframe"}; + public XssHttpServletRequestWrapper(HttpServletRequest request) { super(request); @@ -128,45 +168,72 @@ public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper { */ @Override public ServletInputStream getInputStream() throws IOException { - //获取输入流 - ServletInputStream in = super.getInputStream(); - //用于存储输入流 - StringBuilder body = new StringBuilder(); - InputStreamReader reader = new InputStreamReader(in, StandardCharsets.UTF_8); - BufferedReader bufferedReader = new BufferedReader(reader); - //按行读取输入流 - String line = bufferedReader.readLine(); - while (line != null) { - //将获取到的第一行数据append到StringBuffer中 - body.append(line); - //继续读取下一行流,直到line为空 - line = bufferedReader.readLine(); - } - //关闭流 - bufferedReader.close(); - reader.close(); - in.close(); - if (CharSequenceUtil.isNotEmpty(body) && Boolean.TRUE.equals(JSONUtil.isJsonObj(body.toString()))) { - //将body转换为map - Map map = JSONUtil.parseObj(body.toString()); - //创建空的map用于存储结果 - Map resultMap = new HashMap<>(map.size()); - //遍历数组 - for (Map.Entry entry : map.entrySet()) { - //如果map.get(key)获取到的是字符串就需要进行处理,如果不是直接存储resultMap - if (map.get(entry.getKey()) instanceof String) { - resultMap.put(entry.getKey(), filterXss(entry.getKey(), entry.getValue().toString())); - } else { - resultMap.put(entry.getKey(), entry.getValue()); + BufferedReader bufferedReader = null; + + InputStreamReader reader = null; + + //获取输入流 + ServletInputStream in = null; + try { + in = super.getInputStream(); + //用于存储输入流 + StringBuilder body = new StringBuilder(); + reader = new InputStreamReader(in, StandardCharsets.UTF_8); + bufferedReader = new BufferedReader(reader); + //按行读取输入流 + String line = bufferedReader.readLine(); + while (line != null) { + //将获取到的第一行数据append到StringBuffer中 + body.append(line); + //继续读取下一行流,直到line为空 + line = bufferedReader.readLine(); + } + if (CharSequenceUtil.isNotEmpty(body) && Boolean.TRUE.equals(JSONUtil.isJsonObj(body.toString()))) { + //将body转换为map + Map map = JSONUtil.parseObj(body.toString()); + //创建空的map用于存储结果 + Map resultMap = new HashMap<>(map.size()); + //遍历数组 + for (Map.Entry entry : map.entrySet()) { + //如果map.get(key)获取到的是字符串就需要进行处理,如果不是直接存储resultMap + if (map.get(entry.getKey()) instanceof String) { + resultMap.put(entry.getKey(), filterXss(entry.getKey(), entry.getValue().toString())); + } else { + resultMap.put(entry.getKey(), entry.getValue()); + } } + + //将resultMap转换为json字符串 + String resultStr = JSONUtil.toJsonStr(resultMap); + //将json字符串转换为字节 + final ByteArrayInputStream resultBIS = new ByteArrayInputStream(resultStr.getBytes()); + + //实现接口 + return new ServletInputStream() { + @Override + public boolean isFinished() { + return false; + } + + @Override + public boolean isReady() { + return false; + } + + @Override + public void setReadListener(ReadListener readListener) { + } + + @Override + public int read() { + return resultBIS.read(); + } + }; } - //将resultMap转换为json字符串 - String resultStr = JSONUtil.toJsonStr(resultMap); //将json字符串转换为字节 - final ByteArrayInputStream resultBIS = new ByteArrayInputStream(resultStr.getBytes()); - + final ByteArrayInputStream bis = new ByteArrayInputStream(body.toString().getBytes()); //实现接口 return new ServletInputStream() { @Override @@ -181,48 +248,57 @@ public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper { @Override public void setReadListener(ReadListener readListener) { + } @Override public int read() { - return resultBIS.read(); + return bis.read(); } }; + } catch (Exception e) { + + log.error("get request inputStream error", e); + return null; + } finally { + //关闭流 + if (bufferedReader != null) { + bufferedReader.close(); + } + if (reader != null) { + reader.close(); + } + if (in != null) { + in.close(); + } } - //将json字符串转换为字节 - final ByteArrayInputStream bis = new ByteArrayInputStream(body.toString().getBytes()); - - //实现接口 - return new ServletInputStream() { - @Override - public boolean isFinished() { - return false; - } - - @Override - public boolean isReady() { - return false; - } - - @Override - public void setReadListener(ReadListener readListener) { - - } - - @Override - public int read() { - return bis.read(); - } - }; - } private String cleanXSS(String value) { if (value != null) { - value = Sanitizers.FORMATTING.and(Sanitizers.LINKS).sanitize(value); + // 自定义策略 + PolicyFactory policy = new HtmlPolicyBuilder() + .allowStandardUrlProtocols() + //所有允许的标签 + .allowElements(allowedTags) + //内容标签转化为div + .allowElements((elementName, attributes) -> "div", needTransformTags) + .allowAttributes("src", "href", "target", "width", "height").onElements(linkTags) + //校验链接中的是否为http +// .allowUrlProtocols("https") + .toFactory(); + // basic prepackaged policies for links, tables, integers, images, styles, blocks + value = Sanitizers.FORMATTING + .and(Sanitizers.STYLES) + .and(Sanitizers.IMAGES) + .and(Sanitizers.LINKS) + .and(Sanitizers.BLOCKS) + .and(Sanitizers.TABLES) + .and(policy) + .sanitize(value); } - return value; + return HtmlUtil.unescape(value); } /** @@ -233,12 +309,13 @@ public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper { * @return 参数值 */ private String filterXss(String name, String value) { - if (CharSequenceUtil.containsAny(name.toLowerCase(Locale.ROOT), IGNORE_FIELD)) { - // 忽略的处理,(过滤敏感字符) - return HtmlUtil.unescape(HtmlUtil.filter(value)); - } else { - return cleanXSS(value); - } +// if (CharSequenceUtil.containsAny(name.toLowerCase(Locale.ROOT), IGNORE_FIELD)) { +// // 忽略的处理,(过滤敏感字符) +// return value; +// } else { +// return cleanXSS(value); +// } + return cleanXSS(value); } } diff --git a/framework/src/main/java/cn/lili/modules/system/utils/SensitiveWordsFilter.java b/framework/src/main/java/cn/lili/common/sensitive/SensitiveWordsFilter.java similarity index 82% rename from framework/src/main/java/cn/lili/modules/system/utils/SensitiveWordsFilter.java rename to framework/src/main/java/cn/lili/common/sensitive/SensitiveWordsFilter.java index 63a04787..14f70b0c 100644 --- a/framework/src/main/java/cn/lili/modules/system/utils/SensitiveWordsFilter.java +++ b/framework/src/main/java/cn/lili/common/sensitive/SensitiveWordsFilter.java @@ -1,12 +1,6 @@ -package cn.lili.modules.system.utils; +package cn.lili.common.sensitive; -import cn.lili.modules.system.entity.dos.SensitiveWords; -import cn.lili.modules.system.service.SensitiveWordsService; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.ApplicationArguments; -import org.springframework.boot.ApplicationRunner; -import org.springframework.stereotype.Component; import java.io.Serializable; import java.util.List; @@ -21,9 +15,12 @@ import java.util.NavigableSet; * 2020-02-25 14:10:16 */ @Slf4j -@Component -public class SensitiveWordsFilter implements Serializable, ApplicationRunner { +public class SensitiveWordsFilter implements Serializable { + /** + * 字符* + */ + public final static char WILDCARD_STAR = '*'; /** * 为2的n次方,考虑到敏感词大概在10k左右, @@ -37,98 +34,27 @@ public class SensitiveWordsFilter implements Serializable, ApplicationRunner { * 类似HashMap的桶,比较稀疏。 * 使用2个字符的hash定位。 */ - protected static SensitiveWordsNode[] nodes; - - @Autowired - private SensitiveWordsService sensitiveWordsService; - + protected static SensitiveWordsNode[] nodes = new SensitiveWordsNode[0]; /** - * 增加一个敏感词,如果词的长度(trim后)小于2,则丢弃
- * 此方法(构建)并不是主要的性能优化点。 - * - * @param word 敏感词 - * @return 操作结果 + * 更新中的nodes,用于防止动态更新时,原有nodes被清空,导致无法正常写入过滤词 */ - public static boolean put(String word) { + protected static SensitiveWordsNode[] nodesUpdate; - //长度小于2的不加入 - if (word == null || word.trim().length() < 2) { - return false; - } - //两个字符的不考虑 - if (word.length() == 2 && word.matches("\\w\\w")) { - return false; - } - StringPointer sp = new StringPointer(word.trim()); - //计算头两个字符的hash - int hash = sp.nextTwoCharHash(0); - //计算头两个字符的mix表示(mix相同,两个字符相同) - int mix = sp.nextTwoCharMix(0); - //转为在hash桶中的位置 - int index = hash & (nodes.length - 1); - - //从桶里拿第一个节点 - SensitiveWordsNode node = nodes[index]; - if (node == null) { - //如果没有节点,则放进去一个 - node = new SensitiveWordsNode(mix); - //并添加词 - node.words.add(sp); - //放入桶里 - nodes[index] = node; - } else { - //如果已经有节点(1个或多个),找到正确的节点 - for (; node != null; node = node.next) { - //匹配节点 - if (node.headTwoCharMix == mix) { - node.words.add(sp); - return true; - } - //如果匹配到最后仍然不成功,则追加一个节点 - if (node.next == null) { - new SensitiveWordsNode(mix, node).words.add(sp); - return true; - } - } - } - return true; - } /** - * 移除敏感词 + * 过滤铭感次 * - * @param word + * @param sentence 过滤赐予 * @return */ - public static void remove(String word) { - - StringPointer sp = new StringPointer(word.trim()); - //计算头两个字符的hash - int hash = sp.nextTwoCharHash(0); - //计算头两个字符的mix表示(mix相同,两个字符相同) - int mix = sp.nextTwoCharMix(0); - //转为在hash桶中的位置 - int index = hash & (nodes.length - 1); - SensitiveWordsNode node = nodes[index]; - - for (; node != null; node = node.next) { - //匹配节点 - if (node.headTwoCharMix == mix) { - node.words.remove(sp); - } - - } + public static String filter(String sentence) { + return filter(sentence, WILDCARD_STAR); } /** * 对句子进行敏感词过滤
- * 如果无敏感词返回输入的sentence对象,即可以用下面的方式判断是否有敏感词:
- * String result = filter.filter(sentence, CharacterConstant.WILDCARD_STAR);
- * if(result != sentence){
- *   //有敏感词
- * } - *
+ * 如果无敏感词返回输入的sentence对象,即可以用下面的方式判断是否有敏感词:
* * @param sentence 句子 * @param replace 敏感词的替换字符 @@ -224,25 +150,96 @@ public class SensitiveWordsFilter implements Serializable, ApplicationRunner { } } + /** * 初始化敏感词 - * - * @param args - * @throws Exception */ - @Override - public void run(ApplicationArguments args) { - try { - nodes = new SensitiveWordsNode[DEFAULT_INITIAL_CAPACITY]; - //加入平台添加的敏感词 - List list = sensitiveWordsService.list(); - if (list != null && list.size() > 0) { - for (SensitiveWords sensitiveWords : list) { - put(sensitiveWords.getSensitiveWord()); + public static void init(List words) { + log.info("开始初始化敏感词"); + nodesUpdate = new SensitiveWordsNode[DEFAULT_INITIAL_CAPACITY]; + for (String word : words) { + put(word); + } + nodes = nodesUpdate; + } + + /** + * 增加一个敏感词,如果词的长度(trim后)小于2,则丢弃
+ * 此方法(构建)并不是主要的性能优化点。 + * + * @param word 敏感词 + * @return 操作结果 + */ + public static boolean put(String word) { + + //长度小于2的不加入 + if (word == null || word.trim().length() < 2) { + return false; + } + //两个字符的不考虑 + if (word.length() == 2 && word.matches("\\w\\w")) { + return false; + } + StringPointer sp = new StringPointer(word.trim()); + //计算头两个字符的hash + int hash = sp.nextTwoCharHash(0); + //计算头两个字符的mix表示(mix相同,两个字符相同) + int mix = sp.nextTwoCharMix(0); + //转为在hash桶中的位置 + int index = hash & (nodesUpdate.length - 1); + + //从桶里拿第一个节点 + SensitiveWordsNode node = nodesUpdate[index]; + if (node == null) { + //如果没有节点,则放进去一个 + node = new SensitiveWordsNode(mix); + //并添加词 + node.words.add(sp); + //放入桶里 + nodesUpdate[index] = node; + } else { + //如果已经有节点(1个或多个),找到正确的节点 + for (; node != null; node = node.next) { + //匹配节点 + if (node.headTwoCharMix == mix) { + node.words.add(sp); + return true; + } + //如果匹配到最后仍然不成功,则追加一个节点 + if (node.next == null) { + new SensitiveWordsNode(mix, node).words.add(sp); + return true; } } - } catch (Exception e) { - log.error("初始化敏感词错误", e); + } + return true; + } + + /** + * 移除敏感词 + * + * @param word + * @return + */ + public static void remove(String word) { + + StringPointer sp = new StringPointer(word.trim()); + //计算头两个字符的hash + int hash = sp.nextTwoCharHash(0); + //计算头两个字符的mix表示(mix相同,两个字符相同) + int mix = sp.nextTwoCharMix(0); + //转为在hash桶中的位置 + int index = hash & (nodes.length - 1); + SensitiveWordsNode node = nodes[index]; + + for (; node != null; node = node.next) { + //匹配节点 + if (node.headTwoCharMix == mix) { + node.words.remove(sp); + } + } } + + } diff --git a/framework/src/main/java/cn/lili/modules/system/utils/SensitiveWordsNode.java b/framework/src/main/java/cn/lili/common/sensitive/SensitiveWordsNode.java similarity index 95% rename from framework/src/main/java/cn/lili/modules/system/utils/SensitiveWordsNode.java rename to framework/src/main/java/cn/lili/common/sensitive/SensitiveWordsNode.java index 7932b773..aa3131f9 100644 --- a/framework/src/main/java/cn/lili/modules/system/utils/SensitiveWordsNode.java +++ b/framework/src/main/java/cn/lili/common/sensitive/SensitiveWordsNode.java @@ -1,4 +1,4 @@ -package cn.lili.modules.system.utils; +package cn.lili.common.sensitive; import java.io.Serializable; import java.util.TreeSet; diff --git a/framework/src/main/java/cn/lili/modules/system/utils/StringPointer.java b/framework/src/main/java/cn/lili/common/sensitive/StringPointer.java similarity index 73% rename from framework/src/main/java/cn/lili/modules/system/utils/StringPointer.java rename to framework/src/main/java/cn/lili/common/sensitive/StringPointer.java index 1f211a02..7e9e98f5 100644 --- a/framework/src/main/java/cn/lili/modules/system/utils/StringPointer.java +++ b/framework/src/main/java/cn/lili/common/sensitive/StringPointer.java @@ -1,13 +1,14 @@ -package cn.lili.modules.system.utils; +package cn.lili.common.sensitive; import java.io.Serializable; /** + * 字符指针 * * @author Bulbasaur * @since 2020-02-25 14:10:16 */ -public class StringPointer implements Serializable, CharSequence, Comparable{ +public class StringPointer implements Serializable, CharSequence, Comparable { private static final long serialVersionUID = 1L; @@ -19,13 +20,13 @@ public class StringPointer implements Serializable, CharSequence, Comparable length - i){ + if (word.length > length - i) { return false; } //从尾开始判断 - for(int c = word.length - 1; c >= 0; c --){ - if(value[offset + i + c] != word.value[word.offset + c]){ + for (int c = word.length - 1; c >= 0; c--) { + if (value[offset + i + c] != word.value[word.offset + c]) { return false; } } @@ -76,31 +78,31 @@ public class StringPointer implements Serializable, CharSequence, Comparable> cache; + + /** + * 程序启动时,获取最新的需要过滤的敏感词 + *

+ * 这里即便缓存中为空也没关系,定时任务会定时重新加载敏感词 + * + * @param args 启动参数 + */ + @Override + public void run(ApplicationArguments args) { + List sensitives = cache.get(CachePrefix.SENSITIVE.getPrefix()); + log.info("系统初始化敏感词"); + if (sensitives == null || sensitives.isEmpty()) { + return; + } + SensitiveWordsFilter.init(sensitives); + } + +} diff --git a/framework/src/main/java/cn/lili/common/sensitive/quartz/QuartzConfig.java b/framework/src/main/java/cn/lili/common/sensitive/quartz/QuartzConfig.java new file mode 100644 index 00000000..85e1d75a --- /dev/null +++ b/framework/src/main/java/cn/lili/common/sensitive/quartz/QuartzConfig.java @@ -0,0 +1,32 @@ +package cn.lili.common.sensitive.quartz; + +import org.quartz.*; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * 定时执行配置 + * + * @author Chopper + * @version v1.0 + * 2021-11-23 16:30 + */ +@Configuration +public class QuartzConfig { + + @Bean + public JobDetail sensitiveQuartzDetail() { + return JobBuilder.newJob(SensitiveQuartz.class).withIdentity("sensitiveQuartz").storeDurably().build(); + } + + @Bean + public Trigger sensitiveQuartzTrigger() { + SimpleScheduleBuilder scheduleBuilder = SimpleScheduleBuilder.simpleSchedule() + .withIntervalInSeconds(3600) + .repeatForever(); + return TriggerBuilder.newTrigger().forJob(sensitiveQuartzDetail()) + .withIdentity("sensitiveQuartz") + .withSchedule(scheduleBuilder) + .build(); + } +} \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/common/sensitive/quartz/SensitiveQuartz.java b/framework/src/main/java/cn/lili/common/sensitive/quartz/SensitiveQuartz.java new file mode 100644 index 00000000..4421aeaf --- /dev/null +++ b/framework/src/main/java/cn/lili/common/sensitive/quartz/SensitiveQuartz.java @@ -0,0 +1,40 @@ +package cn.lili.common.sensitive.quartz; + +import cn.lili.cache.Cache; +import cn.lili.cache.CachePrefix; +import cn.lili.common.sensitive.SensitiveWordsFilter; +import lombok.extern.slf4j.Slf4j; +import org.quartz.JobExecutionContext; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.quartz.QuartzJobBean; + +import java.util.List; + +/** + * 间隔更新敏感词 + * + * @author Chopper + * @version v1.0 + * 2021-11-23 16:31 + */ +@Slf4j +public class SensitiveQuartz extends QuartzJobBean { + + @Autowired + private Cache> cache; + + /** + * 定时更新敏感词信息 + * + * @param jobExecutionContext + */ + @Override + protected void executeInternal(JobExecutionContext jobExecutionContext) { + log.info("敏感词定时更新"); + List sensitives = cache.get(CachePrefix.SENSITIVE.getPrefix()); + if (sensitives == null || sensitives.isEmpty()) { + return; + } + SensitiveWordsFilter.init(sensitives); + } +} \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/common/utils/Base64DecodeMultipartFile.java b/framework/src/main/java/cn/lili/common/utils/Base64DecodeMultipartFile.java index b05d5662..b5059104 100644 --- a/framework/src/main/java/cn/lili/common/utils/Base64DecodeMultipartFile.java +++ b/framework/src/main/java/cn/lili/common/utils/Base64DecodeMultipartFile.java @@ -3,11 +3,10 @@ package cn.lili.common.utils; import lombok.extern.slf4j.Slf4j; import org.springframework.web.multipart.MultipartFile; +import java.io.*; import java.util.Base64; import java.util.Base64.Decoder; -import java.io.*; - /** * base64转为multipartFile工具类 * @@ -55,7 +54,7 @@ public class Base64DecodeMultipartFile implements MultipartFile { } @Override - public InputStream getInputStream() throws IOException { + public InputStream getInputStream() { return new ByteArrayInputStream(imgContent); } @@ -66,8 +65,9 @@ public class Base64DecodeMultipartFile implements MultipartFile { stream = new FileOutputStream(dest); stream.write(imgContent); } catch (IOException e) { - log.error("transferTo错误",e); - }finally { + log.error("transferTo错误", e); + } finally { + assert stream != null; stream.close(); } } @@ -94,7 +94,7 @@ public class Base64DecodeMultipartFile implements MultipartFile { byte[] bytes = Base64.getDecoder().decode(base64); stream = new ByteArrayInputStream(bytes); } catch (Exception e) { - log.error("base64ToInputStream错误",e); + log.error("base64ToInputStream错误", e); } return stream; } @@ -111,13 +111,13 @@ public class Base64DecodeMultipartFile implements MultipartFile { } data = swapStream.toByteArray(); } catch (IOException e) { - log.error("转码错误",e); + log.error("转码错误", e); } finally { if (in != null) { try { in.close(); } catch (IOException e) { - log.error("inputStreamToStream错误",e); + log.error("inputStreamToStream错误", e); } } } diff --git a/framework/src/main/java/cn/lili/common/utils/BeanUtil.java b/framework/src/main/java/cn/lili/common/utils/BeanUtil.java index 55eda005..a5e66e54 100644 --- a/framework/src/main/java/cn/lili/common/utils/BeanUtil.java +++ b/framework/src/main/java/cn/lili/common/utils/BeanUtil.java @@ -16,7 +16,7 @@ public class BeanUtil { * 复制属性 * * @param objectFrom 源自对象 - * @param objectTo 复制给对象 + * @param objectTo 复制给对象 */ public static void copyProperties(Object objectFrom, Object objectTo) { BeanUtils.copyProperties(objectFrom, objectTo); @@ -25,6 +25,7 @@ public class BeanUtil { /** * 获取属性名数组 + * * @param o 获取字段的对象 * @return 返回各个字段 */ @@ -49,8 +50,9 @@ public class BeanUtil { /** * 根据属性名获取属性值 + * * @param fieldName 属性名 - * @param o 对象 + * @param o 对象 * @return 属性值 */ public static Object getFieldValueByName(String fieldName, Object o) { @@ -69,6 +71,7 @@ public class BeanUtil { /** * 将对象转换为key value * A=a&B=b&C=c 格式 + * * @param object 对象 * @return 格式化结果 */ @@ -87,6 +90,7 @@ public class BeanUtil { String key = fieldNames[j]; //获取值 Object value = BeanUtil.getFieldValueByName(key, object); + assert value != null; stringBuffer.append(key).append("=").append(value.toString()); } return stringBuffer.toString(); @@ -95,8 +99,9 @@ public class BeanUtil { /** * key value键值对 转换为 对象 * A=a&B=b&C=c 格式 转换为对象 + * * @param str 对象字符串 - * @param t 范型 + * @param t 范型 * @param 范型 * @return 格式化结果 */ diff --git a/framework/src/main/java/cn/lili/common/utils/CurrencyUtil.java b/framework/src/main/java/cn/lili/common/utils/CurrencyUtil.java index eabf1df9..6b1b9aa2 100644 --- a/framework/src/main/java/cn/lili/common/utils/CurrencyUtil.java +++ b/framework/src/main/java/cn/lili/common/utils/CurrencyUtil.java @@ -1,6 +1,8 @@ package cn.lili.common.utils; import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.Arrays; /** * 金额计算工具 @@ -23,27 +25,29 @@ public final class CurrencyUtil { /** * 提供精确的加法运算。 * - * @param v1 被加数 - * @param v2 加数 - * @return 两个参数的和 + * @return 累加之和 */ - public static Double add(double v1, double v2) { - BigDecimal b1 = new BigDecimal(v1); - BigDecimal b2 = new BigDecimal(v2); - return b1.add(b2).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); + public static Double add(double... params) { + BigDecimal result = new BigDecimal("0"); + for (double param : params) { + BigDecimal bigParam = BigDecimal.valueOf(param); + result = result.add(bigParam).setScale(2, RoundingMode.HALF_UP); + } + return result.doubleValue(); } - /** - * 提供精确的减法运算。 + * 提供精确的加法运算。 * - * @param v1 被减数 - * @param v2 减数 - * @return 两个参数的差 + * @return 累加之和 */ - public static double sub(double v1, double v2) { - BigDecimal b1 = new BigDecimal(v1); - BigDecimal b2 = new BigDecimal(v2); - return b1.subtract(b2).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); + public static Double sub(double... params) { + BigDecimal result = BigDecimal.valueOf(params[0]); + params = Arrays.stream(params).skip(1).toArray(); + for (double param : params) { + BigDecimal bigParam = BigDecimal.valueOf(param); + result = result.subtract(bigParam).setScale(2, RoundingMode.HALF_UP); + } + return result.doubleValue(); } /** @@ -54,9 +58,9 @@ public final class CurrencyUtil { * @return 两个参数的积 */ public static Double mul(double v1, double v2) { - BigDecimal b1 = new BigDecimal(v1); - BigDecimal b2 = new BigDecimal(v2); - return b1.multiply(b2).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); + BigDecimal b1 = BigDecimal.valueOf(v1); + BigDecimal b2 = BigDecimal.valueOf(v2); + return b1.multiply(b2).setScale(2, RoundingMode.HALF_UP).doubleValue(); } /** @@ -72,9 +76,9 @@ public final class CurrencyUtil { throw new IllegalArgumentException( "The scale must be a positive integer or zero"); } - BigDecimal b1 = new BigDecimal(v1); - BigDecimal b2 = new BigDecimal(v2); - return b1.multiply(b2).setScale(scale, BigDecimal.ROUND_HALF_UP).doubleValue(); + BigDecimal b1 = BigDecimal.valueOf(v1); + BigDecimal b2 = BigDecimal.valueOf(v2); + return b1.multiply(b2).setScale(scale, RoundingMode.HALF_UP).doubleValue(); } /** @@ -105,26 +109,9 @@ public final class CurrencyUtil { if (v2 == 0) { return 0; } - BigDecimal b1 = new BigDecimal(v1); - BigDecimal b2 = new BigDecimal(v2); - return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue(); - } - - /** - * 提供精确的小数位四舍五入处理。 - * - * @param v 需要四舍五入的数字 - * @param scale 小数点后保留几位 - * @return 四舍五入后的结果 - */ - public static double round(double v, int scale) { - if (scale < 0) { - throw new IllegalArgumentException( - "The scale must be a positive integer or zero"); - } - BigDecimal b = new BigDecimal(v); - BigDecimal one = new BigDecimal("1"); - return b.divide(one, scale, BigDecimal.ROUND_HALF_UP).doubleValue(); + BigDecimal b1 = BigDecimal.valueOf(v1); + BigDecimal b2 = BigDecimal.valueOf(v2); + return b1.divide(b2, scale, RoundingMode.HALF_UP).doubleValue(); } /** @@ -145,7 +132,6 @@ public final class CurrencyUtil { * @return double类型分 */ public static double reversalFen(Double money) { - double price = div(money, 100); - return price; + return div(money, 100); } } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/common/utils/DateUtil.java b/framework/src/main/java/cn/lili/common/utils/DateUtil.java index 306cc0cd..b07f0bde 100644 --- a/framework/src/main/java/cn/lili/common/utils/DateUtil.java +++ b/framework/src/main/java/cn/lili/common/utils/DateUtil.java @@ -273,7 +273,7 @@ public class DateUtil { * @return 时间戳 */ public static long getDateline(String date) { - return toDate(date, STANDARD_DATE_FORMAT).getTime() / 1000; + return Objects.requireNonNull(toDate(date, STANDARD_DATE_FORMAT)).getTime() / 1000; } /** @@ -311,7 +311,7 @@ public class DateUtil { * @return 时间戳 */ public static long getDateline(String date, String pattern) { - return toDate(date, pattern).getTime() / 1000; + return Objects.requireNonNull(toDate(date, pattern)).getTime() / 1000; } /** diff --git a/framework/src/main/java/cn/lili/common/utils/HttpUtils.java b/framework/src/main/java/cn/lili/common/utils/HttpUtils.java index 4f8e7a3e..706e805c 100644 --- a/framework/src/main/java/cn/lili/common/utils/HttpUtils.java +++ b/framework/src/main/java/cn/lili/common/utils/HttpUtils.java @@ -1,19 +1,25 @@ package cn.lili.common.utils; +import com.alibaba.fastjson.JSONObject; import com.xkcoding.http.HttpUtil; import com.xkcoding.http.config.HttpConfig; import com.xkcoding.http.support.HttpHeader; import com.xkcoding.http.support.httpclient.HttpClientImpl; +import lombok.extern.slf4j.Slf4j; +import java.io.*; +import java.net.HttpURLConnection; +import java.net.URL; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.Iterator; import java.util.Map; /** - * HttpUtil 工具,统一处理 http 请求,方便对 simple-http 做定制 - * - * @author yadong.zhang (yadong.zhang0415(a)gmail.com) - * @version 4.1 - * @since 1.0.0 + * HTTP 工具类 + * @author liushuai */ +@Slf4j public class HttpUtils { public HttpUtils(HttpConfig config) { @@ -105,4 +111,258 @@ public class HttpUtils { public String post(String url, Map params, HttpHeader header, boolean encode) { return HttpUtil.post(url, params, header, encode); } + + + /** + * 静态方法运行参数 + */ + public static final int HTTP_CONN_TIMEOUT = 100000; + public static final int HTTP_SOCKET_TIMEOUT = 100000; + + /** + * POST 静态方法请求 + * + * @param reqUrl + * @param parameters + * @param encoding + * @param connectTimeout + * @param readTimeout + * @return + */ + public static String doPost(String reqUrl, Map parameters, String encoding, int connectTimeout, + int readTimeout) { + HttpURLConnection urlConn = null; + try { + urlConn = sendPost(reqUrl, parameters, encoding, connectTimeout, readTimeout); + String responseContent = getContent(urlConn, encoding); + return responseContent.trim(); + } finally { + if (urlConn != null) { + urlConn.disconnect(); + + } + } + } + + /** + * post携带json请求 静态方法 + * + * @param reqUrl 请求地址 + * @param jsonParameters 参数 + * @return + */ + public static String doPostWithJson(String reqUrl, Map jsonParameters) { + + BufferedReader reader = null; + try { + //创建连接 + URL url = new URL(reqUrl); + HttpURLConnection connection = (HttpURLConnection) url.openConnection(); + connection.setDoOutput(true); + connection.setDoInput(true); + connection.setUseCaches(false); + connection.setInstanceFollowRedirects(true); + //设置请求方式 + connection.setRequestMethod("POST"); + //设置发送数据的格式 + connection.setRequestProperty("Content-Type", "application/json"); + connection.connect(); + //一定要用BufferedReader 来接收响应, 使用字节来接收响应的方法是接收不到内容的 + //utf-8编码 + OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream(), StandardCharsets.UTF_8); + out.append(JSONObject.toJSONString(jsonParameters)); + out.flush(); + out.close(); + //读取响应 + reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8)); + String line; + String res = ""; + while ((line = reader.readLine()) != null) { + res += line; + } + reader.close(); + + return res; + } catch (IOException e) { + log.error("post请求错误", e); + } + //自定义错误信息 + return "error"; + + } + + /** + * post携带json请求 静态方法 + * + * @param reqUrl 请求地址 + * @param object 对象 + * @return + */ + public static String doPostWithJson(String reqUrl, Object object) { + + BufferedReader reader = null; + try { + //创建连接 + URL url = new URL(reqUrl); + HttpURLConnection connection = (HttpURLConnection) url.openConnection(); + connection.setDoOutput(true); + connection.setDoInput(true); + connection.setUseCaches(false); + connection.setInstanceFollowRedirects(true); + //设置请求方式 + connection.setRequestMethod("POST"); + //设置发送数据的格式 + connection.setRequestProperty("Content-Type", "application/json"); + connection.connect(); + //一定要用BufferedReader 来接收响应, 使用字节来接收响应的方法是接收不到内容的 + //utf-8编码 + OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream(), StandardCharsets.UTF_8); + out.append(JSONObject.toJSONString(object)); + out.flush(); + out.close(); + //读取响应 + reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8)); + String line; + String res = ""; + while ((line = reader.readLine()) != null) { + res += line; + } + reader.close(); + + return res; + } catch (IOException e) { + log.error("post错误", e); + } + //自定义错误信息 + return "error"; + + } + + /** + * 发送post请求 + * + * @param reqUrl + * @param parameters + * @param encoding + * @param connectTimeout + * @param readTimeout + * @return + */ + private static HttpURLConnection sendPost(String reqUrl, + Map parameters, String encoding, int connectTimeout, int readTimeout) { + HttpURLConnection urlConn = null; + try { + String params = generatorParamString(parameters, encoding); + URL url = new URL(reqUrl); + urlConn = (HttpURLConnection) url.openConnection(); + urlConn.setRequestMethod("POST"); + //(单位:毫秒)jdk + urlConn.setConnectTimeout(connectTimeout); + //(单位:毫秒)jdk 1.5换成这个,读操作超时 + urlConn.setReadTimeout(readTimeout); + urlConn.setDoOutput(true); + //String按照字节处理是一个好方法 + byte[] b = params.getBytes(encoding); + urlConn.getOutputStream().write(b, 0, b.length); + urlConn.getOutputStream().flush(); + urlConn.getOutputStream().close(); + } catch (Exception e) { + throw new RuntimeException(e.getMessage(), e); + } + return urlConn; + } + + /** + * get 请求 静态方法 + * + * @param urlConn + * @param encoding + * @return + */ + private static String getContent(HttpURLConnection urlConn, String encoding) { + try { + String responseContent = null; + InputStream in = urlConn.getInputStream(); + BufferedReader rd = new BufferedReader(new InputStreamReader(in, encoding)); + String tempLine = rd.readLine(); + StringBuffer tempStr = new StringBuffer(); + String crlf = System.getProperty("line.separator"); + while (tempLine != null) { + tempStr.append(tempLine); + tempStr.append(crlf); + tempLine = rd.readLine(); + } + responseContent = tempStr.toString(); + rd.close(); + in.close(); + return responseContent; + } catch (Exception e) { + throw new RuntimeException(e.getMessage(), e); + } + } + + /** + * get 请求 静态方法 + * + * @param link + * @param encoding + * @return + */ + public static String doGet(String link, String encoding, int connectTimeout, int readTimeout) { + HttpURLConnection conn = null; + try { + URL url = new URL(link); + conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("GET"); + conn.setConnectTimeout(connectTimeout); + conn.setReadTimeout(readTimeout); + BufferedInputStream in = new BufferedInputStream( + conn.getInputStream()); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + byte[] buf = new byte[1024]; + for (int i = 0; (i = in.read(buf)) > 0; ) { + out.write(buf, 0, i); + } + out.flush(); + String s = out.toString(encoding); + return s; + } catch (Exception e) { + throw new RuntimeException(e.getMessage(), e); + } finally { + if (conn != null) { + conn.disconnect(); + conn = null; + } + } + } + + /** + * 将parameters中数据转换成用"&"链接的http请求参数形式 + * + * @param parameters + * @return + */ + private static String generatorParamString(Map parameters, String encoding) { + StringBuffer params = new StringBuffer(); + if (parameters != null) { + for (Iterator iter = parameters.keySet().iterator(); iter + .hasNext(); ) { + String name = iter.next(); + String value = parameters.get(name); + params.append(name + "="); + try { + params.append(URLEncoder.encode(value, encoding)); + } catch (UnsupportedEncodingException e) { + throw new RuntimeException(e.getMessage(), e); + } catch (Exception e) { + String message = String.format("'%s'='%s'", name, value); + throw new RuntimeException(message, e); + } + if (iter.hasNext()) { + params.append("&"); + } + } + } + return params.toString(); + } } diff --git a/framework/src/main/java/cn/lili/modules/connect/util/UuidUtils.java b/framework/src/main/java/cn/lili/common/utils/UuidUtils.java similarity index 98% rename from framework/src/main/java/cn/lili/modules/connect/util/UuidUtils.java rename to framework/src/main/java/cn/lili/common/utils/UuidUtils.java index af9b2cdd..b9f17bcb 100644 --- a/framework/src/main/java/cn/lili/modules/connect/util/UuidUtils.java +++ b/framework/src/main/java/cn/lili/common/utils/UuidUtils.java @@ -1,4 +1,4 @@ -package cn.lili.modules.connect.util; +package cn.lili.common.utils; import java.nio.charset.StandardCharsets; import java.util.concurrent.ThreadLocalRandom; diff --git a/framework/src/main/java/cn/lili/common/vo/PageVO.java b/framework/src/main/java/cn/lili/common/vo/PageVO.java index 6d7fca44..c782a6aa 100644 --- a/framework/src/main/java/cn/lili/common/vo/PageVO.java +++ b/framework/src/main/java/cn/lili/common/vo/PageVO.java @@ -1,5 +1,6 @@ package cn.lili.common.vo; +import cn.hutool.core.text.CharSequenceUtil; import cn.lili.common.utils.StringUtils; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -31,17 +32,8 @@ public class PageVO implements Serializable { @ApiModelProperty(value = "需要驼峰转换蛇形", notes = "一般不做处理,如果数据库中就是蛇形,则这块需要处理。") private Boolean notConvert; - public Integer getMongoPageNumber() { - int i = pageNumber - 1; - if (i < 0) { - return pageNumber; - } else { - return i; - } - } - public String getSort() { - if (!StringUtils.isEmpty(sort)) { + if (CharSequenceUtil.isNotEmpty(sort)) { if (notConvert == null || Boolean.FALSE.equals(notConvert)) { return StringUtils.camel2Underline(sort); } else { diff --git a/framework/src/main/java/cn/lili/common/vo/SearchVO.java b/framework/src/main/java/cn/lili/common/vo/SearchVO.java index d0d6c818..3f752e79 100644 --- a/framework/src/main/java/cn/lili/common/vo/SearchVO.java +++ b/framework/src/main/java/cn/lili/common/vo/SearchVO.java @@ -31,8 +31,7 @@ public class SearchVO implements Serializable { if (StringUtils.isEmpty(startDate)) { return null; } - Date date = DateUtil.toDate(startDate, DateUtil.STANDARD_DATE_FORMAT); - return date; + return DateUtil.toDate(startDate, DateUtil.STANDARD_DATE_FORMAT); } public Date getConvertEndDate() { diff --git a/framework/src/main/java/cn/lili/elasticsearch/BaseElasticsearchService.java b/framework/src/main/java/cn/lili/elasticsearch/BaseElasticsearchService.java index 8ece3359..5cc50ec4 100644 --- a/framework/src/main/java/cn/lili/elasticsearch/BaseElasticsearchService.java +++ b/framework/src/main/java/cn/lili/elasticsearch/BaseElasticsearchService.java @@ -244,7 +244,7 @@ public abstract class BaseElasticsearchService { " }\n" + " }\n" + " },\n" + - " \"isAuth\": {\n" + + " \"authFlag\": {\n" + " \"type\": \"text\",\n" + " \"fields\": {\n" + " \"keyword\": {\n" + @@ -331,6 +331,9 @@ public abstract class BaseElasticsearchService { " }\n" + " }\n" + " },\n" + + " \"promotionMapJson\": {\n" + + " \"type\": \"text\"\n" + + " },\n" + " \"thumbnail\": {\n" + " \"type\": \"text\",\n" + " \"fields\": {\n" + diff --git a/framework/src/main/java/cn/lili/elasticsearch/EsSuffix.java b/framework/src/main/java/cn/lili/elasticsearch/EsSuffix.java index 528f28c6..9b6e4a9b 100644 --- a/framework/src/main/java/cn/lili/elasticsearch/EsSuffix.java +++ b/framework/src/main/java/cn/lili/elasticsearch/EsSuffix.java @@ -13,4 +13,9 @@ public class EsSuffix { */ public static final String GOODS_INDEX_NAME = "goods"; + /** + * 日志索引后缀 + */ + public static final String LOGS_INDEX_NAME = "logs"; + } diff --git a/framework/src/main/java/cn/lili/elasticsearch/config/ElasticsearchConfig.java b/framework/src/main/java/cn/lili/elasticsearch/config/ElasticsearchConfig.java index f95b749d..38b63496 100644 --- a/framework/src/main/java/cn/lili/elasticsearch/config/ElasticsearchConfig.java +++ b/framework/src/main/java/cn/lili/elasticsearch/config/ElasticsearchConfig.java @@ -16,6 +16,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.elasticsearch.config.AbstractElasticsearchConfiguration; +import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate; import javax.annotation.PreDestroy; import java.io.IOException; @@ -56,18 +57,23 @@ public class ElasticsearchConfig extends AbstractElasticsearchConfiguration { .setDefaultCredentialsProvider(credential) .setKeepAliveStrategy(getConnectionKeepAliveStrategy()) .setMaxConnPerRoute(10) - .setDefaultIOReactorConfig(IOReactorConfig.custom().setIoThreadCount(1).build())); + .setDefaultIOReactorConfig(IOReactorConfig.custom().setIoThreadCount(Runtime.getRuntime().availableProcessors()).build())); } restBuilder.setRequestConfigCallback(requestConfigBuilder -> requestConfigBuilder.setConnectTimeout(1000) //time until a connection with the server is established. .setSocketTimeout(12 * 1000) //time of inactivity to wait for packets[data] to receive. - .setConnectionRequestTimeout(2 * 1000)); //time to fetch a connection from the connection pool 0 for infinite. + .setConnectionRequestTimeout(-1)); //time to fetch a connection from the connection pool 0 for infinite. client = new RestHighLevelClient(restBuilder); return client; } + @Bean("elasticsearchRestTemplate") + public ElasticsearchRestTemplate elasticsearchRestTemplate() { + return new ElasticsearchRestTemplate(this.client); + } + private HttpHost[] getHttpHosts() { List clusterNodes = elasticsearchProperties.getClusterNodes(); HttpHost[] httpHosts = new HttpHost[clusterNodes.size()]; diff --git a/framework/src/main/java/cn/lili/modules/connect/request/BaseAuthRequest.java b/framework/src/main/java/cn/lili/modules/connect/request/BaseAuthRequest.java index 9e1274dc..6e695606 100644 --- a/framework/src/main/java/cn/lili/modules/connect/request/BaseAuthRequest.java +++ b/framework/src/main/java/cn/lili/modules/connect/request/BaseAuthRequest.java @@ -1,8 +1,10 @@ package cn.lili.modules.connect.request; import cn.lili.cache.Cache; +import cn.lili.common.utils.HttpUtils; import cn.lili.common.utils.StringUtils; import cn.lili.common.utils.UrlBuilder; +import cn.lili.common.utils.UuidUtils; import cn.lili.modules.connect.config.AuthConfig; import cn.lili.modules.connect.config.ConnectAuth; import cn.lili.modules.connect.entity.dto.AuthCallback; @@ -12,8 +14,6 @@ import cn.lili.modules.connect.entity.dto.ConnectAuthUser; import cn.lili.modules.connect.entity.enums.AuthResponseStatus; import cn.lili.modules.connect.exception.AuthException; import cn.lili.modules.connect.util.AuthChecker; -import cn.lili.common.utils.HttpUtils; -import cn.lili.modules.connect.util.UuidUtils; import com.xkcoding.http.util.UrlUtil; import lombok.extern.slf4j.Slf4j; diff --git a/framework/src/main/java/cn/lili/modules/connect/service/ConnectService.java b/framework/src/main/java/cn/lili/modules/connect/service/ConnectService.java index 7a33b102..6df3b143 100644 --- a/framework/src/main/java/cn/lili/modules/connect/service/ConnectService.java +++ b/framework/src/main/java/cn/lili/modules/connect/service/ConnectService.java @@ -5,6 +5,7 @@ import cn.lili.common.security.token.Token; import cn.lili.modules.connect.entity.Connect; import cn.lili.modules.connect.entity.dto.ConnectAuthUser; import cn.lili.modules.connect.entity.dto.WechatMPLoginParams; +import cn.lili.modules.member.entity.dto.ConnectQueryDTO; import com.baomidou.mybatisplus.extension.service.IService; import javax.naming.NoPermissionException; @@ -103,4 +104,12 @@ public interface ConnectService extends IService { * @return token */ Token miniProgramAutoLogin(WechatMPLoginParams params); + + /** + * 根据查询dto获取查询对象 + * + * @param connectQueryDTO + * @return + */ + Connect queryConnect(ConnectQueryDTO connectQueryDTO); } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/connect/serviceimpl/ConnectServiceImpl.java b/framework/src/main/java/cn/lili/modules/connect/serviceimpl/ConnectServiceImpl.java index 68ca20b6..0d0b1ab2 100644 --- a/framework/src/main/java/cn/lili/modules/connect/serviceimpl/ConnectServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/connect/serviceimpl/ConnectServiceImpl.java @@ -12,6 +12,7 @@ import cn.lili.common.security.AuthUser; import cn.lili.common.security.context.UserContext; import cn.lili.common.security.token.Token; import cn.lili.common.utils.CookieUtil; +import cn.lili.common.utils.HttpUtils; import cn.lili.common.utils.StringUtils; import cn.lili.modules.connect.entity.Connect; import cn.lili.modules.connect.entity.dto.ConnectAuthUser; @@ -20,6 +21,7 @@ import cn.lili.modules.connect.entity.enums.ConnectEnum; import cn.lili.modules.connect.mapper.ConnectMapper; import cn.lili.modules.connect.service.ConnectService; import cn.lili.modules.member.entity.dos.Member; +import cn.lili.modules.member.entity.dto.ConnectQueryDTO; import cn.lili.modules.member.service.MemberService; import cn.lili.modules.member.token.MemberTokenGenerate; import cn.lili.modules.system.entity.dos.Setting; @@ -27,7 +29,6 @@ import cn.lili.modules.system.entity.dto.connect.WechatConnectSetting; import cn.lili.modules.system.entity.dto.connect.dto.WechatConnectSettingItem; import cn.lili.modules.system.entity.enums.SettingEnum; import cn.lili.modules.system.service.SettingService; -import cn.lili.modules.system.utils.HttpUtils; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.extern.slf4j.Slf4j; @@ -232,6 +233,16 @@ public class ConnectServiceImpl extends ServiceImpl impl return memberTokenGenerate.createToken(newMember.getUsername(), true); } + @Override + public Connect queryConnect(ConnectQueryDTO connectQueryDTO) { + + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(StringUtils.isNotEmpty(connectQueryDTO.getUserId()), Connect::getUserId, connectQueryDTO.getUserId()) + .eq(StringUtils.isNotEmpty(connectQueryDTO.getUnionType()), Connect::getUnionType, connectQueryDTO.getUnionType()) + .eq(StringUtils.isNotEmpty(connectQueryDTO.getUnionId()), Connect::getUnionId, connectQueryDTO.getUnionId()); + return this.getOne(queryWrapper); + } + /** * 会员绑定 绑定微信小程序 *

diff --git a/framework/src/main/java/cn/lili/modules/distribution/entity/dos/DistributionCash.java b/framework/src/main/java/cn/lili/modules/distribution/entity/dos/DistributionCash.java index b648f323..e04a5ff6 100644 --- a/framework/src/main/java/cn/lili/modules/distribution/entity/dos/DistributionCash.java +++ b/framework/src/main/java/cn/lili/modules/distribution/entity/dos/DistributionCash.java @@ -1,6 +1,6 @@ package cn.lili.modules.distribution.entity.dos; -import cn.lili.modules.member.entity.enums.WithdrawStatusEnum; +import cn.lili.modules.wallet.entity.enums.WithdrawStatusEnum; import cn.lili.mybatis.BaseEntity; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; diff --git a/framework/src/main/java/cn/lili/modules/distribution/entity/dos/DistributionOrder.java b/framework/src/main/java/cn/lili/modules/distribution/entity/dos/DistributionOrder.java index 93404507..491a8faf 100644 --- a/framework/src/main/java/cn/lili/modules/distribution/entity/dos/DistributionOrder.java +++ b/framework/src/main/java/cn/lili/modules/distribution/entity/dos/DistributionOrder.java @@ -5,7 +5,6 @@ import cn.lili.modules.order.order.entity.dos.StoreFlow; import cn.lili.mybatis.BaseIdEntity; import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModel; @@ -31,11 +30,6 @@ public class DistributionOrder extends BaseIdEntity { private static final long serialVersionUID = 501799944909496507L; - @TableId - @TableField - @ApiModelProperty(value = "唯一标识", hidden = true) - private String id; - @CreatedDate @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") diff --git a/framework/src/main/java/cn/lili/modules/distribution/entity/dto/DistributionGoodsSearchParams.java b/framework/src/main/java/cn/lili/modules/distribution/entity/dto/DistributionGoodsSearchParams.java index d47a0d36..4f9cd438 100644 --- a/framework/src/main/java/cn/lili/modules/distribution/entity/dto/DistributionGoodsSearchParams.java +++ b/framework/src/main/java/cn/lili/modules/distribution/entity/dto/DistributionGoodsSearchParams.java @@ -1,11 +1,14 @@ package cn.lili.modules.distribution.entity.dto; +import cn.hutool.core.text.CharSequenceUtil; import cn.lili.common.security.context.UserContext; -import cn.lili.common.utils.StringUtils; import cn.lili.common.vo.PageVO; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.Objects; /** * 分销员商品查询条件 @@ -13,25 +16,35 @@ import lombok.Data; * @author pikachu * @since 2020-03-14 23:04:56 */ +@EqualsAndHashCode(callSuper = true) @Data public class DistributionGoodsSearchParams extends PageVO { + @ApiModelProperty(value = "商品ID") + private String goodsId; + @ApiModelProperty(value = "商品名称") private String goodsName; @ApiModelProperty(value = "是否已选择") private boolean isChecked; + public QueryWrapper queryWrapper() { + QueryWrapper queryWrapper = this.distributionQueryWrapper(); + queryWrapper.eq(CharSequenceUtil.isNotEmpty(goodsId), "goods_id", goodsId); + queryWrapper.eq(CharSequenceUtil.isNotEmpty(goodsName), "goods_name", goodsId); + return queryWrapper; + } public QueryWrapper storeQueryWrapper() { QueryWrapper queryWrapper = this.distributionQueryWrapper(); - queryWrapper.eq("dg.store_id", UserContext.getCurrentUser().getStoreId()); + queryWrapper.eq("dg.store_id", Objects.requireNonNull(UserContext.getCurrentUser()).getStoreId()); return queryWrapper; } public QueryWrapper distributionQueryWrapper() { QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.like(StringUtils.isNotEmpty(goodsName), "dg.goods_name", goodsName); + queryWrapper.like(CharSequenceUtil.isNotEmpty(goodsName), "dg.goods_name", goodsName); return queryWrapper; } diff --git a/framework/src/main/java/cn/lili/modules/distribution/service/DistributionCashService.java b/framework/src/main/java/cn/lili/modules/distribution/service/DistributionCashService.java index b5e75c01..2a107b9f 100644 --- a/framework/src/main/java/cn/lili/modules/distribution/service/DistributionCashService.java +++ b/framework/src/main/java/cn/lili/modules/distribution/service/DistributionCashService.java @@ -49,10 +49,4 @@ public interface DistributionCashService extends IService { */ DistributionCash audit(@PathVariable String id, @RequestParam String result); - /** - * 待处理分销员提现申请数量 - * - * @return 待处理分销员提现申请数量 - */ - Integer newDistributionCash(); } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/distribution/service/DistributionGoodsService.java b/framework/src/main/java/cn/lili/modules/distribution/service/DistributionGoodsService.java index 4ec1478c..08df403a 100644 --- a/framework/src/main/java/cn/lili/modules/distribution/service/DistributionGoodsService.java +++ b/framework/src/main/java/cn/lili/modules/distribution/service/DistributionGoodsService.java @@ -21,10 +21,34 @@ public interface DistributionGoodsService extends IService { * 根据条件分页查询分销商品信息 * * @param distributionGoodsSearchParams 商品条件 - * @return + * @return 分页分销商品信息 */ IPage goodsPage(DistributionGoodsSearchParams distributionGoodsSearchParams); + + /** + * 根据条件查询分销商品信息列表 + * + * @param distributionGoodsSearchParams 条件 + * @return 分销商品信息列表 + */ + List getDistributionGoodsList(DistributionGoodsSearchParams distributionGoodsSearchParams); + + /** + * 根据条件查询分销商品信息 + * + * @param distributionGoodsSearchParams 条件 + * @return 分销商品信息 + */ + DistributionGoods getDistributionGoods(DistributionGoodsSearchParams distributionGoodsSearchParams); + + /** + * 根据条件删除分销商品 + * + * @param distributionGoodsSearchParams 条件 + */ + boolean deleteDistributionGoods(DistributionGoodsSearchParams distributionGoodsSearchParams); + /** * 获取分销商品 * diff --git a/framework/src/main/java/cn/lili/modules/distribution/service/DistributionSelectedGoodsService.java b/framework/src/main/java/cn/lili/modules/distribution/service/DistributionSelectedGoodsService.java index 86534f3b..5a11b548 100644 --- a/framework/src/main/java/cn/lili/modules/distribution/service/DistributionSelectedGoodsService.java +++ b/framework/src/main/java/cn/lili/modules/distribution/service/DistributionSelectedGoodsService.java @@ -13,14 +13,21 @@ public interface DistributionSelectedGoodsService extends IService getDistributionGoodsList(DistributionGoodsSearchParams distributionGoodsSearchParams) { + return this.list(distributionGoodsSearchParams.queryWrapper()); + } + + /** + * 根据条件查询分销商品信息 + * + * @param distributionGoodsSearchParams 条件 + * @return 分销商品信息 + */ + @Override + public DistributionGoods getDistributionGoods(DistributionGoodsSearchParams distributionGoodsSearchParams) { + return this.getOne(distributionGoodsSearchParams.queryWrapper(), false); + } + + /** + * 根据条件删除分销商品 + * + * @param distributionGoodsSearchParams 条件 + */ + @Override + public boolean deleteDistributionGoods(DistributionGoodsSearchParams distributionGoodsSearchParams) { + return this.remove(distributionGoodsSearchParams.queryWrapper()); + } + @Override public DistributionGoods distributionGoodsVO(String id) { diff --git a/framework/src/main/java/cn/lili/modules/distribution/serviceimpl/DistributionOrderServiceImpl.java b/framework/src/main/java/cn/lili/modules/distribution/serviceimpl/DistributionOrderServiceImpl.java index aed156ad..c1dc8f98 100644 --- a/framework/src/main/java/cn/lili/modules/distribution/serviceimpl/DistributionOrderServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/distribution/serviceimpl/DistributionOrderServiceImpl.java @@ -4,7 +4,6 @@ import cn.hutool.core.date.DateField; import cn.hutool.core.date.DateTime; import cn.hutool.json.JSONUtil; import cn.lili.common.utils.CurrencyUtil; -import cn.lili.mybatis.util.PageUtil; import cn.lili.modules.distribution.entity.dos.Distribution; import cn.lili.modules.distribution.entity.dos.DistributionOrder; import cn.lili.modules.distribution.entity.enums.DistributionOrderStatusEnum; @@ -14,6 +13,7 @@ import cn.lili.modules.distribution.service.DistributionOrderService; import cn.lili.modules.distribution.service.DistributionService; import cn.lili.modules.order.order.entity.dos.Order; import cn.lili.modules.order.order.entity.dos.StoreFlow; +import cn.lili.modules.order.order.entity.dto.StoreFlowQueryDTO; import cn.lili.modules.order.order.entity.enums.PayStatusEnum; import cn.lili.modules.order.order.service.OrderService; import cn.lili.modules.order.order.service.StoreFlowService; @@ -21,6 +21,7 @@ import cn.lili.modules.system.entity.dos.Setting; import cn.lili.modules.system.entity.dto.DistributionSetting; import cn.lili.modules.system.entity.enums.SettingEnum; import cn.lili.modules.system.service.SettingService; +import cn.lili.mybatis.util.PageUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -87,10 +88,9 @@ public class DistributionOrderServiceImpl extends ServiceImpl storeFlowList = storeFlowService.list(new LambdaQueryWrapper() - .eq(StoreFlow::getOrderSn, orderSn) - .isNotNull(StoreFlow::getDistributionRebate)); - Double rebate = 0.0; + List storeFlowList = storeFlowService + .listStoreFlow(StoreFlowQueryDTO.builder().justDistribution(true).orderSn(orderSn).build()); + double rebate = 0.0; //循环店铺流水记录判断是否包含分销商品 //包含分销商品则进行记录分销订单、计算分销总额 for (StoreFlow storeFlow : storeFlowList) { @@ -165,7 +165,7 @@ public class DistributionOrderServiceImpl extends ServiceImpl() - .eq(StoreFlow::getRefundSn, afterSaleSn) - .isNotNull(StoreFlow::getDistributionRebate)); + StoreFlow storeFlow = storeFlowService.queryOne(StoreFlowQueryDTO.builder().justDistribution(true).refundSn(afterSaleSn).build()); if (storeFlow != null) { //获取收款分销订单 @@ -199,12 +197,7 @@ public class DistributionOrderServiceImpl extends ServiceImpl() .eq(DistributionOrder::getOrderItemSn, storeFlow.getOrderItemSn()) .set(DistributionOrder::getDistributionOrderStatus, DistributionOrderStatusEnum.CANCEL.name())); diff --git a/framework/src/main/java/cn/lili/modules/distribution/serviceimpl/DistributionSelectedGoodsServiceImpl.java b/framework/src/main/java/cn/lili/modules/distribution/serviceimpl/DistributionSelectedGoodsServiceImpl.java index 972bc944..92ffc97b 100644 --- a/framework/src/main/java/cn/lili/modules/distribution/serviceimpl/DistributionSelectedGoodsServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/distribution/serviceimpl/DistributionSelectedGoodsServiceImpl.java @@ -46,4 +46,10 @@ public class DistributionSelectedGoodsServiceImpl extends ServiceImpl() + .eq(DistributionSelectedGoods::getDistributionGoodsId, distributionGoodsId)); + } } diff --git a/framework/src/main/java/cn/lili/modules/file/plugin/FileManagerPlugin.java b/framework/src/main/java/cn/lili/modules/file/plugin/FileManagerPlugin.java index 7aacc714..bd279d05 100644 --- a/framework/src/main/java/cn/lili/modules/file/plugin/FileManagerPlugin.java +++ b/framework/src/main/java/cn/lili/modules/file/plugin/FileManagerPlugin.java @@ -37,13 +37,4 @@ public interface FileManagerPlugin { */ void deleteFile(List key); - /** - * 根据原图生成规定尺寸的图片 - * - * @param url 连接 - * @param width 宽 - * @param height 高 - * @return - */ - String getUrl(String url, Integer width, Integer height); } diff --git a/framework/src/main/java/cn/lili/modules/file/plugin/impl/AliFileManagerPlugin.java b/framework/src/main/java/cn/lili/modules/file/plugin/impl/AliFileManagerPlugin.java index e28bfc88..4ddbf899 100644 --- a/framework/src/main/java/cn/lili/modules/file/plugin/impl/AliFileManagerPlugin.java +++ b/framework/src/main/java/cn/lili/modules/file/plugin/impl/AliFileManagerPlugin.java @@ -183,11 +183,4 @@ public class AliFileManagerPlugin implements FileManagerPlugin { ossClient.shutdown(); } } - - @Override - public String getUrl(String url, Integer width, Integer height) { - //缩略图全路径 - //返回缩略图全路径 - return url + "?x-oss-process=style/" + width + "X" + height; - } } diff --git a/framework/src/main/java/cn/lili/modules/file/util/FileUtil.java b/framework/src/main/java/cn/lili/modules/file/util/FileUtil.java new file mode 100644 index 00000000..46cbf51f --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/file/util/FileUtil.java @@ -0,0 +1,24 @@ +package cn.lili.modules.file.util; + +/** + * FileUtil + * + * @author Chopper + * @version v1.0 + * 2021-11-22 11:19 + */ +public class FileUtil { + + /** + * 根据原图生成规定尺寸的图片 + * + * @param url 连接 + * @param width 宽 + * @param height 高 + * @return + */ + public static String getUrl(String url, Integer width, Integer height) { + //缩略图全路径 + return url + "?x-oss-process=style/" + width + "X" + height; + } +} diff --git a/framework/src/main/java/cn/lili/modules/goods/entity/dos/Goods.java b/framework/src/main/java/cn/lili/modules/goods/entity/dos/Goods.java index dc8160e5..205672c0 100644 --- a/framework/src/main/java/cn/lili/modules/goods/entity/dos/Goods.java +++ b/framework/src/main/java/cn/lili/modules/goods/entity/dos/Goods.java @@ -8,6 +8,7 @@ import cn.lili.common.enums.ResultCode; import cn.lili.common.exception.ServiceException; import cn.lili.modules.goods.entity.dto.GoodsOperationDTO; import cn.lili.modules.goods.entity.enums.GoodsStatusEnum; +import cn.lili.modules.goods.entity.enums.GoodsTypeEnum; import cn.lili.mybatis.BaseEntity; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonIgnore; @@ -107,7 +108,7 @@ public class Goods extends BaseEntity { private String templateId; @ApiModelProperty(value = "审核状态") - private String isAuth; + private String authFlag; @ApiModelProperty(value = "审核信息") private String authMessage; @@ -171,20 +172,20 @@ public class Goods extends BaseEntity { //循环sku,判定sku是否有效 for (Map sku : goodsOperationDTO.getSkuList()) { //判定参数不能为空 - if (sku.get("sn") == null) { + if (!sku.containsKey("sn") || sku.get("sn") == null) { throw new ServiceException(ResultCode.GOODS_SKU_SN_ERROR); } - if (StringUtil.isEmpty(sku.get("price").toString()) || Convert.toDouble(sku.get("price")) <= 0) { + if (!sku.containsKey("price") || StringUtil.isEmpty(sku.get("price").toString()) || Convert.toDouble(sku.get("price")) <= 0) { throw new ServiceException(ResultCode.GOODS_SKU_PRICE_ERROR); } - if (StringUtil.isEmpty(sku.get("cost").toString()) || Convert.toDouble(sku.get("cost")) <= 0) { + if (!sku.containsKey("cost") || StringUtil.isEmpty(sku.get("cost").toString()) || Convert.toDouble(sku.get("cost")) <= 0) { throw new ServiceException(ResultCode.GOODS_SKU_COST_ERROR); } //虚拟商品没有重量字段 - if (sku.containsKey("weight") && (StringUtil.isEmpty(sku.get("weight").toString()) || Convert.toDouble(sku.get("weight").toString()) < 0)) { + if (this.goodsType.equals(GoodsTypeEnum.PHYSICAL_GOODS.name()) && (!sku.containsKey("weight") || sku.containsKey("weight") && (StringUtil.isEmpty(sku.get("weight").toString()) || Convert.toDouble(sku.get("weight").toString()) < 0))) { throw new ServiceException(ResultCode.GOODS_SKU_WEIGHT_ERROR); } - if (StringUtil.isEmpty(sku.get("quantity").toString()) || Convert.toInt(sku.get("quantity").toString()) < 0) { + if (!sku.containsKey("quantity") || StringUtil.isEmpty(sku.get("quantity").toString()) || Convert.toInt(sku.get("quantity").toString()) < 0) { throw new ServiceException(ResultCode.GOODS_SKU_QUANTITY_ERROR); } diff --git a/framework/src/main/java/cn/lili/modules/goods/entity/dos/GoodsSku.java b/framework/src/main/java/cn/lili/modules/goods/entity/dos/GoodsSku.java index 0b0b0370..767fd0bb 100644 --- a/framework/src/main/java/cn/lili/modules/goods/entity/dos/GoodsSku.java +++ b/framework/src/main/java/cn/lili/modules/goods/entity/dos/GoodsSku.java @@ -42,7 +42,7 @@ public class GoodsSku extends BaseEntity { private String freightTemplateId; @ApiModelProperty(value = "是否是促销商品") - private Boolean isPromotion; + private Boolean promotionFlag; @ApiModelProperty(value = "促销价") private Double promotionPrice; @@ -130,7 +130,7 @@ public class GoodsSku extends BaseEntity { * @see GoodsAuthEnum */ @ApiModelProperty(value = "审核状态") - private String isAuth; + private String authFlag; @ApiModelProperty(value = "审核信息") private String authMessage; diff --git a/framework/src/main/java/cn/lili/modules/goods/entity/dto/GoodsSearchParams.java b/framework/src/main/java/cn/lili/modules/goods/entity/dto/GoodsSearchParams.java index 4b59c4c6..db523f1d 100644 --- a/framework/src/main/java/cn/lili/modules/goods/entity/dto/GoodsSearchParams.java +++ b/framework/src/main/java/cn/lili/modules/goods/entity/dto/GoodsSearchParams.java @@ -9,6 +9,8 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; +import java.util.Arrays; + /** * 商品查询条件 * @@ -58,10 +60,13 @@ public class GoodsSearchParams extends PageVO { * @see GoodsAuthEnum */ @ApiModelProperty(value = "审核状态") - private String isAuth; + private String authFlag; @ApiModelProperty(value = "库存数量") - private Integer quantity; + private Integer leQuantity; + + @ApiModelProperty(value = "库存数量") + private Integer geQuantity; @ApiModelProperty(value = "是否为推荐商品") private Boolean recommend; @@ -81,7 +86,7 @@ public class GoodsSearchParams extends PageVO { queryWrapper.like("goods_name", goodsName); } if (CharSequenceUtil.isNotEmpty(id)) { - queryWrapper.eq("id", id); + queryWrapper.in("id", Arrays.asList(id.split(","))); } if (CharSequenceUtil.isNotEmpty(storeId)) { queryWrapper.eq("store_id", storeId); @@ -101,11 +106,14 @@ public class GoodsSearchParams extends PageVO { if (CharSequenceUtil.isNotEmpty(marketEnable)) { queryWrapper.eq("market_enable", marketEnable); } - if (CharSequenceUtil.isNotEmpty(isAuth)) { - queryWrapper.eq("is_auth", isAuth); + if (CharSequenceUtil.isNotEmpty(authFlag)) { + queryWrapper.eq("auth_flag", authFlag); } - if (quantity != null) { - queryWrapper.le("quantity", quantity); + if (leQuantity != null) { + queryWrapper.le("quantity", leQuantity); + } + if (geQuantity != null) { + queryWrapper.ge("quantity", geQuantity); } if (recommend != null) { queryWrapper.le("recommend", recommend); @@ -123,9 +131,9 @@ public class GoodsSearchParams extends PageVO { if (CharSequenceUtil.isNotEmpty(price)) { String[] s = price.split("_"); if (s.length > 1) { - queryWrapper.ge("price", s[1]); + queryWrapper.between("price", s[0], s[1]); } else { - queryWrapper.le("price", s[0]); + queryWrapper.ge("price", s[0]); } } } diff --git a/framework/src/main/java/cn/lili/modules/goods/entity/dto/SimpleCommodity.java b/framework/src/main/java/cn/lili/modules/goods/entity/dto/SimpleCommodity.java deleted file mode 100644 index 50813010..00000000 --- a/framework/src/main/java/cn/lili/modules/goods/entity/dto/SimpleCommodity.java +++ /dev/null @@ -1,18 +0,0 @@ -package cn.lili.modules.goods.entity.dto; - -import io.swagger.annotations.ApiModelProperty; - -/** - * 用于直播间前台使用的直播间商品DTO - * - * @author Bulbasaur - * @since 2021/5/20 2:34 下午 - */ -public class SimpleCommodity { - - @ApiModelProperty(value = "图片") - private String goodsImage; - - @ApiModelProperty(value = "商品名称") - private String name; -} diff --git a/framework/src/main/java/cn/lili/modules/goods/mapper/GoodsSkuMapper.java b/framework/src/main/java/cn/lili/modules/goods/mapper/GoodsSkuMapper.java index 304b8cd9..62f65589 100644 --- a/framework/src/main/java/cn/lili/modules/goods/mapper/GoodsSkuMapper.java +++ b/framework/src/main/java/cn/lili/modules/goods/mapper/GoodsSkuMapper.java @@ -2,6 +2,9 @@ package cn.lili.modules.goods.mapper; import cn.lili.modules.goods.entity.dos.GoodsSku; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Select; + +import java.util.List; /** * 规格项数据处理层 @@ -11,4 +14,13 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; */ public interface GoodsSkuMapper extends BaseMapper { + /** + * 根据商品id获取全部skuId的集合 + * + * @param goodsId goodsId + * @return 全部skuId的集合 + */ + @Select("SELECT id FROM li_goods_sku WHERE goods_id = #{goodsId}") + List getGoodsSkuIdByGoodsId(String goodsId); + } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/goods/service/GoodsService.java b/framework/src/main/java/cn/lili/modules/goods/service/GoodsService.java index dbf17a60..16ac93e4 100644 --- a/framework/src/main/java/cn/lili/modules/goods/service/GoodsService.java +++ b/framework/src/main/java/cn/lili/modules/goods/service/GoodsService.java @@ -6,6 +6,7 @@ import cn.lili.modules.goods.entity.dto.GoodsSearchParams; import cn.lili.modules.goods.entity.enums.GoodsAuthEnum; import cn.lili.modules.goods.entity.enums.GoodsStatusEnum; import cn.lili.modules.goods.entity.vos.GoodsVO; +import cn.lili.modules.store.entity.dos.Store; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; @@ -48,7 +49,7 @@ public interface GoodsService extends IService { * @param categoryId 分类ID * @return 商品数量 */ - Integer getGoodsCountByCategory(String categoryId); + long getGoodsCountByCategory(String categoryId); /** * 添加商品 @@ -82,6 +83,15 @@ public interface GoodsService extends IService { */ IPage queryByParams(GoodsSearchParams goodsSearchParams); + + /** + * 商品查询 + * + * @param goodsSearchParams 查询参数 + * @return 商品信息 + */ + List queryListByParams(GoodsSearchParams goodsSearchParams); + /** * 批量审核商品 * @@ -91,21 +101,6 @@ public interface GoodsService extends IService { */ boolean auditGoods(List goodsIds, GoodsAuthEnum goodsAuthEnum); - /** - * 获取所有的已上架的商品数量 - * - * @param goodsAuthEnum 商品审核枚举 - * @param goodsStatusEnum 商品状态枚举 - * @return 所有的已上架的商品数量 - */ - Integer goodsNum(GoodsStatusEnum goodsStatusEnum, GoodsAuthEnum goodsAuthEnum); - - /** - * 获取今天的已上架的商品数量 - * - * @return 今天的已上架的商品数量 - */ - Integer todayUpperNum(); /** * 更新商品上架状态状态 @@ -117,6 +112,15 @@ public interface GoodsService extends IService { */ Boolean updateGoodsMarketAble(List goodsIds, GoodsStatusEnum goodsStatusEnum, String underReason); + /** + * 更新商品上架状态状态 + * + * @param goodsIds 商品ID集合 + * @param goodsStatusEnum 更新的商品状态 + * @param underReason 下架原因 + * @return 更新结果 + */ + Boolean managerUpdateGoodsMarketAble(List goodsIds, GoodsStatusEnum goodsStatusEnum, String underReason); /** * 删除商品 * @@ -143,9 +147,30 @@ public interface GoodsService extends IService { void updateStock(String goodsId, Integer quantity); /** - * 更新SKU评价数量 + * 更新商品评价数量 * * @param goodsId 商品ID */ void updateGoodsCommentNum(String goodsId); + + /** + * 更新商品的购买数量 + * + * @param goodsId 商品ID + * @param buyCount 购买数量 + */ + void updateGoodsBuyCount(String goodsId, int buyCount); + + /** + * 批量更新商品的店铺信息 + * @param store + */ + void updateStoreDetail(Store store); + /** + * 统计店铺的商品数量 + * @param storeId 店铺id + * @return + */ + long countStoreGoodsNum(String storeId); + } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/goods/service/GoodsSkuService.java b/framework/src/main/java/cn/lili/modules/goods/service/GoodsSkuService.java index 022e7917..c300a39b 100644 --- a/framework/src/main/java/cn/lili/modules/goods/service/GoodsSkuService.java +++ b/framework/src/main/java/cn/lili/modules/goods/service/GoodsSkuService.java @@ -136,10 +136,18 @@ public interface GoodsSkuService extends IService { */ IPage getGoodsSkuByPage(GoodsSearchParams searchParams); + /** + * 列表查询商品sku信息 + * + * @param searchParams 查询参数 + * @return 商品sku信息 + */ + List getGoodsSkuByList(GoodsSearchParams searchParams); + /** * 更新商品sku状态 * - * @param goods 商品信息(Id,MarketEnable/IsAuth) + * @param goods 商品信息(Id,MarketEnable/AuthFlag) */ void updateGoodsSkuStatus(Goods goods); @@ -186,4 +194,20 @@ public interface GoodsSkuService extends IService { * @param skuId SKUId */ void updateGoodsSkuCommentNum(String skuId); + + /** + * 更新商品sku促销价格 + * + * @param skuId skuId + * @param promotionPrice 促销价格 + */ + void updateGoodsSkuPromotion(String skuId, Double promotionPrice); + + /** + * 根据商品id获取全部skuId的集合 + * + * @param goodsId goodsId + * @return 全部skuId的集合 + */ + List getSkuIdsByGoodsId(String goodsId); } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/goods/serviceimpl/CommodityServiceImpl.java b/framework/src/main/java/cn/lili/modules/goods/serviceimpl/CommodityServiceImpl.java index fe069032..983c56b5 100644 --- a/framework/src/main/java/cn/lili/modules/goods/serviceimpl/CommodityServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/goods/serviceimpl/CommodityServiceImpl.java @@ -70,7 +70,7 @@ public class CommodityServiceImpl extends ServiceImpl implements GoodsGalleryService { - /** - * 文件 - */ - @Autowired - private FileManagerPlugin fileManagerPlugin; /** * 设置 */ @@ -65,9 +60,9 @@ public class GoodsGalleryServiceImpl extends ServiceImpl implements */ @Autowired private RocketmqCustomProperties rocketmqCustomProperties; - /** - * 分类-参数 - */ - @Autowired - private CategoryParameterGroupService categoryParameterGroupService; @Autowired private FreightTemplateService freightTemplateService; @@ -121,8 +116,8 @@ public class GoodsServiceImpl extends ServiceImpl implements @Override public List getByBrandIds(List brandIds) { - LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper (); - lambdaQueryWrapper.in(Goods::getBrandId,brandIds); + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.in(Goods::getBrandId, brandIds); return list(lambdaQueryWrapper); } @@ -149,7 +144,7 @@ public class GoodsServiceImpl extends ServiceImpl implements } @Override - public final Integer getGoodsCountByCategory(String categoryId) { + public final long getGoodsCountByCategory(String categoryId) { QueryWrapper queryWrapper = Wrappers.query(); queryWrapper.like("category_path", categoryId); queryWrapper.eq("delete_flag", false); @@ -199,6 +194,9 @@ public class GoodsServiceImpl extends ServiceImpl implements if (goodsOperationDTO.getGoodsGalleryList() != null && !goodsOperationDTO.getGoodsGalleryList().isEmpty()) { this.goodsGalleryService.add(goodsOperationDTO.getGoodsGalleryList(), goods.getId()); } + if (GoodsAuthEnum.TOBEAUDITED.name().equals(goods.getAuthFlag())) { + this.deleteEsGoods(Collections.singletonList(goodsId)); + } cache.remove(CachePrefix.GOODS.getPrefix() + goodsId); } @@ -246,7 +244,7 @@ public class GoodsServiceImpl extends ServiceImpl implements if (CharSequenceUtil.isNotEmpty(goods.getParams())) { goodsVO.setGoodsParamsDTOList(JSONUtil.toList(goods.getParams(), GoodsParamsDTO.class)); } - + cache.put(CachePrefix.GOODS.getPrefix() + goodsId, goodsVO); return goodsVO; } @@ -255,12 +253,23 @@ public class GoodsServiceImpl extends ServiceImpl implements return this.page(PageUtil.initPage(goodsSearchParams), goodsSearchParams.queryWrapper()); } + /** + * 商品查询 + * + * @param goodsSearchParams 查询参数 + * @return 商品信息 + */ + @Override + public List queryListByParams(GoodsSearchParams goodsSearchParams) { + return this.list(goodsSearchParams.queryWrapper()); + } + @Override public boolean auditGoods(List goodsIds, GoodsAuthEnum goodsAuthEnum) { boolean result = false; for (String goodsId : goodsIds) { Goods goods = this.checkExist(goodsId); - goods.setIsAuth(goodsAuthEnum.name()); + goods.setAuthFlag(goodsAuthEnum.name()); result = this.updateById(goods); goodsSkuService.updateGoodsSkuStatus(goods); //删除之前的缓存 @@ -273,33 +282,6 @@ public class GoodsServiceImpl extends ServiceImpl implements return result; } - @Override - public Integer goodsNum(GoodsStatusEnum goodsStatusEnum, GoodsAuthEnum goodsAuthEnum) { - LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(); - - queryWrapper.eq(Goods::getDeleteFlag, false); - - if (goodsStatusEnum != null) { - queryWrapper.eq(Goods::getMarketEnable, goodsStatusEnum.name()); - } - if (goodsAuthEnum != null) { - queryWrapper.eq(Goods::getIsAuth, goodsAuthEnum.name()); - } - AuthUser currentUser = Objects.requireNonNull(UserContext.getCurrentUser()); - queryWrapper.eq(CharSequenceUtil.equals(currentUser.getRole().name(), UserEnums.STORE.name()), - Goods::getStoreId, currentUser.getStoreId()); - - return this.count(queryWrapper); - } - - @Override - public Integer todayUpperNum() { - LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(); - queryWrapper.eq(Goods::getMarketEnable, GoodsStatusEnum.UPPER.name()); - queryWrapper.ge(Goods::getCreateTime, DateUtil.beginOfDay(new DateTime())); - return this.count(queryWrapper); - } - @Override public Boolean updateGoodsMarketAble(List goodsIds, GoodsStatusEnum goodsStatusEnum, String underReason) { boolean result; @@ -322,6 +304,41 @@ public class GoodsServiceImpl extends ServiceImpl implements for (Goods goods : goodsList) { goodsSkuService.updateGoodsSkuStatus(goods); } + + if (GoodsStatusEnum.DOWN.equals(goodsStatusEnum)) { + this.deleteEsGoods(goodsIds); + } + return result; + } + + @Override + public Boolean managerUpdateGoodsMarketAble(List goodsIds, GoodsStatusEnum goodsStatusEnum, String underReason) { + boolean result; + + //如果商品为空,直接返回 + if (goodsIds == null || goodsIds.isEmpty()) { + return true; + } + + //检测管理员权限 + this.checkManagerAuthority(); + + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.set(Goods::getMarketEnable, goodsStatusEnum.name()); + updateWrapper.set(Goods::getUnderMessage, underReason); + updateWrapper.in(Goods::getId, goodsIds); + result = this.update(updateWrapper); + + //修改规格商品 + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.in(Goods::getId, goodsIds); + List goodsList = this.list(queryWrapper); + for (Goods goods : goodsList) { + goodsSkuService.updateGoodsSkuStatus(goods); + } + if (GoodsStatusEnum.DOWN.equals(goodsStatusEnum)) { + this.deleteEsGoods(goodsIds); + } return result; } @@ -341,12 +358,10 @@ public class GoodsServiceImpl extends ServiceImpl implements for (Goods goods : goodsList) { //修改SKU状态 goodsSkuService.updateGoodsSkuStatus(goods); - //商品删除消息 - String destination = rocketmqCustomProperties.getGoodsTopic() + ":" + GoodsTagsEnum.GOODS_DELETE.name(); - //发送mq消息 - rocketMQTemplate.asyncSend(destination, JSONUtil.toJsonStr(goods), RocketmqSendCallbackBuilder.commonCallback()); } + this.deleteEsGoods(goodsIds); + return true; } @@ -389,13 +404,58 @@ public class GoodsServiceImpl extends ServiceImpl implements goodEvaluationQueryWrapper.eq(MemberEvaluation::getId, goodsId); goodEvaluationQueryWrapper.eq(MemberEvaluation::getGrade, EvaluationGradeEnum.GOOD.name()); //好评数量 - int highPraiseNum = memberEvaluationService.count(goodEvaluationQueryWrapper); + long highPraiseNum = memberEvaluationService.count(goodEvaluationQueryWrapper); //好评率 double grade = NumberUtil.mul(NumberUtil.div(highPraiseNum, goods.getCommentNum().doubleValue(), 2), 100); goods.setGrade(grade); this.updateById(goods); } + /** + * 更新商品的购买数量 + * + * @param goodsId 商品ID + * @param buyCount 购买数量 + */ + @Override + public void updateGoodsBuyCount(String goodsId, int buyCount) { + this.update(new LambdaUpdateWrapper() + .eq(Goods::getId, goodsId) + .set(Goods::getBuyCount, buyCount)); + } + + @Override + public void updateStoreDetail(Store store) { + UpdateWrapper updateWrapper = new UpdateWrapper<>() + .eq("store_id", store.getId()) + .set("store_name", store.getStoreName()) + .set("self_operated", store.getSelfOperated()); + this.update(updateWrapper); + goodsSkuService.update(updateWrapper); + } + + @Override + public long countStoreGoodsNum(String storeId) { + return this.count( + new LambdaQueryWrapper() + .eq(Goods::getStoreId, storeId) + .eq(Goods::getAuthFlag, GoodsAuthEnum.PASS.name()) + .eq(Goods::getMarketEnable, GoodsStatusEnum.UPPER.name())); + } + + + /** + * 发送删除es索引的信息 + * + * @param goodsIds 商品id + */ + private void deleteEsGoods(List goodsIds) { + //商品删除消息 + String destination = rocketmqCustomProperties.getGoodsTopic() + ":" + GoodsTagsEnum.GOODS_DELETE.name(); + //发送mq消息 + rocketMQTemplate.asyncSend(destination, JSONUtil.toJsonStr(goodsIds), RocketmqSendCallbackBuilder.commonCallback()); + } + /** * 添加商品默认图片 * @@ -453,7 +513,7 @@ public class GoodsServiceImpl extends ServiceImpl implements Setting setting = settingService.get(SettingEnum.GOODS_SETTING.name()); GoodsSetting goodsSetting = JSONUtil.toBean(setting.getSettingValue(), GoodsSetting.class); //是否需要审核 - goods.setIsAuth(Boolean.TRUE.equals(goodsSetting.getGoodsCheck()) ? GoodsAuthEnum.TOBEAUDITED.name() : GoodsAuthEnum.PASS.name()); + goods.setAuthFlag(Boolean.TRUE.equals(goodsSetting.getGoodsCheck()) ? GoodsAuthEnum.TOBEAUDITED.name() : GoodsAuthEnum.PASS.name()); //判断当前用户是否为店铺 if (Objects.requireNonNull(UserContext.getCurrentUser()).getRole().equals(UserEnums.STORE)) { StoreVO storeDetail = this.storeService.getStoreDetail(); @@ -471,8 +531,8 @@ public class GoodsServiceImpl extends ServiceImpl implements /** * 判断商品是否存在 * - * @param goodsId - * @return + * @param goodsId 商品id + * @return 商品信息 */ private Goods checkExist(String goodsId) { Goods goods = getById(goodsId); @@ -483,20 +543,6 @@ public class GoodsServiceImpl extends ServiceImpl implements return goods; } - /** - * 检查当前登录的店铺 - * - * @return 当前登录的店铺 - */ - private AuthUser checkStoreAuthority() { - AuthUser currentUser = UserContext.getCurrentUser(); - if (currentUser == null || (currentUser.getRole().equals(UserEnums.STORE) && currentUser.getStoreId() == null)) { - throw new ServiceException(ResultCode.USER_AUTHORITY_ERROR); - } else if (currentUser.getRole().equals(UserEnums.STORE) && currentUser.getStoreId() != null) { - return currentUser; - } - return null; - } /** * 获取UpdateWrapper(检查用户越权) @@ -512,6 +558,36 @@ public class GoodsServiceImpl extends ServiceImpl implements return updateWrapper; } + + /** + * 检查当前登录的店铺 + * + * @return 当前登录的店铺 + */ + private AuthUser checkStoreAuthority() { + AuthUser currentUser = UserContext.getCurrentUser(); + //如果当前会员不为空,且为店铺角色 + if (currentUser != null && (currentUser.getRole().equals(UserEnums.STORE) && currentUser.getStoreId() != null)) { + return currentUser; + } + return null; + } + + /** + * 检查当前登录的店铺 + * + * @return 当前登录的店铺 + */ + private AuthUser checkManagerAuthority() { + AuthUser currentUser = UserContext.getCurrentUser(); + //如果当前会员不为空,且为店铺角色 + if (currentUser != null && (currentUser.getRole().equals(UserEnums.MANAGER))) { + return currentUser; + } else { + throw new ServiceException(ResultCode.USER_AUTHORITY_ERROR); + } + } + /** * 获取QueryWrapper(检查用户越权) * diff --git a/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsSkuServiceImpl.java b/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsSkuServiceImpl.java index b6c8fc5a..0badc920 100644 --- a/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsSkuServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsSkuServiceImpl.java @@ -2,11 +2,12 @@ package cn.lili.modules.goods.serviceimpl; import cn.hutool.core.convert.Convert; import cn.hutool.core.map.MapUtil; +import cn.hutool.core.text.CharSequenceUtil; import cn.hutool.core.util.NumberUtil; -import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import cn.lili.cache.Cache; +import cn.lili.common.enums.PromotionTypeEnum; import cn.lili.common.enums.ResultCode; import cn.lili.common.exception.ServiceException; import cn.lili.common.properties.RocketmqCustomProperties; @@ -30,6 +31,10 @@ import cn.lili.modules.member.entity.dos.FootPrint; import cn.lili.modules.member.entity.dos.MemberEvaluation; import cn.lili.modules.member.entity.enums.EvaluationGradeEnum; import cn.lili.modules.member.service.MemberEvaluationService; +import cn.lili.modules.promotion.entity.dos.PromotionGoods; +import cn.lili.modules.promotion.entity.dto.search.PromotionGoodsSearchParams; +import cn.lili.modules.promotion.entity.enums.CouponGetEnum; +import cn.lili.modules.promotion.service.PromotionGoodsService; import cn.lili.modules.search.entity.dos.EsGoodsAttribute; import cn.lili.modules.search.entity.dos.EsGoodsIndex; import cn.lili.modules.search.service.EsGoodsIndexService; @@ -45,6 +50,8 @@ import org.apache.rocketmq.spring.core.RocketMQTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.transaction.event.TransactionPhase; +import org.springframework.transaction.event.TransactionalEventListener; import java.util.*; import java.util.stream.Collectors; @@ -100,6 +107,9 @@ public class GoodsSkuServiceImpl extends ServiceImpl i @Autowired private EsGoodsIndexService goodsIndexService; + @Autowired + private PromotionGoodsService promotionGoodsService; + @Override public void add(List> skuList, Goods goods) { // 检查是否需要生成索引 @@ -113,7 +123,9 @@ public class GoodsSkuServiceImpl extends ServiceImpl i } this.updateStock(newSkuList); - generateEs(goods); + if (!newSkuList.isEmpty()) { + generateEs(goods); + } } @Override @@ -130,9 +142,9 @@ public class GoodsSkuServiceImpl extends ServiceImpl i //删除旧索引 for (GoodsSkuVO goodsSkuVO : goodsListByGoodsId) { oldSkuIds.add(goodsSkuVO.getId()); - goodsIndexService.deleteIndexById(goodsSkuVO.getId()); cache.remove(GoodsSkuService.getCacheKeys(goodsSkuVO.getId())); } + goodsIndexService.deleteIndexByIds(oldSkuIds); this.removeByIds(oldSkuIds); //删除sku相册 goodsGalleryService.removeByIds(oldSkuIds); @@ -152,7 +164,7 @@ public class GoodsSkuServiceImpl extends ServiceImpl i skuInfo(sku, goods, map, null); newSkuList.add(sku); //如果商品状态值不对,则es索引移除 - if (goods.getIsAuth().equals(GoodsAuthEnum.PASS.name()) && goods.getMarketEnable().equals(GoodsStatusEnum.UPPER.name())) { + if (goods.getAuthFlag().equals(GoodsAuthEnum.PASS.name()) && goods.getMarketEnable().equals(GoodsStatusEnum.UPPER.name())) { goodsIndexService.deleteIndexById(sku.getId()); this.clearCache(sku.getId()); } @@ -160,7 +172,9 @@ public class GoodsSkuServiceImpl extends ServiceImpl i this.updateBatchById(newSkuList); } this.updateStock(newSkuList); - generateEs(goods); + if (GoodsAuthEnum.PASS.name().equals(goods.getAuthFlag()) && !newSkuList.isEmpty()) { + generateEs(goods); + } } /** @@ -202,14 +216,11 @@ public class GoodsSkuServiceImpl extends ServiceImpl i //获取商品库存 Integer integer = (Integer) cache.get(GoodsSkuService.getStockCacheKey(id)); - //库存不为空 - if (integer != null) { - //库存与缓存中不一致, - if (!goodsSku.getQuantity().equals(integer)) { - //写入最新的库存信息 - goodsSku.setQuantity(integer); - cache.put(GoodsSkuService.getCacheKeys(goodsSku.getId()), goodsSku); - } + //库存不为空,库存与缓存中不一致 + if (integer != null && !goodsSku.getQuantity().equals(integer)) { + //写入最新的库存信息 + goodsSku.setQuantity(integer); + cache.put(GoodsSkuService.getCacheKeys(goodsSku.getId()), goodsSku); } return goodsSku; } @@ -219,23 +230,20 @@ public class GoodsSkuServiceImpl extends ServiceImpl i Map map = new HashMap<>(16); //获取商品VO GoodsVO goodsVO = goodsService.getGoodsVO(goodsId); + //如果skuid为空,则使用商品VO中sku信息获取 + if (CharSequenceUtil.isEmpty(skuId) || "undefined".equals(skuId)) { + skuId = goodsVO.getSkuList().get(0).getId(); + } //从缓存拿商品Sku GoodsSku goodsSku = this.getGoodsSkuByIdFromCache(skuId); - - - //如果规格为空则使用商品ID进行查询 - if (goodsSku == null) { - skuId = goodsVO.getSkuList().get(0).getId(); - goodsSku = this.getGoodsSkuByIdFromCache(skuId); - //如果使用商品ID无法查询SKU则返回错误 - if (goodsSku == null) { - throw new ServiceException(ResultCode.GOODS_NOT_EXIST); - } + //如果使用商品ID无法查询SKU则返回错误 + if (goodsVO == null || goodsSku == null) { + throw new ServiceException(ResultCode.GOODS_NOT_EXIST); } - //商品为空||商品下架||商品未审核通过||商品删除,则提示:商品已下架 - if (goodsVO == null || goodsVO.getMarketEnable().equals(GoodsStatusEnum.DOWN.name()) - || !goodsVO.getIsAuth().equals(GoodsAuthEnum.PASS.name()) + //商品下架||商品未审核通过||商品删除,则提示:商品已下架 + if (GoodsStatusEnum.DOWN.name().equals(goodsVO.getMarketEnable()) + || !GoodsAuthEnum.PASS.name().equals(goodsVO.getAuthFlag()) || Boolean.TRUE.equals(goodsVO.getDeleteFlag())) { throw new ServiceException(ResultCode.GOODS_NOT_EXIST); } @@ -243,7 +251,7 @@ public class GoodsSkuServiceImpl extends ServiceImpl i //获取当前商品的索引信息 EsGoodsIndex goodsIndex = goodsIndexService.findById(skuId); if (goodsIndex == null) { - goodsIndex = goodsIndexService.resetEsGoodsIndex(goodsSku, goodsVO.getGoodsParamsDTOList()); + goodsIndex = goodsIndexService.getTempEsGoodsIndex(goodsSku, goodsVO.getGoodsParamsDTOList()); //发送mq消息 String destination = rocketmqCustomProperties.getGoodsTopic() + ":" + GoodsTagsEnum.RESET_GOODS_INDEX.name(); @@ -253,9 +261,34 @@ public class GoodsSkuServiceImpl extends ServiceImpl i //商品规格 GoodsSkuVO goodsSkuDetail = this.getGoodsSkuVO(goodsSku); + Map promotionMap = goodsIndex.getPromotionMap(); //设置当前商品的促销价格 - if (goodsIndex.getPromotionMap() != null && !goodsIndex.getPromotionMap().isEmpty() && goodsIndex.getPromotionPrice() != null) { - goodsSkuDetail.setPromotionPrice(goodsIndex.getPromotionPrice()); + if (promotionMap != null && !promotionMap.isEmpty()) { + promotionMap = promotionMap.entrySet().stream().parallel().filter(i -> { + JSONObject jsonObject = JSONUtil.parseObj(i.getValue()); + // 过滤活动赠送优惠券和无效时间的活动 + return (jsonObject.get("getType") == null || jsonObject.get("getType", String.class).equals(CouponGetEnum.FREE.name())) && + (jsonObject.get("startTime") != null && jsonObject.get("startTime", Date.class).getTime() <= System.currentTimeMillis()) && + (jsonObject.get("endTime") == null || jsonObject.get("endTime", Date.class).getTime() >= System.currentTimeMillis()); + }).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); + + Optional> containsPromotion = promotionMap.entrySet().stream().filter(i -> + i.getKey().contains(PromotionTypeEnum.SECKILL.name()) || i.getKey().contains(PromotionTypeEnum.PINTUAN.name())).findFirst(); + if (containsPromotion.isPresent()) { + JSONObject jsonObject = JSONUtil.parseObj(containsPromotion.get().getValue()); + PromotionGoodsSearchParams searchParams = new PromotionGoodsSearchParams(); + searchParams.setSkuId(skuId); + searchParams.setPromotionId(jsonObject.get("id").toString()); + PromotionGoods promotionsGoods = promotionGoodsService.getPromotionsGoods(searchParams); + if (promotionsGoods != null && promotionsGoods.getPrice() != null) { + goodsSkuDetail.setPromotionFlag(true); + goodsSkuDetail.setPromotionPrice(promotionsGoods.getPrice()); + } + } else { + goodsSkuDetail.setPromotionFlag(false); + goodsSkuDetail.setPromotionPrice(null); + } + } map.put("data", goodsSkuDetail); @@ -265,10 +298,10 @@ public class GoodsSkuServiceImpl extends ServiceImpl i //获取规格信息 map.put("specs", this.groupBySkuAndSpec(goodsVO.getSkuList())); - map.put("promotionMap", goodsIndex.getPromotionMap()); + map.put("promotionMap", promotionMap); //获取参数信息 - if (goodsVO.getGoodsParamsDTOList() != null && goodsVO.getGoodsParamsDTOList().size() > 0) { + if (goodsVO.getGoodsParamsDTOList() != null && !goodsVO.getGoodsParamsDTOList().isEmpty()) { map.put("goodsParamsDTOList", goodsVO.getGoodsParamsDTOList()); } @@ -284,14 +317,14 @@ public class GoodsSkuServiceImpl extends ServiceImpl i /** * 更新商品sku状态 * - * @param goods 商品信息(Id,MarketEnable/IsAuth) + * @param goods 商品信息(Id,MarketEnable/AuthFlag) */ @Override public void updateGoodsSkuStatus(Goods goods) { LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); updateWrapper.eq(GoodsSku::getGoodsId, goods.getId()); updateWrapper.set(GoodsSku::getMarketEnable, goods.getMarketEnable()); - updateWrapper.set(GoodsSku::getIsAuth, goods.getIsAuth()); + updateWrapper.set(GoodsSku::getAuthFlag, goods.getAuthFlag()); updateWrapper.set(GoodsSku::getDeleteFlag, goods.getDeleteFlag()); boolean update = this.update(updateWrapper); if (Boolean.TRUE.equals(update)) { @@ -300,7 +333,9 @@ public class GoodsSkuServiceImpl extends ServiceImpl i cache.remove(GoodsSkuService.getCacheKeys(sku.getId())); cache.put(GoodsSkuService.getCacheKeys(sku.getId()), sku); } - generateEs(goods); + if (!goodsSkus.isEmpty()) { + generateEs(goods); + } } } @@ -385,6 +420,17 @@ public class GoodsSkuServiceImpl extends ServiceImpl i return this.page(PageUtil.initPage(searchParams), searchParams.queryWrapper()); } + /** + * 列表查询商品sku信息 + * + * @param searchParams 查询参数 + * @return 商品sku信息 + */ + @Override + public List getGoodsSkuByList(GoodsSearchParams searchParams) { + return this.list(searchParams.queryWrapper()); + } + @Override public void updateStocks(List goodsSkuStockDTOS) { for (GoodsSkuStockDTO goodsSkuStockDTO : goodsSkuStockDTOS) { @@ -462,7 +508,7 @@ public class GoodsSkuServiceImpl extends ServiceImpl i goodEvaluationQueryWrapper.eq(MemberEvaluation::getGrade, EvaluationGradeEnum.GOOD.name()); //好评数量 - int highPraiseNum = memberEvaluationService.count(goodEvaluationQueryWrapper); + long highPraiseNum = memberEvaluationService.count(goodEvaluationQueryWrapper); //更新商品评价数量 goodsSku.setCommentNum(goodsSku.getCommentNum() != null ? goodsSku.getCommentNum() + 1 : 1); @@ -476,8 +522,8 @@ public class GoodsSkuServiceImpl extends ServiceImpl i //修改规格索引,发送mq消息 Map updateIndexFieldsMap = EsIndexUtil.getUpdateIndexFieldsMap( - MapUtil.builder().put("id", goodsSku.getId()).build(), - MapUtil.builder().put("commentNum", goodsSku.getCommentNum()).put("highPraiseNum", highPraiseNum) + MapUtil.builder(new HashMap()).put("id", goodsSku.getId()).build(), + MapUtil.builder(new HashMap()).put("commentNum", goodsSku.getCommentNum()).put("highPraiseNum", highPraiseNum) .put("grade", grade).build()); String destination = rocketmqCustomProperties.getGoodsTopic() + ":" + GoodsTagsEnum.UPDATE_GOODS_INDEX_FIELD.name(); rocketMQTemplate.asyncSend(destination, JSONUtil.toJsonStr(updateIndexFieldsMap), RocketmqSendCallbackBuilder.commonCallback()); @@ -486,15 +532,48 @@ public class GoodsSkuServiceImpl extends ServiceImpl i goodsService.updateGoodsCommentNum(goodsSku.getGoodsId()); } + /** + * 更新商品sku促销价格 + * + * @param skuId skuId + * @param promotionPrice 促销价格 + */ + @Override + public void updateGoodsSkuPromotion(String skuId, Double promotionPrice) { + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(GoodsSku::getId, skuId); + updateWrapper.set(GoodsSku::getPromotionPrice, promotionPrice); + updateWrapper.set(GoodsSku::getPromotionFlag, true); + this.update(updateWrapper); + cache.remove(GoodsSkuService.getCacheKeys(skuId)); + } + + /** + * 根据商品id获取全部skuId的集合 + * + * @param goodsId goodsId + * @return 全部skuId的集合 + */ + @Override + public List getSkuIdsByGoodsId(String goodsId) { + return this.baseMapper.getGoodsSkuIdByGoodsId(goodsId); + } + /** * 发送生成ES商品索引 * * @param goods 商品信息 */ + @Override + @TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT) public void generateEs(Goods goods) { + // 不生成没有审核通过且没有上架的商品 + if (!GoodsStatusEnum.UPPER.name().equals(goods.getMarketEnable()) || !GoodsAuthEnum.PASS.name().equals(goods.getAuthFlag())) { + return; + } String destination = rocketmqCustomProperties.getGoodsTopic() + ":" + GoodsTagsEnum.GENERATOR_GOODS_INDEX.name(); //发送mq消息 - rocketMQTemplate.asyncSend(destination, JSONUtil.toJsonStr(goods), RocketmqSendCallbackBuilder.commonCallback()); + rocketMQTemplate.asyncSend(destination, goods.getId(), RocketmqSendCallbackBuilder.commonCallback()); } /** @@ -580,7 +659,7 @@ public class GoodsSkuServiceImpl extends ServiceImpl i sku.setGoodsUnit(goods.getGoodsUnit()); sku.setGrade(100D); //商品状态 - sku.setIsAuth(goods.getIsAuth()); + sku.setAuthFlag(goods.getAuthFlag()); sku.setSalesModel(goods.getSalesModel()); //卖家信息 sku.setStoreId(goods.getStoreId()); @@ -629,7 +708,7 @@ public class GoodsSkuServiceImpl extends ServiceImpl i } //设置规格商品缩略图 //如果规格没有图片,则用商品图片复盖。有则增加规格图片,放在商品图片集合之前 - if (spec.getValue() != null && StrUtil.isNotEmpty(spec.getValue().toString())) { + if (CharSequenceUtil.isNotEmpty(spec.getValue().toString())) { thumbnail = goodsGalleryService.getGoodsGallery(images.get(0).get("url")).getThumbnail(); small = goodsGalleryService.getGoodsGallery(images.get(0).get("url")).getSmall(); } diff --git a/framework/src/main/java/cn/lili/modules/goods/util/WechatLivePlayerUtil.java b/framework/src/main/java/cn/lili/modules/goods/util/WechatLivePlayerUtil.java index 03064332..59a05ca4 100644 --- a/framework/src/main/java/cn/lili/modules/goods/util/WechatLivePlayerUtil.java +++ b/framework/src/main/java/cn/lili/modules/goods/util/WechatLivePlayerUtil.java @@ -3,11 +3,11 @@ package cn.lili.modules.goods.util; import cn.hutool.json.JSONObject; import cn.lili.common.enums.ClientTypeEnum; import cn.lili.common.exception.ServiceException; +import cn.lili.common.utils.HttpUtils; import cn.lili.modules.goods.entity.dos.Commodity; import cn.lili.modules.goods.entity.dos.Studio; import cn.lili.modules.goods.entity.dto.GoodsInfo; -import cn.lili.modules.message.util.WechatAccessTokenUtil; -import cn.lili.modules.system.utils.HttpUtils; +import cn.lili.modules.wechat.util.WechatAccessTokenUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; diff --git a/framework/src/main/java/cn/lili/modules/goods/util/WechatMediaUtil.java b/framework/src/main/java/cn/lili/modules/goods/util/WechatMediaUtil.java index e429aef4..d94dcdfe 100644 --- a/framework/src/main/java/cn/lili/modules/goods/util/WechatMediaUtil.java +++ b/framework/src/main/java/cn/lili/modules/goods/util/WechatMediaUtil.java @@ -4,7 +4,7 @@ import cn.hutool.json.JSONObject; import cn.lili.common.enums.ClientTypeEnum; import cn.lili.common.enums.ResultCode; import cn.lili.common.exception.ServiceException; -import cn.lili.modules.message.util.WechatAccessTokenUtil; +import cn.lili.modules.wechat.util.WechatAccessTokenUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -105,8 +105,9 @@ public class WechatMediaUtil { } catch (Exception e) { log.error("微信媒体上传失败", e); } + assert resultStr != null; JSONObject jsonObject = new JSONObject(resultStr.toString()); - log.info("微信媒体上传:" + jsonObject.toString()); + log.info("微信媒体上传:" + jsonObject); //判断是否传递成功,如果token过期则重新获取 if (jsonObject.get("errcode") != null && ("40001").equals(jsonObject.get("errcode"))) { wechatAccessTokenUtil.removeAccessToken(ClientTypeEnum.WECHAT_MP); diff --git a/framework/src/main/java/cn/lili/modules/member/entity/dos/MemberReceipt.java b/framework/src/main/java/cn/lili/modules/member/entity/dos/MemberReceipt.java index 0738666b..0b4a8ee4 100644 --- a/framework/src/main/java/cn/lili/modules/member/entity/dos/MemberReceipt.java +++ b/framework/src/main/java/cn/lili/modules/member/entity/dos/MemberReceipt.java @@ -3,7 +3,6 @@ package cn.lili.modules.member.entity.dos; import cn.lili.mybatis.BaseIdEntity; import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModel; @@ -27,11 +26,6 @@ public class MemberReceipt extends BaseIdEntity { private static final long serialVersionUID = -8210927482915675995L; - @TableId - @TableField - @ApiModelProperty(value = "唯一标识", hidden = true) - private String id; - @ApiModelProperty(value = "发票抬头") private String receiptTitle; diff --git a/framework/src/main/java/cn/lili/modules/member/entity/dto/CollectionDTO.java b/framework/src/main/java/cn/lili/modules/member/entity/dto/CollectionDTO.java new file mode 100644 index 00000000..0ec661e0 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/member/entity/dto/CollectionDTO.java @@ -0,0 +1,28 @@ +package cn.lili.modules.member.entity.dto; + +import lombok.AllArgsConstructor; +import lombok.Data; + +/** + * 收藏数量变化DTO + * + * @author Chopper + * @version v1.0 + * 2021-11-30 10:14 + */ +@Data +@AllArgsConstructor +public class CollectionDTO { + + /** + * 变化的模型id + * 商品id/店铺id + */ + private String id; + + /** + * 变化的数量 + * -1 减少1 / +1 增加1 + */ + private Integer num; +} diff --git a/framework/src/main/java/cn/lili/modules/member/entity/dto/ConnectQueryDTO.java b/framework/src/main/java/cn/lili/modules/member/entity/dto/ConnectQueryDTO.java new file mode 100644 index 00000000..486a838a --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/member/entity/dto/ConnectQueryDTO.java @@ -0,0 +1,32 @@ +package cn.lili.modules.member.entity.dto; + +import lombok.Builder; +import lombok.Data; + +/** + * ConnectQueryDTO + * + * @author Chopper + * @version v1.0 + * 2021-12-01 14:34 + */ +@Data +@Builder +public class ConnectQueryDTO { + + /** + * 用户id + */ + private String userId; + + /** + * 第三方id + */ + private String unionId; + + /** + * 联合登陆类型 + */ + private String unionType; + +} diff --git a/framework/src/main/java/cn/lili/modules/member/entity/vo/EvaluationNumberVO.java b/framework/src/main/java/cn/lili/modules/member/entity/vo/EvaluationNumberVO.java index 152bee47..92084f43 100644 --- a/framework/src/main/java/cn/lili/modules/member/entity/vo/EvaluationNumberVO.java +++ b/framework/src/main/java/cn/lili/modules/member/entity/vo/EvaluationNumberVO.java @@ -25,5 +25,5 @@ public class EvaluationNumberVO { private Integer worse; @ApiModelProperty(value = "有图数量") - private Integer haveImage; + private Long haveImage; } diff --git a/framework/src/main/java/cn/lili/modules/member/mapper/MemberMapper.java b/framework/src/main/java/cn/lili/modules/member/mapper/MemberMapper.java index 4e214753..32f09fa9 100644 --- a/framework/src/main/java/cn/lili/modules/member/mapper/MemberMapper.java +++ b/framework/src/main/java/cn/lili/modules/member/mapper/MemberMapper.java @@ -2,7 +2,6 @@ package cn.lili.modules.member.mapper; import cn.lili.modules.member.entity.dos.Member; -import cn.lili.modules.member.entity.vo.MemberDistributionVO; import cn.lili.modules.member.entity.vo.MemberVO; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -28,13 +27,6 @@ public interface MemberMapper extends BaseMapper { @Select("select m.mobile from li_member m") List getAllMemberMobile(); - /** - * 获取会员分布列表 - * @return 会员分布列表 - */ - @Select("select client_enum,count(0) as num from li_member group by client_enum") - List distribution(); - @Select("select * from li_member ${ew.customSqlSegment}") IPage pageByMemberVO(IPage page, @Param(Constants.WRAPPER) Wrapper queryWrapper); } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/system/mapper/StoreLogisticsMapper.java b/framework/src/main/java/cn/lili/modules/member/mapper/StoreLogisticsMapper.java similarity index 97% rename from framework/src/main/java/cn/lili/modules/system/mapper/StoreLogisticsMapper.java rename to framework/src/main/java/cn/lili/modules/member/mapper/StoreLogisticsMapper.java index 3c5e8a0a..b37dfa80 100644 --- a/framework/src/main/java/cn/lili/modules/system/mapper/StoreLogisticsMapper.java +++ b/framework/src/main/java/cn/lili/modules/member/mapper/StoreLogisticsMapper.java @@ -1,4 +1,4 @@ -package cn.lili.modules.system.mapper; +package cn.lili.modules.member.mapper; import cn.lili.modules.store.entity.dos.StoreLogistics; import cn.lili.modules.system.entity.vo.StoreLogisticsVO; diff --git a/framework/src/main/java/cn/lili/modules/member/service/FootprintService.java b/framework/src/main/java/cn/lili/modules/member/service/FootprintService.java index 624683d5..fc5d8ca3 100644 --- a/framework/src/main/java/cn/lili/modules/member/service/FootprintService.java +++ b/framework/src/main/java/cn/lili/modules/member/service/FootprintService.java @@ -51,5 +51,5 @@ public interface FootprintService extends IService { * * @return 当前会员的浏览记录数量 */ - Integer getFootprintNum(); + long getFootprintNum(); } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/member/service/MemberEvaluationService.java b/framework/src/main/java/cn/lili/modules/member/service/MemberEvaluationService.java index 7c5792df..44878063 100644 --- a/framework/src/main/java/cn/lili/modules/member/service/MemberEvaluationService.java +++ b/framework/src/main/java/cn/lili/modules/member/service/MemberEvaluationService.java @@ -88,18 +88,5 @@ public interface MemberEvaluationService extends IService { */ EvaluationNumberVO getEvaluationNumber(String goodsId); - /** - * 获取今天新增的评价数量 - * - * @return 今日评价数量 - */ - Integer todayMemberEvaluation(); - - /** - * 获取等待回复评价数量 - * - * @return 等待回复评价数量 - */ - Integer getWaitReplyNum(); } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/member/service/MemberService.java b/framework/src/main/java/cn/lili/modules/member/service/MemberService.java index f3f0d44a..a4256c17 100644 --- a/framework/src/main/java/cn/lili/modules/member/service/MemberService.java +++ b/framework/src/main/java/cn/lili/modules/member/service/MemberService.java @@ -9,13 +9,13 @@ import cn.lili.modules.member.entity.dos.Member; import cn.lili.modules.member.entity.dto.ManagerMemberEditDTO; import cn.lili.modules.member.entity.dto.MemberAddDTO; import cn.lili.modules.member.entity.dto.MemberEditDTO; -import cn.lili.modules.member.entity.vo.MemberDistributionVO; import cn.lili.modules.member.entity.vo.MemberSearchVO; import cn.lili.modules.member.entity.vo.MemberVO; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; import java.util.List; +import java.util.Map; /** * 会员业务层 @@ -197,20 +197,22 @@ public interface MemberService extends IService { */ Boolean updateMemberStatus(List memberIds, Boolean status); - /** - * 查看会员数据分布 - * - * @return 会员数据分布 - */ - List distribution(); - /** * 根据条件查询会员总数 * * @param memberSearchVO * @return 会员总数 */ - Integer getMemberNum(MemberSearchVO memberSearchVO); + long getMemberNum(MemberSearchVO memberSearchVO); + + /** + * 获取指定会员数据 + * + * @param columns 指定获取的列 + * @param memberIds 会员ids + * @return 指定会员数据 + */ + List> listFieldsByMemberIds(String columns, List memberIds); /** * 登出 diff --git a/framework/src/main/java/cn/lili/modules/system/service/StoreLogisticsService.java b/framework/src/main/java/cn/lili/modules/member/service/StoreLogisticsService.java similarity index 96% rename from framework/src/main/java/cn/lili/modules/system/service/StoreLogisticsService.java rename to framework/src/main/java/cn/lili/modules/member/service/StoreLogisticsService.java index 971d1ceb..ea7914de 100644 --- a/framework/src/main/java/cn/lili/modules/system/service/StoreLogisticsService.java +++ b/framework/src/main/java/cn/lili/modules/member/service/StoreLogisticsService.java @@ -1,4 +1,4 @@ -package cn.lili.modules.system.service; +package cn.lili.modules.member.service; import cn.lili.modules.store.entity.dos.StoreLogistics; import cn.lili.modules.system.entity.vo.StoreLogisticsVO; diff --git a/framework/src/main/java/cn/lili/modules/member/serviceimpl/FootprintServiceImpl.java b/framework/src/main/java/cn/lili/modules/member/serviceimpl/FootprintServiceImpl.java index c9c0be86..ff5dd16c 100644 --- a/framework/src/main/java/cn/lili/modules/member/serviceimpl/FootprintServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/member/serviceimpl/FootprintServiceImpl.java @@ -1,13 +1,13 @@ package cn.lili.modules.member.serviceimpl; import cn.lili.common.security.context.UserContext; -import cn.lili.mybatis.util.PageUtil; import cn.lili.common.vo.PageVO; import cn.lili.modules.member.entity.dos.FootPrint; import cn.lili.modules.member.mapper.FootprintMapper; import cn.lili.modules.member.service.FootprintService; import cn.lili.modules.search.entity.dos.EsGoodsIndex; import cn.lili.modules.search.service.EsGoodsSearchService; +import cn.lili.mybatis.util.PageUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -15,6 +15,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.Collections; import java.util.Date; import java.util.List; import java.util.Objects; @@ -81,19 +82,19 @@ public class FootprintServiceImpl extends ServiceImpl skuIdList = this.baseMapper.footprintSkuIdList(PageUtil.initPage(pageVO), lambdaQueryWrapper); - if (skuIdList.size() > 0) { + if (!skuIdList.isEmpty()) { List list = esGoodsSearchService.getEsGoodsBySkuIds(skuIdList); //去除为空的商品数据 list.removeIf(Objects::isNull); return list; } - return null; + return Collections.emptyList(); } @Override - public Integer getFootprintNum() { + public long getFootprintNum() { LambdaQueryWrapper lambdaQueryWrapper = Wrappers.lambdaQuery(); - lambdaQueryWrapper.eq(FootPrint::getMemberId, UserContext.getCurrentUser().getId()); + lambdaQueryWrapper.eq(FootPrint::getMemberId, Objects.requireNonNull(UserContext.getCurrentUser()).getId()); lambdaQueryWrapper.eq(FootPrint::getDeleteFlag, false); return this.count(lambdaQueryWrapper); } diff --git a/framework/src/main/java/cn/lili/modules/member/serviceimpl/GoodsCollectionServiceImpl.java b/framework/src/main/java/cn/lili/modules/member/serviceimpl/GoodsCollectionServiceImpl.java index 692a4b74..1c6e8838 100644 --- a/framework/src/main/java/cn/lili/modules/member/serviceimpl/GoodsCollectionServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/member/serviceimpl/GoodsCollectionServiceImpl.java @@ -1,24 +1,18 @@ package cn.lili.modules.member.serviceimpl; -import cn.hutool.json.JSONUtil; import cn.lili.common.enums.ResultCode; import cn.lili.common.exception.ServiceException; -import cn.lili.rocketmq.RocketmqSendCallbackBuilder; -import cn.lili.rocketmq.tags.GoodsTagsEnum; import cn.lili.common.security.context.UserContext; -import cn.lili.mybatis.util.PageUtil; import cn.lili.common.vo.PageVO; -import cn.lili.common.properties.RocketmqCustomProperties; import cn.lili.modules.member.entity.dos.GoodsCollection; import cn.lili.modules.member.entity.vo.GoodsCollectionVO; import cn.lili.modules.member.mapper.GoodsCollectionMapper; import cn.lili.modules.member.service.GoodsCollectionService; +import cn.lili.mybatis.util.PageUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import org.apache.rocketmq.spring.core.RocketMQTemplate; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -33,19 +27,8 @@ import java.util.Optional; */ @Service @Transactional(rollbackFor = Exception.class) - public class GoodsCollectionServiceImpl extends ServiceImpl implements GoodsCollectionService { - /** - * rocketMq - */ - @Autowired - private RocketMQTemplate rocketMQTemplate; - /** - * rocketMq配置 - */ - @Autowired - private RocketmqCustomProperties rocketmqCustomProperties; @Override public IPage goodsCollection(PageVO pageVo) { @@ -73,10 +56,6 @@ public class GoodsCollectionServiceImpl extends ServiceImpl().ge(MemberEvaluation::getCreateTime, DateUtil.beginOfDay(new DateTime()))); - } - - @Override - public Integer getWaitReplyNum() { - QueryWrapper queryWrapper = Wrappers.query(); - queryWrapper.eq(StringUtils.equals(UserContext.getCurrentUser().getRole().name(), UserEnums.STORE.name()), - "store_id", UserContext.getCurrentUser().getStoreId()); - queryWrapper.eq("reply_status", false); - return this.count(queryWrapper); - } - /** * 检测会员评价 * diff --git a/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberPointsHistoryServiceImpl.java b/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberPointsHistoryServiceImpl.java index 6f6736da..f1557ca6 100644 --- a/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberPointsHistoryServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberPointsHistoryServiceImpl.java @@ -1,27 +1,22 @@ package cn.lili.modules.member.serviceimpl; -import cn.lili.modules.member.entity.dos.Member; -import cn.lili.modules.member.entity.enums.PointTypeEnum; -import cn.lili.modules.member.mapper.MemberMapper; -import cn.lili.modules.member.service.MemberService; -import cn.lili.mybatis.util.PageUtil; +import cn.hutool.core.text.CharSequenceUtil; import cn.lili.common.utils.StringUtils; import cn.lili.common.vo.PageVO; +import cn.lili.modules.member.entity.dos.Member; import cn.lili.modules.member.entity.dos.MemberPointsHistory; import cn.lili.modules.member.entity.vo.MemberPointsHistoryVO; import cn.lili.modules.member.mapper.MemberPointsHistoryMapper; import cn.lili.modules.member.service.MemberPointsHistoryService; +import cn.lili.modules.member.service.MemberService; +import cn.lili.mybatis.util.PageUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.util.ArrayList; -import java.util.List; - /** * 会员积分历史业务层实现 * @@ -51,8 +46,8 @@ public class MemberPointsHistoryServiceImpl extends ServiceImpl MemberPointsHistoryList(PageVO page, String memberId, String memberName) { LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper() - .eq(memberId != null, MemberPointsHistory::getMemberId, memberId) - .like(memberName != null, MemberPointsHistory::getMemberName, memberName); + .eq(CharSequenceUtil.isNotEmpty(memberId), MemberPointsHistory::getMemberId, memberId) + .like(CharSequenceUtil.isNotEmpty(memberName), MemberPointsHistory::getMemberName, memberName); //如果排序为空,则默认创建时间倒序 if (StringUtils.isEmpty(page.getSort())) { page.setSort("createTime"); diff --git a/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberServiceImpl.java b/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberServiceImpl.java index 10d69d81..3a995b4f 100644 --- a/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberServiceImpl.java @@ -14,23 +14,19 @@ import cn.lili.common.security.AuthUser; import cn.lili.common.security.context.UserContext; import cn.lili.common.security.enums.UserEnums; import cn.lili.common.security.token.Token; +import cn.lili.common.sensitive.SensitiveWordsFilter; import cn.lili.common.utils.BeanUtil; import cn.lili.common.utils.CookieUtil; -import cn.lili.common.utils.StringUtils; +import cn.lili.common.utils.UuidUtils; import cn.lili.common.vo.PageVO; import cn.lili.modules.connect.config.ConnectAuthEnum; import cn.lili.modules.connect.entity.Connect; import cn.lili.modules.connect.entity.dto.ConnectAuthUser; import cn.lili.modules.connect.service.ConnectService; -import cn.lili.modules.connect.util.UuidUtils; import cn.lili.modules.member.aop.annotation.PointLogPoint; import cn.lili.modules.member.entity.dos.Member; -import cn.lili.modules.member.entity.dto.ManagerMemberEditDTO; -import cn.lili.modules.member.entity.dto.MemberAddDTO; -import cn.lili.modules.member.entity.dto.MemberEditDTO; -import cn.lili.modules.member.entity.dto.MemberPointMessage; +import cn.lili.modules.member.entity.dto.*; import cn.lili.modules.member.entity.enums.PointTypeEnum; -import cn.lili.modules.member.entity.vo.MemberDistributionVO; import cn.lili.modules.member.entity.vo.MemberSearchVO; import cn.lili.modules.member.entity.vo.MemberVO; import cn.lili.modules.member.mapper.MemberMapper; @@ -40,12 +36,9 @@ import cn.lili.modules.member.token.StoreTokenGenerate; import cn.lili.modules.store.entity.dos.Store; import cn.lili.modules.store.entity.enums.StoreStatusEnum; import cn.lili.modules.store.service.StoreService; -import cn.lili.modules.system.utils.CharacterConstant; -import cn.lili.modules.system.utils.SensitiveWordsFilter; import cn.lili.mybatis.util.PageUtil; import cn.lili.rocketmq.RocketmqSendCallbackBuilder; import cn.lili.rocketmq.tags.MemberTagsEnum; -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 com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; @@ -59,6 +52,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.List; +import java.util.Map; import java.util.Objects; /** @@ -109,7 +103,7 @@ public class MemberServiceImpl extends ServiceImpl impleme @Override public Member findByUsername(String userName) { - QueryWrapper queryWrapper = new QueryWrapper(); + QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("username", userName); return this.baseMapper.selectOne(queryWrapper); } @@ -126,7 +120,7 @@ public class MemberServiceImpl extends ServiceImpl impleme @Override public boolean findByMobile(String uuid, String mobile) { - QueryWrapper queryWrapper = new QueryWrapper(); + QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("mobile", mobile); Member member = this.baseMapper.selectOne(queryWrapper); if (member == null) { @@ -165,7 +159,7 @@ public class MemberServiceImpl extends ServiceImpl impleme throw new ServiceException(ResultCode.USER_PASSWORD_ERROR); } //对店铺状态的判定处理 - if (member.getHaveStore()) { + if (Boolean.TRUE.equals(member.getHaveStore())) { Store store = storeService.getById(member.getStoreId()); if (!store.getStoreDisable().equals(StoreStatusEnum.OPEN.name())) { throw new ServiceException(ResultCode.STORE_CLOSE_ERROR); @@ -180,11 +174,11 @@ public class MemberServiceImpl extends ServiceImpl impleme /** * 传递手机号或者用户名 * - * @param userName - * @return + * @param userName 手机号或者用户名 + * @return 会员信息 */ private Member findMember(String userName) { - QueryWrapper queryWrapper = new QueryWrapper(); + QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("username", userName).or().eq("mobile", userName); return this.getOne(queryWrapper); } @@ -192,10 +186,10 @@ public class MemberServiceImpl extends ServiceImpl impleme @Override public Token autoRegister(ConnectAuthUser authUser) { - if (StringUtils.isEmpty(authUser.getNickname())) { + if (CharSequenceUtil.isEmpty(authUser.getNickname())) { authUser.setNickname("临时昵称"); } - if (StringUtils.isEmpty(authUser.getAvatar())) { + if (CharSequenceUtil.isEmpty(authUser.getAvatar())) { authUser.setAvatar("https://i.loli.net/2020/11/19/LyN6JF7zZRskdIe.png"); } try { @@ -321,6 +315,7 @@ public class MemberServiceImpl extends ServiceImpl impleme LambdaUpdateWrapper lambdaUpdateWrapper = Wrappers.lambdaUpdate(); lambdaUpdateWrapper.eq(Member::getMobile, phone); lambdaUpdateWrapper.set(Member::getPassword, new BCryptPasswordEncoder().encode(password)); + cache.remove(CachePrefix.FIND_MOBILE + uuid); return this.update(lambdaUpdateWrapper); } else { throw new ServiceException(ResultCode.USER_PHONE_NOT_EXIST); @@ -351,7 +346,7 @@ public class MemberServiceImpl extends ServiceImpl impleme } //过滤会员昵称敏感词 if (com.baomidou.mybatisplus.core.toolkit.StringUtils.isNotBlank(managerMemberEditDTO.getNickName())) { - managerMemberEditDTO.setNickName(SensitiveWordsFilter.filter(managerMemberEditDTO.getNickName(), CharacterConstant.WILDCARD_STAR)); + managerMemberEditDTO.setNickName(SensitiveWordsFilter.filter(managerMemberEditDTO.getNickName())); } //如果密码不为空则加密密码 if (com.baomidou.mybatisplus.core.toolkit.StringUtils.isNotBlank(managerMemberEditDTO.getPassword())) { @@ -369,13 +364,13 @@ public class MemberServiceImpl extends ServiceImpl impleme public IPage getMemberPage(MemberSearchVO memberSearchVO, PageVO page) { QueryWrapper queryWrapper = Wrappers.query(); //用户名查询 - queryWrapper.like(StringUtils.isNotBlank(memberSearchVO.getUsername()), "username", memberSearchVO.getUsername()); + queryWrapper.like(CharSequenceUtil.isNotBlank(memberSearchVO.getUsername()), "username", memberSearchVO.getUsername()); //用户名查询 - queryWrapper.like(StringUtils.isNotBlank(memberSearchVO.getNickName()), "nick_name", memberSearchVO.getNickName()); + queryWrapper.like(CharSequenceUtil.isNotBlank(memberSearchVO.getNickName()), "nick_name", memberSearchVO.getNickName()); //按照电话号码查询 - queryWrapper.like(StringUtils.isNotBlank(memberSearchVO.getMobile()), "mobile", memberSearchVO.getMobile()); + queryWrapper.like(CharSequenceUtil.isNotBlank(memberSearchVO.getMobile()), "mobile", memberSearchVO.getMobile()); //按照会员状态查询 - queryWrapper.eq(StringUtils.isNotBlank(memberSearchVO.getDisabled()), "disabled", + queryWrapper.eq(CharSequenceUtil.isNotBlank(memberSearchVO.getDisabled()), "disabled", memberSearchVO.getDisabled().equals(SwitchEnum.OPEN.name()) ? 1 : 0); queryWrapper.orderByDesc("create_time"); return this.baseMapper.pageByMemberVO(PageUtil.initPage(page), queryWrapper); @@ -403,7 +398,7 @@ public class MemberServiceImpl extends ServiceImpl impleme } member.setPoint(currentPoint); member.setTotalPoint(totalPoint); - Boolean result = this.updateById(member); + boolean result = this.updateById(member); if (result) { //发送会员消息 MemberPointMessage memberPointMessage = new MemberPointMessage(); @@ -429,12 +424,6 @@ public class MemberServiceImpl extends ServiceImpl impleme return this.update(updateWrapper); } - @Override - public List distribution() { - List memberDistributionVOS = this.baseMapper.distribution(); - return memberDistributionVOS; - } - /** * 根据手机号获取会员 * @@ -442,7 +431,7 @@ public class MemberServiceImpl extends ServiceImpl impleme * @return 会员 */ private Member findByPhone(String mobilePhone) { - QueryWrapper queryWrapper = new QueryWrapper(); + QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("mobile", mobilePhone); return this.baseMapper.selectOne(queryWrapper); } @@ -452,7 +441,7 @@ public class MemberServiceImpl extends ServiceImpl impleme * * @param uuid uuid * @param type 状态 - * @return + * @return cookie中的联合登录对象 */ private ConnectAuthUser getConnectAuthUser(String uuid, String type) { Object context = cache.get(ConnectService.cacheKey(type, uuid)); @@ -470,10 +459,9 @@ public class MemberServiceImpl extends ServiceImpl impleme * @param type 状态 */ private void loginBindUser(Member member, String unionId, String type) { - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(Connect::getUnionId, unionId); - queryWrapper.eq(Connect::getUnionType, type); - Connect connect = connectService.getOne(queryWrapper); + Connect connect = connectService.queryConnect( + ConnectQueryDTO.builder().unionId(unionId).unionType(type).build() + ); if (connect == null) { connect = new Connect(member.getId(), unionId, type); connectService.save(connect); @@ -490,18 +478,16 @@ public class MemberServiceImpl extends ServiceImpl impleme String uuid = CookieUtil.getCookie(ConnectService.CONNECT_COOKIE, ThreadContextHolder.getHttpRequest()); String connectType = CookieUtil.getCookie(ConnectService.CONNECT_TYPE, ThreadContextHolder.getHttpRequest()); //如果联合登陆存储了信息 - if (StringUtils.isNotEmpty(uuid) && StringUtils.isNotEmpty(connectType)) { + if (CharSequenceUtil.isNotEmpty(uuid) && CharSequenceUtil.isNotEmpty(connectType)) { try { //获取信息 ConnectAuthUser connectAuthUser = getConnectAuthUser(uuid, connectType); if (connectAuthUser == null) { return; } - //检测是否已经绑定过用户 - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(Connect::getUnionId, connectAuthUser.getUuid()); - queryWrapper.eq(Connect::getUnionType, connectType); - Connect connect = connectService.getOne(queryWrapper); + Connect connect = connectService.queryConnect( + ConnectQueryDTO.builder().unionId(connectAuthUser.getUuid()).unionType(connectType).build() + ); if (connect == null) { connect = new Connect(member.getId(), connectAuthUser.getUuid(), connectType); connectService.save(connect); @@ -533,29 +519,24 @@ public class MemberServiceImpl extends ServiceImpl impleme String connectType = CookieUtil.getCookie(ConnectService.CONNECT_TYPE, ThreadContextHolder.getHttpRequest()); //如果联合登陆存储了信息 - if (StringUtils.isNotEmpty(uuid) && StringUtils.isNotEmpty(connectType)) { - try { - //枚举 联合登陆类型获取 - ConnectAuthEnum authInterface = ConnectAuthEnum.valueOf(connectType); + if (CharSequenceUtil.isNotEmpty(uuid) && CharSequenceUtil.isNotEmpty(connectType)) { + //枚举 联合登陆类型获取 + ConnectAuthEnum authInterface = ConnectAuthEnum.valueOf(connectType); - ConnectAuthUser connectAuthUser = getConnectAuthUser(uuid, connectType); - if (connectAuthUser == null) { - throw new ServiceException(ResultCode.USER_OVERDUE_CONNECT_ERROR); - } - //检测是否已经绑定过用户 - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(Connect::getUnionId, connectAuthUser.getUuid()); - queryWrapper.eq(Connect::getUnionType, connectType); - Connect connect = connectService.getOne(queryWrapper); - //没有关联则返回true,表示可以继续绑定 - if (connect == null) { - connectAuthUser.setConnectEnum(authInterface); - return connectAuthUser; - } else { - throw new ServiceException(ResultCode.USER_CONNECT_BANDING_ERROR); - } - } catch (Exception e) { - throw e; + ConnectAuthUser connectAuthUser = getConnectAuthUser(uuid, connectType); + if (connectAuthUser == null) { + throw new ServiceException(ResultCode.USER_OVERDUE_CONNECT_ERROR); + } + //检测是否已经绑定过用户 + Connect connect = connectService.queryConnect( + ConnectQueryDTO.builder().unionType(connectType).unionId(connectAuthUser.getUuid()).build() + ); + //没有关联则返回true,表示可以继续绑定 + if (connect == null) { + connectAuthUser.setConnectEnum(authInterface); + return connectAuthUser; + } else { + throw new ServiceException(ResultCode.USER_CONNECT_BANDING_ERROR); } } else { throw new ServiceException(ResultCode.USER_CONNECT_NOT_EXIST_ERROR); @@ -563,19 +544,33 @@ public class MemberServiceImpl extends ServiceImpl impleme } @Override - public Integer getMemberNum(MemberSearchVO memberSearchVO) { + public long getMemberNum(MemberSearchVO memberSearchVO) { QueryWrapper queryWrapper = Wrappers.query(); //用户名查询 - queryWrapper.like(StringUtils.isNotBlank(memberSearchVO.getUsername()), "username", memberSearchVO.getUsername()); + queryWrapper.like(CharSequenceUtil.isNotBlank(memberSearchVO.getUsername()), "username", memberSearchVO.getUsername()); //按照电话号码查询 - queryWrapper.like(StringUtils.isNotBlank(memberSearchVO.getMobile()), "mobile", memberSearchVO.getMobile()); + queryWrapper.like(CharSequenceUtil.isNotBlank(memberSearchVO.getMobile()), "mobile", memberSearchVO.getMobile()); //按照状态查询 - queryWrapper.eq(StringUtils.isNotBlank(memberSearchVO.getDisabled()), "disabled", + queryWrapper.eq(CharSequenceUtil.isNotBlank(memberSearchVO.getDisabled()), "disabled", memberSearchVO.getDisabled().equals(SwitchEnum.OPEN.name()) ? 1 : 0); queryWrapper.orderByDesc("create_time"); return this.count(queryWrapper); } + /** + * 获取指定会员数据 + * + * @param columns 指定获取的列 + * @param memberIds 会员ids + * @return 指定会员数据 + */ + @Override + public List> listFieldsByMemberIds(String columns, List memberIds) { + return this.listMaps(new QueryWrapper() + .select(columns) + .in(memberIds != null && !memberIds.isEmpty(), "id", memberIds)); + } + /** * 登出 */ diff --git a/framework/src/main/java/cn/lili/modules/member/serviceimpl/StoreCollectionServiceImpl.java b/framework/src/main/java/cn/lili/modules/member/serviceimpl/StoreCollectionServiceImpl.java index b8dbbbe9..bfd798f2 100644 --- a/framework/src/main/java/cn/lili/modules/member/serviceimpl/StoreCollectionServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/member/serviceimpl/StoreCollectionServiceImpl.java @@ -3,16 +3,19 @@ package cn.lili.modules.member.serviceimpl; import cn.lili.common.enums.ResultCode; import cn.lili.common.exception.ServiceException; import cn.lili.common.security.context.UserContext; -import cn.lili.mybatis.util.PageUtil; import cn.lili.common.vo.PageVO; import cn.lili.modules.member.entity.dos.StoreCollection; +import cn.lili.modules.member.entity.dto.CollectionDTO; import cn.lili.modules.member.entity.vo.StoreCollectionVO; import cn.lili.modules.member.mapper.StoreCollectionMapper; import cn.lili.modules.member.service.StoreCollectionService; +import cn.lili.modules.store.service.StoreService; +import cn.lili.mybatis.util.PageUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.Optional; @@ -26,6 +29,10 @@ import java.util.Optional; @Service public class StoreCollectionServiceImpl extends ServiceImpl implements StoreCollectionService { + + @Autowired + private StoreService storeService; + @Override public IPage storeCollection(PageVO pageVo) { QueryWrapper queryWrapper = new QueryWrapper(); @@ -49,6 +56,7 @@ public class StoreCollectionServiceImpl extends ServiceImpl queryWrapper = new QueryWrapper(); queryWrapper.eq("member_id", UserContext.getCurrentUser().getId()); queryWrapper.eq("store_id", storeId); + storeService.updateStoreCollectionNum(new CollectionDTO(storeId, -1)); return this.remove(queryWrapper); } } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/system/serviceimpl/StoreLogisticsServiceImpl.java b/framework/src/main/java/cn/lili/modules/member/serviceimpl/StoreLogisticsServiceImpl.java similarity index 91% rename from framework/src/main/java/cn/lili/modules/system/serviceimpl/StoreLogisticsServiceImpl.java rename to framework/src/main/java/cn/lili/modules/member/serviceimpl/StoreLogisticsServiceImpl.java index 3f91a3cd..40731cc8 100644 --- a/framework/src/main/java/cn/lili/modules/system/serviceimpl/StoreLogisticsServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/member/serviceimpl/StoreLogisticsServiceImpl.java @@ -1,9 +1,9 @@ -package cn.lili.modules.system.serviceimpl; +package cn.lili.modules.member.serviceimpl; +import cn.lili.modules.member.mapper.StoreLogisticsMapper; +import cn.lili.modules.member.service.StoreLogisticsService; import cn.lili.modules.store.entity.dos.StoreLogistics; import cn.lili.modules.system.entity.vo.StoreLogisticsVO; -import cn.lili.modules.system.mapper.StoreLogisticsMapper; -import cn.lili.modules.system.service.StoreLogisticsService; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; diff --git a/framework/src/main/java/cn/lili/modules/member/token/MemberTokenGenerate.java b/framework/src/main/java/cn/lili/modules/member/token/MemberTokenGenerate.java index 9e2b13da..79528c99 100644 --- a/framework/src/main/java/cn/lili/modules/member/token/MemberTokenGenerate.java +++ b/framework/src/main/java/cn/lili/modules/member/token/MemberTokenGenerate.java @@ -52,7 +52,7 @@ public class MemberTokenGenerate extends AbstractTokenGenerate { member.setClientEnum(clientTypeEnum.name()); memberService.updateById(member); - AuthUser authUser = new AuthUser(member.getUsername(), member.getId(),member.getNickName(), UserEnums.MEMBER); + AuthUser authUser = new AuthUser(member.getUsername(), member.getId(), member.getNickName(), member.getFace(), UserEnums.MEMBER); //登陆成功生成token return tokenUtil.createToken(username, authUser, longTerm, UserEnums.MEMBER); } diff --git a/framework/src/main/java/cn/lili/modules/member/token/StoreTokenGenerate.java b/framework/src/main/java/cn/lili/modules/member/token/StoreTokenGenerate.java index 9d10db60..a1a2c595 100644 --- a/framework/src/main/java/cn/lili/modules/member/token/StoreTokenGenerate.java +++ b/framework/src/main/java/cn/lili/modules/member/token/StoreTokenGenerate.java @@ -38,10 +38,11 @@ public class StoreTokenGenerate extends AbstractTokenGenerate { if (!member.getHaveStore()) { throw new ServiceException(ResultCode.STORE_NOT_OPEN); } - AuthUser user = new AuthUser(member.getUsername(), member.getId(), member.getNickName(), UserEnums.STORE); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(Store::getMemberId, member.getId()); Store store = storeService.getOne(queryWrapper); + AuthUser user = new AuthUser(member.getUsername(), member.getId(), member.getNickName(), store.getStoreLogo(), UserEnums.STORE); + user.setStoreId(store.getId()); user.setStoreName(store.getStoreName()); return tokenUtil.createToken(username, user, longTerm, UserEnums.STORE); diff --git a/framework/src/main/java/cn/lili/modules/message/service/ShortLinkService.java b/framework/src/main/java/cn/lili/modules/message/service/ShortLinkService.java index 3789ff56..07caf8c6 100644 --- a/framework/src/main/java/cn/lili/modules/message/service/ShortLinkService.java +++ b/framework/src/main/java/cn/lili/modules/message/service/ShortLinkService.java @@ -1,12 +1,22 @@ package cn.lili.modules.message.service; -import com.baomidou.mybatisplus.extension.service.IService; import cn.lili.modules.message.entity.dos.ShortLink; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; /** * 短链接 业务层 + * * @author Chopper */ public interface ShortLinkService extends IService { + /** + * 根据模型,查询返回的集合 + * + * @param shortLink 短链接模型 + * @return 端链接集合 + */ + List queryShortLinks(ShortLink shortLink); } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/message/serviceimpl/ShortLinkServiceImpl.java b/framework/src/main/java/cn/lili/modules/message/serviceimpl/ShortLinkServiceImpl.java index be3ed903..5d734def 100644 --- a/framework/src/main/java/cn/lili/modules/message/serviceimpl/ShortLinkServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/message/serviceimpl/ShortLinkServiceImpl.java @@ -3,16 +3,24 @@ package cn.lili.modules.message.serviceimpl; import cn.lili.modules.message.entity.dos.ShortLink; import cn.lili.modules.message.mapper.ShortLinkMapper; import cn.lili.modules.message.service.ShortLinkService; +import cn.lili.mybatis.util.PageUtil; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.List; + /** * 短链接 业务实现 + * * @author Chopper */ @Service @Transactional(rollbackFor = Exception.class) public class ShortLinkServiceImpl extends ServiceImpl implements ShortLinkService { + @Override + public List queryShortLinks(ShortLink shortLink) { + return this.list(PageUtil.initWrapper(shortLink)); + } } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/order/order/aop/AfterSaleLogPoint.java b/framework/src/main/java/cn/lili/modules/order/aftersale/aop/AfterSaleLogPoint.java similarity index 90% rename from framework/src/main/java/cn/lili/modules/order/order/aop/AfterSaleLogPoint.java rename to framework/src/main/java/cn/lili/modules/order/aftersale/aop/AfterSaleLogPoint.java index 7e3dccbe..1e6c2965 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/aop/AfterSaleLogPoint.java +++ b/framework/src/main/java/cn/lili/modules/order/aftersale/aop/AfterSaleLogPoint.java @@ -1,4 +1,4 @@ -package cn.lili.modules.order.order.aop; +package cn.lili.modules.order.aftersale.aop; import java.lang.annotation.*; diff --git a/framework/src/main/java/cn/lili/modules/order/order/aop/AfterSaleOperationLogAspect.java b/framework/src/main/java/cn/lili/modules/order/aftersale/aop/AfterSaleOperationLogAspect.java similarity index 93% rename from framework/src/main/java/cn/lili/modules/order/order/aop/AfterSaleOperationLogAspect.java rename to framework/src/main/java/cn/lili/modules/order/aftersale/aop/AfterSaleOperationLogAspect.java index 43ee90aa..263c4006 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/aop/AfterSaleOperationLogAspect.java +++ b/framework/src/main/java/cn/lili/modules/order/aftersale/aop/AfterSaleOperationLogAspect.java @@ -1,12 +1,12 @@ -package cn.lili.modules.order.order.aop; +package cn.lili.modules.order.aftersale.aop; import cn.lili.common.security.AuthUser; import cn.lili.common.security.context.UserContext; import cn.lili.common.security.enums.UserEnums; import cn.lili.common.utils.SpelUtil; import cn.lili.common.utils.ThreadPoolUtil; -import cn.lili.modules.order.order.service.AfterSaleLogService; -import cn.lili.modules.order.trade.entity.dos.AfterSaleLog; +import cn.lili.modules.order.aftersale.entity.dos.AfterSaleLog; +import cn.lili.modules.order.aftersale.service.AfterSaleLogService; import lombok.extern.slf4j.Slf4j; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.AfterReturning; @@ -32,7 +32,7 @@ public class AfterSaleOperationLogAspect { @Autowired private AfterSaleLogService afterSaleLogService; - @AfterReturning(returning = "rvt", pointcut = "@annotation(cn.lili.modules.order.order.aop.AfterSaleLogPoint)") + @AfterReturning(returning = "rvt", pointcut = "@annotation(cn.lili.modules.order.aftersale.aop.AfterSaleLogPoint)") public void afterReturning(JoinPoint joinPoint, Object rvt) { try { AuthUser auth = UserContext.getCurrentUser(); diff --git a/framework/src/main/java/cn/lili/modules/order/order/entity/dos/AfterSale.java b/framework/src/main/java/cn/lili/modules/order/aftersale/entity/dos/AfterSale.java similarity index 97% rename from framework/src/main/java/cn/lili/modules/order/order/entity/dos/AfterSale.java rename to framework/src/main/java/cn/lili/modules/order/aftersale/entity/dos/AfterSale.java index 55ddb87a..52e345b8 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/entity/dos/AfterSale.java +++ b/framework/src/main/java/cn/lili/modules/order/aftersale/entity/dos/AfterSale.java @@ -1,4 +1,4 @@ -package cn.lili.modules.order.order.entity.dos; +package cn.lili.modules.order.aftersale.entity.dos; import cn.lili.mybatis.BaseEntity; import com.baomidou.mybatisplus.annotation.TableName; @@ -142,7 +142,7 @@ public class AfterSale extends BaseEntity { private String mLogisticsName; @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") - @DateTimeFormat(pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") @ApiModelProperty(value = "买家发货时间") private Date mDeliverTime; diff --git a/framework/src/main/java/cn/lili/modules/order/trade/entity/dos/AfterSaleLog.java b/framework/src/main/java/cn/lili/modules/order/aftersale/entity/dos/AfterSaleLog.java similarity index 97% rename from framework/src/main/java/cn/lili/modules/order/trade/entity/dos/AfterSaleLog.java rename to framework/src/main/java/cn/lili/modules/order/aftersale/entity/dos/AfterSaleLog.java index 046391c7..af5bb3e1 100644 --- a/framework/src/main/java/cn/lili/modules/order/trade/entity/dos/AfterSaleLog.java +++ b/framework/src/main/java/cn/lili/modules/order/aftersale/entity/dos/AfterSaleLog.java @@ -1,4 +1,4 @@ -package cn.lili.modules.order.trade.entity.dos; +package cn.lili.modules.order.aftersale.entity.dos; import cn.lili.common.security.enums.UserEnums; import cn.lili.mybatis.BaseIdEntity; diff --git a/framework/src/main/java/cn/lili/modules/order/order/entity/dos/AfterSaleReason.java b/framework/src/main/java/cn/lili/modules/order/aftersale/entity/dos/AfterSaleReason.java similarity index 93% rename from framework/src/main/java/cn/lili/modules/order/order/entity/dos/AfterSaleReason.java rename to framework/src/main/java/cn/lili/modules/order/aftersale/entity/dos/AfterSaleReason.java index b9b0dd41..e0370f1e 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/entity/dos/AfterSaleReason.java +++ b/framework/src/main/java/cn/lili/modules/order/aftersale/entity/dos/AfterSaleReason.java @@ -1,4 +1,4 @@ -package cn.lili.modules.order.order.entity.dos; +package cn.lili.modules.order.aftersale.entity.dos; import cn.lili.mybatis.BaseEntity; import com.baomidou.mybatisplus.annotation.TableName; diff --git a/framework/src/main/java/cn/lili/modules/order/order/entity/dto/AfterSaleDTO.java b/framework/src/main/java/cn/lili/modules/order/aftersale/entity/dto/AfterSaleDTO.java similarity index 96% rename from framework/src/main/java/cn/lili/modules/order/order/entity/dto/AfterSaleDTO.java rename to framework/src/main/java/cn/lili/modules/order/aftersale/entity/dto/AfterSaleDTO.java index 20e110c7..09c39259 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/entity/dto/AfterSaleDTO.java +++ b/framework/src/main/java/cn/lili/modules/order/aftersale/entity/dto/AfterSaleDTO.java @@ -1,4 +1,4 @@ -package cn.lili.modules.order.order.entity.dto; +package cn.lili.modules.order.aftersale.entity.dto; import io.swagger.annotations.ApiModelProperty; import lombok.Data; diff --git a/framework/src/main/java/cn/lili/modules/order/order/entity/dto/AfterSalePriceDetailDTO.java b/framework/src/main/java/cn/lili/modules/order/aftersale/entity/dto/AfterSalePriceDetailDTO.java similarity index 93% rename from framework/src/main/java/cn/lili/modules/order/order/entity/dto/AfterSalePriceDetailDTO.java rename to framework/src/main/java/cn/lili/modules/order/aftersale/entity/dto/AfterSalePriceDetailDTO.java index b442dd83..f18d6bd5 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/entity/dto/AfterSalePriceDetailDTO.java +++ b/framework/src/main/java/cn/lili/modules/order/aftersale/entity/dto/AfterSalePriceDetailDTO.java @@ -1,7 +1,7 @@ -package cn.lili.modules.order.order.entity.dto; +package cn.lili.modules.order.aftersale.entity.dto; -import cn.lili.modules.promotion.entity.dto.BasePromotion; +import cn.lili.modules.promotion.entity.dos.BasePromotions; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -74,7 +74,7 @@ public class AfterSalePriceDetailDTO implements Serializable { * 参与的促销活动 */ @ApiModelProperty(value = "参与的促销活动") - private List joinPromotion; + private List joinPromotion; public AfterSalePriceDetailDTO() { diff --git a/framework/src/main/java/cn/lili/modules/order/order/entity/enums/ComplaintStatusEnum.java b/framework/src/main/java/cn/lili/modules/order/aftersale/entity/enums/ComplaintStatusEnum.java similarity index 92% rename from framework/src/main/java/cn/lili/modules/order/order/entity/enums/ComplaintStatusEnum.java rename to framework/src/main/java/cn/lili/modules/order/aftersale/entity/enums/ComplaintStatusEnum.java index 6877ec75..67d173bf 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/entity/enums/ComplaintStatusEnum.java +++ b/framework/src/main/java/cn/lili/modules/order/aftersale/entity/enums/ComplaintStatusEnum.java @@ -1,4 +1,4 @@ -package cn.lili.modules.order.order.entity.enums; +package cn.lili.modules.order.aftersale.entity.enums; /** * 交易投诉状态 diff --git a/framework/src/main/java/cn/lili/modules/order/order/entity/vo/AfterSaleAllowOperation.java b/framework/src/main/java/cn/lili/modules/order/aftersale/entity/vo/AfterSaleAllowOperation.java similarity index 94% rename from framework/src/main/java/cn/lili/modules/order/order/entity/vo/AfterSaleAllowOperation.java rename to framework/src/main/java/cn/lili/modules/order/aftersale/entity/vo/AfterSaleAllowOperation.java index b830279a..cc449ad1 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/entity/vo/AfterSaleAllowOperation.java +++ b/framework/src/main/java/cn/lili/modules/order/aftersale/entity/vo/AfterSaleAllowOperation.java @@ -1,6 +1,6 @@ -package cn.lili.modules.order.order.entity.vo; +package cn.lili.modules.order.aftersale.entity.vo; -import cn.lili.modules.order.order.entity.dos.AfterSale; +import cn.lili.modules.order.aftersale.entity.dos.AfterSale; import cn.lili.modules.order.trade.entity.enums.AfterSaleStatusEnum; import io.swagger.annotations.ApiModelProperty; import lombok.Data; diff --git a/framework/src/main/java/cn/lili/modules/order/order/entity/vo/AfterSaleApplyVO.java b/framework/src/main/java/cn/lili/modules/order/aftersale/entity/vo/AfterSaleApplyVO.java similarity index 96% rename from framework/src/main/java/cn/lili/modules/order/order/entity/vo/AfterSaleApplyVO.java rename to framework/src/main/java/cn/lili/modules/order/aftersale/entity/vo/AfterSaleApplyVO.java index 9bd5ee45..9d6577af 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/entity/vo/AfterSaleApplyVO.java +++ b/framework/src/main/java/cn/lili/modules/order/aftersale/entity/vo/AfterSaleApplyVO.java @@ -1,4 +1,4 @@ -package cn.lili.modules.order.order.entity.vo; +package cn.lili.modules.order.aftersale.entity.vo; import io.swagger.annotations.ApiModelProperty; import lombok.Data; diff --git a/framework/src/main/java/cn/lili/modules/order/order/entity/vo/AfterSaleSearchParams.java b/framework/src/main/java/cn/lili/modules/order/aftersale/entity/vo/AfterSaleSearchParams.java similarity index 67% rename from framework/src/main/java/cn/lili/modules/order/order/entity/vo/AfterSaleSearchParams.java rename to framework/src/main/java/cn/lili/modules/order/aftersale/entity/vo/AfterSaleSearchParams.java index 1da92246..66e91231 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/entity/vo/AfterSaleSearchParams.java +++ b/framework/src/main/java/cn/lili/modules/order/aftersale/entity/vo/AfterSaleSearchParams.java @@ -1,12 +1,13 @@ -package cn.lili.modules.order.order.entity.vo; +package cn.lili.modules.order.aftersale.entity.vo; +import cn.hutool.core.text.CharSequenceUtil; import cn.lili.common.security.context.UserContext; import cn.lili.common.security.enums.UserEnums; -import cn.lili.common.utils.StringUtils; import cn.lili.common.vo.PageVO; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import lombok.EqualsAndHashCode; import org.springframework.format.annotation.DateTimeFormat; import java.util.Date; @@ -17,6 +18,7 @@ import java.util.Date; * @author paulG * @since 2020/12/4 **/ +@EqualsAndHashCode(callSuper = true) @Data public class AfterSaleSearchParams extends PageVO { @@ -44,6 +46,9 @@ public class AfterSaleSearchParams extends PageVO { @ApiModelProperty(value = "实际退款金额,可以为范围,如10_1000") private String actualRefundPrice; + @ApiModelProperty(value = "总价格,可以为范围,如10_1000") + private String flowPrice; + /** * @see cn.lili.modules.order.trade.entity.enums.AfterSaleTypeEnum */ @@ -66,33 +71,33 @@ public class AfterSaleSearchParams extends PageVO { public QueryWrapper queryWrapper() { QueryWrapper queryWrapper = new QueryWrapper<>(); - if (StringUtils.isNotEmpty(sn)) { + if (CharSequenceUtil.isNotEmpty(sn)) { queryWrapper.like("sn", sn); } - if (StringUtils.isNotEmpty(orderSn)) { + if (CharSequenceUtil.isNotEmpty(orderSn)) { queryWrapper.like("order_sn", orderSn); } //按买家查询 - if (StringUtils.equals(UserContext.getCurrentUser().getRole().name(), UserEnums.MEMBER.name())) { + if (CharSequenceUtil.equals(UserContext.getCurrentUser().getRole().name(), UserEnums.MEMBER.name())) { queryWrapper.eq("member_id", UserContext.getCurrentUser().getId()); } //按卖家查询 - if (StringUtils.equals(UserContext.getCurrentUser().getRole().name(), UserEnums.STORE.name())) { + if (CharSequenceUtil.equals(UserContext.getCurrentUser().getRole().name(), UserEnums.STORE.name())) { queryWrapper.eq("store_id", UserContext.getCurrentUser().getStoreId()); } - if (StringUtils.equals(UserContext.getCurrentUser().getRole().name(), UserEnums.MANAGER.name()) - && StringUtils.isNotEmpty(storeId) + if (CharSequenceUtil.equals(UserContext.getCurrentUser().getRole().name(), UserEnums.MANAGER.name()) + && CharSequenceUtil.isNotEmpty(storeId) ) { queryWrapper.eq("store_id", storeId); } - if (StringUtils.isNotEmpty(memberName)) { + if (CharSequenceUtil.isNotEmpty(memberName)) { queryWrapper.like("member_name", memberName); } - if (StringUtils.isNotEmpty(storeName)) { + if (CharSequenceUtil.isNotEmpty(storeName)) { queryWrapper.like("store_name", storeName); } - if (StringUtils.isNotEmpty(goodsName)) { + if (CharSequenceUtil.isNotEmpty(goodsName)) { queryWrapper.like("goods_name", goodsName); } //按时间查询 @@ -102,10 +107,10 @@ public class AfterSaleSearchParams extends PageVO { if (endDate != null) { queryWrapper.le("create_time", endDate); } - if (StringUtils.isNotEmpty(serviceStatus)) { + if (CharSequenceUtil.isNotEmpty(serviceStatus)) { queryWrapper.eq("service_status", serviceStatus); } - if (StringUtils.isNotEmpty(serviceType)) { + if (CharSequenceUtil.isNotEmpty(serviceType)) { queryWrapper.eq("service_type", serviceType); } this.betweenWrapper(queryWrapper); @@ -114,20 +119,28 @@ public class AfterSaleSearchParams extends PageVO { } private void betweenWrapper(QueryWrapper queryWrapper) { - if (StringUtils.isNotEmpty(applyRefundPrice)) { + if (CharSequenceUtil.isNotEmpty(applyRefundPrice)) { String[] s = applyRefundPrice.split("_"); if (s.length > 1) { - queryWrapper.ge("apply_refund_price", s[1]); + queryWrapper.between("apply_refund_price", s[0], s[1]); } else { - queryWrapper.le("apply_refund_price", s[0]); + queryWrapper.ge("apply_refund_price", s[0]); } } - if (StringUtils.isNotEmpty(actualRefundPrice)) { + if (CharSequenceUtil.isNotEmpty(actualRefundPrice)) { String[] s = actualRefundPrice.split("_"); if (s.length > 1) { - queryWrapper.ge("actual_refund_price", s[1]); + queryWrapper.between("actual_refund_price", s[0], s[1]); } else { - queryWrapper.le("actual_refund_price", s[0]); + queryWrapper.ge("actual_refund_price", s[0]); + } + } + if (CharSequenceUtil.isNotEmpty(flowPrice)) { + String[] s = flowPrice.split("_"); + if (s.length > 1) { + queryWrapper.between("flow_price", s[0], s[1]); + } else { + queryWrapper.ge("flow_price", s[0]); } } } diff --git a/framework/src/main/java/cn/lili/modules/order/order/entity/vo/AfterSaleVO.java b/framework/src/main/java/cn/lili/modules/order/aftersale/entity/vo/AfterSaleVO.java similarity index 67% rename from framework/src/main/java/cn/lili/modules/order/order/entity/vo/AfterSaleVO.java rename to framework/src/main/java/cn/lili/modules/order/aftersale/entity/vo/AfterSaleVO.java index 4fdc10b5..28766e48 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/entity/vo/AfterSaleVO.java +++ b/framework/src/main/java/cn/lili/modules/order/aftersale/entity/vo/AfterSaleVO.java @@ -1,7 +1,6 @@ -package cn.lili.modules.order.order.entity.vo; +package cn.lili.modules.order.aftersale.entity.vo; -import cn.lili.modules.order.order.entity.dos.AfterSale; -import jdk.nashorn.internal.objects.annotations.Getter; +import cn.lili.modules.order.aftersale.entity.dos.AfterSale; import lombok.Data; /** @@ -15,7 +14,6 @@ public class AfterSaleVO extends AfterSale { /** * 初始化自身状态 */ - @Getter public AfterSaleAllowOperation getAfterSaleAllowOperationVO() { //设置订单的可操作状态 diff --git a/framework/src/main/java/cn/lili/modules/order/trade/mapper/AfterSaleLogMapper.java b/framework/src/main/java/cn/lili/modules/order/aftersale/mapper/AfterSaleLogMapper.java similarity index 66% rename from framework/src/main/java/cn/lili/modules/order/trade/mapper/AfterSaleLogMapper.java rename to framework/src/main/java/cn/lili/modules/order/aftersale/mapper/AfterSaleLogMapper.java index 4bb728e3..a1f59f19 100644 --- a/framework/src/main/java/cn/lili/modules/order/trade/mapper/AfterSaleLogMapper.java +++ b/framework/src/main/java/cn/lili/modules/order/aftersale/mapper/AfterSaleLogMapper.java @@ -1,6 +1,6 @@ -package cn.lili.modules.order.trade.mapper; +package cn.lili.modules.order.aftersale.mapper; -import cn.lili.modules.order.trade.entity.dos.AfterSaleLog; +import cn.lili.modules.order.aftersale.entity.dos.AfterSaleLog; import com.baomidou.mybatisplus.core.mapper.BaseMapper; /** diff --git a/framework/src/main/java/cn/lili/modules/order/order/mapper/AfterSaleMapper.java b/framework/src/main/java/cn/lili/modules/order/aftersale/mapper/AfterSaleMapper.java similarity index 85% rename from framework/src/main/java/cn/lili/modules/order/order/mapper/AfterSaleMapper.java rename to framework/src/main/java/cn/lili/modules/order/aftersale/mapper/AfterSaleMapper.java index 9ee2ceb3..7cad30d5 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/mapper/AfterSaleMapper.java +++ b/framework/src/main/java/cn/lili/modules/order/aftersale/mapper/AfterSaleMapper.java @@ -1,7 +1,7 @@ -package cn.lili.modules.order.order.mapper; +package cn.lili.modules.order.aftersale.mapper; -import cn.lili.modules.order.order.entity.dos.AfterSale; -import cn.lili.modules.order.order.entity.vo.AfterSaleVO; +import cn.lili.modules.order.aftersale.entity.dos.AfterSale; +import cn.lili.modules.order.aftersale.entity.vo.AfterSaleVO; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; diff --git a/framework/src/main/java/cn/lili/modules/order/order/mapper/AfterSaleReasonMapper.java b/framework/src/main/java/cn/lili/modules/order/aftersale/mapper/AfterSaleReasonMapper.java similarity index 66% rename from framework/src/main/java/cn/lili/modules/order/order/mapper/AfterSaleReasonMapper.java rename to framework/src/main/java/cn/lili/modules/order/aftersale/mapper/AfterSaleReasonMapper.java index 2cfe9d2f..a1298b83 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/mapper/AfterSaleReasonMapper.java +++ b/framework/src/main/java/cn/lili/modules/order/aftersale/mapper/AfterSaleReasonMapper.java @@ -1,6 +1,6 @@ -package cn.lili.modules.order.order.mapper; +package cn.lili.modules.order.aftersale.mapper; -import cn.lili.modules.order.order.entity.dos.AfterSaleReason; +import cn.lili.modules.order.aftersale.entity.dos.AfterSaleReason; import com.baomidou.mybatisplus.core.mapper.BaseMapper; /** diff --git a/framework/src/main/java/cn/lili/modules/order/order/service/AfterSaleLogService.java b/framework/src/main/java/cn/lili/modules/order/aftersale/service/AfterSaleLogService.java similarity index 78% rename from framework/src/main/java/cn/lili/modules/order/order/service/AfterSaleLogService.java rename to framework/src/main/java/cn/lili/modules/order/aftersale/service/AfterSaleLogService.java index a5a19a7f..dc7ddf71 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/service/AfterSaleLogService.java +++ b/framework/src/main/java/cn/lili/modules/order/aftersale/service/AfterSaleLogService.java @@ -1,6 +1,6 @@ -package cn.lili.modules.order.order.service; +package cn.lili.modules.order.aftersale.service; -import cn.lili.modules.order.trade.entity.dos.AfterSaleLog; +import cn.lili.modules.order.aftersale.entity.dos.AfterSaleLog; import com.baomidou.mybatisplus.extension.service.IService; import java.util.List; diff --git a/framework/src/main/java/cn/lili/modules/order/order/service/AfterSaleReasonService.java b/framework/src/main/java/cn/lili/modules/order/aftersale/service/AfterSaleReasonService.java similarity index 83% rename from framework/src/main/java/cn/lili/modules/order/order/service/AfterSaleReasonService.java rename to framework/src/main/java/cn/lili/modules/order/aftersale/service/AfterSaleReasonService.java index 54ae530d..eee8437e 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/service/AfterSaleReasonService.java +++ b/framework/src/main/java/cn/lili/modules/order/aftersale/service/AfterSaleReasonService.java @@ -1,6 +1,6 @@ -package cn.lili.modules.order.order.service; +package cn.lili.modules.order.aftersale.service; -import cn.lili.modules.order.order.entity.dos.AfterSaleReason; +import cn.lili.modules.order.aftersale.entity.dos.AfterSaleReason; import com.baomidou.mybatisplus.extension.service.IService; import java.util.List; diff --git a/framework/src/main/java/cn/lili/modules/order/order/service/AfterSaleService.java b/framework/src/main/java/cn/lili/modules/order/aftersale/service/AfterSaleService.java similarity index 78% rename from framework/src/main/java/cn/lili/modules/order/order/service/AfterSaleService.java rename to framework/src/main/java/cn/lili/modules/order/aftersale/service/AfterSaleService.java index 6af2ebe2..9a16a4cb 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/service/AfterSaleService.java +++ b/framework/src/main/java/cn/lili/modules/order/aftersale/service/AfterSaleService.java @@ -1,13 +1,11 @@ -package cn.lili.modules.order.order.service; +package cn.lili.modules.order.aftersale.service; -import cn.lili.common.vo.PageVO; -import cn.lili.modules.order.order.entity.dos.AfterSale; -import cn.lili.modules.order.order.entity.dto.AfterSaleDTO; -import cn.lili.modules.order.order.entity.vo.AfterSaleApplyVO; -import cn.lili.modules.order.order.entity.vo.AfterSaleSearchParams; -import cn.lili.modules.order.order.entity.vo.AfterSaleVO; -import cn.lili.modules.statistics.entity.dto.StatisticsQueryParam; +import cn.lili.modules.order.aftersale.entity.dos.AfterSale; +import cn.lili.modules.order.aftersale.entity.dto.AfterSaleDTO; +import cn.lili.modules.order.aftersale.entity.vo.AfterSaleApplyVO; +import cn.lili.modules.order.aftersale.entity.vo.AfterSaleSearchParams; +import cn.lili.modules.order.aftersale.entity.vo.AfterSaleVO; import cn.lili.modules.store.entity.dto.StoreAfterSaleAddressDTO; import cn.lili.modules.system.entity.vo.Traces; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -129,13 +127,6 @@ public interface AfterSaleService extends IService { */ AfterSale cancel(String afterSaleSn); - /** - * 获取待处理售后数量 - * - * @param serviceType 售后类型 - * @return 待处理售后数量 - */ - Integer applyNum(String serviceType); /** * 根据售后单号获取店铺退货收货地址信息 @@ -145,12 +136,4 @@ public interface AfterSaleService extends IService { */ StoreAfterSaleAddressDTO getStoreAfterSaleAddressDTO(String sn); - /** - * 获取统计的售后 - * - * @param statisticsQueryParam 统计搜索参数 - * @param pageVO 分页 - * @return 售后分页列表 - */ - IPage getStatistics(StatisticsQueryParam statisticsQueryParam, PageVO pageVO); } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/AfterSaleLogServiceImpl.java b/framework/src/main/java/cn/lili/modules/order/aftersale/serviceimpl/AfterSaleLogServiceImpl.java similarity index 76% rename from framework/src/main/java/cn/lili/modules/order/order/serviceimpl/AfterSaleLogServiceImpl.java rename to framework/src/main/java/cn/lili/modules/order/aftersale/serviceimpl/AfterSaleLogServiceImpl.java index e35fd44f..116ea608 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/AfterSaleLogServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/order/aftersale/serviceimpl/AfterSaleLogServiceImpl.java @@ -1,8 +1,8 @@ -package cn.lili.modules.order.order.serviceimpl; +package cn.lili.modules.order.aftersale.serviceimpl; -import cn.lili.modules.order.order.service.AfterSaleLogService; -import cn.lili.modules.order.trade.entity.dos.AfterSaleLog; -import cn.lili.modules.order.trade.mapper.AfterSaleLogMapper; +import cn.lili.modules.order.aftersale.entity.dos.AfterSaleLog; +import cn.lili.modules.order.aftersale.mapper.AfterSaleLogMapper; +import cn.lili.modules.order.aftersale.service.AfterSaleLogService; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; diff --git a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/AfterSaleReasonServiceImpl.java b/framework/src/main/java/cn/lili/modules/order/aftersale/serviceimpl/AfterSaleReasonServiceImpl.java similarity index 85% rename from framework/src/main/java/cn/lili/modules/order/order/serviceimpl/AfterSaleReasonServiceImpl.java rename to framework/src/main/java/cn/lili/modules/order/aftersale/serviceimpl/AfterSaleReasonServiceImpl.java index 991b38dc..df094942 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/AfterSaleReasonServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/order/aftersale/serviceimpl/AfterSaleReasonServiceImpl.java @@ -1,8 +1,8 @@ -package cn.lili.modules.order.order.serviceimpl; +package cn.lili.modules.order.aftersale.serviceimpl; -import cn.lili.modules.order.order.entity.dos.AfterSaleReason; -import cn.lili.modules.order.order.mapper.AfterSaleReasonMapper; -import cn.lili.modules.order.order.service.AfterSaleReasonService; +import cn.lili.modules.order.aftersale.entity.dos.AfterSaleReason; +import cn.lili.modules.order.aftersale.mapper.AfterSaleReasonMapper; +import cn.lili.modules.order.aftersale.service.AfterSaleReasonService; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; diff --git a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/AfterSaleServiceImpl.java b/framework/src/main/java/cn/lili/modules/order/aftersale/serviceimpl/AfterSaleServiceImpl.java similarity index 91% rename from framework/src/main/java/cn/lili/modules/order/order/serviceimpl/AfterSaleServiceImpl.java rename to framework/src/main/java/cn/lili/modules/order/aftersale/serviceimpl/AfterSaleServiceImpl.java index 9acd0f63..cf8fc853 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/AfterSaleServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/order/aftersale/serviceimpl/AfterSaleServiceImpl.java @@ -1,4 +1,4 @@ -package cn.lili.modules.order.order.serviceimpl; +package cn.lili.modules.order.aftersale.serviceimpl; import cn.hutool.core.text.CharSequenceUtil; import cn.hutool.core.util.NumberUtil; @@ -7,23 +7,25 @@ import cn.lili.common.enums.ResultCode; import cn.lili.common.exception.ServiceException; import cn.lili.common.properties.RocketmqCustomProperties; import cn.lili.common.security.AuthUser; +import cn.lili.common.security.OperationalJudgment; import cn.lili.common.security.context.UserContext; -import cn.lili.common.security.enums.UserEnums; import cn.lili.common.utils.BeanUtil; import cn.lili.common.utils.CurrencyUtil; import cn.lili.common.utils.SnowFlake; -import cn.lili.common.vo.PageVO; -import cn.lili.modules.order.order.aop.AfterSaleLogPoint; -import cn.lili.modules.order.order.entity.dos.AfterSale; +import cn.lili.modules.order.aftersale.aop.AfterSaleLogPoint; +import cn.lili.modules.order.aftersale.entity.dos.AfterSale; +import cn.lili.modules.order.aftersale.entity.dto.AfterSaleDTO; +import cn.lili.modules.order.aftersale.entity.vo.AfterSaleApplyVO; +import cn.lili.modules.order.aftersale.entity.vo.AfterSaleSearchParams; +import cn.lili.modules.order.aftersale.entity.vo.AfterSaleVO; +import cn.lili.modules.order.aftersale.mapper.AfterSaleMapper; +import cn.lili.modules.order.aftersale.service.AfterSaleService; 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.dto.AfterSaleDTO; -import cn.lili.modules.order.order.entity.enums.*; -import cn.lili.modules.order.order.entity.vo.AfterSaleApplyVO; -import cn.lili.modules.order.order.entity.vo.AfterSaleSearchParams; -import cn.lili.modules.order.order.entity.vo.AfterSaleVO; -import cn.lili.modules.order.order.mapper.AfterSaleMapper; -import cn.lili.modules.order.order.service.AfterSaleService; +import cn.lili.modules.order.order.entity.enums.OrderItemAfterSaleStatusEnum; +import cn.lili.modules.order.order.entity.enums.OrderStatusEnum; +import cn.lili.modules.order.order.entity.enums.OrderTypeEnum; +import cn.lili.modules.order.order.entity.enums.PayStatusEnum; import cn.lili.modules.order.order.service.OrderItemService; import cn.lili.modules.order.order.service.OrderService; import cn.lili.modules.order.trade.entity.enums.AfterSaleRefundWayEnum; @@ -31,15 +33,12 @@ import cn.lili.modules.order.trade.entity.enums.AfterSaleStatusEnum; import cn.lili.modules.order.trade.entity.enums.AfterSaleTypeEnum; import cn.lili.modules.payment.entity.enums.PaymentMethodEnum; import cn.lili.modules.payment.kit.RefundSupport; -import cn.lili.modules.statistics.entity.dto.StatisticsQueryParam; -import cn.lili.modules.statistics.util.StatisticsDateUtil; import cn.lili.modules.store.entity.dto.StoreAfterSaleAddressDTO; import cn.lili.modules.store.service.StoreDetailService; import cn.lili.modules.system.aspect.annotation.SystemLogPoint; import cn.lili.modules.system.entity.dos.Logistics; import cn.lili.modules.system.entity.vo.Traces; import cn.lili.modules.system.service.LogisticsService; -import cn.lili.common.security.OperationalJudgment; import cn.lili.mybatis.util.PageUtil; import cn.lili.rocketmq.RocketmqSendCallbackBuilder; import cn.lili.rocketmq.tags.AfterSaleTagsEnum; @@ -59,7 +58,6 @@ import java.util.List; import java.util.Objects; import java.util.stream.Collectors; - /** * 售后业务层实现 * @@ -192,7 +190,7 @@ public class AfterSaleServiceImpl extends ServiceImpl queryWrapper = Wrappers.lambdaQuery(); - queryWrapper.eq(AfterSale::getServiceStatus, AfterSaleStatusEnum.APPLY.name()); - queryWrapper.eq(CharSequenceUtil.isNotEmpty(serviceType), AfterSale::getServiceType, serviceType); - queryWrapper.eq(CharSequenceUtil.equals(authUser.getRole().name(), UserEnums.STORE.name()), - AfterSale::getStoreId, authUser.getStoreId()); - return this.count(queryWrapper); - } - @Override public StoreAfterSaleAddressDTO getStoreAfterSaleAddressDTO(String sn) { return storeDetailService.getStoreAfterSaleAddressDTO(OperationalJudgment.judgment(this.getBySn(sn)).getStoreId()); } - @Override - public IPage getStatistics(StatisticsQueryParam statisticsQueryParam, PageVO pageVO) { - - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - Date[] dates = StatisticsDateUtil.getDateArray(statisticsQueryParam); - queryWrapper.between(AfterSale::getCreateTime, dates[0], dates[1]); - queryWrapper.eq(CharSequenceUtil.isNotEmpty(statisticsQueryParam.getStoreId()), AfterSale::getStoreId, statisticsQueryParam.getStoreId()); - - return this.page(PageUtil.initPage(pageVO), queryWrapper); - } - /** * 创建售后 * @@ -459,7 +435,7 @@ public class AfterSaleServiceImpl extends ServiceImpl() .eq(OrderItem::getSn, orderItem.getSn()) .set(OrderItem::getAfterSaleStatus, orderItem.getAfterSaleStatus()) - .set(OrderItem::getReturnGoodsNumber,orderItem.getReturnGoodsNumber())); + .set(OrderItem::getReturnGoodsNumber, orderItem.getReturnGoodsNumber())); } } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/order/cart/entity/vo/CartSkuVO.java b/framework/src/main/java/cn/lili/modules/order/cart/entity/vo/CartSkuVO.java index f7fcd45c..59f2e7ea 100644 --- a/framework/src/main/java/cn/lili/modules/order/cart/entity/vo/CartSkuVO.java +++ b/framework/src/main/java/cn/lili/modules/order/cart/entity/vo/CartSkuVO.java @@ -3,14 +3,13 @@ package cn.lili.modules.order.cart.entity.vo; import cn.lili.modules.distribution.entity.dos.DistributionGoods; import cn.lili.modules.goods.entity.dos.GoodsSku; import cn.lili.modules.order.cart.entity.enums.CartTypeEnum; -import cn.lili.modules.promotion.entity.dos.PromotionGoods; +import cn.lili.modules.promotion.tools.PromotionTools; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.NoArgsConstructor; import java.io.Serializable; -import java.util.Date; -import java.util.List; +import java.util.Map; /** * 购物车中的产品 @@ -79,11 +78,8 @@ public class CartSkuVO extends CartBase implements Serializable { @ApiModelProperty(value = "积分购买 积分数量") private Long point; - @ApiModelProperty(value = "可参与的单品活动") - private List promotions; - - @ApiModelProperty(value = "参与促销活动更新时间(一天更新一次) 例如时间为:2020-01-01 00:00:01") - private Date updatePromotionTime; + @ApiModelProperty("商品促销活动集合,key 为 促销活动类型,value 为 促销活动实体信息 ") + private Map promotionMap; /** * @see CartTypeEnum @@ -99,13 +95,26 @@ public class CartSkuVO extends CartBase implements Serializable { this.checked = true; this.invalid = false; //默认时间为0,让系统为此商品更新缓存 - this.updatePromotionTime = new Date(0); this.errorMessage = ""; this.isShip = true; - this.purchasePrice = goodsSku.getIsPromotion() != null && goodsSku.getIsPromotion() ? goodsSku.getPromotionPrice() : goodsSku.getPrice(); + this.purchasePrice = goodsSku.getPromotionFlag() != null && goodsSku.getPromotionFlag() ? goodsSku.getPromotionPrice() : goodsSku.getPrice(); this.isFreeFreight = false; - this.utilPrice = 0D; + this.utilPrice = goodsSku.getPromotionFlag() != null && goodsSku.getPromotionFlag() ? goodsSku.getPromotionPrice() : goodsSku.getPrice(); this.setStoreId(goodsSku.getStoreId()); this.setStoreName(goodsSku.getStoreName()); } + + /** + * 在构造器里初始化促销列表,规格列表 + */ + public CartSkuVO(GoodsSku goodsSku, Map promotionMap) { + this(goodsSku); + if (promotionMap != null && !promotionMap.isEmpty()) { + this.promotionMap = promotionMap; + } + } + + public Map getPromotionMap() { + return PromotionTools.filterInvalidPromotionsMap(this.promotionMap); + } } diff --git a/framework/src/main/java/cn/lili/modules/order/cart/entity/vo/CartVO.java b/framework/src/main/java/cn/lili/modules/order/cart/entity/vo/CartVO.java index 4f60aa4a..9da4da6a 100644 --- a/framework/src/main/java/cn/lili/modules/order/cart/entity/vo/CartVO.java +++ b/framework/src/main/java/cn/lili/modules/order/cart/entity/vo/CartVO.java @@ -85,6 +85,7 @@ public class CartVO extends CartBase implements Serializable { this.setCouponList(new ArrayList<>()); this.setGiftList(new ArrayList<>()); this.setGiftCouponList(new ArrayList<>()); + this.setCanReceiveCoupon(new ArrayList<>()); this.setChecked(false); this.isFull = false; this.weight = 0d; diff --git a/framework/src/main/java/cn/lili/modules/order/cart/entity/vo/FullDiscountVO.java b/framework/src/main/java/cn/lili/modules/order/cart/entity/vo/FullDiscountVO.java index 9c9d1e91..27b061b6 100644 --- a/framework/src/main/java/cn/lili/modules/order/cart/entity/vo/FullDiscountVO.java +++ b/framework/src/main/java/cn/lili/modules/order/cart/entity/vo/FullDiscountVO.java @@ -1,10 +1,12 @@ package cn.lili.modules.order.cart.entity.vo; -import cn.lili.modules.goods.entity.dos.GoodsSku; +import cn.hutool.core.text.CharSequenceUtil; import cn.lili.modules.promotion.entity.dos.FullDiscount; import cn.lili.modules.promotion.entity.dos.PromotionGoods; import lombok.Data; import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import org.springframework.beans.BeanUtils; import java.util.List; @@ -16,44 +18,57 @@ import java.util.List; */ @EqualsAndHashCode(callSuper = true) @Data +@NoArgsConstructor public class FullDiscountVO extends FullDiscount { private static final long serialVersionUID = -2330552735874105354L; + /** * 促销关联的商品 */ private List promotionGoodsList; - /** - * 赠品信息 - */ - private GoodsSku giftSku; /** - * 参与商品,为-1则代表所有商品参加 + * 赠品skuId */ - private Integer number; + private String giftSkuId; + + /** + * 赠品名称 + */ + private String giftSkuName; + + /** + * 赠品路径 + */ + private String giftSkuThumbnail; + + + public FullDiscountVO(FullDiscount fullDiscount) { + BeanUtils.copyProperties(fullDiscount, this); + } public String notice() { StringBuilder stringBuffer = new StringBuilder(); - if (Boolean.TRUE.equals(this.getIsFullMinus())) { + if (Boolean.TRUE.equals(this.getFullMinusFlag())) { stringBuffer.append(" 减").append(this.getFullMinus()).append("元 "); } - if (Boolean.TRUE.equals(this.getIsFullRate())) { + if (Boolean.TRUE.equals(this.getFullRateFlag())) { stringBuffer.append(" 打").append(this.getFullRate()).append("折 "); } - if (Boolean.TRUE.equals(this.getIsFreeFreight())) { + if (Boolean.TRUE.equals(this.getFreeFreightFlag())) { stringBuffer.append(" 免运费 "); } - if (Boolean.TRUE.equals(this.getIsPoint())) { + if (Boolean.TRUE.equals(this.getPointFlag())) { stringBuffer.append(" 赠").append(this.getPoint()).append("积分 "); } - if (Boolean.TRUE.equals(this.getIsCoupon())) { + if (Boolean.TRUE.equals(this.getCouponFlag())) { stringBuffer.append(" 赠").append("优惠券 "); } - if (Boolean.TRUE.equals(this.getIsGift() && giftSku != null)) { - stringBuffer.append(" 赠品[").append(giftSku.getGoodsName()).append("]"); + if (Boolean.TRUE.equals(this.getGiftFlag() && CharSequenceUtil.isNotEmpty(giftSkuName))) { + stringBuffer.append(" 赠品[").append(giftSkuName).append("]"); } return stringBuffer.toString(); diff --git a/framework/src/main/java/cn/lili/modules/order/cart/render/RenderStepStatement.java b/framework/src/main/java/cn/lili/modules/order/cart/render/RenderStepStatement.java index bcbfd597..c03d1456 100644 --- a/framework/src/main/java/cn/lili/modules/order/cart/render/RenderStepStatement.java +++ b/framework/src/main/java/cn/lili/modules/order/cart/render/RenderStepStatement.java @@ -44,6 +44,7 @@ public class RenderStepStatement { public static RenderStepEnums[] checkedSingleRender = { RenderStepEnums.CHECK_DATA, RenderStepEnums.SKU_PROMOTION, + RenderStepEnums.COUPON, RenderStepEnums.SKU_FREIGHT, RenderStepEnums.CART_PRICE }; @@ -61,6 +62,22 @@ public class RenderStepStatement { RenderStepEnums.DISTRIBUTION, RenderStepEnums.PLATFORM_COMMISSION }; + + /** + * 交易创建前渲染 + * 渲染购物车 生成SN 》分销人员佣金渲染 》平台佣金渲染 + */ + public static RenderStepEnums[] pintuanTradeRender = { + RenderStepEnums.CHECK_DATA, + RenderStepEnums.SKU_PROMOTION, + RenderStepEnums.COUPON, + RenderStepEnums.SKU_FREIGHT, + RenderStepEnums.CART_PRICE, + RenderStepEnums.CART_SN, + RenderStepEnums.DISTRIBUTION, + RenderStepEnums.PLATFORM_COMMISSION + }; + /** * 交易创建前渲染 * 渲染购物车 生成SN 》分销人员佣金渲染 》平台佣金渲染 diff --git a/framework/src/main/java/cn/lili/modules/order/cart/render/TradeBuilder.java b/framework/src/main/java/cn/lili/modules/order/cart/render/TradeBuilder.java index dd15fbb8..b67959f7 100644 --- a/framework/src/main/java/cn/lili/modules/order/cart/render/TradeBuilder.java +++ b/framework/src/main/java/cn/lili/modules/order/cart/render/TradeBuilder.java @@ -71,6 +71,8 @@ public class TradeBuilder { //需要对购物车渲染 if (isSingle(checkedWay)) { renderCartBySteps(tradeDTO, RenderStepStatement.checkedSingleRender); + } else if (checkedWay.equals(CartTypeEnum.PINTUAN)) { + renderCartBySteps(tradeDTO, RenderStepStatement.pintuanTradeRender); } else { renderCartBySteps(tradeDTO, RenderStepStatement.checkedRender); } @@ -93,7 +95,9 @@ public class TradeBuilder { //需要对购物车渲染 if (isSingle(checkedWay)) { renderCartBySteps(tradeDTO, RenderStepStatement.singleTradeRender); - } else { + } else if (checkedWay.equals(CartTypeEnum.PINTUAN)) { + renderCartBySteps(tradeDTO, RenderStepStatement.pintuanTradeRender); + } else { renderCartBySteps(tradeDTO, RenderStepStatement.tradeRender); } @@ -110,7 +114,7 @@ public class TradeBuilder { private boolean isSingle(CartTypeEnum checkedWay) { //拼团 积分 砍价商品 - return (checkedWay.equals(CartTypeEnum.PINTUAN) || checkedWay.equals(CartTypeEnum.POINTS) || checkedWay.equals(CartTypeEnum.KANJIA)); + return (checkedWay.equals(CartTypeEnum.POINTS) || checkedWay.equals(CartTypeEnum.KANJIA)); } /** diff --git a/framework/src/main/java/cn/lili/modules/order/cart/render/impl/CheckDataRender.java b/framework/src/main/java/cn/lili/modules/order/cart/render/impl/CheckDataRender.java index a6aa65b0..8012158f 100644 --- a/framework/src/main/java/cn/lili/modules/order/cart/render/impl/CheckDataRender.java +++ b/framework/src/main/java/cn/lili/modules/order/cart/render/impl/CheckDataRender.java @@ -1,6 +1,8 @@ package cn.lili.modules.order.cart.render.impl; import cn.hutool.core.text.CharSequenceUtil; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; import cn.lili.common.enums.PromotionTypeEnum; import cn.lili.common.enums.ResultCode; import cn.lili.common.exception.ServiceException; @@ -20,11 +22,11 @@ import cn.lili.modules.order.cart.entity.vo.CartVO; import cn.lili.modules.order.cart.render.CartRenderStep; import cn.lili.modules.order.order.entity.dos.Order; import cn.lili.modules.order.order.service.OrderService; +import cn.lili.modules.promotion.entity.dos.Coupon; import cn.lili.modules.promotion.entity.dos.Pintuan; -import cn.lili.modules.promotion.entity.dos.PromotionGoods; -import cn.lili.modules.promotion.entity.vos.PointsGoodsVO; -import cn.lili.modules.promotion.service.PintuanService; -import cn.lili.modules.promotion.service.PointsGoodsService; +import cn.lili.modules.promotion.entity.dos.PointsGoods; +import cn.lili.modules.promotion.entity.vos.CouponVO; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -41,6 +43,7 @@ import java.util.stream.Collectors; * @since 2020-07-02 14:47 */ @Service +@Slf4j public class CheckDataRender implements CartRenderStep { @Autowired @@ -49,15 +52,9 @@ public class CheckDataRender implements CartRenderStep { @Autowired private OrderService orderService; - @Autowired - private PintuanService pintuanService; - @Autowired private MemberService memberService; - @Autowired - private PointsGoodsService pointsGoodsService; - @Override public RenderStepEnums step() { @@ -80,14 +77,14 @@ public class CheckDataRender implements CartRenderStep { /** * 校验商品属性 * - * @param tradeDTO + * @param tradeDTO 购物车视图 */ private void checkData(TradeDTO tradeDTO) { //循环购物车中的商品 for (CartSkuVO cartSkuVO : tradeDTO.getSkuList()) { //如果失效,确认sku为未选中状态 - if (cartSkuVO.getInvalid()) { + if (Boolean.TRUE.equals(cartSkuVO.getInvalid())) { //设置购物车未选中 cartSkuVO.setChecked(false); } @@ -105,7 +102,7 @@ public class CheckDataRender implements CartRenderStep { continue; } //商品上架状态判定 - if (!GoodsAuthEnum.PASS.name().equals(dataSku.getIsAuth()) || !GoodsStatusEnum.UPPER.name().equals(dataSku.getMarketEnable())) { + if (!GoodsAuthEnum.PASS.name().equals(dataSku.getAuthFlag()) || !GoodsStatusEnum.UPPER.name().equals(dataSku.getMarketEnable())) { //设置购物车未选中 cartSkuVO.setChecked(false); //设置购物车此sku商品已失效 @@ -134,7 +131,7 @@ public class CheckDataRender implements CartRenderStep { List cartList = new ArrayList<>(); //根据店铺分组 - Map> storeCollect = tradeDTO.getSkuList().parallelStream().collect(Collectors.groupingBy(CartSkuVO::getStoreId)); + Map> storeCollect = tradeDTO.getSkuList().stream().collect(Collectors.groupingBy(CartSkuVO::getStoreId)); for (Map.Entry> storeCart : storeCollect.entrySet()) { if (!storeCart.getValue().isEmpty()) { CartVO cartVO = new CartVO(storeCart.getValue().get(0)); @@ -142,6 +139,18 @@ public class CheckDataRender implements CartRenderStep { cartVO.setDeliveryMethod(DeliveryMethodEnum.LOGISTICS.name()); } cartVO.setSkuList(storeCart.getValue()); + try { + //筛选属于当前店铺的优惠券 + storeCart.getValue().forEach(i -> i.getPromotionMap().forEach((key, value) -> { + JSONObject promotionsObj = JSONUtil.parseObj(value); + Coupon coupon = JSONUtil.toBean(promotionsObj, Coupon.class); + if (key.contains(PromotionTypeEnum.COUPON.name()) && coupon.getStoreId().equals(storeCart.getKey())) { + cartVO.getCanReceiveCoupon().add(new CouponVO(coupon)); + } + })); + } catch (Exception e) { + log.error("筛选属于当前店铺的优惠券发生异常!", e); + } storeCart.getValue().stream().filter(i -> Boolean.TRUE.equals(i.getChecked())).findFirst().ifPresent(cartSkuVO -> cartVO.setChecked(true)); cartList.add(cartVO); } @@ -170,28 +179,35 @@ public class CheckDataRender implements CartRenderStep { } } //判断拼团商品的限购数量 - Optional pintuanId = tradeDTO.getSkuList().get(0).getPromotions().stream().filter(i -> i.getPromotionType().equals(PromotionTypeEnum.PINTUAN.name())).map(PromotionGoods::getPromotionId).findFirst(); - if (pintuanId.isPresent()) { - Pintuan pintuan = pintuanService.getPintuanById(pintuanId.get()); - Integer limitNum = pintuan.getLimitNum(); - for (CartSkuVO cartSkuVO : tradeDTO.getSkuList()) { - if (limitNum != 0 && cartSkuVO.getNum() > limitNum) { - throw new ServiceException(ResultCode.PINTUAN_LIMIT_NUM_ERROR); + if (tradeDTO.getSkuList().get(0).getPromotionMap() != null && !tradeDTO.getSkuList().get(0).getPromotionMap().isEmpty()) { + Optional> pintuanPromotions = tradeDTO.getSkuList().get(0).getPromotionMap().entrySet().stream().filter(i -> i.getKey().contains(PromotionTypeEnum.PINTUAN.name())).findFirst(); + if (pintuanPromotions.isPresent()) { + JSONObject promotionsObj = JSONUtil.parseObj(pintuanPromotions.get().getValue()); + Pintuan pintuan = promotionsObj.toBean(Pintuan.class); + Integer limitNum = pintuan.getLimitNum(); + for (CartSkuVO cartSkuVO : tradeDTO.getSkuList()) { + if (limitNum != 0 && cartSkuVO.getNum() > limitNum) { + throw new ServiceException(ResultCode.PINTUAN_LIMIT_NUM_ERROR); + } } } } //积分商品,判断用户积分是否满足 - } else if (tradeDTO.getCartTypeEnum().equals(CartTypeEnum.POINTS)) { - String skuId = tradeDTO.getSkuList().get(0).getGoodsSku().getId(); + } else if (tradeDTO.getCartTypeEnum().equals(CartTypeEnum.POINTS) && tradeDTO.getSkuList().get(0).getPromotionMap() != null && !tradeDTO.getSkuList().get(0).getPromotionMap().isEmpty()) { //获取积分商品VO - PointsGoodsVO pointsGoodsVO = pointsGoodsService.getPointsGoodsVOByMongo(skuId); - if (pointsGoodsVO == null) { - throw new ServiceException(ResultCode.POINT_GOODS_ERROR); - } - Member member = memberService.getUserInfo(); - if (member.getPoint() < pointsGoodsVO.getPoints()) { - throw new ServiceException(ResultCode.USER_POINTS_ERROR); + Optional> pointsPromotions = tradeDTO.getSkuList().get(0).getPromotionMap().entrySet().stream().filter(i -> i.getKey().contains(PromotionTypeEnum.POINTS_GOODS.name())).findFirst(); + if (pointsPromotions.isPresent()) { + JSONObject promotionsObj = JSONUtil.parseObj(pointsPromotions.get().getValue()); + PointsGoods pointsGoods = promotionsObj.toBean(PointsGoods.class); + if (pointsGoods == null) { + throw new ServiceException(ResultCode.POINT_GOODS_ERROR); + } + Member member = memberService.getUserInfo(); + if (member.getPoint() < pointsGoods.getPoints()) { + throw new ServiceException(ResultCode.USER_POINTS_ERROR); + } } + } } diff --git a/framework/src/main/java/cn/lili/modules/order/cart/render/impl/CheckedFilterRender.java b/framework/src/main/java/cn/lili/modules/order/cart/render/impl/CheckedFilterRender.java index 8c9bcda7..6c05a303 100644 --- a/framework/src/main/java/cn/lili/modules/order/cart/render/impl/CheckedFilterRender.java +++ b/framework/src/main/java/cn/lili/modules/order/cart/render/impl/CheckedFilterRender.java @@ -28,7 +28,7 @@ public class CheckedFilterRender implements CartRenderStep { @Override public void render(TradeDTO tradeDTO) { //将购物车到sku未选择信息过滤 - List collect = tradeDTO.getSkuList().parallelStream().filter(i -> Boolean.TRUE.equals(i.getChecked())).collect(Collectors.toList()); + List collect = tradeDTO.getSkuList().stream().filter(i -> Boolean.TRUE.equals(i.getChecked())).collect(Collectors.toList()); tradeDTO.setSkuList(collect); //购物车信息过滤 diff --git a/framework/src/main/java/cn/lili/modules/order/cart/render/impl/CommissionRender.java b/framework/src/main/java/cn/lili/modules/order/cart/render/impl/CommissionRender.java index 21520c5b..4df13428 100644 --- a/framework/src/main/java/cn/lili/modules/order/cart/render/impl/CommissionRender.java +++ b/framework/src/main/java/cn/lili/modules/order/cart/render/impl/CommissionRender.java @@ -1,6 +1,9 @@ package cn.lili.modules.order.cart.render.impl; -import cn.hutool.core.util.StrUtil; +import cn.hutool.core.text.CharSequenceUtil; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; +import cn.lili.common.enums.PromotionTypeEnum; import cn.lili.modules.goods.service.CategoryService; import cn.lili.modules.order.cart.entity.dto.TradeDTO; import cn.lili.modules.order.cart.entity.enums.CartTypeEnum; @@ -9,14 +12,14 @@ import cn.lili.modules.order.cart.entity.vo.CartSkuVO; import cn.lili.modules.order.cart.entity.vo.CartVO; import cn.lili.modules.order.cart.render.CartRenderStep; import cn.lili.modules.order.order.entity.dto.PriceDetailDTO; -import cn.lili.modules.promotion.entity.dto.KanjiaActivityGoodsDTO; -import cn.lili.modules.promotion.entity.vos.PointsGoodsVO; -import cn.lili.modules.promotion.service.KanjiaActivityGoodsService; -import cn.lili.modules.promotion.service.PointsGoodsService; +import cn.lili.modules.promotion.entity.dos.KanjiaActivityGoods; +import cn.lili.modules.promotion.entity.dos.PointsGoods; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; +import java.util.Map; +import java.util.Optional; /** * 佣金计算 @@ -33,16 +36,6 @@ public class CommissionRender implements CartRenderStep { */ @Autowired private CategoryService categoryService; - /** - * 积分商品 - */ - @Autowired - private PointsGoodsService pointsGoodsService; - /** - * 砍价商品 - */ - @Autowired - private KanjiaActivityGoodsService kanjiaActivityGoodsService; @Override public RenderStepEnums step() { @@ -72,20 +65,28 @@ public class CommissionRender implements CartRenderStep { //平台佣金根据分类计算 String categoryId = cartSkuVO.getGoodsSku().getCategoryPath() .substring(cartSkuVO.getGoodsSku().getCategoryPath().lastIndexOf(",") + 1); - if (StrUtil.isNotEmpty(categoryId)) { + if (CharSequenceUtil.isNotEmpty(categoryId)) { Double commissionRate = categoryService.getById(categoryId).getCommissionRate(); priceDetailDTO.setPlatFormCommissionPoint(commissionRate); } //如果积分订单 积分订单,单独操作订单结算金额和商家结算字段 - if (tradeDTO.getCartTypeEnum().equals(CartTypeEnum.POINTS)) { - PointsGoodsVO pointsGoodsVO = pointsGoodsService.getPointsGoodsVOByMongo(cartSkuVO.getGoodsSku().getId()); - priceDetailDTO.setSettlementPrice(pointsGoodsVO.getSettlementPrice()); + if (tradeDTO.getCartTypeEnum().equals(CartTypeEnum.POINTS) && tradeDTO.getSkuList().get(0).getPromotionMap() != null && !tradeDTO.getSkuList().get(0).getPromotionMap().isEmpty()) { + Optional> pointsPromotions = tradeDTO.getSkuList().get(0).getPromotionMap().entrySet().stream().filter(i -> i.getKey().contains(PromotionTypeEnum.POINTS_GOODS.name())).findFirst(); + if (pointsPromotions.isPresent()) { + JSONObject promotionsObj = JSONUtil.parseObj(pointsPromotions.get().getValue()); + PointsGoods pointsGoods = JSONUtil.toBean(promotionsObj, PointsGoods.class); + priceDetailDTO.setSettlementPrice(pointsGoods.getSettlementPrice()); + } } //如果砍价订单 计算金额,单独操作订单结算金额和商家结算字段 - else if (tradeDTO.getCartTypeEnum().equals(CartTypeEnum.KANJIA)) { - KanjiaActivityGoodsDTO kanjiaActivityGoodsDTO = kanjiaActivityGoodsService.getKanJiaGoodsBySku(cartSkuVO.getGoodsSku().getId()); - priceDetailDTO.setSettlementPrice(kanjiaActivityGoodsDTO.getSettlementPrice()); + else if (tradeDTO.getCartTypeEnum().equals(CartTypeEnum.KANJIA) && tradeDTO.getSkuList().get(0).getPromotionMap() != null && !tradeDTO.getSkuList().get(0).getPromotionMap().isEmpty()) { + Optional> kanjiaPromotions = tradeDTO.getSkuList().get(0).getPromotionMap().entrySet().stream().filter(i -> i.getKey().contains(PromotionTypeEnum.KANJIA.name())).findFirst(); + if (kanjiaPromotions.isPresent()) { + JSONObject promotionsObj = JSONUtil.parseObj(kanjiaPromotions.get().getValue()); + KanjiaActivityGoods kanjiaActivityGoods = JSONUtil.toBean(promotionsObj, KanjiaActivityGoods.class); + priceDetailDTO.setSettlementPrice(kanjiaActivityGoods.getSettlementPrice()); + } } } } diff --git a/framework/src/main/java/cn/lili/modules/order/cart/render/impl/CouponRender.java b/framework/src/main/java/cn/lili/modules/order/cart/render/impl/CouponRender.java index ad833422..0157b7bc 100644 --- a/framework/src/main/java/cn/lili/modules/order/cart/render/impl/CouponRender.java +++ b/framework/src/main/java/cn/lili/modules/order/cart/render/impl/CouponRender.java @@ -2,6 +2,7 @@ package cn.lili.modules.order.cart.render.impl; import cn.hutool.core.text.CharSequenceUtil; import cn.lili.common.enums.PromotionTypeEnum; +import cn.lili.common.security.context.UserContext; import cn.lili.common.utils.CurrencyUtil; import cn.lili.common.utils.StringUtils; import cn.lili.modules.order.cart.entity.dto.MemberCouponDTO; @@ -12,8 +13,11 @@ import cn.lili.modules.order.cart.render.CartRenderStep; import cn.lili.modules.order.cart.render.util.PromotionPriceUtil; import cn.lili.modules.order.order.entity.dto.PriceDetailDTO; import cn.lili.modules.promotion.entity.dos.MemberCoupon; -import cn.lili.modules.promotion.entity.enums.CouponScopeTypeEnum; +import cn.lili.modules.promotion.entity.dto.search.MemberCouponSearchParams; import cn.lili.modules.promotion.entity.enums.CouponTypeEnum; +import cn.lili.modules.promotion.entity.enums.MemberCouponStatusEnum; +import cn.lili.modules.promotion.entity.enums.PromotionsScopeTypeEnum; +import cn.lili.modules.promotion.entity.enums.PromotionsStatusEnum; import cn.lili.modules.promotion.entity.vos.MemberCouponVO; import cn.lili.modules.promotion.service.MemberCouponService; import org.springframework.beans.factory.annotation.Autowired; @@ -60,7 +64,11 @@ public class CouponRender implements CartRenderStep { * @param tradeDTO 交易dto */ private void renderCouponRule(TradeDTO tradeDTO) { - List memberCouponList = memberCouponService.getMemberCoupons(); + MemberCouponSearchParams searchParams = new MemberCouponSearchParams(); + searchParams.setMemberId(UserContext.getCurrentUser().getId()); + searchParams.setMemberCouponStatus(MemberCouponStatusEnum.NEW.name()); + searchParams.setPromotionStatus(PromotionsStatusEnum.START.name()); + List memberCouponList = memberCouponService.getMemberCoupons(searchParams); if (!memberCouponList.isEmpty()) { this.checkMemberExistCoupon(tradeDTO, memberCouponList); @@ -79,14 +87,14 @@ public class CouponRender implements CartRenderStep { */ private void checkMemberExistCoupon(TradeDTO tradeDTO, List memberCouponList) { if (tradeDTO.getPlatformCoupon() != null && tradeDTO.getPlatformCoupon().getMemberCoupon() != null) { - boolean b = memberCouponList.parallelStream().anyMatch(i -> i.getId().equals(tradeDTO.getPlatformCoupon().getMemberCoupon().getId())); + boolean b = memberCouponList.stream().anyMatch(i -> i.getId().equals(tradeDTO.getPlatformCoupon().getMemberCoupon().getId())); if (!b) { tradeDTO.setPlatformCoupon(null); } } if (!tradeDTO.getStoreCoupons().isEmpty()) { for (Map.Entry entry : tradeDTO.getStoreCoupons().entrySet()) { - if (entry.getValue().getMemberCoupon() != null && memberCouponList.parallelStream().noneMatch(i -> i.getId().equals(entry.getValue().getMemberCoupon().getId()))) { + if (entry.getValue().getMemberCoupon() != null && memberCouponList.stream().noneMatch(i -> i.getId().equals(entry.getValue().getMemberCoupon().getId()))) { tradeDTO.getStoreCoupons().remove(entry.getKey()); } } @@ -138,7 +146,7 @@ public class CouponRender implements CartRenderStep { List filterSku; //平台店铺过滤 - if (Boolean.TRUE.equals(memberCoupon.getIsPlatform())) { + if (Boolean.TRUE.equals(memberCoupon.getPlatformFlag())) { filterSku = cartSkuVOS; } else { filterSku = cartSkuVOS.stream().filter(cartSkuVO -> cartSkuVO.getStoreId().equals(memberCoupon.getStoreId())).collect(Collectors.toList()); @@ -147,7 +155,7 @@ public class CouponRender implements CartRenderStep { return Collections.emptyList(); } //优惠券类型判定 - switch (CouponScopeTypeEnum.valueOf(memberCoupon.getScopeType())) { + switch (PromotionsScopeTypeEnum.valueOf(memberCoupon.getScopeType())) { case ALL: return filterSku; case PORTION_GOODS: @@ -263,10 +271,10 @@ public class CouponRender implements CartRenderStep { private void renderCouponPrice(Map couponMap, TradeDTO tradeDTO, MemberCoupon coupon, MemberCouponDTO memberCouponDTO) { //分发优惠券 promotionPriceUtil.recountPrice(tradeDTO, memberCouponDTO.getSkuDetail(), memberCouponDTO.getMemberCoupon().getPrice(), - Boolean.TRUE.equals(coupon.getIsPlatform()) ? + Boolean.TRUE.equals(coupon.getPlatformFlag()) ? PromotionTypeEnum.PLATFORM_COUPON : PromotionTypeEnum.COUPON); //如果是平台券 则需要计算商家承担比例 - if (Boolean.TRUE.equals(coupon.getIsPlatform()) && coupon.getStoreCommission() > 0) { + if (Boolean.TRUE.equals(coupon.getPlatformFlag()) && coupon.getStoreCommission() > 0) { //循环所有优惠券 for (String skuId : couponMap.keySet()) { @@ -306,7 +314,7 @@ public class CouponRender implements CartRenderStep { CurrencyUtil.sub(1, CurrencyUtil.div(coupon.getDiscount(), 10, 3))); //平台券则写入店铺承担优惠券比例 - if (Boolean.TRUE.equals(coupon.getIsPlatform())) { + if (Boolean.TRUE.equals(coupon.getPlatformFlag())) { priceDetailDTO.setSiteCouponPrice(discountCouponPrice); priceDetailDTO.setSiteCouponPoint(coupon.getStoreCommission()); } diff --git a/framework/src/main/java/cn/lili/modules/order/cart/render/impl/DistributionPriceRender.java b/framework/src/main/java/cn/lili/modules/order/cart/render/impl/DistributionPriceRender.java index ce8ca66f..a1a96cae 100644 --- a/framework/src/main/java/cn/lili/modules/order/cart/render/impl/DistributionPriceRender.java +++ b/framework/src/main/java/cn/lili/modules/order/cart/render/impl/DistributionPriceRender.java @@ -63,14 +63,12 @@ public class DistributionPriceRender implements CartRenderStep { }).collect(Collectors.toList()); //是否包含分销商品 List distributionGoods = distributionGoodsService.distributionGoods(skuIds); - if (distributionGoods != null && distributionGoods.size() > 0) { - distributionGoods.forEach(dg -> { - tradeDTO.getCheckedSkuList().forEach(cartSkuVO -> { - if (cartSkuVO.getGoodsSku().getId().equals(dg.getSkuId())) { - cartSkuVO.setDistributionGoods(dg); - } - }); - }); + if (distributionGoods != null && !distributionGoods.isEmpty()) { + distributionGoods.forEach(dg -> tradeDTO.getCheckedSkuList().forEach(cartSkuVO -> { + if (cartSkuVO.getGoodsSku().getId().equals(dg.getSkuId())) { + cartSkuVO.setDistributionGoods(dg); + } + })); } for (CartSkuVO cartSkuVO : tradeDTO.getCheckedSkuList()) { diff --git a/framework/src/main/java/cn/lili/modules/order/cart/render/impl/FullDiscountRender.java b/framework/src/main/java/cn/lili/modules/order/cart/render/impl/FullDiscountRender.java index 5feb58e9..a20ec4e3 100644 --- a/framework/src/main/java/cn/lili/modules/order/cart/render/impl/FullDiscountRender.java +++ b/framework/src/main/java/cn/lili/modules/order/cart/render/impl/FullDiscountRender.java @@ -1,5 +1,7 @@ package cn.lili.modules.order.cart.render.impl; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; import cn.lili.common.enums.PromotionTypeEnum; import cn.lili.common.utils.CurrencyUtil; import cn.lili.modules.goods.entity.dos.GoodsSku; @@ -12,8 +14,7 @@ import cn.lili.modules.order.cart.entity.vo.FullDiscountVO; import cn.lili.modules.order.cart.render.CartRenderStep; import cn.lili.modules.order.cart.render.util.PromotionPriceUtil; import cn.lili.modules.order.order.entity.dto.PriceDetailDTO; -import cn.lili.modules.promotion.entity.dos.PromotionGoods; -import cn.lili.modules.promotion.service.FullDiscountService; +import cn.lili.modules.promotion.entity.dos.FullDiscount; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -29,9 +30,6 @@ import java.util.stream.Collectors; @Service public class FullDiscountRender implements CartRenderStep { - @Autowired - private FullDiscountService fullDiscountService; - @Autowired private PromotionPriceUtil promotionPriceUtil; @@ -46,39 +44,37 @@ public class FullDiscountRender implements CartRenderStep { @Override public void render(TradeDTO tradeDTO) { - //店铺集合 List cartList = tradeDTO.getCartList(); + //循环店铺购物车 + for (CartVO cart : cartList) { + List fullDiscountSkuList = cart.getSkuList().stream() + .filter(i -> i.getPromotionMap() != null && !i.getPromotionMap().isEmpty() && i.getPromotionMap().keySet().stream().anyMatch(j -> j.contains(PromotionTypeEnum.FULL_DISCOUNT.name()))) + .collect(Collectors.toList()); - //店铺id集合 - List storeIds = tradeDTO.getCartList().stream().map(CartVO::getStoreId).collect(Collectors.toList()); - //获取当前店铺进行到满减活动 - List fullDiscounts = fullDiscountService.currentPromotion(storeIds); - if (fullDiscounts == null || fullDiscounts.size() == 0) { - return; - } + if (!fullDiscountSkuList.isEmpty()) { + Optional> fullDiscountOptional = fullDiscountSkuList.get(0).getPromotionMap().entrySet().stream().filter(i -> i.getKey().contains(PromotionTypeEnum.FULL_DISCOUNT.name())).findFirst(); - //循环满减信息 - for (FullDiscountVO fullDiscount : fullDiscounts) { - //判定参与活动的商品 全品类参与或者部分商品参与,则进行云散 - if (fullDiscount.getNumber() == -1 || fullDiscount.getPromotionGoodsList() != null) { - //循环店铺购物车 - for (CartVO cart : cartList) { - //如果购物车中的店铺id与活动店铺id相等,则进行促销计算 - if (fullDiscount.getStoreId().equals(cart.getStoreId())) { + if (fullDiscountOptional.isPresent()) { + JSONObject promotionsObj = JSONUtil.parseObj(fullDiscountOptional.get().getValue()); + FullDiscount fullDiscount = promotionsObj.toBean(FullDiscount.class); + FullDiscountVO fullDiscountVO = new FullDiscountVO(fullDiscount); - //如果有赠品,则将赠品信息写入 - if (fullDiscount.getIsGift()) { - GoodsSku goodsSku = goodsSkuService.getGoodsSkuByIdFromCache(fullDiscount.getGiftId()); - fullDiscount.setGiftSku(goodsSku); - } + //如果有赠品,则将赠品信息写入 + if (Boolean.TRUE.equals(fullDiscount.getGiftFlag())) { + GoodsSku goodsSku = goodsSkuService.getGoodsSkuByIdFromCache(fullDiscount.getGiftId()); + fullDiscountVO.setGiftSkuId(fullDiscount.getGiftId()); + fullDiscountVO.setGiftSkuName(goodsSku.getGoodsName()); + } - //写入满减活动 - cart.setFullDiscount(fullDiscount); - Map skuPriceDetail; - //参与活动的sku判定 - skuPriceDetail = initFullDiscountGoods(fullDiscount, cart.getCheckedSkuList()); + //写入满减活动 + cart.setFullDiscount(fullDiscountVO); + Map skuPriceDetail = new HashMap<>(16); + for (CartSkuVO cartSkuVO : cart.getSkuList()) { + skuPriceDetail.put(cartSkuVO.getGoodsSku().getId(), cartSkuVO.getPriceDetailDTO().getGoodsPrice()); + } + if (!skuPriceDetail.isEmpty()) { //记录参与满减活动的sku cart.setFullDiscountSkuIds(new ArrayList<>(skuPriceDetail.keySet())); @@ -87,20 +83,20 @@ public class FullDiscountRender implements CartRenderStep { if (isFull(countPrice, cart)) { //如果减现金 - if (fullDiscount.getIsFullMinus()) { + if (Boolean.TRUE.equals(fullDiscount.getFullMinusFlag())) { promotionPriceUtil.recountPrice(tradeDTO, skuPriceDetail, fullDiscount.getFullMinus(), PromotionTypeEnum.FULL_DISCOUNT); } //打折 - else if (fullDiscount.getIsFullRate()) { + else if (Boolean.TRUE.equals(fullDiscount.getFullRateFlag())) { this.renderFullRate(cart, skuPriceDetail, CurrencyUtil.div(fullDiscount.getFullRate(), 10)); } //渲染满优惠 renderFullMinus(cart); } } - } } + } } @@ -113,9 +109,7 @@ public class FullDiscountRender implements CartRenderStep { */ private void renderFullRate(CartVO cart, Map skuPriceDetail, Double rate) { - List cartSkuVOS = cart.getCheckedSkuList().stream().filter(cartSkuVO -> { - return skuPriceDetail.containsKey(cartSkuVO.getGoodsSku().getId()); - }).collect(Collectors.toList()); + List cartSkuVOS = cart.getCheckedSkuList().stream().filter(cartSkuVO -> skuPriceDetail.containsKey(cartSkuVO.getGoodsSku().getId())).collect(Collectors.toList()); // 循环计算扣减金额 cartSkuVOS.forEach(cartSkuVO -> { @@ -134,36 +128,6 @@ public class FullDiscountRender implements CartRenderStep { } - /** - * 获取参与满优惠的商品id - * - * @param fullDiscount 满优惠信息 - * @param cartSkuVOS 购物车商品sku信息 - * @return 参与满优惠的商品id - */ - public Map initFullDiscountGoods(FullDiscountVO fullDiscount, List cartSkuVOS) { - Map skuPriceDetail = new HashMap<>(16); - - //全品类参与 - if (fullDiscount.getNumber() == -1) { - for (CartSkuVO cartSkuVO : cartSkuVOS) { - skuPriceDetail.put(cartSkuVO.getGoodsSku().getId(), cartSkuVO.getPriceDetailDTO().getGoodsPrice()); - } - } else { - //判定参与活动的商品 - for (PromotionGoods promotionGoods : fullDiscount.getPromotionGoodsList()) { - //sku 集合判定 - for (CartSkuVO cartSkuVO : cartSkuVOS) { - // 如果参加满减,并且购物车选中状态 ,则记录商品sku - if (cartSkuVO.getChecked() && cartSkuVO.getGoodsSku().getId().equals(promotionGoods.getSkuId())) { - skuPriceDetail.put(cartSkuVO.getGoodsSku().getId(), cartSkuVO.getPriceDetailDTO().getGoodsPrice()); - } - } - } - } - return skuPriceDetail; - } - /** * 渲染满减优惠 * @@ -173,17 +137,17 @@ public class FullDiscountRender implements CartRenderStep { //获取参与活动的商品总价 FullDiscountVO fullDiscount = cartVO.getFullDiscount(); - if (fullDiscount.getIsCoupon()) { + if (Boolean.TRUE.equals(fullDiscount.getCouponFlag())) { cartVO.getGiftCouponList().add(fullDiscount.getCouponId()); } - if (fullDiscount.getIsGift()) { + if (Boolean.TRUE.equals(fullDiscount.getGiftFlag())) { cartVO.setGiftList(Arrays.asList(fullDiscount.getGiftId().split(","))); } - if (fullDiscount.getIsPoint()) { + if (Boolean.TRUE.equals(fullDiscount.getPointFlag())) { cartVO.setGiftPoint(fullDiscount.getPoint()); } //如果满足,判定是否免邮,免邮的话需要渲染一边sku - if (fullDiscount.getIsFreeFreight()) { + if (Boolean.TRUE.equals(fullDiscount.getFreeFreightFlag())) { for (CartSkuVO skuVO : cartVO.getCheckedSkuList()) { skuVO.setIsFreeFreight(true); } @@ -214,7 +178,7 @@ public class FullDiscountRender implements CartRenderStep { * @return 总价 */ private Double countPrice(Map skuPriceMap) { - Double count = 0d; + double count = 0d; for (Double price : skuPriceMap.values()) { count = CurrencyUtil.add(count, price); diff --git a/framework/src/main/java/cn/lili/modules/order/cart/render/impl/SkuPromotionRender.java b/framework/src/main/java/cn/lili/modules/order/cart/render/impl/SkuPromotionRender.java index 8ca43505..cfcfe37b 100644 --- a/framework/src/main/java/cn/lili/modules/order/cart/render/impl/SkuPromotionRender.java +++ b/framework/src/main/java/cn/lili/modules/order/cart/render/impl/SkuPromotionRender.java @@ -1,24 +1,31 @@ package cn.lili.modules.order.cart.render.impl; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; import cn.lili.common.enums.PromotionTypeEnum; +import cn.lili.common.enums.ResultCode; +import cn.lili.common.exception.ServiceException; import cn.lili.common.security.context.UserContext; import cn.lili.common.utils.CurrencyUtil; +import cn.lili.modules.member.entity.dos.Member; +import cn.lili.modules.member.service.MemberService; import cn.lili.modules.order.cart.entity.dto.TradeDTO; import cn.lili.modules.order.cart.entity.enums.RenderStepEnums; import cn.lili.modules.order.cart.entity.vo.CartSkuVO; import cn.lili.modules.order.cart.entity.vo.CartVO; import cn.lili.modules.order.cart.render.CartRenderStep; import cn.lili.modules.order.order.entity.dto.PriceDetailDTO; -import cn.lili.modules.promotion.entity.dos.PromotionGoods; +import cn.lili.modules.promotion.entity.dto.search.KanjiaActivitySearchParams; import cn.lili.modules.promotion.entity.enums.KanJiaStatusEnum; import cn.lili.modules.promotion.entity.vos.PromotionSkuVO; -import cn.lili.modules.promotion.entity.vos.kanjia.KanjiaActivitySearchParams; import cn.lili.modules.promotion.entity.vos.kanjia.KanjiaActivityVO; import cn.lili.modules.promotion.service.KanjiaActivityService; -import cn.lili.modules.promotion.service.PromotionGoodsService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.Map; +import java.util.Objects; + /** * 购物促销信息渲染实现 * @@ -29,15 +36,12 @@ import org.springframework.stereotype.Service; public class SkuPromotionRender implements CartRenderStep { - /** - * 促销商品 - */ - @Autowired - private PromotionGoodsService promotionGoodsService; - @Autowired private KanjiaActivityService kanjiaActivityService; + @Autowired + private MemberService memberService; + @Override public RenderStepEnums step() { return RenderStepEnums.SKU_PROMOTION; @@ -80,25 +84,31 @@ public class SkuPromotionRender implements CartRenderStep { //这里是双重循环,但是实际积分购买或者是砍价购买时,购物车只有一个商品,所以没有循环操作数据库或者其他的问题 case POINTS: + Member userInfo = memberService.getUserInfo(); + long totalPayPoints = 0; //处理积分商品购买 for (CartVO cartVO : tradeDTO.getCartList()) { for (CartSkuVO cartSkuVO : cartVO.getCheckedSkuList()) { cartSkuVO.getPriceDetailDTO().setPayPoint(cartSkuVO.getPoint()); PromotionSkuVO promotionSkuVO = new PromotionSkuVO(PromotionTypeEnum.POINTS_GOODS.name(), cartSkuVO.getPointsId()); cartSkuVO.getPriceDetailDTO().getJoinPromotion().add(promotionSkuVO); + totalPayPoints += cartSkuVO.getPoint(); } } + if (userInfo.getPoint() < totalPayPoints) { + throw new ServiceException(ResultCode.POINT_NOT_ENOUGH); + } return; case KANJIA: for (CartVO cartVO : tradeDTO.getCartList()) { for (CartSkuVO cartSkuVO : cartVO.getCheckedSkuList()) { KanjiaActivitySearchParams kanjiaActivitySearchParams = new KanjiaActivitySearchParams(); kanjiaActivitySearchParams.setGoodsSkuId(cartSkuVO.getGoodsSku().getId()); - kanjiaActivitySearchParams.setMemberId(UserContext.getCurrentUser().getId()); + kanjiaActivitySearchParams.setMemberId(Objects.requireNonNull(UserContext.getCurrentUser()).getId()); kanjiaActivitySearchParams.setStatus(KanJiaStatusEnum.SUCCESS.name()); KanjiaActivityVO kanjiaActivityVO = kanjiaActivityService.getKanjiaActivityVO(kanjiaActivitySearchParams); //可以砍价金额购买,则处理信息 - if (kanjiaActivityVO.getPass()) { + if (Boolean.TRUE.equals(kanjiaActivityVO.getPass())) { cartSkuVO.setKanjiaId(kanjiaActivityVO.getId()); cartSkuVO.setPurchasePrice(kanjiaActivityVO.getPurchasePrice()); cartSkuVO.setSubTotal(kanjiaActivityVO.getPurchasePrice()); @@ -120,24 +130,20 @@ public class SkuPromotionRender implements CartRenderStep { return; case CART: case BUY_NOW: - return; case VIRTUAL: //循环购物车 for (CartVO cartVO : tradeDTO.getCartList()) { //循环sku for (CartSkuVO cartSkuVO : cartVO.getCheckedSkuList()) { - //更新商品促销 - promotionGoodsService.updatePromotion(cartSkuVO); //赋予商品促销信息 - for (PromotionGoods promotionGoods : cartSkuVO.getPromotions()) { - - // 忽略拼团活动 - if (promotionGoods.getPromotionType().equals(PromotionTypeEnum.PINTUAN.name())) { + for (Map.Entry entry : cartSkuVO.getPromotionMap().entrySet()) { + if (ignorePromotion(entry.getKey())) { continue; } - PromotionSkuVO promotionSkuVO = new PromotionSkuVO(promotionGoods.getPromotionType(), promotionGoods.getPromotionId()); - cartSkuVO.setPurchasePrice(promotionGoods.getPrice()); - cartSkuVO.setSubTotal(CurrencyUtil.mul(promotionGoods.getPrice(), cartSkuVO.getNum())); + + JSONObject promotionsObj = JSONUtil.parseObj(entry.getValue()); + PromotionSkuVO promotionSkuVO = new PromotionSkuVO(entry.getKey().split("-")[0], promotionsObj.get("id", String.class)); + cartSkuVO.setSubTotal(CurrencyUtil.mul(cartSkuVO.getPurchasePrice(), cartSkuVO.getNum())); cartSkuVO.getPriceDetailDTO().setGoodsPrice(cartSkuVO.getSubTotal()); cartSkuVO.getPriceDetailDTO().getJoinPromotion().add(promotionSkuVO); @@ -149,5 +155,16 @@ public class SkuPromotionRender implements CartRenderStep { } } + /** + * 购物车促销类型 + */ + private boolean ignorePromotion(String promotionKey) { + + // 忽略积分活动活动 忽略砍价活动 忽略优惠券活动 忽略拼团活动 + return promotionKey.contains(PromotionTypeEnum.POINTS_GOODS.name()) + || promotionKey.contains(PromotionTypeEnum.KANJIA.name()) + || promotionKey.contains(PromotionTypeEnum.COUPON.name()) + || promotionKey.contains(PromotionTypeEnum.PINTUAN.name()); + } } diff --git a/framework/src/main/java/cn/lili/modules/order/cart/service/CartServiceImpl.java b/framework/src/main/java/cn/lili/modules/order/cart/service/CartServiceImpl.java index d7ff3fc1..c6938fa5 100644 --- a/framework/src/main/java/cn/lili/modules/order/cart/service/CartServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/order/cart/service/CartServiceImpl.java @@ -1,20 +1,26 @@ package cn.lili.modules.order.cart.service; import cn.hutool.core.text.CharSequenceUtil; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; import cn.lili.cache.Cache; import cn.lili.common.enums.PromotionTypeEnum; import cn.lili.common.enums.ResultCode; import cn.lili.common.exception.ServiceException; +import cn.lili.common.properties.RocketmqCustomProperties; import cn.lili.common.security.AuthUser; import cn.lili.common.security.context.UserContext; import cn.lili.common.utils.CurrencyUtil; import cn.lili.modules.goods.entity.dos.GoodsSku; import cn.lili.modules.goods.entity.enums.GoodsAuthEnum; import cn.lili.modules.goods.entity.enums.GoodsStatusEnum; +import cn.lili.modules.goods.entity.vos.GoodsVO; import cn.lili.modules.goods.service.GoodsService; import cn.lili.modules.goods.service.GoodsSkuService; +import cn.lili.modules.member.entity.dos.Member; import cn.lili.modules.member.entity.dos.MemberAddress; import cn.lili.modules.member.service.MemberAddressService; +import cn.lili.modules.member.service.MemberService; import cn.lili.modules.order.cart.entity.dto.MemberCouponDTO; import cn.lili.modules.order.cart.entity.dto.TradeDTO; import cn.lili.modules.order.cart.entity.enums.CartTypeEnum; @@ -27,19 +33,25 @@ import cn.lili.modules.order.order.entity.dos.Trade; import cn.lili.modules.order.order.entity.vo.ReceiptVO; import cn.lili.modules.promotion.entity.dos.KanjiaActivity; import cn.lili.modules.promotion.entity.dos.MemberCoupon; -import cn.lili.modules.promotion.entity.dos.Pintuan; import cn.lili.modules.promotion.entity.dos.PromotionGoods; -import cn.lili.modules.promotion.entity.dto.KanjiaActivityGoodsDTO; -import cn.lili.modules.promotion.entity.enums.CouponScopeTypeEnum; +import cn.lili.modules.promotion.entity.dto.search.KanjiaActivitySearchParams; +import cn.lili.modules.promotion.entity.dto.search.PromotionGoodsSearchParams; import cn.lili.modules.promotion.entity.enums.KanJiaStatusEnum; import cn.lili.modules.promotion.entity.enums.MemberCouponStatusEnum; +import cn.lili.modules.promotion.entity.enums.PromotionsScopeTypeEnum; import cn.lili.modules.promotion.entity.vos.PointsGoodsVO; -import cn.lili.modules.promotion.entity.vos.kanjia.KanjiaActivitySearchParams; -import cn.lili.modules.promotion.service.*; +import cn.lili.modules.promotion.service.KanjiaActivityService; +import cn.lili.modules.promotion.service.MemberCouponService; +import cn.lili.modules.promotion.service.PointsGoodsService; +import cn.lili.modules.promotion.service.PromotionGoodsService; import cn.lili.modules.search.entity.dos.EsGoodsIndex; +import cn.lili.modules.search.service.EsGoodsIndexService; import cn.lili.modules.search.service.EsGoodsSearchService; +import cn.lili.rocketmq.RocketmqSendCallbackBuilder; +import cn.lili.rocketmq.tags.GoodsTagsEnum; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.extern.slf4j.Slf4j; +import org.apache.rocketmq.spring.core.RocketMQTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -77,11 +89,6 @@ public class CartServiceImpl implements CartService { * 促销商品 */ @Autowired - private PromotionGoodsService promotionGoodsService; - /** - * 促销商品 - */ - @Autowired private PointsGoodsService pointsGoodsService; /** * 会员地址 @@ -93,36 +100,53 @@ public class CartServiceImpl implements CartService { */ @Autowired private EsGoodsSearchService esGoodsSearchService; + /** + * 商品索引 + */ + @Autowired + private EsGoodsIndexService goodsIndexService; /** * ES商品 */ @Autowired private GoodsService goodsService; - /** - * 拼团 - */ - @Autowired - private PintuanService pintuanService; /** * 砍价 */ @Autowired private KanjiaActivityService kanjiaActivityService; + /** + * rocketMq + */ @Autowired - private KanjiaActivityGoodsService kanjiaActivityGoodsService; + private RocketMQTemplate rocketMQTemplate; + /** + * rocketMq配置 + */ + @Autowired + private RocketmqCustomProperties rocketmqCustomProperties; /** * 交易 */ @Autowired private TradeBuilder tradeBuilder; + @Autowired + private MemberService memberService; + + @Autowired + private PromotionGoodsService promotionGoodsService; + @Override public void add(String skuId, Integer num, String cartType, Boolean cover) { + AuthUser currentUser = Objects.requireNonNull(UserContext.getCurrentUser()); if (num <= 0) { throw new ServiceException(ResultCode.CART_NUM_ERROR); } CartTypeEnum cartTypeEnum = getCartType(cartType); GoodsSku dataSku = checkGoods(skuId); + Map promotionMap = this.getCurrentGoodsPromotion(dataSku, cartType); + try { //购物车方式购买需要保存之前的选择,其他方式购买,则直接抹除掉之前的记录 TradeDTO tradeDTO; @@ -154,10 +178,9 @@ public class CartServiceImpl implements CartService { //先清理一下 如果商品无效的话 cartSkuVOS.remove(cartSkuVO); //购物车中不存在此商品,则新建立一个 - cartSkuVO = new CartSkuVO(dataSku); + cartSkuVO = new CartSkuVO(dataSku, promotionMap); cartSkuVO.setCartType(cartTypeEnum); - promotionGoodsService.updatePromotion(cartSkuVO); //再设置加入购物车的数量 this.checkSetGoodsQuantity(cartSkuVO, skuId, num); //计算购物车小计 @@ -169,15 +192,13 @@ public class CartServiceImpl implements CartService { cartSkuVO.setChecked(true); } else { tradeDTO = new TradeDTO(cartTypeEnum); - AuthUser currentUser = UserContext.getCurrentUser(); tradeDTO.setMemberId(currentUser.getId()); tradeDTO.setMemberName(currentUser.getUsername()); List cartSkuVOS = tradeDTO.getSkuList(); //购物车中不存在此商品,则新建立一个 - CartSkuVO cartSkuVO = new CartSkuVO(dataSku); + CartSkuVO cartSkuVO = new CartSkuVO(dataSku, promotionMap); cartSkuVO.setCartType(cartTypeEnum); - promotionGoodsService.updatePromotion(cartSkuVO); //检测购物车数据 checkCart(cartTypeEnum, cartSkuVO, skuId, num); //计算购物车小计 @@ -333,17 +354,15 @@ public class CartServiceImpl implements CartService { long count = 0L; double totalPrice = tradeDTO.getSkuList().stream().mapToDouble(i -> i.getPurchasePrice() * i.getNum()).sum(); if (tradeDTO.getSkuList() != null && !tradeDTO.getSkuList().isEmpty()) { - List ids = tradeDTO.getSkuList().parallelStream().filter(i -> Boolean.TRUE.equals(i.getChecked())).map(i -> i.getGoodsSku().getId()).collect(Collectors.toList()); + List ids = tradeDTO.getSkuList().stream().filter(i -> Boolean.TRUE.equals(i.getChecked())).map(i -> i.getGoodsSku().getId()).collect(Collectors.toList()); List esGoodsList = esGoodsSearchService.getEsGoodsBySkuIds(ids); for (EsGoodsIndex esGoodsIndex : esGoodsList) { - if (esGoodsIndex != null) { - if (esGoodsIndex.getPromotionMap() != null) { - List couponIds = esGoodsIndex.getPromotionMap().keySet().parallelStream().filter(i -> i.contains(PromotionTypeEnum.COUPON.name())).map(i -> i.substring(i.lastIndexOf("-") + 1)).collect(Collectors.toList()); - if (!couponIds.isEmpty()) { - List currentGoodsCanUse = memberCouponService.getCurrentGoodsCanUse(tradeDTO.getMemberId(), couponIds, totalPrice); - count = currentGoodsCanUse.size(); - } + if (esGoodsIndex != null && esGoodsIndex.getPromotionMap() != null && !esGoodsIndex.getPromotionMap().isEmpty()) { + List couponIds = esGoodsIndex.getPromotionMap().keySet().stream().filter(i -> i.contains(PromotionTypeEnum.COUPON.name())).map(i -> i.substring(i.lastIndexOf("-") + 1)).collect(Collectors.toList()); + if (!couponIds.isEmpty()) { + List currentGoodsCanUse = memberCouponService.getCurrentGoodsCanUse(tradeDTO.getMemberId(), couponIds, totalPrice); + count = currentGoodsCanUse.size(); } } } @@ -371,7 +390,7 @@ public class CartServiceImpl implements CartService { } /** - * 校验商品有效性,判定失效和库存 + * 校验商品有效性,判定失效和库存,促销活动价格 * * @param skuId 商品skuId */ @@ -380,7 +399,7 @@ public class CartServiceImpl implements CartService { if (dataSku == null) { throw new ServiceException(ResultCode.GOODS_NOT_EXIST); } - if (!GoodsAuthEnum.PASS.name().equals(dataSku.getIsAuth()) || !GoodsStatusEnum.UPPER.name().equals(dataSku.getMarketEnable())) { + if (!GoodsAuthEnum.PASS.name().equals(dataSku.getAuthFlag()) || !GoodsStatusEnum.UPPER.name().equals(dataSku.getMarketEnable())) { throw new ServiceException(ResultCode.GOODS_NOT_EXIST); } return dataSku; @@ -396,11 +415,8 @@ public class CartServiceImpl implements CartService { private void checkSetGoodsQuantity(CartSkuVO cartSkuVO, String skuId, Integer num) { Integer enableStock = goodsSkuService.getStock(skuId); - //读取sku的可用库存 - Integer enableQuantity = goodsSkuService.getStock(skuId); - //如果sku的可用库存小于等于0或者小于用户购买的数量,则不允许购买 - if (enableQuantity <= 0 || enableQuantity < num) { + if (enableStock <= 0 || enableStock < num) { throw new ServiceException(ResultCode.GOODS_SKU_QUANTITY_NOT_ENOUGH); } @@ -513,7 +529,7 @@ public class CartServiceImpl implements CartService { if (use) { this.useCoupon(tradeDTO, memberCoupon, cartTypeEnum); } else { - if (Boolean.TRUE.equals(memberCoupon.getIsPlatform())) { + if (Boolean.TRUE.equals(memberCoupon.getPlatformFlag())) { tradeDTO.setPlatformCoupon(null); } else { tradeDTO.getStoreCoupons().remove(memberCoupon.getStoreId()); @@ -544,6 +560,46 @@ public class CartServiceImpl implements CartService { return trade; } + private Map getCurrentGoodsPromotion(GoodsSku dataSku, String cartType) { + Map promotionMap; + EsGoodsIndex goodsIndex = goodsIndexService.findById(dataSku.getId()); + if (goodsIndex == null) { + GoodsVO goodsVO = this.goodsService.getGoodsVO(dataSku.getGoodsId()); + goodsIndex = goodsIndexService.getTempEsGoodsIndex(dataSku, goodsVO.getGoodsParamsDTOList()); + + //发送mq消息 + String destination = rocketmqCustomProperties.getGoodsTopic() + ":" + GoodsTagsEnum.RESET_GOODS_INDEX.name(); + rocketMQTemplate.asyncSend(destination, JSONUtil.toJsonStr(Collections.singletonList(goodsIndex)), RocketmqSendCallbackBuilder.commonCallback()); + } + if (goodsIndex.getPromotionMap() != null && !goodsIndex.getPromotionMap().isEmpty()) { + if (goodsIndex.getPromotionMap().keySet().stream().anyMatch(i -> i.contains(PromotionTypeEnum.SECKILL.name())) || + (goodsIndex.getPromotionMap().keySet().stream().anyMatch(i -> i.contains(PromotionTypeEnum.PINTUAN.name())) + && CartTypeEnum.PINTUAN.name().equals(cartType))) { + + Optional> containsPromotion = goodsIndex.getPromotionMap().entrySet().stream().filter(i -> + i.getKey().contains(PromotionTypeEnum.SECKILL.name()) || i.getKey().contains(PromotionTypeEnum.PINTUAN.name())).findFirst(); + if (containsPromotion.isPresent()) { + JSONObject promotionsObj = JSONUtil.parseObj(containsPromotion.get().getValue()); + PromotionGoodsSearchParams searchParams = new PromotionGoodsSearchParams(); + searchParams.setSkuId(dataSku.getId()); + searchParams.setPromotionId(promotionsObj.get("id").toString()); + PromotionGoods promotionsGoods = promotionGoodsService.getPromotionsGoods(searchParams); + if (promotionsGoods != null && promotionsGoods.getPrice() != null) { + dataSku.setPromotionFlag(true); + dataSku.setPromotionPrice(promotionsGoods.getPrice()); + } else { + dataSku.setPromotionFlag(false); + dataSku.setPromotionPrice(null); + } + } + } + promotionMap = goodsIndex.getPromotionMap(); + } else { + promotionMap = null; + } + return promotionMap; + } + /** * 获取购物车类型 @@ -581,26 +637,22 @@ public class CartServiceImpl implements CartService { //购物车价格 - Double cartPrice = 0d; + double cartPrice = 0d; //循环符合优惠券的商品 for (CartSkuVO cartSkuVO : cartSkuVOS) { - if (!cartSkuVO.getChecked()) { + if (Boolean.FALSE.equals(cartSkuVO.getChecked())) { continue; } - //获取商品的促销信息 - Optional promotionOptional = - cartSkuVO.getPromotions().parallelStream().filter(promotionGoods -> - (promotionGoods.getPromotionType().equals(PromotionTypeEnum.PINTUAN.name()) && - cartTypeEnum.equals(CartTypeEnum.PINTUAN)) || - promotionGoods.getPromotionType().equals(PromotionTypeEnum.SECKILL.name())).findAny(); //有促销金额则用促销金额,否则用商品原价 - if (promotionOptional.isPresent()) { - cartPrice = CurrencyUtil.add(cartPrice, CurrencyUtil.mul(promotionOptional.get().getPrice(), cartSkuVO.getNum())); - skuPrice.put(cartSkuVO.getGoodsSku().getId(), CurrencyUtil.mul(promotionOptional.get().getPrice(), cartSkuVO.getNum())); - } else { - cartPrice = CurrencyUtil.add(cartPrice, CurrencyUtil.mul(cartSkuVO.getGoodsSku().getPrice(), cartSkuVO.getNum())); - skuPrice.put(cartSkuVO.getGoodsSku().getId(), CurrencyUtil.mul(cartSkuVO.getGoodsSku().getPrice(), cartSkuVO.getNum())); + if (cartSkuVO.getPromotionMap() != null && !cartSkuVO.getPromotionMap().isEmpty()) { + if (cartSkuVO.getPromotionMap().keySet().stream().anyMatch(i -> i.contains(PromotionTypeEnum.PINTUAN.name()) || i.contains(PromotionTypeEnum.SECKILL.name()))) { + cartPrice = CurrencyUtil.add(cartPrice, CurrencyUtil.mul(cartSkuVO.getPurchasePrice(), cartSkuVO.getNum())); + skuPrice.put(cartSkuVO.getGoodsSku().getId(), CurrencyUtil.mul(cartSkuVO.getPurchasePrice(), cartSkuVO.getNum())); + } else { + cartPrice = CurrencyUtil.add(cartPrice, CurrencyUtil.mul(cartSkuVO.getGoodsSku().getPrice(), cartSkuVO.getNum())); + skuPrice.put(cartSkuVO.getGoodsSku().getId(), CurrencyUtil.mul(cartSkuVO.getGoodsSku().getPrice(), cartSkuVO.getNum())); + } } } @@ -608,7 +660,7 @@ public class CartServiceImpl implements CartService { //如果购物车金额大于消费门槛则使用 if (cartPrice >= memberCoupon.getConsumeThreshold()) { //如果是平台优惠券 - if (memberCoupon.getIsPlatform()) { + if (Boolean.TRUE.equals(memberCoupon.getPlatformFlag())) { tradeDTO.setPlatformCoupon(new MemberCouponDTO(skuPrice, memberCoupon)); } else { tradeDTO.getStoreCoupons().put(memberCoupon.getStoreId(), new MemberCouponDTO(skuPrice, memberCoupon)); @@ -627,7 +679,7 @@ public class CartServiceImpl implements CartService { private List checkCoupon(MemberCoupon memberCoupon, TradeDTO tradeDTO) { List cartSkuVOS; //如果是店铺优惠券,判定的内容 - if (!memberCoupon.getIsPlatform()) { + if (Boolean.FALSE.equals(memberCoupon.getPlatformFlag())) { cartSkuVOS = tradeDTO.getSkuList().stream().filter(i -> i.getStoreId().equals(memberCoupon.getStoreId())).collect(Collectors.toList()); } //否则为平台优惠券,筛选商品为全部商品 @@ -636,15 +688,15 @@ public class CartServiceImpl implements CartService { } //当初购物车商品中是否存在符合优惠券条件的商品sku - if (memberCoupon.getScopeType().equals(CouponScopeTypeEnum.ALL.name())) { + if (memberCoupon.getScopeType().equals(PromotionsScopeTypeEnum.ALL.name())) { return cartSkuVOS; - } else if (memberCoupon.getScopeType().equals(CouponScopeTypeEnum.PORTION_GOODS_CATEGORY.name())) { + } else if (memberCoupon.getScopeType().equals(PromotionsScopeTypeEnum.PORTION_GOODS_CATEGORY.name())) { //分类路径是否包含 return cartSkuVOS.stream().filter(i -> i.getGoodsSku().getCategoryPath().indexOf("," + memberCoupon.getScopeId() + ",") <= 0).collect(Collectors.toList()); - } else if (memberCoupon.getScopeType().equals(CouponScopeTypeEnum.PORTION_GOODS.name())) { + } else if (memberCoupon.getScopeType().equals(PromotionsScopeTypeEnum.PORTION_GOODS.name())) { //范围关联ID是否包含 return cartSkuVOS.stream().filter(i -> memberCoupon.getScopeId().indexOf("," + i.getGoodsSku().getId() + ",") <= 0).collect(Collectors.toList()); - } else if (memberCoupon.getScopeType().equals(CouponScopeTypeEnum.PORTION_SHOP_CATEGORY.name())) { + } else if (memberCoupon.getScopeType().equals(PromotionsScopeTypeEnum.PORTION_SHOP_CATEGORY.name())) { //店铺分类路径是否包含 return cartSkuVOS.stream().filter(i -> i.getGoodsSku().getStoreCategoryPath().indexOf("," + memberCoupon.getScopeId() + ",") <= 0).collect(Collectors.toList()); } @@ -683,27 +735,18 @@ public class CartServiceImpl implements CartService { private void checkPintuan(CartSkuVO cartSkuVO) { //拼团活动,需要对限购数量进行判定 //获取拼团信息 - List currentPromotion = cartSkuVO.getPromotions().stream().filter( - promotionGoods -> (promotionGoods.getPromotionType().equals(PromotionTypeEnum.PINTUAN.name()))) - .collect(Collectors.toList()); - //拼团活动判定 - if (!currentPromotion.isEmpty()) { - PromotionGoods promotionGoods = currentPromotion.get(0); - //写入拼团信息 - cartSkuVO.setPintuanId(promotionGoods.getPromotionId()); - //写入成交信息 - cartSkuVO.setUtilPrice(promotionGoods.getPrice()); - cartSkuVO.setPurchasePrice(promotionGoods.getPrice()); - } else { - //如果拼团活动被异常处理,则在这里安排mq重新写入商品索引 - goodsSkuService.generateEs(goodsService.getById(cartSkuVO.getGoodsSku().getGoodsId())); - throw new ServiceException(ResultCode.CART_PINTUAN_NOT_EXIST_ERROR); - } - //检测拼团限购数量 - Pintuan pintuan = pintuanService.getPintuanById(cartSkuVO.getPintuanId()); - Integer limitNum = pintuan.getLimitNum(); - if (limitNum != 0 && cartSkuVO.getNum() > limitNum) { - throw new ServiceException(ResultCode.CART_PINTUAN_LIMIT_ERROR); + if (cartSkuVO.getPromotionMap() != null && !cartSkuVO.getPromotionMap().isEmpty()) { + Optional> pintuanPromotions = cartSkuVO.getPromotionMap().entrySet().stream().filter(i -> i.getKey().contains(PromotionTypeEnum.PINTUAN.name())).findFirst(); + if (pintuanPromotions.isPresent()) { + JSONObject promotionsObj = JSONUtil.parseObj(pintuanPromotions.get().getValue()); + //写入拼团信息 + cartSkuVO.setPintuanId(promotionsObj.get("id").toString()); + //检测拼团限购数量 + Integer limitNum = promotionsObj.get("limitNum", Integer.class); + if (limitNum != 0 && cartSkuVO.getNum() > limitNum) { + throw new ServiceException(ResultCode.CART_PINTUAN_LIMIT_ERROR); + } + } } } @@ -713,30 +756,32 @@ public class CartServiceImpl implements CartService { * @param cartSkuVO 购物车信息 */ private void checkKanjia(CartSkuVO cartSkuVO) { + if (cartSkuVO.getPromotionMap() != null && !cartSkuVO.getPromotionMap().isEmpty()) { + Optional> kanjiaPromotions = cartSkuVO.getPromotionMap().entrySet().stream().filter(i -> i.getKey().contains(PromotionTypeEnum.KANJIA.name())).findFirst(); + if (kanjiaPromotions.isPresent()) { + JSONObject promotionsObj = JSONUtil.parseObj(kanjiaPromotions.get().getValue()); + //查找当前会员的砍价商品活动 + KanjiaActivitySearchParams kanjiaActivitySearchParams = new KanjiaActivitySearchParams(); + kanjiaActivitySearchParams.setKanjiaActivityGoodsId(promotionsObj.get("id", String.class)); + kanjiaActivitySearchParams.setMemberId(UserContext.getCurrentUser().getId()); + kanjiaActivitySearchParams.setStatus(KanJiaStatusEnum.SUCCESS.name()); + KanjiaActivity kanjiaActivity = kanjiaActivityService.getKanjiaActivity(kanjiaActivitySearchParams); - //根据skuId获取砍价商品 - KanjiaActivityGoodsDTO kanjiaActivityGoodsDTO = kanjiaActivityGoodsService.getKanjiaGoodsBySkuId(cartSkuVO.getGoodsSku().getId()); - - //查找当前会员的砍价商品活动 - KanjiaActivitySearchParams kanjiaActivitySearchParams = new KanjiaActivitySearchParams(); - kanjiaActivitySearchParams.setKanjiaActivityGoodsId(kanjiaActivityGoodsDTO.getId()); - kanjiaActivitySearchParams.setMemberId(UserContext.getCurrentUser().getId()); - kanjiaActivitySearchParams.setStatus(KanJiaStatusEnum.SUCCESS.name()); - KanjiaActivity kanjiaActivity = kanjiaActivityService.getKanjiaActivity(kanjiaActivitySearchParams); - - //校验砍价活动是否满足条件 - //判断发起砍价活动 - if (kanjiaActivity == null) { - throw new ServiceException(ResultCode.KANJIA_ACTIVITY_NOT_FOUND_ERROR); - //判断砍价活动是否已满足条件 - } else if (!KanJiaStatusEnum.SUCCESS.name().equals(kanjiaActivity.getStatus())) { - cartSkuVO.setKanjiaId(kanjiaActivity.getId()); - cartSkuVO.setPurchasePrice(0D); - throw new ServiceException(ResultCode.KANJIA_ACTIVITY_NOT_PASS_ERROR); + //校验砍价活动是否满足条件 + //判断发起砍价活动 + if (kanjiaActivity == null) { + throw new ServiceException(ResultCode.KANJIA_ACTIVITY_NOT_FOUND_ERROR); + //判断砍价活动是否已满足条件 + } else if (!KanJiaStatusEnum.SUCCESS.name().equals(kanjiaActivity.getStatus())) { + cartSkuVO.setKanjiaId(kanjiaActivity.getId()); + cartSkuVO.setPurchasePrice(0D); + throw new ServiceException(ResultCode.KANJIA_ACTIVITY_NOT_PASS_ERROR); + } + //砍价商品默认一件货物 + cartSkuVO.setKanjiaId(kanjiaActivity.getId()); + cartSkuVO.setNum(1); + } } - //砍价商品默认一件货物 - cartSkuVO.setKanjiaId(kanjiaActivity.getId()); - cartSkuVO.setNum(1); } /** @@ -746,10 +791,13 @@ public class CartServiceImpl implements CartService { */ private void checkPoint(CartSkuVO cartSkuVO) { - PointsGoodsVO pointsGoodsVO = pointsGoodsService.getPointsGoodsVOByMongo(cartSkuVO.getGoodsSku().getId()); + PointsGoodsVO pointsGoodsVO = pointsGoodsService.getPointsGoodsDetailBySkuId(cartSkuVO.getGoodsSku().getId()); if (pointsGoodsVO != null) { - + Member userInfo = memberService.getUserInfo(); + if (userInfo.getPoint() < pointsGoodsVO.getPoints()) { + throw new ServiceException(ResultCode.POINT_NOT_ENOUGH); + } if (pointsGoodsVO.getActiveStock() < 1) { throw new ServiceException(ResultCode.POINT_GOODS_ACTIVE_STOCK_INSUFFICIENT); } diff --git a/framework/src/main/java/cn/lili/modules/order/order/entity/dos/Order.java b/framework/src/main/java/cn/lili/modules/order/order/entity/dos/Order.java index e9edf4b3..816cd62d 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/entity/dos/Order.java +++ b/framework/src/main/java/cn/lili/modules/order/order/entity/dos/Order.java @@ -12,7 +12,6 @@ import cn.lili.modules.order.cart.entity.enums.DeliveryMethodEnum; import cn.lili.modules.order.cart.entity.vo.CartVO; import cn.lili.modules.order.order.entity.dto.PriceDetailDTO; import cn.lili.modules.order.order.entity.enums.*; -import cn.lili.modules.promotion.entity.dos.PromotionGoods; import cn.lili.mybatis.BaseEntity; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; @@ -273,10 +272,9 @@ public class Order extends BaseEntity { this.setOrderPromotionType(tradeDTO.getCartTypeEnum().name()); //判断是否为拼团订单,如果为拼团订单获取拼团ID,判断是否为主订单 - if (tradeDTO.getCartTypeEnum().name().equals(PromotionTypeEnum.PINTUAN.name())) { - Optional pintuanId = cartVO.getCheckedSkuList().get(0).getPromotions().stream() - .filter(i -> i.getPromotionType().equals(PromotionTypeEnum.PINTUAN.name())).map(PromotionGoods::getPromotionId).findFirst(); - promotionId = pintuanId.get(); + if (tradeDTO.getCartTypeEnum().name().equals(PromotionTypeEnum.PINTUAN.name()) && cartVO.getCheckedSkuList().get(0).getPromotionMap() != null && !cartVO.getCheckedSkuList().get(0).getPromotionMap().isEmpty()) { + Optional pintuanPromotions = cartVO.getCheckedSkuList().get(0).getPromotionMap().keySet().stream().filter(i -> i.contains(PromotionTypeEnum.PINTUAN.name())).findFirst(); + pintuanPromotions.ifPresent(s -> promotionId = s.split("-")[1]); } } } diff --git a/framework/src/main/java/cn/lili/modules/order/order/entity/dos/OrderComplaint.java b/framework/src/main/java/cn/lili/modules/order/order/entity/dos/OrderComplaint.java index c125c8b6..9b3111de 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/entity/dos/OrderComplaint.java +++ b/framework/src/main/java/cn/lili/modules/order/order/entity/dos/OrderComplaint.java @@ -1,6 +1,6 @@ package cn.lili.modules.order.order.entity.dos; -import cn.lili.modules.order.order.entity.enums.ComplaintStatusEnum; +import cn.lili.modules.order.aftersale.entity.enums.ComplaintStatusEnum; import cn.lili.mybatis.BaseEntity; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; diff --git a/framework/src/main/java/cn/lili/modules/order/order/entity/dto/OrderSearchParams.java b/framework/src/main/java/cn/lili/modules/order/order/entity/dto/OrderSearchParams.java index 864a152e..d9b25dab 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/entity/dto/OrderSearchParams.java +++ b/framework/src/main/java/cn/lili/modules/order/order/entity/dto/OrderSearchParams.java @@ -6,10 +6,7 @@ import cn.lili.common.security.context.UserContext; import cn.lili.common.security.enums.UserEnums; import cn.lili.common.utils.DateUtil; import cn.lili.common.vo.PageVO; -import cn.lili.modules.order.order.entity.enums.CommentStatusEnum; -import cn.lili.modules.order.order.entity.enums.OrderStatusEnum; -import cn.lili.modules.order.order.entity.enums.OrderTagEnum; -import cn.lili.modules.order.order.entity.enums.OrderTypeEnum; +import cn.lili.modules.order.order.entity.enums.*; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModelProperty; @@ -18,7 +15,6 @@ import lombok.EqualsAndHashCode; import org.springframework.format.annotation.DateTimeFormat; import java.util.Date; -import java.util.Objects; /** * 订单查询参数 @@ -104,24 +100,41 @@ public class OrderSearchParams extends PageVO { @ApiModelProperty(value = "评论状态:未评论(UNFINISHED),待追评(WAIT_CHASE),评论完成(FINISHED),") private String commentStatus; + @ApiModelProperty(value = "是否为其他订单下的订单,如果是则为依赖订单的sn,否则为空") + private String parentOrderSn; + + @ApiModelProperty(value = "是否为某订单类型的订单,如果是则为订单类型的id,否则为空") + private String promotionId; + + @ApiModelProperty(value = "总价格,可以为范围,如10_1000") + private String flowPrice; + + /** + * @see OrderPromotionTypeEnum + */ + @ApiModelProperty(value = "订单促销类型") + private String orderPromotionType; + public QueryWrapper queryWrapper() { - AuthUser currentUser = Objects.requireNonNull(UserContext.getCurrentUser()); + AuthUser currentUser = UserContext.getCurrentUser(); QueryWrapper wrapper = new QueryWrapper<>(); //关键字查询 if (CharSequenceUtil.isNotEmpty(keywords)) { wrapper.like("o.sn", keywords).or().like("oi.goods_name", keywords); } - //按卖家查询 - wrapper.eq(CharSequenceUtil.equals(currentUser.getRole().name(), UserEnums.STORE.name()), "o.store_id", currentUser.getStoreId()); + if (currentUser != null) { + //按卖家查询 + wrapper.eq(CharSequenceUtil.equals(currentUser.getRole().name(), UserEnums.STORE.name()), "o.store_id", currentUser.getStoreId()); - //店铺查询 - wrapper.eq(CharSequenceUtil.equals(currentUser.getRole().name(), UserEnums.MANAGER.name()) - && CharSequenceUtil.isNotEmpty(storeId), "o.store_id", storeId); + //店铺查询 + wrapper.eq(CharSequenceUtil.equals(currentUser.getRole().name(), UserEnums.MANAGER.name()) + && CharSequenceUtil.isNotEmpty(storeId), "o.store_id", storeId); - //按买家查询 - wrapper.eq(CharSequenceUtil.equals(currentUser.getRole().name(), UserEnums.MEMBER.name()), "o.member_id", currentUser.getId()); + //按买家查询 + wrapper.eq(CharSequenceUtil.equals(currentUser.getRole().name(), UserEnums.MEMBER.name()) && memberId == null, "o.member_id", currentUser.getId()); + } //按照买家查询 wrapper.like(CharSequenceUtil.isNotEmpty(memberId), "o.member_id", memberId); @@ -192,7 +205,21 @@ public class OrderSearchParams extends PageVO { } } + // 依赖订单 + wrapper.eq(parentOrderSn != null, "o.parent_order_sn", parentOrderSn); + // 促销活动id + wrapper.eq(CharSequenceUtil.isNotEmpty(promotionId), "o.promotion_id", promotionId); + wrapper.eq(CharSequenceUtil.isNotEmpty(orderPromotionType), "o.order_promotion_type", orderPromotionType); + + if (CharSequenceUtil.isNotEmpty(flowPrice)) { + String[] s = flowPrice.split("_"); + if (s.length > 1) { + wrapper.between("o.flow_price", s[0], s[1]); + } else { + wrapper.ge("o.flow_price", s[0]); + } + } wrapper.eq("o.delete_flag", false); return wrapper; } diff --git a/framework/src/main/java/cn/lili/modules/order/order/entity/dto/PriceDetailDTO.java b/framework/src/main/java/cn/lili/modules/order/order/entity/dto/PriceDetailDTO.java index b03e1a51..dcc9ce66 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/entity/dto/PriceDetailDTO.java +++ b/framework/src/main/java/cn/lili/modules/order/order/entity/dto/PriceDetailDTO.java @@ -170,7 +170,7 @@ public class PriceDetailDTO implements Serializable { billPrice = settlementPrice; } else { //如果是普通订单最终结算金额 = flowPrice - platFormCommission - distributionCommission 流水金额-平台佣金-分销佣金 - billPrice = CurrencyUtil.sub(CurrencyUtil.sub(flowPrice, platFormCommission), distributionCommission); + billPrice = CurrencyUtil.sub(flowPrice, platFormCommission, distributionCommission); } } @@ -349,14 +349,30 @@ public class PriceDetailDTO implements Serializable { public void setDiscountPrice(Double discountPrice) { this.discountPrice = discountPrice; + promotionPriceHandler(); this.recount(); } public void setCouponPrice(Double couponPrice) { this.couponPrice = couponPrice; + promotionPriceHandler(); this.recount(); } + /** + * 如果促销金额+优惠券金额大于商品金额问题处理 + */ + private void promotionPriceHandler() { + if (couponPrice == null || discountPrice == null) { + return; + } + //如果订单优惠总额>商品金额,则处理一下数据,使得两数相加<=商品金额 + if (CurrencyUtil.add(couponPrice, discountPrice) > goodsPrice) { + couponPrice = CurrencyUtil.sub(goodsPrice, discountPrice); + this.setCouponPrice(couponPrice); + } + } + public void setDistributionCommission(Double distributionCommission) { this.distributionCommission = distributionCommission; this.recount(); diff --git a/framework/src/main/java/cn/lili/modules/order/order/entity/dto/StoreFlowQueryDTO.java b/framework/src/main/java/cn/lili/modules/order/order/entity/dto/StoreFlowQueryDTO.java new file mode 100644 index 00000000..958b47ba --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/order/order/entity/dto/StoreFlowQueryDTO.java @@ -0,0 +1,38 @@ +package cn.lili.modules.order.order.entity.dto; + +import cn.lili.common.vo.PageVO; +import cn.lili.modules.store.entity.dos.Bill; +import io.swagger.annotations.ApiModelProperty; +import lombok.Builder; +import lombok.Data; + +/** + * 店铺流水查询DTO + * + * @author Chopper + * @version v1.0 + * 2021-12-08 10:53 + */ +@Data +@Builder +public class StoreFlowQueryDTO { + + @ApiModelProperty(value = "类型") + private String type; + + @ApiModelProperty(value = "售后编号") + private String refundSn; + + @ApiModelProperty(value = "售后编号") + private String orderSn; + + @ApiModelProperty(value = "过滤只看分销订单") + private Boolean justDistribution; + + @ApiModelProperty("结算单") + private Bill bill; + + @ApiModelProperty(value = "分页") + private PageVO pageVO; + +} diff --git a/framework/src/main/java/cn/lili/modules/order/order/entity/vo/OrderComplaintSearchParams.java b/framework/src/main/java/cn/lili/modules/order/order/entity/vo/OrderComplaintSearchParams.java index 025e54cd..7b676630 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/entity/vo/OrderComplaintSearchParams.java +++ b/framework/src/main/java/cn/lili/modules/order/order/entity/vo/OrderComplaintSearchParams.java @@ -1,8 +1,8 @@ package cn.lili.modules.order.order.entity.vo; import cn.hutool.core.util.StrUtil; +import cn.lili.modules.order.aftersale.entity.enums.ComplaintStatusEnum; import cn.lili.modules.order.order.entity.dos.OrderComplaint; -import cn.lili.modules.order.order.entity.enums.ComplaintStatusEnum; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import io.swagger.annotations.ApiModelProperty; import lombok.Data; diff --git a/framework/src/main/java/cn/lili/modules/order/order/mapper/OrderMapper.java b/framework/src/main/java/cn/lili/modules/order/order/mapper/OrderMapper.java index a86f0e68..27487d82 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/mapper/OrderMapper.java +++ b/framework/src/main/java/cn/lili/modules/order/order/mapper/OrderMapper.java @@ -31,27 +31,6 @@ public interface OrderMapper extends BaseMapper { @Update({"update li_order set order_status = #{status} where sn = #{orderSn}"}) void updateStatus(String status, String orderSn); - /** - * 查询订单简短信息分页 - * - * @param page 分页 - * @param queryWrapper 查询条件 - * @return 简短订单分页 - */ - @Select("select o.sn,o.flow_price,o.create_time,o.order_status,o.pay_status,o.payment_method,o.payment_time,o.member_name,o.store_name as store_name,o.store_id as store_id,o.client_type,o.order_type,o.deliver_status " + - ",GROUP_CONCAT(oi.goods_id) as group_goods_id," + - " GROUP_CONCAT(oi.sku_id) as group_sku_id," + - " GROUP_CONCAT(oi.num) as group_num" + - ",GROUP_CONCAT(oi.image) as group_images" + - ",GROUP_CONCAT(oi.goods_name) as group_name " + - ",GROUP_CONCAT(oi.after_sale_status) as group_after_sale_status" + - ",GROUP_CONCAT(oi.complain_status) as group_complain_status" + - ",GROUP_CONCAT(oi.comment_status) as group_comment_status" + - ",GROUP_CONCAT(oi.sn) as group_order_items_sn " + - ",GROUP_CONCAT(oi.goods_price) as group_goods_price " + - " FROM li_order o INNER JOIN li_order_item AS oi on o.sn = oi.order_sn ${ew.customSqlSegment} ") - IPage queryByParams(IPage page, @Param(Constants.WRAPPER) Wrapper queryWrapper); - /** * 查询导出订单DTO列表 * @@ -74,4 +53,36 @@ public interface OrderMapper extends BaseMapper { @Select("select * from li_order ${ew.customSqlSegment} ") IPage queryPaymentLogs(IPage page, @Param(Constants.WRAPPER) Wrapper queryWrapper); + /** + * 查询订单简短信息分页 + * + * @param page 分页 + * @param queryWrapper 查询条件 + * @return 简短订单分页 + */ + @Select("select o.sn,o.flow_price,o.create_time,o.order_status,o.pay_status,o.payment_method,o.payment_time,o.member_name,o.store_name as store_name,o.store_id as store_id,o.client_type,o.order_type,o.deliver_status " + + ",GROUP_CONCAT(oi.goods_id) as group_goods_id," + + " GROUP_CONCAT(oi.sku_id) as group_sku_id," + + " GROUP_CONCAT(oi.num) as group_num" + + ",GROUP_CONCAT(oi.image) as group_images" + + ",GROUP_CONCAT(oi.goods_name) as group_name " + + ",GROUP_CONCAT(oi.after_sale_status) as group_after_sale_status" + + ",GROUP_CONCAT(oi.complain_status) as group_complain_status" + + ",GROUP_CONCAT(oi.comment_status) as group_comment_status" + + ",GROUP_CONCAT(oi.sn) as group_order_items_sn " + + ",GROUP_CONCAT(oi.goods_price) as group_goods_price " + + " FROM li_order o LEFT JOIN li_order_item AS oi on o.sn = oi.order_sn ${ew.customSqlSegment} ") + IPage queryByParams(IPage page, @Param(Constants.WRAPPER) Wrapper queryWrapper); + + /** + * 查询订单信息 + * + * @param queryWrapper 查询条件 + * @return 简短订单分页 + */ + @Select("select o.* " + + " FROM li_order o INNER JOIN li_order_item AS oi on o.sn = oi.order_sn ${ew.customSqlSegment} ") + List queryListByParams(@Param(Constants.WRAPPER) Wrapper queryWrapper); + + } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/order/order/service/OrderComplaintService.java b/framework/src/main/java/cn/lili/modules/order/order/service/OrderComplaintService.java index 7ab562da..3750ee3c 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/service/OrderComplaintService.java +++ b/framework/src/main/java/cn/lili/modules/order/order/service/OrderComplaintService.java @@ -72,7 +72,7 @@ public interface OrderComplaintService extends IService { * * @return 待处理投诉数量 */ - Integer waitComplainNum(); + long waitComplainNum(); /** * 取消交易投诉 diff --git a/framework/src/main/java/cn/lili/modules/order/order/service/OrderItemService.java b/framework/src/main/java/cn/lili/modules/order/order/service/OrderItemService.java index cee318a2..ca3c3f4a 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/service/OrderItemService.java +++ b/framework/src/main/java/cn/lili/modules/order/order/service/OrderItemService.java @@ -58,4 +58,12 @@ public interface OrderItemService extends IService { */ List getByOrderSn(String orderSn); + /** + * 子订单查询 + * + * @param orderSn 订单编号 + * @param skuId skuid + * @return 子订单 + */ + OrderItem getByOrderSnAndSkuId(String orderSn, String skuId); } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/order/order/service/OrderService.java b/framework/src/main/java/cn/lili/modules/order/order/service/OrderService.java index 4fb1d04c..21ce926e 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/service/OrderService.java +++ b/framework/src/main/java/cn/lili/modules/order/order/service/OrderService.java @@ -1,6 +1,5 @@ package cn.lili.modules.order.order.service; -import cn.lili.common.vo.PageVO; import cn.lili.modules.member.entity.dto.MemberAddressDTO; import cn.lili.modules.order.cart.entity.dto.TradeDTO; import cn.lili.modules.order.order.entity.dos.Order; @@ -9,8 +8,9 @@ import cn.lili.modules.order.order.entity.dto.OrderMessage; import cn.lili.modules.order.order.entity.dto.OrderSearchParams; import cn.lili.modules.order.order.entity.vo.OrderDetailVO; import cn.lili.modules.order.order.entity.vo.OrderSimpleVO; -import cn.lili.modules.statistics.entity.dto.StatisticsQueryParam; +import cn.lili.modules.order.order.entity.vo.PaymentLog; import cn.lili.modules.system.entity.vo.Traces; +import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; import org.springframework.web.multipart.MultipartFile; @@ -51,6 +51,46 @@ public interface OrderService extends IService { */ IPage queryByParams(OrderSearchParams orderSearchParams); + /** + * 订单信息 + * + * @param orderSearchParams 查询参数 + * @return 订单信息 + */ + List queryListByParams(OrderSearchParams orderSearchParams); + + /** + * 根据促销查询订单 + * + * @param orderPromotionType 订单类型 + * @param payStatus 支付状态 + * @param parentOrderSn 依赖订单编号 + * @param orderSn 订单编号 + * @return 订单信息 + */ + List queryListByPromotion(String orderPromotionType, String payStatus, String parentOrderSn, String orderSn); + + /** + * 根据促销查询订单 + * + * @param orderPromotionType 订单类型 + * @param payStatus 支付状态 + * @param parentOrderSn 依赖订单编号 + * @param orderSn 订单编号 + * @return 订单信息 + */ + long queryCountByPromotion(String orderPromotionType, String payStatus, String parentOrderSn, String orderSn); + + /** + * 父级拼团订单分组 + * + * @param pintuanId 拼团id + * @return 拼团订单信息 + */ + List queryListByPromotion(String pintuanId); + + + /** * 查询导出订单列表 * @@ -186,16 +226,6 @@ public interface OrderService extends IService { */ void deleteOrder(String sn); - /** - * 获取统计的订单 - * - * @param statisticsQueryParam - * @param pageVO - * @return - */ - IPage getStatistics(StatisticsQueryParam statisticsQueryParam, PageVO pageVO); - - /** * 开具发票 * @@ -235,4 +265,23 @@ public interface OrderService extends IService { * @return 金额 */ Double getPaymentTotal(String orderSn); + + /** + * 查询订单支付记录 + * + * @param page 分页 + * @param queryWrapper 查询条件 + * @return 订单支付记录分页 + */ + IPage queryPaymentLogs(IPage page, Wrapper queryWrapper); + + /** + * 检查是否开始虚拟成团 + * + * @param pintuanId 拼团活动id + * @param requiredNum 成团人数 + * @param fictitious 是否开启成团 + * @return 是否成功 + */ + boolean checkFictitiousOrder(String pintuanId, Integer requiredNum, Boolean fictitious); } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/order/order/service/StoreFlowService.java b/framework/src/main/java/cn/lili/modules/order/order/service/StoreFlowService.java index 83d07d57..ff879435 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/service/StoreFlowService.java +++ b/framework/src/main/java/cn/lili/modules/order/order/service/StoreFlowService.java @@ -1,12 +1,15 @@ package cn.lili.modules.order.order.service; import cn.lili.common.vo.PageVO; -import cn.lili.modules.order.order.entity.dos.AfterSale; +import cn.lili.modules.order.aftersale.entity.dos.AfterSale; import cn.lili.modules.order.order.entity.dos.StoreFlow; +import cn.lili.modules.order.order.entity.dto.StoreFlowQueryDTO; +import cn.lili.modules.store.entity.vos.StoreFlowPayDownloadVO; +import cn.lili.modules.store.entity.vos.StoreFlowRefundDownloadVO; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; -import java.util.Date; +import java.util.List; /** * 商家订单流水业务层 @@ -33,14 +36,61 @@ public interface StoreFlowService extends IService { /** * 获取商家流水 * - * @param storeId 商家ID - * @param type 收入、退款 - * @param distribution 是否查看分销相关数据 - * @param pageVO 分页 - * @param startTime 开始时间 - * @param endTime 结束时间 - * @return + * @param storeFlowQueryDTO 查询参数 + * @return 返回分页 */ - IPage getStoreFlow(String storeId, String type, boolean distribution, PageVO pageVO, Date startTime, Date endTime); + IPage getStoreFlow(StoreFlowQueryDTO storeFlowQueryDTO); + /** + * 根据参数查询一条数据 + * + * @param storeFlowQueryDTO 查询参数 + * @return 返回分页 + */ + StoreFlow queryOne(StoreFlowQueryDTO storeFlowQueryDTO); + + /** + * 获取结算单地入账流水 + * + * @param storeFlowQueryDTO 查询条件 + * @return 入账流水 + */ + List getStoreFlowPayDownloadVO(StoreFlowQueryDTO storeFlowQueryDTO); + + /** + * 获取结算单的退款流水 + * + * @param storeFlowQueryDTO 查询条件 + * @return 退款流水 + */ + List getStoreFlowRefundDownloadVO(StoreFlowQueryDTO storeFlowQueryDTO); + + + /** + * 根据结算单ID获取商家流水 + * + * @param pageVO 分页 + * @param id 结算单ID + * @param type 类型 + * @return 商家流水 + */ + IPage getStoreFlow(String id, String type, PageVO pageVO); + + /** + * 根据结算单ID获取商家流水 + * + * @param pageVO 分页 + * @param id 结算单ID + * @return 商家流水 + */ + IPage getDistributionFlow(String id, PageVO pageVO); + + + /** + * 获取店铺流水 + * + * @param storeFlowQueryDTO 店铺流水查询参数 + * @return 商家流水集合 + */ + List listStoreFlow(StoreFlowQueryDTO storeFlowQueryDTO); } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderComplaintServiceImpl.java b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderComplaintServiceImpl.java index d5c2eb06..405c712a 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderComplaintServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderComplaintServiceImpl.java @@ -1,21 +1,21 @@ package cn.lili.modules.order.order.serviceimpl; -import cn.hutool.core.util.StrUtil; +import cn.hutool.core.text.CharSequenceUtil; import cn.lili.common.enums.ResultCode; import cn.lili.common.exception.ServiceException; import cn.lili.common.security.AuthUser; +import cn.lili.common.security.OperationalJudgment; import cn.lili.common.security.context.UserContext; import cn.lili.common.security.enums.UserEnums; import cn.lili.common.utils.BeanUtil; -import cn.lili.common.utils.StringUtils; import cn.lili.common.vo.PageVO; import cn.lili.modules.goods.entity.dos.GoodsSku; import cn.lili.modules.goods.service.GoodsSkuService; +import cn.lili.modules.order.aftersale.entity.enums.ComplaintStatusEnum; import cn.lili.modules.order.order.entity.dos.OrderComplaint; import cn.lili.modules.order.order.entity.dos.OrderComplaintCommunication; import cn.lili.modules.order.order.entity.dos.OrderItem; import cn.lili.modules.order.order.entity.dto.OrderComplaintDTO; -import cn.lili.modules.order.order.entity.enums.ComplaintStatusEnum; import cn.lili.modules.order.order.entity.enums.OrderComplaintStatusEnum; import cn.lili.modules.order.order.entity.vo.*; import cn.lili.modules.order.order.mapper.OrderComplaintMapper; @@ -23,7 +23,6 @@ import cn.lili.modules.order.order.service.OrderComplaintCommunicationService; import cn.lili.modules.order.order.service.OrderComplaintService; import cn.lili.modules.order.order.service.OrderItemService; import cn.lili.modules.order.order.service.OrderService; -import cn.lili.common.security.OperationalJudgment; import cn.lili.mybatis.util.PageUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -206,10 +205,10 @@ public class OrderComplaintServiceImpl extends ServiceImpl lambdaUpdateWrapper = Wrappers.lambdaUpdate(); @@ -250,12 +249,12 @@ public class OrderComplaintServiceImpl extends ServiceImpl() + .eq(OrderItem::getOrderSn, orderSn) + .eq(OrderItem::getSkuId, skuId)); + } } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderPriceServiceImpl.java b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderPriceServiceImpl.java index 4e276210..ca75fd41 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderPriceServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderPriceServiceImpl.java @@ -3,6 +3,7 @@ package cn.lili.modules.order.order.serviceimpl; import cn.hutool.json.JSONUtil; import cn.lili.common.enums.ResultCode; import cn.lili.common.exception.ServiceException; +import cn.lili.common.security.OperationalJudgment; import cn.lili.common.utils.CurrencyUtil; import cn.lili.modules.order.order.aop.OrderLogPoint; import cn.lili.modules.order.order.entity.dos.Order; @@ -15,7 +16,6 @@ import cn.lili.modules.order.order.service.OrderPriceService; import cn.lili.modules.order.order.service.OrderService; import cn.lili.modules.payment.kit.plugin.bank.BankTransferPlugin; import cn.lili.modules.system.aspect.annotation.SystemLogPoint; -import cn.lili.common.security.OperationalJudgment; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; diff --git a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java index e618988a..206cfc32 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java @@ -8,13 +8,15 @@ import cn.hutool.json.JSONUtil; import cn.hutool.poi.excel.ExcelReader; import cn.hutool.poi.excel.ExcelUtil; import cn.hutool.poi.excel.ExcelWriter; +import cn.lili.common.enums.PromotionTypeEnum; import cn.lili.common.enums.ResultCode; import cn.lili.common.exception.ServiceException; import cn.lili.common.properties.RocketmqCustomProperties; +import cn.lili.common.security.OperationalJudgment; import cn.lili.common.security.context.UserContext; import cn.lili.common.security.enums.UserEnums; +import cn.lili.common.utils.SnowFlake; import cn.lili.common.utils.StringUtils; -import cn.lili.common.vo.PageVO; import cn.lili.modules.goods.entity.dto.GoodsCompleteMessage; import cn.lili.modules.member.entity.dto.MemberAddressDTO; import cn.lili.modules.order.cart.entity.dto.TradeDTO; @@ -31,6 +33,7 @@ import cn.lili.modules.order.order.entity.enums.*; import cn.lili.modules.order.order.entity.vo.OrderDetailVO; import cn.lili.modules.order.order.entity.vo.OrderSimpleVO; import cn.lili.modules.order.order.entity.vo.OrderVO; +import cn.lili.modules.order.order.entity.vo.PaymentLog; import cn.lili.modules.order.order.mapper.OrderItemMapper; import cn.lili.modules.order.order.mapper.OrderMapper; import cn.lili.modules.order.order.service.*; @@ -39,23 +42,21 @@ import cn.lili.modules.order.trade.service.OrderLogService; import cn.lili.modules.payment.entity.enums.PaymentMethodEnum; import cn.lili.modules.promotion.entity.dos.Pintuan; import cn.lili.modules.promotion.service.PintuanService; -import cn.lili.modules.statistics.entity.dto.StatisticsQueryParam; -import cn.lili.modules.statistics.util.StatisticsDateUtil; import cn.lili.modules.system.aspect.annotation.SystemLogPoint; import cn.lili.modules.system.entity.dos.Logistics; import cn.lili.modules.system.entity.vo.Traces; import cn.lili.modules.system.service.LogisticsService; -import cn.lili.common.security.OperationalJudgment; import cn.lili.mybatis.util.PageUtil; import cn.lili.rocketmq.RocketmqSendCallbackBuilder; import cn.lili.rocketmq.tags.GoodsTagsEnum; -import cn.lili.rocketmq.tags.MqOrderTagsEnum; +import cn.lili.rocketmq.tags.OrderTagsEnum; import cn.lili.trigger.enums.DelayTypeEnums; import cn.lili.trigger.interfaces.TimeTrigger; import cn.lili.trigger.message.PintuanOrderMessage; import cn.lili.trigger.model.TimeExecuteConstant; import cn.lili.trigger.model.TimeTriggerMsg; import cn.lili.trigger.util.DelayQueueTools; +import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; @@ -74,10 +75,8 @@ import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import java.io.InputStream; import java.net.URLEncoder; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Objects; +import java.util.*; +import java.util.stream.Collectors; /** * 子订单业务层实现 @@ -193,6 +192,70 @@ public class OrderServiceImpl extends ServiceImpl implements return this.baseMapper.queryByParams(PageUtil.initPage(orderSearchParams), queryWrapper); } + /** + * 订单信息 + * + * @param orderSearchParams 查询参数 + * @return 订单信息 + */ + @Override + public List queryListByParams(OrderSearchParams orderSearchParams) { + return this.baseMapper.queryListByParams(orderSearchParams.queryWrapper()); + } + + /** + * 根据促销查询订单 + * + * @param orderPromotionType 订单类型 + * @param payStatus 支付状态 + * @param parentOrderSn 依赖订单编号 + * @param orderSn 订单编号 + * @return 订单信息 + */ + @Override + public List queryListByPromotion(String orderPromotionType, String payStatus, String parentOrderSn, String orderSn) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + //查找团长订单和已和当前拼团订单拼团的订单 + queryWrapper.eq(Order::getOrderPromotionType, orderPromotionType) + .eq(Order::getPayStatus, payStatus) + .and(i -> i.eq(Order::getParentOrderSn, parentOrderSn).or(j -> j.eq(Order::getSn, orderSn))); + return this.list(queryWrapper); + } + + /** + * 根据促销查询订单 + * + * @param orderPromotionType 订单类型 + * @param payStatus 支付状态 + * @param parentOrderSn 依赖订单编号 + * @param orderSn 订单编号 + * @return 订单信息 + */ + @Override + public long queryCountByPromotion(String orderPromotionType, String payStatus, String parentOrderSn, String orderSn) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + //查找团长订单和已和当前拼团订单拼团的订单 + queryWrapper.eq(Order::getOrderPromotionType, orderPromotionType) + .eq(Order::getPayStatus, payStatus) + .and(i -> i.eq(Order::getParentOrderSn, parentOrderSn).or(j -> j.eq(Order::getSn, orderSn))); + return this.count(queryWrapper); + } + + /** + * 父级拼团订单 + * + * @param pintuanId 拼团id + * @return 拼团订单信息 + */ + @Override + public List queryListByPromotion(String pintuanId) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(Order::getOrderPromotionType, PromotionTypeEnum.PINTUAN.name()); + queryWrapper.eq(Order::getPromotionId, pintuanId); + queryWrapper.nested(i -> i.eq(Order::getPayStatus, PayStatusEnum.PAID.name()).or(j -> j.eq(Order::getOrderStatus, OrderStatusEnum.PAID.name()))); + return this.list(queryWrapper); + } + @Override public List queryExportOrder(OrderSearchParams orderSearchParams) { return this.baseMapper.queryExportOrder(orderSearchParams.queryWrapper()); @@ -304,7 +367,8 @@ public class OrderServiceImpl extends ServiceImpl implements //判断是否为拼团订单,进行特殊处理 //判断订单类型进行不同的订单确认操作 if (OrderPromotionTypeEnum.PINTUAN.name().equals(order.getOrderPromotionType())) { - this.checkPintuanOrder(order.getPromotionId(), order.getParentOrderSn()); + String parentOrderSn = CharSequenceUtil.isEmpty(order.getParentOrderSn()) ? orderSn : order.getParentOrderSn(); + this.checkPintuanOrder(order.getPromotionId(), parentOrderSn); } else { //判断订单类型 if (order.getOrderType().equals(OrderTypeEnum.NORMAL.name())) { @@ -426,6 +490,7 @@ public class OrderServiceImpl extends ServiceImpl implements //修改订单货物可以进行评价 orderItemService.update(new UpdateWrapper().eq(ORDER_SN_COLUMN, orderSn) .set("comment_status", CommentStatusEnum.UNFINISHED)); + this.update(new LambdaUpdateWrapper().eq(Order::getSn, orderSn).set(Order::getCompleteTime, new Date())); //发送订单状态改变消息 OrderMessage orderMessage = new OrderMessage(); orderMessage.setNewStatus(OrderStatusEnum.COMPLETED); @@ -459,7 +524,7 @@ public class OrderServiceImpl extends ServiceImpl implements @Override public void sendUpdateStatusMessage(OrderMessage orderMessage) { - String destination = rocketmqCustomProperties.getOrderTopic() + ":" + MqOrderTagsEnum.STATUS_CHANGE.name(); + String destination = rocketmqCustomProperties.getOrderTopic() + ":" + OrderTagsEnum.STATUS_CHANGE.name(); //发送订单变更mq消息 rocketMQTemplate.asyncSend(destination, JSONUtil.toJsonStr(orderMessage), RocketmqSendCallbackBuilder.commonCallback()); } @@ -479,21 +544,6 @@ public class OrderServiceImpl extends ServiceImpl implements this.orderItemService.update(orderItemLambdaUpdateWrapper); } - @Override - public IPage getStatistics(StatisticsQueryParam statisticsQueryParam, PageVO pageVO) { - - QueryWrapper queryWrapper = new QueryWrapper<>(); - Date[] dates = StatisticsDateUtil.getDateArray(statisticsQueryParam); - queryWrapper.between("o.create_time", dates[0], dates[1]); - queryWrapper.eq(StringUtils.isNotEmpty(statisticsQueryParam.getStoreId()), - "o.store_id", statisticsQueryParam.getStoreId()); - - queryWrapper.eq("o.delete_flag", false); - queryWrapper.groupBy("o.id"); - queryWrapper.orderByDesc("o.id"); - return this.baseMapper.queryByParams(PageUtil.initPage(pageVO), queryWrapper); - } - @Override public Boolean invoice(String sn) { //根据订单号查询发票信息 @@ -515,7 +565,7 @@ public class OrderServiceImpl extends ServiceImpl implements @Override public void agglomeratePintuanOrder(String pintuanId, String parentOrderSn) { //获取拼团配置 - Pintuan pintuan = pintuanService.getPintuanById(pintuanId); + Pintuan pintuan = pintuanService.getById(pintuanId); List list = this.getPintuanOrder(pintuanId, parentOrderSn); if (Boolean.TRUE.equals(pintuan.getFictitious()) && pintuan.getRequiredNum() > list.size()) { //如果开启虚拟成团且当前订单数量不足成团数量,则认为拼团成功 @@ -598,6 +648,11 @@ public class OrderServiceImpl extends ServiceImpl implements return order.getFlowPrice(); } + @Override + public IPage queryPaymentLogs(IPage page, Wrapper queryWrapper) { + return baseMapper.queryPaymentLogs(page, queryWrapper); + } + /** * 循环检查批量发货订单列表 * @@ -630,6 +685,79 @@ public class OrderServiceImpl extends ServiceImpl implements } + /** + * 检查是否开始虚拟成团 + * + * @param pintuanId 拼团活动id + * @param requiredNum 成团人数 + * @param fictitious 是否开启成团 + * @return 是否成功 + */ + @Override + public boolean checkFictitiousOrder(String pintuanId, Integer requiredNum, Boolean fictitious) { + Map> collect = this.queryListByPromotion(pintuanId) + .stream().collect(Collectors.groupingBy(Order::getParentOrderSn)); + + for (Map.Entry> entry : collect.entrySet()) { + //是否开启虚拟成团 + if (Boolean.FALSE.equals(fictitious) && CharSequenceUtil.isNotEmpty(entry.getKey()) && entry.getValue().size() < requiredNum) { + //如果未开启虚拟成团且已参团人数小于成团人数,则自动取消订单 + String reason = "拼团活动结束订单未付款,系统自动取消订单"; + if (CharSequenceUtil.isNotEmpty(entry.getKey())) { + this.systemCancel(entry.getKey(), reason); + } else { + for (Order order : entry.getValue()) { + this.systemCancel(order.getSn(), reason); + } + } + } else if (Boolean.TRUE.equals(fictitious)) { + this.fictitiousPintuan(entry, requiredNum); + } + } + return false; + } + + /** + * 虚拟成团 + * + * @param entry 订单列表 + * @param requiredNum 必须参团人数 + */ + private void fictitiousPintuan(Map.Entry> entry, Integer requiredNum) { + Map> listMap = entry.getValue().stream().collect(Collectors.groupingBy(Order::getPayStatus)); + //未付款订单 + List unpaidOrders = listMap.get(PayStatusEnum.UNPAID.name()); + //未付款订单自动取消 + if (unpaidOrders != null && !unpaidOrders.isEmpty()) { + for (Order unpaidOrder : unpaidOrders) { + this.systemCancel(unpaidOrder.getSn(), "拼团活动结束订单未付款,系统自动取消订单"); + } + } + List paidOrders = listMap.get(PayStatusEnum.PAID.name()); + //如待参团人数大于0,并已开启虚拟成团 + if (!paidOrders.isEmpty()) { + //待参团人数 + int waitNum = requiredNum - paidOrders.size(); + //添加虚拟成团 + for (int i = 0; i < waitNum; i++) { + Order order = new Order(); + BeanUtil.copyProperties(paidOrders.get(0), order, "id", "sn"); + order.setSn(SnowFlake.createStr("G")); + order.setParentOrderSn(paidOrders.get(0).getParentOrderSn()); + order.setMemberId("-1"); + order.setMemberName("参团人员"); + order.setDeleteFlag(true); + this.save(order); + paidOrders.add(order); + } + for (Order paidOrder : paidOrders) { + paidOrder.setOrderStatus(OrderStatusEnum.UNDELIVERED.name()); + this.updateById(paidOrder); + orderStatusMessage(paidOrder); + } + } + } + /** * 订单状态变更消息 * @@ -662,18 +790,16 @@ public class OrderServiceImpl extends ServiceImpl implements * @param parentOrderSn 拼团父订单编号 */ private void checkPintuanOrder(String pintuanId, String parentOrderSn) { - //拼团有效参数判定 - if (CharSequenceUtil.isEmpty(parentOrderSn)) { - return; - } //获取拼团配置 - Pintuan pintuan = pintuanService.getPintuanById(pintuanId); + Pintuan pintuan = pintuanService.getById(pintuanId); List list = this.getPintuanOrder(pintuanId, parentOrderSn); int count = list.size(); if (count == 1) { //如果为开团订单,则发布一个一小时的延时任务,时间到达后,如果未成团则自动结束(未开启虚拟成团的情况下) PintuanOrderMessage pintuanOrderMessage = new PintuanOrderMessage(); - long startTime = DateUtil.offsetHour(new Date(), 1).getTime(); + //开团结束时间 +// long startTime = DateUtil.offsetHour(new Date(), 1).getTime(); + long startTime = DateUtil.offsetMinute(new Date(), 2).getTime(); pintuanOrderMessage.setOrderSn(parentOrderSn); pintuanOrderMessage.setPintuanId(pintuanId); TimeTriggerMsg timeTriggerMsg = new TimeTriggerMsg(TimeExecuteConstant.PROMOTION_EXECUTOR, @@ -734,7 +860,7 @@ public class OrderServiceImpl extends ServiceImpl implements private void pintuanOrderFailed(List list) { for (Order order : list) { try { - this.cancel(order.getSn(), "拼团人数不足,拼团失败!"); + this.systemCancel(order.getSn(), "拼团人数不足,拼团失败!"); } catch (Exception e) { log.error("拼团订单取消失败", e); } @@ -758,22 +884,6 @@ public class OrderServiceImpl extends ServiceImpl implements } } - /** - * 检查交易信息 - * - * @param order 订单 - */ - private void checkOrder(Order order) { - //订单类型为拼团订单,检测购买数量是否超过了限购数量 - if (OrderPromotionTypeEnum.PINTUAN.name().equals(order.getOrderType())) { - Pintuan pintuan = pintuanService.getPintuanById(order.getPromotionId()); - Integer limitNum = pintuan.getLimitNum(); - if (limitNum != 0 && order.getGoodsNum() > limitNum) { - throw new ServiceException(ResultCode.PINTUAN_LIMIT_NUM_ERROR); - } - } - } - /** * 普通商品订单确认 * 修改订单状态为待发货 diff --git a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/StoreFlowServiceImpl.java b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/StoreFlowServiceImpl.java index 9b9474b5..bcb8df53 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/StoreFlowServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/StoreFlowServiceImpl.java @@ -1,11 +1,15 @@ package cn.lili.modules.order.order.serviceimpl; -import cn.lili.common.utils.*; +import cn.lili.common.utils.BeanUtil; +import cn.lili.common.utils.CurrencyUtil; +import cn.lili.common.utils.SnowFlake; +import cn.lili.common.utils.StringUtils; import cn.lili.common.vo.PageVO; -import cn.lili.modules.order.order.entity.dos.AfterSale; +import cn.lili.modules.order.aftersale.entity.dos.AfterSale; 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.dos.StoreFlow; +import cn.lili.modules.order.order.entity.dto.StoreFlowQueryDTO; import cn.lili.modules.order.order.entity.enums.FlowTypeEnum; import cn.lili.modules.order.order.entity.enums.OrderPromotionTypeEnum; import cn.lili.modules.order.order.entity.enums.PayStatusEnum; @@ -15,6 +19,10 @@ import cn.lili.modules.order.order.service.OrderService; import cn.lili.modules.order.order.service.StoreFlowService; import cn.lili.modules.payment.entity.RefundLog; import cn.lili.modules.payment.service.RefundLogService; +import cn.lili.modules.store.entity.dos.Bill; +import cn.lili.modules.store.entity.vos.StoreFlowPayDownloadVO; +import cn.lili.modules.store.entity.vos.StoreFlowRefundDownloadVO; +import cn.lili.modules.store.service.BillService; import cn.lili.mybatis.util.PageUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; @@ -26,7 +34,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.Date; import java.util.List; /** @@ -56,6 +63,9 @@ public class StoreFlowServiceImpl extends ServiceImpl().eq(StoreFlow::getOrderItemSn, afterSale.getOrderItemSn()) - .eq(StoreFlow::getFlowType,FlowTypeEnum.PAY)); + .eq(StoreFlow::getFlowType, FlowTypeEnum.PAY)); storeFlow.setNum(afterSale.getNum()); storeFlow.setCategoryId(payStoreFlow.getCategoryId()); //佣金 @@ -150,22 +160,86 @@ public class StoreFlowServiceImpl extends ServiceImpl().eq(RefundLog::getAfterSaleNo, afterSale.getSn())); + RefundLog refundLog = refundLogService.queryByAfterSaleSn(afterSale.getSn()); storeFlow.setTransactionId(refundLog.getReceivableNo()); storeFlow.setPaymentName(refundLog.getPaymentName()); this.save(storeFlow); } @Override - public IPage getStoreFlow(String storeId, String type, boolean distribution, PageVO pageVO, Date startTime, Date endTime) { + public IPage getStoreFlow(StoreFlowQueryDTO storeFlowQueryDTO) { + + return this.page(PageUtil.initPage(storeFlowQueryDTO.getPageVO()), generatorQueryWrapper(storeFlowQueryDTO)); + } + + @Override + public StoreFlow queryOne(StoreFlowQueryDTO storeFlowQueryDTO) { + return this.getOne(generatorQueryWrapper(storeFlowQueryDTO)); + } + + @Override + public List getStoreFlowPayDownloadVO(StoreFlowQueryDTO storeFlowQueryDTO) { + return baseMapper.getStoreFlowPayDownloadVO(generatorQueryWrapper(storeFlowQueryDTO)); + } + + @Override + public List getStoreFlowRefundDownloadVO(StoreFlowQueryDTO storeFlowQueryDTO) { + return baseMapper.getStoreFlowRefundDownloadVO(generatorQueryWrapper(storeFlowQueryDTO)); + } + + + @Override + public IPage getStoreFlow(String id, String type, PageVO pageVO) { + Bill bill = billService.getById(id); + return this.getStoreFlow(StoreFlowQueryDTO.builder().type(type).pageVO(pageVO).bill(bill).build()); + } + + @Override + public IPage getDistributionFlow(String id, PageVO pageVO) { + Bill bill = billService.getById(id); + return this.getStoreFlow(StoreFlowQueryDTO.builder().pageVO(pageVO).bill(bill).build()); + } + + @Override + public List listStoreFlow(StoreFlowQueryDTO storeFlowQueryDTO) { + return this.list(generatorQueryWrapper(storeFlowQueryDTO)); + } + + /** + * 生成查询wrapper + * + * @param storeFlowQueryDTO 搜索参数 + * @return 查询wrapper + */ + private LambdaQueryWrapper generatorQueryWrapper(StoreFlowQueryDTO storeFlowQueryDTO) { + LambdaQueryWrapper lambdaQueryWrapper = Wrappers.lambdaQuery(); - lambdaQueryWrapper.eq(StoreFlow::getStoreId, storeId); - lambdaQueryWrapper.isNotNull(distribution, StoreFlow::getDistributionRebate); - lambdaQueryWrapper.between(StoreFlow::getCreateTime, startTime, endTime); - lambdaQueryWrapper.eq(StringUtils.isNotEmpty(type), StoreFlow::getFlowType, type); - return this.page(PageUtil.initPage(pageVO), lambdaQueryWrapper); + //分销订单过滤是否判定 + lambdaQueryWrapper.isNotNull(storeFlowQueryDTO.getJustDistribution() != null && storeFlowQueryDTO.getJustDistribution(), + StoreFlow::getDistributionRebate); + + //流水类型判定 + lambdaQueryWrapper.eq(StringUtils.isNotEmpty(storeFlowQueryDTO.getType()), + StoreFlow::getFlowType, storeFlowQueryDTO.getType()); + + //售后编号判定 + lambdaQueryWrapper.eq(StringUtils.isNotEmpty(storeFlowQueryDTO.getRefundSn()), + StoreFlow::getRefundSn, storeFlowQueryDTO.getRefundSn()); + + //售后编号判定 + lambdaQueryWrapper.eq(StringUtils.isNotEmpty(storeFlowQueryDTO.getOrderSn()), + StoreFlow::getOrderSn, storeFlowQueryDTO.getOrderSn()); + + //结算单非空,则校对结算单参数 + if (storeFlowQueryDTO.getBill() != null) { + Bill bill = storeFlowQueryDTO.getBill(); + lambdaQueryWrapper.eq(StringUtils.isNotEmpty(bill.getStoreId()), StoreFlow::getStoreId, bill.getStoreId()); + lambdaQueryWrapper.between(bill.getStartTime() != null && bill.getEndTime() != null, + StoreFlow::getCreateTime, bill.getStartTime(), bill.getEndTime()); + } + return lambdaQueryWrapper; } } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/TradeServiceImpl.java b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/TradeServiceImpl.java index 3a74708e..f7dbbd88 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/TradeServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/TradeServiceImpl.java @@ -1 +1 @@ -package cn.lili.modules.order.order.serviceimpl; import cn.lili.cache.Cache; import cn.lili.cache.CachePrefix; import cn.lili.common.enums.ResultCode; import cn.lili.common.exception.ServiceException; import cn.lili.common.properties.RocketmqCustomProperties; import cn.lili.modules.member.entity.dos.MemberAddress; import cn.lili.modules.member.entity.enums.PointTypeEnum; import cn.lili.modules.member.service.MemberService; import cn.lili.modules.order.cart.entity.dto.MemberCouponDTO; import cn.lili.modules.order.cart.entity.dto.TradeDTO; import cn.lili.modules.order.cart.entity.enums.CartTypeEnum; import cn.lili.modules.order.cart.entity.vo.CartVO; import cn.lili.modules.order.order.entity.dos.Order; import cn.lili.modules.order.order.entity.dos.Trade; import cn.lili.modules.order.order.entity.enums.PayStatusEnum; import cn.lili.modules.order.order.mapper.TradeMapper; import cn.lili.modules.order.order.service.OrderService; import cn.lili.modules.order.order.service.TradeService; import cn.lili.modules.promotion.entity.dos.KanjiaActivity; import cn.lili.modules.promotion.entity.enums.KanJiaStatusEnum; import cn.lili.modules.promotion.service.CouponService; import cn.lili.modules.promotion.service.KanjiaActivityService; import cn.lili.modules.promotion.service.MemberCouponService; import cn.lili.rocketmq.RocketmqSendCallbackBuilder; import cn.lili.rocketmq.tags.MqOrderTagsEnum; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.apache.rocketmq.spring.core.RocketMQTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.stream.Collectors; /** * 交易业务层实现 * * @author Chopper * @date 2020/11/17 7:39 下午 */ @Service @Transactional(rollbackFor = Exception.class) public class TradeServiceImpl extends ServiceImpl implements TradeService { /** * 缓存 */ @Autowired private Cache cache; /** * 订单 */ @Autowired private OrderService orderService; /** * 会员 */ @Autowired private MemberService memberService; /** * 优惠券 */ @Autowired private CouponService couponService; /** * 会员优惠券 */ @Autowired private MemberCouponService memberCouponService; /** * 砍价 */ @Autowired private KanjiaActivityService kanjiaActivityService; /** * RocketMQ */ @Autowired private RocketMQTemplate rocketMQTemplate; /** * RocketMQ 配置 */ @Autowired private RocketmqCustomProperties rocketmqCustomProperties; @Override @Transactional(rollbackFor = Exception.class) public Trade createTrade(TradeDTO tradeDTO) { //创建订单预校验 createTradeCheck(tradeDTO); Trade trade = new Trade(tradeDTO); String key = CachePrefix.TRADE.getPrefix() + trade.getSn(); //优惠券预处理 couponPretreatment(tradeDTO); //积分预处理 pointPretreatment(tradeDTO); //添加交易 this.save(trade); //添加订单 orderService.intoDB(tradeDTO); //砍价订单处理 kanjiaPretreatment(tradeDTO); //写入缓存,给消费者调用 cache.put(key, tradeDTO); //构建订单创建消息 String destination = rocketmqCustomProperties.getOrderTopic() + ":" + MqOrderTagsEnum.ORDER_CREATE.name(); //发送订单创建消息 rocketMQTemplate.asyncSend(destination, key, RocketmqSendCallbackBuilder.commonCallback()); return trade; } /** * 创建订单最后一步校验 * * @param tradeDTO */ private void createTradeCheck(TradeDTO tradeDTO) { //创建订单如果没有收获地址, MemberAddress memberAddress = tradeDTO.getMemberAddress(); if (memberAddress == null) { throw new ServiceException(ResultCode.MEMBER_ADDRESS_NOT_EXIST); } /** * 订单配送区域校验 */ if (tradeDTO.getNotSupportFreight() != null && tradeDTO.getNotSupportFreight().size() > 0) { StringBuilder stringBuilder = new StringBuilder("包含商品有-"); tradeDTO.getNotSupportFreight().forEach(sku -> { stringBuilder.append(sku.getGoodsSku().getGoodsName()); }); throw new ServiceException(ResultCode.ORDER_NOT_SUPPORT_DISTRIBUTION, stringBuilder.toString()); } } @Override public Trade getBySn(String sn) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(Trade::getSn, sn); return this.getOne(queryWrapper); } @Override public void payTrade(String tradeSn, String paymentName, String receivableNo) { LambdaQueryWrapper orderQueryWrapper = new LambdaQueryWrapper<>(); orderQueryWrapper.eq(Order::getTradeSn, tradeSn); List orders = orderService.list(orderQueryWrapper); for (Order order : orders) { orderService.payOrder(order.getSn(), paymentName, receivableNo); } Trade trade = this.getBySn(tradeSn); trade.setPayStatus(PayStatusEnum.PAID.name()); this.saveOrUpdate(trade); } /** * 优惠券预处理 * 下单同时,扣除优惠券 * * @param tradeDTO */ private void couponPretreatment(TradeDTO tradeDTO) { List memberCouponDTOList = new ArrayList<>(); if (null != tradeDTO.getPlatformCoupon()) { memberCouponDTOList.add(tradeDTO.getPlatformCoupon()); } Collection storeCoupons = tradeDTO.getStoreCoupons().values(); if (!storeCoupons.isEmpty()) { memberCouponDTOList.addAll(storeCoupons); } List ids = memberCouponDTOList.stream().map(e -> e.getMemberCoupon().getId()).collect(Collectors.toList()); memberCouponService.used(ids); memberCouponDTOList.forEach(e -> couponService.usedCoupon(e.getMemberCoupon().getCouponId(), 1)); } /** * 创建交易,积分处理 * * @param tradeDTO */ private void pointPretreatment(TradeDTO tradeDTO) { //需要支付积分 if (tradeDTO.getPriceDetailDTO() != null && tradeDTO.getPriceDetailDTO().getPayPoint() != null && tradeDTO.getPriceDetailDTO().getPayPoint() > 0) { StringBuilder orderSns = new StringBuilder(); for (CartVO item : tradeDTO.getCartList()) { orderSns.append(item.getSn()); } boolean result = memberService.updateMemberPoint(tradeDTO.getPriceDetailDTO().getPayPoint().longValue(), PointTypeEnum.REDUCE.name(), tradeDTO.getMemberId(), "订单【" + orderSns + "】创建,积分扣减"); if (!result) { throw new ServiceException(ResultCode.PAY_POINT_ENOUGH); } } } /** * 创建交易、砍价处理 * * @param tradeDTO */ private void kanjiaPretreatment(TradeDTO tradeDTO) { if (tradeDTO.getCartTypeEnum().equals(CartTypeEnum.KANJIA)) { String kanjiaId = tradeDTO.getSkuList().get(0).getKanjiaId(); kanjiaActivityService.update(new LambdaUpdateWrapper() .eq(KanjiaActivity::getId, kanjiaId) .set(KanjiaActivity::getStatus, KanJiaStatusEnum.END.name())); } } } \ No newline at end of file +package cn.lili.modules.order.order.serviceimpl; import cn.hutool.json.JSONUtil; import cn.lili.cache.Cache; import cn.lili.cache.CachePrefix; import cn.lili.common.enums.ResultCode; import cn.lili.common.exception.ServiceException; import cn.lili.common.properties.RocketmqCustomProperties; import cn.lili.modules.member.entity.dos.MemberAddress; import cn.lili.modules.member.entity.enums.PointTypeEnum; import cn.lili.modules.member.service.MemberService; import cn.lili.modules.order.cart.entity.dto.MemberCouponDTO; import cn.lili.modules.order.cart.entity.dto.TradeDTO; import cn.lili.modules.order.cart.entity.enums.CartTypeEnum; import cn.lili.modules.order.cart.entity.vo.CartVO; import cn.lili.modules.order.order.entity.dos.Order; import cn.lili.modules.order.order.entity.dos.Trade; import cn.lili.modules.order.order.entity.enums.PayStatusEnum; import cn.lili.modules.order.order.mapper.TradeMapper; import cn.lili.modules.order.order.service.OrderService; import cn.lili.modules.order.order.service.TradeService; import cn.lili.modules.promotion.entity.dos.KanjiaActivity; import cn.lili.modules.promotion.entity.enums.KanJiaStatusEnum; import cn.lili.modules.promotion.service.CouponService; import cn.lili.modules.promotion.service.KanjiaActivityService; import cn.lili.modules.promotion.service.MemberCouponService; import cn.lili.rocketmq.RocketmqSendCallbackBuilder; import cn.lili.rocketmq.tags.OrderTagsEnum; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.apache.rocketmq.spring.core.RocketMQTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.stream.Collectors; /** * 交易业务层实现 * * @author Chopper * @date 2020/11/17 7:39 下午 */ @Service @Transactional(rollbackFor = Exception.class) public class TradeServiceImpl extends ServiceImpl implements TradeService { /** * 缓存 */ @Autowired private Cache cache; /** * 订单 */ @Autowired private OrderService orderService; /** * 会员 */ @Autowired private MemberService memberService; /** * 优惠券 */ @Autowired private CouponService couponService; /** * 会员优惠券 */ @Autowired private MemberCouponService memberCouponService; /** * 砍价 */ @Autowired private KanjiaActivityService kanjiaActivityService; /** * RocketMQ */ @Autowired private RocketMQTemplate rocketMQTemplate; /** * RocketMQ 配置 */ @Autowired private RocketmqCustomProperties rocketmqCustomProperties; @Override @Transactional(rollbackFor = Exception.class) public Trade createTrade(TradeDTO tradeDTO) { //创建订单预校验 createTradeCheck(tradeDTO); Trade trade = new Trade(tradeDTO); String key = CachePrefix.TRADE.getPrefix() + trade.getSn(); //优惠券预处理 couponPretreatment(tradeDTO); //积分预处理 pointPretreatment(tradeDTO); //添加交易 this.save(trade); //添加订单 orderService.intoDB(tradeDTO); //砍价订单处理 kanjiaPretreatment(tradeDTO); //写入缓存,给消费者调用 cache.put(key, JSONUtil.toJsonStr(tradeDTO)); //构建订单创建消息 String destination = rocketmqCustomProperties.getOrderTopic() + ":" + OrderTagsEnum.ORDER_CREATE.name(); //发送订单创建消息 rocketMQTemplate.asyncSend(destination, key, RocketmqSendCallbackBuilder.commonCallback()); return trade; } /** * 创建订单最后一步校验 * * @param tradeDTO */ private void createTradeCheck(TradeDTO tradeDTO) { //创建订单如果没有收获地址, MemberAddress memberAddress = tradeDTO.getMemberAddress(); if (memberAddress == null) { throw new ServiceException(ResultCode.MEMBER_ADDRESS_NOT_EXIST); } //订单配送区域校验 if (tradeDTO.getNotSupportFreight() != null && !tradeDTO.getNotSupportFreight().isEmpty()) { StringBuilder stringBuilder = new StringBuilder("包含商品有-"); tradeDTO.getNotSupportFreight().forEach(sku -> stringBuilder.append(sku.getGoodsSku().getGoodsName())); throw new ServiceException(ResultCode.ORDER_NOT_SUPPORT_DISTRIBUTION, stringBuilder.toString()); } } @Override public Trade getBySn(String sn) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(Trade::getSn, sn); return this.getOne(queryWrapper); } @Override public void payTrade(String tradeSn, String paymentName, String receivableNo) { LambdaQueryWrapper orderQueryWrapper = new LambdaQueryWrapper<>(); orderQueryWrapper.eq(Order::getTradeSn, tradeSn); List orders = orderService.list(orderQueryWrapper); for (Order order : orders) { orderService.payOrder(order.getSn(), paymentName, receivableNo); } Trade trade = this.getBySn(tradeSn); trade.setPayStatus(PayStatusEnum.PAID.name()); this.saveOrUpdate(trade); } /** * 优惠券预处理 * 下单同时,扣除优惠券 * * @param tradeDTO */ private void couponPretreatment(TradeDTO tradeDTO) { List memberCouponDTOList = new ArrayList<>(); if (null != tradeDTO.getPlatformCoupon()) { memberCouponDTOList.add(tradeDTO.getPlatformCoupon()); } Collection storeCoupons = tradeDTO.getStoreCoupons().values(); if (!storeCoupons.isEmpty()) { memberCouponDTOList.addAll(storeCoupons); } List ids = memberCouponDTOList.stream().map(e -> e.getMemberCoupon().getId()).collect(Collectors.toList()); memberCouponService.used(ids); memberCouponDTOList.forEach(e -> couponService.usedCoupon(e.getMemberCoupon().getCouponId(), 1)); } /** * 创建交易,积分处理 * * @param tradeDTO */ private void pointPretreatment(TradeDTO tradeDTO) { //需要支付积分 if (tradeDTO.getPriceDetailDTO() != null && tradeDTO.getPriceDetailDTO().getPayPoint() != null && tradeDTO.getPriceDetailDTO().getPayPoint() > 0) { StringBuilder orderSns = new StringBuilder(); for (CartVO item : tradeDTO.getCartList()) { orderSns.append(item.getSn()); } boolean result = memberService.updateMemberPoint(tradeDTO.getPriceDetailDTO().getPayPoint().longValue(), PointTypeEnum.REDUCE.name(), tradeDTO.getMemberId(), "订单【" + orderSns + "】创建,积分扣减"); if (!result) { throw new ServiceException(ResultCode.PAY_POINT_ENOUGH); } } } /** * 创建交易、砍价处理 * * @param tradeDTO */ private void kanjiaPretreatment(TradeDTO tradeDTO) { if (tradeDTO.getCartTypeEnum().equals(CartTypeEnum.KANJIA)) { String kanjiaId = tradeDTO.getSkuList().get(0).getKanjiaId(); kanjiaActivityService.update(new LambdaUpdateWrapper() .eq(KanjiaActivity::getId, kanjiaId) .set(KanjiaActivity::getStatus, KanJiaStatusEnum.END.name())); } } } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/payment/kit/CashierSupport.java b/framework/src/main/java/cn/lili/modules/payment/kit/CashierSupport.java index 3345d7c3..cec468fb 100644 --- a/framework/src/main/java/cn/lili/modules/payment/kit/CashierSupport.java +++ b/framework/src/main/java/cn/lili/modules/payment/kit/CashierSupport.java @@ -1,16 +1,15 @@ package cn.lili.modules.payment.kit; import cn.hutool.json.JSONUtil; +import cn.lili.common.enums.ClientTypeEnum; import cn.lili.common.enums.ResultCode; import cn.lili.common.exception.ServiceException; import cn.lili.common.security.context.UserContext; import cn.lili.common.utils.SpringContextUtil; import cn.lili.common.vo.ResultMessage; -import cn.lili.common.enums.ClientTypeEnum; -import cn.lili.modules.member.service.MemberWalletService; -import cn.lili.modules.payment.kit.dto.PayParam; import cn.lili.modules.payment.entity.enums.PaymentClientEnum; import cn.lili.modules.payment.entity.enums.PaymentMethodEnum; +import cn.lili.modules.payment.kit.dto.PayParam; import cn.lili.modules.payment.kit.params.CashierExecute; import cn.lili.modules.payment.kit.params.dto.CashierParam; import cn.lili.modules.system.entity.dos.Setting; @@ -19,6 +18,7 @@ import cn.lili.modules.system.entity.dto.payment.PaymentSupportSetting; import cn.lili.modules.system.entity.dto.payment.dto.PaymentSupportItem; import cn.lili.modules.system.entity.enums.SettingEnum; import cn.lili.modules.system.service.SettingService; +import cn.lili.modules.wallet.service.MemberWalletService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; diff --git a/framework/src/main/java/cn/lili/modules/payment/kit/RefundSupport.java b/framework/src/main/java/cn/lili/modules/payment/kit/RefundSupport.java index df3a3602..e8b75859 100644 --- a/framework/src/main/java/cn/lili/modules/payment/kit/RefundSupport.java +++ b/framework/src/main/java/cn/lili/modules/payment/kit/RefundSupport.java @@ -2,23 +2,19 @@ package cn.lili.modules.payment.kit; import cn.lili.common.utils.SnowFlake; import cn.lili.common.utils.SpringContextUtil; -import cn.lili.modules.order.order.entity.dos.AfterSale; +import cn.lili.modules.order.aftersale.entity.dos.AfterSale; import cn.lili.modules.order.order.entity.dos.Order; import cn.lili.modules.order.order.entity.dos.OrderItem; -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.order.order.service.StoreFlowService; import cn.lili.modules.payment.entity.RefundLog; import cn.lili.modules.payment.entity.enums.PaymentMethodEnum; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -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 javax.servlet.http.HttpServletRequest; -import java.util.Date; /** * 退款支持 @@ -34,11 +30,6 @@ public class RefundSupport { */ @Autowired private StoreFlowService storeFlowService; - /** - * 售后 - */ - @Autowired - private AfterSaleService afterSaleService; /** * 订单 */ @@ -73,10 +64,6 @@ public class RefundSupport { Payment payment = (Payment) SpringContextUtil.getBean(paymentMethodEnum.getPlugin()); payment.refund(refundLog); - //记录售后单中的退款金额 - afterSaleService.update(new LambdaUpdateWrapper() - .eq(AfterSale::getId, afterSale.getId()) - .set(AfterSale::getRefundTime, new Date())); this.updateReturnGoodsNumber(afterSale); //记录退款流水 @@ -85,22 +72,21 @@ public class RefundSupport { /** * 功能描述: 修改子订单中已售后退款商品数量 + * + * @return void * @Author ftyy * @Description //TODO * @Date 17:33 2021/11/18 * @Param [afterSale] - * @return void **/ - private void updateReturnGoodsNumber(AfterSale afterSale){ + private void updateReturnGoodsNumber(AfterSale afterSale) { //根据商品id及订单sn获取子订单 - OrderItem orderItem = orderItemService.getOne(new LambdaQueryWrapper() - .eq(OrderItem::getOrderSn, afterSale.getOrderSn()) - .eq(OrderItem::getGoodsId, afterSale.getGoodsId())); + OrderItem orderItem = orderItemService.getByOrderSnAndSkuId(afterSale.getOrderSn(), afterSale.getSkuId()); + + orderItem.setReturnGoodsNumber(afterSale.getNum() + orderItem.getReturnGoodsNumber()); + //修改子订单订单中的退货数量 - orderItemService.update(new LambdaUpdateWrapper() - .eq(OrderItem::getOrderSn,afterSale.getOrderSn()) - .eq(OrderItem::getGoodsId,afterSale.getGoodsId()) - .set(OrderItem::getReturnGoodsNumber,(afterSale.getNum()+orderItem.getReturnGoodsNumber()))); + orderItemService.updateById(orderItem); } /** diff --git a/framework/src/main/java/cn/lili/modules/payment/kit/core/kit/PayKit.java b/framework/src/main/java/cn/lili/modules/payment/kit/core/kit/PayKit.java index 8dd5a458..35cb4187 100644 --- a/framework/src/main/java/cn/lili/modules/payment/kit/core/kit/PayKit.java +++ b/framework/src/main/java/cn/lili/modules/payment/kit/core/kit/PayKit.java @@ -44,7 +44,7 @@ public class PayKit { * @return sha256 字符串 */ public static String hmacSha256(String data, String key) { - return SecureUtil.hmac(HmacAlgorithm.HmacSHA256, key).digestHex(data, CharsetUtil.UTF_8); + return SecureUtil.hmac(HmacAlgorithm.HmacSHA256, key).digestHex(data); } /** diff --git a/framework/src/main/java/cn/lili/modules/payment/kit/params/impl/RechargeCashier.java b/framework/src/main/java/cn/lili/modules/payment/kit/params/impl/RechargeCashier.java index 2db0ea27..e7be3721 100644 --- a/framework/src/main/java/cn/lili/modules/payment/kit/params/impl/RechargeCashier.java +++ b/framework/src/main/java/cn/lili/modules/payment/kit/params/impl/RechargeCashier.java @@ -4,16 +4,16 @@ import cn.hutool.json.JSONUtil; import cn.lili.common.enums.ResultCode; import cn.lili.common.exception.ServiceException; import cn.lili.modules.order.order.entity.enums.PayStatusEnum; -import cn.lili.modules.order.trade.entity.dos.Recharge; -import cn.lili.modules.order.trade.service.RechargeService; +import cn.lili.modules.payment.entity.enums.CashierEnum; import cn.lili.modules.payment.kit.dto.PayParam; import cn.lili.modules.payment.kit.dto.PaymentSuccessParams; -import cn.lili.modules.payment.entity.enums.CashierEnum; import cn.lili.modules.payment.kit.params.CashierExecute; import cn.lili.modules.payment.kit.params.dto.CashierParam; import cn.lili.modules.system.entity.dto.BaseSetting; import cn.lili.modules.system.entity.enums.SettingEnum; import cn.lili.modules.system.service.SettingService; +import cn.lili.modules.wallet.entity.dos.Recharge; +import cn.lili.modules.wallet.service.RechargeService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; diff --git a/framework/src/main/java/cn/lili/modules/payment/kit/plugin/wallet/WalletPlugin.java b/framework/src/main/java/cn/lili/modules/payment/kit/plugin/wallet/WalletPlugin.java index 832e5cd6..56dad469 100644 --- a/framework/src/main/java/cn/lili/modules/payment/kit/plugin/wallet/WalletPlugin.java +++ b/framework/src/main/java/cn/lili/modules/payment/kit/plugin/wallet/WalletPlugin.java @@ -5,18 +5,19 @@ import cn.lili.common.enums.ResultUtil; import cn.lili.common.exception.ServiceException; import cn.lili.common.security.context.UserContext; import cn.lili.common.vo.ResultMessage; -import cn.lili.modules.member.service.MemberWalletService; -import cn.lili.modules.order.trade.entity.enums.DepositServiceTypeEnum; import cn.lili.modules.payment.entity.RefundLog; +import cn.lili.modules.payment.entity.enums.CashierEnum; +import cn.lili.modules.payment.entity.enums.PaymentMethodEnum; import cn.lili.modules.payment.kit.CashierSupport; import cn.lili.modules.payment.kit.Payment; import cn.lili.modules.payment.kit.dto.PayParam; import cn.lili.modules.payment.kit.dto.PaymentSuccessParams; -import cn.lili.modules.payment.entity.enums.CashierEnum; -import cn.lili.modules.payment.entity.enums.PaymentMethodEnum; import cn.lili.modules.payment.kit.params.dto.CashierParam; import cn.lili.modules.payment.service.PaymentService; import cn.lili.modules.payment.service.RefundLogService; +import cn.lili.modules.wallet.entity.dto.MemberWalletUpdateDTO; +import cn.lili.modules.wallet.entity.enums.DepositServiceTypeEnum; +import cn.lili.modules.wallet.service.MemberWalletService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -77,7 +78,7 @@ public class WalletPlugin implements Payment { @Override public ResultMessage nativePay(HttpServletRequest request, PayParam payParam) { - if(payParam.getOrderType().equals(CashierEnum.RECHARGE.name())){ + if (payParam.getOrderType().equals(CashierEnum.RECHARGE.name())) { throw new ServiceException(ResultCode.CAN_NOT_RECHARGE_WALLET); } savePaymentLog(payParam); @@ -95,14 +96,14 @@ public class WalletPlugin implements Payment { public void cancel(RefundLog refundLog) { try { - memberWalletService.increase(refundLog.getTotalAmount(), + memberWalletService.increase(new MemberWalletUpdateDTO(refundLog.getTotalAmount(), refundLog.getMemberId(), "取消[" + refundLog.getOrderSn() + "]订单,退还金额[" + refundLog.getTotalAmount() + "]", - DepositServiceTypeEnum.WALLET_REFUND.name()); + DepositServiceTypeEnum.WALLET_REFUND.name())); refundLog.setIsRefund(true); refundLogService.save(refundLog); } catch (Exception e) { - log.error("订单取消错误",e); + log.error("订单取消错误", e); } } @@ -120,13 +121,14 @@ public class WalletPlugin implements Payment { @Override public void refund(RefundLog refundLog) { try { - memberWalletService.increase(refundLog.getTotalAmount(), + memberWalletService.increase(new MemberWalletUpdateDTO(refundLog.getTotalAmount(), refundLog.getMemberId(), - "售后[" + refundLog.getAfterSaleNo() + "]审批,退还金额[" + refundLog.getTotalAmount() + "]", DepositServiceTypeEnum.WALLET_REFUND.name()); + "售后[" + refundLog.getAfterSaleNo() + "]审批,退还金额[" + refundLog.getTotalAmount() + "]", + DepositServiceTypeEnum.WALLET_REFUND.name())); refundLog.setIsRefund(true); refundLogService.save(refundLog); } catch (Exception e) { - log.error("退款失败",e); + log.error("退款失败", e); } } @@ -143,11 +145,12 @@ public class WalletPlugin implements Payment { if (UserContext.getCurrentUser() == null) { throw new ServiceException(ResultCode.USER_NOT_LOGIN); } - boolean result = memberWalletService.reduce( - cashierParam.getPrice(), - UserContext.getCurrentUser().getId(), - "订单[" + cashierParam.getOrderSns() + "]支付金额[" + cashierParam.getPrice() + "]", - DepositServiceTypeEnum.WALLET_PAY.name() + boolean result = memberWalletService.reduce(new MemberWalletUpdateDTO( + cashierParam.getPrice(), + UserContext.getCurrentUser().getId(), + "订单[" + cashierParam.getOrderSns() + "]支付金额[" + cashierParam.getPrice() + "]", + DepositServiceTypeEnum.WALLET_PAY.name() + ) ); if (result) { try { @@ -162,11 +165,11 @@ public class WalletPlugin implements Payment { log.info("支付回调通知:余额支付:{}", payParam); } catch (ServiceException e) { //业务异常,则支付手动回滚 - memberWalletService.increase( + memberWalletService.increase(new MemberWalletUpdateDTO( cashierParam.getPrice(), UserContext.getCurrentUser().getId(), "订单[" + cashierParam.getOrderSns() + "]支付异常,余额返还[" + cashierParam.getPrice() + "]", - DepositServiceTypeEnum.WALLET_REFUND.name() + DepositServiceTypeEnum.WALLET_REFUND.name()) ); throw e; } diff --git a/framework/src/main/java/cn/lili/modules/payment/kit/plugin/wechat/WechatPlugin.java b/framework/src/main/java/cn/lili/modules/payment/kit/plugin/wechat/WechatPlugin.java index be768841..a6e0972b 100644 --- a/framework/src/main/java/cn/lili/modules/payment/kit/plugin/wechat/WechatPlugin.java +++ b/framework/src/main/java/cn/lili/modules/payment/kit/plugin/wechat/WechatPlugin.java @@ -10,18 +10,19 @@ import cn.lili.cache.CachePrefix; import cn.lili.common.enums.ResultCode; import cn.lili.common.enums.ResultUtil; import cn.lili.common.exception.ServiceException; +import cn.lili.common.properties.ApiProperties; import cn.lili.common.security.context.UserContext; import cn.lili.common.utils.CurrencyUtil; import cn.lili.common.utils.SnowFlake; import cn.lili.common.utils.StringUtils; import cn.lili.common.vo.ResultMessage; -import cn.lili.common.properties.ApiProperties; -import cn.lili.common.enums.ClientTypeEnum; import cn.lili.modules.connect.entity.Connect; import cn.lili.modules.connect.entity.enums.ConnectEnum; import cn.lili.modules.connect.service.ConnectService; +import cn.lili.modules.member.entity.dto.ConnectQueryDTO; import cn.lili.modules.order.order.service.OrderService; import cn.lili.modules.payment.entity.RefundLog; +import cn.lili.modules.payment.entity.enums.PaymentMethodEnum; import cn.lili.modules.payment.kit.CashierSupport; import cn.lili.modules.payment.kit.Payment; import cn.lili.modules.payment.kit.core.PaymentHttpResponse; @@ -31,7 +32,6 @@ import cn.lili.modules.payment.kit.core.kit.*; import cn.lili.modules.payment.kit.core.utils.DateTimeZoneUtil; import cn.lili.modules.payment.kit.dto.PayParam; import cn.lili.modules.payment.kit.dto.PaymentSuccessParams; -import cn.lili.modules.payment.entity.enums.PaymentMethodEnum; import cn.lili.modules.payment.kit.params.dto.CashierParam; import cn.lili.modules.payment.kit.plugin.wechat.enums.WechatApiEnum; import cn.lili.modules.payment.kit.plugin.wechat.enums.WechatDomain; @@ -39,7 +39,6 @@ import cn.lili.modules.payment.kit.plugin.wechat.model.*; import cn.lili.modules.payment.service.PaymentService; import cn.lili.modules.payment.service.RefundLogService; import cn.lili.modules.system.entity.dos.Setting; -import cn.lili.modules.system.entity.dto.connect.WechatConnectSetting; import cn.lili.modules.system.entity.dto.connect.dto.WechatConnectSettingItem; import cn.lili.modules.system.entity.dto.payment.WechatPaymentSetting; import cn.lili.modules.system.entity.enums.SettingEnum; @@ -132,9 +131,14 @@ public class WechatPlugin implements Payment { //回传数据 String attach = URLEncoder.createDefault().encode(JSONUtil.toJsonStr(payParam), StandardCharsets.UTF_8); + WechatPaymentSetting setting = wechatPaymentSetting(); + String appid = setting.getServiceAppId(); + if (appid == null) { + throw new ServiceException(ResultCode.WECHAT_PAYMENT_NOT_SETTING); + } UnifiedOrderModel unifiedOrderModel = new UnifiedOrderModel() - .setAppid(setting.getAppId()) + .setAppid(appid) .setMchid(setting.getMchId()) .setDescription(cashierParam.getDetail()) .setOut_trade_no(outOrderNo) @@ -166,10 +170,9 @@ public class WechatPlugin implements Payment { public ResultMessage jsApiPay(HttpServletRequest request, PayParam payParam) { try { - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(Connect::getUserId, UserContext.getCurrentUser().getId()) - .eq(Connect::getUnionType, ConnectEnum.WECHAT.name()); - Connect connect = connectService.getOne(queryWrapper); + Connect connect = connectService.queryConnect( + ConnectQueryDTO.builder().userId(UserContext.getCurrentUser().getId()).unionType(ConnectEnum.WECHAT.name()).build() + ); if (connect == null) { return null; } @@ -189,8 +192,12 @@ public class WechatPlugin implements Payment { String attach = URLEncoder.createDefault().encode(JSONUtil.toJsonStr(payParam), StandardCharsets.UTF_8); WechatPaymentSetting setting = wechatPaymentSetting(); + String appid = setting.getServiceAppId(); + if (appid == null) { + throw new ServiceException(ResultCode.WECHAT_PAYMENT_NOT_SETTING); + } UnifiedOrderModel unifiedOrderModel = new UnifiedOrderModel() - .setAppid(setting.getAppId()) + .setAppid(appid) .setMchid(setting.getMchId()) .setDescription(cashierParam.getDetail()) .setOut_trade_no(outOrderNo) @@ -220,7 +227,7 @@ public class WechatPlugin implements Payment { String body = response.getBody(); JSONObject jsonObject = JSONUtil.parseObj(body); String prepayId = jsonObject.getStr("prepay_id"); - Map map = WxPayKit.jsApiCreateSign(setting.getAppId(), prepayId, setting.getApiclient_key()); + Map map = WxPayKit.jsApiCreateSign(appid, prepayId, setting.getApiclient_key()); log.info("唤起支付参数:{}", map); return ResultUtil.data(map); @@ -250,8 +257,12 @@ public class WechatPlugin implements Payment { String attach = URLEncoder.createDefault().encode(JSONUtil.toJsonStr(payParam), StandardCharsets.UTF_8); WechatPaymentSetting setting = wechatPaymentSetting(); + String appid = setting.getAppId(); + if (appid == null) { + throw new ServiceException(ResultCode.WECHAT_PAYMENT_NOT_SETTING); + } UnifiedOrderModel unifiedOrderModel = new UnifiedOrderModel() - .setAppid(setting.getAppId()) + .setAppid(appid) .setMchid(setting.getMchId()) .setDescription(cashierParam.getDetail()) .setOut_trade_no(outOrderNo) @@ -280,7 +291,7 @@ public class WechatPlugin implements Payment { if (verifySignature) { JSONObject jsonObject = JSONUtil.parseObj(response.getBody()); String prepayId = jsonObject.getStr("prepay_id"); - Map map = WxPayKit.appPrepayIdCreateSign(setting.getAppId(), + Map map = WxPayKit.appPrepayIdCreateSign(appid, setting.getMchId(), prepayId, setting.getApiclient_key(), SignType.HMACSHA256); @@ -313,8 +324,13 @@ public class WechatPlugin implements Payment { String attach = URLEncoder.createDefault().encode(JSONUtil.toJsonStr(payParam), StandardCharsets.UTF_8); WechatPaymentSetting setting = wechatPaymentSetting(); + + String appid = setting.getServiceAppId(); + if (appid == null) { + throw new ServiceException(ResultCode.WECHAT_PAYMENT_NOT_SETTING); + } UnifiedOrderModel unifiedOrderModel = new UnifiedOrderModel() - .setAppid(setting.getAppId()) + .setAppid(appid) .setMchid(setting.getMchId()) .setDescription(cashierParam.getDetail()) .setOut_trade_no(outOrderNo) @@ -359,10 +375,9 @@ public class WechatPlugin implements Payment { public ResultMessage mpPay(HttpServletRequest request, PayParam payParam) { try { - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(Connect::getUserId, UserContext.getCurrentUser().getId()) - .eq(Connect::getUnionType, ConnectEnum.WECHAT_MP_OPEN_ID.name()); - Connect connect = connectService.getOne(queryWrapper); + Connect connect = connectService.queryConnect( + ConnectQueryDTO.builder().userId(UserContext.getCurrentUser().getId()).unionType(ConnectEnum.WECHAT_MP_OPEN_ID.name()).build() + ); if (connect == null) { return null; } @@ -381,10 +396,9 @@ public class WechatPlugin implements Payment { //微信小程序,appid 需要单独获取,这里读取了联合登陆配置的appid ,实际场景小程序自动登录,所以这个appid是最为保险的做法 //如果有2开需求,这里需要调整,修改这个appid的获取途径即可 - WechatConnectSettingItem wechatConnectSettingItem = getWechatMPSetting(); - String appid = null; - if (wechatConnectSettingItem != null) { - appid = getWechatMPSetting().getAppId(); + String appid = wechatPaymentSetting().getMpAppId(); + if (appid == null) { + throw new ServiceException(ResultCode.WECHAT_PAYMENT_NOT_SETTING); } String attach = URLEncoder.createDefault().encode(JSONUtil.toJsonStr(payParam), StandardCharsets.UTF_8); @@ -686,28 +700,4 @@ public class WechatPlugin implements Payment { cipherText ); } - - - /** - * 获取微信小程序配置 - * - * @return - */ - private WechatConnectSettingItem getWechatMPSetting() { - Setting setting = settingService.get(SettingEnum.WECHAT_CONNECT.name()); - - WechatConnectSetting wechatConnectSetting = JSONUtil.toBean(setting.getSettingValue(), WechatConnectSetting.class); - - if (wechatConnectSetting == null) { - throw new ServiceException(ResultCode.WECHAT_CONNECT_NOT_EXIST); - } - //寻找对应对微信小程序登录配置 - for (WechatConnectSettingItem wechatConnectSettingItem : wechatConnectSetting.getWechatConnectSettingItems()) { - if (wechatConnectSettingItem.getClientType().equals(ClientTypeEnum.WECHAT_MP.name())) { - return wechatConnectSettingItem; - } - } - - throw new ServiceException(ResultCode.WECHAT_CONNECT_NOT_EXIST); - } } diff --git a/framework/src/main/java/cn/lili/modules/payment/service/PaymentService.java b/framework/src/main/java/cn/lili/modules/payment/service/PaymentService.java index 5ecef2a1..700dd1a1 100644 --- a/framework/src/main/java/cn/lili/modules/payment/service/PaymentService.java +++ b/framework/src/main/java/cn/lili/modules/payment/service/PaymentService.java @@ -1,10 +1,6 @@ package cn.lili.modules.payment.service; -import cn.lili.modules.order.order.entity.vo.PaymentLog; import cn.lili.modules.payment.kit.dto.PaymentSuccessParams; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; /** * 支付日志 业务层 @@ -29,13 +25,4 @@ public interface PaymentService { */ void adminPaySuccess(PaymentSuccessParams paymentSuccessParams); - - /** - * 获取支付日志 - * - * @param initPage - * @param initWrapper - * @return - */ - IPage page(Page initPage, QueryWrapper initWrapper); } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/payment/service/RefundLogService.java b/framework/src/main/java/cn/lili/modules/payment/service/RefundLogService.java index f4d56b64..dc505a10 100644 --- a/framework/src/main/java/cn/lili/modules/payment/service/RefundLogService.java +++ b/framework/src/main/java/cn/lili/modules/payment/service/RefundLogService.java @@ -10,4 +10,10 @@ import com.baomidou.mybatisplus.extension.service.IService; * @since 2020-12-19 09:25 */ public interface RefundLogService extends IService { + /** + * 根据售后sn查询退款日志 + * @param sn + * @return + */ + RefundLog queryByAfterSaleSn(String sn); } diff --git a/framework/src/main/java/cn/lili/modules/payment/serviceimpl/PaymentServiceImpl.java b/framework/src/main/java/cn/lili/modules/payment/serviceimpl/PaymentServiceImpl.java index 97d8a242..a601d6d1 100644 --- a/framework/src/main/java/cn/lili/modules/payment/serviceimpl/PaymentServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/payment/serviceimpl/PaymentServiceImpl.java @@ -1,20 +1,14 @@ package cn.lili.modules.payment.serviceimpl; -import cn.lili.modules.order.order.entity.vo.PaymentLog; -import cn.lili.modules.order.order.mapper.OrderMapper; import cn.lili.modules.payment.kit.CashierSupport; import cn.lili.modules.payment.kit.dto.PaymentSuccessParams; import cn.lili.modules.payment.kit.params.CashierExecute; import cn.lili.modules.payment.service.PaymentService; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import javax.annotation.Resource; import java.util.List; /** @@ -32,8 +26,6 @@ public class PaymentServiceImpl implements PaymentService { private List cashierExecutes; @Autowired private CashierSupport cashierSupport; - @Resource - private OrderMapper orderMapper; @Override public void success(PaymentSuccessParams paymentSuccessParams) { @@ -60,9 +52,4 @@ public class PaymentServiceImpl implements PaymentService { cashierExecute.paymentSuccess(paymentSuccessParams); } } - - @Override - public IPage page(Page initPage, QueryWrapper initWrapper) { - return orderMapper.queryPaymentLogs(initPage, initWrapper); - } } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/payment/serviceimpl/RefundLogServiceImpl.java b/framework/src/main/java/cn/lili/modules/payment/serviceimpl/RefundLogServiceImpl.java index 8a5e7d8c..6efc4f87 100644 --- a/framework/src/main/java/cn/lili/modules/payment/serviceimpl/RefundLogServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/payment/serviceimpl/RefundLogServiceImpl.java @@ -3,9 +3,8 @@ package cn.lili.modules.payment.serviceimpl; import cn.lili.modules.payment.entity.RefundLog; import cn.lili.modules.payment.mapper.RefundLogMapper; import cn.lili.modules.payment.service.RefundLogService; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import lombok.RequiredArgsConstructor; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -19,5 +18,8 @@ import org.springframework.transaction.annotation.Transactional; @Transactional(rollbackFor = Exception.class) public class RefundLogServiceImpl extends ServiceImpl implements RefundLogService { - + @Override + public RefundLog queryByAfterSaleSn(String sn) { + return this.getOne(new LambdaUpdateWrapper().eq(RefundLog::getAfterSaleNo, sn)); + } } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/permission/entity/vo/SystemLogVO.java b/framework/src/main/java/cn/lili/modules/permission/entity/vo/SystemLogVO.java index eb1651ab..8718de48 100644 --- a/framework/src/main/java/cn/lili/modules/permission/entity/vo/SystemLogVO.java +++ b/framework/src/main/java/cn/lili/modules/permission/entity/vo/SystemLogVO.java @@ -1,9 +1,18 @@ package cn.lili.modules.permission.entity.vo; import cn.lili.common.utils.ObjectUtil; +import cn.lili.elasticsearch.EsSuffix; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.ToString; +import lombok.experimental.Accessors; +import org.springframework.data.annotation.Id; +import org.springframework.data.elasticsearch.annotations.DateFormat; +import org.springframework.data.elasticsearch.annotations.Document; +import org.springframework.data.elasticsearch.annotations.Field; +import org.springframework.data.elasticsearch.annotations.FieldType; import java.io.Serializable; import java.util.Date; @@ -17,53 +26,70 @@ import java.util.Map; * @since 2020/12/2 17:50 */ @Data +@Document(indexName = "#{@elasticsearchProperties.indexPrefix}_" + EsSuffix.LOGS_INDEX_NAME) +@ToString +@NoArgsConstructor +@Accessors(chain = true) public class SystemLogVO implements Serializable { private static final long serialVersionUID = -8995552592401630086L; - + @Id @ApiModelProperty(value = "id") private String id; - @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") @ApiModelProperty(value = "日志记录时间") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @Field(type = FieldType.Date, format = DateFormat.basic_date_time) private Date createTime = new Date(); @ApiModelProperty(value = "请求用户") + @Field(type = FieldType.Text) private String username; @ApiModelProperty(value = "请求路径") + @Field(type = FieldType.Text) private String requestUrl; @ApiModelProperty(value = "请求参数") + @Field(type = FieldType.Text) private String requestParam; + @ApiModelProperty(value = "响应参数") + @Field(type = FieldType.Text) private String responseBody; @ApiModelProperty(value = "ip") + @Field(type = FieldType.Keyword) private String ip; @ApiModelProperty(value = "方法操作名称") + @Field(type = FieldType.Keyword) private String name; @ApiModelProperty(value = "请求类型") + @Field(type = FieldType.Keyword) private String requestType; @ApiModelProperty(value = "自定义日志内容") + @Field(type = FieldType.Text) private String customerLog; @ApiModelProperty(value = "ip信息") + @Field(type = FieldType.Text) private String ipInfo; @ApiModelProperty(value = "花费时间") + @Field(type = FieldType.Integer) private Integer costTime; @ApiModelProperty(value = "商家") + @Field(type = FieldType.Long) private Long storeId = -1L; /** diff --git a/framework/src/main/java/cn/lili/modules/permission/repository/SystemLogRepository.java b/framework/src/main/java/cn/lili/modules/permission/repository/SystemLogRepository.java new file mode 100644 index 00000000..49e221ec --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/permission/repository/SystemLogRepository.java @@ -0,0 +1,14 @@ +package cn.lili.modules.permission.repository; + +import cn.lili.modules.permission.entity.vo.SystemLogVO; +import org.springframework.data.elasticsearch.repository.ElasticsearchRepository; + +/** + * 日志 + * + * @author paulG + * @since 2021/12/13 + **/ +public interface SystemLogRepository extends ElasticsearchRepository { + +} diff --git a/framework/src/main/java/cn/lili/modules/permission/serviceimpl/SystemLogServiceImpl.java b/framework/src/main/java/cn/lili/modules/permission/serviceimpl/SystemLogServiceImpl.java index 8e6b48dd..1ea47de8 100644 --- a/framework/src/main/java/cn/lili/modules/permission/serviceimpl/SystemLogServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/permission/serviceimpl/SystemLogServiceImpl.java @@ -1,23 +1,31 @@ package cn.lili.modules.permission.serviceimpl; -import cn.lili.common.utils.StringUtils; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.text.CharSequenceUtil; import cn.lili.common.vo.PageVO; import cn.lili.common.vo.SearchVO; import cn.lili.modules.permission.entity.vo.SystemLogVO; +import cn.lili.modules.permission.repository.SystemLogRepository; import cn.lili.modules.permission.service.SystemLogService; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.elasticsearch.index.query.BoolQueryBuilder; +import org.elasticsearch.index.query.QueryBuilders; +import org.elasticsearch.search.sort.SortBuilders; +import org.elasticsearch.search.sort.SortOrder; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.data.domain.PageRequest; -import org.springframework.data.domain.Sort; -import org.springframework.data.mongodb.core.MongoTemplate; -import org.springframework.data.mongodb.core.query.Criteria; -import org.springframework.data.mongodb.core.query.Query; +import org.springframework.data.domain.Pageable; +import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate; +import org.springframework.data.elasticsearch.core.SearchHit; +import org.springframework.data.elasticsearch.core.SearchHits; +import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.List; -import java.util.regex.Pattern; +import java.util.stream.Collectors; /** * 系统日志 @@ -30,64 +38,88 @@ import java.util.regex.Pattern; public class SystemLogServiceImpl implements SystemLogService { @Autowired - private MongoTemplate mongoTemplate; + private SystemLogRepository systemLogRepository; + + /** + * ES + */ + @Autowired + @Qualifier("elasticsearchRestTemplate") + private ElasticsearchRestTemplate restTemplate; @Override public void saveLog(SystemLogVO systemLogVO) { - mongoTemplate.save(systemLogVO); + systemLogRepository.save(systemLogVO); } @Override public void deleteLog(List id) { - mongoTemplate.remove(new Query().addCriteria(Criteria.where("id").is(id)), SystemLogVO.class); + for (String s : id) { + systemLogRepository.deleteById(s); + } } @Override public void flushAll() { - mongoTemplate.dropCollection(SystemLogVO.class); + systemLogRepository.deleteAll(); } @Override public IPage queryLog(String storeId, String operatorName, String key, SearchVO searchVo, PageVO pageVO) { - Query query = new Query(); - - if (StringUtils.isNotEmpty(storeId)) { - query.addCriteria(Criteria.where("storeId").is(storeId)); + IPage iPage = new Page<>(); + NativeSearchQueryBuilder nativeSearchQueryBuilder = new NativeSearchQueryBuilder(); + if (pageVO != null) { + int pageNumber = pageVO.getPageNumber() - 1; + if (pageNumber < 0) { + pageNumber = 0; + } + Pageable pageable = PageRequest.of(pageNumber, pageVO.getPageSize()); + //分页 + nativeSearchQueryBuilder.withPageable(pageable); + iPage.setCurrent(pageVO.getPageNumber()); + iPage.setSize(pageVO.getPageSize()); } - if (StringUtils.isNotEmpty(operatorName)) { - query.addCriteria(Criteria.where("username").regex(Pattern.compile("^.*" + operatorName + ".*$", Pattern.CASE_INSENSITIVE))); + if (CharSequenceUtil.isNotEmpty(storeId)) { + nativeSearchQueryBuilder.withFilter(QueryBuilders.matchQuery("storeId", storeId)); } - if (StringUtils.isNotEmpty(key)) { - query.addCriteria(new Criteria().orOperator( - Criteria.where("requestUrl").regex(Pattern.compile("^.*" + key + ".*$", Pattern.CASE_INSENSITIVE)), - Criteria.where("requestParam").regex(Pattern.compile("^.*" + key + ".*$", Pattern.CASE_INSENSITIVE)), - Criteria.where("responseBody").regex(Pattern.compile("^.*" + key + ".*$", Pattern.CASE_INSENSITIVE)), - Criteria.where("name").regex(Pattern.compile("^.*" + key + ".*$", Pattern.CASE_INSENSITIVE)) - )); + if (CharSequenceUtil.isNotEmpty(operatorName)) { + nativeSearchQueryBuilder.withFilter(QueryBuilders.wildcardQuery("username", "*" + operatorName + "*")); + } + + if (CharSequenceUtil.isNotEmpty(key)) { + BoolQueryBuilder filterBuilder = new BoolQueryBuilder(); + filterBuilder.should(QueryBuilders.wildcardQuery("requestUrl", "*" + key + "*")) + .should(QueryBuilders.wildcardQuery("requestParam", "*" + key + "*")) + .should(QueryBuilders.wildcardQuery("responseBody", "*" + key + "*")) + .should(QueryBuilders.wildcardQuery("name", "*" + key + "*")); + nativeSearchQueryBuilder.withFilter(filterBuilder); } //时间有效性判定 if (searchVo.getConvertStartDate() != null && searchVo.getConvertEndDate() != null) { + BoolQueryBuilder filterBuilder = new BoolQueryBuilder(); //大于方法 - Criteria gt = Criteria.where("createTime").gte(searchVo.getConvertStartDate()); - //小于方法 - Criteria lt = Criteria.where("createTime").lte(searchVo.getConvertEndDate()); - query.addCriteria(new Criteria().andOperator(gt, lt)); + filterBuilder.must( + QueryBuilders.rangeQuery("createTime") + .gte(DateUtil.format(searchVo.getConvertStartDate(), "dd/MM/yyyy")) + .lte(DateUtil.format(searchVo.getConvertEndDate(), "dd/MM/yyyy")).format("dd/MM/yyyy||yyyy")); + nativeSearchQueryBuilder.withFilter(filterBuilder); } - IPage iPage = new Page<>(); + SearchHits searchResult = restTemplate.search(nativeSearchQueryBuilder.build(), SystemLogVO.class); - iPage.setTotal(mongoTemplate.count(query, SystemLogVO.class)); - query.with(PageRequest.of(pageVO.getMongoPageNumber(), pageVO.getPageSize())); + iPage.setTotal(searchResult.getTotalHits()); - query.with(Sort.by(Sort.Direction.DESC, "createTime")); + if (pageVO != null && CharSequenceUtil.isNotEmpty(pageVO.getOrder()) && CharSequenceUtil.isNotEmpty(pageVO.getSort())) { + nativeSearchQueryBuilder.withSort(SortBuilders.fieldSort(pageVO.getSort()).order(SortOrder.valueOf(pageVO.getOrder().toUpperCase()))); + } else { + nativeSearchQueryBuilder.withSort(SortBuilders.fieldSort("createTime").order(SortOrder.DESC)); + } - List systemLogVOS = mongoTemplate.find(query, SystemLogVO.class); - iPage.setCurrent(pageVO.getPageNumber()); - iPage.setSize(pageVO.getPageSize()); - iPage.setRecords(systemLogVOS); + + iPage.setRecords(searchResult.getSearchHits().stream().map(SearchHit::getContent).collect(Collectors.toList())); return iPage; } diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/dos/BasePromotions.java b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/BasePromotions.java new file mode 100644 index 00000000..f3366dde --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/BasePromotions.java @@ -0,0 +1,78 @@ +package cn.lili.modules.promotion.entity.dos; + +import cn.lili.modules.promotion.entity.enums.PromotionsScopeTypeEnum; +import cn.lili.modules.promotion.entity.enums.PromotionsStatusEnum; +import cn.lili.mybatis.BaseEntity; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springframework.data.elasticsearch.annotations.DateFormat; +import org.springframework.data.elasticsearch.annotations.Field; +import org.springframework.data.elasticsearch.annotations.FieldType; + +import javax.validation.constraints.NotEmpty; +import java.util.Date; + +/** + * 促销活动基础类 + * + * @author Chopper + * @since 2020-03-19 10:44 上午 + */ +@EqualsAndHashCode(callSuper = true) +@Data +public class BasePromotions extends BaseEntity { + + private static final long serialVersionUID = 7814832369110695758L; + + @ApiModelProperty(value = "商家名称,如果是平台,这个值为 platform") + private String storeName; + + @ApiModelProperty(value = "商家id,如果是平台,这个值为 platform") + private String storeId; + + @NotEmpty(message = "活动名称不能为空") + @ApiModelProperty(value = "活动名称", required = true) + private String promotionName; + + @ApiModelProperty(value = "活动开始时间", required = true) + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @Field(type = FieldType.Date, format = DateFormat.custom, pattern = "yyyy-MM-dd HH:mm:ss || yyyy-MM-dd || yyyy/MM/dd HH:mm:ss|| yyyy/MM/dd ||epoch_millis") + private Date startTime; + + @ApiModelProperty(value = "活动结束时间", required = true) + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @Field(type = FieldType.Date, format = DateFormat.custom, pattern = "yyyy-MM-dd HH:mm:ss || yyyy-MM-dd || yyyy/MM/dd HH:mm:ss|| yyyy/MM/dd ||epoch_millis") + private Date endTime; + + /** + * @see PromotionsScopeTypeEnum + */ + @ApiModelProperty(value = "关联范围类型") + private String scopeType = PromotionsScopeTypeEnum.PORTION_GOODS.name(); + + + @ApiModelProperty(value = "范围关联的id") + private String scopeId; + + + /** + * @return 促销状态 + * @see PromotionsStatusEnum + */ + public String getPromotionStatus() { + if (endTime == null) { + return startTime != null ? PromotionsStatusEnum.START.name() : PromotionsStatusEnum.CLOSE.name(); + } + Date now = new Date(); + if (now.before(startTime)) { + return PromotionsStatusEnum.NEW.name(); + } else if (endTime.before(now)) { + return PromotionsStatusEnum.END.name(); + } else if (now.before(endTime)) { + return PromotionsStatusEnum.START.name(); + } + return PromotionsStatusEnum.CLOSE.name(); + } +} diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/dos/Coupon.java b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/Coupon.java index 63bb9a3f..0a8f172d 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/dos/Coupon.java +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/Coupon.java @@ -1,10 +1,16 @@ package cn.lili.modules.promotion.entity.dos; -import cn.lili.modules.promotion.entity.dto.BasePromotion; +import cn.lili.modules.promotion.entity.enums.CouponRangeDayEnum; +import cn.lili.modules.promotion.entity.enums.PromotionsStatusEnum; +import cn.lili.modules.promotion.entity.vos.CouponVO; import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.ToString; +import org.springframework.beans.BeanUtils; /** @@ -13,15 +19,16 @@ import lombok.Data; * @author Chopper * @since 2020-03-19 10:44 上午 */ +@EqualsAndHashCode(callSuper = true) @Data @TableName("li_coupon") @ApiModel(value = "优惠券实体类") -public class Coupon extends BasePromotion { - +@ToString(callSuper = true) +@NoArgsConstructor +public class Coupon extends BasePromotions { private static final long serialVersionUID = 8372820376262437018L; - @ApiModelProperty(value = "优惠券名称") private String couponName; @@ -33,21 +40,12 @@ public class Coupon extends BasePromotion { @ApiModelProperty(value = "优惠券类型") private String couponType; - /** - * @see cn.lili.modules.promotion.entity.enums.CouponScopeTypeEnum - */ - @ApiModelProperty(value = "关联范围类型") - private String scopeType; - @ApiModelProperty(value = "面额") private Double price; @ApiModelProperty(value = "折扣") private Double couponDiscount; - @ApiModelProperty(value = "范围关联的id") - private String scopeId; - /** * @see cn.lili.modules.promotion.entity.enums.CouponGetEnum */ @@ -77,7 +75,6 @@ public class Coupon extends BasePromotion { /** * @see cn.lili.modules.promotion.entity.enums.CouponRangeDayEnum - * */ @ApiModelProperty(value = "时间范围类型") private String rangeDayType; @@ -85,4 +82,21 @@ public class Coupon extends BasePromotion { @ApiModelProperty(value = "有效期") private Integer effectiveDays; + public Coupon(CouponVO couponVO) { + BeanUtils.copyProperties(couponVO, this); + } + + + /** + * @return 促销状态 + * @see cn.lili.modules.promotion.entity.enums.PromotionsStatusEnum + */ + @Override + public String getPromotionStatus() { + if (this.rangeDayType != null && this.rangeDayType.equals(CouponRangeDayEnum.DYNAMICTIME.name()) + && (this.effectiveDays != null && this.effectiveDays > 0 && this.effectiveDays <= 365)) { + return PromotionsStatusEnum.START.name(); + } + return super.getPromotionStatus(); + } } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/dos/CouponActivity.java b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/CouponActivity.java index 2584a13e..fdc2615e 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/dos/CouponActivity.java +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/CouponActivity.java @@ -1,12 +1,12 @@ package cn.lili.modules.promotion.entity.dos; -import cn.lili.modules.promotion.entity.dto.BasePromotion; import cn.lili.modules.promotion.entity.enums.CouponActivitySendTypeEnum; import cn.lili.modules.promotion.entity.enums.CouponActivityTypeEnum; import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import lombok.EqualsAndHashCode; import javax.validation.constraints.NotNull; @@ -16,10 +16,11 @@ import javax.validation.constraints.NotNull; * @author Bulbasaur * @since 2020-03-19 10:44 上午 */ +@EqualsAndHashCode(callSuper = true) @Data @TableName("li_coupon_activity") @ApiModel(value = "优惠券活动实体类") -public class CouponActivity extends BasePromotion { +public class CouponActivity extends BasePromotions { /** * @see CouponActivityTypeEnum diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/dos/CouponActivityItem.java b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/CouponActivityItem.java index 78b9bfdb..68db91e8 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/dos/CouponActivityItem.java +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/CouponActivityItem.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import lombok.EqualsAndHashCode; /** * 优惠券活动实体类 @@ -12,6 +13,7 @@ import lombok.Data; * @author Bulbasaur * @since 2020-03-19 10:44 上午 */ +@EqualsAndHashCode(callSuper = true) @Data @TableName("li_coupon_activity_item") @ApiModel(value = "优惠券活动-优惠券关联实体类") diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/dos/FullDiscount.java b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/FullDiscount.java index c0d937cf..e6e18ed7 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/dos/FullDiscount.java +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/FullDiscount.java @@ -1,6 +1,5 @@ package cn.lili.modules.promotion.entity.dos; -import cn.lili.modules.promotion.entity.dto.BasePromotion; import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -21,7 +20,7 @@ import javax.validation.constraints.NotNull; @Data @TableName("li_full_discount") @ApiModel(value = "满优惠活动") -public class FullDiscount extends BasePromotion { +public class FullDiscount extends BasePromotions { private static final long serialVersionUID = 430433787214894166L; @@ -31,34 +30,34 @@ public class FullDiscount extends BasePromotion { private Double fullMoney; @ApiModelProperty(value = "活动是否减现金") - private Boolean isFullMinus; + private Boolean fullMinusFlag; @ApiModelProperty(value = "减现金") private Double fullMinus; @ApiModelProperty(value = "是否打折") - private Boolean isFullRate; + private Boolean fullRateFlag; @ApiModelProperty(value = "打折") private Double fullRate; @ApiModelProperty(value = "是否赠送积分") - private Boolean isPoint; + private Boolean pointFlag; @ApiModelProperty(value = "赠送多少积分") private Integer point; @ApiModelProperty(value = "是否包邮") - private Boolean isFreeFreight; + private Boolean freeFreightFlag; @ApiModelProperty(value = "是否有赠品") - private Boolean isGift; + private Boolean giftFlag; @ApiModelProperty(value = "赠品id") private String giftId; @ApiModelProperty(value = "是否赠优惠券") - private Boolean isCoupon; + private Boolean couponFlag; @ApiModelProperty(value = "优惠券id") private String couponId; @@ -71,45 +70,45 @@ public class FullDiscount extends BasePromotion { private String description; - public Boolean getIsFullMinus() { - if (isFullMinus == null) { + public Boolean getFullMinusFlag() { + if (fullMinusFlag == null) { return false; } - return isFullMinus; + return fullMinusFlag; } - public Boolean getIsFullRate() { - if (isFullRate == null) { + public Boolean getFullRateFlag() { + if (fullRateFlag == null) { return false; } - return isFullRate; + return fullRateFlag; } - public Boolean getIsPoint() { - if (isPoint == null) { + public Boolean getPointFlag() { + if (pointFlag == null) { return false; } - return isPoint; + return pointFlag; } - public Boolean getIsFreeFreight() { - if (isFreeFreight == null) { + public Boolean getFreeFreightFlag() { + if (freeFreightFlag == null) { return false; } - return isFreeFreight; + return freeFreightFlag; } - public Boolean getIsGift() { - if (isGift == null) { + public Boolean getGiftFlag() { + if (giftFlag == null) { return false; } - return isGift; + return giftFlag; } - public Boolean getIsCoupon() { - if (isCoupon == null) { + public Boolean getCouponFlag() { + if (couponFlag == null) { return false; } - return isCoupon; + return couponFlag; } } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/dos/KanjiaActivity.java b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/KanjiaActivity.java index 88f79ea9..4d5db44d 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/dos/KanjiaActivity.java +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/KanjiaActivity.java @@ -6,14 +6,16 @@ import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import lombok.EqualsAndHashCode; /** * 砍价活动参与实体类 * * @author qiuqiu - * @date 2020-7-1 10:44 上午 + * @since 2020-7-1 10:44 上午 */ +@EqualsAndHashCode(callSuper = true) @Data @TableName("li_kanjia_activity") @ApiModel(value = "砍价活动参与对象") diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/dos/KanjiaActivityGoods.java b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/KanjiaActivityGoods.java index 4c87dd86..8f6626ed 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/dos/KanjiaActivityGoods.java +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/KanjiaActivityGoods.java @@ -1,10 +1,10 @@ package cn.lili.modules.promotion.entity.dos; -import cn.lili.modules.promotion.entity.dto.BasePromotion; import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import lombok.EqualsAndHashCode; import javax.validation.constraints.NotEmpty; @@ -14,10 +14,11 @@ import javax.validation.constraints.NotEmpty; * @author qiuqiu * @date 2020-7-1 10:44 上午 */ +@EqualsAndHashCode(callSuper = true) @Data @TableName("li_kanjia_activity_goods") @ApiModel(value = "砍价活动商品对象") -public class KanjiaActivityGoods extends BasePromotion { +public class KanjiaActivityGoods extends BasePromotions { private static final long serialVersionUID = 6694714877345423488L; @@ -34,6 +35,10 @@ public class KanjiaActivityGoods extends BasePromotion { @ApiModelProperty(value = "货品id") @NotEmpty(message = "货品id不能为空") + private String goodsId; + + @ApiModelProperty(value = "货品SkuId") + @NotEmpty(message = "货品SkuId不能为空") private String skuId; @ApiModelProperty(value = "货品名称") diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/dos/MemberCoupon.java b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/MemberCoupon.java index 220d0de2..6eeff349 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/dos/MemberCoupon.java +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/MemberCoupon.java @@ -3,14 +3,19 @@ package cn.lili.modules.promotion.entity.dos; import cn.hutool.core.date.DateField; import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; -import cn.lili.mybatis.BaseEntity; import cn.lili.modules.promotion.entity.enums.CouponRangeDayEnum; import cn.lili.modules.promotion.entity.enums.MemberCouponStatusEnum; +import cn.lili.modules.promotion.entity.enums.PromotionsScopeTypeEnum; +import cn.lili.mybatis.BaseEntity; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springframework.data.elasticsearch.annotations.DateFormat; +import org.springframework.data.elasticsearch.annotations.Field; +import org.springframework.data.elasticsearch.annotations.FieldType; import java.util.Date; @@ -20,6 +25,7 @@ import java.util.Date; * @author Chopper * @since 2020-03-19 10:44 上午 */ +@EqualsAndHashCode(callSuper = true) @Data @TableName("li_member_coupon") @ApiModel(value = "会员优惠券") @@ -52,7 +58,7 @@ public class MemberCoupon extends BaseEntity { private String memberId; /** - * @see cn.lili.modules.promotion.entity.enums.CouponScopeTypeEnum + * @see PromotionsScopeTypeEnum */ @ApiModelProperty(value = "关联范围类型") private String scopeType; @@ -71,10 +77,12 @@ public class MemberCoupon extends BaseEntity { @ApiModelProperty(value = "使用起始时间") @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @Field(type = FieldType.Date, format = DateFormat.custom, pattern = "yyyy-MM-dd HH:mm:ss || yyyy-MM-dd || yyyy/MM/dd HH:mm:ss|| yyyy/MM/dd ||epoch_millis") private Date startTime; @ApiModelProperty(value = "使用截止时间") @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @Field(type = FieldType.Date, format = DateFormat.custom, pattern = "yyyy-MM-dd HH:mm:ss || yyyy-MM-dd || yyyy/MM/dd HH:mm:ss|| yyyy/MM/dd ||epoch_millis") private Date endTime; /** * @see cn.lili.modules.promotion.entity.enums.CouponGetEnum @@ -83,13 +91,14 @@ public class MemberCoupon extends BaseEntity { private String getType; @ApiModelProperty(value = "是否是平台优惠券") - private Boolean isPlatform; + private Boolean platformFlag; @ApiModelProperty(value = "店铺承担比例") private Double storeCommission; @ApiModelProperty(value = "核销时间") @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @Field(type = FieldType.Date, format = DateFormat.custom, pattern = "yyyy-MM-dd HH:mm:ss || yyyy-MM-dd || yyyy/MM/dd HH:mm:ss|| yyyy/MM/dd ||epoch_millis") private Date consumptionTime; /** diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/dos/Pintuan.java b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/Pintuan.java index a61acf89..a7b75ff5 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/dos/Pintuan.java +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/Pintuan.java @@ -1,6 +1,5 @@ package cn.lili.modules.promotion.entity.dos; -import cn.lili.modules.promotion.entity.dto.BasePromotion; import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -19,7 +18,7 @@ import javax.validation.constraints.NotNull; @Data @TableName("li_pintuan") @ApiModel(value = "拼团") -public class Pintuan extends BasePromotion { +public class Pintuan extends BasePromotions { private static final long serialVersionUID = -8465716592648602604L; diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/dos/PointsGoods.java b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/PointsGoods.java index bf622f95..8239ac39 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/dos/PointsGoods.java +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/PointsGoods.java @@ -1,11 +1,11 @@ package cn.lili.modules.promotion.entity.dos; -import cn.lili.modules.promotion.entity.dto.BasePromotion; import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; import lombok.Data; +import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; @@ -15,18 +15,28 @@ import lombok.NoArgsConstructor; * @author paulG * @since 2020-03-19 10:44 上午 **/ +@EqualsAndHashCode(callSuper = true) @Data @TableName("li_points_goods") @ApiModel(value = "积分商品") @AllArgsConstructor @NoArgsConstructor -public class PointsGoods extends BasePromotion { +public class PointsGoods extends BasePromotions { private static final long serialVersionUID = 1313207311581661571L; @ApiModelProperty(value = "商品编号") + private String goodsId; + + @ApiModelProperty(value = "商品sku编号") private String skuId; + @ApiModelProperty(value = "商品名称") + private String goodsName; + + @ApiModelProperty(value = "商品原价") + private Double originalPrice; + @ApiModelProperty(value = "结算价格") private Double settlementPrice; @@ -36,6 +46,9 @@ public class PointsGoods extends BasePromotion { @ApiModelProperty(value = "分类名称") private String pointsGoodsCategoryName; + @ApiModelProperty(value = "缩略图") + private String thumbnail; + @ApiModelProperty(value = "活动库存数量") private Integer activeStock; diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/dos/PromotionGoods.java b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/PromotionGoods.java index 08c89d9e..8482ee60 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/dos/PromotionGoods.java +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/PromotionGoods.java @@ -2,15 +2,20 @@ package cn.lili.modules.promotion.entity.dos; import cn.hutool.core.bean.BeanUtil; import cn.lili.common.enums.PromotionTypeEnum; -import cn.lili.mybatis.BaseEntity; import cn.lili.modules.goods.entity.dos.GoodsSku; -import cn.lili.modules.promotion.entity.enums.PromotionStatusEnum; +import cn.lili.modules.promotion.entity.dto.KanjiaActivityGoodsDTO; +import cn.lili.modules.promotion.entity.enums.PromotionsScopeTypeEnum; +import cn.lili.mybatis.BaseEntity; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; +import org.springframework.data.elasticsearch.annotations.DateFormat; +import org.springframework.data.elasticsearch.annotations.Field; +import org.springframework.data.elasticsearch.annotations.FieldType; import java.util.Date; @@ -20,6 +25,7 @@ import java.util.Date; * @author Chopper * @since 2020-03-19 10:44 上午 */ +@EqualsAndHashCode(callSuper = true) @Data @TableName("li_promotion_goods") @ApiModel(value = "促销商品") @@ -34,10 +40,13 @@ public class PromotionGoods extends BaseEntity { @ApiModelProperty(value = "商家名称") private String storeName; - @ApiModelProperty(value = "货品id") + @ApiModelProperty(value = "商品id") + private String goodsId; + + @ApiModelProperty(value = "商品SkuId") private String skuId; - @ApiModelProperty(value = "货品名称") + @ApiModelProperty(value = "商品名称") private String goodsName; @ApiModelProperty(value = "缩略图") @@ -45,10 +54,12 @@ public class PromotionGoods extends BaseEntity { @ApiModelProperty(value = "活动开始时间") @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @Field(type = FieldType.Date, format = DateFormat.custom, pattern = "yyyy-MM-dd HH:mm:ss || yyyy-MM-dd || yyyy/MM/dd HH:mm:ss|| yyyy/MM/dd ||epoch_millis") private Date startTime; @ApiModelProperty(value = "活动结束时间") @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @Field(type = FieldType.Date, format = DateFormat.custom, pattern = "yyyy-MM-dd HH:mm:ss || yyyy-MM-dd || yyyy/MM/dd HH:mm:ss|| yyyy/MM/dd ||epoch_millis") private Date endTime; @ApiModelProperty(value = "活动id") @@ -72,31 +83,65 @@ public class PromotionGoods extends BaseEntity { @ApiModelProperty(value = "卖出的商品数量") private Integer num; + @ApiModelProperty(value = "原价") + private Double originalPrice; + @ApiModelProperty(value = "促销价格") private Double price; + @ApiModelProperty(value = "兑换积分") + private Long points; + @ApiModelProperty(value = "限购数量") private Integer limitNum; @ApiModelProperty(value = "促销库存") private Integer quantity; - /** - * @see PromotionStatusEnum - */ - @ApiModelProperty(value = "状态") - private String promotionStatus; - @ApiModelProperty(value = "分类path") private String categoryPath; + /** + * @see PromotionsScopeTypeEnum + */ + @ApiModelProperty(value = "关联范围类型") + private String scopeType = PromotionsScopeTypeEnum.PORTION_GOODS.name(); + + + @ApiModelProperty(value = "范围关联的id") + private String scopeId; + public PromotionGoods(GoodsSku sku) { if (sku != null) { - String oldId = this.getId(); - BeanUtil.copyProperties(sku, this); - this.setSkuId(sku.getId()); - this.setId(oldId); + BeanUtil.copyProperties(sku, this, "id", "price"); + this.skuId = sku.getId(); + this.originalPrice = sku.getPrice(); } } + public PromotionGoods(PointsGoods pointsGoods, GoodsSku sku) { + if (pointsGoods != null) { + BeanUtil.copyProperties(sku, this, "id"); + BeanUtil.copyProperties(pointsGoods, this, "id"); + this.promotionId = pointsGoods.getId(); + this.quantity = pointsGoods.getActiveStock(); + this.originalPrice = sku.getPrice(); + this.promotionType = PromotionTypeEnum.POINTS_GOODS.name(); + this.scopeId = sku.getId(); + } + } + + + public PromotionGoods(KanjiaActivityGoodsDTO kanjiaActivityGoodsDTO) { + if (kanjiaActivityGoodsDTO != null) { + BeanUtil.copyProperties(kanjiaActivityGoodsDTO, this, "id"); + BeanUtil.copyProperties(kanjiaActivityGoodsDTO.getGoodsSku(), this, "id"); + this.setQuantity(kanjiaActivityGoodsDTO.getStock()); + this.setPromotionId(kanjiaActivityGoodsDTO.getId()); + this.setPromotionType(PromotionTypeEnum.KANJIA.name()); + this.setTitle(PromotionTypeEnum.KANJIA.name() + "-" + kanjiaActivityGoodsDTO.getGoodsName()); + this.setScopeType(PromotionsScopeTypeEnum.PORTION_GOODS.name()); + this.setPromotionType(PromotionTypeEnum.KANJIA.name()); + } + } } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/dos/Seckill.java b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/Seckill.java index 3c6e770f..fbe4232d 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/dos/Seckill.java +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/Seckill.java @@ -3,8 +3,8 @@ package cn.lili.modules.promotion.entity.dos; import cn.hutool.core.date.DateField; import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; -import cn.lili.modules.promotion.entity.dto.BasePromotion; -import cn.lili.modules.promotion.entity.enums.PromotionStatusEnum; +import cn.lili.modules.promotion.entity.vos.SeckillVO; +import cn.lili.modules.promotion.tools.PromotionTools; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModel; @@ -12,6 +12,10 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; +import org.springframework.beans.BeanUtils; +import org.springframework.data.elasticsearch.annotations.DateFormat; +import org.springframework.data.elasticsearch.annotations.Field; +import org.springframework.data.elasticsearch.annotations.FieldType; import javax.validation.constraints.NotNull; import java.util.Date; @@ -27,13 +31,14 @@ import java.util.Date; @TableName("li_seckill") @ApiModel(value = "秒杀活动活动") @NoArgsConstructor -public class Seckill extends BasePromotion { +public class Seckill extends BasePromotions { private static final long serialVersionUID = -9116425737163730836L; @NotNull(message = "请填写报名截止时间") @ApiModelProperty(value = "报名截至时间", required = true) @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @Field(type = FieldType.Date, format = DateFormat.custom, pattern = "yyyy-MM-dd HH:mm:ss || yyyy-MM-dd || yyyy/MM/dd HH:mm:ss|| yyyy/MM/dd ||epoch_millis") private Date applyEndTime; @ApiModelProperty(value = "申请规则") @@ -52,21 +57,22 @@ public class Seckill extends BasePromotion { @ApiModelProperty(value = "商品数量") private Integer goodsNum; - public Seckill(int day,String hours,String seckillRule){ + public Seckill(int day, String hours, String seckillRule) { //默认创建*天后的秒杀活动 - DateTime dateTime= DateUtil.beginOfDay(DateUtil.offset(new DateTime(), DateField.DAY_OF_YEAR, day)); - this.applyEndTime=dateTime; - this.hours=hours; - this.seckillRule=seckillRule; - this.goodsNum=0; - + DateTime dateTime = DateUtil.beginOfDay(DateUtil.offset(new DateTime(), DateField.DAY_OF_YEAR, day)); + this.applyEndTime = dateTime; + this.hours = hours; + this.seckillRule = seckillRule; + this.goodsNum = 0; //BasePromotion - setStoreName("platform"); - setStoreId("platform"); - setPromotionName(DateUtil.formatDate(dateTime)+" 秒杀活动"); - setStartTime(dateTime); - setEndTime(DateUtil.endOfDay(dateTime)); - setPromotionStatus(PromotionStatusEnum.NEW.name()); + this.setStoreName(PromotionTools.PLATFORM_NAME); + this.setStoreId(PromotionTools.PLATFORM_ID); + this.setPromotionName(DateUtil.formatDate(dateTime) + " 秒杀活动"); + this.setStartTime(dateTime); + this.setEndTime(DateUtil.endOfDay(dateTime)); + } + public Seckill(SeckillVO seckillVO) { + BeanUtils.copyProperties(seckillVO, this); } } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/dos/SeckillApply.java b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/SeckillApply.java index 6254efea..7d011d32 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/dos/SeckillApply.java +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/SeckillApply.java @@ -1,5 +1,6 @@ package cn.lili.modules.promotion.entity.dos; +import cn.lili.modules.promotion.entity.enums.PromotionsApplyStatusEnum; import cn.lili.mybatis.BaseEntity; import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.annotations.ApiModel; @@ -58,7 +59,7 @@ public class SeckillApply extends BaseEntity { private Integer quantity; /** - * @see cn.lili.modules.promotion.entity.enums.PromotionApplyStatusEnum + * @see PromotionsApplyStatusEnum */ @ApiModelProperty(value = "APPLY(\"申请\"), PASS(\"通过\"), REFUSE(\"拒绝\")") private String promotionApplyStatus; diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/dto/BasePromotion.java b/framework/src/main/java/cn/lili/modules/promotion/entity/dto/BasePromotion.java deleted file mode 100644 index f9e5468e..00000000 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/dto/BasePromotion.java +++ /dev/null @@ -1,48 +0,0 @@ -package cn.lili.modules.promotion.entity.dto; - -import cn.lili.modules.promotion.entity.enums.PromotionStatusEnum; -import cn.lili.mybatis.BaseEntity; -import com.fasterxml.jackson.annotation.JsonFormat; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import javax.validation.constraints.NotEmpty; -import java.util.Date; - -/** - * 促销活动基础类 - * - * @author Chopper - * @since 2020-03-19 10:44 上午 - */ -@EqualsAndHashCode(callSuper = true) -@Data -public class BasePromotion extends BaseEntity { - - private static final long serialVersionUID = 7814832369110695758L; - - @ApiModelProperty(value = "商家名称,如果是平台,这个值为 platform") - private String storeName; - - @ApiModelProperty(value = "商家id,如果是平台,这个值为 platform") - private String storeId; - - @NotEmpty(message = "活动名称不能为空") - @ApiModelProperty(value = "活动名称", required = true) - private String promotionName; - - @ApiModelProperty(value = "活动开始时间", required = true) - @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") - private Date startTime; - - @ApiModelProperty(value = "活动结束时间", required = true) - @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") - private Date endTime; - - /** - * @see PromotionStatusEnum - */ - @ApiModelProperty(value = "活动状态") - private String promotionStatus; -} diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/dto/CouponActivityDTO.java b/framework/src/main/java/cn/lili/modules/promotion/entity/dto/CouponActivityDTO.java index 7ffb3fb0..4175c469 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/dto/CouponActivityDTO.java +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/dto/CouponActivityDTO.java @@ -4,6 +4,7 @@ import cn.lili.modules.promotion.entity.dos.CouponActivity; import cn.lili.modules.promotion.entity.dos.CouponActivityItem; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import lombok.EqualsAndHashCode; import java.util.List; @@ -13,6 +14,7 @@ import java.util.List; * @author Bulbasaur * @since 2021/5/21 7:16 下午 */ +@EqualsAndHashCode(callSuper = true) @Data public class CouponActivityDTO extends CouponActivity { diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/dto/KanjiaActivityGoodsDTO.java b/framework/src/main/java/cn/lili/modules/promotion/entity/dto/KanjiaActivityGoodsDTO.java index 87e57d88..b8e5cc99 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/dto/KanjiaActivityGoodsDTO.java +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/dto/KanjiaActivityGoodsDTO.java @@ -5,6 +5,7 @@ import cn.lili.modules.goods.entity.dos.GoodsSku; import cn.lili.modules.promotion.entity.dos.KanjiaActivityGoods; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import lombok.EqualsAndHashCode; import java.io.Serializable; @@ -12,8 +13,9 @@ import java.io.Serializable; * 砍价活动商品DTO * * @author qiuqiu - * @date 2020/8/21 + * @since 2020/8/21 **/ +@EqualsAndHashCode(callSuper = true) @Data public class KanjiaActivityGoodsDTO extends KanjiaActivityGoods implements Serializable { diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/dto/PromotionGoodsDTO.java b/framework/src/main/java/cn/lili/modules/promotion/entity/dto/PromotionGoodsDTO.java index 63e034fb..b962e62e 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/dto/PromotionGoodsDTO.java +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/dto/PromotionGoodsDTO.java @@ -4,6 +4,7 @@ import cn.lili.modules.goods.entity.dos.GoodsSku; import cn.lili.modules.promotion.entity.dos.PromotionGoods; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; @@ -13,15 +14,13 @@ import lombok.NoArgsConstructor; * @author paulG * @since 2020/10/9 **/ +@EqualsAndHashCode(callSuper = true) @Data @NoArgsConstructor public class PromotionGoodsDTO extends PromotionGoods { private static final long serialVersionUID = 9206970681612883421L; - @ApiModelProperty(value = "原价") - private Double originPrice; - @ApiModelProperty(value = "商品id") private String goodsId; diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/dto/search/BasePromotionsSearchParams.java b/framework/src/main/java/cn/lili/modules/promotion/entity/dto/search/BasePromotionsSearchParams.java new file mode 100644 index 00000000..b07aea26 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/dto/search/BasePromotionsSearchParams.java @@ -0,0 +1,75 @@ +package cn.lili.modules.promotion.entity.dto.search; + +import cn.hutool.core.text.CharSequenceUtil; +import cn.lili.modules.promotion.entity.enums.PromotionsScopeTypeEnum; +import cn.lili.modules.promotion.entity.enums.PromotionsStatusEnum; +import cn.lili.modules.promotion.tools.PromotionTools; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Arrays; +import java.util.Date; + +/** + * @author paulG + * @since 2021/11/18 + **/ +@Data +public class BasePromotionsSearchParams { + + @ApiModelProperty(value = "活动id") + private String id; + + @ApiModelProperty(value = "活动开始时间") + private Long startTime; + + @ApiModelProperty(value = "活动结束时间") + private Long endTime; + + /** + * @see PromotionsStatusEnum + */ + @ApiModelProperty(value = "活动状态 如需同时判断多个活动状态','分割") + private String promotionStatus; + + /** + * @see PromotionsScopeTypeEnum + */ + @ApiModelProperty(value = "关联范围类型") + private String scopeType; + + @ApiModelProperty(value = "店铺编号 如有多个','分割") + private String storeId; + + public QueryWrapper queryWrapper() { + QueryWrapper queryWrapper = new QueryWrapper<>(); + + if (CharSequenceUtil.isNotEmpty(id)) { + queryWrapper.eq("id", id); + } + if (startTime != null) { + queryWrapper.ge("start_time", new Date(startTime)); + } + if (endTime != null) { + queryWrapper.le("end_time", new Date(endTime)); + } + if (CharSequenceUtil.isNotEmpty(promotionStatus)) { + queryWrapper.and(i -> { + for (String status : promotionStatus.split(",")) { + i.or(PromotionTools.queryPromotionStatus(PromotionsStatusEnum.valueOf(status))); + } + }); + } + if (CharSequenceUtil.isNotEmpty(scopeType)) { + queryWrapper.eq("scope_type", scopeType); + } + if (CharSequenceUtil.isNotEmpty(storeId)) { + queryWrapper.in("store_id", Arrays.asList(storeId.split(","))); + } + queryWrapper.eq("delete_flag", false); + return queryWrapper; + } + + +} diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/dto/search/CouponSearchParams.java b/framework/src/main/java/cn/lili/modules/promotion/entity/dto/search/CouponSearchParams.java new file mode 100644 index 00000000..f71a198c --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/dto/search/CouponSearchParams.java @@ -0,0 +1,141 @@ +package cn.lili.modules.promotion.entity.dto.search; + +import cn.hutool.core.text.CharSequenceUtil; +import cn.lili.modules.promotion.entity.enums.*; +import cn.lili.modules.promotion.tools.PromotionTools; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; +import java.util.Date; + +/** + * 优惠券查询通用类 + * + * @author paulG + * @since 2020/8/14 + **/ +@EqualsAndHashCode(callSuper = true) +@Data +public class CouponSearchParams extends BasePromotionsSearchParams implements Serializable { + + private static final long serialVersionUID = 4566880169478260409L; + + private static final String PRICE_COLUMN = "price"; + private static final String RANGE_DAY_TYPE_COLUMN = "range_day_type"; + + @ApiModelProperty(value = "会员id") + private String memberId; + + @ApiModelProperty(value = "优惠券名称") + private String couponName; + /** + * POINT("打折"), PRICE("减免现金"); + * + * @see cn.lili.modules.promotion.entity.enums.CouponTypeEnum + */ + @ApiModelProperty(value = "活动类型") + private String couponType; + /** + * @see PromotionsScopeTypeEnum + */ + @ApiModelProperty(value = "关联范围类型") + private String scopeType; + @ApiModelProperty(value = "范围关联的id") + private String scopeId; + @ApiModelProperty(value = "面额,可以为范围,如10_1000") + private String price; + @ApiModelProperty(value = "发行数量,可以为范围,如10_1000") + private String publishNum; + @ApiModelProperty(value = "已被领取的数量,可以为范围,如10_1000") + private String receivedNum; + /** + * @see cn.lili.modules.promotion.entity.enums.CouponGetEnum + */ + @ApiModelProperty(value = "优惠券类型,分为免费领取和活动赠送") + private String getType; + + + @Override + public QueryWrapper queryWrapper() { + QueryWrapper queryWrapper = super.queryWrapper(); + if (CharSequenceUtil.isNotEmpty(couponName)) { + queryWrapper.like("coupon_name", couponName); + } + if (memberId != null) { + queryWrapper.eq("member_id", memberId); + } + if (CharSequenceUtil.isNotEmpty(couponType)) { + queryWrapper.eq("coupon_type", CouponTypeEnum.valueOf(couponType).name()); + } + if (CharSequenceUtil.isNotEmpty(scopeType)) { + queryWrapper.eq("scope_type", PromotionsScopeTypeEnum.valueOf(scopeType).name()); + } + if (CharSequenceUtil.isNotEmpty(scopeId)) { + queryWrapper.eq("scope_id", scopeId); + } + if (CharSequenceUtil.isNotEmpty(getType)) { + queryWrapper.eq("get_type", CouponGetEnum.valueOf(getType).name()); + } + if (CharSequenceUtil.isNotEmpty(this.getPromotionStatus())) { + switch (PromotionsStatusEnum.valueOf(this.getPromotionStatus())) { + case NEW: + queryWrapper.nested(i -> i.gt(PromotionTools.START_TIME_COLUMN, new Date()).gt(PromotionTools.END_TIME_COLUMN, new Date())); + break; + case START: + queryWrapper.nested(i -> i.le(PromotionTools.START_TIME_COLUMN, new Date()).ge(PromotionTools.END_TIME_COLUMN, new Date())) + .or(i -> i.gt("effective_days", 0).eq(RANGE_DAY_TYPE_COLUMN, CouponRangeDayEnum.DYNAMICTIME.name())); + break; + case END: + queryWrapper.nested(i -> i.lt(PromotionTools.START_TIME_COLUMN, new Date()).lt(PromotionTools.END_TIME_COLUMN, new Date())); + break; + case CLOSE: + queryWrapper.nested(n -> n.nested(i -> i.isNull(PromotionTools.START_TIME_COLUMN).isNull(PromotionTools.END_TIME_COLUMN) + .eq(RANGE_DAY_TYPE_COLUMN, CouponRangeDayEnum.FIXEDTIME.name())). + or(i -> i.le("effective_days", 0).eq(RANGE_DAY_TYPE_COLUMN, CouponRangeDayEnum.DYNAMICTIME.name()))); + break; + default: + } + } + if (this.getStartTime() != null) { + queryWrapper.ge("start_time", new Date(this.getEndTime())); + } + if (this.getEndTime() != null) { + queryWrapper.le("end_time", new Date(this.getEndTime())); + } + queryWrapper.eq("delete_flag", false); + this.betweenWrapper(queryWrapper); + queryWrapper.orderByDesc("create_time"); + return queryWrapper; + } + + private void betweenWrapper(QueryWrapper queryWrapper) { + if (CharSequenceUtil.isNotEmpty(publishNum)) { + String[] s = publishNum.split("_"); + if (s.length > 1) { + queryWrapper.between("publish_num", s[0], s[1]); + } else { + queryWrapper.ge("publish_num", s[0]); + } + } + if (CharSequenceUtil.isNotEmpty(price)) { + String[] s = price.split("_"); + if (s.length > 1) { + queryWrapper.between(PRICE_COLUMN, s[0], s[1]); + } else { + queryWrapper.ge(PRICE_COLUMN, s[0]); + } + } + if (CharSequenceUtil.isNotEmpty(receivedNum)) { + String[] s = receivedNum.split("_"); + if (s.length > 1) { + queryWrapper.between("received_num", s[0], s[1]); + } else { + queryWrapper.ge("received_num", s[0]); + } + } + } + +} diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/dto/search/FullDiscountSearchParams.java b/framework/src/main/java/cn/lili/modules/promotion/entity/dto/search/FullDiscountSearchParams.java new file mode 100644 index 00000000..c49c8e24 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/dto/search/FullDiscountSearchParams.java @@ -0,0 +1,48 @@ +package cn.lili.modules.promotion.entity.dto.search; + +import cn.hutool.core.text.CharSequenceUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; + +/** + * 满优惠查询通用类 + * + * @author paulG + * @since 2020/8/21 + **/ +@EqualsAndHashCode(callSuper = true) +@Data +public class FullDiscountSearchParams extends BasePromotionsSearchParams implements Serializable { + + private static final long serialVersionUID = -4052716630253333681L; + + + @ApiModelProperty(value = "活动名称") + private String promotionName; + + @ApiModelProperty(value = "是否赠优惠券") + private Boolean couponFlag; + + @ApiModelProperty(value = "优惠券id") + private String couponId; + + @Override + public QueryWrapper queryWrapper() { + QueryWrapper queryWrapper = super.queryWrapper(); + if (CharSequenceUtil.isNotEmpty(promotionName)) { + queryWrapper.like("title", promotionName); + } + if (couponFlag != null) { + queryWrapper.eq("coupon_flag", couponFlag); + } + if (CharSequenceUtil.isNotEmpty(couponId)) { + queryWrapper.eq("coupon_id", couponId); + } + return queryWrapper; + } + +} diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/dto/KanJiaActivityLogQuery.java b/framework/src/main/java/cn/lili/modules/promotion/entity/dto/search/KanJiaActivityLogQuery.java similarity index 94% rename from framework/src/main/java/cn/lili/modules/promotion/entity/dto/KanJiaActivityLogQuery.java rename to framework/src/main/java/cn/lili/modules/promotion/entity/dto/search/KanJiaActivityLogQuery.java index 0639bc89..dbdd86ea 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/dto/KanJiaActivityLogQuery.java +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/dto/search/KanJiaActivityLogQuery.java @@ -1,4 +1,4 @@ -package cn.lili.modules.promotion.entity.dto; +package cn.lili.modules.promotion.entity.dto.search; import cn.hutool.core.text.CharSequenceUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/dto/search/KanjiaActivityGoodsParams.java b/framework/src/main/java/cn/lili/modules/promotion/entity/dto/search/KanjiaActivityGoodsParams.java new file mode 100644 index 00000000..e8fbc84f --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/dto/search/KanjiaActivityGoodsParams.java @@ -0,0 +1,46 @@ +package cn.lili.modules.promotion.entity.dto.search; + + +import cn.hutool.core.text.CharSequenceUtil; +import cn.lili.common.security.context.UserContext; +import cn.lili.common.security.enums.UserEnums; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; + +/** + * 砍价活动商品查询通用类 + * + * @author qiuqiu + * @date 2020/8/21 + **/ +@EqualsAndHashCode(callSuper = true) +@Data +public class KanjiaActivityGoodsParams extends BasePromotionsSearchParams implements Serializable { + + private static final long serialVersionUID = 1344104067705714289L; + + @ApiModelProperty(value = "活动商品") + private String goodsName; + + @ApiModelProperty(value = "skuId") + private String skuId; + + @Override + public QueryWrapper queryWrapper() { + QueryWrapper queryWrapper = super.queryWrapper(); + + if (CharSequenceUtil.isNotEmpty(goodsName)) { + queryWrapper.like("goods_name", goodsName); + } + if (UserContext.getCurrentUser() != null && UserContext.getCurrentUser().getRole().equals(UserEnums.MEMBER)) { + queryWrapper.gt("stock", 0); + } + queryWrapper.eq("delete_flag", false); + return queryWrapper; + } + +} diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/dto/KanjiaActivityQuery.java b/framework/src/main/java/cn/lili/modules/promotion/entity/dto/search/KanjiaActivityQuery.java similarity index 93% rename from framework/src/main/java/cn/lili/modules/promotion/entity/dto/KanjiaActivityQuery.java rename to framework/src/main/java/cn/lili/modules/promotion/entity/dto/search/KanjiaActivityQuery.java index 332a7d39..c31d2ab4 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/dto/KanjiaActivityQuery.java +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/dto/search/KanjiaActivityQuery.java @@ -1,4 +1,4 @@ -package cn.lili.modules.promotion.entity.dto; +package cn.lili.modules.promotion.entity.dto.search; import cn.hutool.core.text.CharSequenceUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -6,8 +6,6 @@ import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; -import java.util.Date; - /** * 砍价活动参与实体类 diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/vos/kanjia/KanjiaActivitySearchParams.java b/framework/src/main/java/cn/lili/modules/promotion/entity/dto/search/KanjiaActivitySearchParams.java similarity index 87% rename from framework/src/main/java/cn/lili/modules/promotion/entity/vos/kanjia/KanjiaActivitySearchParams.java rename to framework/src/main/java/cn/lili/modules/promotion/entity/dto/search/KanjiaActivitySearchParams.java index 0bb6b2b2..6b7560ae 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/vos/kanjia/KanjiaActivitySearchParams.java +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/dto/search/KanjiaActivitySearchParams.java @@ -1,9 +1,10 @@ -package cn.lili.modules.promotion.entity.vos.kanjia; +package cn.lili.modules.promotion.entity.dto.search; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import lombok.EqualsAndHashCode; /** * 砍价活动搜索参数 @@ -11,8 +12,9 @@ import lombok.Data; * @author Bulbasaur * @date: 2021/7/13 2:41 下午 */ +@EqualsAndHashCode(callSuper = true) @Data -public class KanjiaActivitySearchParams { +public class KanjiaActivitySearchParams extends BasePromotionsSearchParams { @ApiModelProperty(value = "砍价活动ID") private String id; diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/dto/search/MemberCouponSearchParams.java b/framework/src/main/java/cn/lili/modules/promotion/entity/dto/search/MemberCouponSearchParams.java new file mode 100644 index 00000000..f666646c --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/dto/search/MemberCouponSearchParams.java @@ -0,0 +1,104 @@ +package cn.lili.modules.promotion.entity.dto.search; + +import cn.hutool.core.text.CharSequenceUtil; +import cn.lili.modules.promotion.entity.enums.*; +import cn.lili.modules.promotion.tools.PromotionTools; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; +import java.util.Date; + +/** + * 会员优惠券查询通用类 + * + * @author paulG + * @since 2020/8/14 + **/ +@EqualsAndHashCode(callSuper = true) +@Data +public class MemberCouponSearchParams extends BasePromotionsSearchParams implements Serializable { + + private static final long serialVersionUID = 4566880169478260409L; + + private static final String PRICE_COLUMN = "price"; + + @ApiModelProperty(value = "会员id") + private String memberId; + /** + * POINT("打折"), PRICE("减免现金"); + * + * @see CouponTypeEnum + */ + @ApiModelProperty(value = "活动类型") + private String couponType; + /** + * @see PromotionsScopeTypeEnum + */ + @ApiModelProperty(value = "关联范围类型") + private String scopeType; + @ApiModelProperty(value = "范围关联的id") + private String scopeId; + @ApiModelProperty(value = "面额,可以为范围,如10_1000") + private String price; + /** + * @see CouponGetEnum + */ + @ApiModelProperty(value = "优惠券类型,分为免费领取和活动赠送") + private String getType; + /** + * @see MemberCouponStatusEnum + */ + @ApiModelProperty(value = "会员优惠券状态") + private String memberCouponStatus; + @ApiModelProperty(value = "消费门槛") + private Double consumeThreshold; + + + @Override + public QueryWrapper queryWrapper() { + QueryWrapper queryWrapper = super.queryWrapper(); + if (CharSequenceUtil.isNotEmpty(couponType)) { + queryWrapper.eq("coupon_type", CouponTypeEnum.valueOf(couponType).name()); + } + if (memberId != null) { + queryWrapper.eq("member_id", memberId); + } + if (CharSequenceUtil.isNotEmpty(scopeId)) { + queryWrapper.eq("scope_id", scopeId); + } + if (CharSequenceUtil.isNotEmpty(scopeType)) { + queryWrapper.eq("scope_type", PromotionsScopeTypeEnum.valueOf(scopeType).name()); + } + if (CharSequenceUtil.isNotEmpty(getType)) { + queryWrapper.eq("get_type", CouponGetEnum.valueOf(getType).name()); + } + if (CharSequenceUtil.isNotEmpty(memberCouponStatus)) { + queryWrapper.eq("member_coupon_status", MemberCouponStatusEnum.valueOf(memberCouponStatus).name()); + } + if (CharSequenceUtil.isNotEmpty(this.getPromotionStatus())) { + queryWrapper.and(PromotionTools.queryPromotionStatus(PromotionsStatusEnum.valueOf(getPromotionStatus()))); + } + if (CharSequenceUtil.isNotEmpty(price)) { + String[] s = price.split("_"); + if (s.length > 1) { + queryWrapper.between(PRICE_COLUMN, s[0], s[1]); + } else { + queryWrapper.ge(PRICE_COLUMN, s[0]); + } + } + if (this.getStartTime() != null) { + queryWrapper.ge("start_time", new Date(this.getEndTime())); + } + if (this.getEndTime() != null) { + queryWrapper.le("end_time", new Date(this.getEndTime())); + } + queryWrapper.eq("delete_flag", false); + queryWrapper.orderByDesc("create_time"); + return queryWrapper; + } + + +} diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/dto/search/PintuanSearchParams.java b/framework/src/main/java/cn/lili/modules/promotion/entity/dto/search/PintuanSearchParams.java new file mode 100644 index 00000000..7524655d --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/dto/search/PintuanSearchParams.java @@ -0,0 +1,41 @@ +package cn.lili.modules.promotion.entity.dto.search; + +import cn.hutool.core.text.CharSequenceUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import javax.validation.constraints.NotEmpty; + +/** + * 拼团查询通用类 + * + * @author paulG + * @since 2020/10/9 + **/ +@EqualsAndHashCode(callSuper = true) +@Data +public class PintuanSearchParams extends BasePromotionsSearchParams { + + @ApiModelProperty(value = "商家名称,如果是平台,这个值为 platform") + private String storeName; + + @NotEmpty(message = "活动名称不能为空") + @ApiModelProperty(value = "活动名称", required = true) + private String promotionName; + + + @Override + public QueryWrapper queryWrapper() { + QueryWrapper queryWrapper = super.queryWrapper(); + if (CharSequenceUtil.isNotEmpty(promotionName)) { + queryWrapper.like("promotion_name", promotionName); + } + if (CharSequenceUtil.isNotEmpty(storeName)) { + queryWrapper.like("store_name", storeName); + } + return queryWrapper; + } + +} diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/dto/search/PointsGoodsSearchParams.java b/framework/src/main/java/cn/lili/modules/promotion/entity/dto/search/PointsGoodsSearchParams.java new file mode 100644 index 00000000..8b6e118b --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/dto/search/PointsGoodsSearchParams.java @@ -0,0 +1,55 @@ +package cn.lili.modules.promotion.entity.dto.search; + +import cn.hutool.core.text.CharSequenceUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 积分商品查询通用类 + * + * @author paulG + * @since 2021/1/13 + **/ +@EqualsAndHashCode(callSuper = true) +@Data +public class PointsGoodsSearchParams extends BasePromotionsSearchParams { + + @ApiModelProperty(value = "商品名称") + private String goodsName; + + @ApiModelProperty(value = "商品skuId") + private String skuId; + + @ApiModelProperty(value = "积分商品分类编号") + private String pointsGoodsCategoryId; + + @ApiModelProperty(value = "积分,可以为范围,如10_1000") + private String points; + + + @Override + public QueryWrapper queryWrapper() { + QueryWrapper queryWrapper = super.queryWrapper(); + if (CharSequenceUtil.isNotEmpty(goodsName)) { + queryWrapper.like("goods_name", goodsName); + } + if (CharSequenceUtil.isNotEmpty(skuId)) { + queryWrapper.eq("sku_id", skuId); + } + if (CharSequenceUtil.isNotEmpty(pointsGoodsCategoryId)) { + queryWrapper.eq("points_goods_category_id", pointsGoodsCategoryId); + } + if (CharSequenceUtil.isNotEmpty(points)) { + String[] s = points.split("_"); + if (s.length > 1) { + queryWrapper.between("points", s[0], s[1]); + } else { + queryWrapper.eq("points", s[0]); + } + } + return queryWrapper; + } + +} diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/dto/search/PromotionGoodsSearchParams.java b/framework/src/main/java/cn/lili/modules/promotion/entity/dto/search/PromotionGoodsSearchParams.java new file mode 100644 index 00000000..01f5f211 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/dto/search/PromotionGoodsSearchParams.java @@ -0,0 +1,75 @@ +package cn.lili.modules.promotion.entity.dto.search; + +import cn.hutool.core.text.CharSequenceUtil; +import cn.lili.modules.promotion.entity.enums.PromotionsScopeTypeEnum; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.Arrays; +import java.util.List; + +/** + * 促销商品查询通用类 + * + * @author paulG + * @since 2021/2/21 + **/ +@EqualsAndHashCode(callSuper = true) +@Data +public class PromotionGoodsSearchParams extends BasePromotionsSearchParams { + + @ApiModelProperty(value = "促销活动id") + private String promotionId; + + @ApiModelProperty(value = "促销类型") + private String promotionType; + + @ApiModelProperty(value = "商品名称") + private String goodsName; + + @ApiModelProperty(value = "商品分类路径") + private String categoryPath; + + @ApiModelProperty(value = "商品SkuId") + private String skuId; + + @ApiModelProperty(value = "商品SkuIds") + private List skuIds; + + @ApiModelProperty(value = "促销活动id") + private List promotionIds; + + + @Override + public QueryWrapper queryWrapper() { + if (CharSequenceUtil.isEmpty(this.getScopeType())){ + this.setScopeType(PromotionsScopeTypeEnum.PORTION_GOODS.name()); + } + QueryWrapper queryWrapper = super.queryWrapper(); + if (CharSequenceUtil.isNotEmpty(promotionId)) { + queryWrapper.eq("promotion_id", promotionId); + } + if (CharSequenceUtil.isNotEmpty(goodsName)) { + queryWrapper.like("goods_name", goodsName); + } + if (CharSequenceUtil.isNotEmpty(promotionType)) { + queryWrapper.eq("promotion_type", promotionType); + } + if (CharSequenceUtil.isNotEmpty(categoryPath)) { + queryWrapper.like("category_path", categoryPath); + } + if (CharSequenceUtil.isNotEmpty(skuId)) { + queryWrapper.in("sku_id", Arrays.asList(skuId.split(","))); + } + if (skuIds != null && !skuIds.isEmpty()) { + queryWrapper.in("sku_id", skuIds); + } + if (promotionIds != null && promotionIds.isEmpty()) { + queryWrapper.in("promotion_id", promotionIds); + } + return queryWrapper; + } + +} diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/dto/search/SeckillSearchParams.java b/framework/src/main/java/cn/lili/modules/promotion/entity/dto/search/SeckillSearchParams.java new file mode 100644 index 00000000..74f59153 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/dto/search/SeckillSearchParams.java @@ -0,0 +1,76 @@ +package cn.lili.modules.promotion.entity.dto.search; + +import cn.hutool.core.text.CharSequenceUtil; +import cn.lili.modules.promotion.entity.enums.PromotionsApplyStatusEnum; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; +import java.util.Arrays; + +/** + * 秒杀活动查询通用类 + * + * @author paulG + * @since 2020/8/21 + **/ +@EqualsAndHashCode(callSuper = true) +@Data +public class SeckillSearchParams extends BasePromotionsSearchParams implements Serializable { + + private static final long serialVersionUID = -4052716630253333681L; + + @ApiModelProperty(value = "秒杀活动活动编号") + private String seckillId; + + @ApiModelProperty(value = "活动名称") + private String promotionName; + + @ApiModelProperty(value = "时刻") + private Integer timeLine; + + @ApiModelProperty(value = "商家id") + private String[] storeIds; + + @ApiModelProperty(value = "商品名称") + private String goodsName; + + @ApiModelProperty(value = "商家编号") + private String skuId; + + /** + * @see PromotionsApplyStatusEnum + */ + @ApiModelProperty(value = "APPLY(\"申请\"), PASS(\"通过\"), REFUSE(\"拒绝\")") + private String promotionApplyStatus; + + @Override + public QueryWrapper queryWrapper() { + QueryWrapper queryWrapper = super.queryWrapper(); + if (CharSequenceUtil.isNotEmpty(goodsName)) { + queryWrapper.like("goods_name", goodsName); + } + if (CharSequenceUtil.isNotEmpty(promotionName)) { + queryWrapper.like("promotion_name", promotionName); + } + if (CharSequenceUtil.isNotEmpty(seckillId)) { + queryWrapper.eq("seckill_id", seckillId); + } + if (storeIds != null) { + queryWrapper.in("store_id", Arrays.asList(storeIds)); + } + if (timeLine != null) { + queryWrapper.eq("time_line", timeLine); + } + if (CharSequenceUtil.isNotEmpty(promotionApplyStatus)) { + queryWrapper.eq("promotion_apply_status", PromotionsApplyStatusEnum.valueOf(promotionApplyStatus).name()); + } + if (CharSequenceUtil.isNotEmpty(skuId)) { + queryWrapper.eq("sku_id", skuId); + } + return queryWrapper; + } + +} diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/enums/PromotionApplyStatusEnum.java b/framework/src/main/java/cn/lili/modules/promotion/entity/enums/PromotionsApplyStatusEnum.java similarity index 81% rename from framework/src/main/java/cn/lili/modules/promotion/entity/enums/PromotionApplyStatusEnum.java rename to framework/src/main/java/cn/lili/modules/promotion/entity/enums/PromotionsApplyStatusEnum.java index 16f1b2fe..f746b95e 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/enums/PromotionApplyStatusEnum.java +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/enums/PromotionsApplyStatusEnum.java @@ -6,7 +6,7 @@ package cn.lili.modules.promotion.entity.enums; * @author Chopper * @since 2020-03-19 9:36 上午 */ -public enum PromotionApplyStatusEnum { +public enum PromotionsApplyStatusEnum { /** * 枚举 @@ -15,7 +15,7 @@ public enum PromotionApplyStatusEnum { private final String description; - PromotionApplyStatusEnum(String str) { + PromotionsApplyStatusEnum(String str) { this.description = str; } diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/enums/CouponScopeTypeEnum.java b/framework/src/main/java/cn/lili/modules/promotion/entity/enums/PromotionsScopeTypeEnum.java similarity index 79% rename from framework/src/main/java/cn/lili/modules/promotion/entity/enums/CouponScopeTypeEnum.java rename to framework/src/main/java/cn/lili/modules/promotion/entity/enums/PromotionsScopeTypeEnum.java index 1e0f8fc2..d9300acf 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/enums/CouponScopeTypeEnum.java +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/enums/PromotionsScopeTypeEnum.java @@ -1,12 +1,12 @@ package cn.lili.modules.promotion.entity.enums; /** - * 优惠券适用范围类型枚举 + * 促销适用范围类型枚举 * * @author Chopper * @since 2020-03-19 9:36 上午 */ -public enum CouponScopeTypeEnum { +public enum PromotionsScopeTypeEnum { /** * 枚举 @@ -18,7 +18,7 @@ public enum CouponScopeTypeEnum { private final String description; - CouponScopeTypeEnum(String str) { + PromotionsScopeTypeEnum(String str) { this.description = str; } diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/enums/PromotionStatusEnum.java b/framework/src/main/java/cn/lili/modules/promotion/entity/enums/PromotionsStatusEnum.java similarity index 87% rename from framework/src/main/java/cn/lili/modules/promotion/entity/enums/PromotionStatusEnum.java rename to framework/src/main/java/cn/lili/modules/promotion/entity/enums/PromotionsStatusEnum.java index 69423f7d..753f39a5 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/enums/PromotionStatusEnum.java +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/enums/PromotionsStatusEnum.java @@ -6,7 +6,7 @@ package cn.lili.modules.promotion.entity.enums; * @author Chopper * @since 2020-03-19 3:53 下午 */ -public enum PromotionStatusEnum { +public enum PromotionsStatusEnum { /** * 新建 @@ -27,7 +27,7 @@ public enum PromotionStatusEnum { private final String description; - PromotionStatusEnum(String str) { + PromotionsStatusEnum(String str) { this.description = str; } diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/vos/CouponActivityItemVO.java b/framework/src/main/java/cn/lili/modules/promotion/entity/vos/CouponActivityItemVO.java index 6b3fe192..2bce8016 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/vos/CouponActivityItemVO.java +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/vos/CouponActivityItemVO.java @@ -3,6 +3,7 @@ package cn.lili.modules.promotion.entity.vos; import cn.lili.modules.promotion.entity.dos.CouponActivityItem; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import lombok.EqualsAndHashCode; /** * 优惠券活动的优惠券VO @@ -10,6 +11,7 @@ import lombok.Data; * @author Bulbasaur * @since 2021/6/18 11:00 上午 */ +@EqualsAndHashCode(callSuper = true) @Data public class CouponActivityItemVO extends CouponActivityItem { diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/vos/CouponActivityVO.java b/framework/src/main/java/cn/lili/modules/promotion/entity/vos/CouponActivityVO.java index f32ae53f..737a8364 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/vos/CouponActivityVO.java +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/vos/CouponActivityVO.java @@ -4,6 +4,7 @@ import cn.lili.common.utils.BeanUtil; import cn.lili.modules.promotion.entity.dos.CouponActivity; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; import java.util.List; @@ -14,6 +15,7 @@ import java.util.List; * @author Bulbasaur * @since 2021/5/21 7:01 下午 */ +@EqualsAndHashCode(callSuper = true) @Data @NoArgsConstructor public class CouponActivityVO extends CouponActivity { diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/vos/CouponSearchParams.java b/framework/src/main/java/cn/lili/modules/promotion/entity/vos/CouponSearchParams.java deleted file mode 100644 index 2217b52e..00000000 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/vos/CouponSearchParams.java +++ /dev/null @@ -1,214 +0,0 @@ -package cn.lili.modules.promotion.entity.vos; - -import cn.hutool.core.text.CharSequenceUtil; -import cn.lili.modules.promotion.entity.enums.*; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import org.springframework.data.mongodb.core.query.Criteria; -import org.springframework.data.mongodb.core.query.Query; - -import java.io.Serializable; -import java.util.Arrays; -import java.util.Date; -import java.util.regex.Pattern; - -/** - * 优惠券查询通用类 - * - * @author paulG - * @since 2020/8/14 - **/ -@Data -public class CouponSearchParams implements Serializable { - - private static final long serialVersionUID = 4566880169478260409L; - private static final String PRICE_COLUMN = "price"; - - @ApiModelProperty(value = "店铺编号") - private String storeId; - - @ApiModelProperty(value = "会员id") - private String memberId; - - @ApiModelProperty(value = "优惠券名称") - private String couponName; - /** - * POINT("打折"), PRICE("减免现金"); - * - * @see cn.lili.modules.promotion.entity.enums.CouponTypeEnum - */ - @ApiModelProperty(value = "活动类型") - private String couponType; - /** - * @see cn.lili.modules.promotion.entity.enums.CouponScopeTypeEnum - */ - @ApiModelProperty(value = "关联范围类型") - private String scopeType; - @ApiModelProperty(value = "范围关联的id") - private String scopeId; - @ApiModelProperty(value = "面额,可以为范围,如10_1000") - private String price; - @ApiModelProperty(value = "发行数量,可以为范围,如10_1000") - private String publishNum; - @ApiModelProperty(value = "已被领取的数量,可以为范围,如10_1000") - private String receivedNum; - /** - * @see cn.lili.modules.promotion.entity.enums.CouponGetEnum - */ - @ApiModelProperty(value = "优惠券类型,分为免费领取和活动赠送") - private String getType; - - @ApiModelProperty(value = "活动开始时间") - private Long startTime; - - @ApiModelProperty(value = "活动结束时间") - private Long endTime; - /** - * @see MemberCouponStatusEnum - */ - @ApiModelProperty(value = "会员优惠券状态") - private String memberCouponStatus; - /** - * @see PromotionStatusEnum - */ - @ApiModelProperty(value = "活动状态") - private String promotionStatus; - - public QueryWrapper wrapper() { - QueryWrapper queryWrapper = new QueryWrapper<>(); - if (storeId != null) { - queryWrapper.in("store_id", Arrays.asList(storeId)); - } - if (CharSequenceUtil.isNotEmpty(couponName)) { - queryWrapper.like("coupon_name", couponName); - } - if (memberId != null) { - queryWrapper.eq("member_id", memberId); - } - if (CharSequenceUtil.isNotEmpty(couponType)) { - queryWrapper.eq("coupon_type", CouponTypeEnum.valueOf(couponType).name()); - } - if (CharSequenceUtil.isNotEmpty(scopeType)) { - queryWrapper.eq("scope_type", CouponScopeTypeEnum.valueOf(scopeType).name()); - } - if (CharSequenceUtil.isNotEmpty(scopeId)) { - queryWrapper.eq("scope_id", scopeId); - } - if (CharSequenceUtil.isNotEmpty(getType)) { - queryWrapper.eq("get_type", CouponGetEnum.valueOf(getType).name()); - } - if (startTime != null) { - queryWrapper.ge("start_time", new Date(startTime)); - } - if (endTime != null) { - queryWrapper.le("end_time", new Date(endTime)); - } - if (CharSequenceUtil.isNotEmpty(memberCouponStatus)) { - queryWrapper.eq("member_coupon_status", MemberCouponStatusEnum.valueOf(memberCouponStatus).name()); - } - if (CharSequenceUtil.isNotEmpty(promotionStatus)) { - queryWrapper.eq("promotion_status", PromotionStatusEnum.valueOf(promotionStatus).name()); - } - this.betweenWrapper(queryWrapper); - queryWrapper.eq("delete_flag", false); - queryWrapper.orderByDesc("create_time"); - return queryWrapper; - } - - private void betweenWrapper(QueryWrapper queryWrapper) { - if (CharSequenceUtil.isNotEmpty(publishNum)) { - String[] s = publishNum.split("_"); - if (s.length > 1) { - queryWrapper.ge("publish_num", s[1]); - } else { - queryWrapper.le("publish_num", publishNum); - } - } - if (CharSequenceUtil.isNotEmpty(price)) { - String[] s = price.split("_"); - if (s.length > 1) { - queryWrapper.ge(PRICE_COLUMN, s[1]); - } else { - queryWrapper.le(PRICE_COLUMN, s[0]); - } - } - if (CharSequenceUtil.isNotEmpty(receivedNum)) { - String[] s = receivedNum.split("_"); - if (s.length > 1) { - queryWrapper.ge("received_num", s[1]); - } else { - queryWrapper.le("received_num", s[0]); - } - } - } - - public Query mongoQuery() { - Query query = new Query(); - if (storeId != null) { - query.addCriteria(Criteria.where("storeId").in(Arrays.asList(storeId))); - } - if (CharSequenceUtil.isNotEmpty(couponName)) { - Pattern pattern = Pattern.compile("^.*" + couponName + ".*$", Pattern.CASE_INSENSITIVE); - query.addCriteria(Criteria.where("couponName").regex(pattern)); - } - if (memberId != null) { - query.addCriteria(Criteria.where("memberId").is(memberId)); - } - if (CharSequenceUtil.isNotEmpty(couponType)) { - query.addCriteria(Criteria.where("couponType").is(CouponTypeEnum.valueOf(couponType).name())); - } - if (CharSequenceUtil.isNotEmpty(scopeType)) { - query.addCriteria(Criteria.where("scopeType").is(CouponScopeTypeEnum.valueOf(scopeType).name())); - } - if (CharSequenceUtil.isNotEmpty(scopeId)) { - query.addCriteria(Criteria.where("scopeId").is(scopeId)); - } - if (CharSequenceUtil.isNotEmpty(getType)) { - query.addCriteria(Criteria.where("getType").is(CouponGetEnum.valueOf(getType).name())); - } - if (startTime != null) { - query.addCriteria(Criteria.where("startTime").gte(new Date(startTime))); - } - if (endTime != null) { - query.addCriteria(Criteria.where("endTime").lte(new Date(endTime))); - } - if (CharSequenceUtil.isNotEmpty(memberCouponStatus)) { - query.addCriteria(Criteria.where("memberCouponStatus").is(MemberCouponStatusEnum.valueOf(memberCouponStatus).name())); - } - if (CharSequenceUtil.isNotEmpty(promotionStatus)) { - query.addCriteria(Criteria.where("promotionStatus").is(PromotionStatusEnum.valueOf(promotionStatus).name())); - } - query.addCriteria(Criteria.where("deleteFlag").is(false)); - betweenQuery(query); - return query; - } - - private void betweenQuery(Query query) { - if (CharSequenceUtil.isNotEmpty(price)) { - String[] s = price.split("_"); - if (s.length > 1) { - query.addCriteria(Criteria.where(PRICE_COLUMN).gte(s[1])); - } else { - query.addCriteria(Criteria.where(PRICE_COLUMN).lte(s[0])); - } - } - if (CharSequenceUtil.isNotEmpty(publishNum)) { - String[] s = publishNum.split("_"); - if (s.length > 1) { - query.addCriteria(Criteria.where("publishNum").gte(s[1])); - } else { - query.addCriteria(Criteria.where("publishNum").lte(s[0])); - } - } - if (CharSequenceUtil.isNotEmpty(receivedNum)) { - String[] s = receivedNum.split("_"); - if (s.length > 1) { - query.addCriteria(Criteria.where("receivedNum").gte(s[1])); - } else { - query.addCriteria(Criteria.where("receivedNum").lte(s[0])); - } - } - } - -} diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/vos/CouponVO.java b/framework/src/main/java/cn/lili/modules/promotion/entity/vos/CouponVO.java index 2a69f0e2..0a33ba99 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/vos/CouponVO.java +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/vos/CouponVO.java @@ -5,6 +5,10 @@ import cn.lili.modules.promotion.entity.dos.PromotionGoods; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.ToString; +import org.springframework.beans.BeanUtils; import java.util.List; @@ -14,8 +18,11 @@ import java.util.List; * @author Chopper * @since 2020/8/14 */ +@EqualsAndHashCode(callSuper = true) @Data @ApiModel(value = "优惠券") +@ToString(callSuper = true) +@NoArgsConstructor public class CouponVO extends Coupon { private static final long serialVersionUID = 8372420376262437018L; @@ -26,5 +33,10 @@ public class CouponVO extends Coupon { @ApiModelProperty(value = "优惠券关联商品集合") private List promotionGoodsList; - + public CouponVO(Coupon coupon) { + if (coupon == null) { + return; + } + BeanUtils.copyProperties(coupon, this); + } } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/vos/FullDiscountSearchParams.java b/framework/src/main/java/cn/lili/modules/promotion/entity/vos/FullDiscountSearchParams.java deleted file mode 100644 index b2e35ab1..00000000 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/vos/FullDiscountSearchParams.java +++ /dev/null @@ -1,90 +0,0 @@ -package cn.lili.modules.promotion.entity.vos; - -import cn.hutool.core.text.CharSequenceUtil; -import cn.lili.modules.promotion.entity.enums.PromotionStatusEnum; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.springframework.data.mongodb.core.query.Criteria; -import org.springframework.data.mongodb.core.query.Query; - -import java.io.Serializable; -import java.util.Arrays; -import java.util.Date; -import java.util.regex.Pattern; - -/** - * 满优惠查询通用类 - * - * @author paulG - * @since 2020/8/21 - **/ -@Data -public class FullDiscountSearchParams implements Serializable { - - private static final long serialVersionUID = -4052716630253333681L; - - - @ApiModelProperty(value = "活动名称") - private String promotionName; - - @ApiModelProperty(value = "店铺编号 如有多个','分割") - private String storeId; - - @ApiModelProperty(value = "活动开始时间", required = true) - private Long startTime; - - @ApiModelProperty(value = "活动结束时间", required = true) - private Long endTime; - - /** - * @see PromotionStatusEnum - */ - @ApiModelProperty(value = "活动状态") - private String promotionStatus; - - - public QueryWrapper wrapper() { - QueryWrapper queryWrapper = new QueryWrapper<>(); - if (CharSequenceUtil.isNotEmpty(promotionName)) { - queryWrapper.like("title", promotionName); - } - if (storeId != null) { - queryWrapper.in("store_id", Arrays.asList(storeId.split(","))); - } - if (startTime != null) { - queryWrapper.ge("start_time", new Date(startTime)); - } - if (endTime != null) { - queryWrapper.le("end_time", new Date(endTime)); - } - if (CharSequenceUtil.isNotEmpty(promotionStatus)) { - queryWrapper.eq("promotion_status", PromotionStatusEnum.valueOf(promotionStatus).name()); - } - return queryWrapper; - } - - public Query mongoQuery() { - Query query = new Query(); - if (CharSequenceUtil.isNotEmpty(promotionName)) { - Pattern pattern = Pattern.compile("^.*" + promotionName + ".*$", Pattern.CASE_INSENSITIVE); - query.addCriteria(Criteria.where("promotionName").regex(pattern)); - } - if (storeId != null) { - query.addCriteria(Criteria.where("storeId").in(Arrays.asList(storeId.split(",")))); - } - if (startTime != null) { - query.addCriteria(Criteria.where("startTime").gte(new Date(startTime))); - } - if (endTime != null) { - query.addCriteria(Criteria.where("endTime").lte(new Date(endTime))); - } - if (CharSequenceUtil.isNotEmpty(promotionStatus)) { - query.addCriteria(Criteria.where("promotionStatus").is(PromotionStatusEnum.valueOf(promotionStatus).name())); - } - query.addCriteria(Criteria.where("deleteFlag").is(false)); - return query; - } - -} diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/vos/PintuanMemberVO.java b/framework/src/main/java/cn/lili/modules/promotion/entity/vos/PintuanMemberVO.java index 7b1ce33f..99d65b1f 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/vos/PintuanMemberVO.java +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/vos/PintuanMemberVO.java @@ -33,13 +33,13 @@ public class PintuanMemberVO { private String orderSn; @ApiModelProperty(value = "已参团人数") - private Integer groupedNum; + private long groupedNum; @ApiModelProperty(value = "待参团人数") - private Integer toBeGroupedNum; + private long toBeGroupedNum; @ApiModelProperty(value = "成团人数") - private Integer groupNum; + private long groupNum; public PintuanMemberVO(Member member) { this.memberId = member.getId(); diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/vos/PintuanSearchParams.java b/framework/src/main/java/cn/lili/modules/promotion/entity/vos/PintuanSearchParams.java deleted file mode 100644 index 79da0d01..00000000 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/vos/PintuanSearchParams.java +++ /dev/null @@ -1,99 +0,0 @@ -package cn.lili.modules.promotion.entity.vos; - -import cn.hutool.core.text.CharSequenceUtil; -import cn.lili.common.utils.StringUtils; -import cn.lili.modules.promotion.entity.enums.PromotionStatusEnum; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import org.springframework.data.mongodb.core.query.Criteria; -import org.springframework.data.mongodb.core.query.Query; - -import javax.validation.constraints.NotEmpty; -import javax.validation.constraints.NotNull; -import java.util.Date; -import java.util.regex.Pattern; - -/** - * 拼团查询通用类 - * - * @author paulG - * @since 2020/10/9 - **/ -@Data -public class PintuanSearchParams { - - @ApiModelProperty(value = "商家id") - private String storeId; - - @ApiModelProperty(value = "商家名称,如果是平台,这个值为 platform") - private String storeName; - - @NotEmpty(message = "活动名称不能为空") - @ApiModelProperty(value = "活动名称", required = true) - private String promotionName; - - /** - * @see PromotionStatusEnum - */ - @ApiModelProperty(value = "活动状态") - @NotNull(message = "活动状态不能为空") - private String promotionStatus; - - @ApiModelProperty(value = "活动开始时间") - private Long startTime; - - @ApiModelProperty(value = "活动结束时间") - private Long endTime; - - public QueryWrapper wrapper() { - QueryWrapper queryWrapper = new QueryWrapper<>(); - if (CharSequenceUtil.isNotEmpty(promotionName)) { - queryWrapper.like("promotion_name", promotionName); - } - if (!StringUtils.isEmpty(storeName)) { - queryWrapper.like("store_name", storeName); - } - if (!StringUtils.isEmpty(storeId)) { - queryWrapper.eq("store_id", storeName); - } - if (startTime != null) { - queryWrapper.ge("start_time", new Date(startTime)); - } - if (endTime != null) { - queryWrapper.le("end_time", new Date(endTime)); - } - if (CharSequenceUtil.isNotEmpty(promotionStatus)) { - queryWrapper.eq("promotion_status", PromotionStatusEnum.valueOf(promotionStatus).name()); - } - queryWrapper.eq("delete_flag", false); - return queryWrapper; - } - - public Query mongoQuery() { - Query query = new Query(); - if (CharSequenceUtil.isNotEmpty(promotionName)) { - Pattern pattern = Pattern.compile("^.*" + promotionName + ".*$", Pattern.CASE_INSENSITIVE); - query.addCriteria(Criteria.where("promotionName").regex(pattern)); - } - if (!StringUtils.isEmpty(storeName)) { - Pattern pattern = Pattern.compile("^.*" + storeName + ".*$", Pattern.CASE_INSENSITIVE); - query.addCriteria(Criteria.where("storeName").regex(pattern)); - } - if (!StringUtils.isEmpty(storeId)) { - query.addCriteria(Criteria.where("storeId").is(storeId)); - } - if (startTime != null) { - query.addCriteria(Criteria.where("startTime").gte(new Date(startTime))); - } - if (endTime != null) { - query.addCriteria(Criteria.where("endTime").lte(new Date(endTime))); - } - if (CharSequenceUtil.isNotEmpty(promotionStatus)) { - query.addCriteria(Criteria.where("promotionStatus").is(PromotionStatusEnum.valueOf(promotionStatus).name())); - } - query.addCriteria(Criteria.where("deleteFlag").is(false)); - return query; - } - -} diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/vos/PintuanVO.java b/framework/src/main/java/cn/lili/modules/promotion/entity/vos/PintuanVO.java index 3467aef5..b19019a6 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/vos/PintuanVO.java +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/vos/PintuanVO.java @@ -4,6 +4,8 @@ import cn.lili.modules.promotion.entity.dos.Pintuan; import cn.lili.modules.promotion.entity.dos.PromotionGoods; import lombok.Data; import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import org.springframework.beans.BeanUtils; import java.util.List; @@ -13,11 +15,16 @@ import java.util.List; * @author paulG * @since 2020/10/28 **/ +@EqualsAndHashCode(callSuper = true) @Data +@NoArgsConstructor public class PintuanVO extends Pintuan { private static final long serialVersionUID = 218582640653676201L; private List promotionGoodsList; + public PintuanVO(Pintuan pintuan) { + BeanUtils.copyProperties(pintuan, this); + } } diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/vos/PointsGoodsSearchParams.java b/framework/src/main/java/cn/lili/modules/promotion/entity/vos/PointsGoodsSearchParams.java deleted file mode 100644 index ec03d05e..00000000 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/vos/PointsGoodsSearchParams.java +++ /dev/null @@ -1,104 +0,0 @@ -package cn.lili.modules.promotion.entity.vos; - -import cn.hutool.core.convert.Convert; -import cn.hutool.core.text.CharSequenceUtil; -import cn.lili.modules.promotion.entity.enums.PromotionStatusEnum; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import org.springframework.data.mongodb.core.query.Criteria; -import org.springframework.data.mongodb.core.query.Query; - -import java.util.regex.Pattern; - -/** - * 积分商品查询通用类 - * - * @author paulG - * @since 2021/1/13 - **/ -@Data -public class PointsGoodsSearchParams { - - @ApiModelProperty(value = "商品名称") - private String goodsName; - - @ApiModelProperty(value = "商品skuId") - private String skuId; - - @ApiModelProperty(value = "积分商品分类编号") - private String pointsGoodsCategoryId; - - @ApiModelProperty(value = "是否为推荐商品") - private Boolean recommend; - - @ApiModelProperty(value = "积分,可以为范围,如10_1000") - private String points; - - /** - * @see PromotionStatusEnum - */ - @ApiModelProperty(value = "活动状态") - private String promotionStatus; - - - public QueryWrapper queryWrapper() { - QueryWrapper queryWrapper = new QueryWrapper<>(); - if (CharSequenceUtil.isNotEmpty(goodsName)) { - queryWrapper.eq("gs.goods_name", goodsName); - } - if (CharSequenceUtil.isNotEmpty(skuId)) { - queryWrapper.eq("pg.sku_id", skuId); - } - if (CharSequenceUtil.isNotEmpty(pointsGoodsCategoryId)) { - queryWrapper.eq("pg.points_goods_category_id", pointsGoodsCategoryId); - } - if (CharSequenceUtil.isNotEmpty(points)) { - String[] s = points.split("_"); - if (s.length > 1) { - queryWrapper.between("pg.points", s[0], s[1]); - } else { - queryWrapper.eq("pg.points", s[0]); - } - } - if (recommend != null) { - queryWrapper.eq("gs.recommend", recommend); - } - if (CharSequenceUtil.isNotEmpty(promotionStatus)) { - queryWrapper.eq("pg.promotion_status", promotionStatus); - } - return queryWrapper; - } - - - public Query mongoQuery() { - Query query = new Query(); - if (CharSequenceUtil.isNotEmpty(goodsName)) { - Pattern pattern = Pattern.compile("^.*" + goodsName + ".*$", Pattern.CASE_INSENSITIVE); - query.addCriteria(Criteria.where("goodsSku.goodsName").regex(pattern)); - } - if (CharSequenceUtil.isNotEmpty(skuId)) { - query.addCriteria(Criteria.where("skuId").is(skuId)); - } - if (CharSequenceUtil.isNotEmpty(pointsGoodsCategoryId)) { - query.addCriteria(Criteria.where("pointsGoodsCategoryId").is(pointsGoodsCategoryId)); - } - if (CharSequenceUtil.isNotEmpty(points)) { - String[] s = points.split("_"); - if (s.length > 1) { - query.addCriteria(Criteria.where("points").gte(Convert.toInt(s[0])).lte(Convert.toInt(s[1]))); - } else { - query.addCriteria(Criteria.where("points").gte(Convert.toInt(s[0]))); - } - } - if (recommend != null) { - query.addCriteria(Criteria.where("goodsSku.recommend").is(recommend)); - } - if (CharSequenceUtil.isNotEmpty(promotionStatus)) { - query.addCriteria(Criteria.where("promotionStatus").is(promotionStatus)); - } - query.addCriteria(Criteria.where("deleteFlag").is(false)); - return query; - } - -} diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/vos/PromotionGoodsSearchParams.java b/framework/src/main/java/cn/lili/modules/promotion/entity/vos/PromotionGoodsSearchParams.java deleted file mode 100644 index 8f0d8ff0..00000000 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/vos/PromotionGoodsSearchParams.java +++ /dev/null @@ -1,75 +0,0 @@ -package cn.lili.modules.promotion.entity.vos; - -import cn.hutool.core.text.CharSequenceUtil; -import cn.lili.modules.promotion.entity.dos.PromotionGoods; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.util.Date; - -/** - * 促销商品查询通用类 - * - * @author paulG - * @since 2021/2/21 - **/ -@Data -public class PromotionGoodsSearchParams { - - @ApiModelProperty(value = "促销活动id") - private String promotionId; - - @ApiModelProperty(value = "促销类型") - private String promotionType; - - @ApiModelProperty(value = "促销状态") - private String promotionStatus; - - @ApiModelProperty(value = "促销活动id") - private String storeId; - - @ApiModelProperty(value = "商品名称") - private String goodsName; - - @ApiModelProperty(value = "商品分类路径") - private String categoryPath; - - @ApiModelProperty(value = "开始时间") - private Long startTime; - - @ApiModelProperty(value = "结束时间") - private Long endTime; - - - public LambdaQueryWrapper queryWrapper() { - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - if (CharSequenceUtil.isNotEmpty(promotionId)) { - queryWrapper.eq(PromotionGoods::getPromotionId, promotionId); - } - if (CharSequenceUtil.isNotEmpty(goodsName)) { - queryWrapper.like(PromotionGoods::getGoodsName, goodsName); - } - if (CharSequenceUtil.isNotEmpty(promotionType)) { - queryWrapper.eq(PromotionGoods::getPromotionType, promotionType); - } - if (CharSequenceUtil.isNotEmpty(promotionStatus)) { - queryWrapper.eq(PromotionGoods::getPromotionStatus, promotionStatus); - } - if (CharSequenceUtil.isNotEmpty(categoryPath)) { - queryWrapper.like(PromotionGoods::getCategoryPath, categoryPath); - } - if (startTime != null) { - queryWrapper.ge(PromotionGoods::getStartTime, new Date(startTime)); - } - if (endTime != null) { - queryWrapper.ge(PromotionGoods::getEndTime, new Date(endTime)); - } - if (CharSequenceUtil.isNotEmpty(storeId)) { - queryWrapper.eq(PromotionGoods::getStoreId, storeId); - } - queryWrapper.eq(PromotionGoods::getDeleteFlag, false); - return queryWrapper; - } - -} diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/vos/SeckillSearchParams.java b/framework/src/main/java/cn/lili/modules/promotion/entity/vos/SeckillSearchParams.java deleted file mode 100644 index d269320f..00000000 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/vos/SeckillSearchParams.java +++ /dev/null @@ -1,134 +0,0 @@ -package cn.lili.modules.promotion.entity.vos; - -import cn.hutool.core.text.CharSequenceUtil; -import cn.hutool.core.util.ArrayUtil; -import cn.lili.modules.promotion.entity.enums.PromotionApplyStatusEnum; -import cn.lili.modules.promotion.entity.enums.PromotionStatusEnum; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import org.springframework.data.mongodb.core.query.Criteria; -import org.springframework.data.mongodb.core.query.Query; - -import java.io.Serializable; -import java.util.Arrays; -import java.util.Date; -import java.util.regex.Pattern; - -/** - * 秒杀活动查询通用类 - * - * @author paulG - * @since 2020/8/21 - **/ -@Data -public class SeckillSearchParams implements Serializable { - - private static final long serialVersionUID = -4052716630253333681L; - - @ApiModelProperty(value = "秒杀活动活动编号") - private String seckillId; - - @ApiModelProperty(value = "活动名称") - private String promotionName; - - @ApiModelProperty(value = "时刻") - private Integer timeLine; - - @ApiModelProperty(value = "商家id") - private String[] storeIds; - - @ApiModelProperty(value = "商家编号") - private String storeId; - - @ApiModelProperty(value = "商品名称") - private String goodsName; - - @ApiModelProperty(value = "活动开始时间", required = true) - private Long startTime; - - @ApiModelProperty(value = "活动结束时间", required = true) - private Long endTime; - - /** - * @see PromotionStatusEnum - */ - @ApiModelProperty(value = "活动状态") - private String promotionStatus; - - /** - * @see cn.lili.modules.promotion.entity.enums.PromotionApplyStatusEnum - */ - @ApiModelProperty(value = "APPLY(\"申请\"), PASS(\"通过\"), REFUSE(\"拒绝\")") - private String promotionApplyStatus; - - public QueryWrapper wrapper() { - QueryWrapper queryWrapper = new QueryWrapper<>(); - if (CharSequenceUtil.isNotEmpty(goodsName)) { - queryWrapper.like("goods_name", goodsName); - } - if (CharSequenceUtil.isNotEmpty(promotionName)) { - queryWrapper.like("promotion_name", promotionName); - } - if (CharSequenceUtil.isNotEmpty(seckillId)) { - queryWrapper.eq("seckill_id", seckillId); - } - if (storeIds != null) { - queryWrapper.in("store_id", Arrays.asList(storeIds)); - } - if (timeLine != null) { - queryWrapper.eq("time_line", timeLine); - } - if (startTime != null) { - queryWrapper.ge("start_time", new Date(startTime)); - } - if (endTime != null) { - queryWrapper.le("end_time", new Date(endTime)); - } - if (CharSequenceUtil.isNotEmpty(promotionApplyStatus)) { - queryWrapper.eq("promotion_apply_status", PromotionApplyStatusEnum.valueOf(promotionApplyStatus).name()); - } - if (CharSequenceUtil.isNotEmpty(promotionStatus)) { - queryWrapper.eq("promotion_status", PromotionStatusEnum.valueOf(promotionStatus).name()); - } - queryWrapper.eq("delete_flag", false); - return queryWrapper; - } - - public Query mongoQuery() { - Query query = new Query(); - if (CharSequenceUtil.isNotEmpty(goodsName)) { - Pattern pattern = Pattern.compile("^.*" + goodsName + ".*$", Pattern.CASE_INSENSITIVE); - query.addCriteria(Criteria.where("goodsName").regex(pattern)); - } - if (CharSequenceUtil.isNotEmpty(promotionName)) { - Pattern pattern = Pattern.compile("^.*" + promotionName + ".*$", Pattern.CASE_INSENSITIVE); - query.addCriteria(Criteria.where("promotionName").regex(pattern)); - } - if (CharSequenceUtil.isNotEmpty(seckillId)) { - query.addCriteria(Criteria.where("_id").is(seckillId)); - } - if (storeIds != null) { - Pattern pattern = Pattern.compile("^.*" + ArrayUtil.join(storeIds, ",") + ".*$", Pattern.CASE_INSENSITIVE); - query.addCriteria(Criteria.where("storeIds").regex(pattern)); - } - if (timeLine != null) { - query.addCriteria(Criteria.where("timeLine").is(timeLine)); - } - if (startTime != null) { - query.addCriteria(Criteria.where("startTime").gte(new Date(startTime))); - } - if (endTime != null) { - query.addCriteria(Criteria.where("endTime").lte(new Date(endTime))); - } - if (CharSequenceUtil.isNotEmpty(promotionApplyStatus)) { - query.addCriteria(Criteria.where("promotionApplyStatus").is(PromotionApplyStatusEnum.valueOf(promotionApplyStatus).name())); - } - if (CharSequenceUtil.isNotEmpty(promotionStatus)) { - query.addCriteria(Criteria.where("promotionStatus").is(PromotionStatusEnum.valueOf(promotionStatus).name())); - } - query.addCriteria(Criteria.where("deleteFlag").is(false)); - return query; - } - -} diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/vos/kanjia/KanjiaActivityGoodsParams.java b/framework/src/main/java/cn/lili/modules/promotion/entity/vos/kanjia/KanjiaActivityGoodsParams.java deleted file mode 100644 index bb817150..00000000 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/vos/kanjia/KanjiaActivityGoodsParams.java +++ /dev/null @@ -1,99 +0,0 @@ -package cn.lili.modules.promotion.entity.vos.kanjia; - - -import cn.hutool.core.text.CharSequenceUtil; -import cn.lili.common.security.context.UserContext; -import cn.lili.common.security.enums.UserEnums; -import cn.lili.modules.promotion.entity.enums.PromotionStatusEnum; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import org.springframework.data.domain.Sort; -import org.springframework.data.mongodb.core.query.Criteria; -import org.springframework.data.mongodb.core.query.Query; - -import java.io.Serializable; -import java.util.Date; -import java.util.regex.Pattern; - -/** - * 砍价活动商品查询通用类 - * - * @author qiuqiu - * @date 2020/8/21 - **/ -@Data -public class KanjiaActivityGoodsParams implements Serializable { - - private static final long serialVersionUID = 1344104067705714289L; - - @ApiModelProperty(value = "活动商品") - private String goodsName; - - @ApiModelProperty(value = "活动开始时间") - private Long startTime; - - @ApiModelProperty(value = "活动结束时间") - private Long endTime; - - @ApiModelProperty(value = "skuId") - private String skuId; - - /** - * @see PromotionStatusEnum - */ - @ApiModelProperty(value = "活动状态") - private String promotionStatus; - - public QueryWrapper wrapper() { - QueryWrapper queryWrapper = new QueryWrapper<>(); - - if (CharSequenceUtil.isNotEmpty(goodsName)) { - queryWrapper.like("goods_name", goodsName); - } - if (promotionStatus != null) { - queryWrapper.eq("promotion_status", promotionStatus); - } - if (startTime != null) { - queryWrapper.le("start_time", new Date(startTime)); - } - if (endTime != null) { - queryWrapper.ge("end_time", new Date(endTime)); - } - if (UserContext.getCurrentUser() != null && UserContext.getCurrentUser().getRole().equals(UserEnums.MEMBER)) { - - queryWrapper.gt("stock", 0); - } - queryWrapper.eq("delete_flag", false); - return queryWrapper; - } - - - public Query mongoQuery() { - Query query = new Query(); - if (CharSequenceUtil.isNotEmpty(goodsName)) { - Pattern pattern = Pattern.compile("^.*" + goodsName + ".*$", Pattern.CASE_INSENSITIVE); - query.addCriteria(Criteria.where("goodsSku.goodsName").regex(pattern)); - } - if (CharSequenceUtil.isNotEmpty(promotionStatus)) { - query.addCriteria(Criteria.where("promotionStatus").is(promotionStatus)); - } - - if (CharSequenceUtil.isNotEmpty(skuId)) { - query.addCriteria(Criteria.where("skuId").is(skuId)); - } - if (startTime != null && endTime != null) { - Criteria fromTime = Criteria.where("startTime").gte(new Date(startTime)); - Criteria toTime = Criteria.where("endTime").lte(new Date(endTime)); - query.addCriteria(fromTime); - query.addCriteria(toTime); - } - query.addCriteria(Criteria.where("deleteFlag").is(false)); - Sort.Order order = new Sort.Order(Sort.Direction.DESC, "createTime"); - query.with(Sort.by(order)); - - return query; - } - - -} diff --git a/framework/src/main/java/cn/lili/modules/promotion/mapper/PointsGoodsMapper.java b/framework/src/main/java/cn/lili/modules/promotion/mapper/PointsGoodsMapper.java index d0139293..6e81a047 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/mapper/PointsGoodsMapper.java +++ b/framework/src/main/java/cn/lili/modules/promotion/mapper/PointsGoodsMapper.java @@ -1,13 +1,7 @@ package cn.lili.modules.promotion.mapper; import cn.lili.modules.promotion.entity.dos.PointsGoods; -import cn.lili.modules.promotion.entity.vos.PointsGoodsVO; -import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.core.toolkit.Constants; -import org.apache.ibatis.annotations.Param; -import org.apache.ibatis.annotations.Select; /** * 积分商品数据处理层 @@ -17,14 +11,4 @@ import org.apache.ibatis.annotations.Select; **/ public interface PointsGoodsMapper extends BaseMapper { - /** - * 积分商品分页 - * - * @param page 分页 - * @param queryWrapper 查询条件 - * @return 积分商品分页 - */ - @Select("select * from points_goods pg left join goods_sku gs on pg.sku_id = gs.id ${ew.customSqlSegment}") - IPage getPointsGoodsVO(IPage page, @Param(Constants.WRAPPER) Wrapper queryWrapper); - } diff --git a/framework/src/main/java/cn/lili/modules/promotion/mapper/PromotionGoodsMapper.java b/framework/src/main/java/cn/lili/modules/promotion/mapper/PromotionGoodsMapper.java index fc675f91..c8b7ba8b 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/mapper/PromotionGoodsMapper.java +++ b/framework/src/main/java/cn/lili/modules/promotion/mapper/PromotionGoodsMapper.java @@ -1,7 +1,9 @@ package cn.lili.modules.promotion.mapper; import cn.lili.modules.promotion.entity.dos.PromotionGoods; +import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.toolkit.Constants; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; @@ -28,7 +30,7 @@ public interface PromotionGoodsMapper extends BaseMapper { @Select("select count(0) from li_promotion_goods where promotion_type = #{promotionType} and sku_id = #{skuId} and (" + "( start_time < #{startTime} && end_time > #{startTime} ) || ( start_time < #{endTime} && end_time > #{endTime} ) || " + "( start_time < #{startTime} && end_time > #{endTime} ) || ( start_time > #{startTime} && end_time < #{endTime} )" + - " || promotion_status = 'START' )") + ")") Integer selectInnerOverlapPromotionGoods(@Param("promotionType") String promotionType, @Param("skuId") String skuId, @Param("startTime") Date startTime, @@ -47,10 +49,19 @@ public interface PromotionGoodsMapper extends BaseMapper { @Select("select count(0) from li_promotion_goods where promotion_type = #{promotionType} and sku_id = #{skuId} and (" + "( start_time < #{startTime} && end_time > #{startTime} ) || ( start_time < #{endTime} && end_time > #{endTime} ) || " + "( start_time < #{startTime} && end_time > #{endTime} ) || ( start_time > #{startTime} && end_time < #{endTime} )" + - " || promotion_status = 'START' ) and promotion_id != #{promotionId}") + ") and promotion_id != #{promotionId}") Integer selectInnerOverlapPromotionGoodsWithout(@Param("promotionType") String promotionType, @Param("skuId") String skuId, @Param("startTime") Date startTime, @Param("endTime") Date endTime, @Param("promotionId") String promotionId); + + /** + * 查询参加活动促销商品价格 + * + * @param queryWrapper 查询条件 + * @return 共参加了几种活动 + */ + @Select("select price from li_promotion_goods ${ew.customSqlSegment} ") + Double selectPromotionsGoodsPrice(@Param(Constants.WRAPPER) Wrapper queryWrapper); } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/promotion/service/AbstractPromotionsService.java b/framework/src/main/java/cn/lili/modules/promotion/service/AbstractPromotionsService.java new file mode 100644 index 00000000..241f7781 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/promotion/service/AbstractPromotionsService.java @@ -0,0 +1,131 @@ +package cn.lili.modules.promotion.service; + +import cn.lili.common.enums.PromotionTypeEnum; +import cn.lili.common.vo.PageVO; +import cn.lili.modules.promotion.entity.dos.BasePromotions; +import cn.lili.modules.promotion.entity.dto.search.BasePromotionsSearchParams; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + * 抽象通用促销服务 + * 如需拓展原促销实体字段,新拓展类继承自促销实体即可 + * + * @param 促销类型,继承自促销基础类 + * @author paulG + * @since 2021/11/18 + **/ +public interface AbstractPromotionsService extends IService { + + /** + * 通用促销保存 + * 调用顺序: + * 1. initPromotion 初始化促销信息 + * 2. checkPromotions 检查促销参数 + * 3. save 保存促销信息 + * 4. updatePromotionGoods 更新促销商品信息 + * 5。 updateEsGoodsIndex 更新商品索引促销信息 + * + * @param promotions 促销信息 + * @return 是否保存成功 + */ + boolean savePromotions(T promotions); + + /** + * 通用促销更新 + * 调用顺序: + * 1. checkStatus 检查促销状态 + * 2. checkPromotions 检查促销参数 + * 3. saveOrUpdate 保存促销信息 + * 4. updatePromotionGoods 更新促销商品信息 + * 5. updateEsGoodsIndex 更新商品索引促销信息 + * + * @param promotions 促销信息 + * @return 是否更新成功 + */ + boolean updatePromotions(T promotions); + + /** + * 更新促销状态 + * 如果要更新促销状态为关闭,startTime和endTime置为空即可 + * + * @param ids 促销id集合 + * @param startTime 开始时间 + * @param endTime 结束时间 + * @return 是否更新成功 + */ + boolean updateStatus(List ids, Long startTime, Long endTime); + + /** + * 移除促销活动 + * + * @param ids 促销活动id集合 + * @return 是否移除成功 + */ + boolean removePromotions(List ids); + + /** + * 分页查询促销信息 + * + * @param searchParams 查询参数,继承自继承促销查询参数 + * @param page 分页参数 + * @param 继承自基础促销查询参数的促销查询参数 + * @return 分页促销信息 + */ + IPage pageFindAll(S searchParams, PageVO page); + + /** + * 列表查询促销信息 + * + * @param searchParams 查询参数,继承自继承促销查询参数 + * @param 继承自基础促销查询参数的促销查询参数 + * @return 列表促销信息 + */ + List listFindAll(S searchParams); + + /** + * 初始化促销字段 + * + * @param promotions 促销实体 + */ + void initPromotion(T promotions); + + /** + * 检查促销参数 + * + * @param promotions 促销实体 + */ + void checkPromotions(T promotions); + + /** + * 检查促销状态 + * + * @param promotions 促销实体 + */ + void checkStatus(T promotions); + + /** + * 更新促销商品信息 + * + * @param promotions 促销实体 + * @return + */ + boolean updatePromotionsGoods(T promotions); + + /** + * 更新促销信息到商品索引 + * + * @param promotions 促销实体 + */ + void updateEsGoodsIndex(T promotions); + + /** + * 当前促销类型 + * + * @return 当前促销类型 + */ + PromotionTypeEnum getPromotionType(); + +} diff --git a/framework/src/main/java/cn/lili/modules/promotion/service/CouponActivityItemService.java b/framework/src/main/java/cn/lili/modules/promotion/service/CouponActivityItemService.java index 53911189..d936cf3b 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/service/CouponActivityItemService.java +++ b/framework/src/main/java/cn/lili/modules/promotion/service/CouponActivityItemService.java @@ -28,4 +28,11 @@ public interface CouponActivityItemService extends IService * @return 优惠券关联优惠券列表 */ List getCouponActivityItemListVO(String activityId); + + /** + * 根据优惠券id删除优惠活动关联信息项 + * + * @param couponIds 优惠券id集合 + */ + void removeByCouponId(List couponIds); } diff --git a/framework/src/main/java/cn/lili/modules/promotion/service/CouponActivityService.java b/framework/src/main/java/cn/lili/modules/promotion/service/CouponActivityService.java index f283f60c..b615dc5e 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/service/CouponActivityService.java +++ b/framework/src/main/java/cn/lili/modules/promotion/service/CouponActivityService.java @@ -2,10 +2,7 @@ package cn.lili.modules.promotion.service; import cn.lili.modules.member.entity.dos.Member; import cn.lili.modules.promotion.entity.dos.CouponActivity; -import cn.lili.modules.promotion.entity.dto.CouponActivityDTO; -import cn.lili.modules.promotion.entity.enums.PromotionStatusEnum; import cn.lili.modules.promotion.entity.vos.CouponActivityVO; -import com.baomidou.mybatisplus.extension.service.IService; import java.util.List; @@ -15,23 +12,8 @@ import java.util.List; * @author Bulbasaur * @since 2021/5/20 6:10 下午 */ -public interface CouponActivityService extends IService { +public interface CouponActivityService extends AbstractPromotionsService { - /** - * 创建优惠券活动--精准发券、新人赠券 - * - * @param couponActivityDTO 优惠券活动DTO - * @return 优惠券活动DTO - */ - CouponActivityDTO addCouponActivity(CouponActivityDTO couponActivityDTO); - - /** - * 修改优惠券活动--精准发券、新人赠券 - * - * @param couponActivityDTO 优惠券活动DTO - * @return 优惠券活动DTO - */ - CouponActivityDTO updateCouponActivity(CouponActivityDTO couponActivityDTO); /** * 获取优惠券活动VO @@ -57,13 +39,4 @@ public interface CouponActivityService extends IService { */ void registered(List couponActivityList, Member member); - - /** - * 修改优惠券活动状态 - * - * @param id 活动ID - * @param promotionStatus 活动状态 - * @return 操作状态 - */ - boolean updateCouponActivityStatus(String id, PromotionStatusEnum promotionStatus); } diff --git a/framework/src/main/java/cn/lili/modules/promotion/service/CouponService.java b/framework/src/main/java/cn/lili/modules/promotion/service/CouponService.java index 3b4a526d..47b95335 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/service/CouponService.java +++ b/framework/src/main/java/cn/lili/modules/promotion/service/CouponService.java @@ -2,13 +2,9 @@ package cn.lili.modules.promotion.service; import cn.lili.common.vo.PageVO; import cn.lili.modules.promotion.entity.dos.Coupon; -import cn.lili.modules.promotion.entity.enums.PromotionStatusEnum; -import cn.lili.modules.promotion.entity.vos.CouponSearchParams; +import cn.lili.modules.promotion.entity.dto.search.CouponSearchParams; import cn.lili.modules.promotion.entity.vos.CouponVO; import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.service.IService; - -import java.util.List; /** * 优惠券业务层 @@ -16,76 +12,7 @@ import java.util.List; * @author Chopper * @since 2020/8/21 */ -public interface CouponService extends IService { - - /** - * 添加优惠券 - * - * @param coupon 优惠券 - * @return 是否添加成功 - */ - CouponVO add(CouponVO coupon); - - /** - * 更新优惠卷 - * - * @param coupon 优惠卷信息 - * @return 是否更新成功 - */ - CouponVO updateCoupon(CouponVO coupon); - - /** - * 更新优惠卷状态 - * - * @param couponId 优惠券编号 - * @param promotionStatus 促销状态 - * @return 更新结果 - */ - boolean updateCouponStatus(List couponId, PromotionStatusEnum promotionStatus); - - /** - * 删除优惠券 - * - * @param id 优惠券id - * @return 是否删除成功 - */ - boolean deleteCoupon(String id); - - - /** - * 根据查询条件从mongo中获取优惠券信息列表 - * - * @param param 查询参数 - * @param page 分页参数 - * @return 优惠券信息列表 - */ - IPage getCouponsByPageFromMongo(CouponSearchParams param, PageVO page); - - /** - * 根据查询条件从mongo中获取优惠券信息列表 - * - * @param param 查询参数 - * @param page 分页参数 - * @return 优惠券信息列表 - */ - IPage getCanReceiveCoupons(CouponSearchParams param, PageVO page); - - /** - * 获取优惠券详情 - * - * @param id 优惠券id - * @return 优惠券详情 - */ - CouponVO getCouponDetailFromMongo(String id); - - /** - * 根据条件获取优惠券列表 - * - * @param param 条件参数 - * @param page 分页条件 - * @return 可领取优惠券集合 - */ - IPage getCouponsByPage(CouponSearchParams param, PageVO page); +public interface CouponService extends AbstractPromotionsService { /** * 领取优惠券 @@ -103,7 +30,21 @@ public interface CouponService extends IService { */ void usedCoupon(String couponId, Integer usedNum); + /** + * 获取优惠券展示实体 + * + * @param searchParams 查询参数 + * @param page 分页参数 + * @return 优惠券展示实体列表 + */ + IPage pageVOFindAll(CouponSearchParams searchParams, PageVO page); - + /** + * 获取优惠券展示详情 + * + * @param couponId 优惠券id + * @return 返回优惠券展示详情 + */ + CouponVO getDetail(String couponId); } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/promotion/service/FullDiscountService.java b/framework/src/main/java/cn/lili/modules/promotion/service/FullDiscountService.java index e84a7bda..04314bde 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/service/FullDiscountService.java +++ b/framework/src/main/java/cn/lili/modules/promotion/service/FullDiscountService.java @@ -1,12 +1,7 @@ package cn.lili.modules.promotion.service; -import cn.lili.common.vo.PageVO; import cn.lili.modules.order.cart.entity.vo.FullDiscountVO; import cn.lili.modules.promotion.entity.dos.FullDiscount; -import cn.lili.modules.promotion.entity.enums.PromotionStatusEnum; -import cn.lili.modules.promotion.entity.vos.FullDiscountSearchParams; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.service.IService; import java.util.List; @@ -16,7 +11,7 @@ import java.util.List; * @author Chopper * @since 2020/8/21 */ -public interface FullDiscountService extends IService { +public interface FullDiscountService extends AbstractPromotionsService { /** * 当前满优惠活动 @@ -26,41 +21,6 @@ public interface FullDiscountService extends IService { */ List currentPromotion(List storeId); - /** - * 添加满优惠活动 - * - * @param fullDiscountVO 满优惠活动信息 - * @return 满优惠活动 - */ - FullDiscount addFullDiscount(FullDiscountVO fullDiscountVO); - - /** - * 从mysql中分页获取满优惠列表 - * - * @param searchParams 参数 - * @param page 分页参数 - * @return 满优惠列表 - */ - IPage getFullDiscountByPageFromMysql(FullDiscountSearchParams searchParams, PageVO page); - - /** - * 从mongo中分页获取满优惠列表 - * - * @param searchParams 搜索参数 - * @param page 分页参数 - * @return 满优惠列表 - */ - IPage getFullDiscountByPageFromMongo(FullDiscountSearchParams searchParams, PageVO page); - - - /** - * 修改满优惠活动 - * - * @param fullDiscountVO 满优惠活动信息 - * @return 满优惠活动 - */ - FullDiscountVO modifyFullDiscount(FullDiscountVO fullDiscountVO); - /** * 获取满优惠活动详情 * @@ -69,21 +29,6 @@ public interface FullDiscountService extends IService { */ FullDiscountVO getFullDiscount(String id); - /** - * 删除满优惠获取 - * - * @param id 满优惠活动编号 - * @return 删除结果 - */ - boolean deleteFullDiscount(String id); - /** - * 更新满额活动状态 - * - * @param id 优惠券编号 - * @param promotionStatus 促销状态 - * @return 更新结果 - */ - boolean updateFullDiscountStatus(String id, PromotionStatusEnum promotionStatus); } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/promotion/service/KanjiaActivityGoodsService.java b/framework/src/main/java/cn/lili/modules/promotion/service/KanjiaActivityGoodsService.java index 7ef066bd..860d38fc 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/service/KanjiaActivityGoodsService.java +++ b/framework/src/main/java/cn/lili/modules/promotion/service/KanjiaActivityGoodsService.java @@ -5,13 +5,10 @@ import cn.lili.common.vo.PageVO; import cn.lili.modules.promotion.entity.dos.KanjiaActivityGoods; import cn.lili.modules.promotion.entity.dto.KanjiaActivityGoodsDTO; import cn.lili.modules.promotion.entity.dto.KanjiaActivityGoodsOperationDTO; +import cn.lili.modules.promotion.entity.dto.search.KanjiaActivityGoodsParams; import cn.lili.modules.promotion.entity.vos.kanjia.KanjiaActivityGoodsListVO; -import cn.lili.modules.promotion.entity.vos.kanjia.KanjiaActivityGoodsParams; import cn.lili.modules.promotion.entity.vos.kanjia.KanjiaActivityGoodsVO; import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.service.IService; - -import java.util.List; /** @@ -20,7 +17,7 @@ import java.util.List; * @author qiuqiu * @date 2021/7/1 9:45 上午 */ -public interface KanjiaActivityGoodsService extends IService { +public interface KanjiaActivityGoodsService extends AbstractPromotionsService { /** @@ -31,15 +28,6 @@ public interface KanjiaActivityGoodsService extends IService getForPage(KanjiaActivityGoodsParams kanJiaActivityGoodsParams, PageVO pageVO); - /** * 查询砍价活动商品分页信息 * @@ -59,13 +47,15 @@ public interface KanjiaActivityGoodsService extends IService ids); - - /** - * 根据skuID查询当前进行的砍价商品信息 - * - * @param skuId 商品skuId - * @return - */ - KanjiaActivityGoodsDTO getKanJiaGoodsBySku(String skuId); - } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/promotion/service/KanjiaActivityLogService.java b/framework/src/main/java/cn/lili/modules/promotion/service/KanjiaActivityLogService.java index 12e591d8..c6a3de22 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/service/KanjiaActivityLogService.java +++ b/framework/src/main/java/cn/lili/modules/promotion/service/KanjiaActivityLogService.java @@ -4,7 +4,7 @@ package cn.lili.modules.promotion.service; import cn.lili.common.vo.PageVO; import cn.lili.modules.promotion.entity.dos.KanjiaActivityLog; import cn.lili.modules.promotion.entity.dto.KanjiaActivityDTO; -import cn.lili.modules.promotion.entity.dto.KanJiaActivityLogQuery; +import cn.lili.modules.promotion.entity.dto.search.KanJiaActivityLogQuery; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; diff --git a/framework/src/main/java/cn/lili/modules/promotion/service/KanjiaActivityService.java b/framework/src/main/java/cn/lili/modules/promotion/service/KanjiaActivityService.java index e2a5e2e4..4d653290 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/service/KanjiaActivityService.java +++ b/framework/src/main/java/cn/lili/modules/promotion/service/KanjiaActivityService.java @@ -4,8 +4,8 @@ package cn.lili.modules.promotion.service; import cn.lili.common.vo.PageVO; import cn.lili.modules.promotion.entity.dos.KanjiaActivity; import cn.lili.modules.promotion.entity.dos.KanjiaActivityLog; -import cn.lili.modules.promotion.entity.dto.KanjiaActivityQuery; -import cn.lili.modules.promotion.entity.vos.kanjia.KanjiaActivitySearchParams; +import cn.lili.modules.promotion.entity.dto.search.KanjiaActivityQuery; +import cn.lili.modules.promotion.entity.dto.search.KanjiaActivitySearchParams; import cn.lili.modules.promotion.entity.vos.kanjia.KanjiaActivityVO; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; diff --git a/framework/src/main/java/cn/lili/modules/promotion/service/MemberCouponService.java b/framework/src/main/java/cn/lili/modules/promotion/service/MemberCouponService.java index db43622c..6f4178cf 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/service/MemberCouponService.java +++ b/framework/src/main/java/cn/lili/modules/promotion/service/MemberCouponService.java @@ -2,8 +2,8 @@ package cn.lili.modules.promotion.service; import cn.lili.common.vo.PageVO; import cn.lili.modules.promotion.entity.dos.MemberCoupon; +import cn.lili.modules.promotion.entity.dto.search.MemberCouponSearchParams; import cn.lili.modules.promotion.entity.enums.MemberCouponStatusEnum; -import cn.lili.modules.promotion.entity.vos.CouponSearchParams; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; @@ -25,6 +25,14 @@ public interface MemberCouponService extends IService { */ void checkCouponLimit(String couponId, String memberId); + /** + * 领取优惠券 + * + * @param couponId 优惠券编号 + * @param memberId 会员 + * @param memberName 会员名称 + */ + void receiveBuyerCoupon(String couponId, String memberId, String memberName); /** * 领取优惠券 @@ -42,24 +50,26 @@ public interface MemberCouponService extends IService { * @param pageVo 分页参数 * @return 会员优惠券列表 */ - IPage getMemberCoupons(CouponSearchParams param, PageVO pageVo); + IPage getMemberCoupons(MemberCouponSearchParams param, PageVO pageVo); /** - * 获取会员所有优惠券 + * 获取会员优惠券列表 * + * @param pageVo 分页参数 + * @param param 查询参数 * @return 会员优惠券列表 */ - List getMemberCoupons(); + List getMemberCoupons(MemberCouponSearchParams param); /** * 获取会员优惠券列表 * * @param param 查询参数 - * @param pageVo 分页参数 * @param totalPrice 当前商品总价 + * @param pageVo 分页参数 * @return 会员优惠券列表 */ - IPage getMemberCouponsByCanUse(CouponSearchParams param, Double totalPrice, PageVO pageVo); + IPage getMemberCouponsByCanUse(MemberCouponSearchParams param, Double totalPrice, PageVO pageVo); /** * 获取当前会员当前商品可用的会员优惠券 @@ -85,7 +95,7 @@ public interface MemberCouponService extends IService { * * @return 会员优惠券数量 */ - Integer getMemberCouponsNum(); + long getMemberCouponsNum(); /** * 更新会员优惠券状态 @@ -109,4 +119,11 @@ public interface MemberCouponService extends IService { */ void cancellation(String id); + /** + * 关闭会员优惠券 + * + * @param couponIds 优惠券id集合 + */ + void closeMemberCoupon(List couponIds); + } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/promotion/service/PintuanService.java b/framework/src/main/java/cn/lili/modules/promotion/service/PintuanService.java index cc2cd853..a1c6f345 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/service/PintuanService.java +++ b/framework/src/main/java/cn/lili/modules/promotion/service/PintuanService.java @@ -1,15 +1,10 @@ package cn.lili.modules.promotion.service; -import cn.lili.common.vo.PageVO; import cn.lili.modules.promotion.entity.dos.Pintuan; import cn.lili.modules.promotion.entity.vos.PintuanMemberVO; -import cn.lili.modules.promotion.entity.vos.PintuanSearchParams; import cn.lili.modules.promotion.entity.vos.PintuanShareVO; import cn.lili.modules.promotion.entity.vos.PintuanVO; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.service.IService; -import java.util.Date; import java.util.List; /** @@ -18,16 +13,8 @@ import java.util.List; * @author Chopper * @since 2020/11/18 9:45 上午 */ -public interface PintuanService extends IService { +public interface PintuanService extends AbstractPromotionsService { - /** - * 根据条件分页查询拼团活动列表 - * - * @param param 拼团活动查询参数 - * @param page 分页参数 - * @return 拼团活动列表 - */ - IPage getPintuanByPage(PintuanSearchParams param, PageVO page); /** * 获取当前拼团的会员 @@ -38,79 +25,12 @@ public interface PintuanService extends IService { List getPintuanMember(String pintuanId); /** - * 从mongo中根据条件分页查询拼团活动列表 - * - * @param param 拼团活动查询参数 - * @param page 分页参数 - * @return 拼团活动列表 - */ - IPage getPintuanByPageFromMongo(PintuanSearchParams param, PageVO page); - - /** - * 从mongo中查询拼团活动详情 + * 查询拼团活动详情 * * @param id 拼团ID * @return 拼团活动详情 */ - PintuanVO getPintuanByIdFromMongo(String id); - - /** - * 从mysql中查询拼团活动详情 - * - * @param id 拼团活动id - * @return 拼团活动详情 - */ - Pintuan getPintuanById(String id); - - /** - * 从mongo中根据条件查询拼团活动总数 - * - * @param param 拼团活动查询参数 - * @return 总数 - */ - Long getPintuanByPageFromMongoCount(PintuanSearchParams param); - - /** - * 拼团新增业务处理 - * - * @param pintuan 拼团实体 - * @return 是否成功 - */ - boolean addPintuan(PintuanVO pintuan); - - /** - * 拼团修改 - * - * @param pintuan 拼团实体 - * @return 是否成功 - */ - boolean modifyPintuan(PintuanVO pintuan); - - /** - * 开启拼团 - * - * @param pintuanId 拼团活动编号 - * @param startTime 开始时间 - * @param endTime 结束时间 - * @return 是否成功 - */ - boolean openPintuan(String pintuanId, Date startTime, Date endTime); - - /** - * 关闭拼团 - * - * @param pintuanId 拼团活动编号 - * @return 是否成功 - */ - boolean closePintuan(String pintuanId); - - /** - * 删除拼团 - * - * @param pintuanId 拼团活动编号 - * @return 是否成功 - */ - boolean deletePintuan(String pintuanId); + PintuanVO getPintuanVO(String id); /** * 获取拼团分享信息 diff --git a/framework/src/main/java/cn/lili/modules/promotion/service/PointsGoodsService.java b/framework/src/main/java/cn/lili/modules/promotion/service/PointsGoodsService.java index faac3f07..948d98f8 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/service/PointsGoodsService.java +++ b/framework/src/main/java/cn/lili/modules/promotion/service/PointsGoodsService.java @@ -1,11 +1,7 @@ package cn.lili.modules.promotion.service; -import cn.lili.common.vo.PageVO; import cn.lili.modules.promotion.entity.dos.PointsGoods; -import cn.lili.modules.promotion.entity.vos.PointsGoodsSearchParams; import cn.lili.modules.promotion.entity.vos.PointsGoodsVO; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.service.IService; import java.util.List; @@ -15,40 +11,15 @@ import java.util.List; * @author paulG * @since 2020/11/18 9:45 上午 **/ -public interface PointsGoodsService extends IService { +public interface PointsGoodsService extends AbstractPromotionsService { /** - * 批量添加积分商品 + * 批量保存库存商品 * - * @param pointsGoodsList 积分商品列表 - * @return 是否添加成功 + * @param promotionsList 积分商品列表 + * @return 是否保存成功 */ - boolean addPointsGoods(List pointsGoodsList); - - /** - * 更新一个积分商品 - * - * @param pointsGoodsDTO 编辑的积分商品信息 - * @return 是否更新成功 - */ - boolean updatePointsGoods(PointsGoodsVO pointsGoodsDTO); - - /** - * 批量更新积分商品状态 - * - * @param ids 积分商品id集合 - * @param promotionStatus 更新的状态 - * @return 是否更新成功 - */ - boolean updatePointsGoodsPromotionStatus(List ids, String promotionStatus); - - /** - * 批量删除积分商品 - * - * @param ids 积分商品id集合 - * @return 是否删除成功 - */ - boolean deletePointsGoods(List ids); + boolean savePointsGoodsBatch(List promotionsList); /** * 根据ID获取积分详情 @@ -64,15 +35,6 @@ public interface PointsGoodsService extends IService { * @param skuId 商品SkuId * @return 积分详情 */ - PointsGoodsVO getPointsGoodsVOByMongo(String skuId); - - /** - * 根据条件查询积分商品 - * - * @param searchParams 积分商品查询参数 - * @param page 分页参数 - * @return 积分商品查询结果 - */ - IPage getPointsGoodsByPage(PointsGoodsSearchParams searchParams, PageVO page); + PointsGoodsVO getPointsGoodsDetailBySkuId(String skuId); } diff --git a/framework/src/main/java/cn/lili/modules/promotion/service/PromotionGoodsService.java b/framework/src/main/java/cn/lili/modules/promotion/service/PromotionGoodsService.java index c134d2f3..f019298b 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/service/PromotionGoodsService.java +++ b/framework/src/main/java/cn/lili/modules/promotion/service/PromotionGoodsService.java @@ -1,12 +1,10 @@ package cn.lili.modules.promotion.service; import cn.lili.cache.CachePrefix; +import cn.lili.common.enums.PromotionTypeEnum; import cn.lili.common.vo.PageVO; import cn.lili.modules.promotion.entity.dos.PromotionGoods; -import cn.lili.modules.promotion.entity.dto.PromotionGoodsDTO; -import cn.lili.common.enums.PromotionTypeEnum; -import cn.lili.modules.promotion.entity.vos.PromotionGoodsSearchParams; -import cn.lili.modules.order.cart.entity.vo.CartSkuVO; +import cn.lili.modules.promotion.entity.dto.search.PromotionGoodsSearchParams; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; @@ -35,35 +33,13 @@ public interface PromotionGoodsService extends IService { } /** - * 删除指定促销类型的促销商品 - * - * @param promotionGoodsList 促销商品列表 - * @param promotionType 促销类型 - */ - void removePromotionGoods(List promotionGoodsList, PromotionTypeEnum promotionType); - - /** - * 更新促销活动 - * - * @param cartSkuVO 购物车中的产品 - */ - void updatePromotion(CartSkuVO cartSkuVO); - - /** - * 获取某sku当日所有活动 + * 获取某sku所有有效活动 * * @param skuId 商品skuId + * @param storeIds 店铺id * @return 促销商品集合 */ - List findNowSkuPromotion(String skuId); - - /** - * 分页获取促销商品信息 - * - * @param skuId 商品skuId - * @return 某商品的促销信息 - */ - List getPromotionGoods(String skuId); + List findSkuValidPromotion(String skuId, String storeIds); /** * 分页获取促销商品信息 @@ -72,16 +48,42 @@ public interface PromotionGoodsService extends IService { * @param pageVo 分页参数 * @return 促销商品列表 */ - IPage getPromotionGoods(PromotionGoodsSearchParams searchParams, PageVO pageVo); + IPage pageFindAll(PromotionGoodsSearchParams searchParams, PageVO pageVo); /** - * 分页获取当前进行中的促销活动的促销商品信息 + * 获取促销商品信息 * - * @param promotionType 促销活动类型 - * @param pageVo 分页参数 + * @param searchParams 查询参数 * @return 促销商品列表 */ - IPage getCurrentPromotionGoods(String promotionType, PageVO pageVo); + List listFindAll(PromotionGoodsSearchParams searchParams); + + /** + * 获取促销商品信息 + * + * @param searchParams 查询参数 + * @return 促销商品信息 + */ + PromotionGoods getPromotionsGoods(PromotionGoodsSearchParams searchParams); + + + /** + * 获取当前有效时间特定促销类型的促销商品信息 + * + * @param skuId skuId + * @param promotionTypes 特定促销类型 + * @return 促销商品信息 + */ + PromotionGoods getValidPromotionsGoods(String skuId, List promotionTypes); + + /** + * 获取当前有效时间特定促销类型的促销商品价格 + * + * @param skuId skuId + * @param promotionTypes 特定促销类型 + * @return 促销商品价格 + */ + Double getValidPromotionsGoodsPrice(String skuId, List promotionTypes); /** * 查询参加活动促销商品是否同时参加指定类型的活动 @@ -116,26 +118,6 @@ public interface PromotionGoodsService extends IService { */ List getPromotionGoodsStock(PromotionTypeEnum typeEnum, String promotionId, List skuId); - /** - * 根据条件获取促销活动商品详情 - * - * @param typeEnum 促销类型 - * @param promotionId 促销活动id - * @param skuId 商品skuId - * @return 促销活动商品详情 - */ - PromotionGoods getPromotionGoods(PromotionTypeEnum typeEnum, String promotionId, String skuId); - - /** - * 批量获取促销商品信息 - * - * @param typeEnum 促销类型 - * @param promotionId 促销活动id - * @param skuId 商品skuId - * @return 促销活动商品详情 - */ - List getPromotionGoods(PromotionTypeEnum typeEnum, String promotionId, List skuId); - /** * 更新促销活动商品库存 * @@ -146,4 +128,33 @@ public interface PromotionGoodsService extends IService { */ void updatePromotionGoodsStock(PromotionTypeEnum typeEnum, String promotionId, String skuId, Integer quantity); + /** + * 更新促销活动商品索引 + * + * @param promotionGoods 促销商品信息 + */ + void updatePromotionGoodsByPromotions(PromotionGoods promotionGoods); + + /** + * 删除促销商品 + * + * @param promotionId 促销活动id + * @param skuIds skuId + */ + void deletePromotionGoods(String promotionId, List skuIds); + + /** + * 删除促销促销商品 + * + * @param promotionIds 促销活动id + */ + void deletePromotionGoods(List promotionIds); + + /** + * 根据参数删除促销商品 + * + * @param searchParams 查询参数 + */ + void deletePromotionGoods(PromotionGoodsSearchParams searchParams); + } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/promotion/service/PromotionService.java b/framework/src/main/java/cn/lili/modules/promotion/service/PromotionService.java index 54d07cc8..2349f055 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/service/PromotionService.java +++ b/framework/src/main/java/cn/lili/modules/promotion/service/PromotionService.java @@ -1,6 +1,5 @@ package cn.lili.modules.promotion.service; -import cn.lili.trigger.message.PromotionMessage; import cn.lili.modules.search.entity.dos.EsGoodsIndex; import java.util.Map; @@ -13,16 +12,6 @@ import java.util.Map; */ public interface PromotionService { - - /** - * 更新促销活动状态 - * - * @param promotionMessage 促销变更信息 - * @return 是否更新成功 - */ - boolean updatePromotionStatus(PromotionMessage promotionMessage); - - /** * 获取当前进行的所有促销活动信息 * @@ -36,6 +25,6 @@ public interface PromotionService { * @param index 商品索引 * @return 当前促销活动集合 */ - Map getGoodsCurrentPromotionMap(EsGoodsIndex index); + Map getGoodsPromotionMap(EsGoodsIndex index); } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/promotion/service/SeckillApplyService.java b/framework/src/main/java/cn/lili/modules/promotion/service/SeckillApplyService.java index 928bb00c..99b60133 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/service/SeckillApplyService.java +++ b/framework/src/main/java/cn/lili/modules/promotion/service/SeckillApplyService.java @@ -2,9 +2,9 @@ package cn.lili.modules.promotion.service; import cn.lili.common.vo.PageVO; import cn.lili.modules.promotion.entity.dos.SeckillApply; +import cn.lili.modules.promotion.entity.dto.search.SeckillSearchParams; import cn.lili.modules.promotion.entity.vos.SeckillApplyVO; import cn.lili.modules.promotion.entity.vos.SeckillGoodsVO; -import cn.lili.modules.promotion.entity.vos.SeckillSearchParams; import cn.lili.modules.promotion.entity.vos.SeckillTimelineVO; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; @@ -36,18 +36,42 @@ public interface SeckillApplyService extends IService { List getSeckillGoods(Integer timeline); /** - * 从mongo中分页查询限时请购申请列表 + * 分页查询限时请购申请列表 * * @param queryParam 秒杀活动申请查询参数 * @param pageVo 分页参数 * @return 限时请购申请列表 */ - IPage getSeckillApplyFromMongo(SeckillSearchParams queryParam, PageVO pageVo); + IPage getSeckillApplyPage(SeckillSearchParams queryParam, PageVO pageVo); + + /** + * 查询限时请购申请列表 + * + * @param queryParam 秒杀活动申请查询参数 + * @return 限时请购申请列表 + */ + List getSeckillApplyList(SeckillSearchParams queryParam); + + /** + * 查询限时请购申请列表总数 + * + * @param queryParam 查询条件 + * @return 限时请购申请列表总数 + */ + long getSeckillApplyCount(SeckillSearchParams queryParam); + + /** + * 查询限时请购申请 + * + * @param queryParam 秒杀活动申请查询参数 + * @return 限时请购申请 + */ + SeckillApply getSeckillApply(SeckillSearchParams queryParam); /** * 添加秒杀活动申请 * 检测是否商品是否同时参加多个活动 - * 将秒杀商品信息存入秒杀活动中,更新mogo信息 + * 将秒杀商品信息存入秒杀活动中 * 保存秒杀活动商品,促销商品信息 * * @param seckillId 秒杀活动编号 @@ -60,7 +84,17 @@ public interface SeckillApplyService extends IService { * 批量删除秒杀活动商品 * * @param seckillId 秒杀活动活动id - * @param id 秒杀活动商品 + * @param id 秒杀活动商品 */ - void removeSeckillApply(String seckillId, String id ); + void removeSeckillApply(String seckillId, String id); + + /** + * 更新秒杀商品库存 + * + * @param seckillId 秒杀活动id + * @param skuId 商品skuId + * @param quantity 库存 + */ + void updateSeckillApplyQuantity(String seckillId, String skuId, Integer quantity); + } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/promotion/service/SeckillService.java b/framework/src/main/java/cn/lili/modules/promotion/service/SeckillService.java index 6d388d3a..2b916e61 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/service/SeckillService.java +++ b/framework/src/main/java/cn/lili/modules/promotion/service/SeckillService.java @@ -1,11 +1,10 @@ package cn.lili.modules.promotion.service; -import cn.lili.common.vo.PageVO; import cn.lili.modules.promotion.entity.dos.Seckill; -import cn.lili.modules.promotion.entity.vos.SeckillSearchParams; +import cn.lili.modules.promotion.entity.dos.SeckillApply; import cn.lili.modules.promotion.entity.vos.SeckillVO; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; /** * 秒杀业务层 @@ -13,98 +12,61 @@ import com.baomidou.mybatisplus.extension.service.IService; * @author Chopper * @since 2020/11/18 9:45 上午 */ -public interface SeckillService extends IService { +public interface SeckillService extends AbstractPromotionsService { /** * 预创建活动数量 */ - public static final Integer PRE_CREATION = 7; + Integer PRE_CREATION = 7; /** - * 从mysql中根据条件获取秒杀活动分页列表 - * - * @param queryParam 查询参数 - * @param pageVo 分页参数 - * @return 秒杀活动分页列表 - */ - IPage getSeckillByPageFromMysql(SeckillSearchParams queryParam, PageVO pageVo); - - /** - * 从mongo中根据条件获取秒杀活动分页列表 - * - * @param queryParam 查询参数 - * @param pageVo 分页参数 - * @return 秒杀活动分页列表 - */ - IPage getSeckillByPageFromMongo(SeckillSearchParams queryParam, PageVO pageVo); - - /** - * 从mongo中获取秒杀活动信息 + * 获取秒杀活动信息 * * @param id 秒杀活动id * @return 秒杀活动信息 */ - SeckillVO getSeckillByIdFromMongo(String id); + SeckillVO getSeckillDetail(String id); /** * 初始化秒杀活动,默认开启三十天的秒杀活动 */ void init(); - /** - * 保存秒杀活动 - * - * @param seckill 秒杀活动 - * @return 是否保存成功 - */ - boolean saveSeckill(Seckill seckill); - - /** - * 商家报名秒杀活动活动 - * - * @param storeId 商家编号 - * @param seckillId 秒杀活动编号 - */ - void storeApply(String storeId, String seckillId); - - /** - * 修改秒杀活动 - * - * @param seckillVO 秒杀活动信息 - * @return 是否修改成功 - */ - boolean modifySeckill(SeckillVO seckillVO); - - /** - * 删除秒杀活动 - * - * @param id 秒杀活动编号 - */ - void deleteSeckill(String id); - - /** - * 开启一个秒杀活动 - * - * @param id 秒杀活动编号 - */ - void openSeckill(String id); - - /** - * 关闭一个秒杀活动 - * - * @param id 秒杀活动编号 - */ - void closeSeckill(String id); /** * 获取当前可参与的活动数量 * * @return 可参与活动数量 */ - Integer getApplyNum(); + long getApplyNum(); /** * 更新秒杀活动的商品数量 + * * @param seckillId 秒杀活动ID */ void updateSeckillGoodsNum(String seckillId); + + /** + * 更新商品索引限时抢购信息 + * + * @param seckill 限时抢购信息 + * @param seckillApplies 限时抢购商品列表 + */ + void updateEsGoodsSeckill(Seckill seckill, List seckillApplies); + + /** + * 删除商品索引限时抢购信息 + * + * @param seckill 限时抢购信息 + * @param skuIds 商品skuId列表 + */ + void deleteEsGoodsSeckill(Seckill seckill, List skuIds); + + /** + * 设置秒杀活动的每个参与活动商品的详细时间 + * + * @param seckill 秒杀活动信息 + * @param seckillApply 申请参与秒杀活动的商品信息 + */ + void setSeckillApplyTime(Seckill seckill, SeckillApply seckillApply); } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/AbstractPromotionsServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/AbstractPromotionsServiceImpl.java new file mode 100644 index 00000000..768cf01a --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/AbstractPromotionsServiceImpl.java @@ -0,0 +1,274 @@ +package cn.lili.modules.promotion.serviceimpl; + +import cn.hutool.core.text.CharSequenceUtil; +import cn.hutool.json.JSONUtil; +import cn.lili.common.enums.ResultCode; +import cn.lili.common.exception.ServiceException; +import cn.lili.common.properties.RocketmqCustomProperties; +import cn.lili.common.vo.PageVO; +import cn.lili.modules.promotion.entity.dos.BasePromotions; +import cn.lili.modules.promotion.entity.dos.PromotionGoods; +import cn.lili.modules.promotion.entity.dto.search.BasePromotionsSearchParams; +import cn.lili.modules.promotion.entity.enums.PromotionsScopeTypeEnum; +import cn.lili.modules.promotion.service.AbstractPromotionsService; +import cn.lili.modules.promotion.service.PromotionGoodsService; +import cn.lili.modules.promotion.tools.PromotionTools; +import cn.lili.mybatis.util.PageUtil; +import cn.lili.rocketmq.RocketmqSendCallbackBuilder; +import cn.lili.rocketmq.tags.GoodsTagsEnum; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.apache.rocketmq.spring.core.RocketMQTemplate; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; + +/** + * @author paulG + * @since 2021/11/30 + **/ +@Transactional(rollbackFor = Exception.class) +public abstract class AbstractPromotionsServiceImpl, T extends BasePromotions> extends ServiceImpl implements AbstractPromotionsService { + + /** + * 促销商品 + */ + @Autowired + private PromotionGoodsService promotionGoodsService; + + /** + * rocketMq配置 + */ + @Autowired + private RocketmqCustomProperties rocketmqCustomProperties; + + /** + * rocketMq + */ + @Autowired + private RocketMQTemplate rocketMQTemplate; + + /** + * 通用促销保存 + * 调用顺序: + * 1. initPromotion 初始化促销信息 + * 2. checkPromotions 检查促销参数 + * 3. save 保存促销信息 + * 4. updatePromotionGoods 更新促销商品信息 + * 5。 updateEsGoodsIndex 更新商品索引促销信息 + * + * @param promotions 促销信息 + * @return 是否保存成功 + */ + @Override + @Transactional(rollbackFor = {Exception.class}) + public boolean savePromotions(T promotions) { + this.initPromotion(promotions); + this.checkPromotions(promotions); + boolean save = this.save(promotions); + if (this.updatePromotionsGoods(promotions)) { + this.updateEsGoodsIndex(promotions); + } + return save; + } + + /** + * 通用促销更新 + * 调用顺序: + * 1. checkStatus 检查促销状态 + * 2. checkPromotions 检查促销参数 + * 3. saveOrUpdate 保存促销信息 + * 4. updatePromotionGoods 更新促销商品信息 + * 5. updateEsGoodsIndex 更新商品索引促销信息 + * + * @param promotions 促销信息 + * @return 是否更新成功 + */ + @Override + @Transactional(rollbackFor = {Exception.class}) + public boolean updatePromotions(T promotions) { + this.checkStatus(promotions); + this.checkPromotions(promotions); + boolean save = this.saveOrUpdate(promotions); + if (this.updatePromotionsGoods(promotions)) { + this.updateEsGoodsIndex(promotions); + } + return save; + } + + /** + * 更新促销状态 + * 如果要更新促销状态为关闭,startTime和endTime置为空即可 + * + * @param ids 促销id集合 + * @param startTime 开始时间 + * @param endTime 结束时间 + * @return 是否更新成功 + */ + @Override + @Transactional(rollbackFor = {Exception.class}) + public boolean updateStatus(List ids, Long startTime, Long endTime) { + List promotionsList = this.list(new QueryWrapper().in("id", ids)); + for (T t : promotionsList) { + if (startTime != null && endTime != null) { + t.setStartTime(new Date(startTime)); + t.setEndTime(new Date(endTime)); + } else { + t.setStartTime(null); + t.setEndTime(null); + } + this.checkStatus(t); + this.updatePromotionsGoods(t); + this.updateEsGoodsIndex(t); + } + if (startTime != null && endTime != null) { + return this.update(new UpdateWrapper().in("id", ids).set("start_time", new Date(startTime)).set("end_time", new Date(endTime))); + } else { + return this.update(new UpdateWrapper().in("id", ids).set("start_time", null).set("end_time", null)); + } + } + + /** + * 移除促销活动 + * + * @param ids 促销活动id集合 + * @return 是否移除成功 + */ + @Override + @Transactional(rollbackFor = {Exception.class}) + public boolean removePromotions(List ids) { + for (String id : ids) { + T promotions = this.getById(id); + this.checkStatus(promotions); + promotions.setStartTime(null); + promotions.setEndTime(null); + this.updateEsGoodsIndex(promotions); + } + this.promotionGoodsService.deletePromotionGoods(ids); + return this.removeByIds(ids); + } + + /** + * 分页查询促销信息 + * + * @param searchParams 查询参数,继承自继承促销查询参数 + * @param page 分页参数 + * @return 分页促销信息 + */ + @Override + public IPage pageFindAll(S searchParams, PageVO page) { + page.setNotConvert(false); + return this.page(PageUtil.initPage(page), searchParams.queryWrapper()); + } + + /** + * 列表查询促销信息 + * + * @param searchParams 查询参数,继承自继承促销查询参数 + * @return 列表促销信息 + */ + @Override + public List listFindAll(S searchParams) { + return this.list(searchParams.queryWrapper()); + } + + /** + * 初始化促销字段 + * + * @param promotions 促销实体 + */ + @Override + public void initPromotion(T promotions) { + if (CharSequenceUtil.isEmpty(promotions.getScopeType())) { + promotions.setScopeType(PromotionsScopeTypeEnum.PORTION_GOODS.name()); + } + } + + /** + * 检查促销参数 + * + * @param promotions 促销实体 + */ + @Override + public void checkPromotions(T promotions) { + PromotionTools.checkPromotionTime(promotions.getStartTime(), promotions.getEndTime()); + } + + /** + * 检查促销状态 + * + * @param promotions 促销实体 + */ + @Override + public void checkStatus(T promotions) { + T byId = this.getById(promotions.getId()); + if (byId == null) { + throw new ServiceException(ResultCode.PROMOTION_ACTIVITY_ERROR); + } + } + + /** + * 更新促销商品信息 + * + * @param promotions 促销实体 + * @return + */ + @Override + @Transactional(rollbackFor = {Exception.class}) + public boolean updatePromotionsGoods(T promotions) { + if (promotions.getStartTime() == null && promotions.getEndTime() == null) { + this.promotionGoodsService.deletePromotionGoods(Collections.singletonList(promotions.getId())); + return true; + } + boolean result = true; + if (CharSequenceUtil.equalsAny(promotions.getScopeType(), PromotionsScopeTypeEnum.ALL.name(), PromotionsScopeTypeEnum.PORTION_GOODS_CATEGORY.name())) { + PromotionGoods promotionGoods = new PromotionGoods(); + promotionGoods.setScopeId(promotions.getScopeId()); + promotionGoods.setScopeType(promotions.getScopeType()); + promotionGoods.setPromotionId(promotions.getId()); + promotionGoods.setStoreId(promotions.getStoreId()); + promotionGoods.setStoreName(promotions.getStoreName()); + promotionGoods.setStartTime(promotions.getStartTime()); + promotionGoods.setEndTime(promotions.getEndTime()); + promotionGoods.setPromotionType(this.getPromotionType().name()); + promotionGoods.setTitle(promotions.getPromotionName()); + this.promotionGoodsService.deletePromotionGoods(Collections.singletonList(promotions.getId())); + result = this.promotionGoodsService.save(promotionGoods); + } + return result; + } + + /** + * 更新促销信息到商品索引 + * + * @param promotions 促销实体 + */ + @Override + public void updateEsGoodsIndex(T promotions) { + if (promotions.getStartTime() == null && promotions.getEndTime() == null) { + //删除商品促销消息 + String destination = rocketmqCustomProperties.getGoodsTopic() + ":" + GoodsTagsEnum.DELETE_GOODS_INDEX_PROMOTIONS.name(); + //发送mq消息 + rocketMQTemplate.asyncSend(destination, JSONUtil.toJsonStr(promotions), RocketmqSendCallbackBuilder.commonCallback()); + } else { + + String esPromotionKey = this.getPromotionType().name() + "-" + promotions.getId(); + Map map = new HashMap<>(); + // es促销key + map.put("esPromotionKey", esPromotionKey); + // 促销类型全路径名 + map.put("promotionsType", promotions.getClass().getName()); + // 促销实体 + map.put("promotions", promotions); + //更新商品促销消息 + String destination = rocketmqCustomProperties.getGoodsTopic() + ":" + GoodsTagsEnum.UPDATE_GOODS_INDEX_PROMOTIONS.name(); + //发送mq消息 + rocketMQTemplate.asyncSend(destination, JSONUtil.toJsonStr(map), RocketmqSendCallbackBuilder.commonCallback()); + } + } + +} diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponActivityItemServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponActivityItemServiceImpl.java index fc2c7bf8..03eedfa4 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponActivityItemServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponActivityItemServiceImpl.java @@ -31,4 +31,14 @@ public class CouponActivityItemServiceImpl extends ServiceImpl couponIds) { + this.remove(new LambdaQueryWrapper() + .in(CouponActivityItem::getCouponId, couponIds)); + } } diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponActivityServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponActivityServiceImpl.java index c46c60f9..c413e6a4 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponActivityServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponActivityServiceImpl.java @@ -5,8 +5,6 @@ import cn.hutool.json.JSONUtil; import cn.lili.common.enums.PromotionTypeEnum; import cn.lili.common.enums.ResultCode; import cn.lili.common.exception.ServiceException; -import cn.lili.common.properties.RocketmqCustomProperties; -import cn.lili.common.utils.DateUtil; import cn.lili.modules.member.entity.dos.Member; import cn.lili.modules.member.service.MemberService; import cn.lili.modules.promotion.entity.dos.Coupon; @@ -14,9 +12,7 @@ import cn.lili.modules.promotion.entity.dos.CouponActivity; import cn.lili.modules.promotion.entity.dos.CouponActivityItem; import cn.lili.modules.promotion.entity.dos.MemberCoupon; import cn.lili.modules.promotion.entity.dto.CouponActivityDTO; -import cn.lili.modules.promotion.entity.enums.CouponActivitySendTypeEnum; -import cn.lili.modules.promotion.entity.enums.MemberCouponStatusEnum; -import cn.lili.modules.promotion.entity.enums.PromotionStatusEnum; +import cn.lili.modules.promotion.entity.enums.*; import cn.lili.modules.promotion.entity.vos.CouponActivityVO; import cn.lili.modules.promotion.mapper.CouponActivityMapper; import cn.lili.modules.promotion.service.CouponActivityItemService; @@ -24,15 +20,6 @@ import cn.lili.modules.promotion.service.CouponActivityService; import cn.lili.modules.promotion.service.CouponService; import cn.lili.modules.promotion.service.MemberCouponService; import cn.lili.modules.promotion.tools.PromotionTools; -import cn.lili.trigger.enums.DelayTypeEnums; -import cn.lili.trigger.interfaces.TimeTrigger; -import cn.lili.trigger.message.PromotionMessage; -import cn.lili.trigger.model.TimeExecuteConstant; -import cn.lili.trigger.model.TimeTriggerMsg; -import cn.lili.trigger.util.DelayQueueTools; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import groovy.util.logging.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -48,7 +35,7 @@ import java.util.stream.Collectors; */ @Slf4j @Service -public class CouponActivityServiceImpl extends ServiceImpl implements CouponActivityService { +public class CouponActivityServiceImpl extends AbstractPromotionsServiceImpl implements CouponActivityService { @Autowired private CouponService couponService; @@ -58,50 +45,6 @@ public class CouponActivityServiceImpl extends ServiceImpl() - .eq(CouponActivityItem::getActivityId, couponActivityDTO.getId())); - //重新添加优惠券活动关联优惠券 - this.addCouponActivityItems(couponActivityDTO); - return couponActivityDTO; - } @Override public CouponActivityVO getCouponActivityVO(String couponActivityId) { @@ -152,11 +95,88 @@ public class CouponActivityServiceImpl extends ServiceImpl memberCouponList = new LinkedList<>(); @@ -186,7 +206,7 @@ public class CouponActivityServiceImpl extends ServiceImpl nowTime) { - throw new ServiceException(ResultCode.COUPON_ACTIVITY_START_TIME_ERROR); - } - //活动时间需超过当前时间 - PromotionTools.checkPromotionTime(couponActivity.getStartTime().getTime(), couponActivity.getEndTime().getTime()); - //指定会员判定 - if (couponActivity.getActivityScope().equals(CouponActivitySendTypeEnum.DESIGNATED.name()) && couponActivity.getMemberDTOS().isEmpty()) { - throw new ServiceException(ResultCode.COUPON_ACTIVITY_MEMBER_ERROR); - } - //优惠券数量判定 - if (couponActivity.getCouponActivityItems().isEmpty()) { - throw new ServiceException(ResultCode.COUPON_ACTIVITY_ITEM_ERROR); - } else if (couponActivity.getCouponActivityItems().size() > 10) { - throw new ServiceException(ResultCode.COUPON_ACTIVITY_ITEM_MUST_NUM_ERROR); - } else { - for (CouponActivityItem item : couponActivity.getCouponActivityItems()) { - if (item.getNum() == null || item.getNum() <= 0) { - throw new ServiceException(ResultCode.COUPON_ACTIVITY_ITEM_NUM_ERROR); - } - } - } - } - /** * 获取优惠券的范围范围 * 此方法用于精准发券 @@ -243,30 +231,34 @@ public class CouponActivityServiceImpl extends ServiceImpl> getMemberList(CouponActivity couponActivity) { //判断优惠券的发送范围,获取会员列表 if ("ALL".equals(couponActivity.getActivityScope())) { - return memberService.listMaps(new QueryWrapper() - .select("id,nick_name")); + return this.memberService.listFieldsByMemberIds("id,nick_name", null); } else { - List ids = new ArrayList<>(); + List ids = new ArrayList<>(); if (JSONUtil.isJsonArray(couponActivity.getActivityScopeInfo())) { JSONArray array = JSONUtil.parseArray(couponActivity.getActivityScopeInfo()); - ids = array.toList(Map.class).stream().map(i -> i.get("id")).collect(Collectors.toList()); + ids = array.toList(Map.class).stream().map(i -> i.get("id").toString()).collect(Collectors.toList()); } - return memberService.listMaps(new QueryWrapper() - .select("id,nick_name") - .in("id", ids)); + return memberService.listFieldsByMemberIds("id,nick_name", ids); } } /** - * 添加优惠券活动关联优惠券 + * 检查优惠券 * - * @param couponActivityDTO 优惠券活动DTO + * @param couponActivityItems 优惠券列表 */ - private void addCouponActivityItems(CouponActivityDTO couponActivityDTO) { - //创建优惠券活动子列表 - for (CouponActivityItem couponActivityItem : couponActivityDTO.getCouponActivityItems()) { - couponActivityItem.setActivityId(couponActivityDTO.getId()); + private void checkCouponActivityItem(List couponActivityItems) { + //优惠券数量判定 + if (couponActivityItems.isEmpty()) { + throw new ServiceException(ResultCode.COUPON_ACTIVITY_ITEM_ERROR); + } else if (couponActivityItems.size() > 10) { + throw new ServiceException(ResultCode.COUPON_ACTIVITY_ITEM_MUST_NUM_ERROR); + } else { + for (CouponActivityItem item : couponActivityItems) { + if (item.getNum() == null || item.getNum() <= 0) { + throw new ServiceException(ResultCode.COUPON_ACTIVITY_ITEM_NUM_ERROR); + } + } } - couponActivityItemService.saveBatch(couponActivityDTO.getCouponActivityItems()); } } diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponServiceImpl.java index 7533bf3b..7a2f3d90 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponServiceImpl.java @@ -1,43 +1,37 @@ package cn.lili.modules.promotion.serviceimpl; import cn.hutool.core.text.CharSequenceUtil; +import cn.hutool.json.JSONUtil; +import cn.lili.common.enums.PromotionTypeEnum; import cn.lili.common.enums.ResultCode; import cn.lili.common.exception.ServiceException; -import cn.lili.common.enums.PromotionTypeEnum; -import cn.lili.trigger.enums.DelayTypeEnums; -import cn.lili.trigger.interfaces.TimeTrigger; -import cn.lili.trigger.message.PromotionMessage; -import cn.lili.trigger.model.TimeExecuteConstant; -import cn.lili.trigger.model.TimeTriggerMsg; -import cn.lili.trigger.util.DelayQueueTools; import cn.lili.common.utils.DateUtil; -import cn.lili.mybatis.util.PageUtil; -import cn.lili.common.utils.StringUtils; import cn.lili.common.vo.PageVO; -import cn.lili.common.properties.RocketmqCustomProperties; import cn.lili.modules.goods.entity.dos.GoodsSku; import cn.lili.modules.goods.service.GoodsSkuService; -import cn.lili.modules.promotion.entity.dos.*; -import cn.lili.modules.promotion.entity.enums.*; -import cn.lili.modules.promotion.entity.vos.CouponSearchParams; +import cn.lili.modules.promotion.entity.dos.Coupon; +import cn.lili.modules.promotion.entity.dos.FullDiscount; +import cn.lili.modules.promotion.entity.dos.PromotionGoods; +import cn.lili.modules.promotion.entity.dto.search.CouponSearchParams; +import cn.lili.modules.promotion.entity.dto.search.FullDiscountSearchParams; +import cn.lili.modules.promotion.entity.dto.search.PromotionGoodsSearchParams; +import cn.lili.modules.promotion.entity.enums.CouponRangeDayEnum; +import cn.lili.modules.promotion.entity.enums.CouponTypeEnum; +import cn.lili.modules.promotion.entity.enums.PromotionsScopeTypeEnum; +import cn.lili.modules.promotion.entity.enums.PromotionsStatusEnum; import cn.lili.modules.promotion.entity.vos.CouponVO; import cn.lili.modules.promotion.mapper.CouponMapper; import cn.lili.modules.promotion.service.*; import cn.lili.modules.promotion.tools.PromotionTools; +import cn.lili.mybatis.util.PageUtil; 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 com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.mongodb.core.MongoTemplate; -import org.springframework.data.mongodb.core.query.Criteria; -import org.springframework.data.mongodb.core.query.Query; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.Date; +import java.util.Collections; import java.util.List; import java.util.stream.Collectors; @@ -49,28 +43,13 @@ import java.util.stream.Collectors; */ @Service @Transactional(rollbackFor = Exception.class) -public class CouponServiceImpl extends ServiceImpl implements CouponService { +public class CouponServiceImpl extends AbstractPromotionsServiceImpl implements CouponService { - /** - * 延时任务 - */ - @Autowired - private TimeTrigger timeTrigger; - /** - * Mongo - */ - @Autowired - private MongoTemplate mongoTemplate; /** * 规格商品 */ @Autowired private GoodsSkuService goodsSkuService; - /** - * Rocketmq - */ - @Autowired - private RocketmqCustomProperties rocketmqCustomProperties; /** * 促销商品 */ @@ -92,170 +71,6 @@ public class CouponServiceImpl extends ServiceImpl impleme @Autowired private CouponActivityItemService couponActivityItemService; - @Override - public CouponVO add(CouponVO coupon) { - //检查参数 - this.checkParam(coupon); - coupon.setUsedNum(0); - coupon.setReceivedNum(0); - //保存到MYSQL中 - this.save(coupon); - //如果优惠券类型为部分商品则将促销活动商品更新 - this.updateScopePromotionGoods(coupon); - //保存到MONGO中 - this.mongoTemplate.save(coupon); - //如果优惠券是固定时间则添加延时任务 - if (coupon.getRangeDayType().equals(CouponRangeDayEnum.FIXEDTIME.name())) { - PromotionMessage promotionMessage = new PromotionMessage(coupon.getId(), PromotionTypeEnum.COUPON.name(), PromotionStatusEnum.START.name(), coupon.getStartTime(), coupon.getEndTime()); - TimeTriggerMsg timeTriggerMsg = new TimeTriggerMsg(TimeExecuteConstant.PROMOTION_EXECUTOR, - coupon.getStartTime().getTime(), - promotionMessage, - DelayQueueTools.wrapperUniqueKey(DelayTypeEnums.PROMOTION, (promotionMessage.getPromotionType() + promotionMessage.getPromotionId())), - rocketmqCustomProperties.getPromotionTopic()); - //发送促销活动开始的延时任务 - this.timeTrigger.addDelay(timeTriggerMsg); - } - - return coupon; - } - - @Override - public CouponVO updateCoupon(CouponVO couponVO) { - CouponVO coupon = checkStatus(couponVO.getId()); - //检查参数 - this.checkParam(couponVO); - //更新到MYSQL中 - this.updateById(couponVO); - //如果优惠券类型为部分商品则将促销活动商品更新 - this.updateScopePromotionGoods(couponVO); - //保存到MONGO中 - this.mongoTemplate.save(couponVO); - PromotionMessage promotionMessage = new PromotionMessage(couponVO.getId(), PromotionTypeEnum.COUPON.name(), PromotionStatusEnum.START.name(), coupon.getStartTime(), coupon.getEndTime()); - //更新延时任务 - this.timeTrigger.edit(TimeExecuteConstant.PROMOTION_EXECUTOR, - promotionMessage, - coupon.getStartTime().getTime(), couponVO.getStartTime().getTime(), - DelayQueueTools.wrapperUniqueKey(DelayTypeEnums.PROMOTION, (promotionMessage.getPromotionType() + promotionMessage.getPromotionId())), - DateUtil.getDelayTime(couponVO.getStartTime().getTime()), - rocketmqCustomProperties.getPromotionTopic()); - return couponVO; - } - - @Override - public boolean updateCouponStatus(List couponId, PromotionStatusEnum promotionStatus) { - Query query = new Query(); - query.addCriteria(Criteria.where("id").in(couponId)); - List couponVOS = this.mongoTemplate.find(query, CouponVO.class); - couponVOS = couponVOS.parallelStream().filter(i -> Boolean.FALSE.equals(i.getDeleteFlag())).collect(Collectors.toList()); - if (couponVOS.isEmpty()) { - throw new ServiceException(ResultCode.COUPON_NOT_EXIST); - } - for (CouponVO couponVO : couponVOS) { - if (promotionStatus.name().equals(PromotionStatusEnum.START.name())) { - this.checkParam(couponVO); - } - couponVO.setPromotionStatus(promotionStatus.name()); - this.updateById(couponVO); - this.mongoTemplate.save(couponVO); - PromotionMessage promotionMessage = new PromotionMessage(couponVO.getId(), PromotionTypeEnum.COUPON.name(), promotionStatus.name(), couponVO.getStartTime(), couponVO.getEndTime()); - //更新延时任务 - this.timeTrigger.edit(TimeExecuteConstant.PROMOTION_EXECUTOR, - promotionMessage, - couponVO.getStartTime().getTime(), couponVO.getStartTime().getTime(), - DelayQueueTools.wrapperUniqueKey(DelayTypeEnums.PROMOTION, (promotionMessage.getPromotionType() + promotionMessage.getPromotionId())), - DateUtil.getDelayTime(couponVO.getStartTime().getTime()), - rocketmqCustomProperties.getPromotionTopic()); - } - return true; - } - - @Override - public boolean deleteCoupon(String id) { - CouponVO couponVO = checkStatus(id); - - //更新优惠券状态为关闭,标示删除标志 - LambdaUpdateWrapper couponUpdateWrapper = new LambdaUpdateWrapper().eq(Coupon::getId, id) - .set(Coupon::getPromotionStatus, PromotionStatusEnum.CLOSE.name()).set(Coupon::getDeleteFlag, true); - boolean result = this.update(couponUpdateWrapper); - - //更新促销商品记录信息为删除 - LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper() - .eq(PromotionGoods::getPromotionId, id) - .set(PromotionGoods::getPromotionStatus, PromotionStatusEnum.CLOSE.name()) - .set(PromotionGoods::getDeleteFlag, true); - this.promotionGoodsService.update(updateWrapper); - - //删除mongo优惠券信息 - LambdaUpdateWrapper memberCouponLambdaUpdateWrapper = new LambdaUpdateWrapper() - .eq(MemberCoupon::getCouponId, id) - .set(MemberCoupon::getMemberCouponStatus, MemberCouponStatusEnum.CLOSED.name()); - memberCouponService.update(memberCouponLambdaUpdateWrapper); - this.mongoTemplate.remove(new Query().addCriteria(Criteria.where("id").is(id)), CouponVO.class); - - //删除优惠券活动关联优惠券 - couponActivityItemService.remove(new LambdaQueryWrapper() - .eq(CouponActivityItem::getCouponId, id)); - - //删除延时任务 - this.timeTrigger.delete(TimeExecuteConstant.PROMOTION_EXECUTOR, - couponVO.getStartTime().getTime(), - DelayQueueTools.wrapperUniqueKey(DelayTypeEnums.PROMOTION, (PromotionTypeEnum.COUPON.name() + couponVO.getId())), - rocketmqCustomProperties.getPromotionTopic()); - return result; - } - - @Override - public IPage getCouponsByPageFromMongo(CouponSearchParams param, PageVO page) { - Query query = param.mongoQuery(); - IPage coupons = new Page<>(); - if (page != null) { - page.setNotConvert(true); - PromotionTools.mongoQueryPageParam(query, page); - coupons.setSize(page.getPageSize()); - coupons.setCurrent(page.getPageNumber()); - } - List couponVOList = mongoTemplate.find(query, CouponVO.class); - coupons.setRecords(couponVOList); - coupons.setTotal(mongoTemplate.count(query, CouponVO.class)); - return coupons; - } - - /** - * 根据查询条件从mongo中获取优惠券信息列表 - * - * @param param 查询参数 - * @param page 分页参数 - * @return 优惠券信息列表 - */ - @Override - public IPage getCanReceiveCoupons(CouponSearchParams param, PageVO page) { - Query query = param.mongoQuery(); - query.addCriteria(Criteria.where("promotionStatus").is(PromotionStatusEnum.START.name())); - query.addCriteria(Criteria.where("endTime").gte(new Date())); - IPage coupons = new Page<>(); - if (page != null) { - page.setNotConvert(true); - PromotionTools.mongoQueryPageParam(query, page); - coupons.setSize(page.getPageSize()); - coupons.setCurrent(page.getPageNumber()); - } - List couponVOList = mongoTemplate.find(query, CouponVO.class); - coupons.setRecords(couponVOList); - coupons.setTotal(mongoTemplate.count(query, CouponVO.class)); - return coupons; - } - - @Override - public CouponVO getCouponDetailFromMongo(String id) { - return mongoTemplate.findById(id, CouponVO.class); - } - - @Override - public IPage getCouponsByPage(CouponSearchParams param, PageVO page) { - QueryWrapper queryWrapper = param.wrapper(); - return page(PageUtil.initPage(page), queryWrapper); - } - /** * 领取优惠券 * @@ -264,13 +79,22 @@ public class CouponServiceImpl extends ServiceImpl impleme */ @Override public void receiveCoupon(String couponId, Integer receiveNum) { - CouponVO couponVO = this.mongoTemplate.findById(couponId, CouponVO.class); - couponVO.setReceivedNum(couponVO.getReceivedNum() + receiveNum); - LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); - updateWrapper.eq(Coupon::getId, couponId); - updateWrapper.set(Coupon::getReceivedNum, couponVO.getReceivedNum()); - this.update(updateWrapper); - this.mongoTemplate.save(couponVO); + Coupon coupon = this.getById(couponId); + if (coupon == null) { + throw new ServiceException(ResultCode.COUPON_NOT_EXIST); + } + this.update(new LambdaUpdateWrapper().eq(Coupon::getId, coupon.getId()).set(Coupon::getReceivedNum, + coupon.getReceivedNum() + receiveNum)); + } + + @Override + public boolean removePromotions(List ids) { + //删除优惠券信息 + this.memberCouponService.closeMemberCoupon(ids); + + //删除优惠券活动关联优惠券 + this.couponActivityItemService.removeByCouponId(ids); + return super.removePromotions(ids); } /** @@ -281,51 +105,154 @@ public class CouponServiceImpl extends ServiceImpl impleme */ @Override public void usedCoupon(String couponId, Integer usedNum) { - CouponVO couponVO = this.mongoTemplate.findById(couponId, CouponVO.class); - couponVO.setUsedNum(couponVO.getUsedNum() + usedNum); - LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); - updateWrapper.eq(Coupon::getId, couponId); - updateWrapper.set(Coupon::getUsedNum, couponVO.getUsedNum()); - this.update(updateWrapper); - this.mongoTemplate.save(couponVO); + Coupon coupon = this.getById(couponId); + if (coupon == null) { + throw new ServiceException(ResultCode.COUPON_NOT_EXIST); + } + + this.update(new LambdaUpdateWrapper().eq(Coupon::getId, coupon.getId()).set(Coupon::getUsedNum, + coupon.getUsedNum() + usedNum)); } /** - * 检查优惠券信息是否合法 + * 获取优惠券展示实体 * - * @param coupon 优惠券信息 + * @param searchParams 查询参数 + * @param page 分页参数 + * @return 优惠券展示实体列表 */ - private void checkParam(CouponVO coupon) { + @Override + public IPage pageVOFindAll(CouponSearchParams searchParams, PageVO page) { + IPage couponIPage = super.pageFindAll(searchParams, page); + List couponVOList = couponIPage.getRecords().stream().map(CouponVO::new).collect(Collectors.toList()); + return PageUtil.convertPage(couponIPage, couponVOList); + } + /** + * 获取优惠券展示详情 + * + * @param couponId 优惠券id + * @return 返回优惠券展示详情 + */ + @Override + public CouponVO getDetail(String couponId) { + CouponVO couponVO = new CouponVO(this.getById(couponId)); + PromotionGoodsSearchParams searchParams = new PromotionGoodsSearchParams(); + searchParams.setPromotionId(couponId); + List promotionsByPromotionId = this.promotionGoodsService.listFindAll(searchParams); + if (promotionsByPromotionId != null && !promotionsByPromotionId.isEmpty()) { + couponVO.setPromotionGoodsList(promotionsByPromotionId); + } + return couponVO; + } + + /** + * 更新促销状态 + * 如果要更新促销状态为关闭,startTime和endTime置为空即可 + * + * @param ids 促销id集合 + * @param startTime 开始时间 + * @param endTime 结束时间 + * @return 是否更新成功 + */ + @Override + public boolean updateStatus(List ids, Long startTime, Long endTime) { + List list = this.list(new LambdaQueryWrapper().in(Coupon::getId, ids).eq(Coupon::getRangeDayType, CouponRangeDayEnum.DYNAMICTIME.name())); + if (!list.isEmpty()) { + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.in(Coupon::getId, list.stream().map(Coupon::getId).collect(Collectors.toList())); + updateWrapper.set(Coupon::getEffectiveDays, 0); + this.update(updateWrapper); + } + + return super.updateStatus(ids, startTime, endTime); + } + + @Override + public void initPromotion(Coupon promotions) { + promotions.setUsedNum(0); + promotions.setReceivedNum(0); + } + + @Override + public void checkPromotions(Coupon promotions) { + if (promotions.getRangeDayType() == null) { + super.checkPromotions(promotions); + } //优惠券限制领取数量 - if (coupon.getCouponLimitNum() < 0) { + if (promotions.getCouponLimitNum() < 0) { throw new ServiceException(ResultCode.COUPON_LIMIT_NUM_LESS_THAN_0); } //如果发行数量是0则判断领取限制数量 - if (coupon.getPublishNum() != 0 && coupon.getCouponLimitNum() > coupon.getPublishNum()) { + if (promotions.getPublishNum() != 0 && promotions.getCouponLimitNum() > promotions.getPublishNum()) { throw new ServiceException(ResultCode.COUPON_LIMIT_GREATER_THAN_PUBLISH); } //打折优惠券大于10折 - boolean discountCoupon = (coupon.getCouponType().equals(CouponTypeEnum.DISCOUNT.name()) - && (coupon.getCouponDiscount() < 0 && coupon.getCouponDiscount() > 10)); + boolean discountCoupon = (promotions.getCouponType().equals(CouponTypeEnum.DISCOUNT.name()) + && (promotions.getCouponDiscount() < 0 && promotions.getCouponDiscount() > 10)); if (discountCoupon) { throw new ServiceException(ResultCode.COUPON_DISCOUNT_ERROR); } //优惠券为固定时间类型 - if (coupon.getRangeDayType() != null && coupon.getRangeDayType().equals(CouponRangeDayEnum.FIXEDTIME.name())) { + if (promotions.getRangeDayType() != null && promotions.getRangeDayType().equals(CouponRangeDayEnum.FIXEDTIME.name())) { long nowTime = DateUtil.getDateline() * 1000; //固定时间的优惠券不能小于当前时间 - if (coupon.getEndTime().getTime() < nowTime) { + if (promotions.getEndTime().getTime() < nowTime) { throw new ServiceException(ResultCode.PROMOTION_END_TIME_ERROR); } - //促销通用时间校验 - PromotionTools.checkPromotionTime(coupon.getStartTime().getTime(), coupon.getEndTime().getTime()); } - this.checkCouponScope(coupon); - //对状态的处理.如果未传递状态则需要 根据当前时间来确认优惠券状态 - this.promotionStatusEmpty(coupon); + + this.checkCouponScope((CouponVO) promotions); + } + + @Override + public void checkStatus(Coupon promotions) { + super.checkStatus(promotions); + FullDiscountSearchParams searchParams = new FullDiscountSearchParams(); + searchParams.setCouponFlag(true); + searchParams.setCouponId(promotions.getId()); + searchParams.setPromotionStatus(PromotionsStatusEnum.START.name()); + List fullDiscounts = fullDiscountService.listFindAll(searchParams); + if (fullDiscounts != null && !fullDiscounts.isEmpty()) { + throw new ServiceException("当前优惠券参与了促销活动【" + fullDiscounts.get(0).getPromotionName() + "】不能进行编辑删除操作"); + } + } + + @Override + public boolean updatePromotionsGoods(Coupon promotions) { + boolean result = super.updatePromotionsGoods(promotions); + if (!PromotionsStatusEnum.CLOSE.name().equals(promotions.getPromotionStatus()) && + PromotionsScopeTypeEnum.PORTION_GOODS.name().equals(promotions.getScopeType()) && + promotions instanceof CouponVO) { + CouponVO couponVO = (CouponVO) promotions; + this.promotionGoodsService.deletePromotionGoods(Collections.singletonList(promotions.getId())); + List promotionGoodsList = PromotionTools.promotionGoodsInit(couponVO.getPromotionGoodsList(), couponVO, this.getPromotionType()); + for (PromotionGoods promotionGoods : promotionGoodsList) { + promotionGoods.setStoreId(promotions.getStoreId()); + promotionGoods.setStoreName(promotions.getStoreName()); + } + //促销活动商品更新 + result = this.promotionGoodsService.saveBatch(promotionGoodsList); + } + return result; + } + + /** + * 更新商品索引优惠券信息 + * + * @param promotions 优惠券信息 + */ + @Override + public void updateEsGoodsIndex(Coupon promotions) { + Coupon coupon = JSONUtil.parse(promotions).toBean(Coupon.class); + super.updateEsGoodsIndex(coupon); + } + + @Override + public PromotionTypeEnum getPromotionType() { + return PromotionTypeEnum.COUPON; } /** @@ -334,82 +261,38 @@ public class CouponServiceImpl extends ServiceImpl impleme * @param coupon 检查的优惠券对象 */ private void checkCouponScope(CouponVO coupon) { - boolean portionGoodsScope = (coupon.getScopeType().equals(CouponScopeTypeEnum.PORTION_GOODS.name()) + boolean portionGoodsScope = (coupon.getScopeType().equals(PromotionsScopeTypeEnum.PORTION_GOODS.name()) && (coupon.getPromotionGoodsList() == null || coupon.getPromotionGoodsList().isEmpty())); if (portionGoodsScope) { throw new ServiceException(ResultCode.COUPON_SCOPE_TYPE_GOODS_ERROR); - } else if (coupon.getScopeType().equals(CouponScopeTypeEnum.PORTION_GOODS.name()) && CharSequenceUtil.isEmpty(coupon.getScopeId())) { + } else if (coupon.getScopeType().equals(PromotionsScopeTypeEnum.PORTION_GOODS.name()) && CharSequenceUtil.isEmpty(coupon.getScopeId())) { throw new ServiceException(ResultCode.COUPON_SCOPE_TYPE_GOODS_ERROR); - } else if (coupon.getScopeType().equals(CouponScopeTypeEnum.PORTION_GOODS_CATEGORY.name()) && CharSequenceUtil.isEmpty(coupon.getScopeId())) { + } else if (coupon.getScopeType().equals(PromotionsScopeTypeEnum.PORTION_GOODS_CATEGORY.name()) && CharSequenceUtil.isEmpty(coupon.getScopeId())) { throw new ServiceException(ResultCode.COUPON_SCOPE_TYPE_CATEGORY_ERROR); - } else if (coupon.getScopeType().equals(CouponScopeTypeEnum.PORTION_SHOP_CATEGORY.name()) && CharSequenceUtil.isEmpty(coupon.getScopeId())) { + } else if (coupon.getScopeType().equals(PromotionsScopeTypeEnum.PORTION_SHOP_CATEGORY.name()) && CharSequenceUtil.isEmpty(coupon.getScopeId())) { throw new ServiceException(ResultCode.COUPON_SCOPE_TYPE_STORE_ERROR); } - if (coupon.getScopeType().equals(CouponScopeTypeEnum.PORTION_GOODS.name())) { - String[] split = coupon.getScopeId().split(","); - if (split.length <= 0) { - throw new ServiceException(ResultCode.COUPON_SCOPE_ERROR); - } - for (String id : split) { - GoodsSku goodsSku = goodsSkuService.getGoodsSkuByIdFromCache(id); - if (goodsSku == null) { - throw new ServiceException(ResultCode.GOODS_NOT_EXIST); - } - } + if (coupon.getScopeType().equals(PromotionsScopeTypeEnum.PORTION_GOODS.name())) { + this.checkCouponPortionGoods(coupon); } } /** - * 对状态的处理.如果未传递状态则需要 根据当前时间来确认优惠券状态 + * 检查指定商品 * - * @param coupon 优惠券参数 + * @param coupon 优惠券信息 */ - private void promotionStatusEmpty(CouponVO coupon) { - if (StringUtils.isEmpty(coupon.getPromotionStatus()) && coupon.getRangeDayType().equals(CouponRangeDayEnum.FIXEDTIME.name())) { - //格式时间 - long startTme = coupon.getStartTime().getTime() / 1000; - long endTime = coupon.getEndTime().getTime() / 1000; - //校验时间确定当前优惠券有效期 - long currentTime = DateUtil.getDateline(); - //如果未到时间点则为新建 - if (startTme > currentTime) { - coupon.setPromotionStatus(PromotionStatusEnum.NEW.name()); - } - //如果超过结束时间则为结束 - if (endTime < currentTime) { - coupon.setPromotionStatus(PromotionStatusEnum.END.name()); - } - //如果在使用时间内 则是开始状态 - if (startTme <= currentTime && endTime > currentTime) { - coupon.setPromotionStatus(PromotionStatusEnum.START.name()); - } + private void checkCouponPortionGoods(CouponVO coupon) { + String[] split = coupon.getScopeId().split(","); + if (split.length <= 0) { + throw new ServiceException(ResultCode.COUPON_SCOPE_ERROR); } - } - - /** - * 检查优惠券状态是否可进行编辑删除 - * - * @param id 优惠券id - * @return 优惠券信息 - */ - private CouponVO checkStatus(String id) { - CouponVO coupon = this.mongoTemplate.findById(id, CouponVO.class); - if (coupon == null) { - throw new ServiceException(ResultCode.COUPON_NOT_EXIST); - } - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper().eq(FullDiscount::getIsCoupon, true).eq(FullDiscount::getCouponId, id); - FullDiscount fullDiscount = fullDiscountService.getOne(queryWrapper); - if (fullDiscount != null) { - throw new ServiceException("当前优惠券参与了促销活动【" + fullDiscount.getPromotionName() + "】不能进行编辑删除操作"); - } - return coupon; - } - - private void updateScopePromotionGoods(CouponVO couponVO) { - //如果优惠券类型为部分商品则将促销活动更新至ES中 - if (CouponScopeTypeEnum.PORTION_GOODS.name().equals(couponVO.getScopeType()) && !couponVO.getPromotionGoodsList().isEmpty()) { - PromotionTools.promotionGoodsInit(couponVO.getPromotionGoodsList(), couponVO, PromotionTypeEnum.COUPON); + for (String id : split) { + GoodsSku goodsSku = goodsSkuService.getGoodsSkuByIdFromCache(id); + if (goodsSku == null) { + throw new ServiceException(ResultCode.GOODS_NOT_EXIST); + } } } diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/FullDiscountServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/FullDiscountServiceImpl.java index b3c4af86..dce86bca 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/FullDiscountServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/FullDiscountServiceImpl.java @@ -1,40 +1,28 @@ package cn.lili.modules.promotion.serviceimpl; +import cn.hutool.json.JSONUtil; import cn.lili.common.enums.PromotionTypeEnum; import cn.lili.common.enums.ResultCode; import cn.lili.common.exception.ServiceException; -import cn.lili.common.properties.RocketmqCustomProperties; -import cn.lili.common.utils.DateUtil; -import cn.lili.common.vo.PageVO; import cn.lili.modules.order.cart.entity.vo.FullDiscountVO; import cn.lili.modules.promotion.entity.dos.Coupon; import cn.lili.modules.promotion.entity.dos.FullDiscount; import cn.lili.modules.promotion.entity.dos.PromotionGoods; -import cn.lili.modules.promotion.entity.enums.PromotionStatusEnum; -import cn.lili.modules.promotion.entity.vos.FullDiscountSearchParams; +import cn.lili.modules.promotion.entity.dto.search.PromotionGoodsSearchParams; +import cn.lili.modules.promotion.entity.enums.PromotionsScopeTypeEnum; +import cn.lili.modules.promotion.entity.enums.PromotionsStatusEnum; import cn.lili.modules.promotion.mapper.FullDiscountMapper; import cn.lili.modules.promotion.service.CouponService; import cn.lili.modules.promotion.service.FullDiscountService; import cn.lili.modules.promotion.service.PromotionGoodsService; import cn.lili.modules.promotion.tools.PromotionTools; -import cn.lili.mybatis.util.PageUtil; -import cn.lili.trigger.enums.DelayTypeEnums; -import cn.lili.trigger.interfaces.TimeTrigger; -import cn.lili.trigger.message.PromotionMessage; -import cn.lili.trigger.model.TimeExecuteConstant; -import cn.lili.trigger.model.TimeTriggerMsg; -import cn.lili.trigger.util.DelayQueueTools; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.mongodb.core.MongoTemplate; -import org.springframework.data.mongodb.core.query.Criteria; -import org.springframework.data.mongodb.core.query.Query; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.ArrayList; +import java.util.Collections; import java.util.Date; import java.util.List; @@ -46,26 +34,8 @@ import java.util.List; */ @Service @Transactional(rollbackFor = Exception.class) -public class FullDiscountServiceImpl extends ServiceImpl implements FullDiscountService { +public class FullDiscountServiceImpl extends AbstractPromotionsServiceImpl implements FullDiscountService { - private static final String SELLER_ID_COLUMN = "storeId"; - private static final String PROMOTION_STATUS_COLUMN = "promotionStatus"; - - /** - * 延时任务 - */ - @Autowired - private TimeTrigger timeTrigger; - /** - * Mongo - */ - @Autowired - private MongoTemplate mongoTemplate; - /** - * Rocketmq - */ - @Autowired - private RocketmqCustomProperties rocketmqCustomProperties; /** * 优惠券 */ @@ -79,95 +49,21 @@ public class FullDiscountServiceImpl extends ServiceImpl currentPromotion(List storeId) { - Query query = this.getMongoQuery(); - query.addCriteria(Criteria.where(SELLER_ID_COLUMN).in(storeId)); - return mongoTemplate.find(query, FullDiscountVO.class); - } - - @Override - public FullDiscount addFullDiscount(FullDiscountVO fullDiscountVO) { - //验证是否是有效参数 - PromotionTools.paramValid(fullDiscountVO.getStartTime().getTime(), fullDiscountVO.getEndTime().getTime(), fullDiscountVO.getNumber(), fullDiscountVO.getPromotionGoodsList()); - //当前时间段是否存在同类活动 - this.checkSameActiveExist(fullDiscountVO.getStartTime(), fullDiscountVO.getEndTime(), fullDiscountVO.getStoreId(), null); - //检查满减参数 - this.checkFullDiscount(fullDiscountVO); - //保存到MYSQL中 - this.save(fullDiscountVO); - if (fullDiscountVO.getPromotionGoodsList() != null) { - List promotionGoodsList = PromotionTools.promotionGoodsInit(fullDiscountVO.getPromotionGoodsList(), fullDiscountVO, PromotionTypeEnum.FULL_DISCOUNT); - //促销活动商品更新 - this.promotionGoodsService.saveOrUpdateBatch(promotionGoodsList); + List result = new ArrayList<>(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.in(storeId != null && !storeId.isEmpty(), "store_id", storeId); + queryWrapper.and(PromotionTools.queryPromotionStatus(PromotionsStatusEnum.START)); + List list = this.list(queryWrapper); + if (list != null) { + for (FullDiscount fullDiscount : list) { + PromotionGoodsSearchParams searchParams = new PromotionGoodsSearchParams(); + searchParams.setPromotionId(fullDiscount.getId()); + FullDiscountVO fullDiscountVO = new FullDiscountVO(fullDiscount); + fullDiscountVO.setPromotionGoodsList(promotionGoodsService.listFindAll(searchParams)); + result.add(fullDiscountVO); + } } - //保存到MONGO中 - this.mongoTemplate.save(fullDiscountVO); - PromotionMessage promotionMessage = new PromotionMessage(fullDiscountVO.getId(), PromotionTypeEnum.FULL_DISCOUNT.name(), - PromotionStatusEnum.START.name(), - fullDiscountVO.getStartTime(), fullDiscountVO.getEndTime()); - - TimeTriggerMsg timeTriggerMsg = new TimeTriggerMsg(TimeExecuteConstant.PROMOTION_EXECUTOR, - fullDiscountVO.getStartTime().getTime(), promotionMessage, - DelayQueueTools.wrapperUniqueKey(DelayTypeEnums.PROMOTION, (promotionMessage.getPromotionType() + promotionMessage.getPromotionId())), - rocketmqCustomProperties.getPromotionTopic()); - //发送促销活动开始的延时任务 - this.timeTrigger.addDelay(timeTriggerMsg); - return fullDiscountVO; - } - - @Override - public IPage getFullDiscountByPageFromMysql(FullDiscountSearchParams searchParams, PageVO page) { - QueryWrapper queryWrapper = searchParams.wrapper(); - return this.page(PageUtil.initPage(page), queryWrapper); - } - - @Override - public IPage getFullDiscountByPageFromMongo(FullDiscountSearchParams searchParams, PageVO page) { - IPage fullDiscountPage = new Page<>(); - Query query = searchParams.mongoQuery(); - if (page != null) { - PromotionTools.mongoQueryPageParam(query, page); - fullDiscountPage.setCurrent(page.getPageNumber()); - fullDiscountPage.setSize(page.getPageSize()); - } - List fullDiscountVOS = this.mongoTemplate.find(query, FullDiscountVO.class); - fullDiscountPage.setRecords(fullDiscountVOS); - fullDiscountPage.setTotal(this.mongoTemplate.count(query, FullDiscountVO.class)); - return fullDiscountPage; - } - - @Override - public FullDiscountVO modifyFullDiscount(FullDiscountVO fullDiscountVO) { - //检查满优惠活动是否存在 - FullDiscountVO fullDiscount = this.checkFullDiscountExist(fullDiscountVO.getId()); - if (!fullDiscount.getPromotionStatus().equals(PromotionStatusEnum.NEW.name())) { - throw new ServiceException(ResultCode.FULL_DISCOUNT_MODIFY_ERROR); - } - //检查活动是否已经开始 - PromotionTools.checkPromotionTime(fullDiscountVO.getStartTime().getTime(), fullDiscountVO.getEndTime().getTime()); - //检查满减参数 - this.checkFullDiscount(fullDiscountVO); - //时间发生变化 - if (!fullDiscount.getStartTime().equals(fullDiscountVO.getStartTime()) && fullDiscount.getEndTime().equals(fullDiscountVO.getEndTime())) { - //检查当前时间段是否存在同类活动 - this.checkSameActiveExist(fullDiscountVO.getStartTime(), fullDiscountVO.getEndTime(), fullDiscountVO.getStoreId(), fullDiscount.getId()); - - } - //更新到MYSQL中 - this.updateById(fullDiscountVO); - if (fullDiscountVO.getPromotionGoodsList() != null) { - //促销活动商品更新 - this.promotionGoodsService.updateBatchById(PromotionTools.promotionGoodsInit(fullDiscountVO.getPromotionGoodsList(), fullDiscountVO, PromotionTypeEnum.FULL_DISCOUNT)); - } - //保存到MONGO中 - this.mongoTemplate.save(fullDiscountVO); - PromotionMessage promotionMessage = new PromotionMessage(fullDiscountVO.getId(), PromotionTypeEnum.FULL_DISCOUNT.name(), PromotionStatusEnum.START.name(), fullDiscountVO.getStartTime(), fullDiscountVO.getEndTime()); - //发送更新延时任务 - this.timeTrigger.edit(TimeExecuteConstant.PROMOTION_EXECUTOR, promotionMessage, - fullDiscount.getStartTime().getTime(), fullDiscountVO.getStartTime().getTime(), - DelayQueueTools.wrapperUniqueKey(DelayTypeEnums.PROMOTION, (promotionMessage.getPromotionType() + promotionMessage.getPromotionId())), - DateUtil.getDelayTime(fullDiscountVO.getStartTime().getTime()), - rocketmqCustomProperties.getPromotionTopic()); - return fullDiscountVO; + return result; } /** @@ -178,64 +74,76 @@ public class FullDiscountServiceImpl extends ServiceImpl fullDiscountVOList = this.mongoTemplate.find(query, FullDiscountVO.class); - - //判断满额活动是否为空 - if (fullDiscountVOList.isEmpty() || fullDiscountVOList == null) { - throw new ServiceException(ResultCode.FULL_DISCOUNT_NOT_EXIST_ERROR); - } - FullDiscountVO fullDiscountVO = fullDiscountVOList.get(0); - - //如果是开启活动则需要校验参数 - if (promotionStatus.equals(PromotionStatusEnum.START)) { + public void checkPromotions(FullDiscount promotions) { + super.checkPromotions(promotions); + if (promotions instanceof FullDiscountVO) { + FullDiscountVO fullDiscountVO = (FullDiscountVO) promotions; //验证是否是有效参数 - PromotionTools.paramValid(fullDiscountVO.getStartTime().getTime(), fullDiscountVO.getEndTime().getTime(), fullDiscountVO.getNumber(), fullDiscountVO.getPromotionGoodsList()); - //当前时间段是否存在同类活动 - this.checkSameActiveExist(fullDiscountVO.getStartTime(), fullDiscountVO.getEndTime(), fullDiscountVO.getStoreId(), null); - //检查满减参数 - this.checkFullDiscount(fullDiscountVO); + PromotionTools.checkPromotionTime(fullDiscountVO.getStartTime(), fullDiscountVO.getEndTime()); } - //填写活动状态 - fullDiscountVO.setPromotionStatus(promotionStatus.name()); + //当前时间段是否存在同类活动 + this.checkSameActiveExist(promotions.getStartTime(), promotions.getEndTime(), promotions.getStoreId(), promotions.getId()); + //检查满减参数 + this.checkFullDiscount(promotions); - //保存到MYSQL中 - this.updateById(fullDiscountVO); + } - //添加促销消息 - PromotionMessage promotionMessage = new PromotionMessage(fullDiscountVO.getId(), PromotionTypeEnum.FULL_DISCOUNT.name(), - promotionStatus.name(), - fullDiscountVO.getStartTime(), fullDiscountVO.getEndTime()); - //添加延时任务 - TimeTriggerMsg timeTriggerMsg = new TimeTriggerMsg(TimeExecuteConstant.PROMOTION_EXECUTOR, - fullDiscountVO.getStartTime().getTime(), promotionMessage, - DelayQueueTools.wrapperUniqueKey(DelayTypeEnums.PROMOTION, (promotionMessage.getPromotionType() + promotionMessage.getPromotionId())), - rocketmqCustomProperties.getPromotionTopic()); - //发送促销活动开始的延时任务 - this.timeTrigger.addDelay(timeTriggerMsg); - return true; + /** + * 更新促销商品信息 + * + * @param promotions 促销实体 + * @return 是否更新成功 + */ + @Override + public boolean updatePromotionsGoods(FullDiscount promotions) { + boolean result = super.updatePromotionsGoods(promotions); + if (!PromotionsStatusEnum.CLOSE.name().equals(promotions.getPromotionStatus()) + && PromotionsScopeTypeEnum.PORTION_GOODS.name().equals(promotions.getScopeType()) + && promotions instanceof FullDiscountVO) { + FullDiscountVO fullDiscountVO = (FullDiscountVO) promotions; + List promotionGoodsList = PromotionTools.promotionGoodsInit(fullDiscountVO.getPromotionGoodsList(), fullDiscountVO, PromotionTypeEnum.FULL_DISCOUNT); + this.promotionGoodsService.deletePromotionGoods(Collections.singletonList(promotions.getId())); + //促销活动商品更新 + result = this.promotionGoodsService.saveBatch(promotionGoodsList); + } + return result; + + } + + /** + * 更新促销信息到商品索引 + * + * @param promotions 促销实体 + */ + @Override + public void updateEsGoodsIndex(FullDiscount promotions) { + FullDiscount fullDiscount = JSONUtil.parse(promotions).toBean(FullDiscount.class); + super.updateEsGoodsIndex(fullDiscount); + } + + /** + * 当前促销类型 + * + * @return 当前促销类型 + */ + @Override + public PromotionTypeEnum getPromotionType() { + return PromotionTypeEnum.FULL_DISCOUNT; } /** @@ -244,48 +152,49 @@ public class FullDiscountServiceImpl extends ServiceImpl queryWrapper = PromotionTools.checkActiveTime(statTime, endTime, PromotionTypeEnum.FULL_DISCOUNT, storeId, id); - Integer sameNum = this.count(queryWrapper); + long sameNum = this.count(queryWrapper); if (sameNum > 0) { throw new ServiceException(ResultCode.PROMOTION_SAME_ACTIVE_EXIST); } @@ -357,18 +266,4 @@ public class FullDiscountServiceImpl extends ServiceImpl implements KanjiaActivityGoodsService { +public class KanjiaActivityGoodsServiceImpl extends AbstractPromotionsServiceImpl implements KanjiaActivityGoodsService { /** * 规格商品 @@ -58,98 +52,64 @@ public class KanjiaActivityGoodsServiceImpl extends ServiceImpl kanjiaActivityGoodsList = new ArrayList<>(); + List promotionGoodsList = new ArrayList<>(); for (KanjiaActivityGoodsDTO kanJiaActivityGoodsDTO : kanJiaActivityGoodsOperationDTO.getPromotionGoodsList()) { //根据skuId查询商品信息 GoodsSku goodsSku = this.checkSkuExist(kanJiaActivityGoodsDTO.getSkuId()); //参数检测 this.checkParam(kanJiaActivityGoodsDTO, goodsSku); //检测同一时间段是否存在相同的商品 - PromotionTools.checkPromotionTime(kanJiaActivityGoodsOperationDTO.getStartTime().getTime(), kanJiaActivityGoodsOperationDTO.getEndTime().getTime()); + PromotionTools.checkPromotionTime(kanJiaActivityGoodsOperationDTO.getStartTime(), kanJiaActivityGoodsOperationDTO.getEndTime()); kanJiaActivityGoodsDTO.setStartTime(kanJiaActivityGoodsOperationDTO.getStartTime()); kanJiaActivityGoodsDTO.setEndTime(kanJiaActivityGoodsOperationDTO.getEndTime()); //检测同一时间段不能允许添加相同的商品 - if (this.checkSkuDuplicate(goodsSku.getId(), kanJiaActivityGoodsDTO) != null) { + if (this.checkSkuDuplicate(kanJiaActivityGoodsDTO) != null) { throw new ServiceException("商品id为" + goodsSku.getId() + "的商品已参加砍价商品活动!"); } kanJiaActivityGoodsDTO.setGoodsSku(goodsSku); + kanJiaActivityGoodsDTO.setGoodsId(goodsSku.getGoodsId()); kanJiaActivityGoodsDTO.setSkuId(kanJiaActivityGoodsDTO.getSkuId()); kanJiaActivityGoodsDTO.setThumbnail(goodsSku.getThumbnail()); kanJiaActivityGoodsDTO.setGoodsName(goodsSku.getGoodsName()); - kanJiaActivityGoodsDTO.setPromotionStatus(PromotionStatusEnum.NEW.name()); - kanJiaActivityGoodsDTO.setOriginalPrice(kanJiaActivityGoodsDTO.getGoodsSku().getPrice()); + kanJiaActivityGoodsDTO.setOriginalPrice(goodsSku.getPrice()); + kanJiaActivityGoodsDTO.setScopeId(goodsSku.getId()); kanjiaActivityGoodsList.add(kanJiaActivityGoodsDTO); } - Boolean result = this.saveBatch(kanjiaActivityGoodsList); + boolean result = this.saveBatch(kanjiaActivityGoodsList); if (result) { - //发送砍价延迟任务消息 - for (KanjiaActivityGoodsDTO kanJiaActivityGoodsDTO : kanJiaActivityGoodsOperationDTO.getPromotionGoodsList()) { - this.mongoTemplate.save(kanJiaActivityGoodsDTO); - this.addKanJiaGoodsPromotionTask(kanJiaActivityGoodsDTO); + for (KanjiaActivityGoods kanjiaActivityGoods : kanjiaActivityGoodsList) { + PromotionGoods promotionGoods = new PromotionGoods(); + BeanUtils.copyProperties(kanjiaActivityGoods, promotionGoods); + promotionGoods.setQuantity(kanjiaActivityGoods.getStock()); + promotionGoods.setPromotionId(kanjiaActivityGoods.getId()); + promotionGoods.setPromotionType(PromotionTypeEnum.KANJIA.name()); + promotionGoods.setTitle(PromotionTypeEnum.KANJIA.name() + "-" + kanjiaActivityGoods.getGoodsName()); + promotionGoods.setScopeType(PromotionsScopeTypeEnum.PORTION_GOODS.name()); + promotionGoods.setScopeId(kanjiaActivityGoods.getSkuId()); + promotionGoods.setPromotionType(PromotionTypeEnum.KANJIA.name()); + promotionGoodsList.add(promotionGoods); + } + boolean saveBatch = this.promotionGoodsService.saveBatch(promotionGoodsList); + if (saveBatch) { + for (KanjiaActivityGoods kanjiaActivityGoods : kanjiaActivityGoodsList) { + this.updateEsGoodsIndex(kanjiaActivityGoods); + } } } + return result; } - /** - * 添加砍价商品mq任务 - * - * @param kanJiaActivityGoods 砍价商品信息 - */ - private void addKanJiaGoodsPromotionTask(KanjiaActivityGoodsDTO kanJiaActivityGoods) { - PromotionMessage promotionMessage = new PromotionMessage(kanJiaActivityGoods.getId(), PromotionTypeEnum.KANJIA.name(), - PromotionStatusEnum.START.name(), - kanJiaActivityGoods.getStartTime(), kanJiaActivityGoods.getEndTime()); - TimeTriggerMsg timeTriggerMsg = new TimeTriggerMsg(TimeExecuteConstant.PROMOTION_EXECUTOR, - promotionMessage.getStartTime().getTime(), - promotionMessage, - DelayQueueTools.wrapperUniqueKey(DelayTypeEnums.PROMOTION, (promotionMessage.getPromotionType() + promotionMessage.getPromotionId())), - rocketmqCustomProperties.getPromotionTopic()); - //发送促销活动开始的延时任务 - this.timeTrigger.addDelay(timeTriggerMsg); - } - - @Override - public IPage getForPage(KanjiaActivityGoodsParams kanJiaActivityGoodsParams, PageVO pageVO) { - IPage kanJiaActivityGoodsDTOIPage = new Page<>(); - Query query = kanJiaActivityGoodsParams.mongoQuery(); - if (pageVO != null) { - PromotionTools.mongoQueryPageParam(query, pageVO); - kanJiaActivityGoodsDTOIPage.setSize(pageVO.getPageSize()); - kanJiaActivityGoodsDTOIPage.setCurrent(pageVO.getPageNumber()); - } - List kanJiaActivityGoodsDTOS = this.mongoTemplate.find(query, KanjiaActivityGoodsDTO.class); - kanJiaActivityGoodsDTOIPage.setRecords(kanJiaActivityGoodsDTOS); - kanJiaActivityGoodsDTOIPage.setTotal(this.mongoTemplate.count(kanJiaActivityGoodsParams.mongoQuery(), KanjiaActivityGoodsDTO.class)); - return kanJiaActivityGoodsDTOIPage; - - } - @Override public IPage kanjiaGoodsVOPage(KanjiaActivityGoodsParams kanjiaActivityGoodsParams, PageVO pageVO) { - return this.baseMapper.kanjiaActivityGoodsVOPage(PageUtil.initPage(pageVO),kanjiaActivityGoodsParams.wrapper()); + return this.baseMapper.kanjiaActivityGoodsVOPage(PageUtil.initPage(pageVO), kanjiaActivityGoodsParams.queryWrapper()); } @@ -212,21 +172,26 @@ public class KanjiaActivityGoodsServiceImpl extends ServiceImpl queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(KanjiaActivityGoods::getSkuId, skuId); - if (kanJiaActivityGoodsDTO != null && StrUtil.isNotEmpty(kanJiaActivityGoodsDTO.getId())) { - queryWrapper.ne(KanjiaActivityGoods::getId, kanJiaActivityGoodsDTO.getId()); + private KanjiaActivityGoods checkSkuDuplicate(KanjiaActivityGoodsDTO kanJiaActivityGoodsDTO) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("sku_id", kanJiaActivityGoodsDTO.getSkuId()); + if (kanJiaActivityGoodsDTO != null && CharSequenceUtil.isNotEmpty(kanJiaActivityGoodsDTO.getId())) { + queryWrapper.ne("id", kanJiaActivityGoodsDTO.getId()); } - queryWrapper.ne(KanjiaActivityGoods::getPromotionStatus, PromotionStatusEnum.END.name()); + queryWrapper.and(i -> i + .or(PromotionTools.queryPromotionStatus(PromotionsStatusEnum.START)) + .or(PromotionTools.queryPromotionStatus(PromotionsStatusEnum.NEW))); - queryWrapper.ge(KanjiaActivityGoods::getStartTime, kanJiaActivityGoodsDTO.getStartTime()); + if (kanJiaActivityGoodsDTO != null && kanJiaActivityGoodsDTO.getStartTime() != null) { + queryWrapper.ge("start_time", kanJiaActivityGoodsDTO.getStartTime()); + } - queryWrapper.le(KanjiaActivityGoods::getEndTime, kanJiaActivityGoodsDTO.getEndTime()); + if (kanJiaActivityGoodsDTO != null && kanJiaActivityGoodsDTO.getEndTime() != null) { + queryWrapper.le("end_time", kanJiaActivityGoodsDTO.getEndTime()); + } return this.getOne(queryWrapper); @@ -234,22 +199,31 @@ public class KanjiaActivityGoodsServiceImpl extends ServiceImpl kanjiaActivityGoodsDTOS = this.mongoTemplate.find(query, KanjiaActivityGoodsDTO.class); - return kanjiaActivityGoodsDTOS.get(0); + public KanjiaActivityGoods getKanjiaGoodsBySkuId(String skuId) { + KanjiaActivityGoods kanjiaActivityGoods = this.getOne( + new LambdaQueryWrapper() + .eq(KanjiaActivityGoods::getSkuId, skuId) + .ge(KanjiaActivityGoods::getEndTime, new Date()) + .le(KanjiaActivityGoods::getStartTime, new Date())); + if (kanjiaActivityGoods != null && PromotionsStatusEnum.START.name().equals(kanjiaActivityGoods.getPromotionStatus())) { + return kanjiaActivityGoods; + } + return null; } @Override @@ -257,7 +231,7 @@ public class KanjiaActivityGoodsServiceImpl extends ServiceImpl ids) { - List skuIds = new ArrayList<>(); - for (String id : ids) { - KanjiaActivityGoodsDTO kanJiaActivityGoodsDTO = this.getKanjiaGoodsDetail(id); - this.timeTrigger.delete(TimeExecuteConstant.PROMOTION_EXECUTOR, - kanJiaActivityGoodsDTO.getStartTime().getTime(), - DelayQueueTools.wrapperUniqueKey(DelayTypeEnums.PROMOTION, (PromotionTypeEnum.KANJIA.name() + kanJiaActivityGoodsDTO.getId())), - rocketmqCustomProperties.getPromotionTopic()); - skuIds.add(kanJiaActivityGoodsDTO.getSkuId()); - } - boolean result = this.removeByIds(ids); - if (result) { - Query query = new Query(); - query.addCriteria(new Criteria("id").in(ids)); - this.mongoTemplate.remove(query, KanjiaActivityGoodsDTO.class); - } - return result; - } - - - @Override - public KanjiaActivityGoodsDTO getKanJiaGoodsBySku(String skuId) { - //mongo查询条件 - Query query = new Query(); - query.addCriteria(Criteria.where("skuId").is(skuId)) - .addCriteria(Criteria.where("promotionStatus").is(PromotionStatusEnum.START.name())); - List kanjiaActivityGoodsDTOList=this.mongoTemplate.find(query, KanjiaActivityGoodsDTO.class); - return kanjiaActivityGoodsDTOList.get(0); + public PromotionTypeEnum getPromotionType() { + return PromotionTypeEnum.KANJIA; } } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/KanjiaActivityLogServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/KanjiaActivityLogServiceImpl.java index cda873f1..21c4a344 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/KanjiaActivityLogServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/KanjiaActivityLogServiceImpl.java @@ -9,9 +9,9 @@ import cn.lili.common.vo.PageVO; import cn.lili.modules.promotion.entity.dos.KanjiaActivity; import cn.lili.modules.promotion.entity.dos.KanjiaActivityGoods; import cn.lili.modules.promotion.entity.dos.KanjiaActivityLog; -import cn.lili.modules.promotion.entity.dto.KanJiaActivityLogQuery; import cn.lili.modules.promotion.entity.dto.KanjiaActivityDTO; -import cn.lili.modules.promotion.entity.enums.PromotionStatusEnum; +import cn.lili.modules.promotion.entity.dto.search.KanJiaActivityLogQuery; +import cn.lili.modules.promotion.entity.enums.PromotionsStatusEnum; import cn.lili.modules.promotion.mapper.KanJiaActivityLogMapper; import cn.lili.modules.promotion.service.KanjiaActivityGoodsService; import cn.lili.modules.promotion.service.KanjiaActivityLogService; @@ -55,14 +55,14 @@ public class KanjiaActivityLogServiceImpl extends ServiceImpl queryWrapper = new LambdaQueryWrapper(); queryWrapper.eq(kanjiaActivityDTO.getKanjiaActivityId() != null, KanjiaActivityLog::getKanjiaActivityId, kanjiaActivityDTO.getKanjiaActivityId()); queryWrapper.eq( KanjiaActivityLog::getKanjiaMemberId, UserContext.getCurrentUser().getId()); - Integer count = this.baseMapper.selectCount(queryWrapper); + long count = this.baseMapper.selectCount(queryWrapper); if (count > 0) { throw new ServiceException(ResultCode.KANJIA_ACTIVITY_LOG_MEMBER_ERROR); } //校验当前砍价商品是否有效 KanjiaActivityGoods kanjiaActivityGoods = kanJiaActivityGoodsService.getById(kanjiaActivityDTO.getKanjiaActivityGoodsId()); //如果当前活动不为空且还在活动时间内 才可以参与砍价活动 - if (kanjiaActivityGoods != null && kanjiaActivityGoods.getPromotionStatus().equals(PromotionStatusEnum.START.name())) { + if (kanjiaActivityGoods != null && kanjiaActivityGoods.getPromotionStatus().equals(PromotionsStatusEnum.START.name())) { //获取砍价参与者记录 KanjiaActivity kanjiaActivity = kanJiaActivityService.getById(kanjiaActivityDTO.getKanjiaActivityId()); if (kanjiaActivity != null) { diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/KanjiaActivityServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/KanjiaActivityServiceImpl.java index 94ac9b03..828bf7d0 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/KanjiaActivityServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/KanjiaActivityServiceImpl.java @@ -5,6 +5,7 @@ import cn.hutool.core.convert.Convert; import cn.hutool.core.util.RandomUtil; import cn.lili.common.enums.ResultCode; import cn.lili.common.exception.ServiceException; +import cn.lili.common.security.AuthUser; import cn.lili.common.security.context.UserContext; import cn.lili.common.utils.BeanUtil; import cn.lili.common.utils.CurrencyUtil; @@ -17,10 +18,10 @@ import cn.lili.modules.promotion.entity.dos.KanjiaActivity; import cn.lili.modules.promotion.entity.dos.KanjiaActivityGoods; import cn.lili.modules.promotion.entity.dos.KanjiaActivityLog; import cn.lili.modules.promotion.entity.dto.KanjiaActivityDTO; -import cn.lili.modules.promotion.entity.dto.KanjiaActivityQuery; +import cn.lili.modules.promotion.entity.dto.search.KanjiaActivityQuery; +import cn.lili.modules.promotion.entity.dto.search.KanjiaActivitySearchParams; import cn.lili.modules.promotion.entity.enums.KanJiaStatusEnum; -import cn.lili.modules.promotion.entity.enums.PromotionStatusEnum; -import cn.lili.modules.promotion.entity.vos.kanjia.KanjiaActivitySearchParams; +import cn.lili.modules.promotion.entity.enums.PromotionsStatusEnum; import cn.lili.modules.promotion.entity.vos.kanjia.KanjiaActivityVO; import cn.lili.modules.promotion.mapper.KanJiaActivityMapper; import cn.lili.modules.promotion.service.KanjiaActivityGoodsService; @@ -36,13 +37,15 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.Objects; /** * 砍价活动参与记录业务层实现 * * @author qiuqiu - * @date 2021/7/1 + * @since 2021/7/1 */ @Service @Transactional(rollbackFor = Exception.class) @@ -64,6 +67,7 @@ public class KanjiaActivityServiceImpl extends ServiceImpl() .eq(KanjiaActivityLog::getKanjiaActivityId, kanjiaActivity.getId()) - .eq(KanjiaActivityLog::getKanjiaMemberId, UserContext.getCurrentUser().getId())); + .eq(KanjiaActivityLog::getKanjiaMemberId, authUser.getId())); if (kanjiaActivityLog == null) { kanjiaActivityVO.setHelp(true); } @@ -91,15 +95,16 @@ public class KanjiaActivityServiceImpl extends ServiceImpl queryWrapper = new QueryWrapper<>(); queryWrapper.eq("kanjia_activity_goods_id", kanJiaActivityGoods.getId()); @@ -110,7 +115,7 @@ public class KanjiaActivityServiceImpl extends ServiceImpl() + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper() .eq(KanjiaActivityLog::getKanjiaActivityId, kanjiaActivityId) .eq(KanjiaActivityLog::getKanjiaMemberId, member.getId()); if (kanjiaActivityLogService.count(lambdaQueryWrapper) > 0) { @@ -188,7 +194,7 @@ public class KanjiaActivityServiceImpl extends ServiceImpl queryWrapper = new LambdaQueryWrapper() .eq(MemberCoupon::getCouponId, couponId) .eq(MemberCoupon::getMemberId, memberId); - int haveCoupons = this.count(queryWrapper); - if (!PromotionStatusEnum.START.name().equals(coupon.getPromotionStatus())) { + long haveCoupons = this.count(queryWrapper); + if (!PromotionsStatusEnum.START.name().equals(coupon.getPromotionStatus())) { throw new ServiceException(ResultCode.COUPON_RECEIVE_ERROR); } if (coupon.getPublishNum() != 0 && coupon.getReceivedNum() >= coupon.getPublishNum()) { @@ -63,37 +63,49 @@ public class MemberCouponServiceImpl extends ServiceImpl getMemberCoupons(CouponSearchParams param, PageVO pageVo) { - QueryWrapper queryWrapper = param.wrapper(); + public IPage getMemberCoupons(MemberCouponSearchParams param, PageVO pageVo) { + QueryWrapper queryWrapper = param.queryWrapper(); return this.page(PageUtil.initPage(pageVo), queryWrapper); } + /** + * 获取会员优惠券列表 + * + * @param param 查询参数 + * @return 会员优惠券列表 + */ @Override - public List getMemberCoupons() { - LambdaQueryWrapper LambdaQueryWrapper = new LambdaQueryWrapper<>(); - LambdaQueryWrapper.eq(MemberCoupon::getMemberId,UserContext.getCurrentUser().getId()); - LambdaQueryWrapper.eq(MemberCoupon::getMemberCouponStatus,MemberCouponStatusEnum.NEW.name()); - LambdaQueryWrapper.le(MemberCoupon::getStartTime,new Date()); - LambdaQueryWrapper.ge(MemberCoupon::getEndTime,new Date()); - return this.list(LambdaQueryWrapper); + public List getMemberCoupons(MemberCouponSearchParams param) { + return this.list(param.queryWrapper()); } /** @@ -104,15 +116,15 @@ public class MemberCouponServiceImpl extends ServiceImpl getMemberCouponsByCanUse(CouponSearchParams param, Double totalPrice, PageVO pageVo) { + public IPage getMemberCouponsByCanUse(MemberCouponSearchParams param, Double totalPrice, PageVO pageVo) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); List storeIds = new ArrayList<>(Arrays.asList(param.getStoreId().split(","))); - storeIds.add("platform"); + storeIds.add(PromotionTools.PLATFORM_ID); queryWrapper.in(MemberCoupon::getStoreId, storeIds); queryWrapper.eq(MemberCoupon::getMemberId, param.getMemberId()); queryWrapper.and( i -> i.like(MemberCoupon::getScopeId, param.getScopeId()) - .or(j -> j.eq(MemberCoupon::getScopeType, CouponScopeTypeEnum.ALL.name()))); + .or(j -> j.eq(MemberCoupon::getScopeType, PromotionsScopeTypeEnum.ALL.name()))); queryWrapper.eq(MemberCoupon::getMemberCouponStatus, MemberCouponStatusEnum.NEW.name()); queryWrapper.le(MemberCoupon::getConsumeThreshold, totalPrice); queryWrapper.ge(MemberCoupon::getEndTime, new Date()); @@ -132,7 +144,7 @@ public class MemberCouponServiceImpl extends ServiceImpl queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(MemberCoupon::getMemberId, memberId); queryWrapper.eq(MemberCoupon::getMemberCouponStatus, MemberCouponStatusEnum.NEW.name()); - queryWrapper.eq(MemberCoupon::getScopeType, CouponScopeTypeEnum.ALL.name()); - queryWrapper.ge(MemberCoupon::getEndTime, new Date()).and(i -> i.in(MemberCoupon::getStoreId, storeId).or(j -> j.eq(MemberCoupon::getIsPlatform, true))); + queryWrapper.eq(MemberCoupon::getScopeType, PromotionsScopeTypeEnum.ALL.name()); + queryWrapper.ge(MemberCoupon::getEndTime, new Date()).and(i -> i.in(MemberCoupon::getStoreId, storeId).or(j -> j.eq(MemberCoupon::getPlatformFlag, true))); return this.list(queryWrapper); } @Override - public Integer getMemberCouponsNum() { + public long getMemberCouponsNum() { + AuthUser authUser = Objects.requireNonNull(UserContext.getCurrentUser()); QueryWrapper queryWrapper = Wrappers.query(); - queryWrapper.eq("member_id", UserContext.getCurrentUser().getId()); + queryWrapper.eq("member_id", authUser.getId()); queryWrapper.eq("member_coupon_status", MemberCouponStatusEnum.NEW.name()); queryWrapper.eq("delete_flag", false); return this.count(queryWrapper); @@ -222,4 +235,27 @@ public class MemberCouponServiceImpl extends ServiceImpl couponIds) { + LambdaUpdateWrapper memberCouponLambdaUpdateWrapper = new LambdaUpdateWrapper() + .in(MemberCoupon::getCouponId, couponIds) + .set(MemberCoupon::getMemberCouponStatus, MemberCouponStatusEnum.CLOSED.name()); + this.update(memberCouponLambdaUpdateWrapper); + } + + private void receiverCoupon(String couponId, String memberId, String memberName, Coupon coupon) { + this.checkCouponLimit(couponId, memberId); + MemberCoupon memberCoupon = new MemberCoupon(coupon); + memberCoupon.setMemberId(memberId); + memberCoupon.setMemberName(memberName); + memberCoupon.setMemberCouponStatus(MemberCouponStatusEnum.NEW.name()); + memberCoupon.setPlatformFlag((PromotionTools.PLATFORM_ID).equals(coupon.getStoreId())); + this.save(memberCoupon); + couponService.receiveCoupon(couponId, 1); + } } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PintuanServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PintuanServiceImpl.java index 46e1f027..dbec57fa 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PintuanServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PintuanServiceImpl.java @@ -1,55 +1,44 @@ package cn.lili.modules.promotion.serviceimpl; -import cn.hutool.core.bean.BeanUtil; -import cn.hutool.core.util.StrUtil; +import cn.hutool.core.text.CharSequenceUtil; +import cn.hutool.json.JSONUtil; import cn.lili.common.enums.PromotionTypeEnum; import cn.lili.common.enums.ResultCode; import cn.lili.common.exception.ServiceException; import cn.lili.common.properties.RocketmqCustomProperties; -import cn.lili.common.utils.DateUtil; -import cn.lili.common.vo.PageVO; import cn.lili.modules.goods.service.GoodsSkuService; import cn.lili.modules.member.entity.dos.Member; import cn.lili.modules.member.service.MemberService; import cn.lili.modules.order.order.entity.dos.Order; +import cn.lili.modules.order.order.entity.dto.OrderSearchParams; import cn.lili.modules.order.order.entity.enums.OrderStatusEnum; import cn.lili.modules.order.order.entity.enums.PayStatusEnum; import cn.lili.modules.order.order.service.OrderService; import cn.lili.modules.promotion.entity.dos.Pintuan; import cn.lili.modules.promotion.entity.dos.PromotionGoods; -import cn.lili.modules.promotion.entity.enums.PromotionStatusEnum; +import cn.lili.modules.promotion.entity.dto.search.PromotionGoodsSearchParams; +import cn.lili.modules.promotion.entity.enums.PromotionsScopeTypeEnum; +import cn.lili.modules.promotion.entity.enums.PromotionsStatusEnum; import cn.lili.modules.promotion.entity.vos.PintuanMemberVO; -import cn.lili.modules.promotion.entity.vos.PintuanSearchParams; import cn.lili.modules.promotion.entity.vos.PintuanShareVO; import cn.lili.modules.promotion.entity.vos.PintuanVO; import cn.lili.modules.promotion.mapper.PintuanMapper; import cn.lili.modules.promotion.service.PintuanService; import cn.lili.modules.promotion.service.PromotionGoodsService; import cn.lili.modules.promotion.tools.PromotionTools; -import cn.lili.mybatis.util.PageUtil; import cn.lili.trigger.enums.DelayTypeEnums; import cn.lili.trigger.interfaces.TimeTrigger; -import cn.lili.trigger.message.PromotionMessage; import cn.lili.trigger.model.TimeExecuteConstant; import cn.lili.trigger.model.TimeTriggerMsg; import cn.lili.trigger.util.DelayQueueTools; -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 com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.mongodb.core.MongoTemplate; -import org.springframework.data.mongodb.core.query.Query; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.Date; import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; /** * 拼团业务层实现 @@ -59,18 +48,8 @@ import java.util.stream.Collectors; */ @Service @Transactional(rollbackFor = Exception.class) -public class PintuanServiceImpl extends ServiceImpl implements PintuanService { +public class PintuanServiceImpl extends AbstractPromotionsServiceImpl implements PintuanService { - /** - * 延时任务 - */ - @Autowired - private TimeTrigger timeTrigger; - /** - * Mongo - */ - @Autowired - private MongoTemplate mongoTemplate; /** * 促销商品 */ @@ -86,22 +65,23 @@ public class PintuanServiceImpl extends ServiceImpl impl */ @Autowired private MemberService memberService; - /** - * RocketMQ - */ - @Autowired - private RocketmqCustomProperties rocketmqCustomProperties; /** * 订单 */ @Autowired private OrderService orderService; - @Override - public IPage getPintuanByPage(PintuanSearchParams param, PageVO page) { - QueryWrapper queryWrapper = param.wrapper(); - return page(PageUtil.initPage(page), queryWrapper); - } + /** + * 延时任务 + */ + @Autowired + private TimeTrigger timeTrigger; + + /** + * RocketMQ + */ + @Autowired + private RocketmqCustomProperties rocketmqCustomProperties; /** * 获取当前拼团的会员 @@ -112,215 +92,48 @@ public class PintuanServiceImpl extends ServiceImpl impl @Override public List getPintuanMember(String pintuanId) { List members = new ArrayList<>(); - PintuanVO pintuan = this.getPintuanByIdFromMongo(pintuanId); + Pintuan pintuan = this.getById(pintuanId); if (pintuan == null) { log.error("拼团活动为" + pintuanId + "的拼团活动不存在!"); return new ArrayList<>(); } - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(Order::getPromotionId, pintuanId) - .eq(Order::getOrderPromotionType, PromotionTypeEnum.PINTUAN.name()) - .eq(Order::getOrderStatus, OrderStatusEnum.PAID.name()) - .eq(Order::getParentOrderSn, ""); - List orders = orderService.list(queryWrapper); + OrderSearchParams searchParams = new OrderSearchParams(); + searchParams.setOrderStatus(OrderStatusEnum.PAID.name()); + searchParams.setPromotionId(pintuanId); + searchParams.setOrderPromotionType(PromotionTypeEnum.PINTUAN.name()); + searchParams.setParentOrderSn(""); + searchParams.setMemberId(""); + List orders = orderService.queryListByParams(searchParams); //遍历订单状态为已支付,为团长的拼团订单 for (Order order : orders) { Member member = memberService.getById(order.getMemberId()); PintuanMemberVO memberVO = new PintuanMemberVO(member); - LambdaQueryWrapper countQueryWrapper = new LambdaQueryWrapper<>(); - countQueryWrapper.eq(Order::getOrderStatus, OrderStatusEnum.PAID.name()); - countQueryWrapper.and(i -> i.eq(Order::getSn, order.getSn()).or(j -> j.eq(Order::getParentOrderSn, order.getSn()))); //获取已参团人数 - int count = orderService.count(countQueryWrapper); - //获取待参团人数 - int toBoGrouped = pintuan.getRequiredNum() - count; - memberVO.setGroupNum(pintuan.getRequiredNum()); - memberVO.setGroupedNum(count); - memberVO.setToBeGroupedNum(toBoGrouped); + this.setMemberVONum(memberVO, pintuan.getRequiredNum(), order.getSn()); memberVO.setOrderSn(order.getSn()); members.add(memberVO); } return members; } - @Override - public IPage getPintuanByPageFromMongo(PintuanSearchParams param, PageVO page) { - IPage pintuanPage = new Page<>(); - Query query = param.mongoQuery(); - if (page != null) { - page.setNotConvert(true); - PromotionTools.mongoQueryPageParam(query, page); - pintuanPage.setCurrent(page.getPageNumber()); - pintuanPage.setSize(page.getPageSize()); - } - List pintuanVOS = mongoTemplate.find(query, PintuanVO.class); - pintuanPage.setRecords(pintuanVOS); - pintuanPage.setTotal(this.getPintuanByPageFromMongoCount(param)); - return pintuanPage; - } - /** - * 从mongo中查询拼团活动详情 + * 查询拼团活动详情 * * @param id 拼团ID * @return 拼团活动详情 */ @Override - public PintuanVO getPintuanByIdFromMongo(String id) { - PintuanVO pintuanVO = mongoTemplate.findById(id, PintuanVO.class); - if (pintuanVO == null) { - log.error("拼团活动id[" + id + "]的拼团活动不存在!"); - throw new ServiceException(ResultCode.ERROR); - } - return pintuanVO; - } - - /** - * 从mysql中查询拼团活动详情 - * - * @param id 拼团活动id - * @return 拼团活动详情 - */ - @Override - public Pintuan getPintuanById(String id) { + public PintuanVO getPintuanVO(String id) { Pintuan pintuan = this.getById(id); if (pintuan == null) { log.error("拼团活动id[" + id + "]的拼团活动不存在!"); - throw new ServiceException(ResultCode.ERROR); + throw new ServiceException(ResultCode.PINTUAN_NOT_EXIST_ERROR); } - return pintuan; - } - - /** - * 从mongo中根据条件查询拼团活动总数 - * - * @param param 拼团活动查询参数 - * @return 总数 - */ - @Override - public Long getPintuanByPageFromMongoCount(PintuanSearchParams param) { - Query query = param.mongoQuery(); - return mongoTemplate.count(query, PintuanVO.class); - } - - @Override - public boolean addPintuan(PintuanVO pintuan) { - PromotionTools.checkPromotionTime(pintuan.getStartTime().getTime(), pintuan.getEndTime().getTime()); - pintuan.setPromotionStatus(PromotionStatusEnum.NEW.name()); - //保存到MYSQL中 - boolean result = this.save(pintuan); - this.updatePintuanPromotionGoods(pintuan); - this.mongoTemplate.save(pintuan); - this.addPintuanStartTask(pintuan); - return result; - } - - @Override - public boolean modifyPintuan(PintuanVO pintuan) { - PintuanVO pintuanVO = this.checkExist(pintuan.getId()); - if (!pintuan.getPromotionStatus().equals(PromotionStatusEnum.NEW.name())) { - throw new ServiceException(ResultCode.PINTUAN_EDIT_ERROR_ITS_OPEN); - } - //检查促销时间 - PromotionTools.checkPromotionTime(pintuan.getStartTime().getTime(), pintuan.getEndTime().getTime()); - boolean result = this.updateById(pintuan); - if (pintuan.getPromotionGoodsList() != null) { - this.updatePintuanPromotionGoods(pintuan); - } - this.mongoTemplate.save(pintuan); - //时间发生变化 - if (pintuan.getStartTime().getTime() != pintuanVO.getStartTime().getTime()) { - PromotionMessage promotionMessage = new PromotionMessage(pintuan.getId(), PromotionTypeEnum.PINTUAN.name(), PromotionStatusEnum.START.name(), pintuan.getStartTime(), pintuan.getEndTime()); - //更新延时任务 - this.timeTrigger.edit(TimeExecuteConstant.PROMOTION_EXECUTOR, - promotionMessage, - pintuanVO.getStartTime().getTime(), - pintuan.getStartTime().getTime(), - DelayQueueTools.wrapperUniqueKey(DelayTypeEnums.PROMOTION, (promotionMessage.getPromotionType() + promotionMessage.getPromotionId())), - DateUtil.getDelayTime(pintuanVO.getStartTime().getTime()), - rocketmqCustomProperties.getPromotionTopic()); - } - return result; - } - - @Override - public boolean openPintuan(String pintuanId, Date startTime, Date endTime) { - PintuanVO pintuan = checkExist(pintuanId); - pintuan.setStartTime(startTime); - pintuan.setEndTime(endTime); - boolean result; - - long endTimeLong = endTime.getTime() / 1000; - //如果还在活动时间内 - if (endTimeLong > DateUtil.getDateline()) { - pintuan.setPromotionStatus(PromotionStatusEnum.NEW.name()); - updatePintuanPromotionGoods(pintuan); - this.addPintuanStartTask(pintuan); - } else { - //活动时间范围外,修改状态为已结束 - pintuan.setPromotionStatus(PromotionStatusEnum.END.name()); - } - - pintuan.setPromotionGoodsList(new ArrayList<>()); - result = this.updateById(pintuan); - this.mongoTemplate.save(pintuan); - return result; - } - - @Override - public boolean closePintuan(String pintuanId) { - PintuanVO pintuan = checkExist(pintuanId); - - long endTime = pintuan.getEndTime().getTime() / 1000; - //如果还在活动时间内 - if (endTime > DateUtil.getDateline()) { - //表示可以再次开启,则不处理未成团订单,因为可以开启 - pintuan.setPromotionStatus(PromotionStatusEnum.CLOSE.name()); - } else { - pintuan.setPromotionStatus(PromotionStatusEnum.END.name()); - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(Order::getOrderPromotionType, PromotionTypeEnum.PINTUAN.name()); - queryWrapper.eq(Order::getPromotionId, pintuanId); - queryWrapper.nested(i -> i.eq(Order::getPayStatus, PayStatusEnum.PAID.name()).or().eq(Order::getOrderStatus, OrderStatusEnum.PAID.name())); - //过滤父级拼团订单,根据父级拼团订单分组 - Map> collect = orderService.list(queryWrapper).stream().filter(i -> StrUtil.isNotEmpty(i.getParentOrderSn())).collect(Collectors.groupingBy(Order::getParentOrderSn)); - this.isOpenFictitiousPintuan(pintuan, collect); - - } - LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); - updateWrapper.eq(Pintuan::getId, pintuanId).set(Pintuan::getPromotionStatus, PromotionStatusEnum.CLOSE.name()); - boolean result = this.update(updateWrapper); - if (pintuan.getPromotionGoodsList() != null && !pintuan.getPromotionGoodsList().isEmpty()) { - LambdaQueryWrapper deleteWrapper = new LambdaQueryWrapper<>(); - deleteWrapper.eq(PromotionGoods::getPromotionId, pintuanId); - promotionGoodsService.remove(deleteWrapper); - pintuan.setPromotionGoodsList(new ArrayList<>()); - } - this.removePintuanGoodsFromEs(pintuanId, pintuan.getStartTime().getTime()); - this.mongoTemplate.save(pintuan); - return result; - } - - /** - * 删除拼团 - * - * @param pintuanId 拼团活动编号 - * @return 是否成功 - */ - @Override - public boolean deletePintuan(String pintuanId) { - PintuanVO pintuanVO = this.checkExist(pintuanId); - pintuanVO.setDeleteFlag(true); - if (pintuanVO.getPromotionGoodsList() != null && !pintuanVO.getPromotionGoodsList().isEmpty()) { - LambdaQueryWrapper deleteWrapper = new LambdaQueryWrapper<>(); - deleteWrapper.eq(PromotionGoods::getPromotionId, pintuanId); - promotionGoodsService.remove(deleteWrapper); - pintuanVO.setPromotionGoodsList(new ArrayList<>()); - } - boolean result = this.updateById(pintuanVO); - this.mongoTemplate.save(pintuanVO); - this.removePintuanGoodsFromEs(pintuanId, pintuanVO.getStartTime().getTime()); - return result; + PintuanVO pintuanVO = new PintuanVO(pintuan); + PromotionGoodsSearchParams searchParams = new PromotionGoodsSearchParams(); + searchParams.setPromotionId(pintuan.getId()); + pintuanVO.setPromotionGoodsList(promotionGoodsService.listFindAll(searchParams)); + return pintuanVO; } /** @@ -334,28 +147,109 @@ public class PintuanServiceImpl extends ServiceImpl impl public PintuanShareVO getPintuanShareInfo(String parentOrderSn, String skuId) { PintuanShareVO pintuanShareVO = new PintuanShareVO(); pintuanShareVO.setPintuanMemberVOS(new ArrayList<>()); - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); //查找团长订单和已和当前拼团订单拼团的订单 - queryWrapper.eq(Order::getOrderPromotionType, PromotionTypeEnum.PINTUAN.name()) - .eq(Order::getPayStatus, OrderStatusEnum.PAID.name()) - .and(i -> i.eq(Order::getParentOrderSn, parentOrderSn).or(j -> j.eq(Order::getSn, parentOrderSn))); - List orders = orderService.list(queryWrapper); + List orders = orderService.queryListByPromotion(PromotionTypeEnum.PINTUAN.name(), PayStatusEnum.PAID.name(), parentOrderSn, parentOrderSn); this.setPintuanOrderInfo(orders, pintuanShareVO, skuId); //如果为根据团员订单sn查询拼团订单信息时,找到团长订单sn,然后找到所有参与到同一拼团的订单信息 if (!orders.isEmpty() && pintuanShareVO.getPromotionGoods() == null) { - LambdaQueryWrapper orderLambdaQueryWrapper = new LambdaQueryWrapper<>(); - //查找团长订单和已和当前拼团订单拼团的订单 - orderLambdaQueryWrapper.eq(Order::getOrderPromotionType, PromotionTypeEnum.PINTUAN.name()) - .eq(Order::getPayStatus, OrderStatusEnum.PAID.name()) - .ne(Order::getSn, parentOrderSn) - .and(i -> i.eq(Order::getParentOrderSn, orders.get(0).getParentOrderSn()).or(j -> j.eq(Order::getSn, orders.get(0).getParentOrderSn()))); - List parentOrders = orderService.list(orderLambdaQueryWrapper); + List parentOrders = orderService.queryListByPromotion(PromotionTypeEnum.PINTUAN.name(), PayStatusEnum.PAID.name(), orders.get(0).getParentOrderSn(), orders.get(0).getParentOrderSn()); this.setPintuanOrderInfo(parentOrders, pintuanShareVO, skuId); - } return pintuanShareVO; } + /** + * 更新促销状态 + * 如果要更新促销状态为关闭,startTime和endTime置为空即可 + * + * @param ids 促销id集合 + * @param startTime 开始时间 + * @param endTime 结束时间 + * @return 是否更新成功 + */ + @Override + public boolean updateStatus(List ids, Long startTime, Long endTime) { + if (startTime != null && endTime != null) { + for (String id : ids) { + Pintuan pintuan = this.getById(id); + QueryWrapper queryWrapper = PromotionTools.checkActiveTime(new Date(startTime), new Date(endTime), PromotionTypeEnum.PINTUAN, pintuan.getStoreId(), id); + long sameNum = this.count(queryWrapper); + //当前时间段是否存在同类活动 + if (sameNum > 0) { + throw new ServiceException(ResultCode.PROMOTION_SAME_ACTIVE_EXIST); + } + } + } + + return super.updateStatus(ids, startTime, endTime); + } + + /** + * 检查促销参数 + * + * @param promotions 促销实体 + */ + @Override + public void checkPromotions(Pintuan promotions) { + QueryWrapper queryWrapper = PromotionTools.checkActiveTime(promotions.getStartTime(), promotions.getEndTime(), PromotionTypeEnum.PINTUAN, promotions.getStoreId(), promotions.getId()); + long sameNum = this.count(queryWrapper); + //当前时间段是否存在同类活动 + if (sameNum > 0) { + throw new ServiceException(ResultCode.PROMOTION_SAME_ACTIVE_EXIST); + } + super.checkPromotions(promotions); + } + + /** + * 更新促销商品信息 + * + * @param promotions 促销实体 + * @return 是否更新成功 + */ + @Override + public boolean updatePromotionsGoods(Pintuan promotions) { + boolean result = super.updatePromotionsGoods(promotions); + if (!PromotionsStatusEnum.CLOSE.name().equals(promotions.getPromotionStatus()) + && PromotionsScopeTypeEnum.PORTION_GOODS.name().equals(promotions.getScopeType()) + && promotions instanceof PintuanVO) { + PintuanVO pintuanVO = (PintuanVO) promotions; + this.updatePintuanPromotionGoods(pintuanVO); + TimeTriggerMsg timeTriggerMsg = new TimeTriggerMsg(TimeExecuteConstant.PROMOTION_EXECUTOR, + promotions.getEndTime().getTime(), + promotions, + DelayQueueTools.wrapperUniqueKey(DelayTypeEnums.PINTUAN_ORDER, (promotions.getId())), + rocketmqCustomProperties.getPromotionTopic()); + //发送促销活动开始的延时任务 + this.timeTrigger.addDelay(timeTriggerMsg); + } + if (promotions.getEndTime() == null && promotions.getStartTime() == null) { + //过滤父级拼团订单,根据父级拼团订单分组 + this.orderService.checkFictitiousOrder(promotions.getId(), promotions.getRequiredNum(), promotions.getFictitious()); + } + return result; + } + + /** + * 更新促销信息到商品索引 + * + * @param promotions 促销实体 + */ + @Override + public void updateEsGoodsIndex(Pintuan promotions) { + Pintuan pintuan = JSONUtil.parse(promotions).toBean(Pintuan.class); + super.updateEsGoodsIndex(pintuan); + } + + /** + * 当前促销类型 + * + * @return 当前促销类型 + */ + @Override + public PromotionTypeEnum getPromotionType() { + return PromotionTypeEnum.PINTUAN; + } + /** * 根据订单信息,从中提取出拼团信息,设置拼团信息 * @@ -367,135 +261,32 @@ public class PintuanServiceImpl extends ServiceImpl impl for (Order order : orders) { Member member = memberService.getById(order.getMemberId()); PintuanMemberVO memberVO = new PintuanMemberVO(member); - if (StrUtil.isEmpty(order.getParentOrderSn())) { + if (CharSequenceUtil.isEmpty(order.getParentOrderSn())) { memberVO.setOrderSn(""); - PromotionGoods promotionGoods = promotionGoodsService.getPromotionGoods(PromotionTypeEnum.PINTUAN, order.getPromotionId(), skuId); + PromotionGoodsSearchParams searchParams = new PromotionGoodsSearchParams(); + searchParams.setPromotionStatus(PromotionsStatusEnum.START.name()); + searchParams.setPromotionId(order.getPromotionId()); + searchParams.setSkuId(skuId); + PromotionGoods promotionGoods = promotionGoodsService.getPromotionsGoods(searchParams); if (promotionGoods == null) { - throw new ServiceException(ResultCode.PINTUAN_NOT_EXIST_ERROR); + throw new ServiceException(ResultCode.PINTUAN_GOODS_NOT_EXIST_ERROR); } pintuanShareVO.setPromotionGoods(promotionGoods); - Pintuan pintuanById = this.getPintuanById(order.getPromotionId()); - LambdaQueryWrapper countQueryWrapper = new LambdaQueryWrapper<>(); - countQueryWrapper.eq(Order::getPayStatus, PayStatusEnum.PAID.name()); - countQueryWrapper.and(i -> i.eq(Order::getSn, order.getSn()).or(j -> j.eq(Order::getParentOrderSn, order.getSn()))); + Pintuan pintuanById = this.getById(order.getPromotionId()); //获取已参团人数 - int count = orderService.count(countQueryWrapper); - //获取待参团人数 - int toBoGrouped = pintuanById.getRequiredNum() - count; - memberVO.setGroupNum(pintuanById.getRequiredNum()); - memberVO.setGroupedNum(count); - memberVO.setToBeGroupedNum(toBoGrouped); + this.setMemberVONum(memberVO, pintuanById.getRequiredNum(), order.getSn()); } pintuanShareVO.getPintuanMemberVOS().add(memberVO); } } - /** - * 增加拼团定时任务 - * @param pintuan - */ - private void addPintuanStartTask(PintuanVO pintuan) { - PromotionMessage promotionMessage = new PromotionMessage(pintuan.getId(), PromotionTypeEnum.PINTUAN.name(), PromotionStatusEnum.START.name(), pintuan.getStartTime(), pintuan.getEndTime()); - TimeTriggerMsg timeTriggerMsg = new TimeTriggerMsg(TimeExecuteConstant.PROMOTION_EXECUTOR, - pintuan.getStartTime().getTime(), - promotionMessage, - DelayQueueTools.wrapperUniqueKey(DelayTypeEnums.PROMOTION, (promotionMessage.getPromotionType() + promotionMessage.getPromotionId())), - rocketmqCustomProperties.getPromotionTopic()); - //发送促销活动开始的延时任务 - this.timeTrigger.addDelay(timeTriggerMsg); - } - - /** - * 从es商品索引中中移除拼团活动 - * - * @param id 拼团活动ID - * @param originStartTime 活动开始时间 - */ - private void removePintuanGoodsFromEs(String id, Long originStartTime) { - this.timeTrigger.delete(TimeExecuteConstant.PROMOTION_EXECUTOR, - originStartTime, - DelayQueueTools.wrapperUniqueKey(DelayTypeEnums.PROMOTION, (PromotionTypeEnum.PINTUAN.name() + id)), - rocketmqCustomProperties.getPromotionTopic()); - } - - /** - * 从指定订单列表中检查是否开始虚拟成团 - * - * @param pintuan 拼团活动信息 - * @param collect 检查的订单列表 - */ - private void isOpenFictitiousPintuan(PintuanVO pintuan, Map> collect) { - //成团人数 - Integer requiredNum = pintuan.getRequiredNum(); - - for (Map.Entry> entry : collect.entrySet()) { - //是否开启虚拟成团 - if (Boolean.FALSE.equals(pintuan.getFictitious()) && entry.getValue().size() < requiredNum) { - //如果未开启虚拟成团且已参团人数小于成团人数,则自动取消订单 - LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); - updateWrapper.eq(Order::getOrderPromotionType, PromotionTypeEnum.PINTUAN.name()); - updateWrapper.eq(Order::getPromotionId, pintuan.getId()); - updateWrapper.eq(Order::getParentOrderSn, entry.getKey()); - updateWrapper.set(Order::getOrderStatus, OrderStatusEnum.CANCELLED.name()); - updateWrapper.set(Order::getCancelReason, "拼团活动结束订单未付款,系统自动取消订单"); - orderService.update(updateWrapper); - } else if (Boolean.TRUE.equals(pintuan.getFictitious())) { - this.fictitiousPintuan(entry, requiredNum); - } - } - } - - /** - * 虚拟成团 - * - * @param entry 订单列表 - * @param requiredNum 必须参团人数 - */ - private void fictitiousPintuan(Map.Entry> entry, Integer requiredNum) { - Map> listMap = entry.getValue().stream().collect(Collectors.groupingBy(Order::getPayStatus)); - //未付款订单 - List unpaidOrders = listMap.get(PayStatusEnum.UNPAID.name()); - //未付款订单自动取消 - if (unpaidOrders != null && !unpaidOrders.isEmpty()) { - for (Order unpaidOrder : unpaidOrders) { - unpaidOrder.setOrderStatus(OrderStatusEnum.CANCELLED.name()); - unpaidOrder.setCancelReason("拼团活动结束订单未付款,系统自动取消订单"); - } - orderService.updateBatchById(unpaidOrders); - } - List paidOrders = listMap.get(PayStatusEnum.PAID.name()); - //如待参团人数大于0,并已开启虚拟成团 - if (!paidOrders.isEmpty()) { - //待参团人数 - int waitNum = requiredNum - paidOrders.size(); - //添加虚拟成团 - for (int i = 0; i < waitNum; i++) { - Order order = new Order(); - BeanUtil.copyProperties(paidOrders.get(0), order); - order.setMemberId("-1"); - order.setMemberName("参团人员"); - orderService.save(order); - paidOrders.add(order); - } - for (Order paidOrder : paidOrders) { - paidOrder.setOrderStatus(OrderStatusEnum.UNDELIVERED.name()); - } - orderService.updateBatchById(paidOrders); - } - } - - /** - * 检查当前拼团活动是否存在 - * - * @param pintuanId 拼团id - * @return 拼团活动 - */ - private PintuanVO checkExist(String pintuanId) { - PintuanVO pintuan = mongoTemplate.findById(pintuanId, PintuanVO.class); - if (pintuan == null) { - throw new ServiceException(ResultCode.PINTUAN_NOT_EXIST_ERROR); - } - return pintuan; + private void setMemberVONum(PintuanMemberVO memberVO, Integer requiredNum, String orderSn) { + long count = this.orderService.queryCountByPromotion(PromotionTypeEnum.PINTUAN.name(), PayStatusEnum.PAID.name(), orderSn, orderSn); + //获取待参团人数 + long toBoGrouped = requiredNum - count; + memberVO.setGroupNum(requiredNum); + memberVO.setGroupedNum(count); + memberVO.setToBeGroupedNum(toBoGrouped); } /** @@ -521,9 +312,10 @@ public class PintuanServiceImpl extends ServiceImpl impl throw new ServiceException("商品[" + promotionGood.getGoodsName() + "]已经在重叠的时间段参加了秒杀活动或拼团活动,不能参加拼团活动"); } } - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(PromotionGoods::getPromotionId, pintuan.getId()).eq(PromotionGoods::getPromotionType, PromotionTypeEnum.PINTUAN.name()); - promotionGoodsService.remove(queryWrapper); + PromotionGoodsSearchParams searchParams = new PromotionGoodsSearchParams(); + searchParams.setPromotionId(pintuan.getId()); + searchParams.setPromotionType(PromotionTypeEnum.PINTUAN.name()); + promotionGoodsService.deletePromotionGoods(searchParams); promotionGoodsService.saveOrUpdateBatch(promotionGoods); } } diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PointsGoodsCategoryServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PointsGoodsCategoryServiceImpl.java index d10f209d..9a873fc6 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PointsGoodsCategoryServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PointsGoodsCategoryServiceImpl.java @@ -1,12 +1,13 @@ package cn.lili.modules.promotion.serviceimpl; -import cn.hutool.core.util.StrUtil; +import cn.hutool.core.text.CharSequenceUtil; +import cn.lili.common.enums.ResultCode; import cn.lili.common.exception.ServiceException; -import cn.lili.mybatis.util.PageUtil; import cn.lili.common.vo.PageVO; import cn.lili.modules.promotion.entity.dos.PointsGoodsCategory; import cn.lili.modules.promotion.mapper.PointsGoodsCategoryMapper; import cn.lili.modules.promotion.service.PointsGoodsCategoryService; +import cn.lili.mybatis.util.PageUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -69,7 +70,7 @@ public class PointsGoodsCategoryServiceImpl extends ServiceImpl getCategoryByPage(String name, PageVO page) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - if (StrUtil.isNotEmpty(name)) { + if (CharSequenceUtil.isNotEmpty(name)) { queryWrapper.like(PointsGoodsCategory::getName, name); } page.setOrder("ASC"); @@ -96,7 +97,7 @@ public class PointsGoodsCategoryServiceImpl extends ServiceImpl implements PointsGoodsService { +@Slf4j +public class PointsGoodsServiceImpl extends AbstractPromotionsServiceImpl implements PointsGoodsService { /** - * 延时任务 + * 促销商品 */ @Autowired - private TimeTrigger timeTrigger; - /** - * Mongo - */ - @Autowired - private MongoTemplate mongoTemplate; - /** - * RocketMQ - */ - @Autowired - private RocketmqCustomProperties rocketmqCustomProperties; + private PromotionGoodsService promotionGoodsService; /** * 规格商品 */ @Autowired private GoodsSkuService goodsSkuService; - /** - * Es商品 - */ - @Autowired - private EsGoodsIndexService goodsIndexService; /** - * 批量添加积分商品 - * - * @param pointsGoodsList 积分商品列表 - * @return 是否添加成功 + * rocketMq配置 */ + @Autowired + private RocketmqCustomProperties rocketmqCustomProperties; + + /** + * rocketMq + */ + @Autowired + private RocketMQTemplate rocketMQTemplate; + + @Override - public boolean addPointsGoods(List pointsGoodsList) { - List pointsGoodsList1 = new ArrayList<>(); - for (PointsGoodsVO pointsGoods : pointsGoodsList) { - GoodsSku goodsSku = this.checkSkuExist(pointsGoods.getSkuId()); - this.checkParam(pointsGoods, goodsSku); - pointsGoods.setGoodsSku(goodsSku); - PromotionTools.checkPromotionTime(pointsGoods.getStartTime().getTime(), pointsGoods.getEndTime().getTime()); + public boolean savePointsGoodsBatch(List promotionsList) { + List promotionGoodsList = new ArrayList<>(); + for (PointsGoods pointsGoods : promotionsList) { + this.initPromotion(pointsGoods); + this.checkPromotions(pointsGoods); if (this.checkSkuDuplicate(pointsGoods.getSkuId(), null) == null) { - pointsGoods.setPromotionStatus(PromotionStatusEnum.NEW.name()); pointsGoods.setPromotionName("积分商品活动"); - pointsGoodsList1.add(pointsGoods); } else { throw new ServiceException("商品id为" + pointsGoods.getSkuId() + "的商品已参加积分商品活动!"); } + GoodsSku goodsSku = this.checkSkuExist(pointsGoods.getSkuId()); + pointsGoods.setStoreId(goodsSku.getStoreId()); + pointsGoods.setStoreName(goodsSku.getStoreName()); + } - this.saveBatch(pointsGoodsList1); - for (PointsGoodsVO pointsGoods : pointsGoodsList) { - this.mongoTemplate.save(pointsGoods); - this.addPointsGoodsPromotionTask(pointsGoods); + boolean saveBatch = this.saveBatch(promotionsList); + if (saveBatch) { + for (PointsGoods pointsGoods : promotionsList) { + GoodsSku goodsSku = this.checkSkuExist(pointsGoods.getSkuId()); + PromotionGoods promotionGoods = new PromotionGoods(pointsGoods, goodsSku); + promotionGoods.setPromotionType(PromotionTypeEnum.POINTS_GOODS.name()); + promotionGoods.setScopeId(pointsGoods.getSkuId()); + promotionGoodsList.add(promotionGoods); + } + boolean saveOrUpdateBatch = this.promotionGoodsService.saveOrUpdateBatch(promotionGoodsList); + if (saveOrUpdateBatch) { + for (PointsGoods pointsGoods : promotionsList) { + this.updateEsGoodsIndex(pointsGoods); + } + } + } - return true; + return saveBatch; } /** - * 更新一个积分商品 + * 积分商品更新 * - * @param pointsGoods 编辑的积分商品信息 + * @param promotions 促销信息 * @return 是否更新成功 */ @Override - public boolean updatePointsGoods(PointsGoodsVO pointsGoods) { + public boolean updatePromotions(PointsGoods promotions) { boolean result = false; - PointsGoodsVO pointsGoodsVO = this.checkExist(pointsGoods.getId()); - GoodsSku goodsSku = this.checkSkuExist(pointsGoods.getSkuId()); - this.checkParam(pointsGoods, goodsSku); - pointsGoods.setGoodsSku(goodsSku); - if (this.checkSkuDuplicate(pointsGoods.getSkuId(), pointsGoods.getId()) == null) { - if (PromotionStatusEnum.START.name().equals(pointsGoods.getPromotionStatus()) || PromotionStatusEnum.END.name().equals(pointsGoods.getPromotionStatus())) { - throw new ServiceException(ResultCode.PROMOTION_UPDATE_ERROR); + this.checkStatus(promotions); + this.checkPromotions(promotions); + if (this.checkSkuDuplicate(promotions.getSkuId(), promotions.getId()) == null) { + result = this.updateById(promotions); + if (this.updatePromotionsGoods(promotions)) { + this.updateEsGoodsIndex(promotions); } - PromotionTools.checkPromotionTime(pointsGoods.getStartTime().getTime(), pointsGoods.getEndTime().getTime()); - result = this.updateById(pointsGoods); - this.mongoTemplate.save(pointsGoods); - if (pointsGoods.getStartTime().getTime() != pointsGoodsVO.getStartTime().getTime()) { - PromotionMessage promotionMessage = new PromotionMessage(pointsGoods.getId(), PromotionTypeEnum.POINTS_GOODS.name(), PromotionStatusEnum.START.name(), pointsGoods.getStartTime(), pointsGoods.getEndTime()); - //更新延时任务 - this.timeTrigger.edit(TimeExecuteConstant.PROMOTION_EXECUTOR, - promotionMessage, - pointsGoodsVO.getStartTime().getTime(), - pointsGoods.getStartTime().getTime(), - DelayQueueTools.wrapperUniqueKey(DelayTypeEnums.PROMOTION, (promotionMessage.getPromotionType() + promotionMessage.getPromotionId())), - DateUtil.getDelayTime(pointsGoods.getStartTime().getTime()), - rocketmqCustomProperties.getPromotionTopic()); - } - } return result; } /** - * 批量更新积分商品状态 + * 移除促销活动 * - * @param ids 积分商品id集合 - * @param promotionStatus 更新的状态 - * @return 是否更新成功 + * @param ids 促销活动id集合 + * @return 是否移除成功 */ @Override - public boolean updatePointsGoodsPromotionStatus(List ids, String promotionStatus) { + public boolean removePromotions(List ids) { for (String id : ids) { - PointsGoodsVO pointsGoodsVO = this.checkExist(id); - pointsGoodsVO.setPromotionStatus(PromotionStatusEnum.valueOf(promotionStatus).name()); - this.updateById(pointsGoodsVO); - this.mongoTemplate.save(pointsGoodsVO); - if (promotionStatus.equals(PromotionStatusEnum.START.name())) { - this.addPointsGoodsPromotionTask(pointsGoodsVO); - } else { - this.goodsIndexService.deleteEsGoodsPromotionIndexByList(Collections.singletonList(pointsGoodsVO.getSkuId()), PromotionTypeEnum.POINTS_GOODS); - this.timeTrigger.delete(TimeExecuteConstant.PROMOTION_EXECUTOR, - pointsGoodsVO.getStartTime().getTime(), - DelayQueueTools.wrapperUniqueKey(DelayTypeEnums.PROMOTION, (PromotionTypeEnum.POINTS_GOODS.name() + pointsGoodsVO.getId())), - rocketmqCustomProperties.getPromotionTopic()); + PointsGoods pointsGoods = this.getById(id); + if (pointsGoods == null) { + log.error(ResultCode.POINT_GOODS_NOT_EXIST.message()); + ids.remove(id); } } - return true; - } - - /** - * 批量删除积分商品 - * - * @param ids 积分商品id集合 - * @return 是否删除成功 - */ - @Override - public boolean deletePointsGoods(List ids) { - List skuIds = new ArrayList<>(); - for (String id : ids) { - PointsGoodsVO pointsGoodsVO = this.checkExist(id); - this.timeTrigger.delete(TimeExecuteConstant.PROMOTION_EXECUTOR, - pointsGoodsVO.getStartTime().getTime(), - DelayQueueTools.wrapperUniqueKey(DelayTypeEnums.PROMOTION, (PromotionTypeEnum.POINTS_GOODS.name() + pointsGoodsVO.getId())), - rocketmqCustomProperties.getPromotionTopic()); - skuIds.add(pointsGoodsVO.getSkuId()); - } - boolean result = this.removeByIds(ids); - this.goodsIndexService.deleteEsGoodsPromotionIndexByList(skuIds, PromotionTypeEnum.POINTS_GOODS); - Query query = new Query(); - query.addCriteria(new Criteria("id").in(ids)); - this.mongoTemplate.remove(query, PointsGoodsVO.class); - return result; + this.promotionGoodsService.deletePromotionGoods(ids); + return this.removeByIds(ids); } /** @@ -202,79 +148,104 @@ public class PointsGoodsServiceImpl extends ServiceImpl pointsGoodsVO = this.mongoTemplate.find(query, PointsGoodsVO.class); - if (pointsGoodsVO != null && pointsGoodsVO.size() > 0) { - return pointsGoodsVO.get(0); - } - return null; + PointsGoods pointsGoods = this.checkExist(id); + PointsGoodsVO pointsGoodsVO = new PointsGoodsVO(); + BeanUtils.copyProperties(pointsGoods, pointsGoodsVO); + pointsGoodsVO.setGoodsSku(this.checkSkuExist(pointsGoods.getSkuId())); + return pointsGoodsVO; } /** - * 根据条件查询积分商品 + * 根据ID获取积分详情 * - * @param searchParams 积分商品查询参数 - * @param page 分页参数 - * @return 积分商品查询结果 + * @param skuId 商品SkuId + * @return 积分详情 */ @Override - public IPage getPointsGoodsByPage(PointsGoodsSearchParams searchParams, PageVO page) { - IPage pointsGoodsPage = new Page<>(); - if (UserContext.getCurrentUser().getRole().equals(UserEnums.MEMBER)) { - searchParams.setPromotionStatus(PromotionStatusEnum.START.name()); + public PointsGoodsVO getPointsGoodsDetailBySkuId(String skuId) { + QueryWrapper queryWrapper = new QueryWrapper().eq("sku_id", skuId); + queryWrapper.and(PromotionTools.queryPromotionStatus(PromotionsStatusEnum.START)); + PointsGoods pointsGoods = this.getOne(queryWrapper, false); + if (pointsGoods == null) { + log.error("skuId为" + skuId + "的积分商品不存在!"); + throw new ServiceException(); } - Query query = searchParams.mongoQuery(); - if (page != null) { - PromotionTools.mongoQueryPageParam(query, page); - pointsGoodsPage.setSize(page.getPageSize()); - pointsGoodsPage.setCurrent(page.getPageNumber()); - } - List pointsGoodsVOS = this.mongoTemplate.find(query, PointsGoodsVO.class); - pointsGoodsPage.setRecords(pointsGoodsVOS); - pointsGoodsPage.setTotal(this.mongoTemplate.count(searchParams.mongoQuery(), PointsGoodsVO.class)); - return pointsGoodsPage; + PointsGoodsVO pointsGoodsVO = new PointsGoodsVO(); + BeanUtils.copyProperties(pointsGoods, pointsGoodsVO); + pointsGoodsVO.setGoodsSku(this.checkSkuExist(pointsGoods.getSkuId())); + return pointsGoodsVO; } - /** - * 添加积分商品mq任务 + * 检查促销参数 * - * @param pointsGoods 积分商品信息 + * @param promotions 促销实体 */ - private void addPointsGoodsPromotionTask(PointsGoodsVO pointsGoods) { - PromotionMessage promotionMessage = new PromotionMessage(pointsGoods.getId(), PromotionTypeEnum.POINTS_GOODS.name(), - PromotionStatusEnum.START.name(), - pointsGoods.getStartTime(), pointsGoods.getEndTime()); - TimeTriggerMsg timeTriggerMsg = new TimeTriggerMsg(TimeExecuteConstant.PROMOTION_EXECUTOR, - promotionMessage.getStartTime().getTime(), - promotionMessage, - DelayQueueTools.wrapperUniqueKey(DelayTypeEnums.PROMOTION, (promotionMessage.getPromotionType() + promotionMessage.getPromotionId())), - rocketmqCustomProperties.getPromotionTopic()); - //发送促销活动开始的延时任务 - this.timeTrigger.addDelay(timeTriggerMsg); + @Override + public void checkPromotions(PointsGoods promotions) { + super.checkPromotions(promotions); + GoodsSku goodsSku = this.checkSkuExist(promotions.getSkuId()); + if (promotions.getActiveStock() > goodsSku.getQuantity()) { + throw new ServiceException(ResultCode.POINT_GOODS_ACTIVE_STOCK_ERROR); + } } /** - * 检查mongo中积分商品存在 + * 检查促销状态 + * + * @param promotions 促销实体 + */ + @Override + public void checkStatus(PointsGoods promotions) { + super.checkStatus(promotions); + } + + /** + * 更新促销商品信息 + * + * @param promotions 促销实体 + * @return 是否更新成功 + */ + @Override + public boolean updatePromotionsGoods(PointsGoods promotions) { + this.promotionGoodsService.deletePromotionGoods(Collections.singletonList(promotions.getId())); + return this.promotionGoodsService.save(new PromotionGoods(promotions, this.checkSkuExist(promotions.getSkuId()))); + } + + /** + * 更新促销信息到商品索引 + * + * @param promotions 促销实体 + */ + @Override + public void updateEsGoodsIndex(PointsGoods promotions) { + Map query = MapUtil.builder(new HashMap()).put("id", promotions.getSkuId()).build(); + Map update = MapUtil.builder(new HashMap()).put("points", promotions.getPoints()).build(); + //修改规格索引,发送mq消息 + Map updateIndexFieldsMap = EsIndexUtil.getUpdateIndexFieldsMap(query, update); + String destination = rocketmqCustomProperties.getGoodsTopic() + ":" + GoodsTagsEnum.UPDATE_GOODS_INDEX_FIELD.name(); + rocketMQTemplate.asyncSend(destination, JSONUtil.toJsonStr(updateIndexFieldsMap), RocketmqSendCallbackBuilder.commonCallback()); + } + + + @Override + public PromotionTypeEnum getPromotionType() { + return PromotionTypeEnum.POINTS_GOODS; + } + + /** + * 检查积分商品存在 * * @param id 积分商品id * @return 积分商品信息 */ - private PointsGoodsVO checkExist(String id) { - PointsGoodsVO pointsGoodsVO = this.mongoTemplate.findById(id, PointsGoodsVO.class); - if (pointsGoodsVO == null) { + private PointsGoods checkExist(String id) { + PointsGoods pointsGoods = this.getById(id); + if (pointsGoods == null) { log.error("id为" + id + "的积分商品不存在!"); throw new ServiceException(); } - return pointsGoodsVO; + return pointsGoods; } /** @@ -285,13 +256,15 @@ public class PointsGoodsServiceImpl extends ServiceImpl queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(PointsGoods::getSkuId, skuId); - if (StrUtil.isNotEmpty(id)) { - queryWrapper.ne(PointsGoods::getId, id); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("sku_id", skuId); + if (CharSequenceUtil.isNotEmpty(id)) { + queryWrapper.ne("id", id); } - queryWrapper.ne(PointsGoods::getPromotionStatus, PromotionStatusEnum.END.name()); - return this.getOne(queryWrapper); + queryWrapper.and(i -> i + .or(PromotionTools.queryPromotionStatus(PromotionsStatusEnum.START)) + .or(PromotionTools.queryPromotionStatus(PromotionsStatusEnum.NEW))); + return this.getOne(queryWrapper, false); } /** @@ -309,15 +282,4 @@ public class PointsGoodsServiceImpl extends ServiceImpl goodsSku.getQuantity()) { - throw new ServiceException(ResultCode.POINT_GOODS_ACTIVE_STOCK_ERROR); - } - } } diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PromotionGoodsServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PromotionGoodsServiceImpl.java index fc3de46f..e8b4c976 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PromotionGoodsServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PromotionGoodsServiceImpl.java @@ -5,43 +5,32 @@ import cn.hutool.core.text.CharSequenceUtil; import cn.lili.common.enums.PromotionTypeEnum; import cn.lili.common.enums.ResultCode; import cn.lili.common.exception.ServiceException; -import cn.lili.common.utils.BeanUtil; -import cn.lili.common.utils.DateUtil; import cn.lili.common.vo.PageVO; import cn.lili.modules.goods.entity.dos.GoodsSku; -import cn.lili.modules.goods.entity.dto.GoodsSearchParams; -import cn.lili.modules.goods.entity.enums.GoodsAuthEnum; -import cn.lili.modules.goods.entity.enums.GoodsStatusEnum; import cn.lili.modules.goods.service.GoodsSkuService; -import cn.lili.modules.order.cart.entity.vo.CartSkuVO; -import cn.lili.modules.order.cart.entity.vo.FullDiscountVO; import cn.lili.modules.promotion.entity.dos.PromotionGoods; import cn.lili.modules.promotion.entity.dos.SeckillApply; -import cn.lili.modules.promotion.entity.dto.BasePromotion; -import cn.lili.modules.promotion.entity.dto.PromotionGoodsDTO; -import cn.lili.modules.promotion.entity.enums.CouponScopeTypeEnum; -import cn.lili.modules.promotion.entity.enums.PromotionStatusEnum; -import cn.lili.modules.promotion.entity.vos.CouponVO; -import cn.lili.modules.promotion.entity.vos.PromotionGoodsSearchParams; -import cn.lili.modules.promotion.entity.vos.SeckillVO; +import cn.lili.modules.promotion.entity.dto.search.PromotionGoodsSearchParams; +import cn.lili.modules.promotion.entity.dto.search.SeckillSearchParams; +import cn.lili.modules.promotion.entity.enums.PromotionsScopeTypeEnum; +import cn.lili.modules.promotion.entity.enums.PromotionsStatusEnum; import cn.lili.modules.promotion.mapper.PromotionGoodsMapper; import cn.lili.modules.promotion.service.PromotionGoodsService; import cn.lili.modules.promotion.service.SeckillApplyService; +import cn.lili.modules.promotion.tools.PromotionTools; import cn.lili.mybatis.util.PageUtil; 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 com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.mongodb.core.MongoTemplate; -import org.springframework.data.mongodb.core.query.Criteria; -import org.springframework.data.mongodb.core.query.Query; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; +import java.util.Arrays; import java.util.Date; import java.util.List; @@ -53,14 +42,10 @@ import java.util.List; */ @Service @Transactional(rollbackFor = Exception.class) - public class PromotionGoodsServiceImpl extends ServiceImpl implements PromotionGoodsService { - /** - * Mongo - */ - @Autowired - private MongoTemplate mongoTemplate; + private static final String SKU_ID_COLUMN = "sku_id"; + /** * Redis */ @@ -77,148 +62,82 @@ public class PromotionGoodsServiceImpl extends ServiceImpl promotionGoodsList, PromotionTypeEnum promotionType) { - for (PromotionGoods promotionGoods : promotionGoodsList) { - promotionGoods.setDeleteFlag(true); - } - updateBatchById(promotionGoodsList); - } - - @Override - public List findNowSkuPromotion(String skuId) { + public List findSkuValidPromotion(String skuId, String storeIds) { GoodsSku sku = goodsSkuService.getGoodsSkuByIdFromCache(skuId); if (sku == null) { return new ArrayList<>(); } + QueryWrapper queryWrapper = new QueryWrapper<>(); - List promotionGoods = new ArrayList<>(this.list(new LambdaQueryWrapper() - .eq(PromotionGoods::getSkuId, skuId) -// .ge(PromotionGoods::getStartTime, new Date()) - .eq(PromotionGoods::getPromotionStatus, PromotionStatusEnum.START.name()))); - - - //单独检查,添加适用于全品类的满优惠活动 - Query query = new Query(); - query.addCriteria(Criteria.where("promotionStatus").is(PromotionStatusEnum.START.name())); - query.addCriteria(Criteria.where("startTime").lte(System.currentTimeMillis())); - List fullDiscountVOS = mongoTemplate.find(query, FullDiscountVO.class); - for (FullDiscountVO fullDiscountVO : fullDiscountVOS) { - if (fullDiscountVO.getPromotionGoodsList() == null && - sku.getStoreId().equals(fullDiscountVO.getStoreId())) { - PromotionGoods p = new PromotionGoods(sku); - p.setPromotionId(fullDiscountVO.getId()); - p.setPromotionStatus(fullDiscountVO.getPromotionStatus()); - p.setPromotionType(PromotionTypeEnum.FULL_DISCOUNT.name()); - p.setStartTime(fullDiscountVO.getStartTime()); - p.setEndTime(fullDiscountVO.getEndTime()); - promotionGoods.add(p); - } - } - //单独检查,添加适用于全品类的全平台或属于当前店铺的优惠券活动 - List couponVOS = mongoTemplate.find(query, CouponVO.class); - for (CouponVO couponVO : couponVOS) { - boolean aLLScopeType = (couponVO.getPromotionGoodsList() == null - && couponVO.getScopeType().equals(CouponScopeTypeEnum.ALL.name()) - && (("0").equals(couponVO.getStoreId()) || sku.getStoreId().equals(couponVO.getStoreId()))); - if (aLLScopeType) { - PromotionGoods p = new PromotionGoods(sku); - p.setPromotionId(couponVO.getId()); - p.setPromotionStatus(couponVO.getPromotionStatus()); - p.setPromotionType(PromotionTypeEnum.COUPON.name()); - p.setStartTime(couponVO.getStartTime()); - p.setEndTime(couponVO.getEndTime()); - promotionGoods.add(p); - } - } - return promotionGoods; + queryWrapper.and(i -> i.or(j -> j.eq(SKU_ID_COLUMN, skuId)) + .or(n -> n.eq("scope_type", PromotionsScopeTypeEnum.ALL.name())) + .or(n -> n.and(k -> k.eq("scope_type", PromotionsScopeTypeEnum.PORTION_GOODS_CATEGORY.name()) + .and(l -> l.like("scope_id", sku.getCategoryPath()))))); + queryWrapper.and(i -> i.or(PromotionTools.queryPromotionStatus(PromotionsStatusEnum.START)).or(PromotionTools.queryPromotionStatus(PromotionsStatusEnum.NEW))); + queryWrapper.in("store_id", Arrays.asList(storeIds.split(","))); + return this.list(queryWrapper); } @Override - public void updatePromotion(CartSkuVO cartSkuVO) { - Date date = DateUtil.getCurrentDayEndTime(); - //如果商品的促销更新时间在当前时间之前,则更新促销 - if (cartSkuVO.getUpdatePromotionTime().before(date)) { - List promotionGoods = this.findNowSkuPromotion(cartSkuVO.getGoodsSku().getId()); - cartSkuVO.setPromotions(promotionGoods); - //下一次更新时间 - cartSkuVO.setUpdatePromotionTime(date); - } + public IPage pageFindAll(PromotionGoodsSearchParams searchParams, PageVO pageVo) { + return this.page(PageUtil.initPage(pageVo), searchParams.queryWrapper()); } + /** + * 获取促销商品信息 + * + * @param searchParams 查询参数 + * @return 促销商品列表 + */ @Override - public List getPromotionGoods(String skuId) { - long currTime = DateUtil.getDateline(); - String currDate = DateUtil.toString(currTime, DateUtil.STANDARD_DATE_NO_UNDERLINE_FORMAT); - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper() - .eq(PromotionGoods::getSkuId, skuId) - .le(PromotionGoods::getStartTime, currTime) - .ge(PromotionGoods::getEndTime, currDate) - .ne(PromotionGoods::getPromotionType, PromotionTypeEnum.PINTUAN.name()) - .ne(PromotionGoods::getPromotionType, PromotionTypeEnum.SECKILL.name()); - return this.baseMapper.selectList(queryWrapper); + public List listFindAll(PromotionGoodsSearchParams searchParams) { + return this.list(searchParams.queryWrapper()); } + /** + * 获取促销商品信息 + * + * @param searchParams 查询参数 + * @return 促销商品信息 + */ @Override - public IPage getPromotionGoods(PromotionGoodsSearchParams searchParams, PageVO pageVo) { - IPage promotionGoodsPage = new Page<>(); - LambdaQueryWrapper queryChainWrapper = searchParams.queryWrapper(); - List promotionGoodsList = new ArrayList<>(); - Page page = this.page(PageUtil.initPage(pageVo), queryChainWrapper); - promotionGoodsPage.setSize(page.getSize()); - promotionGoodsPage.setTotal(page.getTotal()); - promotionGoodsPage.setPages(page.getPages()); - for (PromotionGoods promotionGoods : page.getRecords()) { - PromotionGoodsDTO promotionGoodsDTO = this.wrapperPromotionGoodsDTO(promotionGoods); - promotionGoodsList.add(promotionGoodsDTO); - } - promotionGoodsPage.setRecords(promotionGoodsList); - return promotionGoodsPage; + public PromotionGoods getPromotionsGoods(PromotionGoodsSearchParams searchParams) { + return this.getOne(searchParams.queryWrapper(), false); } + /** + * 获取当前有效时间特定促销类型的促销商品信息 + * + * @param skuId 查询参数 + * @param promotionTypes 特定促销类型 + * @return 促销商品信息 + */ @Override - public IPage getCurrentPromotionGoods(String promotionType, PageVO pageVo) { - IPage promotionGoodsPage = new Page<>(); - promotionGoodsPage.setSize(pageVo.getPageSize()); - promotionGoodsPage.setCurrent(pageVo.getPageNumber()); - Date now = new Date(); - Query query = new Query(); - query.addCriteria(Criteria.where("startTime").lte(now)); - query.addCriteria(Criteria.where("endTime").gte(now)); - List promotionGoodsDTOList = new ArrayList<>(); - int total = 0; - //根据促销活动类型的不同,将满足当前促销活动类型且正在进行的促销商品返回出去 - switch (PromotionTypeEnum.valueOf(promotionType)) { - case FULL_DISCOUNT: - List fullDiscountVOS = this.mongoTemplate.find(query, FullDiscountVO.class); - this.setFullDiscountPromotionGoods(promotionGoodsPage, fullDiscountVOS, pageVo); - break; - case COUPON: - List couponVOS = this.mongoTemplate.find(query, CouponVO.class); - for (CouponVO couponVO : couponVOS) { - if (couponVO != null && couponVO.getPromotionGoodsList() == null) { - IPage page = this.getAllGoodsSkuToPromotionGoodsByPage(couponVO.getStoreId(), couponVO, pageVo); - promotionGoodsDTOList.addAll(page.getRecords()); - total += page.getTotal(); - } - } - promotionGoodsPage.setRecords(promotionGoodsDTOList.subList(0, pageVo.getPageSize())); - promotionGoodsPage.setTotal(total); - break; - case SECKILL: - case POINTS_GOODS: - return promotionGoodsPage; - default: - break; - } - if (promotionGoodsPage.getRecords() == null || promotionGoodsPage.getRecords().isEmpty()) { - promotionGoodsPage = this.getGoodsSkuToPromotionGoodsByPage(promotionType, pageVo); - } - return promotionGoodsPage; + public PromotionGoods getValidPromotionsGoods(String skuId, List promotionTypes) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq(SKU_ID_COLUMN, skuId); + queryWrapper.in("promotion_type", promotionTypes); + queryWrapper.and(PromotionTools.queryPromotionStatus(PromotionsStatusEnum.START)); + return this.getOne(queryWrapper, false); } + /** + * 获取当前有效时间特定促销类型的促销商品价格 + * + * @param skuId skuId + * @param promotionTypes 特定促销类型 + * @return 促销商品价格 + */ + @Override + public Double getValidPromotionsGoodsPrice(String skuId, List promotionTypes) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq(SKU_ID_COLUMN, skuId); + queryWrapper.in("promotion_type", promotionTypes); + queryWrapper.and(PromotionTools.queryPromotionStatus(PromotionsStatusEnum.START)); + return this.baseMapper.selectPromotionsGoodsPrice(queryWrapper); + } @Override public Integer findInnerOverlapPromotionGoods(String promotionType, String skuId, Date startTime, Date endTime, String promotionId) { @@ -249,7 +168,11 @@ public class PromotionGoodsServiceImpl extends ServiceImpl getPromotionGoodsStock(PromotionTypeEnum typeEnum, String promotionId, List skuId) { + PromotionGoodsSearchParams searchParams = new PromotionGoodsSearchParams(); + searchParams.setPromotionType(typeEnum.name()); + searchParams.setPromotionId(promotionId); + searchParams.setSkuIds(skuId); //获取促销商品,如果不存在促销商品,则返回0 - List promotionGoods = this.getPromotionGoods(typeEnum, promotionId, skuId); + List promotionGoods = this.listFindAll(searchParams); //接收数据 List result = new ArrayList<>(skuId.size()); for (String sid : skuId) { @@ -281,37 +208,6 @@ public class PromotionGoodsServiceImpl extends ServiceImpl queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(PromotionGoods::getPromotionType, typeEnum.name()).eq(PromotionGoods::getPromotionId, promotionId).eq(PromotionGoods::getSkuId, skuId); - return this.getOne(queryWrapper); - } - - /** - * 根据条件获取促销活动商品详情 - * - * @param typeEnum 促销类型 - * @param promotionId 促销活动id - * @param skuId 商品skuId - * @return 促销活动商品详情 - */ - @Override - public List getPromotionGoods(PromotionTypeEnum typeEnum, String promotionId, List skuId) { - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(PromotionGoods::getPromotionType, typeEnum.name()).eq(PromotionGoods::getPromotionId, promotionId) - .in(PromotionGoods::getSkuId, skuId); - return this.list(queryWrapper); - } - /** * 更新促销活动商品库存 * @@ -324,25 +220,14 @@ public class PromotionGoodsServiceImpl extends ServiceImpl queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(SeckillApply::getSeckillId, promotionId).eq(SeckillApply::getSkuId, skuId); - SeckillApply seckillApply = seckillApplyService.getOne(queryWrapper); + SeckillSearchParams searchParams = new SeckillSearchParams(); + searchParams.setSeckillId(promotionId); + searchParams.setSkuId(skuId); + SeckillApply seckillApply = this.seckillApplyService.getSeckillApply(searchParams); if (seckillApply == null) { throw new ServiceException(ResultCode.SECKILL_NOT_EXIST_ERROR); } - LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); - updateWrapper.eq(SeckillApply::getSeckillId, promotionId).eq(SeckillApply::getSkuId, skuId); - updateWrapper.set(SeckillApply::getQuantity, quantity); - seckillApplyService.update(updateWrapper); - SeckillVO seckillVO = mongoTemplate.findById(promotionId, SeckillVO.class); - if (seckillVO != null && seckillApply.getPromotionApplyStatus() != null) { - for (SeckillApply apply : seckillVO.getSeckillApplyList()) { - if (apply.getSkuId().equals(skuId)) { - apply.setQuantity(quantity); - } - } - this.mongoTemplate.save(seckillVO); - } + seckillApplyService.updateSeckillApplyQuantity(promotionId, skuId, quantity); } else { LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); updateWrapper.eq(PromotionGoods::getPromotionType, typeEnum.name()).eq(PromotionGoods::getPromotionId, promotionId).eq(PromotionGoods::getSkuId, skuId); @@ -353,80 +238,52 @@ public class PromotionGoodsServiceImpl extends ServiceImpl promotionGoodsPage, List fullDiscountVOS, PageVO pageVo) { - List promotionGoodsDTOList = new ArrayList<>(); - int total = 0; - for (FullDiscountVO fullDiscountVO : fullDiscountVOS) { - if (fullDiscountVO != null && fullDiscountVO.getPromotionGoodsList() == null) { - IPage page = this.getAllGoodsSkuToPromotionGoodsByPage(fullDiscountVO.getStoreId(), fullDiscountVO, pageVo); - promotionGoodsDTOList.addAll(page.getRecords()); - total += page.getTotal(); - } - } - if (!fullDiscountVOS.isEmpty() && !promotionGoodsDTOList.isEmpty()) { - promotionGoodsPage.setRecords(promotionGoodsDTOList.subList(0, pageVo.getPageSize())); - promotionGoodsPage.setTotal(total); - } + /** + * 更新促销活动商品库存 + * + * @param promotionGoods 促销信息 + */ + @Override + public void updatePromotionGoodsByPromotions(PromotionGoods promotionGoods) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(PromotionGoods::getPromotionId, promotionGoods.getPromotionId()); + this.remove(queryWrapper); + this.save(promotionGoods); } - private IPage getGoodsSkuToPromotionGoodsByPage(String promotionType, PageVO pageVo) { - Date date = new Date(); - IPage promotionGoodsPage = new Page<>(); - LambdaQueryWrapper queryChainWrapper = new LambdaQueryWrapper() - .eq(PromotionGoods::getPromotionType, PromotionTypeEnum.valueOf(promotionType).name()) - .le(PromotionGoods::getStartTime, date).ge(PromotionGoods::getEndTime, date); - List promotionGoodsList = new ArrayList<>(); - Page page = this.page(PageUtil.initPage(pageVo), queryChainWrapper); - promotionGoodsPage.setTotal(page.getTotal()); - promotionGoodsPage.setPages(page.getPages()); - List records = page.getRecords(); - for (PromotionGoods promotionGoods : records) { - PromotionGoodsDTO promotionGoodsDTO = this.wrapperPromotionGoodsDTO(promotionGoods); - promotionGoodsList.add(promotionGoodsDTO); - } - promotionGoodsPage.setRecords(promotionGoodsList); - return promotionGoodsPage; + /** + * 删除促销商品 + * + * @param promotionId 促销活动id + * @param skuIds skuId + */ + @Override + public void deletePromotionGoods(String promotionId, List skuIds) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper() + .eq(PromotionGoods::getPromotionId, promotionId).in(PromotionGoods::getSkuId, skuIds); + this.remove(queryWrapper); } - private PromotionGoodsDTO wrapperPromotionGoodsDTO(PromotionGoods promotionGoods) { - PromotionGoodsDTO promotionGoodsDTO = new PromotionGoodsDTO(); - GoodsSku goodsSku = goodsSkuService.getById(promotionGoods.getSkuId()); - BeanUtil.copyProperties(promotionGoods, promotionGoodsDTO); - if (goodsSku != null) { - promotionGoodsDTO.setGoodsId(goodsSku.getGoodsId()); - promotionGoodsDTO.setGoodsImage(goodsSku.getThumbnail()); - promotionGoodsDTO.setGoodsName(goodsSku.getGoodsName()); - promotionGoodsDTO.setOriginPrice(goodsSku.getPrice()); - } - return promotionGoodsDTO; + /** + * 删除促销促销商品 + * + * @param promotionIds 促销活动id + */ + @Override + public void deletePromotionGoods(List promotionIds) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper() + .in(PromotionGoods::getPromotionId, promotionIds); + this.remove(queryWrapper); } - private IPage getAllGoodsSkuToPromotionGoodsByPage(String storeId, BasePromotion promotion, PageVO pageVo) { - IPage promotionGoodsPage = new Page<>(); - List promotionGoodsList = new ArrayList<>(); - GoodsSearchParams searchParams = new GoodsSearchParams(); - searchParams.setStoreId(storeId); - searchParams.setMarketEnable(GoodsStatusEnum.UPPER.name()); - searchParams.setIsAuth(GoodsAuthEnum.PASS.name()); - searchParams.setPageNumber(pageVo.getPageNumber()); - searchParams.setPageSize(pageVo.getPageSize()); - searchParams.setSort(pageVo.getSort()); - searchParams.setOrder(pageVo.getOrder()); - IPage goodsSkuByPage = goodsSkuService.getGoodsSkuByPage(searchParams); - //将查询到的商品sku转换为促销商品 - for (GoodsSku goodsSku : goodsSkuByPage.getRecords()) { - PromotionGoodsDTO promotionGoods = new PromotionGoodsDTO(goodsSku); - promotionGoods.setGoodsImage(goodsSku.getThumbnail()); - promotionGoods.setStartTime(promotion.getStartTime()); - promotionGoods.setEndTime(promotion.getEndTime()); - promotionGoods.setTitle(promotion.getPromotionName()); - promotionGoodsList.add(promotionGoods); - } - promotionGoodsPage.setSize(goodsSkuByPage.getSize()); - promotionGoodsPage.setTotal(goodsSkuByPage.getTotal()); - promotionGoodsPage.setPages(goodsSkuByPage.getPages()); - promotionGoodsPage.setRecords(promotionGoodsList); - return promotionGoodsPage; + /** + * 根据参数删除促销商品 + * + * @param searchParams 查询参数 + */ + @Override + public void deletePromotionGoods(PromotionGoodsSearchParams searchParams) { + this.remove(searchParams.queryWrapper()); } } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PromotionServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PromotionServiceImpl.java index 46ce984e..2afd8593 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PromotionServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PromotionServiceImpl.java @@ -1,37 +1,23 @@ package cn.lili.modules.promotion.serviceimpl; -import cn.hutool.core.date.DateTime; -import cn.hutool.core.date.DateUtil; -import cn.hutool.core.util.ObjectUtil; -import cn.hutool.json.JSONUtil; import cn.lili.common.enums.PromotionTypeEnum; -import cn.lili.common.enums.ResultCode; -import cn.lili.common.exception.ServiceException; -import cn.lili.modules.order.cart.entity.vo.FullDiscountVO; import cn.lili.modules.promotion.entity.dos.*; -import cn.lili.modules.promotion.entity.dto.KanjiaActivityGoodsDTO; -import cn.lili.modules.promotion.entity.enums.*; -import cn.lili.modules.promotion.entity.vos.CouponVO; -import cn.lili.modules.promotion.entity.vos.PintuanVO; -import cn.lili.modules.promotion.entity.vos.PointsGoodsVO; -import cn.lili.modules.promotion.entity.vos.SeckillVO; +import cn.lili.modules.promotion.entity.dto.search.FullDiscountSearchParams; +import cn.lili.modules.promotion.entity.dto.search.PintuanSearchParams; +import cn.lili.modules.promotion.entity.dto.search.SeckillSearchParams; +import cn.lili.modules.promotion.entity.enums.PromotionsStatusEnum; import cn.lili.modules.promotion.service.*; +import cn.lili.modules.promotion.tools.PromotionTools; import cn.lili.modules.search.entity.dos.EsGoodsIndex; -import cn.lili.modules.search.service.EsGoodsIndexService; -import cn.lili.trigger.message.PromotionMessage; -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 com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.mongodb.core.MongoTemplate; -import org.springframework.data.mongodb.core.query.Criteria; -import org.springframework.data.mongodb.core.query.Query; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.*; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; /** * 促销业务层实现 @@ -43,11 +29,6 @@ import java.util.*; @Service @Transactional(rollbackFor = Exception.class) public class PromotionServiceImpl implements PromotionService { - /** - * 会员优惠券 - */ - @Autowired - private MemberCouponService memberCouponService; /** * 秒杀 */ @@ -83,67 +64,8 @@ public class PromotionServiceImpl implements PromotionService { */ @Autowired private PointsGoodsService pointsGoodsService; - /** - * 优惠券活动 - */ - @Autowired - private CouponActivityService couponActivityService; - /** - * ES商品 - */ - @Autowired - private EsGoodsIndexService goodsIndexService; - /** - * Mongo - */ - @Autowired - private MongoTemplate mongoTemplate; - @Autowired - private KanjiaActivityGoodsService kanJiaActivityGoodsService; - @Override - public boolean updatePromotionStatus(PromotionMessage promotionMessage) { - PromotionTypeEnum promotionTypeEnum = PromotionTypeEnum.valueOf(promotionMessage.getPromotionType()); - String esPromotionKey = promotionTypeEnum + "-" + promotionMessage.getPromotionId(); - log.info("更新促销活动状态:{}", promotionMessage); - boolean result = false; - switch (promotionTypeEnum) { - //满减 - case FULL_DISCOUNT: - result = this.updateFullDiscount(promotionMessage, esPromotionKey, promotionTypeEnum); - break; - //秒杀 - case SECKILL: - result = this.updateSeckill(promotionMessage, promotionTypeEnum); - break; - //拼团 - case PINTUAN: - result = this.updatePintuan(promotionMessage, esPromotionKey, promotionTypeEnum); - break; - //优惠券 - case COUPON: - result = this.updateCoupon(promotionMessage, esPromotionKey, promotionTypeEnum); - break; - //积分商品 - case POINTS_GOODS: - result = this.updatePointsGoods(promotionMessage, promotionTypeEnum); - break; - //砍价商品商品 - case KANJIA: - result = this.updateKanjiaGoods(promotionMessage, promotionTypeEnum); - break; - //优惠券活动 - case COUPON_ACTIVITY: - result = this.updateCouponActivity(promotionMessage, promotionTypeEnum); - break; - default: - break; - } - this.updatePromotionGoods(promotionMessage.getPromotionId(), promotionMessage.getPromotionStatus()); - return result; - } - /** * 获取当前进行的所有促销活动信息 * @@ -152,26 +74,29 @@ public class PromotionServiceImpl implements PromotionService { @Override public Map getCurrentPromotion() { Map resultMap = new HashMap<>(16); - QueryWrapper queryWrapper = new QueryWrapper(); - queryWrapper.eq("promotion_status", PromotionStatusEnum.START.name()); - queryWrapper.ge("start_time", new Date()); - queryWrapper.le("end_time", new Date()); + + SeckillSearchParams seckillSearchParams = new SeckillSearchParams(); + seckillSearchParams.setPromotionStatus(PromotionsStatusEnum.START.name()); //获取当前进行的秒杀活动活动 - List seckillList = seckillService.list(queryWrapper); + List seckillList = seckillService.listFindAll(seckillSearchParams); if (seckillList != null && !seckillList.isEmpty()) { for (Seckill seckill : seckillList) { resultMap.put(PromotionTypeEnum.SECKILL.name(), seckill); } } + FullDiscountSearchParams fullDiscountSearchParams = new FullDiscountSearchParams(); + fullDiscountSearchParams.setPromotionStatus(PromotionsStatusEnum.START.name()); //获取当前进行的满优惠活动 - List fullDiscountList = fullDiscountService.list(queryWrapper); + List fullDiscountList = fullDiscountService.listFindAll(fullDiscountSearchParams); if (fullDiscountList != null && !fullDiscountList.isEmpty()) { for (FullDiscount fullDiscount : fullDiscountList) { resultMap.put(PromotionTypeEnum.FULL_DISCOUNT.name(), fullDiscount); } } + PintuanSearchParams pintuanSearchParams = new PintuanSearchParams(); + pintuanSearchParams.setPromotionStatus(PromotionsStatusEnum.START.name()); //获取当前进行的拼团活动 - List pintuanList = pintuanService.list(queryWrapper); + List pintuanList = pintuanService.listFindAll(pintuanSearchParams); if (pintuanList != null && !pintuanList.isEmpty()) { for (Pintuan pintuan : pintuanList) { resultMap.put(PromotionTypeEnum.PINTUAN.name(), pintuan); @@ -187,36 +112,10 @@ public class PromotionServiceImpl implements PromotionService { * @return 当前促销活动集合 */ @Override - public Map getGoodsCurrentPromotionMap(EsGoodsIndex index) { - Map promotionMap = new HashMap<>(16); - Query query = new Query(); - query.addCriteria(Criteria.where("deleteFlag").is(false)); - query.addCriteria(Criteria.where("promotionStatus").is(PromotionStatusEnum.START.name())); - query.addCriteria(Criteria.where("endTime").gte(new Date())); - List fullDiscountVOS = mongoTemplate.find(query, FullDiscountVO.class); - for (FullDiscountVO fullDiscountVO : fullDiscountVOS) { - if (fullDiscountVO.getPromotionGoodsList() == null) { - if (index.getStoreId().equals(fullDiscountVO.getStoreId())) { - String fullDiscountKey = PromotionTypeEnum.FULL_DISCOUNT.name() + "-" + fullDiscountVO.getId(); - promotionMap.put(fullDiscountKey, fullDiscountVO); - } - } - } - List couponVOS = mongoTemplate.find(query, CouponVO.class); - for (CouponVO couponVO : couponVOS) { - if (couponVO.getPromotionGoodsList() == null && couponVO.getScopeType().equals(CouponScopeTypeEnum.ALL.name())) { - if (("platform").equals(couponVO.getStoreId()) || index.getStoreId().equals(couponVO.getStoreId())) { - String couponKey = PromotionTypeEnum.COUPON.name() + "-" + couponVO.getId(); - promotionMap.put(couponKey, couponVO); - } - } - } - LambdaQueryWrapper promotionGoodsQuery = new LambdaQueryWrapper<>(); - promotionGoodsQuery.eq(PromotionGoods::getDeleteFlag, false); - promotionGoodsQuery.eq(PromotionGoods::getPromotionStatus, PromotionStatusEnum.START.name()); - promotionGoodsQuery.ge(PromotionGoods::getEndTime, new Date()); - promotionGoodsQuery.eq(PromotionGoods::getSkuId, index.getId()); - List promotionGoodsList = promotionGoodsService.list(promotionGoodsQuery); + public Map getGoodsPromotionMap(EsGoodsIndex index) { + String storeIds = index.getStoreId() + "," + PromotionTools.PLATFORM_ID; + Map promotionMap = new HashMap<>(); + List promotionGoodsList = promotionGoodsService.findSkuValidPromotion(index.getId(), storeIds); for (PromotionGoods promotionGoods : promotionGoodsList) { String esPromotionKey = promotionGoods.getPromotionType() + "-" + promotionGoods.getPromotionId(); switch (PromotionTypeEnum.valueOf(promotionGoods.getPromotionType())) { @@ -227,32 +126,13 @@ public class PromotionServiceImpl implements PromotionService { case PINTUAN: Pintuan pintuan = pintuanService.getById(promotionGoods.getPromotionId()); promotionMap.put(esPromotionKey, pintuan); - index.setPromotionPrice(promotionGoods.getPrice()); break; case FULL_DISCOUNT: FullDiscount fullDiscount = fullDiscountService.getById(promotionGoods.getPromotionId()); promotionMap.put(esPromotionKey, fullDiscount); break; case SECKILL: - Seckill seckill = seckillService.getById(promotionGoods.getPromotionId()); - LambdaQueryWrapper seckillApplyLambdaQueryWrapper = new LambdaQueryWrapper<>(); - seckillApplyLambdaQueryWrapper.eq(SeckillApply::getSeckillId, promotionGoods.getPromotionId()); - seckillApplyLambdaQueryWrapper.eq(SeckillApply::getSkuId, promotionGoods.getSkuId()); - SeckillApply seckillApply = seckillApplyService.getOne(seckillApplyLambdaQueryWrapper); - int nextHour = 23; - String[] split = seckill.getHours().split(","); - int[] hoursSored = Arrays.stream(split).mapToInt(Integer::parseInt).toArray(); - Arrays.sort(hoursSored); - for (int i : hoursSored) { - if (seckillApply.getTimeLine() < i) { - nextHour = i; - } - } - String seckillKey = promotionGoods.getPromotionType() + "-" + nextHour; - seckill.setStartTime(promotionGoods.getStartTime()); - seckill.setEndTime(promotionGoods.getEndTime()); - promotionMap.put(seckillKey, seckill); - index.setPromotionPrice(promotionGoods.getPrice()); + this.getGoodsCurrentSeckill(promotionGoods, promotionMap, index); break; case POINTS_GOODS: PointsGoods pointsGoods = pointsGoodsService.getById(promotionGoods.getPromotionId()); @@ -265,277 +145,30 @@ public class PromotionServiceImpl implements PromotionService { return promotionMap; } - /** - * 修改满额活动状态 - * - * @param promotionMessage 信息队列传输促销信息实体 - * @param esPromotionKey es Key - * @param promotionTypeEnum 促销分类枚举 - * @return 修改结果 - */ - private boolean updateFullDiscount(PromotionMessage promotionMessage, String esPromotionKey, PromotionTypeEnum promotionTypeEnum) { - boolean result; - //从mongo中获取促销备份 - FullDiscountVO fullDiscountVO = mongoTemplate.findById(promotionMessage.getPromotionId(), FullDiscountVO.class); - if (fullDiscountVO == null) { - this.throwPromotionException(promotionTypeEnum, promotionMessage.getPromotionId(), promotionMessage.getPromotionStatus()); - return false; - } - //写入促销状态 - fullDiscountVO.setPromotionStatus(promotionMessage.getPromotionStatus()); - //修改促销数据 - result = this.fullDiscountService.update(updateWrapper(promotionMessage)); - //clone一个活动信息,用于存放与索引中 - FullDiscountVO clone = ObjectUtil.clone(fullDiscountVO); - clone.setPromotionGoodsList(null); - if (fullDiscountVO.getPromotionGoodsList() == null) { - //如果为全品类则更新全部索引 - this.goodsIndexService.updateEsGoodsIndexAllByList(clone, esPromotionKey); - } else { - //如不为全品类,更新指定索引 - for (PromotionGoods promotionGoods : fullDiscountVO.getPromotionGoodsList()) { - promotionGoods.setPromotionStatus(promotionMessage.getPromotionStatus()); - } - this.promotionGoodsService.updateBatchById(fullDiscountVO.getPromotionGoodsList()); - this.goodsIndexService.updateEsGoodsIndexByList(fullDiscountVO.getPromotionGoodsList(), clone, esPromotionKey); - } - this.mongoTemplate.save(fullDiscountVO); - return result; - } - /** - * 修改优惠券状态 - * - * @param promotionMessage 信息队列传输促销信息实体 - * @param esPromotionKey es Key - * @param promotionTypeEnum 促销分类枚举 - * @return 修改结果 - */ - private boolean updateCoupon(PromotionMessage promotionMessage, String esPromotionKey, PromotionTypeEnum promotionTypeEnum) { - boolean result; - //从mongo中获取优惠券信息 - CouponVO couponVO = this.mongoTemplate.findById(promotionMessage.getPromotionId(), CouponVO.class); - if (couponVO == null) { - this.throwPromotionException(promotionTypeEnum, promotionMessage.getPromotionId(), promotionMessage.getPromotionStatus()); - return false; - } - //修改优惠券 - couponVO.setPromotionStatus(promotionMessage.getPromotionStatus()); - result = this.couponService.update(updateWrapper(promotionMessage)); - //优惠券活动结束,会员已领取未使用的优惠券状态修改为:已过期 - if (couponVO.getPromotionStatus().equals(PromotionStatusEnum.END)) { - LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper() - .eq(MemberCoupon::getCouponId, couponVO.getId()) - .eq(MemberCoupon::getMemberCouponStatus, MemberCouponStatusEnum.NEW.name()) - .set(MemberCoupon::getMemberCouponStatus, MemberCouponStatusEnum.EXPIRE.name()); - this.memberCouponService.update(updateWrapper); - } - //clone一个活动信息,用于存放与索引中 - CouponVO clone = ObjectUtil.clone(couponVO); - clone.setPromotionGoodsList(null); - if (CouponScopeTypeEnum.PORTION_GOODS.name().equals(couponVO.getScopeType())) { - //如为部分商品,则更新部分商品索引 - this.promotionGoodsService.updateBatchById(couponVO.getPromotionGoodsList()); - this.goodsIndexService.updateEsGoodsIndexByList(couponVO.getPromotionGoodsList(), clone, esPromotionKey); - } else if (CouponScopeTypeEnum.ALL.name().equals(couponVO.getScopeType())) { - //如为全部,则更新全部商品索引 - this.goodsIndexService.updateEsGoodsIndexAllByList(clone, esPromotionKey); - } - this.mongoTemplate.save(couponVO); - return result; - } - - /** - * 修改拼团状态 - * - * @param promotionMessage 信息队列传输促销信息实体 - * @param esPromotionKey es Key - * @param promotionTypeEnum 促销分类枚举 - * @return 修改结果 - */ - private boolean updatePintuan(PromotionMessage promotionMessage, String esPromotionKey, PromotionTypeEnum promotionTypeEnum) { - boolean result; - PintuanVO pintuanVO = this.mongoTemplate.findById(promotionMessage.getPromotionId(), PintuanVO.class); - if (pintuanVO == null) { - this.throwPromotionException(promotionTypeEnum, promotionMessage.getPromotionId(), promotionMessage.getPromotionStatus()); - return false; - } - pintuanVO.setPromotionStatus(promotionMessage.getPromotionStatus()); - result = this.pintuanService.update(updateWrapper(promotionMessage)); - this.promotionGoodsService.updateBatchById(pintuanVO.getPromotionGoodsList()); - if (pintuanVO.getPromotionGoodsList() != null) { - List promotionGoodsList = pintuanVO.getPromotionGoodsList(); - //更新促销商品索引 - for (PromotionGoods promotionGoods : promotionGoodsList) { - Pintuan pintuan1 = JSONUtil.toBean(JSONUtil.toJsonStr(pintuanVO), Pintuan.class); - this.goodsIndexService.updateEsGoodsIndex(promotionGoods.getSkuId(), pintuan1, esPromotionKey, promotionGoods.getPrice()); - } - } - this.mongoTemplate.save(pintuanVO); - return result; - - - } - - /** - * 修改秒杀状态 - * - * @param promotionMessage 信息队列传输促销信息实体 - * @param promotionTypeEnum 促销分类枚举 - * @return 修改结果 - */ - private boolean updateSeckill(PromotionMessage promotionMessage, PromotionTypeEnum promotionTypeEnum) { - boolean result; - SeckillVO seckill = this.mongoTemplate.findById(promotionMessage.getPromotionId(), SeckillVO.class); - if (seckill == null) { - this.throwPromotionException(promotionTypeEnum, promotionMessage.getPromotionId(), promotionMessage.getPromotionStatus()); - return false; - } - if (seckill.getEndTime() == null) { - seckill.setEndTime(DateUtil.endOfDay(seckill.getStartTime())); - } - //修改活动状态 - seckill.setPromotionStatus(promotionMessage.getPromotionStatus()); - result = this.seckillService.update(updateWrapper(promotionMessage)); - log.info("更新限时抢购活动状态:{}", seckill); - - //判断参与活动的商品是否为空 - if (seckill.getSeckillApplyList() != null && !seckill.getSeckillApplyList().isEmpty()) { - //循环秒杀商品数据,将数据按照时间段进行存储 - for (SeckillApply seckillApply : seckill.getSeckillApplyList()) { - if (seckillApply.getPromotionApplyStatus().equals(PromotionApplyStatusEnum.PASS.name())) { - //下一个时间,默认为当天结束时间 - int nextHour = 23; - String[] split = seckill.getHours().split(","); - int[] hoursSored = Arrays.stream(split).mapToInt(Integer::parseInt).toArray(); - //排序时间段 - Arrays.sort(hoursSored); - for (int i : hoursSored) { - //如果当前时间段大于排序后的时间段的某个,当前时间段的下个时间段即为排序后的时间段的某个 - if (seckillApply.getTimeLine() < i) { - nextHour = i; - break; - } - } - Seckill seckill1 = JSONUtil.toBean(JSONUtil.toJsonStr(seckill), Seckill.class); - String format = DateUtil.format(seckill.getStartTime(), cn.lili.common.utils.DateUtil.STANDARD_DATE_FORMAT); - DateTime parseStartTime = DateUtil.parse((format + " " + seckillApply.getTimeLine()), "yyyy-MM-dd HH"); - DateTime parseEndTime = DateUtil.parse((format + " " + nextHour), "yyyy-MM-dd HH"); - //如果是当天最后的时间段则设置到当天结束时间的59分59秒 - if (nextHour == seckillApply.getTimeLine()) { - parseEndTime = DateUtil.parse((format + " " + nextHour + ":59:59"), cn.lili.common.utils.DateUtil.STANDARD_FORMAT); - } - seckill1.setStartTime(parseStartTime); - //当时商品的秒杀活动活动结束时间为下个时间段的开始 - seckill1.setEndTime(parseEndTime); - log.info("更新限时抢购商品状态:{}", seckill1); - this.goodsIndexService.updateEsGoodsIndex(seckillApply.getSkuId(), seckill1, promotionTypeEnum.name() + "-" + seckillApply.getTimeLine(), seckillApply.getPrice()); + private void getGoodsCurrentSeckill(PromotionGoods promotionGoods, Map promotionMap, EsGoodsIndex index) { + Seckill seckill = seckillService.getById(promotionGoods.getPromotionId()); + SeckillSearchParams searchParams = new SeckillSearchParams(); + searchParams.setSeckillId(promotionGoods.getPromotionId()); + searchParams.setSkuId(promotionGoods.getSkuId()); + List seckillApplyList = seckillApplyService.getSeckillApplyList(searchParams); + if (seckillApplyList != null && !seckillApplyList.isEmpty()) { + SeckillApply seckillApply = seckillApplyList.get(0); + int nextHour = 23; + String[] split = seckill.getHours().split(","); + int[] hoursSored = Arrays.stream(split).mapToInt(Integer::parseInt).toArray(); + Arrays.sort(hoursSored); + for (int i : hoursSored) { + if (seckillApply.getTimeLine() < i) { + nextHour = i; } } + String seckillKey = promotionGoods.getPromotionType() + "-" + nextHour; + seckill.setStartTime(promotionGoods.getStartTime()); + seckill.setEndTime(promotionGoods.getEndTime()); + promotionMap.put(seckillKey, seckill); } - this.mongoTemplate.save(seckill); - return result; } - /** - * 修改积分商品状态 - * - * @param promotionMessage 信息队列传输促销信息实体 - * @param promotionTypeEnum 促销分类枚举 - * @return 修改结果 - */ - private boolean updatePointsGoods(PromotionMessage promotionMessage, PromotionTypeEnum promotionTypeEnum) { - boolean result; - PointsGoodsVO pointsGoodsVO = this.mongoTemplate.findById(promotionMessage.getPromotionId(), PointsGoodsVO.class); - if (pointsGoodsVO == null) { - this.throwPromotionException(promotionTypeEnum, promotionMessage.getPromotionId(), promotionMessage.getPromotionStatus()); - return false; - } - pointsGoodsVO.setPromotionStatus(promotionMessage.getPromotionStatus()); - result = this.pointsGoodsService.update(updateWrapper(promotionMessage)); - this.mongoTemplate.save(pointsGoodsVO); - return result; - } - - /** - * 修改砍价商品状态 - * - * @param promotionMessage 信息队列传输促销信息实体 - * @param promotionTypeEnum 促销分类枚举 - * @return 修改结果 - */ - private boolean updateKanjiaGoods(PromotionMessage promotionMessage, PromotionTypeEnum promotionTypeEnum) { - KanjiaActivityGoodsDTO kanJiaActivityGoodsDTO = this.mongoTemplate.findById(promotionMessage.getPromotionId(), KanjiaActivityGoodsDTO.class); - if (kanJiaActivityGoodsDTO == null) { - this.throwPromotionException(promotionTypeEnum, promotionMessage.getPromotionId(), promotionMessage.getPromotionStatus()); - return false; - } - kanJiaActivityGoodsDTO.setPromotionStatus(promotionMessage.getPromotionStatus()); - boolean result = this.kanJiaActivityGoodsService.updateById(kanJiaActivityGoodsDTO); - if (result) { - this.mongoTemplate.save(kanJiaActivityGoodsDTO); - } - return result; - } - - /** - * 修改优惠券活动状态 - * - * @param promotionMessage 信息队列传输促销信息实体 - * @param promotionTypeEnum 促销分类枚举 - * @return 修改结果 - */ - private boolean updateCouponActivity(PromotionMessage promotionMessage, PromotionTypeEnum promotionTypeEnum) { - - //如果是精准发券,进行发送优惠券 - CouponActivity couponActivity = couponActivityService.getById(promotionMessage.getPromotionId()); - if (couponActivity.getCouponActivityType().equals(CouponActivityTypeEnum.SPECIFY.name())) { - couponActivityService.specify(couponActivity.getId()); - } - - //修改活动状态 - return couponActivityService.update(new LambdaUpdateWrapper() - .eq(CouponActivity::getId, promotionMessage.getPromotionId()) - .set(CouponActivity::getPromotionStatus, promotionMessage.getPromotionStatus())); - } - - /** - * 更新促销商品信息 - * - * @param promotionId 促销活动ID - * @param promotionStatus 活动状态 - */ - private void updatePromotionGoods(String promotionId, String promotionStatus) { - LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); - updateWrapper.eq(PromotionGoods::getPromotionId, promotionId).set(PromotionGoods::getPromotionStatus, promotionStatus); - this.promotionGoodsService.update(updateWrapper); - } - - - /** - * 抛出促销异常 - * - * @param type 促销类型 - * @param id 促销编号 - * @param status 促销状态 - */ - private void throwPromotionException(PromotionTypeEnum type, String id, String status) { - log.error("当前" + type.name() + "活动ID为[" + id + "] 不存在,更改活动状态至[ " + status + " ]失败!"); - throw new ServiceException(ResultCode.PROMOTION_STATUS_END); - } - - - /** - * 根据消息,获取update wrapper - * - * @param - * @return - */ - private UpdateWrapper updateWrapper(PromotionMessage promotionMessage) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("id", promotionMessage.getPromotionId()); - updateWrapper.set("promotion_status", PromotionStatusEnum.valueOf(promotionMessage.getPromotionStatus())); - return updateWrapper; - } } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/SeckillApplyServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/SeckillApplyServiceImpl.java index 4142251e..c8df9dbb 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/SeckillApplyServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/SeckillApplyServiceImpl.java @@ -1,38 +1,39 @@ package cn.lili.modules.promotion.serviceimpl; import cn.hutool.core.bean.BeanUtil; -import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.convert.Convert; +import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; -import cn.hutool.core.text.CharSequenceUtil; import cn.lili.cache.Cache; +import cn.lili.cache.CachePrefix; import cn.lili.common.enums.PromotionTypeEnum; import cn.lili.common.enums.ResultCode; import cn.lili.common.exception.ServiceException; import cn.lili.common.vo.PageVO; import cn.lili.modules.goods.entity.dos.GoodsSku; import cn.lili.modules.goods.service.GoodsSkuService; +import cn.lili.modules.promotion.entity.dos.BasePromotions; import cn.lili.modules.promotion.entity.dos.PromotionGoods; import cn.lili.modules.promotion.entity.dos.Seckill; import cn.lili.modules.promotion.entity.dos.SeckillApply; -import cn.lili.modules.promotion.entity.enums.PromotionApplyStatusEnum; -import cn.lili.modules.promotion.entity.enums.PromotionStatusEnum; -import cn.lili.modules.promotion.entity.vos.*; +import cn.lili.modules.promotion.entity.dto.search.PromotionGoodsSearchParams; +import cn.lili.modules.promotion.entity.dto.search.SeckillSearchParams; +import cn.lili.modules.promotion.entity.enums.PromotionsApplyStatusEnum; +import cn.lili.modules.promotion.entity.vos.SeckillApplyVO; +import cn.lili.modules.promotion.entity.vos.SeckillGoodsVO; +import cn.lili.modules.promotion.entity.vos.SeckillTimelineVO; import cn.lili.modules.promotion.mapper.SeckillApplyMapper; import cn.lili.modules.promotion.service.PromotionGoodsService; import cn.lili.modules.promotion.service.SeckillApplyService; import cn.lili.modules.promotion.service.SeckillService; -import cn.lili.modules.promotion.tools.PromotionCacheKeys; import cn.lili.modules.promotion.tools.PromotionTools; -import cn.lili.modules.search.service.EsGoodsIndexService; +import cn.lili.mybatis.util.PageUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.mongodb.core.MongoTemplate; -import org.springframework.data.mongodb.core.query.Query; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -48,6 +49,7 @@ import java.util.stream.Collectors; */ @Service @Transactional(rollbackFor = Exception.class) +@Slf4j public class SeckillApplyServiceImpl extends ServiceImpl implements SeckillApplyService { /** @@ -55,11 +57,6 @@ public class SeckillApplyServiceImpl extends ServiceImpl cache; - /** - * Mongo - */ - @Autowired - private MongoTemplate mongoTemplate; /** * 规格商品 */ @@ -75,138 +72,131 @@ public class SeckillApplyServiceImpl extends ServiceImpl getSeckillTimeline() { - List timelineVoS = new ArrayList<>(); //秒杀活动缓存key - String seckillCacheKey = PromotionCacheKeys.getSeckillTimelineKey(DateUtil.format(DateUtil.beginOfDay(new DateTime()), "yyyyMMdd")); - Map cacheSeckill = cache.getHash(seckillCacheKey); - if (cacheSeckill == null || cacheSeckill.isEmpty()) { - //如缓存中不存在,则单独获取 - try { - timelineVoS = getSeckillTimelineToCache(seckillCacheKey); - } catch (Exception e) { - log.error("获取秒杀活动信息发生错误!", e); - } - } else { - //如缓存中存在,则取缓存中转为展示的信息 - for (Object value : cacheSeckill.values()) { - SeckillTimelineVO seckillTimelineVO = (SeckillTimelineVO) value; - timelineVoS.add(seckillTimelineVO); - } - } - return timelineVoS; + return getSeckillTimelineInfo(); } @Override public List getSeckillGoods(Integer timeline) { List seckillGoodsVoS = new ArrayList<>(); - //秒杀活动缓存key - String seckillCacheKey = PromotionCacheKeys.getSeckillTimelineKey(DateUtil.format(DateUtil.beginOfDay(new DateTime()), "yyyyMMdd")); - Map cacheSeckill = cache.getHash(seckillCacheKey); - if (cacheSeckill == null || cacheSeckill.isEmpty()) { - //如缓存中不存在,则单独获取 - seckillGoodsVoS = wrapperSeckillGoods(timeline); - } else { - //如缓存中存在,则取缓存中转为展示的信息 - for (Map.Entry entry : cacheSeckill.entrySet()) { - Integer timelineKey = Convert.toInt(entry.getKey().toString()); - if (timelineKey.equals(timeline)) { - seckillGoodsVoS = (List) entry.getValue(); - } - } + //获取 + List seckillTimelineToCache = getSeckillTimelineInfo(); + Optional first = seckillTimelineToCache.stream().filter(i -> i.getTimeLine().equals(timeline)).findFirst(); + if (first.isPresent()) { + seckillGoodsVoS = first.get().getSeckillGoodsList(); } return seckillGoodsVoS; } @Override - public IPage getSeckillApplyFromMongo(SeckillSearchParams queryParam, PageVO pageVo) { - IPage seckillApplyPage = new Page<>(); - Query query = queryParam.mongoQuery(); + public IPage getSeckillApplyPage(SeckillSearchParams queryParam, PageVO pageVo) { + IPage seckillApplyPage = this.page(PageUtil.initPage(pageVo), queryParam.queryWrapper()); + if (seckillApplyPage != null && !seckillApplyPage.getRecords().isEmpty()) { - SeckillVO seckillVO = this.mongoTemplate.findOne(query, SeckillVO.class); - if (seckillVO != null && pageVo != null) { - seckillApplyPage.setCurrent(pageVo.getMongoPageNumber()); - seckillApplyPage.setSize(pageVo.getPageSize()); - List seckillApplyList = seckillVO.getSeckillApplyList() != null ? seckillVO.getSeckillApplyList() : new ArrayList<>(); - // 如果查询参数店铺id不为空,则表示是店铺在查询信息,那么这里要对店铺的请求做过滤处理,把其他店铺的信息进行移除 - seckillApplyList.removeIf(seckillApply -> CharSequenceUtil.isNotEmpty(queryParam.getStoreId()) && !seckillApply.getStoreId().equals(queryParam.getStoreId())); - - //获取skuid - List skuIds = seckillApplyList.stream() + //获取skuId + List skuIds = seckillApplyPage.getRecords().stream() .map(SeckillApply::getSkuId).collect(Collectors.toList()); //循环获取 店铺/全平台 参与的促销商品库存进行填充 - if (skuIds.size() > 0) { - List skuStock = promotionGoodsService.getPromotionGoodsStock(PromotionTypeEnum.SECKILL, seckillVO.getId(), skuIds); + if (!skuIds.isEmpty()) { + List skuStock = promotionGoodsService.getPromotionGoodsStock(PromotionTypeEnum.SECKILL, queryParam.getSeckillId(), skuIds); for (int i = 0; i < skuIds.size(); i++) { - seckillApplyList.get(i).setQuantity(skuStock.get(i)); + seckillApplyPage.getRecords().get(i).setQuantity(skuStock.get(i)); } } - - seckillApplyPage.setTotal(seckillApplyList.size()); - List page = CollUtil.page(pageVo.getMongoPageNumber(), pageVo.getPageSize(), seckillApplyList); - seckillApplyPage.setRecords(page); - return seckillApplyPage; - } else { - return null; } + return seckillApplyPage; + } + + /** + * 分页查询限时请购申请列表 + * + * @param queryParam 秒杀活动申请查询参数 + * @return 限时请购申请列表 + */ + @Override + public List getSeckillApplyList(SeckillSearchParams queryParam) { + return this.list(queryParam.queryWrapper()); + } + + /** + * 查询限时请购申请列表总数 + * + * @param queryParam 查询条件 + * @return 限时请购申请列表总数 + */ + @Override + public long getSeckillApplyCount(SeckillSearchParams queryParam) { + return this.count(queryParam.queryWrapper()); + } + + /** + * 查询限时请购申请 + * + * @param queryParam 秒杀活动申请查询参数 + * @return 限时请购申请 + */ + @Override + public SeckillApply getSeckillApply(SeckillSearchParams queryParam) { + return this.getOne(queryParam.queryWrapper(), false); } @Override public void addSeckillApply(String seckillId, String storeId, List seckillApplyList) { - SeckillVO seckill = mongoTemplate.findById(seckillId, SeckillVO.class); + Seckill seckill = this.seckillService.getById(seckillId); if (seckill == null) { throw new ServiceException(ResultCode.SECKILL_NOT_EXIST_ERROR); } + if (seckillApplyList == null || seckillApplyList.isEmpty()) { + return; + } //检查秒杀活动申请是否合法 - checkSeckillApplyList(seckill.getHours(), seckillApplyList, storeId); + checkSeckillApplyList(seckill.getHours(), seckillApplyList); //获取已参与活动的秒杀活动活动申请列表 - List originList = seckill.getSeckillApplyList() != null ? seckill.getSeckillApplyList() : new ArrayList<>(); + List skuIds = seckillApplyList.stream().map(SeckillApply::getSkuId).collect(Collectors.toList()); + List originList = new ArrayList<>(); List promotionGoodsList = new ArrayList<>(); for (SeckillApplyVO seckillApply : seckillApplyList) { //获取参与活动的商品信息 GoodsSku goodsSku = goodsSkuService.getGoodsSkuByIdFromCache(seckillApply.getSkuId()); + if (!goodsSku.getStoreId().equals(storeId)) { + continue; + } //获取秒杀活动时间段 DateTime startTime = DateUtil.offsetHour(seckill.getStartTime(), seckillApply.getTimeLine()); //检测是否可以发布促销商品 checkSeckillGoodsSku(seckill, seckillApply, goodsSku, startTime); //设置秒杀申请默认内容 seckillApply.setOriginalPrice(goodsSku.getPrice()); - seckillApply.setPromotionApplyStatus(PromotionApplyStatusEnum.PASS.name()); + seckillApply.setPromotionApplyStatus(PromotionsApplyStatusEnum.PASS.name()); seckillApply.setSalesNum(0); - //过滤掉已经新增过的秒杀商品 - if (seckillApply.getId() == null) { - originList.add(seckillApply); - } + originList.add(seckillApply); //获取促销商品 PromotionGoods promotionGoods = this.setSeckillGoods(goodsSku, seckillApply, seckill); promotionGoodsList.add(promotionGoods); } - //保存秒杀活动申请 - this.saveOrUpdateBatch(originList); - //设置秒杀活动下的申请列表 - seckill.setSeckillApplyList(originList); - //mongo保存秒杀活动信息 - this.mongoTemplate.save(seckill); + boolean result = true; + this.remove(new LambdaQueryWrapper().eq(SeckillApply::getSeckillId, seckillId).in(SeckillApply::getSkuId, skuIds)); + this.saveBatch(originList); //保存促销活动商品信息 if (!promotionGoodsList.isEmpty()) { - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.in(PromotionGoods::getSkuId, promotionGoodsList.stream().map(PromotionGoods::getSkuId).collect(Collectors.toList())) - .eq(PromotionGoods::getStoreId, storeId); - promotionGoodsService.remove(queryWrapper); + PromotionGoodsSearchParams searchParams = new PromotionGoodsSearchParams(); + searchParams.setStoreId(storeId); + searchParams.setSkuIds(promotionGoodsList.stream().map(PromotionGoods::getSkuId).collect(Collectors.toList())); + promotionGoodsService.deletePromotionGoods(searchParams); //初始化促销商品 PromotionTools.promotionGoodsInit(promotionGoodsList, seckill, PromotionTypeEnum.SECKILL); - promotionGoodsService.saveBatch(promotionGoodsList); + result = promotionGoodsService.saveBatch(promotionGoodsList); } //设置秒杀活动的商品数量、店铺数量 seckillService.updateSeckillGoodsNum(seckillId); + cache.vagueDel(CachePrefix.STORE_ID_SECKILL); + if (result) { + this.seckillService.updateEsGoodsSeckill(seckill, originList); + } } @@ -214,31 +204,43 @@ public class SeckillApplyServiceImpl extends ServiceImpl id.contains(seckillApply1.getId())); - this.mongoTemplate.save(seckillVO); + this.remove(new LambdaQueryWrapper() + .eq(SeckillApply::getSeckillId, seckillId) + .in(SeckillApply::getId, id)); + this.seckillService.deleteEsGoodsSeckill(seckill, Collections.singletonList(seckillApply.getSkuId())); //删除促销商品 - this.removeById(id); + this.promotionGoodsService.deletePromotionGoods(seckillId, Collections.singletonList(seckillApply.getSkuId())); + } - //清除索引 - this.goodsIndexService.deleteEsGoodsPromotionByPromotionId(skuId, seckillId); - //删除促销商品 - promotionGoodsService.remove(new LambdaQueryWrapper() - .eq(PromotionGoods::getSkuId, skuId) - .eq(PromotionGoods::getPromotionType, PromotionTypeEnum.SECKILL.name())); + /** + * 更新秒杀商品库存 + * + * @param seckillId 秒杀活动id + * @param skuId 商品skuId + * @param quantity 库存 + */ + @Override + public void updateSeckillApplyQuantity(String seckillId, String skuId, Integer quantity) { + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(SeckillApply::getSeckillId, seckillId).eq(SeckillApply::getSkuId, skuId); + updateWrapper.set(SeckillApply::getQuantity, quantity); + this.update(updateWrapper); } /** @@ -246,12 +248,10 @@ public class SeckillApplyServiceImpl extends ServiceImpl seckillApplyList, String storeId) { + private void checkSeckillApplyList(String hours, List seckillApplyList) { List existSku = new ArrayList<>(); for (SeckillApplyVO seckillApply : seckillApplyList) { - seckillApply.setStoreId(storeId); if (seckillApply.getPrice() > seckillApply.getOriginalPrice()) { throw new ServiceException(ResultCode.SECKILL_PRICE_ERROR); } @@ -272,50 +272,45 @@ public class SeckillApplyServiceImpl extends ServiceImpl getSeckillTimelineToCache(String seckillCacheKey) { + private List getSeckillTimelineInfo() { List timelineList = new ArrayList<>(); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - //查询当天时间段内的且状态不为结束或关闭的秒杀活动活动 - queryWrapper.ge(Seckill::getStartTime, new Date(cn.lili.common.utils.DateUtil.startOfTodDay() * 1000)).le(Seckill::getEndTime, cn.lili.common.utils.DateUtil.endOfDate()) - .and(i -> i.eq(Seckill::getPromotionStatus, PromotionStatusEnum.NEW.name()) - .or(j -> j.eq(Seckill::getPromotionStatus, PromotionStatusEnum.START.name()))); - List seckillList = seckillService.list(queryWrapper); - if (!seckillList.isEmpty()) { - for (Seckill seckill : seckillList) { - //读取系统时间的时刻 - Calendar c = Calendar.getInstance(); - int hour = c.get(Calendar.HOUR_OF_DAY); - String[] split = seckill.getHours().split(","); - int[] hoursSored = Arrays.stream(split).mapToInt(Integer::parseInt).toArray(); - Arrays.sort(hoursSored); - for (int i = 0; i < hoursSored.length; i++) { - SeckillTimelineVO tempTimeline = new SeckillTimelineVO(); - boolean hoursSoredHour = (hoursSored[i] >= hour || ((i + 1) < hoursSored.length && hoursSored[i + 1] > hour)); - if (hoursSoredHour) { - SimpleDateFormat format = new SimpleDateFormat(cn.lili.common.utils.DateUtil.STANDARD_DATE_FORMAT); - String date = format.format(new Date()); - //当前时间的秒数 - long currentTime = cn.lili.common.utils.DateUtil.getDateline(); - //秒杀活动的时刻 - long timeLine = cn.lili.common.utils.DateUtil.getDateline(date + " " + hoursSored[i], "yyyy-MM-dd HH"); + //查询当天时间段内的秒杀活动活动 + Date now = new Date(); + queryWrapper.between(BasePromotions::getStartTime, DateUtil.beginOfDay(now), DateUtil.endOfDay(now)); + queryWrapper.ge(BasePromotions::getEndTime, DateUtil.endOfDay(now)); + List seckillList = this.seckillService.list(queryWrapper); + for (Seckill seckill : seckillList) { + //读取系统时间的时刻 + Calendar c = Calendar.getInstance(); + int hour = c.get(Calendar.HOUR_OF_DAY); + String[] split = seckill.getHours().split(","); + int[] hoursSored = Arrays.stream(split).mapToInt(Integer::parseInt).toArray(); + Arrays.sort(hoursSored); + for (int i = 0; i < hoursSored.length; i++) { + SeckillTimelineVO tempTimeline = new SeckillTimelineVO(); + boolean hoursSoredHour = (hoursSored[i] >= hour || ((i + 1) < hoursSored.length && hoursSored[i + 1] > hour)); + if (hoursSoredHour) { + SimpleDateFormat format = new SimpleDateFormat(DatePattern.NORM_DATE_PATTERN); + String date = format.format(new Date()); + //当前时间的秒数 + long currentTime = DateUtil.currentSeconds(); + //秒杀活动的时刻 + long timeLine = cn.lili.common.utils.DateUtil.getDateline(date + " " + hoursSored[i], "yyyy-MM-dd HH"); - - Long distanceTime = timeLine - currentTime < 0 ? 0 : timeLine - currentTime; - tempTimeline.setDistanceStartTime(distanceTime); - tempTimeline.setStartTime(timeLine); - tempTimeline.setTimeLine(hoursSored[i]); - tempTimeline.setSeckillGoodsList(wrapperSeckillGoods(hoursSored[i])); - timelineList.add(tempTimeline); - } + Long distanceTime = timeLine - currentTime < 0 ? 0 : timeLine - currentTime; + tempTimeline.setDistanceStartTime(distanceTime); + tempTimeline.setStartTime(timeLine); + tempTimeline.setTimeLine(hoursSored[i]); + tempTimeline.setSeckillGoodsList(wrapperSeckillGoods(hoursSored[i], seckill.getId())); + timelineList.add(tempTimeline); } } } - return timelineList; } @@ -326,27 +321,27 @@ public class SeckillApplyServiceImpl extends ServiceImpl wrapperSeckillGoods(Integer startTimeline) { + private List wrapperSeckillGoods(Integer startTimeline, String seckillId) { List seckillGoodsVoS = new ArrayList<>(); - LambdaQueryWrapper seckillLambdaQueryWrapper = new LambdaQueryWrapper<>(); - seckillLambdaQueryWrapper.ge(Seckill::getStartTime, new Date(cn.lili.common.utils.DateUtil.startOfTodDay() * 1000)).le(Seckill::getEndTime, cn.lili.common.utils.DateUtil.endOfDate()) - .and(i -> i.eq(Seckill::getPromotionStatus, PromotionStatusEnum.NEW.name()) - .or(j -> j.eq(Seckill::getPromotionStatus, PromotionStatusEnum.START.name()))); - List seckillList = this.seckillService.list(seckillLambdaQueryWrapper); - if (!seckillList.isEmpty()) { - for (Seckill seckill : seckillList) { - LambdaQueryWrapper seckillApplyLambdaQueryWrapper = new LambdaQueryWrapper().eq(SeckillApply::getTimeLine, startTimeline).eq(SeckillApply::getSeckillId, seckill.getId()).eq(SeckillApply::getPromotionApplyStatus, PromotionApplyStatusEnum.PASS.name()); - List list = this.list(seckillApplyLambdaQueryWrapper); - for (SeckillApply seckillApply : list) { - GoodsSku goodsSku = goodsSkuService.getGoodsSkuByIdFromCache(seckillApply.getSkuId()); - if (goodsSku != null) { - SeckillGoodsVO goodsVO = new SeckillGoodsVO(); - BeanUtil.copyProperties(seckillApply, goodsVO); - goodsVO.setGoodsImage(goodsSku.getThumbnail()); - goodsVO.setGoodsId(goodsSku.getGoodsId()); - goodsVO.setGoodsName(goodsSku.getGoodsName()); - seckillGoodsVoS.add(goodsVO); + List seckillApplyList = this.list(new LambdaQueryWrapper().eq(SeckillApply::getSeckillId, seckillId)); + if (!seckillApplyList.isEmpty()) { + List collect = seckillApplyList.stream().filter(i -> i.getTimeLine().equals(startTimeline) && i.getPromotionApplyStatus().equals(PromotionsApplyStatusEnum.PASS.name())).collect(Collectors.toList()); + for (SeckillApply seckillApply : collect) { + GoodsSku goodsSku = goodsSkuService.getGoodsSkuByIdFromCache(seckillApply.getSkuId()); + if (goodsSku != null) { + SeckillGoodsVO goodsVO = new SeckillGoodsVO(); + BeanUtil.copyProperties(seckillApply, goodsVO); + goodsVO.setGoodsImage(goodsSku.getThumbnail()); + goodsVO.setGoodsId(goodsSku.getGoodsId()); + goodsVO.setGoodsName(goodsSku.getGoodsName()); + String promotionGoodsStockCacheKey = PromotionGoodsService.getPromotionGoodsStockCacheKey( + PromotionTypeEnum.SECKILL, + seckillId, seckillApply.getSkuId()); + Object quantity = cache.get(promotionGoodsStockCacheKey); + if (quantity != null) { + goodsVO.setQuantity((Integer) quantity); } + seckillGoodsVoS.add(goodsVO); } } } @@ -361,7 +356,7 @@ public class SeckillApplyServiceImpl extends ServiceImpl implements SeckillService { +@Slf4j +public class SeckillServiceImpl extends AbstractPromotionsServiceImpl implements SeckillService { - - /** - * 延时任务 - */ - @Autowired - private TimeTrigger timeTrigger; - /** - * Mongo - */ - @Autowired - private MongoTemplate mongoTemplate; - /** - * RocketMQ - */ - @Autowired - private RocketmqCustomProperties rocketmqCustomProperties; - /** - * 商品索引 - */ - @Autowired - private EsGoodsIndexService goodsIndexService; - /** - * 促销商品 - */ - @Autowired - private PromotionGoodsService promotionGoodsService; - /** - * 秒杀申请 - */ - @Autowired - private SeckillApplyService seckillApplyService; /** * 设置 */ @Autowired private SettingService settingService; - @Override - public IPage getSeckillByPageFromMysql(SeckillSearchParams queryParam, PageVO pageVo) { - QueryWrapper queryWrapper = queryParam.wrapper(); - return page(PageUtil.initPage(pageVo), queryWrapper); - } + @Autowired + private SeckillApplyService seckillApplyService; + + /** + * rocketMq配置 + */ + @Autowired + private RocketmqCustomProperties rocketmqCustomProperties; + + /** + * rocketMq + */ + @Autowired + private RocketMQTemplate rocketMQTemplate; + @Override - public IPage getSeckillByPageFromMongo(SeckillSearchParams queryParam, PageVO pageVo) { - IPage seckill = new Page<>(pageVo.getPageNumber(), pageVo.getPageSize()); - if (queryParam == null) { - queryParam = new SeckillSearchParams(); - } - Query query = queryParam.mongoQuery(); - pageVo.setNotConvert(true); - PromotionTools.mongoQueryPageParam(query, pageVo); - seckill.setCurrent(pageVo.getPageNumber()); - seckill.setSize(pageVo.getPageSize()); - List seckillVOS = this.mongoTemplate.find(query, SeckillVO.class); - seckill.setRecords(seckillVOS); - seckill.setTotal(this.mongoTemplate.count(queryParam.mongoQuery(), SeckillVO.class)); - return seckill; - } - - @Override - public SeckillVO getSeckillByIdFromMongo(String id) { - return this.checkSeckillExist(id); + public SeckillVO getSeckillDetail(String id) { + Seckill seckill = this.checkSeckillExist(id); + SeckillVO seckillVO = new SeckillVO(); + BeanUtils.copyProperties(seckill, seckillVO); + SeckillSearchParams searchParams = new SeckillSearchParams(); + searchParams.setSeckillId(id); + seckillVO.setSeckillApplyList(this.seckillApplyService.getSeckillApplyList(searchParams)); + return seckillVO; } @Override public void init() { //清除演示数据 - List seckillList = list(); + List seckillList = this.list(); for (Seckill seckill : seckillList) { - this.timeTrigger.delete(TimeExecuteConstant.PROMOTION_EXECUTOR, - seckill.getStartTime().getTime(), - DelayQueueTools.wrapperUniqueKey(DelayTypeEnums.PROMOTION, (PromotionTypeEnum.SECKILL.name() + seckill.getId())), - rocketmqCustomProperties.getPromotionTopic()); - this.removeById(seckill.getId()); + seckill.setStartTime(null); + seckill.setEndTime(null); + this.updateEsGoodsIndex(seckill); } + this.remove(new QueryWrapper<>()); Setting setting = settingService.get(SettingEnum.SECKILL_SETTING.name()); SeckillSetting seckillSetting = new Gson().fromJson(setting.getSettingValue(), SeckillSetting.class); for (int i = 1; i <= PRE_CREATION; i++) { Seckill seckill = new Seckill(i, seckillSetting.getHours(), seckillSetting.getSeckillRule()); - this.saveSeckill(seckill); + this.savePromotions(seckill); } } @Override - public boolean saveSeckill(Seckill seckill) { - - SeckillVO seckillVO = new SeckillVO(); - BeanUtil.copyProperties(seckill, seckillVO); - - seckillVO.setSeckillApplyStatus(SeckillApplyStatusEnum.NOT_APPLY.name()); - seckillVO.setSeckillApplyList(null); - //检查秒杀活动参数 - checkSeckillParam(seckillVO); - //保存到MYSQL中 - boolean result = this.save(seckillVO); - //保存到MONGO中 - this.mongoTemplate.save(seckillVO); - //添加秒杀延时任务 - this.addSeckillStartTask(seckillVO); - return result; - } - - @Override - public void storeApply(String storeId, String seckillId) { - Seckill seckill = this.getById(seckillId); - String storeIds; - if (!StringUtils.isEmpty(seckill.getStoreIds())) { - storeIds = seckill.getStoreIds() + storeId + ","; - } else { - storeIds = storeId + ","; - } - seckill.setStoreIds(storeIds); - - this.updateById(seckill); - } - - @Override - public boolean modifySeckill(SeckillVO seckillVO) { - //检查该秒杀活动是否存在 - SeckillVO seckill = checkSeckillExist(seckillVO.getId()); - if (PromotionStatusEnum.START.name().equals(seckillVO.getPromotionStatus())) { - throw new ServiceException(ResultCode.PROMOTION_UPDATE_ERROR); - } - if (seckillVO.getEndTime() == null) { - seckillVO.setEndTime(cn.hutool.core.date.DateUtil.endOfDay(seckillVO.getStartTime())); - } - PromotionTools.checkPromotionTime(seckillVO.getStartTime().getTime(), seckillVO.getEndTime().getTime()); - //检查秒杀活动参数 - this.checkSeckillParam(seckillVO); - //更新到MYSQL中 - boolean result = this.updateById(seckillVO); - //保存到MONGO中 - this.mongoTemplate.save(seckillVO); - //如果编辑后活动时间不一致,则编辑延时任务 - if (seckill.getStartTime().getTime() != seckillVO.getStartTime().getTime()) { - if (seckillVO.getEndTime() == null) { - seckillVO.setEndTime(cn.hutool.core.date.DateUtil.endOfDay(new Date())); - } - PromotionMessage promotionMessage = new PromotionMessage(seckillVO.getId(), PromotionTypeEnum.SECKILL.name(), PromotionStatusEnum.START.name(), seckillVO.getStartTime(), seckillVO.getEndTime()); - //更新延时任务 - this.timeTrigger.edit(TimeExecuteConstant.PROMOTION_EXECUTOR, - promotionMessage, - seckill.getStartTime().getTime(), - seckillVO.getStartTime().getTime(), - DelayQueueTools.wrapperUniqueKey(DelayTypeEnums.PROMOTION, (promotionMessage.getPromotionType() + promotionMessage.getPromotionId())), - DateUtil.getDelayTime(seckillVO.getStartTime().getTime()), - rocketmqCustomProperties.getPromotionTopic()); - } - return result; - } - - @Override - public void deleteSeckill(String id) { - Seckill seckill = checkSeckillExist(id); - if (PromotionStatusEnum.CLOSE.name().equals(seckill.getPromotionStatus()) || PromotionStatusEnum.END.name().equals(seckill.getPromotionStatus())) { - //更新秒杀活动状态为关闭,标示删除标志 - LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper().eq(Seckill::getId, id).set(Seckill::getDeleteFlag, true).set(Seckill::getPromotionStatus, PromotionStatusEnum.CLOSE.name()); - this.update(updateWrapper); - LambdaUpdateWrapper seckillApplyLambdaUpdateWrapper = new LambdaUpdateWrapper().eq(SeckillApply::getSeckillId, id).set(SeckillApply::getDeleteFlag, true); - this.seckillApplyService.update(seckillApplyLambdaUpdateWrapper); - this.mongoTemplate.remove(new Query().addCriteria(Criteria.where("id").is(id)), SeckillVO.class); - LambdaUpdateWrapper promotionGoodsQueryWrapper = new LambdaUpdateWrapper().eq(PromotionGoods::getPromotionId, id).set(PromotionGoods::getDeleteFlag, true); - this.promotionGoodsService.update(promotionGoodsQueryWrapper); - this.timeTrigger.delete(TimeExecuteConstant.PROMOTION_EXECUTOR, - seckill.getStartTime().getTime(), - DelayQueueTools.wrapperUniqueKey(DelayTypeEnums.PROMOTION, (PromotionTypeEnum.SECKILL.name() + seckill.getId())), - rocketmqCustomProperties.getPromotionTopic()); - } else { - throw new ServiceException(ResultCode.SECKILL_DELETE_ERROR); - } - } - - /** - * 开启一个秒杀活动 - * - * @param id 秒杀活动编号 - */ - @Override - public void openSeckill(String id) { - SeckillVO seckillVO = checkSeckillExist(id); - if (seckillVO.getEndTime() == null) { - seckillVO.setEndTime(cn.hutool.core.date.DateUtil.endOfDay(seckillVO.getStartTime())); - } - PromotionTools.checkPromotionTime(seckillVO.getStartTime().getTime(), seckillVO.getEndTime().getTime()); - if (PromotionStatusEnum.NEW.name().equals(seckillVO.getPromotionStatus()) || PromotionStatusEnum.CLOSE.name().equals(seckillVO.getPromotionStatus())) { - LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper().eq(Seckill::getId, id).set(Seckill::getPromotionStatus, PromotionStatusEnum.START.name()); - this.update(updateWrapper); - seckillVO.setPromotionStatus(PromotionStatusEnum.START.name()); - this.mongoTemplate.save(seckillVO); - this.addSeckillStartTask(seckillVO); - } - } - - @Override - public void closeSeckill(String id) { - SeckillVO seckillVO = checkSeckillExist(id); - if (PromotionStatusEnum.NEW.name().equals(seckillVO.getPromotionStatus()) || PromotionStatusEnum.START.name().equals(seckillVO.getPromotionStatus())) { - LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper().eq(Seckill::getId, id).set(Seckill::getPromotionStatus, PromotionStatusEnum.CLOSE.name()); - this.update(updateWrapper); - seckillVO.setPromotionStatus(PromotionStatusEnum.CLOSE.name()); - this.mongoTemplate.save(seckillVO); - if (PromotionStatusEnum.CLOSE.name().equals(seckillVO.getPromotionStatus())) { - LambdaQueryWrapper deleteWrapper = new LambdaQueryWrapper<>(); - deleteWrapper.eq(PromotionGoods::getPromotionId, seckillVO.getId()); - promotionGoodsService.remove(deleteWrapper); - if (seckillVO.getSeckillApplyList() != null) { - List skuIds = seckillVO.getSeckillApplyList().stream().map(SeckillApply::getSkuId).collect(Collectors.toList()); - this.goodsIndexService.deleteEsGoodsPromotionIndexByList(skuIds, PromotionTypeEnum.SECKILL); - } - this.timeTrigger.delete(TimeExecuteConstant.PROMOTION_EXECUTOR, - seckillVO.getStartTime().getTime(), - DelayQueueTools.wrapperUniqueKey(DelayTypeEnums.PROMOTION, (PromotionTypeEnum.SECKILL.name() + seckillVO.getId())), - rocketmqCustomProperties.getPromotionTopic()); - } - } else { - throw new ServiceException(ResultCode.SECKILL_CLOSE_ERROR); - } - } - - @Override - public Integer getApplyNum() { - LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(); - //秒杀申请时间未超过当前时间 - queryWrapper.ge(Seckill::getApplyEndTime, cn.hutool.core.date.DateUtil.date()); - queryWrapper.eq(Seckill::getPromotionStatus, PromotionStatusEnum.NEW.name()); + public long getApplyNum() { + DateTime now = DateUtil.date(); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.ge(Seckill::getApplyEndTime, now); + queryWrapper.le(Seckill::getStartTime, now); + queryWrapper.ge(Seckill::getEndTime, now); return this.count(queryWrapper); } @Override public void updateSeckillGoodsNum(String seckillId) { - this.baseMapper.updateSeckillGoodsNum(seckillId); + Seckill seckill = this.getById(seckillId); + if (seckill != null) { + SeckillSearchParams searchParams = new SeckillSearchParams(); + searchParams.setSeckillId(seckillId); + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(Seckill::getId, seckillId); + updateWrapper.set(Seckill::getGoodsNum, + this.seckillApplyService.getSeckillApplyCount(searchParams)); + this.update(updateWrapper); + + } } /** - * 添加秒杀活动延时任务 + * 更新商品索引限时抢购信息 * - * @param seckill 秒杀活动 + * @param seckill 限时抢购信息 */ - public void addSeckillStartTask(SeckillVO seckill) { - PromotionMessage promotionMessage = new PromotionMessage(seckill.getId(), PromotionTypeEnum.SECKILL.name(), PromotionStatusEnum.START.name(), seckill.getStartTime(), seckill.getEndTime()); - TimeTriggerMsg timeTriggerMsg = new TimeTriggerMsg(TimeExecuteConstant.PROMOTION_EXECUTOR, - seckill.getStartTime().getTime(), - promotionMessage, - DelayQueueTools.wrapperUniqueKey(DelayTypeEnums.PROMOTION, (promotionMessage.getPromotionType() + promotionMessage.getPromotionId())), - rocketmqCustomProperties.getPromotionTopic()); - //发送促销活动开始的延时任务 - this.timeTrigger.addDelay(timeTriggerMsg); + @Override + public void updateEsGoodsSeckill(Seckill seckill, List seckillApplies) { + if (seckillApplies != null && !seckillApplies.isEmpty()) { + // 更新促销范围 + seckill.setScopeId(ArrayUtil.join(seckillApplies.stream().map(SeckillApply::getSkuId).toArray(), ",")); + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("id", seckill.getId()); + updateWrapper.set("scope_id", seckill.getScopeId()); + this.update(updateWrapper); + //循环秒杀商品数据,将数据按照时间段进行存储 + for (SeckillApply seckillApply : seckillApplies) { + if (seckillApply.getPromotionApplyStatus().equals(PromotionsApplyStatusEnum.PASS.name())) { + this.setSeckillApplyTime(seckill, seckillApply); + } + } + if (!seckillApplies.isEmpty()) { + log.info("更新限时抢购商品状态:{}", seckill); + String promotionKey = PromotionTypeEnum.SECKILL.name() + "-" + seckill.getId(); + Map map = new HashMap<>(); + // es促销key + map.put("esPromotionKey", promotionKey); + // 促销类型全路径名 + map.put("promotionsType", Seckill.class.getName()); + // 促销实体 + map.put("promotions", seckill); + //更新商品促销消息 + String destination = rocketmqCustomProperties.getGoodsTopic() + ":" + GoodsTagsEnum.UPDATE_GOODS_INDEX_PROMOTIONS.name(); + //发送mq消息 + rocketMQTemplate.asyncSend(destination, JSONUtil.toJsonStr(map), RocketmqSendCallbackBuilder.commonCallback()); + } + } + } + + /** + * 删除商品索引限时抢购信息 + * + * @param seckill 限时抢购信息 + * @param skuIds 商品skuId列表 + */ + @Override + public void deleteEsGoodsSeckill(Seckill seckill, List skuIds) { + seckill.setScopeType(PromotionsScopeTypeEnum.PORTION_GOODS.name()); + seckill.setScopeId(ArrayUtil.join(skuIds.toArray(), ",")); + //删除商品促销消息 + String destination = rocketmqCustomProperties.getGoodsTopic() + ":" + GoodsTagsEnum.DELETE_GOODS_INDEX_PROMOTIONS.name(); + //发送mq消息 + rocketMQTemplate.asyncSend(destination, JSONUtil.toJsonStr(seckill), RocketmqSendCallbackBuilder.commonCallback()); + } + + @Override + public void setSeckillApplyTime(Seckill seckill, SeckillApply seckillApply) { + //下一个时间,默认为当天结束时间 + int nextHour = PromotionTools.nextHour(seckill.getHours().split(","), seckillApply.getTimeLine()); + + String format = DateUtil.format(seckill.getStartTime(), DatePattern.NORM_DATE_PATTERN); + DateTime parseStartTime = DateUtil.parse((format + " " + seckillApply.getTimeLine()), "yyyy-MM-dd HH"); + DateTime parseEndTime = DateUtil.parse((format + " " + nextHour), "yyyy-MM-dd HH"); + //如果是当天最后的时间段则设置到当天结束时间的59分59秒 + if (nextHour == seckillApply.getTimeLine()) { + parseEndTime = DateUtil.parse((format + " " + nextHour + ":59:59"), DatePattern.NORM_DATETIME_PATTERN); + } + seckill.setStartTime(parseStartTime); + //当时商品的秒杀活动活动结束时间为下个时间段的开始 + seckill.setEndTime(parseEndTime); } /** @@ -320,8 +210,8 @@ public class SeckillServiceImpl extends ServiceImpl impl * @param id 秒杀活动编号 * @return 秒杀活动信息 */ - private SeckillVO checkSeckillExist(String id) { - SeckillVO seckill = this.mongoTemplate.findById(id, SeckillVO.class); + private Seckill checkSeckillExist(String id) { + Seckill seckill = this.getById(id); if (seckill == null) { throw new ServiceException(ResultCode.SECKILL_NOT_EXIST_ERROR); } @@ -329,17 +219,53 @@ public class SeckillServiceImpl extends ServiceImpl impl } /** - * 检查秒杀活动参数 + * 初始化促销字段 * - * @param seckill 秒杀活动信息 + * @param promotions 促销实体 */ - private void checkSeckillParam(SeckillVO seckill) { - //同一时间段内相同的活动 - QueryWrapper queryWrapper = PromotionTools.checkActiveTime(seckill.getStartTime(), seckill.getEndTime(), PromotionTypeEnum.SECKILL, null, seckill.getId()); - int sameNum = this.count(queryWrapper); - //当前时间段是否存在同类活动 - if (sameNum > 0) { - throw new ServiceException(ResultCode.PROMOTION_SAME_ACTIVE_EXIST); + @Override + public void initPromotion(Seckill promotions) { + super.initPromotion(promotions); + if (promotions.getStartTime() != null && promotions.getEndTime() == null) { + promotions.setEndTime(DateUtil.endOfDay(promotions.getStartTime())); } } + + /** + * 检查促销状态 + * + * @param promotions 促销实体 + */ + @Override + public void checkStatus(Seckill promotions) { + super.checkStatus(promotions); + if (promotions.getStartTime() != null && CharSequenceUtil.isNotEmpty(promotions.getHours())) { + String[] split = promotions.getHours().split(","); + Arrays.sort(split); + String startTimeStr = DateUtil.format(promotions.getStartTime(), DatePattern.NORM_DATE_PATTERN) + " " + split[0] + ":00"; + promotions.setStartTime(DateUtil.parse(startTimeStr, DatePattern.NORM_DATETIME_MINUTE_PATTERN)); + promotions.setEndTime(DateUtil.endOfDay(promotions.getStartTime())); + } + if (promotions.getStartTime() != null && promotions.getEndTime() != null) { + //同一时间段内相同的活动 + QueryWrapper queryWrapper = PromotionTools.checkActiveTime(promotions.getStartTime(), promotions.getEndTime(), PromotionTypeEnum.SECKILL, null, promotions.getId()); + long sameNum = this.count(queryWrapper); + //当前时间段是否存在同类活动 + if (sameNum > 0) { + throw new ServiceException(ResultCode.PROMOTION_SAME_ACTIVE_EXIST); + } + } + + + } + + /** + * 当前促销类型 + * + * @return 当前促销类型 + */ + @Override + public PromotionTypeEnum getPromotionType() { + return PromotionTypeEnum.SECKILL; + } } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/promotion/tools/PromotionTools.java b/framework/src/main/java/cn/lili/modules/promotion/tools/PromotionTools.java index cab5edfe..125bde42 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/tools/PromotionTools.java +++ b/framework/src/main/java/cn/lili/modules/promotion/tools/PromotionTools.java @@ -1,21 +1,21 @@ package cn.lili.modules.promotion.tools; +import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; import cn.hutool.core.text.CharSequenceUtil; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; import cn.lili.common.enums.PromotionTypeEnum; import cn.lili.common.enums.ResultCode; import cn.lili.common.exception.ServiceException; -import cn.lili.common.vo.PageVO; +import cn.lili.modules.promotion.entity.dos.BasePromotions; import cn.lili.modules.promotion.entity.dos.PromotionGoods; -import cn.lili.modules.promotion.entity.dto.BasePromotion; -import cn.lili.modules.promotion.entity.enums.PromotionStatusEnum; +import cn.lili.modules.promotion.entity.enums.PromotionsStatusEnum; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import org.springframework.data.domain.PageRequest; -import org.springframework.data.domain.Sort; -import org.springframework.data.mongodb.core.query.Query; -import java.util.Date; -import java.util.List; +import java.util.*; +import java.util.function.Consumer; +import java.util.stream.Collectors; /** @@ -26,6 +26,11 @@ import java.util.List; **/ public class PromotionTools { + public static final String START_TIME_COLUMN = "start_time"; + public static final String END_TIME_COLUMN = "end_time"; + public static final String PLATFORM_ID = "platform"; + public static final String PLATFORM_NAME = "platform"; + /** * 参数验证 * 1、活动起始时间必须大于当前时间 @@ -33,38 +38,26 @@ public class PromotionTools { * * @param startTime 活动开始时间 * @param endTime 活动结束时间 - * @param num 参与活动商品数量 - * @param goodsList 选择的商品 */ - public static void paramValid(Long startTime, Long endTime, int num, List goodsList) { + public static void checkPromotionTime(Date startTime, Date endTime) { - checkPromotionTime(startTime, endTime); - - //如果促销活动选择的是部分商品参加活动 - if (num != -1 && goodsList == null) { - throw new ServiceException(ResultCode.PROMOTION_GOODS_ERROR); + if (startTime == null) { + throw new ServiceException(ResultCode.PROMOTION_TIME_NOT_EXIST); } - } - /** - * 参数验证 - * 1、活动起始时间必须大于当前时间 - * 2、验证活动开始时间是否大于活动结束时间 - * - * @param startTime 活动开始时间 - * @param endTime 活动结束时间 - */ - public static void checkPromotionTime(Long startTime, Long endTime) { - - long nowTime = DateUtil.current(); + DateTime now = DateUtil.date(); //如果活动起始时间小于现在时间 - if (startTime < nowTime || endTime < nowTime) { + if (now.after(startTime)) { throw new ServiceException(ResultCode.PROMOTION_START_TIME_ERROR); } + //如果活动结束时间小于现在时间 + if (endTime != null && now.after(endTime)) { + throw new ServiceException(ResultCode.PROMOTION_END_TIME_ERROR); + } //开始时间不能大于结束时间 - if (startTime > endTime) { + if (endTime != null && startTime.after(endTime)) { throw new ServiceException(ResultCode.PROMOTION_TIME_ERROR); } } @@ -76,23 +69,20 @@ public class PromotionTools { * @param endTime 结束时间 * @param typeEnum 促销类型 * @param storeId 店铺id - * @param activityId 促销活动id - * @param 促销类型 + * @param activityId 排除的促销活动id * @return mybatis plus query wrapper对象 */ - public static QueryWrapper checkActiveTime(Date startTime, Date endTime, PromotionTypeEnum typeEnum, String storeId, String activityId) { + public static QueryWrapper checkActiveTime(Date startTime, Date endTime, PromotionTypeEnum typeEnum, String storeId, String activityId) { QueryWrapper queryWrapper = new QueryWrapper<>(); - String startTimeColumn = "start_time"; - String endTimeColumn = "end_time"; if (PromotionTypeEnum.SECKILL != typeEnum) { queryWrapper.nested(i -> { //新活动起始时间 大于 之前活动的起始时间 小于 之前活动的截止时间 - i.nested(i2 -> i2.le(startTimeColumn, startTime).ge(endTimeColumn, startTime)); + i.nested(i2 -> i2.le(START_TIME_COLUMN, startTime).ge(END_TIME_COLUMN, startTime)); //新活动结束时间 大于 之前活动的起始时间 小于 之前活动的截止时间 - i.or(i1 -> i1.le(startTimeColumn, endTime).ge(endTimeColumn, endTime)); + i.or(i1 -> i1.le(START_TIME_COLUMN, endTime).ge(END_TIME_COLUMN, endTime)); }); } else { - queryWrapper.ge(startTimeColumn, DateUtil.beginOfDay(startTime)).le(endTimeColumn, DateUtil.endOfDay(endTime)); + queryWrapper.ge(START_TIME_COLUMN, DateUtil.beginOfDay(startTime)).le(END_TIME_COLUMN, DateUtil.endOfDay(endTime)); } if (storeId != null) { queryWrapper.eq("store_id", storeId); @@ -100,13 +90,27 @@ public class PromotionTools { if (activityId != null) { queryWrapper.ne("id", activityId); } - //忽略已作废和已关闭的活动 - queryWrapper.ne("promotion_status", PromotionStatusEnum.END.name()); - queryWrapper.ne("promotion_status", PromotionStatusEnum.CLOSE.name()); + queryWrapper.and(i -> i.or(queryPromotionStatus(PromotionsStatusEnum.NEW)).or(queryPromotionStatus(PromotionsStatusEnum.START))); queryWrapper.eq("delete_flag", false); return queryWrapper; } + + public static Consumer> queryPromotionStatus(PromotionsStatusEnum promotionsStatusEnum) { + switch (promotionsStatusEnum) { + case NEW: + return (QueryWrapper t) -> t.nested(i -> i.gt(START_TIME_COLUMN, new Date()).gt(END_TIME_COLUMN, new Date())); + case START: + return (QueryWrapper t) -> t.nested(i -> i.le(START_TIME_COLUMN, new Date()).ge(END_TIME_COLUMN, new Date())); + case END: + return (QueryWrapper t) -> t.nested(i -> i.lt(START_TIME_COLUMN, new Date()).lt(END_TIME_COLUMN, new Date())); + case CLOSE: + return (QueryWrapper t) -> t.nested(i -> i.isNull(START_TIME_COLUMN).isNull(END_TIME_COLUMN)); + default: + return null; + } + } + /** * 促销商品入库前填充 * @@ -114,37 +118,59 @@ public class PromotionTools { * @param promotion 促销信息 * @return 促销商品列表 */ - public static List promotionGoodsInit(List originList, BasePromotion promotion, PromotionTypeEnum promotionTypeEnum) { - //本次促销商品入库 - for (PromotionGoods promotionGoods : originList) { - promotionGoods.setPromotionId(promotion.getId()); - promotionGoods.setStoreName(promotion.getStoreName()); - promotionGoods.setTitle(promotion.getPromotionName()); - if (promotionGoods.getStartTime() == null) { - promotionGoods.setStartTime(promotion.getStartTime()); + public static List promotionGoodsInit(List originList, BasePromotions promotion, PromotionTypeEnum promotionTypeEnum) { + if (originList != null) { + //本次促销商品入库 + for (PromotionGoods promotionGoods : originList) { + promotionGoods.setPromotionId(promotion.getId()); + if (CharSequenceUtil.isEmpty(promotionGoods.getStoreId())) { + promotionGoods.setStoreId(promotion.getStoreId()); + } + if (CharSequenceUtil.isEmpty(promotionGoods.getStoreName())) { + promotionGoods.setStoreName(promotion.getStoreName()); + } + promotionGoods.setTitle(promotion.getPromotionName()); + if (promotionGoods.getStartTime() == null) { + promotionGoods.setStartTime(promotion.getStartTime()); + } + if (promotionGoods.getEndTime() == null) { + promotionGoods.setEndTime(promotion.getEndTime()); + } + promotionGoods.setPromotionType(promotionTypeEnum.name()); + promotionGoods.setNum(0); + promotionGoods.setDeleteFlag(promotion.getDeleteFlag()); } - if (promotion.getEndTime() == null) { - promotionGoods.setEndTime(promotion.getEndTime()); - } - promotionGoods.setPromotionType(promotionTypeEnum.name()); - promotionGoods.setPromotionStatus(promotion.getPromotionStatus()); - promotionGoods.setNum(0); } return originList; } - /** - * 为mongoQuery组织分页排序参数 - * - * @param query 查询条件 - * @param page 分页排序参数 - */ - public static void mongoQueryPageParam(Query query, PageVO page) { - page.setNotConvert(true); - query.with(PageRequest.of(page.getMongoPageNumber(), page.getPageSize())); - if (!CharSequenceUtil.isEmpty(page.getOrder()) && !CharSequenceUtil.isEmpty(page.getSort())) { - query.with(Sort.by(Sort.Direction.valueOf(page.getOrder().toUpperCase()), page.getSort())); + + public static int nextHour(String[] totalHours, Integer timeline) { + int nextHour = 23; + int[] hoursSored = Arrays.stream(totalHours).mapToInt(Integer::parseInt).toArray(); + Arrays.sort(hoursSored); + for (int i : hoursSored) { + if (timeline < i) { + nextHour = i; + break; + } } + return nextHour; + } + + public static Map filterInvalidPromotionsMap(Map map) { + if (map == null) { + return new HashMap<>(); + } + //移除无效促销活动 + return map.entrySet().stream().filter(i -> { + JSONObject promotionsObj = JSONUtil.parseObj(i.getValue()); + BasePromotions basePromotions = promotionsObj.toBean(BasePromotions.class); + if (basePromotions.getStartTime() != null && basePromotions.getEndTime() != null) { + return basePromotions.getStartTime().getTime() <= System.currentTimeMillis() && basePromotions.getEndTime().getTime() >= System.currentTimeMillis(); + } + return true; + }).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); } } diff --git a/framework/src/main/java/cn/lili/modules/search/entity/dos/EsGoodsIndex.java b/framework/src/main/java/cn/lili/modules/search/entity/dos/EsGoodsIndex.java index 80e5db4a..cd5372de 100644 --- a/framework/src/main/java/cn/lili/modules/search/entity/dos/EsGoodsIndex.java +++ b/framework/src/main/java/cn/lili/modules/search/entity/dos/EsGoodsIndex.java @@ -1,9 +1,11 @@ package cn.lili.modules.search.entity.dos; +import cn.hutool.json.JSONUtil; import cn.lili.common.enums.PromotionTypeEnum; import cn.lili.elasticsearch.EsSuffix; import cn.lili.modules.goods.entity.dos.GoodsSku; import cn.lili.modules.goods.entity.dto.GoodsParamsDTO; +import cn.lili.modules.promotion.tools.PromotionTools; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -225,7 +227,7 @@ public class EsGoodsIndex implements Serializable { */ @Field(type = FieldType.Text) @ApiModelProperty("审核状态") - private String isAuth; + private String authFlag; /** * 卖点 @@ -259,9 +261,6 @@ public class EsGoodsIndex implements Serializable { @ApiModelProperty(value = "商品类型", required = true) private String goodsType; - /** - * @see cn.lili.modules.goods.entity.enums.GoodsTypeEnum - */ @ApiModelProperty(value = "商品sku基础分数", required = true) private Integer skuSource; @@ -279,8 +278,8 @@ public class EsGoodsIndex implements Serializable { * value 为 促销活动实体信息 */ @Field(type = FieldType.Nested) - @ApiModelProperty("商品促销活动集合,key 为 促销活动类型,value 为 促销活动实体信息 ") - private Map promotionMap; + @ApiModelProperty("商品促销活动集合JSON,key 为 促销活动类型,value 为 促销活动实体信息 ") + private String promotionMapJson; public EsGoodsIndex(GoodsSku sku) { @@ -305,10 +304,11 @@ public class EsGoodsIndex implements Serializable { this.selfOperated = sku.getSelfOperated(); this.salesModel = sku.getSalesModel(); this.marketEnable = sku.getMarketEnable(); - this.isAuth = sku.getIsAuth(); + this.authFlag = sku.getAuthFlag(); this.intro = sku.getIntro(); this.grade = sku.getGrade(); this.recommend = sku.getRecommend(); + this.goodsType = sku.getGoodsType(); this.releaseTime = new Date(); } } @@ -371,10 +371,14 @@ public class EsGoodsIndex implements Serializable { this.selfOperated = sku.getSelfOperated(); this.salesModel = sku.getSalesModel(); this.marketEnable = sku.getMarketEnable(); - this.isAuth = sku.getIsAuth(); + this.authFlag = sku.getAuthFlag(); this.intro = sku.getIntro(); this.grade = sku.getGrade(); this.releaseTime = new Date(); } } + + public Map getPromotionMap() { + return PromotionTools.filterInvalidPromotionsMap(JSONUtil.parseObj(this.promotionMapJson)); + } } diff --git a/framework/src/main/java/cn/lili/modules/search/repository/EsGoodsIndexRepository.java b/framework/src/main/java/cn/lili/modules/search/repository/EsGoodsIndexRepository.java index a2088b22..95920fe2 100644 --- a/framework/src/main/java/cn/lili/modules/search/repository/EsGoodsIndexRepository.java +++ b/framework/src/main/java/cn/lili/modules/search/repository/EsGoodsIndexRepository.java @@ -4,6 +4,8 @@ import cn.lili.modules.search.entity.dos.EsGoodsIndex; import org.springframework.data.elasticsearch.repository.ElasticsearchRepository; /** + * 商品索引 + * * @author paulG * @since 2020/10/15 **/ diff --git a/framework/src/main/java/cn/lili/modules/search/service/EsGoodsIndexService.java b/framework/src/main/java/cn/lili/modules/search/service/EsGoodsIndexService.java index f7edeb7e..6ff46c49 100644 --- a/framework/src/main/java/cn/lili/modules/search/service/EsGoodsIndexService.java +++ b/framework/src/main/java/cn/lili/modules/search/service/EsGoodsIndexService.java @@ -3,9 +3,10 @@ package cn.lili.modules.search.service; import cn.lili.common.enums.PromotionTypeEnum; import cn.lili.modules.goods.entity.dos.GoodsSku; import cn.lili.modules.goods.entity.dto.GoodsParamsDTO; +import cn.lili.modules.promotion.entity.dos.BasePromotions; import cn.lili.modules.promotion.entity.dos.PromotionGoods; -import cn.lili.modules.promotion.entity.dto.BasePromotion; import cn.lili.modules.search.entity.dos.EsGoodsIndex; +import org.elasticsearch.action.update.UpdateRequest; import java.util.List; import java.util.Map; @@ -25,9 +26,11 @@ public interface EsGoodsIndexService { /** * 获取es生成索引进度 + * * @return */ Map getProgress(); + /** * 添加商品索引 * @@ -79,6 +82,13 @@ public interface EsGoodsIndexService { */ void deleteIndexById(String id); + /** + * 删除索引 + * + * @param ids 商品索引id集合 + */ + void deleteIndexByIds(List ids); + /** * 初始化商品索引 * @@ -92,9 +102,17 @@ public interface EsGoodsIndexService { * @param id id(skuId) * @param promotion 促销信息 * @param key 促销信息的key - * @param price 促销价格 */ - void updateEsGoodsIndex(String id, BasePromotion promotion, String key, Double price); + UpdateRequest updateEsGoodsIndexPromotions(String id, BasePromotions promotion, String key); + + /** + * 更新商品索引的促销信息 + * + * @param ids id(skuId) + * @param promotion 促销信息 + * @param key 促销信息的key + */ + void updateEsGoodsIndexPromotions(List ids, BasePromotions promotion, String key); /** * 根据列表更新商品索引的促销信息 @@ -103,7 +121,7 @@ public interface EsGoodsIndexService { * @param promotion 促销信息 * @param key 促销信息的key */ - void updateEsGoodsIndexByList(List promotionGoodsList, BasePromotion promotion, String key); + void updateEsGoodsIndexByList(List promotionGoodsList, BasePromotions promotion, String key); /** * 更新全部商品索引的促销信息 @@ -111,7 +129,7 @@ public interface EsGoodsIndexService { * @param promotion 促销信息 * @param key 促销信息的key */ - void updateEsGoodsIndexAllByList(BasePromotion promotion, String key); + void updateEsGoodsIndexAllByList(BasePromotions promotion, String key); /** * 删除指定商品的促销信息 @@ -124,10 +142,10 @@ public interface EsGoodsIndexService { /** * 删除索引中指定的促销活动id的促销活动 * - * @param skuId 商品skuId + * @param skuIds 商品skuId * @param promotionId 促销活动Id */ - void deleteEsGoodsPromotionByPromotionId(String skuId, String promotionId); + void deleteEsGoodsPromotionByPromotionId(List skuIds, String promotionId); /** * 清除所以商品索引的无效促销活动 @@ -160,11 +178,11 @@ public interface EsGoodsIndexService { List getPromotionIdByPromotionType(String id, PromotionTypeEnum promotionTypeEnum); /** - * 重置当前商品索引 + * 获取临时拼装的商品索引 * * @param goodsSku 商品sku信息 * @param goodsParamDTOS 商品参数 * @return 商品索引 */ - EsGoodsIndex resetEsGoodsIndex(GoodsSku goodsSku, List goodsParamDTOS); + EsGoodsIndex getTempEsGoodsIndex(GoodsSku goodsSku, List goodsParamDTOS); } diff --git a/framework/src/main/java/cn/lili/modules/search/service/EsGoodsSearchService.java b/framework/src/main/java/cn/lili/modules/search/service/EsGoodsSearchService.java index 9449e688..0e50be00 100644 --- a/framework/src/main/java/cn/lili/modules/search/service/EsGoodsSearchService.java +++ b/framework/src/main/java/cn/lili/modules/search/service/EsGoodsSearchService.java @@ -41,6 +41,13 @@ public interface EsGoodsSearchService { */ void setHotWords(HotWordsDTO hotWords); + /** + * 删除热门关键词 + * + * @param keywords 热词 + */ + void deleteHotWords(String keywords); + /** * 获取筛选器 * @@ -57,4 +64,12 @@ public interface EsGoodsSearchService { * @return ES商品列表 */ List getEsGoodsBySkuIds(List skuIds); + + /** + * 根据id获取商品索引 + * + * @param id 商品skuId + * @return 商品索引 + */ + EsGoodsIndex getEsGoodsById(String id); } diff --git a/framework/src/main/java/cn/lili/modules/search/serviceimpl/CustomWordsServiceImpl.java b/framework/src/main/java/cn/lili/modules/search/serviceimpl/CustomWordsServiceImpl.java index 2cb3b7e8..c01db760 100644 --- a/framework/src/main/java/cn/lili/modules/search/serviceimpl/CustomWordsServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/search/serviceimpl/CustomWordsServiceImpl.java @@ -1,20 +1,21 @@ package cn.lili.modules.search.serviceimpl; +import cn.lili.common.context.ThreadContextHolder; import cn.lili.common.enums.ResultCode; import cn.lili.common.exception.ServiceException; -import cn.lili.mybatis.util.PageUtil; import cn.lili.common.vo.PageVO; -import cn.lili.common.context.ThreadContextHolder; import cn.lili.modules.search.entity.dos.CustomWords; import cn.lili.modules.search.entity.vo.CustomWordsVO; import cn.lili.modules.search.mapper.CustomWordsMapper; import cn.lili.modules.search.service.CustomWordsService; +import cn.lili.mybatis.util.PageUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; import javax.servlet.http.HttpServletResponse; +import java.nio.charset.StandardCharsets; import java.util.List; /** @@ -32,14 +33,13 @@ public class CustomWordsServiceImpl extends ServiceImpl queryWrapper = new LambdaQueryWrapper().eq(CustomWords::getName, customWordsVO.getName()); + CustomWords one = this.getOne(queryWrapper, false); + if (one != null && one.getDisabled().equals(1)) { throw new ServiceException(ResultCode.CUSTOM_WORDS_EXIST_ERROR); + } else if (one != null && !one.getDisabled().equals(1)) { + this.remove(queryWrapper); } + customWordsVO.setDisabled(1); return this.save(customWordsVO); } @@ -113,7 +118,7 @@ public class CustomWordsServiceImpl extends ServiceImpl queryWrapper = new LambdaQueryWrapper().eq(CustomWords::getName, words); - int count = count(queryWrapper); + long count = count(queryWrapper); return count > 0; } } diff --git a/framework/src/main/java/cn/lili/modules/search/serviceimpl/EsGoodsIndexServiceImpl.java b/framework/src/main/java/cn/lili/modules/search/serviceimpl/EsGoodsIndexServiceImpl.java index e52a272f..fc6e9dd0 100644 --- a/framework/src/main/java/cn/lili/modules/search/serviceimpl/EsGoodsIndexServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/search/serviceimpl/EsGoodsIndexServiceImpl.java @@ -22,37 +22,38 @@ import cn.lili.modules.goods.entity.enums.GoodsAuthEnum; import cn.lili.modules.goods.entity.enums.GoodsStatusEnum; import cn.lili.modules.goods.entity.enums.GoodsWordsTypeEnum; import cn.lili.modules.goods.service.*; +import cn.lili.modules.promotion.entity.dos.BasePromotions; import cn.lili.modules.promotion.entity.dos.PromotionGoods; -import cn.lili.modules.promotion.entity.dto.BasePromotion; -import cn.lili.modules.promotion.entity.enums.PromotionStatusEnum; +import cn.lili.modules.promotion.entity.enums.PromotionsStatusEnum; import cn.lili.modules.promotion.service.PromotionService; -import cn.lili.modules.search.entity.dos.EsGoodsAttribute; +import cn.lili.modules.promotion.tools.PromotionTools; import cn.lili.modules.search.entity.dos.EsGoodsIndex; import cn.lili.modules.search.entity.dto.EsGoodsSearchDTO; import cn.lili.modules.search.repository.EsGoodsIndexRepository; import cn.lili.modules.search.service.EsGoodsIndexService; import cn.lili.modules.search.service.EsGoodsSearchService; -import cn.lili.modules.goods.entity.dos.StoreGoodsLabel; -import cn.lili.modules.goods.service.StoreGoodsLabelService; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.extern.slf4j.Slf4j; import org.assertj.core.util.IterableUtil; import org.elasticsearch.action.ActionListener; import org.elasticsearch.action.bulk.BulkRequest; +import org.elasticsearch.action.bulk.BulkResponse; import org.elasticsearch.action.update.UpdateRequest; import org.elasticsearch.client.RequestOptions; -import org.elasticsearch.client.indices.AnalyzeRequest; -import org.elasticsearch.client.indices.AnalyzeResponse; import org.elasticsearch.index.query.BoolQueryBuilder; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.index.query.TermQueryBuilder; import org.elasticsearch.index.reindex.BulkByScrollResponse; import org.elasticsearch.index.reindex.UpdateByQueryRequest; import org.elasticsearch.script.Script; +import org.elasticsearch.script.ScriptType; import org.mybatis.spring.MyBatisSystemException; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate; import org.springframework.data.elasticsearch.core.SearchHit; import org.springframework.data.elasticsearch.core.SearchPage; +import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder; import org.springframework.stereotype.Service; import org.springframework.util.ObjectUtils; @@ -102,6 +103,10 @@ public class EsGoodsIndexServiceImpl extends BaseElasticsearchService implements @Autowired private Cache cache; + @Autowired + @Qualifier("elasticsearchRestTemplate") + private ElasticsearchRestTemplate restTemplate; + @Override public void init() { //获取索引任务标识 @@ -121,22 +126,19 @@ public class EsGoodsIndexServiceImpl extends BaseElasticsearchService implements ThreadUtil.execAsync(() -> { try { - //查询商品信息 - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(GoodsSku::getIsAuth, GoodsAuthEnum.PASS.name()); - queryWrapper.eq(GoodsSku::getMarketEnable, GoodsStatusEnum.UPPER.name()); - List esGoodsIndices = new ArrayList<>(); LambdaQueryWrapper goodsQueryWrapper = new LambdaQueryWrapper<>(); - goodsQueryWrapper.eq(Goods::getIsAuth, GoodsAuthEnum.PASS.name()); + goodsQueryWrapper.eq(Goods::getAuthFlag, GoodsAuthEnum.PASS.name()); goodsQueryWrapper.eq(Goods::getMarketEnable, GoodsStatusEnum.UPPER.name()); + goodsQueryWrapper.eq(Goods::getDeleteFlag, false); for (Goods goods : goodsService.list(goodsQueryWrapper)) { LambdaQueryWrapper skuQueryWrapper = new LambdaQueryWrapper<>(); skuQueryWrapper.eq(GoodsSku::getGoodsId, goods.getId()); - skuQueryWrapper.eq(GoodsSku::getIsAuth, GoodsAuthEnum.PASS.name()); + skuQueryWrapper.eq(GoodsSku::getAuthFlag, GoodsAuthEnum.PASS.name()); skuQueryWrapper.eq(GoodsSku::getMarketEnable, GoodsStatusEnum.UPPER.name()); + skuQueryWrapper.eq(GoodsSku::getDeleteFlag, false); List goodsSkuList = goodsSkuService.list(skuQueryWrapper); int skuSource = 100; @@ -165,7 +167,7 @@ public class EsGoodsIndexServiceImpl extends BaseElasticsearchService implements public Map getProgress() { Map map = (Map) cache.get(CachePrefix.INIT_INDEX_PROCESS.getPrefix()); if (map == null) { - return null; + return Collections.emptyMap(); } Boolean flag = (Boolean) cache.get(CachePrefix.INIT_INDEX_FLAG.getPrefix()); map.put("flag", Boolean.TRUE.equals(flag) ? 1 : 0); @@ -176,24 +178,24 @@ public class EsGoodsIndexServiceImpl extends BaseElasticsearchService implements public void addIndex(EsGoodsIndex goods) { try { //分词器分词 - AnalyzeRequest analyzeRequest = AnalyzeRequest.withIndexAnalyzer(getIndexName(), "ik_max_word", goods.getGoodsName()); - AnalyzeResponse analyze = client.indices().analyze(analyzeRequest, RequestOptions.DEFAULT); - List tokens = analyze.getTokens(); +// AnalyzeRequest analyzeRequest = AnalyzeRequest.withIndexAnalyzer(getIndexName(), "ik_max_word", goods.getGoodsName()); +// AnalyzeResponse analyze = client.indices().analyze(analyzeRequest, RequestOptions.DEFAULT); +// List tokens = analyze.getTokens(); - if (goods.getAttrList() != null && !goods.getAttrList().isEmpty()) { - //保存分词 - for (EsGoodsAttribute esGoodsAttribute : goods.getAttrList()) { - wordsToDb(esGoodsAttribute.getValue()); - } - } - //分析词条 - for (AnalyzeResponse.AnalyzeToken token : tokens) { - //保存词条进入数据库 - wordsToDb(token.getTerm()); - } +// if (goods.getAttrList() != null && !goods.getAttrList().isEmpty()) { +// //保存分词 +// for (EsGoodsAttribute esGoodsAttribute : goods.getAttrList()) { +// wordsToDb(esGoodsAttribute.getValue()); +// } +// } +// //分析词条 +// for (AnalyzeResponse.AnalyzeToken token : tokens) { +// //保存词条进入数据库 +// wordsToDb(token.getTerm()); +// } //生成索引 goodsIndexRepository.save(goods); - } catch (IOException e) { + } catch (Exception e) { log.error("为商品[" + goods.getGoodsName() + "]生成索引异常", e); } } @@ -291,6 +293,19 @@ public class EsGoodsIndexServiceImpl extends BaseElasticsearchService implements goodsIndexRepository.deleteById(id); } + /** + * 删除索引 + * + * @param ids 商品索引id集合 + */ + @Override + public void deleteIndexByIds(List ids) { + NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder(); + queryBuilder.withQuery(QueryBuilders.termsQuery("id", ids.toArray())); + this.restTemplate.delete(queryBuilder.build(), EsGoodsIndex.class); + + } + @Override public void initIndex(List goodsIndexList) { if (goodsIndexList == null || goodsIndexList.isEmpty()) { @@ -320,7 +335,7 @@ public class EsGoodsIndexServiceImpl extends BaseElasticsearchService implements resultMap.put(KEY_SUCCESS, 0); resultMap.put(KEY_FAIL, 0); resultMap.put(KEY_PROCESSED, 0); - cache.put(CachePrefix.INIT_INDEX_PROCESS.getPrefix() + "", resultMap); + cache.put(CachePrefix.INIT_INDEX_PROCESS.getPrefix(), resultMap); if (!goodsIndexList.isEmpty()) { goodsIndexRepository.deleteAll(); for (EsGoodsIndex goodsIndex : goodsIndexList) { @@ -340,32 +355,60 @@ public class EsGoodsIndexServiceImpl extends BaseElasticsearchService implements } @Override - public void updateEsGoodsIndex(String id, BasePromotion promotion, String key, Double price) { + public UpdateRequest updateEsGoodsIndexPromotions(String id, BasePromotions promotion, String key) { EsGoodsIndex goodsIndex = findById(id); if (goodsIndex != null) { - //如果有促销活动开始,则将促销金额写入 - if (promotion.getPromotionStatus().equals(PromotionStatusEnum.START.name()) && price != null) { - goodsIndex.setPromotionPrice(price); - } else { - //否则促销金额为商品原价 - goodsIndex.setPromotionPrice(goodsIndex.getPrice()); - } //更新索引 - this.updateGoodsIndexPromotion(goodsIndex, key, promotion); + return this.updateGoodsIndexPromotion(goodsIndex, key, promotion); } else { log.error("更新索引商品促销信息失败!skuId 为 {} 的索引不存在!", id); + return null; } } + /** + * 更新商品索引的促销信息 + * + * @param ids skuId集合 + * @param promotion 促销信息 + * @param key 促销信息的key + */ @Override - public void updateEsGoodsIndexByList(List promotionGoodsList, BasePromotion promotion, String key) { + public void updateEsGoodsIndexPromotions(List ids, BasePromotions promotion, String key) { + BulkRequest bulkRequest = new BulkRequest(); + log.info("修改商品活动索引"); + log.info("商品ids: {}", ids); + log.info("活动关键字: {}", key); + log.info("活动: {}", promotion); + for (String id : ids) { + UpdateRequest updateRequest = this.updateEsGoodsIndexPromotions(id, promotion, key); + if (updateRequest != null) { + bulkRequest.add(updateRequest); + } + } + this.executeBulkUpdateRequest(bulkRequest); + } + + + @Override + public void updateEsGoodsIndexByList(List promotionGoodsList, BasePromotions promotion, String key) { + BulkRequest bulkRequest = new BulkRequest(); + log.info("修改商品活动索引"); + log.info("促销商品信息: {}", promotionGoodsList); + log.info("活动关键字: {}", key); + log.info("活动: {}", promotion); if (promotionGoodsList != null) { //循环更新 促销商品索引 for (PromotionGoods promotionGoods : promotionGoodsList) { - updateEsGoodsIndex(promotionGoods.getSkuId(), promotion, key, promotionGoods.getPrice()); + promotion.setStartTime(promotionGoods.getStartTime()); + promotion.setEndTime(promotionGoods.getEndTime()); + UpdateRequest updateRequest = this.updateEsGoodsIndexPromotions(promotionGoods.getSkuId(), promotion, key); + if (updateRequest != null) { + bulkRequest.add(updateRequest); + } } } - + this.executeBulkUpdateRequest(bulkRequest); } /** @@ -375,10 +418,10 @@ public class EsGoodsIndexServiceImpl extends BaseElasticsearchService implements * @param key 促销信息的key */ @Override - public void updateEsGoodsIndexAllByList(BasePromotion promotion, String key) { + public void updateEsGoodsIndexAllByList(BasePromotions promotion, String key) { List goodsIndices = new ArrayList<>(); //如果storeId不为空,则表示是店铺活动 - if (promotion.getStoreId() != null) { + if (promotion.getStoreId() != null && !promotion.getStoreId().equals(PromotionTools.PLATFORM_ID)) { EsGoodsSearchDTO searchDTO = new EsGoodsSearchDTO(); searchDTO.setStoreId(promotion.getStoreId()); //查询出店铺商品 @@ -389,13 +432,12 @@ public class EsGoodsIndexServiceImpl extends BaseElasticsearchService implements } else { //否则是平台活动 Iterable all = goodsIndexRepository.findAll(); -// 查询出全部商品 + //查询出全部商品 goodsIndices = new ArrayList<>(IterableUtil.toCollection(all)); } - //更新商品索引 - for (EsGoodsIndex goodsIndex : goodsIndices) { - this.updateGoodsIndexPromotion(goodsIndex, key, promotion); - } + List skuIds = goodsIndices.stream().map(EsGoodsIndex::getId).collect(Collectors.toList()); + this.deleteEsGoodsPromotionByPromotionId(skuIds, promotion.getId()); + this.updateEsGoodsIndexPromotions(skuIds, promotion, key); } @Override @@ -408,9 +450,9 @@ public class EsGoodsIndexServiceImpl extends BaseElasticsearchService implements Map promotionMap = goodsIndex.getPromotionMap(); if (promotionMap != null && !promotionMap.isEmpty()) { //如果存在同类型促销活动删除 - List collect = promotionMap.keySet().parallelStream().filter(i -> i.contains(promotionType.name())).collect(Collectors.toList()); + List collect = promotionMap.keySet().stream().filter(i -> i.contains(promotionType.name())).collect(Collectors.toList()); collect.forEach(promotionMap::remove); - goodsIndex.setPromotionMap(promotionMap); + goodsIndex.setPromotionMapJson(JSONUtil.toJsonStr(promotionMap)); updateIndex(goodsIndex); } } else { @@ -420,20 +462,33 @@ public class EsGoodsIndexServiceImpl extends BaseElasticsearchService implements } @Override - public void deleteEsGoodsPromotionByPromotionId(String skuId, String promotionId) { - if (skuId != null) { - EsGoodsIndex goodsIndex = findById(skuId); - //商品索引不为空 - if (goodsIndex != null) { - this.removePromotionByPromotionId(goodsIndex, promotionId); - } else { - log.error("更新索引商品促销信息失败!skuId 为 【{}】的索引不存在!", skuId); + public void deleteEsGoodsPromotionByPromotionId(List skuIds, String promotionId) { + BulkRequest bulkRequest = new BulkRequest(); + log.info("删除商品活动索引"); + log.info("商品skuIds: {}", skuIds); + log.info("活动Id: {}", promotionId); + if (skuIds != null && !skuIds.isEmpty()) { + for (String skuId : skuIds) { + EsGoodsIndex goodsIndex = findById(skuId); + //商品索引不为空 + if (goodsIndex != null) { + UpdateRequest updateRequest = this.removePromotionByPromotionId(goodsIndex, promotionId); + if (updateRequest != null) { + bulkRequest.add(updateRequest); + } + } else { + log.error("更新索引商品促销信息失败!skuId 为 【{}】的索引不存在!", skuId); + } } } else { for (EsGoodsIndex goodsIndex : this.goodsIndexRepository.findAll()) { - this.removePromotionByPromotionId(goodsIndex, promotionId); + UpdateRequest updateRequest = this.removePromotionByPromotionId(goodsIndex, promotionId); + if (updateRequest != null) { + bulkRequest.add(updateRequest); + } } } + this.executeBulkUpdateRequest(bulkRequest); } @@ -443,15 +498,16 @@ public class EsGoodsIndexServiceImpl extends BaseElasticsearchService implements * @param goodsIndex 索引 * @param promotionId 促销活动id */ - private void removePromotionByPromotionId(EsGoodsIndex goodsIndex, String promotionId) { + private UpdateRequest removePromotionByPromotionId(EsGoodsIndex goodsIndex, String promotionId) { Map promotionMap = goodsIndex.getPromotionMap(); if (promotionMap != null && !promotionMap.isEmpty()) { - //如果存在同类型促销活动删除 + //如果存在同促销ID的活动删除 List collect = promotionMap.keySet().stream().filter(i -> i.split("-")[1].equals(promotionId)).collect(Collectors.toList()); collect.forEach(promotionMap::remove); - goodsIndex.setPromotionMap(promotionMap); - updateIndex(goodsIndex); + goodsIndex.setPromotionMapJson(JSONUtil.toJsonStr(promotionMap)); + return this.getGoodsIndexPromotionUpdateRequest(goodsIndex.getId(), promotionMap); } + return null; } /** @@ -465,13 +521,10 @@ public class EsGoodsIndexServiceImpl extends BaseElasticsearchService implements //获取商品索引 if (promotionMap != null && !promotionMap.isEmpty()) { //促销不为空则进行清洗 - for (Map.Entry entry : promotionMap.entrySet()) { - BasePromotion promotion = (BasePromotion) entry.getValue(); - //判定条件为活动已结束 - if (promotion.getEndTime().getTime() > DateUtil.date().getTime()) { - promotionMap.remove(entry.getKey()); - } - } + promotionMap.entrySet().removeIf(i -> { + BasePromotions promotion = (BasePromotions) i.getValue(); + return promotion.getEndTime() != null && promotion.getEndTime().getTime() < DateUtil.date().getTime(); + }); } } goodsIndexRepository.saveAll(all); @@ -527,26 +580,26 @@ public class EsGoodsIndexServiceImpl extends BaseElasticsearchService implements List promotionIds = new ArrayList<>(); //写入促销id for (String key : keyCollect) { - BasePromotion promotion = (BasePromotion) promotionMap.get(key); + BasePromotions promotion = (BasePromotions) promotionMap.get(key); promotionIds.add(promotion.getId()); } return promotionIds; } /** - * 重置当前商品索引 + * 获取临时拼装的商品索引 * * @param goodsSku 商品sku信息 * @param goodsParamDTOS 商品参数 * @return 商品索引 */ @Override - public EsGoodsIndex resetEsGoodsIndex(GoodsSku goodsSku, List goodsParamDTOS) { + public EsGoodsIndex getTempEsGoodsIndex(GoodsSku goodsSku, List goodsParamDTOS) { EsGoodsIndex index = new EsGoodsIndex(goodsSku, goodsParamDTOS); //获取活动信息 - Map goodsCurrentPromotionMap = promotionService.getGoodsCurrentPromotionMap(index); + Map goodsCurrentPromotionMap = promotionService.getGoodsPromotionMap(index); //写入促销信息 - index.setPromotionMap(goodsCurrentPromotionMap); + index.setPromotionMapJson(JSONUtil.toJsonStr(goodsCurrentPromotionMap)); return index; } @@ -557,11 +610,7 @@ public class EsGoodsIndexServiceImpl extends BaseElasticsearchService implements * @param key 关键字 * @param promotion 活动 */ - private void updateGoodsIndexPromotion(EsGoodsIndex goodsIndex, String key, BasePromotion promotion) { - log.info("修改商品活动索引"); - log.info("商品索引: {}", goodsIndex); - log.info("关键字: {}", key); - log.info("活动: {}", promotion); + private UpdateRequest updateGoodsIndexPromotion(EsGoodsIndex goodsIndex, String key, BasePromotions promotion) { Map promotionMap; //数据非空处理,如果空给一个新的信息 if (goodsIndex.getPromotionMap() == null || goodsIndex.getPromotionMap().isEmpty()) { @@ -570,22 +619,52 @@ public class EsGoodsIndexServiceImpl extends BaseElasticsearchService implements promotionMap = goodsIndex.getPromotionMap(); } //如果活动已结束 - if (promotion.getPromotionStatus().equals(PromotionStatusEnum.END.name()) || promotion.getPromotionStatus().equals(PromotionStatusEnum.CLOSE.name())) { - //如果存在活动 - if (promotionMap.containsKey(key)) { - //删除活动 - promotionMap.remove(key); - } else { - //不存在则说明是秒杀活动,尝试删除秒杀信息 - this.removePromotionKey(key, promotionMap, PromotionTypeEnum.SECKILL.name()); - } + if (promotion.getPromotionStatus().equals(PromotionsStatusEnum.END.name()) || promotion.getPromotionStatus().equals(PromotionsStatusEnum.CLOSE.name())) {//如果存在活动 + //删除活动 + promotionMap.remove(key); } else { - //添加促销活动前,如果是同一时间只可以有一个的活动,但商品索引的促销活动里存在其他(同一时间只可以有一个)的活动,则清除 - this.removePromotionKey(key, promotionMap, PromotionTypeEnum.PINTUAN.name(), PromotionTypeEnum.SECKILL.name(), PromotionTypeEnum.FULL_DISCOUNT.name()); promotionMap.put(key, promotion); } - goodsIndex.setPromotionMap(promotionMap); - updateIndex(goodsIndex); + return this.getGoodsIndexPromotionUpdateRequest(goodsIndex.getId(), promotionMap); + } + + /** + * 以更新部分字段的方式更新索引促销信息 + * + * @param id 索引id + * @param promotionMap 促销信息 + */ + private UpdateRequest getGoodsIndexPromotionUpdateRequest(String id, Map promotionMap) { + UpdateRequest updateRequest = new UpdateRequest(); + updateRequest.index(getIndexName()); + updateRequest.id(id); + updateRequest.retryOnConflict(5); + Map params = new HashMap<>(); + params.put("promotionMap", JSONUtil.toJsonStr(promotionMap)); + Script script = new Script(ScriptType.INLINE, "painless", "ctx._source.promotionMapJson=params.promotionMap;", params); + updateRequest.script(script); + return updateRequest; + } + + /** + * 执行批量更新商品索引 + * + * @param bulkRequest 批量请求 + */ + private void executeBulkUpdateRequest(BulkRequest bulkRequest) { + if (bulkRequest.requests().isEmpty()) { + return; + } + try { + BulkResponse responses = this.client.bulk(bulkRequest, RequestOptions.DEFAULT); + if (responses.hasFailures()) { + log.info("批量更新商品索引的促销信息中出现部分异常:{}", responses.buildFailureMessage()); + } else { + log.info("批量更新商品索引的促销信息结果:{}", responses.status()); + } + } catch (IOException e) { + log.error("批量更新商品索引的促销信息出现异常!", e); + } } /** @@ -677,8 +756,8 @@ public class EsGoodsIndexServiceImpl extends BaseElasticsearchService implements } } //促销索引 - Map goodsCurrentPromotionMap = promotionService.getGoodsCurrentPromotionMap(index); - index.setPromotionMap(goodsCurrentPromotionMap); + Map goodsCurrentPromotionMap = promotionService.getGoodsPromotionMap(index); + index.setPromotionMapJson(JSONUtil.toJsonStr(goodsCurrentPromotionMap)); return index; } @@ -686,7 +765,7 @@ public class EsGoodsIndexServiceImpl extends BaseElasticsearchService implements return new ActionListener() { @Override public void onResponse(BulkByScrollResponse bulkByScrollResponse) { - log.debug("UpdateByQueryResponse: {}", bulkByScrollResponse); + log.info("UpdateByQueryResponse: {}", bulkByScrollResponse); } @Override diff --git a/framework/src/main/java/cn/lili/modules/search/serviceimpl/EsGoodsSearchServiceImpl.java b/framework/src/main/java/cn/lili/modules/search/serviceimpl/EsGoodsSearchServiceImpl.java index 6dedfa97..29e58226 100644 --- a/framework/src/main/java/cn/lili/modules/search/serviceimpl/EsGoodsSearchServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/search/serviceimpl/EsGoodsSearchServiceImpl.java @@ -15,6 +15,7 @@ import cn.lili.modules.search.entity.dto.HotWordsDTO; import cn.lili.modules.search.entity.dto.ParamOptions; import cn.lili.modules.search.entity.dto.SelectorOptions; import cn.lili.modules.search.service.EsGoodsSearchService; +import com.alibaba.druid.util.StringUtils; import lombok.extern.slf4j.Slf4j; import org.apache.lucene.search.join.ScoreMode; import org.elasticsearch.common.lucene.search.function.FieldValueFactorFunction; @@ -34,6 +35,7 @@ import org.elasticsearch.search.aggregations.bucket.terms.Terms; import org.elasticsearch.search.sort.SortBuilders; import org.elasticsearch.search.sort.SortOrder; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate; @@ -70,6 +72,7 @@ public class EsGoodsSearchServiceImpl implements EsGoodsSearchService { * ES */ @Autowired + @Qualifier("elasticsearchRestTemplate") private ElasticsearchRestTemplate restTemplate; /** * 缓存 @@ -112,6 +115,16 @@ public class EsGoodsSearchServiceImpl implements EsGoodsSearchService { cache.incrementScore(CachePrefix.HOT_WORD.getPrefix(), hotWords.getKeywords(), hotWords.getPoint()); } + /** + * 删除热门关键词 + * + * @param keywords 热词 + */ + @Override + public void deleteHotWords(String keywords) { + cache.zRemove(CachePrefix.HOT_WORD.getPrefix(), keywords); + } + @Override public EsGoodsRelatedInfo getSelector(EsGoodsSearchDTO goodsSearch, PageVO pageVo) { NativeSearchQueryBuilder builder = createSearchQueryBuilder(goodsSearch, null); @@ -145,6 +158,17 @@ public class EsGoodsSearchServiceImpl implements EsGoodsSearchService { return restTemplate.multiGet(build, EsGoodsIndex.class, restTemplate.getIndexCoordinatesFor(EsGoodsIndex.class)); } + /** + * 根据id获取商品索引 + * + * @param id 商品skuId + * @return 商品索引 + */ + @Override + public EsGoodsIndex getEsGoodsById(String id) { + return this.restTemplate.get(id, EsGoodsIndex.class); + } + /** * 转换搜索结果为聚合商品展示信息 * @@ -199,6 +223,7 @@ public class EsGoodsSearchServiceImpl implements EsGoodsSearchService { for (int i = 0; i < brandBuckets.size(); i++) { String brandId = brandBuckets.get(i).getKey().toString(); //当商品品牌id为0时,代表商品没有选择品牌,所以过滤掉品牌选择器 + //当品牌id为空并且 if (brandId.equals("0") || (CharSequenceUtil.isNotEmpty(goodsSearch.getBrandId()) && Arrays.asList(goodsSearch.getBrandId().split("@")).contains(brandId))) { @@ -208,6 +233,9 @@ public class EsGoodsSearchServiceImpl implements EsGoodsSearchService { String brandName = ""; if (brandBuckets.get(i).getAggregations() != null && brandBuckets.get(i).getAggregations().get(ATTR_BRAND_NAME) != null) { brandName = this.getAggregationsBrandOptions(brandBuckets.get(i).getAggregations().get(ATTR_BRAND_NAME)); + if (StringUtils.isEmpty(brandName)) { + continue; + } } String brandUrl = ""; @@ -215,6 +243,9 @@ public class EsGoodsSearchServiceImpl implements EsGoodsSearchService { brandUrlBuckets.get(i).getAggregations() != null && brandUrlBuckets.get(i).getAggregations().get(ATTR_BRAND_URL) != null) { brandUrl = this.getAggregationsBrandOptions(brandUrlBuckets.get(i).getAggregations().get(ATTR_BRAND_URL)); + if (StringUtils.isEmpty(brandUrl)) { + continue; + } } SelectorOptions so = new SelectorOptions(); so.setName(brandName); @@ -359,7 +390,7 @@ public class EsGoodsSearchServiceImpl implements EsGoodsSearchService { //未上架的商品不显示 filterBuilder.must(QueryBuilders.matchQuery("marketEnable", GoodsStatusEnum.UPPER.name())); //待审核和审核不通过的商品不显示 - filterBuilder.must(QueryBuilders.matchQuery("isAuth", GoodsAuthEnum.PASS.name())); + filterBuilder.must(QueryBuilders.matchQuery("authFlag", GoodsAuthEnum.PASS.name())); //关键字检索 diff --git a/framework/src/main/java/cn/lili/modules/search/utils/EsIndexUtil.java b/framework/src/main/java/cn/lili/modules/search/utils/EsIndexUtil.java index e514f011..1f65638c 100644 --- a/framework/src/main/java/cn/lili/modules/search/utils/EsIndexUtil.java +++ b/framework/src/main/java/cn/lili/modules/search/utils/EsIndexUtil.java @@ -16,8 +16,8 @@ public class EsIndexUtil { private static final String IGNORE_FIELD = "serialVersionUID,promotionMap,id,goodsId"; public static Map getUpdateIndexFieldsMap(EsGoodsIndex queryGoodsIndex, EsGoodsIndex updateGoodsIndex) { - Map queryFieldsMap = new HashMap<>(); - Map updateFieldsMap = new HashMap<>(); + Map queryFieldsMap = new HashMap<>(); + Map updateFieldsMap = new HashMap<>(); for (Map.Entry entry : ReflectUtil.getFieldMap(EsGoodsIndex.class).entrySet()) { Object queryFieldValue = ReflectUtil.getFieldValue(queryGoodsIndex, entry.getValue()); @@ -33,7 +33,7 @@ public class EsIndexUtil { return getUpdateIndexFieldsMap(queryFieldsMap, updateFieldsMap); } - public static Map getUpdateIndexFieldsMap(Map queryFieldsMap, Map updateFieldsMap) { + public static Map getUpdateIndexFieldsMap(Map queryFieldsMap, Map updateFieldsMap) { Map updateIndexMap = new HashMap<>(); updateIndexMap.put("queryFields", queryFieldsMap); diff --git a/framework/src/main/java/cn/lili/modules/system/sms/AliSmsUtil.java b/framework/src/main/java/cn/lili/modules/sms/AliSmsUtil.java similarity index 93% rename from framework/src/main/java/cn/lili/modules/system/sms/AliSmsUtil.java rename to framework/src/main/java/cn/lili/modules/sms/AliSmsUtil.java index 1cbdf9b3..abfab733 100644 --- a/framework/src/main/java/cn/lili/modules/system/sms/AliSmsUtil.java +++ b/framework/src/main/java/cn/lili/modules/sms/AliSmsUtil.java @@ -1,7 +1,7 @@ -package cn.lili.modules.system.sms; +package cn.lili.modules.sms; -import cn.lili.modules.message.entity.dos.SmsSign; -import cn.lili.modules.message.entity.dos.SmsTemplate; +import cn.lili.modules.sms.entity.dos.SmsSign; +import cn.lili.modules.sms.entity.dos.SmsTemplate; import java.util.Map; diff --git a/framework/src/main/java/cn/lili/modules/system/sms/SmsUtil.java b/framework/src/main/java/cn/lili/modules/sms/SmsUtil.java similarity index 93% rename from framework/src/main/java/cn/lili/modules/system/sms/SmsUtil.java rename to framework/src/main/java/cn/lili/modules/sms/SmsUtil.java index de177e12..fbafeb10 100644 --- a/framework/src/main/java/cn/lili/modules/system/sms/SmsUtil.java +++ b/framework/src/main/java/cn/lili/modules/sms/SmsUtil.java @@ -1,6 +1,6 @@ -package cn.lili.modules.system.sms; +package cn.lili.modules.sms; -import cn.lili.modules.verification.enums.VerificationEnums; +import cn.lili.modules.verification.entity.enums.VerificationEnums; import java.util.List; import java.util.Map; diff --git a/framework/src/main/java/cn/lili/modules/message/entity/dos/SmsReach.java b/framework/src/main/java/cn/lili/modules/sms/entity/dos/SmsReach.java similarity index 97% rename from framework/src/main/java/cn/lili/modules/message/entity/dos/SmsReach.java rename to framework/src/main/java/cn/lili/modules/sms/entity/dos/SmsReach.java index a3b94bba..09ec8dfa 100644 --- a/framework/src/main/java/cn/lili/modules/message/entity/dos/SmsReach.java +++ b/framework/src/main/java/cn/lili/modules/sms/entity/dos/SmsReach.java @@ -1,4 +1,4 @@ -package cn.lili.modules.message.entity.dos; +package cn.lili.modules.sms.entity.dos; import cn.lili.mybatis.BaseIdEntity; import com.baomidou.mybatisplus.annotation.FieldFill; diff --git a/framework/src/main/java/cn/lili/modules/message/entity/dos/SmsSign.java b/framework/src/main/java/cn/lili/modules/sms/entity/dos/SmsSign.java similarity index 90% rename from framework/src/main/java/cn/lili/modules/message/entity/dos/SmsSign.java rename to framework/src/main/java/cn/lili/modules/sms/entity/dos/SmsSign.java index e0bc8092..6c7ade7d 100644 --- a/framework/src/main/java/cn/lili/modules/message/entity/dos/SmsSign.java +++ b/framework/src/main/java/cn/lili/modules/sms/entity/dos/SmsSign.java @@ -1,5 +1,6 @@ -package cn.lili.modules.message.entity.dos; +package cn.lili.modules.sms.entity.dos; +import cn.lili.mybatis.BaseIdEntity; import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -15,7 +16,7 @@ import lombok.Data; @Data @TableName("li_sms_sign") @ApiModel(value = "短信签名") -public class SmsSign { +public class SmsSign extends BaseIdEntity { @ApiModelProperty(value = "签名名称", required = true) private String signName; diff --git a/framework/src/main/java/cn/lili/modules/message/entity/dos/SmsTemplate.java b/framework/src/main/java/cn/lili/modules/sms/entity/dos/SmsTemplate.java similarity index 96% rename from framework/src/main/java/cn/lili/modules/message/entity/dos/SmsTemplate.java rename to framework/src/main/java/cn/lili/modules/sms/entity/dos/SmsTemplate.java index ac6c3bdc..855721f0 100644 --- a/framework/src/main/java/cn/lili/modules/message/entity/dos/SmsTemplate.java +++ b/framework/src/main/java/cn/lili/modules/sms/entity/dos/SmsTemplate.java @@ -1,4 +1,4 @@ -package cn.lili.modules.message.entity.dos; +package cn.lili.modules.sms.entity.dos; import cn.lili.mybatis.BaseIdEntity; import com.baomidou.mybatisplus.annotation.TableName; diff --git a/framework/src/main/java/cn/lili/modules/message/entity/dto/SmsReachDTO.java b/framework/src/main/java/cn/lili/modules/sms/entity/dto/SmsReachDTO.java similarity index 67% rename from framework/src/main/java/cn/lili/modules/message/entity/dto/SmsReachDTO.java rename to framework/src/main/java/cn/lili/modules/sms/entity/dto/SmsReachDTO.java index 14ac747f..8081387d 100644 --- a/framework/src/main/java/cn/lili/modules/message/entity/dto/SmsReachDTO.java +++ b/framework/src/main/java/cn/lili/modules/sms/entity/dto/SmsReachDTO.java @@ -1,6 +1,6 @@ -package cn.lili.modules.message.entity.dto; +package cn.lili.modules.sms.entity.dto; -import cn.lili.modules.message.entity.dos.SmsReach; +import cn.lili.modules.sms.entity.dos.SmsReach; import lombok.Data; import java.util.List; diff --git a/framework/src/main/java/cn/lili/modules/system/sms/impl/SmsUtilAliImplService.java b/framework/src/main/java/cn/lili/modules/sms/impl/SmsUtilAliImplService.java similarity index 97% rename from framework/src/main/java/cn/lili/modules/system/sms/impl/SmsUtilAliImplService.java rename to framework/src/main/java/cn/lili/modules/sms/impl/SmsUtilAliImplService.java index ad7776b4..19e999b9 100644 --- a/framework/src/main/java/cn/lili/modules/system/sms/impl/SmsUtilAliImplService.java +++ b/framework/src/main/java/cn/lili/modules/sms/impl/SmsUtilAliImplService.java @@ -1,4 +1,4 @@ -package cn.lili.modules.system.sms.impl; +package cn.lili.modules.sms.impl; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONUtil; @@ -6,22 +6,22 @@ import cn.lili.cache.Cache; import cn.lili.cache.CachePrefix; import cn.lili.common.enums.ResultCode; import cn.lili.common.exception.ServiceException; -import cn.lili.common.security.context.UserContext; -import cn.lili.modules.system.sms.AliSmsUtil; -import cn.lili.modules.system.sms.SmsUtil; -import cn.lili.common.utils.CommonUtil; -import cn.lili.modules.verification.enums.VerificationEnums; import cn.lili.common.properties.SmsTemplateProperties; import cn.lili.common.properties.SystemSettingProperties; +import cn.lili.common.security.context.UserContext; import cn.lili.common.utils.Base64Utils; +import cn.lili.common.utils.CommonUtil; import cn.lili.modules.member.entity.dos.Member; import cn.lili.modules.member.service.MemberService; -import cn.lili.modules.message.entity.dos.SmsSign; -import cn.lili.modules.message.entity.dos.SmsTemplate; +import cn.lili.modules.sms.AliSmsUtil; +import cn.lili.modules.sms.SmsUtil; +import cn.lili.modules.sms.entity.dos.SmsSign; +import cn.lili.modules.sms.entity.dos.SmsTemplate; import cn.lili.modules.system.entity.dos.Setting; import cn.lili.modules.system.entity.dto.SmsSetting; import cn.lili.modules.system.entity.enums.SettingEnum; import cn.lili.modules.system.service.SettingService; +import cn.lili.modules.verification.entity.enums.VerificationEnums; import com.aliyun.dysmsapi20170525.models.*; import com.aliyun.teaopenapi.models.Config; import com.google.gson.Gson; @@ -155,7 +155,7 @@ public class SmsUtilAliImplService implements SmsUtil, AliSmsUtil { try { SendSmsResponse response = client.sendSms(sendSmsRequest); } catch (Exception e) { - log.error("发送短信错误",e); + log.error("发送短信错误", e); } } @@ -191,7 +191,7 @@ public class SmsUtilAliImplService implements SmsUtil, AliSmsUtil { try { client.sendBatchSms(sendBatchSmsRequest); } catch (Exception e) { - log.error("批量发送短信错误",e); + log.error("批量发送短信错误", e); } } @@ -363,7 +363,7 @@ public class SmsUtilAliImplService implements SmsUtil, AliSmsUtil { config.endpoint = "dysmsapi.aliyuncs.com"; return new com.aliyun.dysmsapi20170525.Client(config); } catch (Exception e) { - log.error("短信初始化错误",e); + log.error("短信初始化错误", e); } return null; } @@ -377,6 +377,6 @@ public class SmsUtilAliImplService implements SmsUtil, AliSmsUtil { * @return */ static String cacheKey(VerificationEnums verificationEnums, String mobile, String uuid) { - return CachePrefix.SMS_CODE.getPrefix() + verificationEnums.name() + mobile; + return CachePrefix.SMS_CODE.getPrefix() + verificationEnums.name() + uuid + mobile; } } diff --git a/framework/src/main/java/cn/lili/modules/message/mapper/SmsReachMapper.java b/framework/src/main/java/cn/lili/modules/sms/mapper/SmsReachMapper.java similarity index 70% rename from framework/src/main/java/cn/lili/modules/message/mapper/SmsReachMapper.java rename to framework/src/main/java/cn/lili/modules/sms/mapper/SmsReachMapper.java index 5856195e..dc59ac51 100644 --- a/framework/src/main/java/cn/lili/modules/message/mapper/SmsReachMapper.java +++ b/framework/src/main/java/cn/lili/modules/sms/mapper/SmsReachMapper.java @@ -1,6 +1,6 @@ -package cn.lili.modules.message.mapper; +package cn.lili.modules.sms.mapper; -import cn.lili.modules.message.entity.dos.SmsReach; +import cn.lili.modules.sms.entity.dos.SmsReach; import com.baomidou.mybatisplus.core.mapper.BaseMapper; /** diff --git a/framework/src/main/java/cn/lili/modules/message/mapper/SmsSignMapper.java b/framework/src/main/java/cn/lili/modules/sms/mapper/SmsSignMapper.java similarity index 70% rename from framework/src/main/java/cn/lili/modules/message/mapper/SmsSignMapper.java rename to framework/src/main/java/cn/lili/modules/sms/mapper/SmsSignMapper.java index b600937f..fd566fb1 100644 --- a/framework/src/main/java/cn/lili/modules/message/mapper/SmsSignMapper.java +++ b/framework/src/main/java/cn/lili/modules/sms/mapper/SmsSignMapper.java @@ -1,6 +1,6 @@ -package cn.lili.modules.message.mapper; +package cn.lili.modules.sms.mapper; -import cn.lili.modules.message.entity.dos.SmsSign; +import cn.lili.modules.sms.entity.dos.SmsSign; import com.baomidou.mybatisplus.core.mapper.BaseMapper; /** diff --git a/framework/src/main/java/cn/lili/modules/message/mapper/SmsTemplateMapper.java b/framework/src/main/java/cn/lili/modules/sms/mapper/SmsTemplateMapper.java similarity index 69% rename from framework/src/main/java/cn/lili/modules/message/mapper/SmsTemplateMapper.java rename to framework/src/main/java/cn/lili/modules/sms/mapper/SmsTemplateMapper.java index 78638896..ea92d487 100644 --- a/framework/src/main/java/cn/lili/modules/message/mapper/SmsTemplateMapper.java +++ b/framework/src/main/java/cn/lili/modules/sms/mapper/SmsTemplateMapper.java @@ -1,6 +1,6 @@ -package cn.lili.modules.message.mapper; +package cn.lili.modules.sms.mapper; -import cn.lili.modules.message.entity.dos.SmsTemplate; +import cn.lili.modules.sms.entity.dos.SmsTemplate; import com.baomidou.mybatisplus.core.mapper.BaseMapper; /** diff --git a/framework/src/main/java/cn/lili/modules/message/service/SmsReachService.java b/framework/src/main/java/cn/lili/modules/sms/service/SmsReachService.java similarity index 81% rename from framework/src/main/java/cn/lili/modules/message/service/SmsReachService.java rename to framework/src/main/java/cn/lili/modules/sms/service/SmsReachService.java index 3d9794f5..d93b6ef5 100644 --- a/framework/src/main/java/cn/lili/modules/message/service/SmsReachService.java +++ b/framework/src/main/java/cn/lili/modules/sms/service/SmsReachService.java @@ -1,6 +1,6 @@ -package cn.lili.modules.message.service; +package cn.lili.modules.sms.service; -import cn.lili.modules.message.entity.dos.SmsReach; +import cn.lili.modules.sms.entity.dos.SmsReach; import com.baomidou.mybatisplus.extension.service.IService; import java.util.List; diff --git a/framework/src/main/java/cn/lili/modules/message/service/SmsSignService.java b/framework/src/main/java/cn/lili/modules/sms/service/SmsSignService.java similarity index 91% rename from framework/src/main/java/cn/lili/modules/message/service/SmsSignService.java rename to framework/src/main/java/cn/lili/modules/sms/service/SmsSignService.java index 18439ae5..cada47a6 100644 --- a/framework/src/main/java/cn/lili/modules/message/service/SmsSignService.java +++ b/framework/src/main/java/cn/lili/modules/sms/service/SmsSignService.java @@ -1,7 +1,7 @@ -package cn.lili.modules.message.service; +package cn.lili.modules.sms.service; import cn.lili.common.vo.PageVO; -import cn.lili.modules.message.entity.dos.SmsSign; +import cn.lili.modules.sms.entity.dos.SmsSign; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; diff --git a/framework/src/main/java/cn/lili/modules/message/service/SmsTemplateService.java b/framework/src/main/java/cn/lili/modules/sms/service/SmsTemplateService.java similarity index 91% rename from framework/src/main/java/cn/lili/modules/message/service/SmsTemplateService.java rename to framework/src/main/java/cn/lili/modules/sms/service/SmsTemplateService.java index 7fd1e946..b2ccf111 100644 --- a/framework/src/main/java/cn/lili/modules/message/service/SmsTemplateService.java +++ b/framework/src/main/java/cn/lili/modules/sms/service/SmsTemplateService.java @@ -1,7 +1,7 @@ -package cn.lili.modules.message.service; +package cn.lili.modules.sms.service; import cn.lili.common.vo.PageVO; -import cn.lili.modules.message.entity.dos.SmsTemplate; +import cn.lili.modules.sms.entity.dos.SmsTemplate; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; diff --git a/framework/src/main/java/cn/lili/modules/message/serviceimpl/SmsReachServiceImpl.java b/framework/src/main/java/cn/lili/modules/sms/serviceimpl/SmsReachServiceImpl.java similarity index 84% rename from framework/src/main/java/cn/lili/modules/message/serviceimpl/SmsReachServiceImpl.java rename to framework/src/main/java/cn/lili/modules/sms/serviceimpl/SmsReachServiceImpl.java index 6863ba39..8b8d26d5 100644 --- a/framework/src/main/java/cn/lili/modules/message/serviceimpl/SmsReachServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/sms/serviceimpl/SmsReachServiceImpl.java @@ -1,14 +1,14 @@ -package cn.lili.modules.message.serviceimpl; +package cn.lili.modules.sms.serviceimpl; import cn.hutool.json.JSONUtil; +import cn.lili.common.properties.RocketmqCustomProperties; +import cn.lili.common.utils.BeanUtil; +import cn.lili.modules.sms.entity.dos.SmsReach; +import cn.lili.modules.sms.entity.dto.SmsReachDTO; +import cn.lili.modules.sms.mapper.SmsReachMapper; +import cn.lili.modules.sms.service.SmsReachService; import cn.lili.rocketmq.RocketmqSendCallbackBuilder; import cn.lili.rocketmq.tags.OtherTagsEnum; -import cn.lili.common.utils.BeanUtil; -import cn.lili.common.properties.RocketmqCustomProperties; -import cn.lili.modules.message.entity.dos.SmsReach; -import cn.lili.modules.message.entity.dto.SmsReachDTO; -import cn.lili.modules.message.mapper.SmsReachMapper; -import cn.lili.modules.message.service.SmsReachService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.apache.rocketmq.spring.core.RocketMQTemplate; import org.springframework.beans.factory.annotation.Autowired; diff --git a/framework/src/main/java/cn/lili/modules/message/serviceimpl/SmsSignServiceImpl.java b/framework/src/main/java/cn/lili/modules/sms/serviceimpl/SmsSignServiceImpl.java similarity index 91% rename from framework/src/main/java/cn/lili/modules/message/serviceimpl/SmsSignServiceImpl.java rename to framework/src/main/java/cn/lili/modules/sms/serviceimpl/SmsSignServiceImpl.java index 06717a3a..49b8faab 100644 --- a/framework/src/main/java/cn/lili/modules/message/serviceimpl/SmsSignServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/sms/serviceimpl/SmsSignServiceImpl.java @@ -1,13 +1,13 @@ -package cn.lili.modules.message.serviceimpl; +package cn.lili.modules.sms.serviceimpl; import cn.lili.common.enums.ResultCode; import cn.lili.common.exception.ServiceException; -import cn.lili.modules.system.sms.AliSmsUtil; -import cn.lili.mybatis.util.PageUtil; import cn.lili.common.vo.PageVO; -import cn.lili.modules.message.entity.dos.SmsSign; -import cn.lili.modules.message.mapper.SmsSignMapper; -import cn.lili.modules.message.service.SmsSignService; +import cn.lili.modules.sms.AliSmsUtil; +import cn.lili.modules.sms.entity.dos.SmsSign; +import cn.lili.modules.sms.mapper.SmsSignMapper; +import cn.lili.modules.sms.service.SmsSignService; +import cn.lili.mybatis.util.PageUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -65,7 +65,7 @@ public class SmsSignServiceImpl extends ServiceImpl impl try { Map map = new HashMap<>(16); //获取未审核通过的签名列表 - List list = list(new LambdaQueryWrapper().eq(SmsSign::getSignStatus, 0)); + List list = list(new LambdaQueryWrapper().ne(SmsSign::getSignStatus, 1)); //查询签名状态 for (SmsSign smsSign : list) { map = aliSmsUtil.querySmsSign(smsSign.getSignName()); diff --git a/framework/src/main/java/cn/lili/modules/message/serviceimpl/SmsTemplateServiceImpl.java b/framework/src/main/java/cn/lili/modules/sms/serviceimpl/SmsTemplateServiceImpl.java similarity index 92% rename from framework/src/main/java/cn/lili/modules/message/serviceimpl/SmsTemplateServiceImpl.java rename to framework/src/main/java/cn/lili/modules/sms/serviceimpl/SmsTemplateServiceImpl.java index 22fd9e4b..c5d8dddf 100644 --- a/framework/src/main/java/cn/lili/modules/message/serviceimpl/SmsTemplateServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/sms/serviceimpl/SmsTemplateServiceImpl.java @@ -1,11 +1,11 @@ -package cn.lili.modules.message.serviceimpl; +package cn.lili.modules.sms.serviceimpl; -import cn.lili.modules.system.sms.AliSmsUtil; -import cn.lili.mybatis.util.PageUtil; import cn.lili.common.vo.PageVO; -import cn.lili.modules.message.entity.dos.SmsTemplate; -import cn.lili.modules.message.mapper.SmsTemplateMapper; -import cn.lili.modules.message.service.SmsTemplateService; +import cn.lili.modules.sms.AliSmsUtil; +import cn.lili.modules.sms.entity.dos.SmsTemplate; +import cn.lili.modules.sms.mapper.SmsTemplateMapper; +import cn.lili.modules.sms.service.SmsTemplateService; +import cn.lili.mybatis.util.PageUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; diff --git a/framework/src/main/java/cn/lili/modules/statistics/aop/aspect/PageViewInterceptor.java b/framework/src/main/java/cn/lili/modules/statistics/aop/aspect/PageViewInterceptor.java index 37ff803e..491ceba5 100644 --- a/framework/src/main/java/cn/lili/modules/statistics/aop/aspect/PageViewInterceptor.java +++ b/framework/src/main/java/cn/lili/modules/statistics/aop/aspect/PageViewInterceptor.java @@ -3,9 +3,9 @@ package cn.lili.modules.statistics.aop.aspect; import cn.lili.cache.Cache; import cn.lili.cache.CachePrefix; import cn.lili.common.context.ThreadContextHolder; +import cn.lili.common.utils.IpUtils; import cn.lili.common.utils.SpelUtil; import cn.lili.common.vo.ResultMessage; -import cn.lili.common.utils.IpUtils; import cn.lili.modules.goods.entity.vos.GoodsSkuVO; import cn.lili.modules.statistics.aop.PageViewPoint; import cn.lili.modules.statistics.aop.enums.PageViewEnum; @@ -62,7 +62,12 @@ public class PageViewInterceptor { break; } case STORE: - Map map = spelFormat(point); + Map map = null; + try { + map = spelFormat(point); + } catch (Exception e) { + return; + } storeId = map.get("id"); break; default: diff --git a/framework/src/main/java/cn/lili/modules/statistics/entity/dos/MemberStatisticsData.java b/framework/src/main/java/cn/lili/modules/statistics/entity/dos/MemberStatisticsData.java index 39e90891..ad6df23d 100644 --- a/framework/src/main/java/cn/lili/modules/statistics/entity/dos/MemberStatisticsData.java +++ b/framework/src/main/java/cn/lili/modules/statistics/entity/dos/MemberStatisticsData.java @@ -27,13 +27,13 @@ public class MemberStatisticsData extends BaseIdEntity { private Date createDate; @ApiModelProperty(value = "当前会员数量") - private Integer memberCount; + private Long memberCount; @ApiModelProperty(value = "新增会员数量") - private Integer newlyAdded; + private Long newlyAdded; @ApiModelProperty(value = "当日活跃数量") - private Integer activeQuantity; + private Long activeQuantity; } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/statistics/entity/vo/IndexNoticeVO.java b/framework/src/main/java/cn/lili/modules/statistics/entity/vo/IndexNoticeVO.java index 56b3f0f5..beca7f8d 100644 --- a/framework/src/main/java/cn/lili/modules/statistics/entity/vo/IndexNoticeVO.java +++ b/framework/src/main/java/cn/lili/modules/statistics/entity/vo/IndexNoticeVO.java @@ -13,21 +13,21 @@ import lombok.Data; public class IndexNoticeVO { @ApiModelProperty(value = "待处理商品审核") - private Integer goods; + private Long goods; @ApiModelProperty(value = "待处理店铺入驻审核") - private Integer store; + private Long store; @ApiModelProperty(value = "待处理售后申请") - private Integer refund; + private Long refund; @ApiModelProperty(value = "待处理投诉审核") - private Integer complain; + private Long complain; @ApiModelProperty(value = "待处理分销员提现申请") - private Integer distributionCash; + private Long distributionCash; @ApiModelProperty(value = "待处理商家结算") - private Integer waitPayBill; + private Long waitPayBill; } diff --git a/framework/src/main/java/cn/lili/modules/statistics/entity/vo/IndexStatisticsVO.java b/framework/src/main/java/cn/lili/modules/statistics/entity/vo/IndexStatisticsVO.java index e449bd9e..3e5645a1 100644 --- a/framework/src/main/java/cn/lili/modules/statistics/entity/vo/IndexStatisticsVO.java +++ b/framework/src/main/java/cn/lili/modules/statistics/entity/vo/IndexStatisticsVO.java @@ -13,13 +13,13 @@ import lombok.Data; public class IndexStatisticsVO { @ApiModelProperty(value = "订单总数量") - private Integer orderNum; + private Long orderNum; @ApiModelProperty(value = "商品总数量") - private Integer goodsNum; + private Long goodsNum; @ApiModelProperty(value = "会员总数量") - private Integer memberNum; + private Long memberNum; @ApiModelProperty(value = "店铺总数量") - private Integer storeNum; + private Long storeNum; /** * 流量概括 @@ -41,13 +41,13 @@ public class IndexStatisticsVO { @ApiModelProperty(value = "今日下单金额") private Double todayOrderPrice; @ApiModelProperty(value = "今日新增会员数量") - private Integer todayMemberNum; + private Long todayMemberNum; @ApiModelProperty(value = "今日新增商品数量") - private Integer todayGoodsNum; + private Long todayGoodsNum; @ApiModelProperty(value = "今日新增店铺数量") - private Integer todayStoreNum; + private Long todayStoreNum; @ApiModelProperty(value = "今日新增评论数量") - private Integer todayMemberEvaluation; + private Long todayMemberEvaluation; @ApiModelProperty(value = "当前在线人数") private Long currentNumberPeopleOnline; } diff --git a/framework/src/main/java/cn/lili/modules/statistics/entity/vo/OrderOverviewVO.java b/framework/src/main/java/cn/lili/modules/statistics/entity/vo/OrderOverviewVO.java index ce3dbf16..3bf8f8b4 100644 --- a/framework/src/main/java/cn/lili/modules/statistics/entity/vo/OrderOverviewVO.java +++ b/framework/src/main/java/cn/lili/modules/statistics/entity/vo/OrderOverviewVO.java @@ -13,41 +13,41 @@ import lombok.Data; public class OrderOverviewVO { @ApiModelProperty(value = "UV人次") - private Integer uvNum = 0; + private Long uvNum; /** * 下单统计 */ @ApiModelProperty(value = "下单数量") - private Long orderNum = 0L; + private Long orderNum; @ApiModelProperty(value = "下单人数") - private Long orderMemberNum = 0L; + private Long orderMemberNum; @ApiModelProperty(value = "下单金额") - private Double orderAmount = 0D; + private Double orderAmount; /** * 付款统计 */ @ApiModelProperty(value = "付款订单数量") - private Long paymentOrderNum = 0L; + private Long paymentOrderNum; @ApiModelProperty(value = "付款人数") - private Long paymentsNum = 0L; + private Long paymentsNum; @ApiModelProperty(value = "付款金额") - private Double paymentAmount = 0D; + private Double paymentAmount; /** * 退单统计 */ @ApiModelProperty(value = "退单笔数") - private Long refundOrderNum = 0L; + private Long refundOrderNum; @ApiModelProperty(value = "退单金额") - private Double refundOrderPrice = 0D; + private Double refundOrderPrice; /** * 转换率 @@ -61,5 +61,66 @@ public class OrderOverviewVO { @ApiModelProperty(value = "整体转换率") private String overallConversionRate; + public Long getUvNum() { + if (uvNum == null) { + return 0L; + } + return uvNum; + } + public Long getOrderNum() { + if (orderNum == null) { + return 0L; + } + return orderNum; + } + + public Long getOrderMemberNum() { + if (orderMemberNum == null) { + return 0L; + } + return orderMemberNum; + } + + public Double getOrderAmount() { + if (orderAmount == null) { + return 0D; + } + return orderAmount; + } + + public Long getPaymentOrderNum() { + if (paymentOrderNum == null) { + return 0L; + } + return paymentOrderNum; + } + + public Long getPaymentsNum() { + if (paymentsNum == null) { + return 0L; + } + return paymentsNum; + } + + public Double getPaymentAmount() { + if (paymentAmount == null) { + return 0D; + } + return paymentAmount; + } + + public Long getRefundOrderNum() { + if (refundOrderNum == null) { + return 0L; + } + return refundOrderNum; + } + + public Double getRefundOrderPrice() { + if (refundOrderPrice == null) { + return 0D; + } + return refundOrderPrice; + } } diff --git a/framework/src/main/java/cn/lili/modules/statistics/entity/vo/StoreIndexStatisticsVO.java b/framework/src/main/java/cn/lili/modules/statistics/entity/vo/StoreIndexStatisticsVO.java index f4b013f0..d3d2d5d5 100644 --- a/framework/src/main/java/cn/lili/modules/statistics/entity/vo/StoreIndexStatisticsVO.java +++ b/framework/src/main/java/cn/lili/modules/statistics/entity/vo/StoreIndexStatisticsVO.java @@ -13,7 +13,7 @@ import lombok.Data; public class StoreIndexStatisticsVO { @ApiModelProperty(value = "商品总数量") - private Integer goodsNum; + private Long goodsNum; @ApiModelProperty(value = "订单总数量") private Integer orderNum; @ApiModelProperty(value = "订单总额") @@ -22,30 +22,30 @@ public class StoreIndexStatisticsVO { private Integer storeUV; @ApiModelProperty(value = "待付款订单数量") - private Integer unPaidOrder; + private Long unPaidOrder; @ApiModelProperty(value = "待发货订单数量") - private Integer unDeliveredOrder; + private Long unDeliveredOrder; @ApiModelProperty(value = "待收货订单数量") - private Integer deliveredOrder; + private Long deliveredOrder; @ApiModelProperty(value = "待处理退货数量") - private Integer returnGoods; + private Long returnGoods; @ApiModelProperty(value = "待处理退款数量") - private Integer returnMoney; + private Long returnMoney; @ApiModelProperty(value = "待回复评价数量") - private Integer memberEvaluation; + private Long memberEvaluation; @ApiModelProperty(value = "待处理交易投诉数量") - private Integer complaint; + private Long complaint; @ApiModelProperty(value = "待上架商品数量") - private Integer waitUpper; + private Long waitUpper; @ApiModelProperty(value = "待审核商品数量") - private Integer waitAuth; + private Long waitAuth; @ApiModelProperty(value = "可参与秒杀活动数量") - private Integer seckillNum; + private Long seckillNum; @ApiModelProperty(value = "未对账结算单数量") - private Integer waitPayBill; + private Long waitPayBill; } diff --git a/framework/src/main/java/cn/lili/modules/statistics/mapper/AfterSaleStatisticsMapper.java b/framework/src/main/java/cn/lili/modules/statistics/mapper/AfterSaleStatisticsMapper.java new file mode 100644 index 00000000..5a6437eb --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/statistics/mapper/AfterSaleStatisticsMapper.java @@ -0,0 +1,14 @@ +package cn.lili.modules.statistics.mapper; + +import cn.lili.modules.order.aftersale.entity.dos.AfterSale; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * 售后统计数据处理层 + * + * @author Bulbasaur + * @since 2020/11/17 7:34 下午 + */ +public interface AfterSaleStatisticsMapper extends BaseMapper { + +} \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/statistics/mapper/BillStatisticsMapper.java b/framework/src/main/java/cn/lili/modules/statistics/mapper/BillStatisticsMapper.java new file mode 100644 index 00000000..6a1f2cc2 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/statistics/mapper/BillStatisticsMapper.java @@ -0,0 +1,56 @@ +package cn.lili.modules.statistics.mapper; + + +import cn.lili.modules.store.entity.dos.Bill; +import cn.lili.modules.store.entity.vos.BillListVO; +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + +/** + * 结算单数据处理层 + * + * @author Chopper + * @since 2020/11/17 4:27 下午 + */ +public interface BillStatisticsMapper extends BaseMapper { + + /** + * 查询结算单分页 + * + * @param page 分页 + * @param queryWrapper 查询条件 + * @return 结算单分页 + */ + @Select("select b.id,b.sn,b.start_time,b.end_time,b.bill_status,b.store_name,b.bill_price,b.create_time from li_bill as b ${ew.customSqlSegment}") + IPage queryBillPage(IPage page, @Param(Constants.WRAPPER) Wrapper queryWrapper); + + /** + * 查询订单结算 + * + * @param queryWrapper 查询条件 + * @return 结算单 + */ + @Select("SELECT SUM( final_price ) AS orderPrice,SUM( commission_price ) AS commissionPrice" + + ",SUM( distribution_rebate ) AS distributionCommission,SUM( site_coupon_commission ) AS siteCouponCommission" + + ",SUM( point_settlement_price ) AS pointSettlementPrice " + + ",SUM( kanjia_settlement_price ) AS kanjiaSettlementPrice " + + ",SUM( bill_price ) AS billPrice " + + "FROM li_store_flow ${ew.customSqlSegment}") + Bill getOrderBill(@Param(Constants.WRAPPER) QueryWrapper queryWrapper); + + /** + * 查询退款结算单 + * + * @param queryWrapper 查询条件 + * @return 结算单 + */ + @Select("SELECT SUM( final_price ) AS refundPrice,SUM( commission_price ) AS refundCommissionPrice" + + ",SUM( distribution_rebate ) AS distributionRefundCommission,SUM( site_coupon_commission ) AS siteCouponRefundCommission" + + ",SUM( bill_price ) AS billPrice FROM li_store_flow ${ew.customSqlSegment}") + Bill getRefundBill(@Param(Constants.WRAPPER) QueryWrapper queryWrapper); +} \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/statistics/mapper/DistributionCashStatisticsMapper.java b/framework/src/main/java/cn/lili/modules/statistics/mapper/DistributionCashStatisticsMapper.java new file mode 100644 index 00000000..4506aeb3 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/statistics/mapper/DistributionCashStatisticsMapper.java @@ -0,0 +1,14 @@ +package cn.lili.modules.statistics.mapper; + +import cn.lili.modules.distribution.entity.dos.DistributionCash; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * 分销佣金数据统计 + * + * @author pikachu + * @since 2020-03-26 18:45:56 + */ +public interface DistributionCashStatisticsMapper extends BaseMapper { + +} \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/statistics/mapper/GoodsStatisticsMapper.java b/framework/src/main/java/cn/lili/modules/statistics/mapper/GoodsStatisticsMapper.java new file mode 100644 index 00000000..ae685686 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/statistics/mapper/GoodsStatisticsMapper.java @@ -0,0 +1,14 @@ +package cn.lili.modules.statistics.mapper; + +import cn.lili.modules.goods.entity.dos.Goods; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * 商品统计数据处理层 + * + * @author Bulbasaur + * @since 2020/11/17 7:34 下午 + */ +public interface GoodsStatisticsMapper extends BaseMapper { + +} \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/statistics/mapper/MemberEvaluationStatisticsMapper.java b/framework/src/main/java/cn/lili/modules/statistics/mapper/MemberEvaluationStatisticsMapper.java new file mode 100644 index 00000000..4fe62595 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/statistics/mapper/MemberEvaluationStatisticsMapper.java @@ -0,0 +1,64 @@ +package cn.lili.modules.statistics.mapper; + +import cn.lili.modules.member.entity.dos.MemberEvaluation; +import cn.lili.modules.member.entity.vo.MemberEvaluationListVO; +import cn.lili.modules.member.entity.vo.StoreRatingVO; +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + +import java.util.List; +import java.util.Map; + +/** + * 会员商品评价数据处理层 + * + * @author Bulbasaur + * @since 2020-02-25 14:10:16 + */ +public interface MemberEvaluationStatisticsMapper extends BaseMapper { + + + /** + * 会员评价分页 + * + * @param page 分页 + * @param queryWrapper 查询条件 + * @return 会员评价分页 + */ + @Select("select me.* from li_member_evaluation as me ${ew.customSqlSegment}") + IPage getMemberEvaluationList(IPage page, @Param(Constants.WRAPPER) Wrapper queryWrapper); + + /** + * 评价数量 + * + * @param goodsId 商品ID + * @return 会员评价 + */ + @Select("select grade,count(1) as num from li_member_evaluation Where goods_id=#{goodsId} and status='OPEN' GROUP BY grade") + List> getEvaluationNumber(String goodsId); + + /** + * 获取店铺评分 + * + * @param queryWrapper 查询条件 + * @return 店铺评分 + */ + @Select("SELECT round( AVG( delivery_score ), 2 ) AS delivery_score" + + ",round( AVG( description_score ), 2 ) AS description_score" + + ",round( AVG( service_score ), 2 ) AS service_score " + + "FROM li_member_evaluation ${ew.customSqlSegment}") + StoreRatingVO getStoreRatingVO(@Param(Constants.WRAPPER) Wrapper queryWrapper); + + /** + * 商品会员评价数量 + * + * @param queryWrapper 查询条件 + * @return 评价数量 + */ + @Select("SELECT goods_id,COUNT(goods_id) AS num FROM li_member_evaluation GROUP BY goods_id") + List> memberEvaluationNum(@Param(Constants.WRAPPER) Wrapper queryWrapper); +} \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/statistics/mapper/MemberStatisticsDataMapper.java b/framework/src/main/java/cn/lili/modules/statistics/mapper/MemberStatisticsMapper.java similarity index 59% rename from framework/src/main/java/cn/lili/modules/statistics/mapper/MemberStatisticsDataMapper.java rename to framework/src/main/java/cn/lili/modules/statistics/mapper/MemberStatisticsMapper.java index 685fd906..e578425d 100644 --- a/framework/src/main/java/cn/lili/modules/statistics/mapper/MemberStatisticsDataMapper.java +++ b/framework/src/main/java/cn/lili/modules/statistics/mapper/MemberStatisticsMapper.java @@ -1,5 +1,6 @@ package cn.lili.modules.statistics.mapper; +import cn.lili.modules.member.entity.vo.MemberDistributionVO; import cn.lili.modules.statistics.entity.dos.MemberStatisticsData; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -7,13 +8,15 @@ import com.baomidou.mybatisplus.core.toolkit.Constants; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** * 会员统计数据处理层 * * @author Bulbasaur * @since 2020/11/17 7:34 下午 */ -public interface MemberStatisticsDataMapper extends BaseMapper { +public interface MemberStatisticsMapper extends BaseMapper { /** * 获取会员统计数量 @@ -22,6 +25,13 @@ public interface MemberStatisticsDataMapper extends BaseMapper distribution(); } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/statistics/mapper/OrderComplaintStatisticsMapper.java b/framework/src/main/java/cn/lili/modules/statistics/mapper/OrderComplaintStatisticsMapper.java new file mode 100644 index 00000000..0b1d1637 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/statistics/mapper/OrderComplaintStatisticsMapper.java @@ -0,0 +1,13 @@ +package cn.lili.modules.statistics.mapper; + +import cn.lili.modules.order.order.entity.dos.OrderComplaint; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * 订单投诉数据处理层 + * + * @author paulG + * @since 2020/12/5 + **/ +public interface OrderComplaintStatisticsMapper extends BaseMapper { +} diff --git a/framework/src/main/java/cn/lili/modules/statistics/mapper/OrderStatisticsDataMapper.java b/framework/src/main/java/cn/lili/modules/statistics/mapper/OrderStatisticsDataMapper.java deleted file mode 100644 index 69948a49..00000000 --- a/framework/src/main/java/cn/lili/modules/statistics/mapper/OrderStatisticsDataMapper.java +++ /dev/null @@ -1,38 +0,0 @@ -package cn.lili.modules.statistics.mapper; - -import cn.lili.modules.order.order.entity.dos.StoreFlow; -import cn.lili.modules.statistics.entity.vo.OrderStatisticsDataVO; -import com.baomidou.mybatisplus.core.conditions.Wrapper; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.baomidou.mybatisplus.core.toolkit.Constants; -import org.apache.ibatis.annotations.Param; -import org.apache.ibatis.annotations.Select; - -import java.util.List; - -/** - * 订单统计数据处理层 - * - * @author Bulbasaur - * @since 2020/11/17 7:34 下午 - */ -public interface OrderStatisticsDataMapper extends BaseMapper { - - /** - * 获取订单统计数据 - * @param queryWrapper 查询条件 - * @return 订单统计列表 - */ - @Select("SELECT DATE_FORMAT(create_time,'%Y-%m-%d') AS create_time,sum(flow_price) AS price FROM li_order " + - " ${ew.customSqlSegment}") - List getOrderStatisticsData(@Param(Constants.WRAPPER) Wrapper queryWrapper); - - /** - * 订单数量 - * @param queryWrapper 查询条件 - * @return 订单数量 - */ - @Select("SELECT count(0) FROM li_order ${ew.customSqlSegment}") - Integer count(@Param(Constants.WRAPPER) Wrapper queryWrapper); - -} \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/statistics/mapper/OrderStatisticsMapper.java b/framework/src/main/java/cn/lili/modules/statistics/mapper/OrderStatisticsMapper.java new file mode 100644 index 00000000..f1fff3c1 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/statistics/mapper/OrderStatisticsMapper.java @@ -0,0 +1,63 @@ +package cn.lili.modules.statistics.mapper; + +import cn.lili.modules.order.order.entity.dos.Order; +import cn.lili.modules.order.order.entity.vo.OrderSimpleVO; +import cn.lili.modules.statistics.entity.vo.OrderStatisticsDataVO; +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + +import java.util.List; + +/** + * 订单统计数据处理层 + * + * @author Bulbasaur + * @since 2020/11/17 7:34 下午 + */ +public interface OrderStatisticsMapper extends BaseMapper { + + /** + * 获取订单统计数据 + * + * @param queryWrapper 查询条件 + * @return 订单统计列表 + */ + @Select("SELECT DATE_FORMAT(create_time,'%Y-%m-%d') AS create_time,sum(flow_price) AS price FROM li_order " + + " ${ew.customSqlSegment}") + List getOrderStatisticsData(@Param(Constants.WRAPPER) Wrapper queryWrapper); + + /** + * 订单数量 + * + * @param queryWrapper 查询条件 + * @return 订单数量 + */ + @Select("SELECT count(0) FROM li_order ${ew.customSqlSegment}") + Integer count(@Param(Constants.WRAPPER) Wrapper queryWrapper); + + /** + * 查询订单简短信息分页 + * + * @param page 分页 + * @param queryWrapper 查询条件 + * @return 简短订单分页 + */ + @Select("select o.sn,o.flow_price,o.create_time,o.order_status,o.pay_status,o.payment_method,o.payment_time,o.member_name,o.store_name as store_name,o.store_id as store_id,o.client_type,o.order_type,o.deliver_status " + + ",GROUP_CONCAT(oi.goods_id) as group_goods_id," + + " GROUP_CONCAT(oi.sku_id) as group_sku_id," + + " GROUP_CONCAT(oi.num) as group_num" + + ",GROUP_CONCAT(oi.image) as group_images" + + ",GROUP_CONCAT(oi.goods_name) as group_name " + + ",GROUP_CONCAT(oi.after_sale_status) as group_after_sale_status" + + ",GROUP_CONCAT(oi.complain_status) as group_complain_status" + + ",GROUP_CONCAT(oi.comment_status) as group_comment_status" + + ",GROUP_CONCAT(oi.sn) as group_order_items_sn " + + ",GROUP_CONCAT(oi.goods_price) as group_goods_price " + + " FROM li_order o INNER JOIN li_order_item AS oi on o.sn = oi.order_sn ${ew.customSqlSegment} ") + IPage queryByParams(IPage page, @Param(Constants.WRAPPER) Wrapper queryWrapper); + +} \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/statistics/mapper/PlatformViewDataMapper.java b/framework/src/main/java/cn/lili/modules/statistics/mapper/PlatformViewMapper.java similarity index 90% rename from framework/src/main/java/cn/lili/modules/statistics/mapper/PlatformViewDataMapper.java rename to framework/src/main/java/cn/lili/modules/statistics/mapper/PlatformViewMapper.java index 3109b05f..6eeea405 100644 --- a/framework/src/main/java/cn/lili/modules/statistics/mapper/PlatformViewDataMapper.java +++ b/framework/src/main/java/cn/lili/modules/statistics/mapper/PlatformViewMapper.java @@ -13,7 +13,7 @@ import org.apache.ibatis.annotations.Select; * @author Bulbasaur * @since 2020/11/17 7:34 下午 */ -public interface PlatformViewDataMapper extends BaseMapper { +public interface PlatformViewMapper extends BaseMapper { /** * UV流量统计 * diff --git a/framework/src/main/java/cn/lili/modules/statistics/mapper/RefundOrderStatisticsDataMapper.java b/framework/src/main/java/cn/lili/modules/statistics/mapper/RefundOrderStatisticsMapper.java similarity index 92% rename from framework/src/main/java/cn/lili/modules/statistics/mapper/RefundOrderStatisticsDataMapper.java rename to framework/src/main/java/cn/lili/modules/statistics/mapper/RefundOrderStatisticsMapper.java index e4843c19..035a0fb3 100644 --- a/framework/src/main/java/cn/lili/modules/statistics/mapper/RefundOrderStatisticsDataMapper.java +++ b/framework/src/main/java/cn/lili/modules/statistics/mapper/RefundOrderStatisticsMapper.java @@ -15,7 +15,7 @@ import org.apache.ibatis.annotations.Select; * @author Bulbasaur * @since 2020/12/10 11:22 */ -public interface RefundOrderStatisticsDataMapper extends BaseMapper { +public interface RefundOrderStatisticsMapper extends BaseMapper { /** * 退款统计 diff --git a/framework/src/main/java/cn/lili/modules/statistics/mapper/SeckillStatisticsMapper.java b/framework/src/main/java/cn/lili/modules/statistics/mapper/SeckillStatisticsMapper.java new file mode 100644 index 00000000..d191dacd --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/statistics/mapper/SeckillStatisticsMapper.java @@ -0,0 +1,13 @@ +package cn.lili.modules.statistics.mapper; + +import cn.lili.modules.promotion.entity.dos.Seckill; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * 秒杀活动统计 + * + * @author Chopper + * @since 2020/8/21 + */ +public interface SeckillStatisticsMapper extends BaseMapper { +} \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/statistics/mapper/GoodsStatisticsDataMapper.java b/framework/src/main/java/cn/lili/modules/statistics/mapper/StoreFlowStatisticsMapper.java similarity index 71% rename from framework/src/main/java/cn/lili/modules/statistics/mapper/GoodsStatisticsDataMapper.java rename to framework/src/main/java/cn/lili/modules/statistics/mapper/StoreFlowStatisticsMapper.java index 226e253d..55496565 100644 --- a/framework/src/main/java/cn/lili/modules/statistics/mapper/GoodsStatisticsDataMapper.java +++ b/framework/src/main/java/cn/lili/modules/statistics/mapper/StoreFlowStatisticsMapper.java @@ -3,6 +3,7 @@ package cn.lili.modules.statistics.mapper; import cn.lili.modules.order.order.entity.dos.StoreFlow; import cn.lili.modules.statistics.entity.vo.CategoryStatisticsDataVO; import cn.lili.modules.statistics.entity.vo.GoodsStatisticsDataVO; +import cn.lili.modules.statistics.entity.vo.StoreStatisticsDataVO; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -18,7 +19,7 @@ import java.util.List; * @author Bulbasaur * @since 2020/11/17 7:34 下午 */ -public interface GoodsStatisticsDataMapper extends BaseMapper { +public interface StoreFlowStatisticsMapper extends BaseMapper { /** * 商品统计 @@ -38,4 +39,17 @@ public interface GoodsStatisticsDataMapper extends BaseMapper { */ @Select("SELECT category_id,category_name,SUM(price) AS price,SUM(num) AS num FROM li_store_flow ${ew.customSqlSegment}") List getCateGoryStatisticsData(@Param(Constants.WRAPPER) Wrapper queryWrapper); + + + + /** + * 店铺统计列表 + * + * @param page 分页 + * @param queryWrapper 查询参数 + * @return 店铺统计列表 + */ + @Select("SELECT store_id AS storeId,store_name AS storeName,SUM(final_price) AS price,SUM(num) AS num FROM li_store_flow ${ew.customSqlSegment}") + List getStoreStatisticsData(IPage page, @Param(Constants.WRAPPER) Wrapper queryWrapper); + } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/statistics/mapper/StoreStatisticsDataMapper.java b/framework/src/main/java/cn/lili/modules/statistics/mapper/StoreStatisticsDataMapper.java deleted file mode 100644 index 825bbd83..00000000 --- a/framework/src/main/java/cn/lili/modules/statistics/mapper/StoreStatisticsDataMapper.java +++ /dev/null @@ -1,33 +0,0 @@ -package cn.lili.modules.statistics.mapper; - -import cn.lili.modules.order.order.entity.dos.StoreFlow; -import cn.lili.modules.statistics.entity.vo.GoodsStatisticsDataVO; -import cn.lili.modules.statistics.entity.vo.StoreStatisticsDataVO; -import com.baomidou.mybatisplus.core.conditions.Wrapper; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.core.toolkit.Constants; -import org.apache.ibatis.annotations.Param; -import org.apache.ibatis.annotations.Select; - -import java.util.List; - -/** - * 店铺统计数据处理层 - * - * @author Bulbasaur - * @since 2020/11/17 7:34 下午 - */ -public interface StoreStatisticsDataMapper extends BaseMapper { - - /** - * 店铺统计列表 - * - * @param page 分页 - * @param queryWrapper 查询参数 - * @return 店铺统计列表 - */ - @Select("SELECT store_id AS storeId,store_name AS storeName,SUM(final_price) AS price,SUM(num) AS num FROM li_store_flow ${ew.customSqlSegment}") - List getStoreStatisticsData(IPage page, @Param(Constants.WRAPPER) Wrapper queryWrapper); - -} \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/statistics/mapper/StoreStatisticsMapper.java b/framework/src/main/java/cn/lili/modules/statistics/mapper/StoreStatisticsMapper.java new file mode 100644 index 00000000..6404593a --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/statistics/mapper/StoreStatisticsMapper.java @@ -0,0 +1,14 @@ +package cn.lili.modules.statistics.mapper; + +import cn.lili.modules.store.entity.dos.Store; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * 店铺统计数据处理层 + * + * @author Bulbasaur + * @since 2020/11/17 7:34 下午 + */ +public interface StoreStatisticsMapper extends BaseMapper { + +} \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/statistics/service/AfterSaleStatisticsService.java b/framework/src/main/java/cn/lili/modules/statistics/service/AfterSaleStatisticsService.java new file mode 100644 index 00000000..d1c11230 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/statistics/service/AfterSaleStatisticsService.java @@ -0,0 +1,33 @@ +package cn.lili.modules.statistics.service; + +import cn.lili.common.vo.PageVO; +import cn.lili.modules.order.aftersale.entity.dos.AfterSale; +import cn.lili.modules.statistics.entity.dto.StatisticsQueryParam; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * 售后统计业务层 + * + * @author Bulbasaur + * @since 2020/12/9 11:06 + */ +public interface AfterSaleStatisticsService extends IService { + + /** + * 获取待处理售后数量 + * + * @param serviceType 售后类型 + * @return 待处理售后数量 + */ + long applyNum(String serviceType); + + /** + * 获取统计的售后 + * + * @param statisticsQueryParam 统计搜索参数 + * @param pageVO 分页 + * @return 售后分页列表 + */ + IPage getStatistics(StatisticsQueryParam statisticsQueryParam, PageVO pageVO); +} \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/statistics/service/BillStatisticsService.java b/framework/src/main/java/cn/lili/modules/statistics/service/BillStatisticsService.java new file mode 100644 index 00000000..07d6ea3f --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/statistics/service/BillStatisticsService.java @@ -0,0 +1,22 @@ +package cn.lili.modules.statistics.service; + +import cn.lili.modules.store.entity.dos.Bill; +import cn.lili.modules.store.entity.enums.BillStatusEnum; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * 结算单统计 + * + * @author Chopper + * @since 2020/11/17 4:28 下午 + */ +public interface BillStatisticsService extends IService { + + /** + * 商家待结算数量 + * + * @param billStatusEnum 结算单类型 + * @return 待结算商家数量 + */ + long billNum(BillStatusEnum billStatusEnum); +} \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/statistics/service/DistributionCashStatisticsService.java b/framework/src/main/java/cn/lili/modules/statistics/service/DistributionCashStatisticsService.java new file mode 100644 index 00000000..c7d6bad3 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/statistics/service/DistributionCashStatisticsService.java @@ -0,0 +1,20 @@ +package cn.lili.modules.statistics.service; + +import cn.lili.modules.distribution.entity.dos.DistributionCash; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * 分销佣金统计 + * + * @author pikachu + * @since 2020-03-14 23:04:56 + */ +public interface DistributionCashStatisticsService extends IService { + + /** + * 待处理分销员提现申请数量 + * + * @return 待处理分销员提现申请数量 + */ + long newDistributionCash(); +} \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/statistics/service/GoodsStatisticsDataService.java b/framework/src/main/java/cn/lili/modules/statistics/service/GoodsStatisticsDataService.java deleted file mode 100644 index 0752a97c..00000000 --- a/framework/src/main/java/cn/lili/modules/statistics/service/GoodsStatisticsDataService.java +++ /dev/null @@ -1,38 +0,0 @@ -package cn.lili.modules.statistics.service; - -import cn.lili.modules.order.order.entity.dos.StoreFlow; -import cn.lili.modules.statistics.entity.dto.GoodsStatisticsQueryParam; -import cn.lili.modules.statistics.entity.vo.CategoryStatisticsDataVO; -import cn.lili.modules.statistics.entity.vo.GoodsStatisticsDataVO; -import com.baomidou.mybatisplus.extension.service.IService; - -import java.util.List; - -/** - * 商品统计业务层 - * - * @author Bulbasaur - * @since 2020/12/9 11:06 - */ -public interface GoodsStatisticsDataService extends IService { - - /** - * 查询热卖商品 - * 查询TOP100的商品 - * - * @param goodsStatisticsQueryParam 查询参数 - * @param num 数量 - * @return - */ - List getGoodsStatisticsData(GoodsStatisticsQueryParam goodsStatisticsQueryParam, Integer num); - - /** - * 查询行业统计 - * 根据商品一级分类ID查询 - * - * @param goodsStatisticsQueryParam 查询参数 - * @return - */ - List getCategoryStatisticsData(GoodsStatisticsQueryParam goodsStatisticsQueryParam); - -} \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/statistics/service/GoodsStatisticsService.java b/framework/src/main/java/cn/lili/modules/statistics/service/GoodsStatisticsService.java new file mode 100644 index 00000000..d790047a --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/statistics/service/GoodsStatisticsService.java @@ -0,0 +1,31 @@ +package cn.lili.modules.statistics.service; + +import cn.lili.modules.goods.entity.dos.Goods; +import cn.lili.modules.goods.entity.enums.GoodsAuthEnum; +import cn.lili.modules.goods.entity.enums.GoodsStatusEnum; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * 商品统计业务层 + * + * @author Bulbasaur + * @since 2020/12/9 11:06 + */ +public interface GoodsStatisticsService extends IService { + + /** + * 获取所有的已上架的商品数量 + * + * @param goodsStatusEnum 商品状态枚举 + * @param goodsAuthEnum 商品审核枚举 + * @return 所有的已上架的商品数量 + */ + long goodsNum(GoodsStatusEnum goodsStatusEnum, GoodsAuthEnum goodsAuthEnum); + + /** + * 获取今天的已上架的商品数量 + * + * @return 今天的已上架的商品数量 + */ + long todayUpperNum(); +} \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/statistics/service/MemberEvaluationStatisticsService.java b/framework/src/main/java/cn/lili/modules/statistics/service/MemberEvaluationStatisticsService.java new file mode 100644 index 00000000..585c754c --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/statistics/service/MemberEvaluationStatisticsService.java @@ -0,0 +1,28 @@ +package cn.lili.modules.statistics.service; + +import cn.lili.modules.member.entity.dos.MemberEvaluation; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * 会员商品评价统计 + * + * @author Bulbasaur + * @since 2020-02-25 14:10:16 + */ +public interface MemberEvaluationStatisticsService extends IService { + + /** + * 获取今天新增的评价数量 + * + * @return 今日评价数量 + */ + long todayMemberEvaluation(); + + /** + * 获取等待回复评价数量 + * + * @return 等待回复评价数量 + */ + long getWaitReplyNum(); + +} \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/statistics/service/MemberStatisticsDataService.java b/framework/src/main/java/cn/lili/modules/statistics/service/MemberStatisticsService.java similarity index 70% rename from framework/src/main/java/cn/lili/modules/statistics/service/MemberStatisticsDataService.java rename to framework/src/main/java/cn/lili/modules/statistics/service/MemberStatisticsService.java index 5cfb280f..95292cfc 100644 --- a/framework/src/main/java/cn/lili/modules/statistics/service/MemberStatisticsDataService.java +++ b/framework/src/main/java/cn/lili/modules/statistics/service/MemberStatisticsService.java @@ -1,5 +1,6 @@ package cn.lili.modules.statistics.service; +import cn.lili.modules.member.entity.vo.MemberDistributionVO; import cn.lili.modules.statistics.entity.dos.MemberStatisticsData; import cn.lili.modules.statistics.entity.dto.StatisticsQueryParam; import com.baomidou.mybatisplus.extension.service.IService; @@ -13,21 +14,21 @@ import java.util.List; * @author Bulbasaur * @since 2020/12/9 11:06 */ -public interface MemberStatisticsDataService extends IService { +public interface MemberStatisticsService extends IService { /** * 获取会员数量 * * @return 会员统计 */ - Integer getMemberCount(); + long getMemberCount(); /** * 获取今日新增会员数量 * * @return 今日新增会员数量 */ - Integer todayMemberNum(); + long todayMemberNum(); /** * 获取指定结束时间前的会员数量 @@ -35,7 +36,7 @@ public interface MemberStatisticsDataService extends IService statistics(StatisticsQueryParam statisticsQueryParam); + + + /** + * 查看会员数据分布 + * + * @return 会员数据分布 + */ + List distribution(); + } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/statistics/service/OrderComplaintStatisticsService.java b/framework/src/main/java/cn/lili/modules/statistics/service/OrderComplaintStatisticsService.java new file mode 100644 index 00000000..95834e38 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/statistics/service/OrderComplaintStatisticsService.java @@ -0,0 +1,20 @@ +package cn.lili.modules.statistics.service; + +import cn.lili.modules.order.order.entity.dos.OrderComplaint; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * 交易投诉统计 + * + * @author paulG + * @since 2020/12/4 + **/ +public interface OrderComplaintStatisticsService extends IService { + + /** + * 待处理投诉数量 + * + * @return 待处理投诉数量 + */ + long waitComplainNum(); +} diff --git a/framework/src/main/java/cn/lili/modules/statistics/service/OrderStatisticsDataService.java b/framework/src/main/java/cn/lili/modules/statistics/service/OrderStatisticsService.java similarity index 65% rename from framework/src/main/java/cn/lili/modules/statistics/service/OrderStatisticsDataService.java rename to framework/src/main/java/cn/lili/modules/statistics/service/OrderStatisticsService.java index cdc192f5..7fb074dd 100644 --- a/framework/src/main/java/cn/lili/modules/statistics/service/OrderStatisticsDataService.java +++ b/framework/src/main/java/cn/lili/modules/statistics/service/OrderStatisticsService.java @@ -1,13 +1,15 @@ package cn.lili.modules.statistics.service; -import cn.lili.modules.order.order.entity.dos.StoreFlow; +import cn.lili.common.vo.PageVO; +import cn.lili.modules.order.order.entity.dos.Order; +import cn.lili.modules.order.order.entity.vo.OrderSimpleVO; import cn.lili.modules.statistics.entity.dto.StatisticsQueryParam; import cn.lili.modules.statistics.entity.vo.OrderOverviewVO; import cn.lili.modules.statistics.entity.vo.OrderStatisticsDataVO; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; import java.util.List; -import java.util.Map; /** * 订单统计业务层 @@ -15,7 +17,7 @@ import java.util.Map; * @author Bulbasaur * @since 2020/12/9 11:06 */ -public interface OrderStatisticsDataService extends IService { +public interface OrderStatisticsService extends IService { /** * 订单统计概览 @@ -25,28 +27,13 @@ public interface OrderStatisticsDataService extends IService { */ OrderOverviewVO overview(StatisticsQueryParam statisticsQueryParam); - /** - * 查询订单统计金额 - * - * @return 订单统计 - */ - Map getStoreOrderStatisticsPrice(); - - - /** - * 查询今日付款统计 - * - * @return 订单统计金额 - */ - Map getOrderStatisticsPrice(); - /** * 获取订单总数量 * * @param orderStatus 订单状态 * @return 订单总数量 */ - Integer orderNum(String orderStatus); + long orderNum(String orderStatus); /** * 图表统计 @@ -56,4 +43,12 @@ public interface OrderStatisticsDataService extends IService { */ List statisticsChart(StatisticsQueryParam statisticsQueryParam); + /** + * 获取统计的订单 + * + * @param statisticsQueryParam + * @param pageVO + * @return + */ + IPage getStatistics(StatisticsQueryParam statisticsQueryParam, PageVO pageVO); } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/statistics/service/PlatformViewDataService.java b/framework/src/main/java/cn/lili/modules/statistics/service/PlatformViewService.java similarity index 93% rename from framework/src/main/java/cn/lili/modules/statistics/service/PlatformViewDataService.java rename to framework/src/main/java/cn/lili/modules/statistics/service/PlatformViewService.java index 526ccdb4..789cb119 100644 --- a/framework/src/main/java/cn/lili/modules/statistics/service/PlatformViewDataService.java +++ b/framework/src/main/java/cn/lili/modules/statistics/service/PlatformViewService.java @@ -15,7 +15,7 @@ import java.util.List; * @author Bulbasaur * @since 2020/12/9 11:06 */ -public interface PlatformViewDataService extends IService { +public interface PlatformViewService extends IService { /** diff --git a/framework/src/main/java/cn/lili/modules/statistics/service/SeckillStatisticsService.java b/framework/src/main/java/cn/lili/modules/statistics/service/SeckillStatisticsService.java new file mode 100644 index 00000000..fdef0654 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/statistics/service/SeckillStatisticsService.java @@ -0,0 +1,22 @@ +package cn.lili.modules.statistics.service; + +import cn.lili.modules.promotion.entity.dos.Seckill; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * 秒杀统计 + * + * @author Chopper + * @since 2020/11/18 9:45 上午 + */ +public interface SeckillStatisticsService extends IService { + + + /** + * 获取当前可参与的活动数量 + * + * @return 可参与活动数量 + */ + long getApplyNum(); + +} \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/statistics/service/StoreFlowStatisticsService.java b/framework/src/main/java/cn/lili/modules/statistics/service/StoreFlowStatisticsService.java new file mode 100644 index 00000000..9f99d7dd --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/statistics/service/StoreFlowStatisticsService.java @@ -0,0 +1,69 @@ +package cn.lili.modules.statistics.service; + +import cn.lili.modules.order.order.entity.dos.StoreFlow; +import cn.lili.modules.statistics.entity.dto.GoodsStatisticsQueryParam; +import cn.lili.modules.statistics.entity.dto.StatisticsQueryParam; +import cn.lili.modules.statistics.entity.vo.CategoryStatisticsDataVO; +import cn.lili.modules.statistics.entity.vo.GoodsStatisticsDataVO; +import cn.lili.modules.statistics.entity.vo.OrderOverviewVO; +import cn.lili.modules.statistics.entity.vo.StoreStatisticsDataVO; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.Date; +import java.util.List; +import java.util.Map; + +/** + * 流水统计业务层 + * + * @author Bulbasaur + * @since 2020/12/9 11:06 + */ +public interface StoreFlowStatisticsService extends IService { + + /** + * 查询热卖商品 + * 查询TOP100的商品 + * + * @param goodsStatisticsQueryParam 查询参数 + * @param num 数量 + * @return + */ + List getGoodsStatisticsData(GoodsStatisticsQueryParam goodsStatisticsQueryParam, Integer num); + + /** + * 查询行业统计 + * 根据商品一级分类ID查询 + * + * @param goodsStatisticsQueryParam 查询参数 + * @return + */ + List getCategoryStatisticsData(GoodsStatisticsQueryParam goodsStatisticsQueryParam); + + /** + * 店铺流水 根据店铺 统计 + * + * @param page + * @param queryWrapper + * @return + */ + List getStoreStatisticsData(Page page, QueryWrapper queryWrapper); + + /** + * 查询今日付款统计 + * + * @return 订单统计金额 + */ + Map getOrderStatisticsPrice(); + + /** + * 订单统计,数据概览 + * + * @param dates + * @param orderOverviewVO + * @param statisticsQueryParam + */ + void overview(Date[] dates, OrderOverviewVO orderOverviewVO, StatisticsQueryParam statisticsQueryParam); +} \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/statistics/service/StoreStatisticsService.java b/framework/src/main/java/cn/lili/modules/statistics/service/StoreStatisticsService.java new file mode 100644 index 00000000..1a90c9f6 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/statistics/service/StoreStatisticsService.java @@ -0,0 +1,34 @@ +package cn.lili.modules.statistics.service; + +import cn.lili.modules.store.entity.dos.Store; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * 店铺统计业务层 + * + * @author Bulbasaur + * @since 2020/12/9 11:06 + */ +public interface StoreStatisticsService extends IService { + + /** + * 获取待审核店铺数量 + * + * @return 待审核店铺数量 + */ + long auditNum(); + + /** + * 获取所有店铺数量 + * + * @return 店铺总数 + */ + long storeNum(); + + /** + * 获取今天的店铺数量 + * + * @return 今天的店铺数量 + */ + long todayStoreNum(); +} \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/AfterSaleStatisticsServiceImpl.java b/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/AfterSaleStatisticsServiceImpl.java new file mode 100644 index 00000000..21456526 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/AfterSaleStatisticsServiceImpl.java @@ -0,0 +1,57 @@ +package cn.lili.modules.statistics.serviceimpl; + +import cn.hutool.core.text.CharSequenceUtil; +import cn.lili.common.security.AuthUser; +import cn.lili.common.security.context.UserContext; +import cn.lili.common.security.enums.UserEnums; +import cn.lili.common.vo.PageVO; +import cn.lili.modules.order.aftersale.entity.dos.AfterSale; +import cn.lili.modules.order.trade.entity.enums.AfterSaleStatusEnum; +import cn.lili.modules.statistics.entity.dto.StatisticsQueryParam; +import cn.lili.modules.statistics.mapper.AfterSaleStatisticsMapper; +import cn.lili.modules.statistics.service.AfterSaleStatisticsService; +import cn.lili.modules.statistics.util.StatisticsDateUtil; +import cn.lili.mybatis.util.PageUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +import java.util.Date; +import java.util.Objects; + +/** + * 售后统计业务层实现 + * + * @author Bulbasaur + * @since 2020/12/9 11:30 + */ +@Service +public class AfterSaleStatisticsServiceImpl extends ServiceImpl implements AfterSaleStatisticsService { + + + @Override + public long applyNum(String serviceType) { + AuthUser authUser = Objects.requireNonNull(UserContext.getCurrentUser()); + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(); + queryWrapper.eq(AfterSale::getServiceStatus, AfterSaleStatusEnum.APPLY.name()); + queryWrapper.eq(CharSequenceUtil.isNotEmpty(serviceType), AfterSale::getServiceType, serviceType); + queryWrapper.eq(CharSequenceUtil.equals(authUser.getRole().name(), UserEnums.STORE.name()), + AfterSale::getStoreId, authUser.getStoreId()); + return this.count(queryWrapper); + } + + + @Override + public IPage getStatistics(StatisticsQueryParam statisticsQueryParam, PageVO pageVO) { + + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + Date[] dates = StatisticsDateUtil.getDateArray(statisticsQueryParam); + queryWrapper.between(AfterSale::getCreateTime, dates[0], dates[1]); + queryWrapper.eq(CharSequenceUtil.isNotEmpty(statisticsQueryParam.getStoreId()), AfterSale::getStoreId, statisticsQueryParam.getStoreId()); + + return this.page(PageUtil.initPage(pageVO), queryWrapper); + } + +} diff --git a/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/BillStatisticsServiceImpl.java b/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/BillStatisticsServiceImpl.java new file mode 100644 index 00000000..622ff256 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/BillStatisticsServiceImpl.java @@ -0,0 +1,39 @@ +package cn.lili.modules.statistics.serviceimpl; + +import cn.hutool.core.text.CharSequenceUtil; +import cn.lili.common.security.context.UserContext; +import cn.lili.common.security.enums.UserEnums; +import cn.lili.modules.statistics.mapper.BillStatisticsMapper; +import cn.lili.modules.statistics.service.BillStatisticsService; +import cn.lili.modules.store.entity.dos.Bill; +import cn.lili.modules.store.entity.enums.BillStatusEnum; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Objects; + +/** + * 结算单统计 + * + * @author Chopper + * @since 2020/11/17 4:28 下午 + */ +@Service +@Transactional(rollbackFor = Exception.class) +public class BillStatisticsServiceImpl extends ServiceImpl implements BillStatisticsService { + + + @Override + public long billNum(BillStatusEnum billStatusEnum) { + LambdaUpdateWrapper lambdaUpdateWrapper = Wrappers.lambdaUpdate(); + lambdaUpdateWrapper.eq(Bill::getBillStatus, billStatusEnum.name()); + lambdaUpdateWrapper.eq(CharSequenceUtil.equals(Objects.requireNonNull(UserContext.getCurrentUser()).getRole().name(), UserEnums.STORE.name()), + Bill::getStoreId, UserContext.getCurrentUser().getStoreId()); + return this.count(lambdaUpdateWrapper); + } + + +} diff --git a/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/DistributionCashStatisticsServiceImpl.java b/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/DistributionCashStatisticsServiceImpl.java new file mode 100644 index 00000000..79ab876c --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/DistributionCashStatisticsServiceImpl.java @@ -0,0 +1,32 @@ +package cn.lili.modules.statistics.serviceimpl; + +import cn.lili.modules.distribution.entity.dos.DistributionCash; +import cn.lili.modules.statistics.mapper.DistributionCashStatisticsMapper; +import cn.lili.modules.statistics.service.DistributionCashStatisticsService; +import cn.lili.modules.wallet.entity.enums.WithdrawStatusEnum; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + + +/** + * 分销佣金统计层实现 + * + * @author pikachu + * @since 2020-03-126 18:04:56 + */ +@Service +@Transactional(rollbackFor = Exception.class) +public class DistributionCashStatisticsServiceImpl extends ServiceImpl + implements DistributionCashStatisticsService { + + + @Override + public long newDistributionCash() { + QueryWrapper queryWrapper = Wrappers.query(); + queryWrapper.eq("distribution_cash_status", WithdrawStatusEnum.APPLY.name()); + return this.count(queryWrapper); + } +} \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/GoodsStatisticsDataServiceImpl.java b/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/GoodsStatisticsDataServiceImpl.java deleted file mode 100644 index 3f101189..00000000 --- a/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/GoodsStatisticsDataServiceImpl.java +++ /dev/null @@ -1,73 +0,0 @@ -package cn.lili.modules.statistics.serviceimpl; - -import cn.lili.common.utils.StringUtils; -import cn.lili.modules.order.order.entity.dos.StoreFlow; -import cn.lili.modules.order.order.entity.enums.FlowTypeEnum; -import cn.lili.modules.statistics.mapper.GoodsStatisticsDataMapper; -import cn.lili.modules.statistics.entity.dto.GoodsStatisticsQueryParam; -import cn.lili.modules.statistics.entity.enums.StatisticsQuery; -import cn.lili.modules.statistics.entity.vo.CategoryStatisticsDataVO; -import cn.lili.modules.statistics.entity.vo.GoodsStatisticsDataVO; -import cn.lili.modules.statistics.service.GoodsStatisticsDataService; -import cn.lili.modules.statistics.util.StatisticsDateUtil; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import org.springframework.stereotype.Service; - -import java.util.Date; -import java.util.List; - -/** - * 商品统计业务层实现 - * - * @author Bulbasaur - * @since 2020/12/9 11:30 - */ -@Service -public class GoodsStatisticsDataServiceImpl extends ServiceImpl implements GoodsStatisticsDataService { - - @Override - public List getGoodsStatisticsData(GoodsStatisticsQueryParam goodsStatisticsQueryParam, Integer num) { - //获取查询条件 - QueryWrapper queryWrapper = getQueryWrapper(goodsStatisticsQueryParam); - //根据商品分组 - queryWrapper.groupBy("goods_id"); - queryWrapper.groupBy("goods_name"); - - queryWrapper.eq(!StringUtils.isEmpty(goodsStatisticsQueryParam.getStoreId()), "store_id", goodsStatisticsQueryParam.getStoreId()); - //查询前X记录 - Page page = new Page(1, num); - return this.baseMapper.getGoodsStatisticsData(page, queryWrapper); - } - - @Override - public List getCategoryStatisticsData(GoodsStatisticsQueryParam goodsStatisticsQueryParam) { - //获取查询条件 - QueryWrapper queryWrapper = getQueryWrapper(goodsStatisticsQueryParam); - //根据分类分组 - queryWrapper.groupBy("category_id"); - return this.baseMapper.getCateGoryStatisticsData(queryWrapper); - } - - - private QueryWrapper getQueryWrapper(GoodsStatisticsQueryParam goodsStatisticsQueryParam) { - - QueryWrapper queryWrapper = Wrappers.query(); - //判断搜索类型是:年、月 - Date[] date = StatisticsDateUtil.getDateArray(goodsStatisticsQueryParam); - queryWrapper.between("create_time", date[0], date[1]); - - //判断是按照数量统计还是按照金额统计 - if (goodsStatisticsQueryParam.getType().equals(StatisticsQuery.PRICE.name())) { - queryWrapper.orderByDesc("price"); - } else { - queryWrapper.orderByDesc("num"); - } - //设置为付款查询 - queryWrapper.eq("flow_type", FlowTypeEnum.PAY.name()); - return queryWrapper; - } - -} diff --git a/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/GoodsStatisticsServiceImpl.java b/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/GoodsStatisticsServiceImpl.java new file mode 100644 index 00000000..87b52e31 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/GoodsStatisticsServiceImpl.java @@ -0,0 +1,56 @@ +package cn.lili.modules.statistics.serviceimpl; + +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.text.CharSequenceUtil; +import cn.lili.common.security.AuthUser; +import cn.lili.common.security.context.UserContext; +import cn.lili.common.security.enums.UserEnums; +import cn.lili.modules.goods.entity.dos.Goods; +import cn.lili.modules.goods.entity.enums.GoodsAuthEnum; +import cn.lili.modules.goods.entity.enums.GoodsStatusEnum; +import cn.lili.modules.statistics.mapper.GoodsStatisticsMapper; +import cn.lili.modules.statistics.service.GoodsStatisticsService; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +import java.util.Objects; + +/** + * 商品统计业务层实现 + * + * @author Bulbasaur + * @since 2020/12/9 11:30 + */ +@Service +public class GoodsStatisticsServiceImpl extends ServiceImpl implements GoodsStatisticsService { + + @Override + public long goodsNum(GoodsStatusEnum goodsStatusEnum, GoodsAuthEnum goodsAuthEnum) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(); + + queryWrapper.eq(Goods::getDeleteFlag, false); + + if (goodsStatusEnum != null) { + queryWrapper.eq(Goods::getMarketEnable, goodsStatusEnum.name()); + } + if (goodsAuthEnum != null) { + queryWrapper.eq(Goods::getAuthFlag, goodsAuthEnum.name()); + } + AuthUser currentUser = Objects.requireNonNull(UserContext.getCurrentUser()); + queryWrapper.eq(CharSequenceUtil.equals(currentUser.getRole().name(), UserEnums.STORE.name()), + Goods::getStoreId, currentUser.getStoreId()); + + return this.count(queryWrapper); + } + + @Override + public long todayUpperNum() { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(); + queryWrapper.eq(Goods::getMarketEnable, GoodsStatusEnum.UPPER.name()); + queryWrapper.ge(Goods::getCreateTime, DateUtil.beginOfDay(new DateTime())); + return this.count(queryWrapper); + } +} diff --git a/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/IndexStatisticsServiceImpl.java b/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/IndexStatisticsServiceImpl.java index eab152e7..fa5a7fae 100644 --- a/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/IndexStatisticsServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/IndexStatisticsServiceImpl.java @@ -5,18 +5,11 @@ import cn.hutool.core.date.DateTime; import cn.lili.common.security.context.UserContext; import cn.lili.common.security.enums.UserEnums; import cn.lili.common.utils.BeanUtil; -import cn.lili.modules.distribution.service.DistributionCashService; import cn.lili.modules.goods.entity.enums.GoodsAuthEnum; import cn.lili.modules.goods.entity.enums.GoodsStatusEnum; -import cn.lili.modules.goods.service.GoodsService; -import cn.lili.modules.member.service.MemberEvaluationService; import cn.lili.modules.order.order.entity.enums.FlowTypeEnum; import cn.lili.modules.order.order.entity.enums.OrderStatusEnum; -import cn.lili.modules.order.order.service.AfterSaleService; -import cn.lili.modules.order.order.service.OrderComplaintService; import cn.lili.modules.order.trade.entity.enums.AfterSaleTypeEnum; -import cn.lili.modules.promotion.service.SeckillService; -import cn.lili.modules.statistics.mapper.StoreStatisticsDataMapper; import cn.lili.modules.statistics.entity.dto.GoodsStatisticsQueryParam; import cn.lili.modules.statistics.entity.dto.StatisticsQueryParam; import cn.lili.modules.statistics.entity.enums.SearchTypeEnum; @@ -24,8 +17,6 @@ import cn.lili.modules.statistics.entity.vo.*; import cn.lili.modules.statistics.service.*; import cn.lili.modules.statistics.util.StatisticsDateUtil; import cn.lili.modules.store.entity.enums.BillStatusEnum; -import cn.lili.modules.store.service.BillService; -import cn.lili.modules.store.service.StoreService; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -50,84 +41,79 @@ public class IndexStatisticsServiceImpl implements IndexStatisticsService { * 订单统计 */ @Autowired - private OrderStatisticsDataService orderStatisticsDataService; + private OrderStatisticsService orderStatisticsService; /** * 会员统计 */ @Autowired - private MemberStatisticsDataService memberStatisticsDataService; + private MemberStatisticsService memberStatisticsService; /** * 商品统计 */ @Autowired - private GoodsStatisticsDataService goodsStatisticsDataService; + private GoodsStatisticsService goodsStatisticsService; /** - * 店铺统计 + * 商品统计 */ @Autowired - private StoreStatisticsDataMapper storeStatisticsDataMapper; - /** - * 商品 - */ - @Autowired - private GoodsService goodsService; + private StoreFlowStatisticsService storeFlowStatisticsService; /** * 店铺 */ @Autowired - private StoreService storeService; + private StoreStatisticsService storeStatisticsService; /** * 店铺 */ @Autowired - private MemberEvaluationService memberEvaluationService; + private MemberEvaluationStatisticsService memberEvaluationStatisticsService; /** * 售后 */ @Autowired - private AfterSaleService afterSaleService; + private AfterSaleStatisticsService afterSaleStatisticsService; /** * 投诉 */ @Autowired - private OrderComplaintService orderComplaintService; + private OrderComplaintStatisticsService orderComplaintStatisticsService; /** * 分销员提现 */ @Autowired - private DistributionCashService distributionCashService; + private DistributionCashStatisticsService distributionCashStatisticsService; /** * 平台PV统计 */ @Autowired - private PlatformViewDataService platformViewDataService; + private PlatformViewService platformViewService; /** * 结算单 */ @Autowired - private BillService billService; + private BillStatisticsService billStatisticsService; /** * 秒杀活动 */ @Autowired - private SeckillService seckillService; + private SeckillStatisticsService seckillStatisticsService; @Override public IndexNoticeVO indexNotice() { IndexNoticeVO indexNoticeVO = new IndexNoticeVO(); //商品审核 - indexNoticeVO.setGoods(goodsService.goodsNum(null, GoodsAuthEnum.TOBEAUDITED)); + indexNoticeVO.setGoods(goodsStatisticsService.goodsNum(null, GoodsAuthEnum.TOBEAUDITED)); //店铺入驻审核 - indexNoticeVO.setStore(storeService.auditNum()); + indexNoticeVO.setStore(storeStatisticsService.auditNum()); //售后申请 - indexNoticeVO.setRefund(afterSaleService.applyNum(null)); + indexNoticeVO.setRefund(afterSaleStatisticsService.applyNum(null)); //投诉审核 - indexNoticeVO.setComplain(orderComplaintService.waitComplainNum()); + indexNoticeVO.setComplain(orderComplaintStatisticsService.waitComplainNum()); //分销员提现审核 - indexNoticeVO.setDistributionCash(distributionCashService.newDistributionCash()); + indexNoticeVO.setDistributionCash(distributionCashStatisticsService.newDistributionCash()); //待处理商家结算 - indexNoticeVO.setWaitPayBill(billService.billNum(BillStatusEnum.CHECK)); + indexNoticeVO.setWaitPayBill(billStatisticsService.billNum(BillStatusEnum.CHECK)); return indexNoticeVO; } @@ -138,31 +124,31 @@ public class IndexStatisticsServiceImpl implements IndexStatisticsService { IndexStatisticsVO indexStatisticsVO = new IndexStatisticsVO(); //获取总订单数量 - indexStatisticsVO.setOrderNum(orderStatisticsDataService.orderNum(null)); + indexStatisticsVO.setOrderNum(orderStatisticsService.orderNum(null)); //获取总会员数量 - indexStatisticsVO.setMemberNum(memberStatisticsDataService.getMemberCount()); + indexStatisticsVO.setMemberNum(memberStatisticsService.getMemberCount()); //获取总上架商品数量 - indexStatisticsVO.setGoodsNum(goodsService.goodsNum(GoodsStatusEnum.UPPER, GoodsAuthEnum.PASS)); + indexStatisticsVO.setGoodsNum(goodsStatisticsService.goodsNum(GoodsStatusEnum.UPPER, GoodsAuthEnum.PASS)); //获取总店铺数量 - indexStatisticsVO.setStoreNum(storeService.storeNum()); + indexStatisticsVO.setStoreNum(storeStatisticsService.storeNum()); //下单统计 - Map map = orderStatisticsDataService.getOrderStatisticsPrice(); + Map map = storeFlowStatisticsService.getOrderStatisticsPrice(); //今日下单数 indexStatisticsVO.setTodayOrderNum(map.get("num") == null ? 0L : (Long) map.get("num")); //今日下单金额 indexStatisticsVO.setTodayOrderPrice(map.get("price") == null ? 0D : (Double) map.get("price")); //今日新增会员数量 - indexStatisticsVO.setTodayMemberNum(memberStatisticsDataService.todayMemberNum()); + indexStatisticsVO.setTodayMemberNum(memberStatisticsService.todayMemberNum()); //今日新增商品数量 - indexStatisticsVO.setTodayGoodsNum(goodsService.todayUpperNum()); + indexStatisticsVO.setTodayGoodsNum(goodsStatisticsService.todayUpperNum()); //今日新增店铺数量 - indexStatisticsVO.setTodayStoreNum(storeService.todayStoreNum()); + indexStatisticsVO.setTodayStoreNum(storeStatisticsService.todayStoreNum()); //今日新增评论数量 - indexStatisticsVO.setTodayMemberEvaluation(memberEvaluationService.todayMemberEvaluation()); + indexStatisticsVO.setTodayMemberEvaluation(memberEvaluationStatisticsService.todayMemberEvaluation()); //当前在线人数 - indexStatisticsVO.setCurrentNumberPeopleOnline(platformViewDataService.online()); + indexStatisticsVO.setCurrentNumberPeopleOnline(platformViewService.online()); //流量统计 @@ -170,19 +156,19 @@ public class IndexStatisticsServiceImpl implements IndexStatisticsService { //今日uv queryParam.setSearchType(SearchTypeEnum.TODAY.name()); - indexStatisticsVO.setTodayUV(platformViewDataService.countUv(queryParam)); + indexStatisticsVO.setTodayUV(platformViewService.countUv(queryParam)); // 昨日访问数UV queryParam.setSearchType(SearchTypeEnum.YESTERDAY.name()); - indexStatisticsVO.setYesterdayUV(platformViewDataService.countUv(queryParam)); + indexStatisticsVO.setYesterdayUV(platformViewService.countUv(queryParam)); // 前七日访问数UV queryParam.setSearchType(SearchTypeEnum.LAST_SEVEN.name()); - indexStatisticsVO.setLastSevenUV(platformViewDataService.countUv(queryParam)); + indexStatisticsVO.setLastSevenUV(platformViewService.countUv(queryParam)); // 三十日访问数UV queryParam.setSearchType(SearchTypeEnum.LAST_THIRTY.name()); - indexStatisticsVO.setLastThirtyUV(platformViewDataService.countUv(queryParam)); + indexStatisticsVO.setLastThirtyUV(platformViewService.countUv(queryParam)); return indexStatisticsVO; @@ -195,9 +181,9 @@ public class IndexStatisticsServiceImpl implements IndexStatisticsService { StoreIndexStatisticsVO storeIndexStatisticsVO = new StoreIndexStatisticsVO(); //商品总数量 - storeIndexStatisticsVO.setGoodsNum(goodsService.goodsNum(GoodsStatusEnum.UPPER, null)); + storeIndexStatisticsVO.setGoodsNum(goodsStatisticsService.goodsNum(GoodsStatusEnum.UPPER, null)); //订单总数量、订单总金额 - Map map = orderStatisticsDataService.getStoreOrderStatisticsPrice(); + Map map = storeFlowStatisticsService.getOrderStatisticsPrice(); storeIndexStatisticsVO.setOrderNum(Convert.toInt(map.get("num").toString())); storeIndexStatisticsVO.setOrderPrice(map.get("price") != null ? Double.parseDouble(map.get("price").toString()) : 0.0); @@ -205,34 +191,34 @@ public class IndexStatisticsServiceImpl implements IndexStatisticsService { StatisticsQueryParam queryParam = new StatisticsQueryParam(); queryParam.setSearchType(SearchTypeEnum.TODAY.name()); queryParam.setStoreId(storeId); - PlatformViewVO platformViewVO = platformViewDataService.list(queryParam).get(0); + PlatformViewVO platformViewVO = platformViewService.list(queryParam).get(0); storeIndexStatisticsVO.setStoreUV(platformViewVO.getUvNum().intValue()); //待付款订单数量 - storeIndexStatisticsVO.setUnPaidOrder(orderStatisticsDataService.orderNum(OrderStatusEnum.UNPAID.name())); + storeIndexStatisticsVO.setUnPaidOrder(orderStatisticsService.orderNum(OrderStatusEnum.UNPAID.name())); //待发货订单数量 - storeIndexStatisticsVO.setUnDeliveredOrder(orderStatisticsDataService.orderNum(OrderStatusEnum.UNDELIVERED.name())); + storeIndexStatisticsVO.setUnDeliveredOrder(orderStatisticsService.orderNum(OrderStatusEnum.UNDELIVERED.name())); //待收货订单数量 - storeIndexStatisticsVO.setDeliveredOrder(orderStatisticsDataService.orderNum(OrderStatusEnum.DELIVERED.name())); + storeIndexStatisticsVO.setDeliveredOrder(orderStatisticsService.orderNum(OrderStatusEnum.DELIVERED.name())); //待处理退货数量 - storeIndexStatisticsVO.setReturnGoods(afterSaleService.applyNum(AfterSaleTypeEnum.RETURN_GOODS.name())); + storeIndexStatisticsVO.setReturnGoods(afterSaleStatisticsService.applyNum(AfterSaleTypeEnum.RETURN_GOODS.name())); //待处理退款数量 - storeIndexStatisticsVO.setReturnMoney(afterSaleService.applyNum(AfterSaleTypeEnum.RETURN_MONEY.name())); + storeIndexStatisticsVO.setReturnMoney(afterSaleStatisticsService.applyNum(AfterSaleTypeEnum.RETURN_MONEY.name())); //待回复评价数量 - storeIndexStatisticsVO.setMemberEvaluation(memberEvaluationService.getWaitReplyNum()); + storeIndexStatisticsVO.setMemberEvaluation(memberEvaluationStatisticsService.getWaitReplyNum()); //待处理投诉数量 - storeIndexStatisticsVO.setComplaint(orderComplaintService.waitComplainNum()); + storeIndexStatisticsVO.setComplaint(orderComplaintStatisticsService.waitComplainNum()); //待上架商品数量 - storeIndexStatisticsVO.setWaitUpper(goodsService.goodsNum(GoodsStatusEnum.DOWN, null)); + storeIndexStatisticsVO.setWaitUpper(goodsStatisticsService.goodsNum(GoodsStatusEnum.DOWN, null)); //待审核商品数量 - storeIndexStatisticsVO.setWaitAuth(goodsService.goodsNum(null, GoodsAuthEnum.TOBEAUDITED)); + storeIndexStatisticsVO.setWaitAuth(goodsStatisticsService.goodsNum(null, GoodsAuthEnum.TOBEAUDITED)); //可参与秒杀活动数量 - storeIndexStatisticsVO.setSeckillNum(seckillService.getApplyNum()); + storeIndexStatisticsVO.setSeckillNum(seckillStatisticsService.getApplyNum()); //待处理商家结算 - storeIndexStatisticsVO.setWaitPayBill(billService.billNum(BillStatusEnum.OUT)); + storeIndexStatisticsVO.setWaitPayBill(billStatisticsService.billNum(BillStatusEnum.OUT)); return storeIndexStatisticsVO; } @@ -240,7 +226,7 @@ public class IndexStatisticsServiceImpl implements IndexStatisticsService { @Override public List goodsStatistics(GoodsStatisticsQueryParam statisticsQueryParam) { //查询商品 - return goodsStatisticsDataService.getGoodsStatisticsData(statisticsQueryParam, 10); + return storeFlowStatisticsService.getGoodsStatisticsData(statisticsQueryParam, 10); } @Override @@ -261,7 +247,7 @@ public class IndexStatisticsServiceImpl implements IndexStatisticsService { //查询前十条记录 Page page = new Page(1, 10); - return storeStatisticsDataMapper.getStoreStatisticsData(page, queryWrapper); + return storeFlowStatisticsService.getStoreStatisticsData(page, queryWrapper); } diff --git a/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/MemberEvaluationStatisticsServiceImpl.java b/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/MemberEvaluationStatisticsServiceImpl.java new file mode 100644 index 00000000..62caf740 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/MemberEvaluationStatisticsServiceImpl.java @@ -0,0 +1,45 @@ +package cn.lili.modules.statistics.serviceimpl; + +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.text.CharSequenceUtil; +import cn.lili.common.security.context.UserContext; +import cn.lili.common.security.enums.UserEnums; +import cn.lili.modules.member.entity.dos.MemberEvaluation; +import cn.lili.modules.statistics.mapper.MemberEvaluationStatisticsMapper; +import cn.lili.modules.statistics.service.MemberEvaluationStatisticsService; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Objects; + +/** + * 会员商品评价业务层实现 + * + * @author Bulbasaur + * @since 2020-02-25 14:10:16 + */ +@Service +@Transactional(rollbackFor = Exception.class) +public class MemberEvaluationStatisticsServiceImpl extends ServiceImpl implements MemberEvaluationStatisticsService { + + + @Override + public long todayMemberEvaluation() { + return this.count(new LambdaQueryWrapper().ge(MemberEvaluation::getCreateTime, DateUtil.beginOfDay(new DateTime()))); + } + + @Override + public long getWaitReplyNum() { + QueryWrapper queryWrapper = Wrappers.query(); + queryWrapper.eq(CharSequenceUtil.equals(Objects.requireNonNull(UserContext.getCurrentUser()).getRole().name(), UserEnums.STORE.name()), + "store_id", UserContext.getCurrentUser().getStoreId()); + queryWrapper.eq("reply_status", false); + return this.count(queryWrapper); + } + +} \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/MemberStatisticsDataServiceImpl.java b/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/MemberStatisticsServiceImpl.java similarity index 76% rename from framework/src/main/java/cn/lili/modules/statistics/serviceimpl/MemberStatisticsDataServiceImpl.java rename to framework/src/main/java/cn/lili/modules/statistics/serviceimpl/MemberStatisticsServiceImpl.java index e79dae22..cf39dde3 100644 --- a/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/MemberStatisticsDataServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/MemberStatisticsServiceImpl.java @@ -1,11 +1,12 @@ package cn.lili.modules.statistics.serviceimpl; import cn.hutool.core.date.DateUtil; -import cn.lili.modules.statistics.mapper.MemberStatisticsDataMapper; +import cn.lili.modules.member.entity.vo.MemberDistributionVO; import cn.lili.modules.statistics.entity.dos.MemberStatisticsData; import cn.lili.modules.statistics.entity.dto.StatisticsQueryParam; import cn.lili.modules.statistics.entity.enums.SearchTypeEnum; -import cn.lili.modules.statistics.service.MemberStatisticsDataService; +import cn.lili.modules.statistics.mapper.MemberStatisticsMapper; +import cn.lili.modules.statistics.service.MemberStatisticsService; import cn.lili.modules.statistics.util.StatisticsDateUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; @@ -23,31 +24,31 @@ import java.util.List; * @since 2020/12/9 18:33 */ @Service -public class MemberStatisticsDataServiceImpl extends ServiceImpl implements MemberStatisticsDataService { +public class MemberStatisticsServiceImpl extends ServiceImpl implements MemberStatisticsService { @Override - public Integer getMemberCount() { + public long getMemberCount() { QueryWrapper queryWrapper = new QueryWrapper(); queryWrapper.eq("disabled", true); return this.baseMapper.customSqlQuery(queryWrapper); } @Override - public Integer todayMemberNum() { + public long todayMemberNum() { QueryWrapper queryWrapper = Wrappers.query(); queryWrapper.ge("create_time", DateUtil.beginOfDay(new Date())); return this.baseMapper.customSqlQuery(queryWrapper); } @Override - public Integer memberCount(Date endTime) { + public long memberCount(Date endTime) { QueryWrapper queryWrapper = Wrappers.query(); queryWrapper.le("create_time", endTime); return this.baseMapper.customSqlQuery(queryWrapper); } @Override - public Integer activeQuantity(Date startTime) { + public long activeQuantity(Date startTime) { QueryWrapper queryWrapper = Wrappers.query(); queryWrapper.ge("last_login_date", startTime); @@ -55,7 +56,7 @@ public class MemberStatisticsDataServiceImpl extends ServiceImpl statistics(StatisticsQueryParam statisticsQueryParam) { Date[] dates = StatisticsDateUtil.getDateArray(statisticsQueryParam); - Date startTime = dates[0], endTime = dates[1]; + Date startTime = dates[0]; + Date endTime = dates[1]; //如果统计今天,则自行构造数据 - if(statisticsQueryParam.getSearchType().equals(SearchTypeEnum.TODAY.name())){ + if (statisticsQueryParam.getSearchType().equals(SearchTypeEnum.TODAY.name())) { //构建数据,然后返回集合,提供给前端展示 MemberStatisticsData memberStatisticsData = new MemberStatisticsData(); memberStatisticsData.setMemberCount(this.memberCount(endTime)); @@ -85,4 +87,11 @@ public class MemberStatisticsDataServiceImpl extends ServiceImpl distribution() { + return this.baseMapper.distribution(); + } + } diff --git a/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/OrderComplaintStatisticsServiceImpl.java b/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/OrderComplaintStatisticsServiceImpl.java new file mode 100644 index 00000000..7830ac73 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/OrderComplaintStatisticsServiceImpl.java @@ -0,0 +1,34 @@ +package cn.lili.modules.statistics.serviceimpl; + +import cn.lili.common.security.context.UserContext; +import cn.lili.common.security.enums.UserEnums; +import cn.lili.common.utils.StringUtils; +import cn.lili.modules.order.aftersale.entity.enums.ComplaintStatusEnum; +import cn.lili.modules.order.order.entity.dos.OrderComplaint; +import cn.lili.modules.statistics.mapper.OrderComplaintStatisticsMapper; +import cn.lili.modules.statistics.service.OrderComplaintStatisticsService; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + * 交易投诉业务层实现 + * + * @author paulG + * @since 2020/12/5 + **/ +@Service +public class OrderComplaintStatisticsServiceImpl extends ServiceImpl implements OrderComplaintStatisticsService { + + @Override + public long waitComplainNum() { + QueryWrapper queryWrapper = Wrappers.query(); + queryWrapper.ne("complain_status", ComplaintStatusEnum.COMPLETE.name()); + queryWrapper.eq(StringUtils.equals(UserContext.getCurrentUser().getRole().name(), UserEnums.STORE.name()), + "store_id", UserContext.getCurrentUser().getStoreId()); + return this.count(queryWrapper); + } + + +} diff --git a/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/OrderStatisticsServiceImpl.java b/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/OrderStatisticsServiceImpl.java new file mode 100644 index 00000000..b39266e9 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/OrderStatisticsServiceImpl.java @@ -0,0 +1,179 @@ +package cn.lili.modules.statistics.serviceimpl; + +import cn.hutool.core.text.CharSequenceUtil; +import cn.lili.common.security.context.UserContext; +import cn.lili.common.security.enums.UserEnums; +import cn.lili.common.utils.CurrencyUtil; +import cn.lili.common.utils.StringUtils; +import cn.lili.common.vo.PageVO; +import cn.lili.modules.order.order.entity.dos.Order; +import cn.lili.modules.order.order.entity.enums.FlowTypeEnum; +import cn.lili.modules.order.order.entity.enums.PayStatusEnum; +import cn.lili.modules.order.order.entity.vo.OrderSimpleVO; +import cn.lili.modules.statistics.entity.dto.StatisticsQueryParam; +import cn.lili.modules.statistics.entity.vo.OrderOverviewVO; +import cn.lili.modules.statistics.entity.vo.OrderStatisticsDataVO; +import cn.lili.modules.statistics.mapper.OrderStatisticsMapper; +import cn.lili.modules.statistics.service.OrderStatisticsService; +import cn.lili.modules.statistics.service.PlatformViewService; +import cn.lili.modules.statistics.service.StoreFlowStatisticsService; +import cn.lili.modules.statistics.util.StatisticsDateUtil; +import cn.lili.mybatis.util.PageUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.*; + +/** + * 订单统计业务层实现 + * + * @author Bulbasaur + * @since 2020/12/9 17:16 + */ +@Service +public class OrderStatisticsServiceImpl extends ServiceImpl implements OrderStatisticsService { + + /** + * 平台PV统计 + */ + @Autowired + private PlatformViewService platformViewService; + + @Autowired + private StoreFlowStatisticsService storeFlowStatisticsService; + + @Override + public OrderOverviewVO overview(StatisticsQueryParam statisticsQueryParam) { + Date[] dates = StatisticsDateUtil.getDateArray(statisticsQueryParam); + + OrderOverviewVO orderOverviewVO = new OrderOverviewVO(); + + /** + * 组织统计初始化 + */ + storeFlowStatisticsService.overview(dates, orderOverviewVO, statisticsQueryParam); + //访客数 + Integer uv = platformViewService.countUv(statisticsQueryParam); + if (uv != null) { + orderOverviewVO.setUvNum(uv.longValue()); + } + + //数据运算(转换率,比例相关) + conversionRateOperation(orderOverviewVO); + return orderOverviewVO; + } + + /** + * 运算转换率 + * + * @param orderOverviewVO 订单统计视图 + */ + private void conversionRateOperation(OrderOverviewVO orderOverviewVO) { + + //下单转换率 订单数/UV + Double orderConversionRate = CurrencyUtil.div(orderOverviewVO.getOrderNum(), orderOverviewVO.getUvNum(), 4); + if (orderConversionRate > 1) { + orderConversionRate = 1d; + } + orderOverviewVO.setOrderConversionRate(CurrencyUtil.mul(orderConversionRate, 100) + "%"); + //付款转换率 付款订单数/订单数 + Double paymentsConversionRate = CurrencyUtil.div(orderOverviewVO.getPaymentOrderNum(), orderOverviewVO.getOrderNum(), 4); + if (paymentsConversionRate > 1) { + paymentsConversionRate = 1d; + } + orderOverviewVO.setPaymentsConversionRate(CurrencyUtil.mul(paymentsConversionRate, 100) + "%"); + //整体转换率 付款数/UV + Double overallConversionRate = CurrencyUtil.div(orderOverviewVO.getPaymentOrderNum(), orderOverviewVO.getUvNum(), 4); + if (overallConversionRate > 1) { + overallConversionRate = 1d; + } + orderOverviewVO.setOverallConversionRate(CurrencyUtil.mul(overallConversionRate, 100) + "%"); + } + + @Override + public long orderNum(String orderStatus) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(CharSequenceUtil.isNotEmpty(orderStatus), Order::getOrderStatus, orderStatus); + queryWrapper.eq(CharSequenceUtil.equals(Objects.requireNonNull(UserContext.getCurrentUser()).getRole().name(), UserEnums.STORE.name()), + Order::getStoreId, UserContext.getCurrentUser().getStoreId()); + return this.count(queryWrapper); + } + + @Override + public List statisticsChart(StatisticsQueryParam statisticsQueryParam) { + Date[] dates = StatisticsDateUtil.getDateArray(statisticsQueryParam); + QueryWrapper queryWrapper = new QueryWrapper(); + //已支付 + queryWrapper.eq("pay_status", PayStatusEnum.PAID.name()); + //选择商家判定 + queryWrapper.eq(StringUtils.isNotEmpty(statisticsQueryParam.getStoreId()), "store_id", statisticsQueryParam.getStoreId()); +// 查询时间区间 + queryWrapper.between("create_time", dates[0], dates[1]); +// 格式化时间 + queryWrapper.groupBy("DATE_FORMAT(create_time,'%Y-%m-%d')"); + List orderStatisticsDataVOS = this.baseMapper.getOrderStatisticsData(queryWrapper); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(dates[0]); + + List result = new ArrayList<>(); + //时间判定,将数据填充好 + //如果当前的时间,在结束时间之前 + while (calendar.getTime().before(dates[1])) { + OrderStatisticsDataVO item = null; + //判定是否已经有这一天的数据 + for (OrderStatisticsDataVO orderStatisticsDataVO : orderStatisticsDataVOS) { + if (orderStatisticsDataVO.getCreateTime().equals(calendar.getTime())) { + item = orderStatisticsDataVO; + } + } + //如果数据不存在,则进行数据填充 + if (item == null) { + item = new OrderStatisticsDataVO(); + item.setPrice(0d); + item.setCreateTime(calendar.getTime()); + } + result.add(item); + //增加时间 + calendar.set(Calendar.DAY_OF_MONTH, calendar.get(Calendar.DAY_OF_MONTH) + 1); + } + return result; + } + + @Override + public IPage getStatistics(StatisticsQueryParam statisticsQueryParam, PageVO pageVO) { + + QueryWrapper queryWrapper = new QueryWrapper<>(); + Date[] dates = StatisticsDateUtil.getDateArray(statisticsQueryParam); + queryWrapper.between("o.create_time", dates[0], dates[1]); + queryWrapper.eq(StringUtils.isNotEmpty(statisticsQueryParam.getStoreId()), + "o.store_id", statisticsQueryParam.getStoreId()); + + queryWrapper.eq("o.delete_flag", false); + queryWrapper.groupBy("o.id"); + queryWrapper.orderByDesc("o.id"); + return this.baseMapper.queryByParams(PageUtil.initPage(pageVO), queryWrapper); + } + + private QueryWrapper getQueryWrapper(StatisticsQueryParam statisticsQueryParam) { + + QueryWrapper queryWrapper = Wrappers.query(); + + Date[] dates = StatisticsDateUtil.getDateArray(statisticsQueryParam); + queryWrapper.between("create_time", dates[0], dates[1]); + + //设置店铺ID + queryWrapper.eq(StringUtils.isNotEmpty(statisticsQueryParam.getStoreId()), "store_id", statisticsQueryParam.getStoreId()); + + + //设置为付款查询 + queryWrapper.eq("flow_type", FlowTypeEnum.PAY.name()); + + return queryWrapper; + } + +} diff --git a/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/PlatformViewDataServiceImpl.java b/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/PlatformViewServiceImpl.java similarity index 94% rename from framework/src/main/java/cn/lili/modules/statistics/serviceimpl/PlatformViewDataServiceImpl.java rename to framework/src/main/java/cn/lili/modules/statistics/serviceimpl/PlatformViewServiceImpl.java index 3dcf50e1..9b0e69c7 100644 --- a/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/PlatformViewDataServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/PlatformViewServiceImpl.java @@ -2,21 +2,21 @@ package cn.lili.modules.statistics.serviceimpl; import cn.lili.cache.Cache; import cn.lili.cache.CachePrefix; +import cn.lili.common.enums.ClientTypeEnum; import cn.lili.common.enums.ResultCode; import cn.lili.common.exception.ServiceException; +import cn.lili.common.properties.StatisticsProperties; import cn.lili.common.security.enums.UserEnums; import cn.lili.common.utils.CurrencyUtil; -import cn.lili.common.properties.StatisticsProperties; -import cn.lili.common.enums.ClientTypeEnum; import cn.lili.modules.member.entity.vo.MemberDistributionVO; -import cn.lili.modules.member.service.MemberService; -import cn.lili.modules.statistics.mapper.PlatformViewDataMapper; import cn.lili.modules.statistics.entity.dos.PlatformViewData; import cn.lili.modules.statistics.entity.dto.StatisticsQueryParam; import cn.lili.modules.statistics.entity.enums.SearchTypeEnum; import cn.lili.modules.statistics.entity.vo.OnlineMemberVO; import cn.lili.modules.statistics.entity.vo.PlatformViewVO; -import cn.lili.modules.statistics.service.PlatformViewDataService; +import cn.lili.modules.statistics.mapper.PlatformViewMapper; +import cn.lili.modules.statistics.service.MemberStatisticsService; +import cn.lili.modules.statistics.service.PlatformViewService; import cn.lili.modules.statistics.util.StatisticsDateUtil; import cn.lili.modules.statistics.util.StatisticsSuffix; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -42,7 +42,8 @@ import java.util.List; * 2021/1/18 12:07 */ @Service -public class PlatformViewDataServiceImpl extends ServiceImpl implements PlatformViewDataService { +public class PlatformViewServiceImpl extends ServiceImpl implements PlatformViewService { + /** * 在线人数统计 */ @@ -52,7 +53,7 @@ public class PlatformViewDataServiceImpl extends ServiceImpl) cache.get(CachePrefix.MEMBER_DISTRIBUTION.getPrefix()); + return (List) object; } - List memberDistributionVOS = memberService.distribution(); + List memberDistributionVOS = memberStatisticsService.distribution(); //统计总数 int count = 0; @@ -249,7 +250,7 @@ public class PlatformViewDataServiceImpl extends ServiceImpl implements RefundOrderStatisticsService { +public class RefundOrderStatisticsServiceImpl extends ServiceImpl implements RefundOrderStatisticsService { @Override public IPage getRefundOrderStatisticsData(PageVO pageVO, StatisticsQueryParam statisticsQueryParam) { diff --git a/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/SeckillStatisticsServiceImpl.java b/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/SeckillStatisticsServiceImpl.java new file mode 100644 index 00000000..1982553f --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/SeckillStatisticsServiceImpl.java @@ -0,0 +1,34 @@ +package cn.lili.modules.statistics.serviceimpl; + +import cn.lili.modules.promotion.entity.dos.Seckill; +import cn.lili.modules.promotion.entity.enums.PromotionsStatusEnum; +import cn.lili.modules.promotion.tools.PromotionTools; +import cn.lili.modules.statistics.mapper.SeckillStatisticsMapper; +import cn.lili.modules.statistics.service.SeckillStatisticsService; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +/** + * 秒杀活动统计 + * + * @author Chopper + * @since 2020/8/21 + */ +@Service +@Transactional(rollbackFor = Exception.class) +public class SeckillStatisticsServiceImpl extends ServiceImpl implements SeckillStatisticsService { + + + @Override + public long getApplyNum() { + QueryWrapper queryWrapper = Wrappers.query(); + //秒杀申请时间未超过当前时间 + queryWrapper.ge("apply_end_time", cn.hutool.core.date.DateUtil.date()); + queryWrapper.and(PromotionTools.queryPromotionStatus(PromotionsStatusEnum.START)); + return this.count(queryWrapper); + } + +} \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/OrderStatisticsDataServiceImpl.java b/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/StoreFlowStatisticsServiceImpl.java similarity index 52% rename from framework/src/main/java/cn/lili/modules/statistics/serviceimpl/OrderStatisticsDataServiceImpl.java rename to framework/src/main/java/cn/lili/modules/statistics/serviceimpl/StoreFlowStatisticsServiceImpl.java index 12d1187b..bb31a7d9 100644 --- a/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/OrderStatisticsDataServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/StoreFlowStatisticsServiceImpl.java @@ -3,57 +3,92 @@ package cn.lili.modules.statistics.serviceimpl; import cn.lili.common.security.AuthUser; import cn.lili.common.security.context.UserContext; import cn.lili.common.security.enums.UserEnums; -import cn.lili.common.utils.CurrencyUtil; -import cn.lili.common.utils.DateUtil; import cn.lili.common.utils.StringUtils; -import cn.lili.modules.order.order.entity.dos.Order; import cn.lili.modules.order.order.entity.dos.StoreFlow; import cn.lili.modules.order.order.entity.enums.FlowTypeEnum; -import cn.lili.modules.order.order.entity.enums.PayStatusEnum; -import cn.lili.modules.order.order.service.OrderService; -import cn.lili.modules.statistics.mapper.OrderStatisticsDataMapper; +import cn.lili.modules.statistics.entity.dto.GoodsStatisticsQueryParam; import cn.lili.modules.statistics.entity.dto.StatisticsQueryParam; +import cn.lili.modules.statistics.entity.enums.StatisticsQuery; +import cn.lili.modules.statistics.entity.vo.CategoryStatisticsDataVO; +import cn.lili.modules.statistics.entity.vo.GoodsStatisticsDataVO; import cn.lili.modules.statistics.entity.vo.OrderOverviewVO; -import cn.lili.modules.statistics.entity.vo.OrderStatisticsDataVO; -import cn.lili.modules.statistics.service.OrderStatisticsDataService; -import cn.lili.modules.statistics.service.PlatformViewDataService; +import cn.lili.modules.statistics.entity.vo.StoreStatisticsDataVO; +import cn.lili.modules.statistics.mapper.StoreFlowStatisticsMapper; +import cn.lili.modules.statistics.service.OrderStatisticsService; +import cn.lili.modules.statistics.service.StoreFlowStatisticsService; import cn.lili.modules.statistics.util.StatisticsDateUtil; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.util.*; +import java.util.Date; +import java.util.List; +import java.util.Map; /** - * 订单统计业务层实现 + * 商品统计业务层实现 * * @author Bulbasaur - * @since 2020/12/9 17:16 + * @since 2020/12/9 11:30 */ @Service -public class OrderStatisticsDataServiceImpl extends ServiceImpl implements OrderStatisticsDataService { - /** - * 平台PV统计 - */ +public class StoreFlowStatisticsServiceImpl extends ServiceImpl implements StoreFlowStatisticsService { + + @Autowired - private PlatformViewDataService platformViewDataService; - /** - * 订单 - */ - @Autowired - private OrderService orderService; + private OrderStatisticsService orderStatisticsService; + @Override + public List getGoodsStatisticsData(GoodsStatisticsQueryParam goodsStatisticsQueryParam, Integer num) { + //获取查询条件 + QueryWrapper queryWrapper = getQueryWrapper(goodsStatisticsQueryParam); + //根据商品分组 + queryWrapper.groupBy("goods_id"); + queryWrapper.groupBy("goods_name"); + + queryWrapper.eq(!StringUtils.isEmpty(goodsStatisticsQueryParam.getStoreId()), "store_id", goodsStatisticsQueryParam.getStoreId()); + //查询前X记录 + Page page = new Page(1, num); + return this.baseMapper.getGoodsStatisticsData(page, queryWrapper); + } @Override - public OrderOverviewVO overview(StatisticsQueryParam statisticsQueryParam) { - Date[] dates = StatisticsDateUtil.getDateArray(statisticsQueryParam); + public List getCategoryStatisticsData(GoodsStatisticsQueryParam goodsStatisticsQueryParam) { + //获取查询条件 + QueryWrapper queryWrapper = getQueryWrapper(goodsStatisticsQueryParam); + //根据分类分组 + queryWrapper.groupBy("category_id"); + return this.baseMapper.getCateGoryStatisticsData(queryWrapper); + } - OrderOverviewVO orderOverviewVO = new OrderOverviewVO(); - //访客数 - orderOverviewVO.setUvNum(platformViewDataService.countUv(statisticsQueryParam)); + @Override + public List getStoreStatisticsData(Page page, QueryWrapper queryWrapper) { + return this.baseMapper.getStoreStatisticsData(page, queryWrapper); + } + @Override + public Map getOrderStatisticsPrice() { + QueryWrapper queryWrapper = Wrappers.query(); + //支付订单 + queryWrapper.eq("flow_type", FlowTypeEnum.PAY.name()); + + //商家查询,则增加商家判定 + AuthUser authUser = UserContext.getCurrentUser(); + if (authUser.getRole().equals(UserEnums.STORE)) { + queryWrapper.eq("store_id", authUser.getStoreId()); + } + //大于今天凌晨 + queryWrapper.ge("create_time", cn.lili.common.utils.DateUtil.startOfTodDayTime()); + + queryWrapper.select("SUM(final_price) AS price , COUNT(0) AS num"); + return this.getMap(queryWrapper); + } + + + @Override + public void overview(Date[] dates, OrderOverviewVO orderOverviewVO, StatisticsQueryParam statisticsQueryParam) { //下单统计 initOrder(dates, orderOverviewVO, statisticsQueryParam); @@ -62,37 +97,6 @@ public class OrderStatisticsDataServiceImpl extends ServiceImpl 1) { - orderConversionRate = 1d; - } - orderOverviewVO.setOrderConversionRate(CurrencyUtil.mul(orderConversionRate, 100) + "%"); - //付款转换率 付款订单数/订单数 - Double paymentsConversionRate = CurrencyUtil.div(orderOverviewVO.getPaymentOrderNum(), orderOverviewVO.getOrderNum(), 4); - if (paymentsConversionRate > 1) { - paymentsConversionRate = 1d; - } - orderOverviewVO.setPaymentsConversionRate(CurrencyUtil.mul(paymentsConversionRate, 100) + "%"); - //整体转换率 付款数/UV - Double overallConversionRate = CurrencyUtil.div(orderOverviewVO.getPaymentOrderNum(), orderOverviewVO.getUvNum(), 4); - if (overallConversionRate > 1) { - overallConversionRate = 1d; - } - orderOverviewVO.setOverallConversionRate(CurrencyUtil.mul(overallConversionRate, 100) + "%"); } /** @@ -113,7 +117,7 @@ public class OrderStatisticsDataServiceImpl extends ServiceImpl getStoreOrderStatisticsPrice() { - QueryWrapper queryWrapper = new QueryWrapper(); - queryWrapper.eq(StringUtils.equals(UserContext.getCurrentUser().getRole().name(), UserEnums.STORE.name()), - "store_id", UserContext.getCurrentUser().getStoreId()); - queryWrapper.select("SUM(final_price) AS price , COUNT(0) AS num"); - return this.getMap(queryWrapper); - } - - @Override - public Map getOrderStatisticsPrice() { - QueryWrapper queryWrapper = Wrappers.query(); - //支付订单 - queryWrapper.eq("flow_type", FlowTypeEnum.PAY.name()); - - //商家查询,则增加商家判定 - AuthUser authUser = UserContext.getCurrentUser(); - if (authUser.getRole().equals(UserEnums.STORE)) { - queryWrapper.eq("store_id", authUser.getStoreId()); - } - //大于今天凌晨 - queryWrapper.ge("create_time", DateUtil.startOfTodDayTime()); - - queryWrapper.select("SUM(final_price) AS price , COUNT(0) AS num"); - return this.getMap(queryWrapper); - } - - @Override - public Integer orderNum(String orderStatus) { - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper(); - queryWrapper.eq(StringUtils.isNotEmpty(orderStatus), Order::getOrderStatus, orderStatus); - queryWrapper.eq(StringUtils.equals(UserContext.getCurrentUser().getRole().name(), UserEnums.STORE.name()), - Order::getStoreId, UserContext.getCurrentUser().getStoreId()); - return orderService.count(queryWrapper); - } - - @Override - public List statisticsChart(StatisticsQueryParam statisticsQueryParam) { - Date[] dates = StatisticsDateUtil.getDateArray(statisticsQueryParam); - QueryWrapper queryWrapper = new QueryWrapper(); - //已支付 - queryWrapper.eq("pay_status", PayStatusEnum.PAID.name()); - //选择商家判定 - queryWrapper.eq(StringUtils.isNotEmpty(statisticsQueryParam.getStoreId()), "store_id", statisticsQueryParam.getStoreId()); -// 查询时间区间 - queryWrapper.between("create_time", dates[0], dates[1]); -// 格式化时间 - queryWrapper.groupBy("DATE_FORMAT(create_time,'%Y-%m-%d')"); - List orderStatisticsDataVOS = this.baseMapper.getOrderStatisticsData(queryWrapper); - Calendar calendar = Calendar.getInstance(); - calendar.setTime(dates[0]); - - List result = new ArrayList<>(); - //时间判定,将数据填充好 - //如果当前的时间,在结束时间之前 - while (calendar.getTime().before(dates[1])) { - OrderStatisticsDataVO item = null; - //判定是否已经有这一天的数据 - for (OrderStatisticsDataVO orderStatisticsDataVO : orderStatisticsDataVOS) { - if (orderStatisticsDataVO.getCreateTime().equals(calendar.getTime())) { - item = orderStatisticsDataVO; - } - } - //如果数据不存在,则进行数据填充 - if (item == null) { - item = new OrderStatisticsDataVO(); - item.setPrice(0d); - item.setCreateTime(calendar.getTime()); - } - result.add(item); - //增加时间 - calendar.set(Calendar.DAY_OF_MONTH, calendar.get(Calendar.DAY_OF_MONTH) + 1); - } - return result; - } - - private QueryWrapper getQueryWrapper(StatisticsQueryParam statisticsQueryParam) { + /** + * 组织查询条件 + * + * @param goodsStatisticsQueryParam + * @return + */ + private QueryWrapper getQueryWrapper(GoodsStatisticsQueryParam goodsStatisticsQueryParam) { QueryWrapper queryWrapper = Wrappers.query(); + //判断搜索类型是:年、月 + Date[] date = StatisticsDateUtil.getDateArray(goodsStatisticsQueryParam); + queryWrapper.between("create_time", date[0], date[1]); - Date[] dates = StatisticsDateUtil.getDateArray(statisticsQueryParam); - queryWrapper.between("create_time", dates[0], dates[1]); - - //设置店铺ID - queryWrapper.eq(StringUtils.isNotEmpty(statisticsQueryParam.getStoreId()), "store_id", statisticsQueryParam.getStoreId()); - - + //判断是按照数量统计还是按照金额统计 + if (goodsStatisticsQueryParam.getType().equals(StatisticsQuery.PRICE.name())) { + queryWrapper.orderByDesc("price"); + } else { + queryWrapper.orderByDesc("num"); + } //设置为付款查询 queryWrapper.eq("flow_type", FlowTypeEnum.PAY.name()); - return queryWrapper; } diff --git a/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/StoreStatisticsServiceImpl.java b/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/StoreStatisticsServiceImpl.java new file mode 100644 index 00000000..cba2e6e6 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/StoreStatisticsServiceImpl.java @@ -0,0 +1,46 @@ +package cn.lili.modules.statistics.serviceimpl; + +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import cn.lili.modules.statistics.mapper.StoreStatisticsMapper; +import cn.lili.modules.statistics.service.StoreStatisticsService; +import cn.lili.modules.store.entity.dos.Store; +import cn.lili.modules.store.entity.enums.StoreStatusEnum; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + * 商品统计业务层实现 + * + * @author Bulbasaur + * @since 2020/12/9 11:30 + */ +@Service +public class StoreStatisticsServiceImpl extends ServiceImpl implements StoreStatisticsService { + + + @Override + public long auditNum() { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(); + queryWrapper.eq(Store::getStoreDisable, StoreStatusEnum.APPLYING.name()); + return this.count(queryWrapper); + } + + @Override + public long storeNum() { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(); + queryWrapper.eq(Store::getStoreDisable, StoreStatusEnum.OPEN.name()); + return this.count(queryWrapper); + } + + @Override + public long todayStoreNum() { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(); + queryWrapper.eq(Store::getStoreDisable, StoreStatusEnum.OPEN.name()); + queryWrapper.ge(Store::getCreateTime, DateUtil.beginOfDay(new DateTime())); + return this.count(queryWrapper); + } + +} diff --git a/framework/src/main/java/cn/lili/modules/store/entity/dos/StoreDetail.java b/framework/src/main/java/cn/lili/modules/store/entity/dos/StoreDetail.java index c9e4c359..ed8d8d37 100644 --- a/framework/src/main/java/cn/lili/modules/store/entity/dos/StoreDetail.java +++ b/framework/src/main/java/cn/lili/modules/store/entity/dos/StoreDetail.java @@ -8,7 +8,6 @@ import cn.lili.common.validation.Phone; import cn.lili.modules.store.entity.dto.AdminStoreApplyDTO; import cn.lili.mybatis.BaseIdEntity; import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModel; @@ -38,11 +37,6 @@ public class StoreDetail extends BaseIdEntity { private static final long serialVersionUID = 4949782642253898816L; - @TableId - @TableField - @ApiModelProperty(value = "唯一标识", hidden = true) - private String id; - @NotBlank(message = "店铺不能为空") @ApiModelProperty(value = "店铺id") private String storeId; @@ -98,7 +92,6 @@ public class StoreDetail extends BaseIdEntity { @ApiModelProperty(value = "营业执照号") private String licenseNum; - @Size(min = 1, max = 200, message = "法定经营范围长度为1-200位字符") @ApiModelProperty(value = "法定经营范围") private String scope; diff --git a/framework/src/main/java/cn/lili/modules/store/entity/dto/AdminStoreApplyDTO.java b/framework/src/main/java/cn/lili/modules/store/entity/dto/AdminStoreApplyDTO.java index 8b9ac536..40020336 100644 --- a/framework/src/main/java/cn/lili/modules/store/entity/dto/AdminStoreApplyDTO.java +++ b/framework/src/main/java/cn/lili/modules/store/entity/dto/AdminStoreApplyDTO.java @@ -99,7 +99,6 @@ public class AdminStoreApplyDTO { @ApiModelProperty(value = "营业执照号") private String licenseNum; - @Size(min = 1, max = 200, message = "法定经营范围长度为1-200位字符") @ApiModelProperty(value = "法定经营范围") private String scope; diff --git a/framework/src/main/java/cn/lili/modules/store/entity/dto/StoreEditDTO.java b/framework/src/main/java/cn/lili/modules/store/entity/dto/StoreEditDTO.java index 6efbaea1..0400c246 100644 --- a/framework/src/main/java/cn/lili/modules/store/entity/dto/StoreEditDTO.java +++ b/framework/src/main/java/cn/lili/modules/store/entity/dto/StoreEditDTO.java @@ -78,7 +78,6 @@ public class StoreEditDTO { @ApiModelProperty(value = "营业执照号") private String licenseNum; - @Size(min = 1, max = 200, message = "法定经营范围长度为1-200位字符") @ApiModelProperty(value = "法定经营范围") private String scope; diff --git a/framework/src/main/java/cn/lili/modules/store/entity/vos/StoreFlowRefundDownloadVO.java b/framework/src/main/java/cn/lili/modules/store/entity/vos/StoreFlowRefundDownloadVO.java index 303745c1..f76c92a4 100644 --- a/framework/src/main/java/cn/lili/modules/store/entity/vos/StoreFlowRefundDownloadVO.java +++ b/framework/src/main/java/cn/lili/modules/store/entity/vos/StoreFlowRefundDownloadVO.java @@ -1,64 +1,18 @@ package cn.lili.modules.store.entity.vos; -import com.baomidou.mybatisplus.annotation.FieldFill; -import com.baomidou.mybatisplus.annotation.TableField; -import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModelProperty; import lombok.Data; -import org.springframework.data.annotation.CreatedDate; -import org.springframework.format.annotation.DateTimeFormat; - -import java.util.Date; /** * 店铺流水下载 + * * @author Bulbasaur * @date: 2021/8/13 4:14 下午 - * */ @Data -public class StoreFlowRefundDownloadVO { - - @CreatedDate - @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") - @TableField(fill = FieldFill.INSERT) - @ApiModelProperty(value = "创建时间", hidden = true) - private Date createTime; - - @ApiModelProperty(value = "订单sn") - private String orderSn; +public class StoreFlowRefundDownloadVO extends StoreFlowPayDownloadVO { @ApiModelProperty(value = "售后SN") private String refundSn; - @ApiModelProperty(value = "店铺名称 ") - private String storeName; - - @ApiModelProperty(value = "商品名称") - private String goodsName; - - @ApiModelProperty(value = "销售量") - private Integer num; - - @ApiModelProperty(value = "流水金额") - private Double finalPrice; - - @ApiModelProperty(value = "平台收取交易佣金") - private Double commissionPrice; - - @ApiModelProperty(value = "平台优惠券 使用金额") - private Double siteCouponPrice; - - @ApiModelProperty(value = "单品分销返现支出") - private Double distributionRebate; - - @ApiModelProperty(value = "积分活动商品结算价格") - private Double pointSettlementPrice; - - @ApiModelProperty(value = "砍价活动商品结算价格") - private Double kanjiaSettlementPrice; - - @ApiModelProperty(value = "最终结算金额") - private Double billPrice; } diff --git a/framework/src/main/java/cn/lili/modules/store/entity/vos/StoreSearchParams.java b/framework/src/main/java/cn/lili/modules/store/entity/vos/StoreSearchParams.java index 617332b9..be73062e 100644 --- a/framework/src/main/java/cn/lili/modules/store/entity/vos/StoreSearchParams.java +++ b/framework/src/main/java/cn/lili/modules/store/entity/vos/StoreSearchParams.java @@ -2,6 +2,7 @@ package cn.lili.modules.store.entity.vos; import cn.hutool.core.date.DateUtil; import cn.lili.common.utils.StringUtils; +import cn.lili.common.vo.PageVO; import cn.lili.modules.store.entity.enums.StoreStatusEnum; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import io.swagger.annotations.ApiModelProperty; @@ -16,7 +17,7 @@ import java.io.Serializable; * @since 2020-03-07 17:02:05 */ @Data -public class StoreSearchParams implements Serializable { +public class StoreSearchParams extends PageVO implements Serializable { private static final long serialVersionUID = 6916054310764833369L; @@ -48,7 +49,7 @@ public class StoreSearchParams implements Serializable { if (StringUtils.isNotEmpty(storeDisable)) { queryWrapper.eq("store_disable", storeDisable); } else { - queryWrapper.eq("store_disable", StoreStatusEnum.OPEN.name()).or().eq("store_disable", StoreStatusEnum.CLOSED.name()); + queryWrapper.and(Wrapper -> Wrapper.eq("store_disable", StoreStatusEnum.OPEN.name()).or().eq("store_disable", StoreStatusEnum.CLOSED.name())); } //按时间查询 if (StringUtils.isNotEmpty(startDate)) { diff --git a/framework/src/main/java/cn/lili/modules/store/mapper/StoreMapper.java b/framework/src/main/java/cn/lili/modules/store/mapper/StoreMapper.java index ab9594f0..7d115b53 100644 --- a/framework/src/main/java/cn/lili/modules/store/mapper/StoreMapper.java +++ b/framework/src/main/java/cn/lili/modules/store/mapper/StoreMapper.java @@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Constants; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import org.apache.ibatis.annotations.Update; /** * 店铺数据处理层 @@ -37,4 +38,13 @@ public interface StoreMapper extends BaseMapper { IPage getStoreList(IPage page, @Param(Constants.WRAPPER) Wrapper queryWrapper); + /** + * 修改店铺收藏数据 + * + * @param storeId 店铺id + * @param num 收藏数量 + */ + @Update("update li_store set collection_num = collection_num + #{num} where id = #{storeId}") + void updateCollection(String storeId, Integer num); + } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/store/service/BillService.java b/framework/src/main/java/cn/lili/modules/store/service/BillService.java index 19b99429..5ffc1a8e 100644 --- a/framework/src/main/java/cn/lili/modules/store/service/BillService.java +++ b/framework/src/main/java/cn/lili/modules/store/service/BillService.java @@ -1,11 +1,8 @@ package cn.lili.modules.store.service; import cn.hutool.core.date.DateTime; -import cn.lili.common.vo.PageVO; -import cn.lili.modules.order.order.entity.dos.StoreFlow; import cn.lili.modules.store.entity.dos.Bill; import cn.lili.modules.store.entity.dto.BillSearchParams; -import cn.lili.modules.store.entity.enums.BillStatusEnum; import cn.lili.modules.store.entity.vos.BillListVO; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; @@ -42,25 +39,6 @@ public interface BillService extends IService { */ void immediatelyBill(String storeId, Long endTime); - /** - * 根据结算单ID获取商家流水 - * - * @param pageVO 分页 - * @param id 结算单ID - * @param type 类型 - * @return 商家流水 - */ - IPage getStoreFlow(String id, String type, PageVO pageVO); - - /** - * 根据结算单ID获取商家流水 - * - * @param pageVO 分页 - * @param id 结算单ID - * @return 商家流水 - */ - IPage getDistributionFlow(String id, PageVO pageVO); - /** * 获取结算单分页 * @@ -85,14 +63,6 @@ public interface BillService extends IService { */ boolean complete(String id); - /** - * 商家待结算数量 - * - * @param billStatusEnum 结算单类型 - * @return 待结算商家数量 - */ - Integer billNum(BillStatusEnum billStatusEnum); - /** * 下载结算单 * @response response diff --git a/framework/src/main/java/cn/lili/modules/store/service/StoreDetailService.java b/framework/src/main/java/cn/lili/modules/store/service/StoreDetailService.java index 8232dd2f..07995f46 100644 --- a/framework/src/main/java/cn/lili/modules/store/service/StoreDetailService.java +++ b/framework/src/main/java/cn/lili/modules/store/service/StoreDetailService.java @@ -1,9 +1,11 @@ package cn.lili.modules.store.service; +import cn.hutool.core.date.DateTime; import cn.lili.modules.store.entity.dos.Store; import cn.lili.modules.store.entity.dos.StoreDetail; import cn.lili.modules.store.entity.dto.StoreAfterSaleAddressDTO; import cn.lili.modules.store.entity.dto.StoreSettingDTO; +import cn.lili.modules.store.entity.dto.StoreSettlementDay; import cn.lili.modules.store.entity.vos.StoreBasicInfoVO; import cn.lili.modules.store.entity.vos.StoreDetailVO; import cn.lili.modules.store.entity.vos.StoreManagementCategoryVO; @@ -113,4 +115,27 @@ public interface StoreDetailService extends IService { * @param store 店铺信息 */ void updateStoreGoodsInfo(Store store); + + /** + * 修改店铺udesk字段设置 + * + * @param merchantEuid 店铺客服信息 + */ + Boolean editMerchantEuid(String merchantEuid); + + /** + * 获取待结算店铺列表 + * + * @param day 结算日 + * @return 待结算店铺列表 + */ + List getSettlementStore(int day); + + /** + * 修改店铺的结算日 + * + * @param storeId 店铺ID + * @param dateTime 结算日 + */ + void updateSettlementDay(String storeId, DateTime dateTime); } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/store/service/StoreService.java b/framework/src/main/java/cn/lili/modules/store/service/StoreService.java index 0fa2ab0b..95632b0d 100644 --- a/framework/src/main/java/cn/lili/modules/store/service/StoreService.java +++ b/framework/src/main/java/cn/lili/modules/store/service/StoreService.java @@ -1,6 +1,7 @@ package cn.lili.modules.store.service; import cn.lili.common.vo.PageVO; +import cn.lili.modules.member.entity.dto.CollectionDTO; import cn.lili.modules.store.entity.dos.Store; import cn.lili.modules.store.entity.dto.*; import cn.lili.modules.store.entity.vos.StoreSearchParams; @@ -21,7 +22,6 @@ public interface StoreService extends IService { * 用于展示店铺列表 * * @param entity - * @param page * @return */ IPage findByConditionPage(StoreSearchParams entity, PageVO page); @@ -101,26 +101,6 @@ public interface StoreService extends IService { */ boolean applyThirdStep(StoreOtherInfoDTO storeOtherInfoDTO); - /** - * 获取待审核店铺数量 - * - * @return 待审核店铺数量 - */ - Integer auditNum(); - - /** - * 获取所有店铺数量 - * - * @return 店铺总数 - */ - Integer storeNum(); - - /** - * 获取今天的店铺数量 - * - * @return 今天的店铺数量 - */ - Integer todayStoreNum(); /** * 更新店铺商品数量 @@ -132,7 +112,7 @@ public interface StoreService extends IService { /** * 更新店铺收藏数量 * - * @param goodsId 店铺ID + * @param collectionDTO 收藏信息 */ - void updateStoreCollectionNum(String goodsId); + void updateStoreCollectionNum(CollectionDTO collectionDTO); } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/store/serviceimpl/BillServiceImpl.java b/framework/src/main/java/cn/lili/modules/store/serviceimpl/BillServiceImpl.java index d25ae1e8..430d89d2 100644 --- a/framework/src/main/java/cn/lili/modules/store/serviceimpl/BillServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/store/serviceimpl/BillServiceImpl.java @@ -11,11 +11,8 @@ import cn.lili.common.security.context.UserContext; import cn.lili.common.security.enums.UserEnums; import cn.lili.common.utils.CurrencyUtil; import cn.lili.common.utils.SnowFlake; -import cn.lili.common.utils.StringUtils; -import cn.lili.common.vo.PageVO; -import cn.lili.modules.order.order.entity.dos.StoreFlow; +import cn.lili.modules.order.order.entity.dto.StoreFlowQueryDTO; import cn.lili.modules.order.order.entity.enums.FlowTypeEnum; -import cn.lili.modules.order.order.mapper.StoreFlowMapper; import cn.lili.modules.order.order.service.StoreFlowService; import cn.lili.modules.store.entity.dos.Bill; import cn.lili.modules.store.entity.dto.BillSearchParams; @@ -28,7 +25,6 @@ import cn.lili.modules.store.mapper.BillMapper; import cn.lili.modules.store.service.BillService; import cn.lili.modules.store.service.StoreDetailService; import cn.lili.mybatis.util.PageUtil; -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 com.baomidou.mybatisplus.core.metadata.IPage; @@ -39,7 +35,6 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; -import javax.annotation.Resource; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import java.net.URLEncoder; @@ -66,8 +61,6 @@ public class BillServiceImpl extends ServiceImpl implements Bi */ @Autowired private StoreFlowService storeFlowService; - @Resource - private StoreFlowMapper storeFlowMapper; @Override public void createBill(String storeId, Date startTime, DateTime endTime) { @@ -97,7 +90,7 @@ public class BillServiceImpl extends ServiceImpl implements Bi .eq("store_id", storeId) .eq("flow_type", FlowTypeEnum.PAY.name()) .between("create_time", startTime, endTime)); - Double orderPrice = 0D; + double orderPrice = 0D; if (orderBill != null) { bill.setOrderPrice(orderBill.getOrderPrice()); bill.setCommissionPrice(orderBill.getCommissionPrice()); @@ -105,9 +98,8 @@ public class BillServiceImpl extends ServiceImpl implements Bi bill.setSiteCouponCommission(orderBill.getSiteCouponCommission()); bill.setPointSettlementPrice(orderBill.getPointSettlementPrice()); bill.setKanjiaSettlementPrice(orderBill.getKanjiaSettlementPrice()); - //入账金额=订单金额+积分商品+砍价商品 - orderPrice = CurrencyUtil.add(CurrencyUtil.add(orderBill.getBillPrice(), orderBill.getPointSettlementPrice()), - orderBill.getKanjiaSettlementPrice()); + //入账金额=订单金额 + orderPrice = orderBill.getBillPrice(); } @@ -163,18 +155,6 @@ public class BillServiceImpl extends ServiceImpl implements Bi // this.createBill(storeId, startTime, endTime); } - @Override - public IPage getStoreFlow(String id, String type, PageVO pageVO) { - Bill bill = this.getById(id); - return storeFlowService.getStoreFlow(bill.getStoreId(), type, false, pageVO, bill.getStartTime(), bill.getCreateTime()); - } - - @Override - public IPage getDistributionFlow(String id, PageVO pageVO) { - Bill bill = this.getById(id); - return storeFlowService.getStoreFlow(bill.getStoreId(), null, true, pageVO, bill.getStartTime(), bill.getCreateTime()); - } - @Override public IPage billPage(BillSearchParams billSearchParams) { QueryWrapper queryWrapper = billSearchParams.queryWrapper(); @@ -211,19 +191,11 @@ public class BillServiceImpl extends ServiceImpl implements Bi } LambdaUpdateWrapper lambdaUpdateWrapper = Wrappers.lambdaUpdate(); lambdaUpdateWrapper.eq(Bill::getId, id); + lambdaUpdateWrapper.set(Bill::getPayTime, new Date()); lambdaUpdateWrapper.set(Bill::getBillStatus, BillStatusEnum.COMPLETE.name()); return this.update(lambdaUpdateWrapper); } - @Override - public Integer billNum(BillStatusEnum billStatusEnum) { - LambdaUpdateWrapper lambdaUpdateWrapper = Wrappers.lambdaUpdate(); - lambdaUpdateWrapper.eq(Bill::getBillStatus, billStatusEnum.name()); - lambdaUpdateWrapper.eq(StringUtils.equals(UserContext.getCurrentUser().getRole().name(), UserEnums.STORE.name()), - Bill::getStoreId, UserContext.getCurrentUser().getStoreId()); - return this.count(lambdaUpdateWrapper); - } - @Override public void download(HttpServletResponse response, String id) { @@ -251,12 +223,8 @@ public class BillServiceImpl extends ServiceImpl implements Bi writer.addHeaderAlias("billPrice", "应结金额"); writer.setColumnWidth(11, 20); - //存放入账列表 - LambdaQueryWrapper lambdaQueryWrapper = Wrappers.lambdaQuery(); - lambdaQueryWrapper.eq(StoreFlow::getStoreId, bill.getStoreId()); - lambdaQueryWrapper.between(StoreFlow::getCreateTime, bill.getStartTime(), bill.getCreateTime()); - lambdaQueryWrapper.eq(StoreFlow::getFlowType, FlowTypeEnum.PAY.name()); - List storeFlowList = storeFlowMapper.getStoreFlowPayDownloadVO(lambdaQueryWrapper); + + List storeFlowList = storeFlowService.getStoreFlowPayDownloadVO(StoreFlowQueryDTO.builder().type(FlowTypeEnum.PAY.name()).bill(bill).build()); writer.write(storeFlowList, true); writer.setSheet("退款订单"); @@ -283,12 +251,10 @@ public class BillServiceImpl extends ServiceImpl implements Bi writer.addHeaderAlias("billPrice", "结算金额"); writer.setColumnWidth(12, 20); - //存放入账列表 - LambdaQueryWrapper storeFlowlambdaQueryWrapper = Wrappers.lambdaQuery(); - storeFlowlambdaQueryWrapper.eq(StoreFlow::getStoreId, bill.getStoreId()); - storeFlowlambdaQueryWrapper.between(StoreFlow::getCreateTime, bill.getStartTime(), bill.getCreateTime()); - storeFlowlambdaQueryWrapper.eq(StoreFlow::getFlowType, FlowTypeEnum.PAY.name()); - List storeFlowRefundDownloadVOList = storeFlowMapper.getStoreFlowRefundDownloadVO(storeFlowlambdaQueryWrapper); + + List storeFlowRefundDownloadVOList = storeFlowService.getStoreFlowRefundDownloadVO( + StoreFlowQueryDTO.builder().type(FlowTypeEnum.REFUND.name()).bill(bill).build() + ); writer.write(storeFlowRefundDownloadVOList, true); ServletOutputStream out = null; diff --git a/framework/src/main/java/cn/lili/modules/store/serviceimpl/StoreDetailServiceImpl.java b/framework/src/main/java/cn/lili/modules/store/serviceimpl/StoreDetailServiceImpl.java index 956a8bb9..c071f9b2 100644 --- a/framework/src/main/java/cn/lili/modules/store/serviceimpl/StoreDetailServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/store/serviceimpl/StoreDetailServiceImpl.java @@ -1,5 +1,6 @@ package cn.lili.modules.store.serviceimpl; +import cn.hutool.core.date.DateTime; import cn.hutool.core.map.MapUtil; import cn.hutool.json.JSONUtil; import cn.lili.common.properties.RocketmqCustomProperties; @@ -7,16 +8,14 @@ import cn.lili.common.security.AuthUser; import cn.lili.common.security.context.UserContext; import cn.lili.common.utils.BeanUtil; import cn.lili.modules.goods.entity.dos.Category; -import cn.lili.modules.goods.entity.dos.Goods; -import cn.lili.modules.goods.entity.dos.GoodsSku; import cn.lili.modules.goods.service.CategoryService; import cn.lili.modules.goods.service.GoodsService; -import cn.lili.modules.goods.service.GoodsSkuService; import cn.lili.modules.search.utils.EsIndexUtil; import cn.lili.modules.store.entity.dos.Store; import cn.lili.modules.store.entity.dos.StoreDetail; import cn.lili.modules.store.entity.dto.StoreAfterSaleAddressDTO; import cn.lili.modules.store.entity.dto.StoreSettingDTO; +import cn.lili.modules.store.entity.dto.StoreSettlementDay; import cn.lili.modules.store.entity.vos.StoreBasicInfoVO; import cn.lili.modules.store.entity.vos.StoreDetailVO; import cn.lili.modules.store.entity.vos.StoreManagementCategoryVO; @@ -35,10 +34,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Objects; +import java.util.*; /** * 店铺详细业务层实现 @@ -64,9 +60,6 @@ public class StoreDetailServiceImpl extends ServiceImpl() - .eq(Goods::getStoreId, store.getId()) - .set(Goods::getStoreName, store.getStoreName()) - .set(Goods::getSelfOperated, store.getSelfOperated())); - goodsSkuService.update(new LambdaUpdateWrapper() - .eq(GoodsSku::getStoreId, store.getId()) - .set(GoodsSku::getStoreName, store.getStoreName()) - .set(GoodsSku::getSelfOperated, store.getSelfOperated())); + goodsService.updateStoreDetail(store); Map updateIndexFieldsMap = EsIndexUtil.getUpdateIndexFieldsMap( - MapUtil.builder().put("storeId", store.getId()).build(), - MapUtil.builder().put("storeName", store.getStoreName()).put("selfOperated", store.getSelfOperated()).build()); + MapUtil.builder(new HashMap()).put("storeId", store.getId()).build(), + MapUtil.builder(new HashMap()).put("storeName", store.getStoreName()).put("selfOperated", store.getSelfOperated()).build()); String destination = rocketmqCustomProperties.getGoodsTopic() + ":" + GoodsTagsEnum.UPDATE_GOODS_INDEX_FIELD.name(); //发送mq消息 rocketMQTemplate.asyncSend(destination, JSONUtil.toJsonStr(updateIndexFieldsMap), RocketmqSendCallbackBuilder.commonCallback()); } + @Override + public Boolean editMerchantEuid(String merchantEuid) { + AuthUser tokenUser = Objects.requireNonNull(UserContext.getCurrentUser()); + Store store = storeService.getById(tokenUser.getStoreId()); + store.setMerchantEuid(merchantEuid); + return storeService.updateById(store); + } + + /** + * 获取待结算店铺列表 + * + * @param day 结算日 + * @return 待结算店铺列表 + */ + @Override + public List getSettlementStore(int day) { + return this.baseMapper.getSettlementStore(day); + } + + /** + * 修改店铺的结算日 + * + * @param storeId 店铺ID + * @param dateTime 结算日 + */ + @Override + public void updateSettlementDay(String storeId, DateTime dateTime) { + this.baseMapper.updateSettlementDay(storeId, dateTime); + } + @Override public StoreBasicInfoVO getStoreBasicInfoDTO(String storeId) { return this.baseMapper.getStoreBasicInfoDTO(storeId); diff --git a/framework/src/main/java/cn/lili/modules/store/serviceimpl/StoreServiceImpl.java b/framework/src/main/java/cn/lili/modules/store/serviceimpl/StoreServiceImpl.java index df337b0f..0cc64d26 100644 --- a/framework/src/main/java/cn/lili/modules/store/serviceimpl/StoreServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/store/serviceimpl/StoreServiceImpl.java @@ -1,7 +1,6 @@ package cn.lili.modules.store.serviceimpl; import cn.hutool.core.date.DateTime; -import cn.hutool.core.date.DateUtil; import cn.hutool.core.text.CharSequenceUtil; import cn.lili.common.enums.ResultCode; import cn.lili.common.exception.ServiceException; @@ -9,16 +8,10 @@ import cn.lili.common.security.AuthUser; import cn.lili.common.security.context.UserContext; import cn.lili.common.utils.BeanUtil; import cn.lili.common.vo.PageVO; -import cn.lili.modules.goods.entity.dos.Goods; -import cn.lili.modules.goods.entity.enums.GoodsAuthEnum; -import cn.lili.modules.goods.entity.enums.GoodsStatusEnum; import cn.lili.modules.goods.service.GoodsService; -import cn.lili.modules.goods.service.GoodsSkuService; import cn.lili.modules.member.entity.dos.Member; -import cn.lili.modules.member.entity.dos.StoreCollection; +import cn.lili.modules.member.entity.dto.CollectionDTO; import cn.lili.modules.member.service.MemberService; -import cn.lili.modules.member.service.StoreCollectionService; -import cn.lili.modules.page.service.PageDataService; import cn.lili.modules.store.entity.dos.Store; import cn.lili.modules.store.entity.dos.StoreDetail; import cn.lili.modules.store.entity.dto.*; @@ -62,26 +55,11 @@ public class StoreServiceImpl extends ServiceImpl implements */ @Autowired private GoodsService goodsService; - /** - * 商品SKU - */ - @Autowired - private GoodsSkuService goodsSkuService; /** * 店铺详情 */ @Autowired private StoreDetailService storeDetailService; - /** - * 页面 - */ - @Autowired - private PageDataService pageDataService; - /** - * 店铺收藏 - */ - @Autowired - private StoreCollectionService storeCollectionService; @Override public IPage findByConditionPage(StoreSearchParams storeSearchParams, PageVO page) { @@ -188,8 +166,6 @@ public class StoreServiceImpl extends ServiceImpl implements } if (passed == 0) { store.setStoreDisable(StoreStatusEnum.OPEN.value()); - //添加店铺页面 - pageDataService.addStorePageData(store.getId()); //修改会员 表示已有店铺 Member member = memberService.getById(store.getMemberId()); member.setHaveStore(true); @@ -291,35 +267,10 @@ public class StoreServiceImpl extends ServiceImpl implements return this.updateById(store); } - @Override - public Integer auditNum() { - LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(); - queryWrapper.eq(Store::getStoreDisable, StoreStatusEnum.APPLYING.name()); - return this.count(queryWrapper); - } - - @Override - public Integer storeNum() { - LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(); - queryWrapper.eq(Store::getStoreDisable, StoreStatusEnum.OPEN.name()); - return this.count(queryWrapper); - } - - @Override - public Integer todayStoreNum() { - LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(); - queryWrapper.eq(Store::getStoreDisable, StoreStatusEnum.OPEN.name()); - queryWrapper.ge(Store::getCreateTime, DateUtil.beginOfDay(new DateTime())); - return this.count(queryWrapper); - } - @Override public void updateStoreGoodsNum(String storeId) { //获取店铺已上架已审核通过商品数量 - Integer goodsNum = goodsService.count(new LambdaQueryWrapper() - .eq(Goods::getStoreId, storeId) - .eq(Goods::getIsAuth, GoodsAuthEnum.PASS.name()) - .eq(Goods::getMarketEnable, GoodsStatusEnum.UPPER.name())); + long goodsNum = goodsService.countStoreGoodsNum(storeId); //修改店铺商品数量 this.update(new LambdaUpdateWrapper() .set(Store::getGoodsNum, goodsNum) @@ -327,15 +278,8 @@ public class StoreServiceImpl extends ServiceImpl implements } @Override - public void updateStoreCollectionNum(String goodsId) { - String storeId = goodsSkuService.getById(goodsId).getStoreId(); - //获取店铺收藏数量 - Integer collectionNum = storeCollectionService.count(new LambdaQueryWrapper() - .eq(StoreCollection::getStoreId, storeId)); - //修改店铺收藏数量 - this.update(new LambdaUpdateWrapper() - .set(Store::getCollectionNum, collectionNum) - .eq(Store::getId, storeId)); + public void updateStoreCollectionNum(CollectionDTO collectionDTO) { + baseMapper.updateCollection(collectionDTO.getId(), collectionDTO.getNum()); } /** @@ -344,10 +288,11 @@ public class StoreServiceImpl extends ServiceImpl implements * @return 店铺信息 */ private Store getStoreByMember() { - AuthUser authUser = Objects.requireNonNull(UserContext.getCurrentUser()); - LambdaQueryWrapper lambdaQueryWrapper = Wrappers.lambdaQuery(); - lambdaQueryWrapper.eq(Store::getMemberId, authUser.getId()); - return this.getOne(lambdaQueryWrapper); + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + if (UserContext.getCurrentUser() != null) { + lambdaQueryWrapper.eq(Store::getMemberId, UserContext.getCurrentUser().getId()); + } + return this.getOne(lambdaQueryWrapper, false); } } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/system/entity/dto/ImSetting.java b/framework/src/main/java/cn/lili/modules/system/entity/dto/ImSetting.java index 87ca2b74..4ba51a1e 100644 --- a/framework/src/main/java/cn/lili/modules/system/entity/dto/ImSetting.java +++ b/framework/src/main/java/cn/lili/modules/system/entity/dto/ImSetting.java @@ -20,7 +20,7 @@ public class ImSetting implements Serializable { @ApiModelProperty(value = "平台ID") - private Integer tenantId; + private String tenantId; } diff --git a/framework/src/main/java/cn/lili/modules/system/entity/dto/payment/WechatPaymentSetting.java b/framework/src/main/java/cn/lili/modules/system/entity/dto/payment/WechatPaymentSetting.java index b1aa7a39..9dc4a73d 100644 --- a/framework/src/main/java/cn/lili/modules/system/entity/dto/payment/WechatPaymentSetting.java +++ b/framework/src/main/java/cn/lili/modules/system/entity/dto/payment/WechatPaymentSetting.java @@ -14,9 +14,17 @@ import lombok.experimental.Accessors; public class WechatPaymentSetting { /** - * 应用id + * APP应用id */ private String appId; + /** + * 小程序应用id + */ + private String mpAppId; + /** + * 服务号应用id + */ + private String serviceAppId; /** * 商户号 */ diff --git a/framework/src/main/java/cn/lili/modules/system/service/SensitiveWordsService.java b/framework/src/main/java/cn/lili/modules/system/service/SensitiveWordsService.java index 239fa94d..ac772590 100644 --- a/framework/src/main/java/cn/lili/modules/system/service/SensitiveWordsService.java +++ b/framework/src/main/java/cn/lili/modules/system/service/SensitiveWordsService.java @@ -11,5 +11,9 @@ import com.baomidou.mybatisplus.extension.service.IService; */ public interface SensitiveWordsService extends IService { + /** + * 重新写入缓存 + */ + void resetCache(); } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/system/serviceimpl/SensitiveWordsServiceImpl.java b/framework/src/main/java/cn/lili/modules/system/serviceimpl/SensitiveWordsServiceImpl.java index 9a16a185..3205aef6 100644 --- a/framework/src/main/java/cn/lili/modules/system/serviceimpl/SensitiveWordsServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/system/serviceimpl/SensitiveWordsServiceImpl.java @@ -1,13 +1,16 @@ package cn.lili.modules.system.serviceimpl; +import cn.lili.cache.Cache; +import cn.lili.cache.CachePrefix; import cn.lili.modules.system.entity.dos.SensitiveWords; import cn.lili.modules.system.mapper.SensitiveWordsMapper; import cn.lili.modules.system.service.SensitiveWordsService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.stream.Collectors; /** * 敏感词业务层实现 @@ -17,5 +20,17 @@ import org.springframework.transaction.annotation.Transactional; */ @Service public class SensitiveWordsServiceImpl extends ServiceImpl implements SensitiveWordsService { + @Autowired + private Cache> cache; + @Override + public void resetCache() { + List sensitiveWordsList = this.list(); + + if (sensitiveWordsList == null || sensitiveWordsList.isEmpty()) { + return; + } + List sensitiveWords = sensitiveWordsList.stream().map(SensitiveWords::getSensitiveWord).collect(Collectors.toList()); + cache.put(CachePrefix.SENSITIVE.getPrefix(), sensitiveWords); + } } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/system/token/ManagerTokenGenerate.java b/framework/src/main/java/cn/lili/modules/system/token/ManagerTokenGenerate.java index 850560a9..f88ff534 100644 --- a/framework/src/main/java/cn/lili/modules/system/token/ManagerTokenGenerate.java +++ b/framework/src/main/java/cn/lili/modules/system/token/ManagerTokenGenerate.java @@ -1,6 +1,6 @@ package cn.lili.modules.system.token; -import cn.hutool.core.util.StrUtil; +import cn.hutool.core.text.CharSequenceUtil; import cn.lili.cache.Cache; import cn.lili.cache.CachePrefix; import cn.lili.common.security.AuthUser; @@ -45,7 +45,7 @@ public class ManagerTokenGenerate extends AbstractTokenGenerate { public Token createToken(String username, Boolean longTerm) { //生成token AdminUser adminUser = adminUserService.findByUsername(username); - AuthUser user = new AuthUser(adminUser.getUsername(), adminUser.getId(), UserEnums.MANAGER, adminUser.getNickName(), adminUser.getIsSuper()); + AuthUser user = new AuthUser(adminUser.getUsername(), adminUser.getId(), adminUser.getAvatar(), UserEnums.MANAGER, adminUser.getNickName(), adminUser.getIsSuper()); List userMenuVOList = roleMenuService.findAllMenu(user.getId()); @@ -68,40 +68,40 @@ public class ManagerTokenGenerate extends AbstractTokenGenerate { */ private Map> permissionList(List userMenuVOList) { Map> permission = new HashMap<>(2); - if (userMenuVOList == null || userMenuVOList.size() == 0) { - return permission; - } + List superPermissions = new ArrayList<>(); List queryPermissions = new ArrayList<>(); initPermission(superPermissions, queryPermissions); //循环权限菜单 - userMenuVOList.forEach(menu -> { - //循环菜单,赋予用户权限 - if (StrUtil.isNotEmpty(menu.getPermission())) { - //获取路径集合 - String[] permissionUrl = menu.getPermission().split(","); - //for循环路径集合 - for (String url : permissionUrl) { - //如果是超级权限 则计入超级权限 - if (menu.getSuper()) { - //如果已有超级权限,则这里就不做权限的累加 - if (!superPermissions.contains(url)) { - superPermissions.add(url); + if (userMenuVOList != null && !userMenuVOList.isEmpty()) { + userMenuVOList.forEach(menu -> { + //循环菜单,赋予用户权限 + if (CharSequenceUtil.isNotEmpty(menu.getPermission())) { + //获取路径集合 + String[] permissionUrl = menu.getPermission().split(","); + //for循环路径集合 + for (String url : permissionUrl) { + //如果是超级权限 则计入超级权限 + if (Boolean.TRUE.equals(menu.getSuper())) { + //如果已有超级权限,则这里就不做权限的累加 + if (!superPermissions.contains(url)) { + superPermissions.add(url); + } } - } - //否则计入浏览权限 - else { - //没有权限,则累加。 - if (!queryPermissions.contains(url)) { - queryPermissions.add(url); + //否则计入浏览权限 + else { + //没有权限,则累加。 + if (!queryPermissions.contains(url)) { + queryPermissions.add(url); + } } } } - } - //去除重复的权限 - queryPermissions.removeAll(superPermissions); - }); + //去除重复的权限 + queryPermissions.removeAll(superPermissions); + }); + } permission.put(PermissionEnum.SUPER.name(), superPermissions); permission.put(PermissionEnum.QUERY.name(), queryPermissions); return permission; diff --git a/framework/src/main/java/cn/lili/modules/system/utils/CharacterConstant.java b/framework/src/main/java/cn/lili/modules/system/utils/CharacterConstant.java deleted file mode 100644 index 44749097..00000000 --- a/framework/src/main/java/cn/lili/modules/system/utils/CharacterConstant.java +++ /dev/null @@ -1,20 +0,0 @@ -package cn.lili.modules.system.utils; - -/** - * - * 字符常量 - * @author Bulbasaur - * @version v1.0 - * @since v1.0 - * 2020-02-25 14:10:16 - */ -public class CharacterConstant { - - - /** - * 字符* - */ - public final static char WILDCARD_STAR = '*'; - - -} diff --git a/framework/src/main/java/cn/lili/modules/system/utils/HttpUtils.java b/framework/src/main/java/cn/lili/modules/system/utils/HttpUtils.java deleted file mode 100644 index 8f01aaf8..00000000 --- a/framework/src/main/java/cn/lili/modules/system/utils/HttpUtils.java +++ /dev/null @@ -1,243 +0,0 @@ -package cn.lili.modules.system.utils; - -import com.alibaba.fastjson.JSONObject; -import lombok.extern.slf4j.Slf4j; - -import java.io.*; -import java.net.HttpURLConnection; -import java.net.URL; -import java.net.URLEncoder; -import java.nio.charset.StandardCharsets; -import java.util.Iterator; -import java.util.Map; - -/** - * Http工具 - * - * @author pikachu - * @since 2018/3/13 - */ -@Slf4j -public final class HttpUtils { - - public static final int HTTP_CONN_TIMEOUT = 100000; - public static final int HTTP_SOCKET_TIMEOUT = 100000; - - public static String doPost(String reqUrl, Map parameters, String encoding, int connectTimeout, - int readTimeout) { - HttpURLConnection urlConn = null; - try { - urlConn = sendPost(reqUrl, parameters, encoding, connectTimeout, readTimeout); - String responseContent = getContent(urlConn, encoding); - return responseContent.trim(); - } finally { - if (urlConn != null) { - urlConn.disconnect(); - - } - } - } - - /** - * post携带json请求 - * - * @param reqUrl 请求地址 - * @param jsonParameters 参数 - * @return - */ - public static String doPostWithJson(String reqUrl, Map jsonParameters) { - - BufferedReader reader = null; - try { - //创建连接 - URL url = new URL(reqUrl); - HttpURLConnection connection = (HttpURLConnection) url.openConnection(); - connection.setDoOutput(true); - connection.setDoInput(true); - connection.setUseCaches(false); - connection.setInstanceFollowRedirects(true); - //设置请求方式 - connection.setRequestMethod("POST"); - //设置发送数据的格式 - connection.setRequestProperty("Content-Type", "application/json"); - connection.connect(); - //一定要用BufferedReader 来接收响应, 使用字节来接收响应的方法是接收不到内容的 - //utf-8编码 - OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream(), StandardCharsets.UTF_8); - out.append(JSONObject.toJSONString(jsonParameters)); - out.flush(); - out.close(); - //读取响应 - reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8)); - String line; - String res = ""; - while ((line = reader.readLine()) != null) { - res += line; - } - reader.close(); - - return res; - } catch (IOException e) { - log.error("post请求错误", e); - } - //自定义错误信息 - return "error"; - - } - - /** - * post携带json请求 - * - * @param reqUrl 请求地址 - * @param object 对象 - * @return - */ - public static String doPostWithJson(String reqUrl, Object object) { - - BufferedReader reader = null; - try { - //创建连接 - URL url = new URL(reqUrl); - HttpURLConnection connection = (HttpURLConnection) url.openConnection(); - connection.setDoOutput(true); - connection.setDoInput(true); - connection.setUseCaches(false); - connection.setInstanceFollowRedirects(true); - //设置请求方式 - connection.setRequestMethod("POST"); - //设置发送数据的格式 - connection.setRequestProperty("Content-Type", "application/json"); - connection.connect(); - //一定要用BufferedReader 来接收响应, 使用字节来接收响应的方法是接收不到内容的 - //utf-8编码 - OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream(), StandardCharsets.UTF_8); - out.append(JSONObject.toJSONString(object)); - out.flush(); - out.close(); - //读取响应 - reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8)); - String line; - String res = ""; - while ((line = reader.readLine()) != null) { - res += line; - } - reader.close(); - - return res; - } catch (IOException e) { - log.error("post错误", e); - } - //自定义错误信息 - return "error"; - - } - - private static HttpURLConnection sendPost(String reqUrl, - Map parameters, String encoding, int connectTimeout, int readTimeout) { - HttpURLConnection urlConn = null; - try { - String params = generatorParamString(parameters, encoding); - URL url = new URL(reqUrl); - urlConn = (HttpURLConnection) url.openConnection(); - urlConn.setRequestMethod("POST"); - //(单位:毫秒)jdk - urlConn.setConnectTimeout(connectTimeout); - //(单位:毫秒)jdk 1.5换成这个,读操作超时 - urlConn.setReadTimeout(readTimeout); - urlConn.setDoOutput(true); - //String按照字节处理是一个好方法 - byte[] b = params.getBytes(encoding); - urlConn.getOutputStream().write(b, 0, b.length); - urlConn.getOutputStream().flush(); - urlConn.getOutputStream().close(); - } catch (Exception e) { - throw new RuntimeException(e.getMessage(), e); - } - return urlConn; - } - - private static String getContent(HttpURLConnection urlConn, String encoding) { - try { - String responseContent = null; - InputStream in = urlConn.getInputStream(); - BufferedReader rd = new BufferedReader(new InputStreamReader(in, encoding)); - String tempLine = rd.readLine(); - StringBuffer tempStr = new StringBuffer(); - String crlf = System.getProperty("line.separator"); - while (tempLine != null) { - tempStr.append(tempLine); - tempStr.append(crlf); - tempLine = rd.readLine(); - } - responseContent = tempStr.toString(); - rd.close(); - in.close(); - return responseContent; - } catch (Exception e) { - throw new RuntimeException(e.getMessage(), e); - } - } - - /** - * @param link - * @param encoding - * @return - */ - public static String doGet(String link, String encoding, int connectTimeout, int readTimeout) { - HttpURLConnection conn = null; - try { - URL url = new URL(link); - conn = (HttpURLConnection) url.openConnection(); - conn.setRequestMethod("GET"); - conn.setConnectTimeout(connectTimeout); - conn.setReadTimeout(readTimeout); - BufferedInputStream in = new BufferedInputStream( - conn.getInputStream()); - ByteArrayOutputStream out = new ByteArrayOutputStream(); - byte[] buf = new byte[1024]; - for (int i = 0; (i = in.read(buf)) > 0; ) { - out.write(buf, 0, i); - } - out.flush(); - String s = out.toString(encoding); - return s; - } catch (Exception e) { - throw new RuntimeException(e.getMessage(), e); - } finally { - if (conn != null) { - conn.disconnect(); - conn = null; - } - } - } - - /** - * 将parameters中数据转换成用"&"链接的http请求参数形式 - * - * @param parameters - * @return - */ - private static String generatorParamString(Map parameters, String encoding) { - StringBuffer params = new StringBuffer(); - if (parameters != null) { - for (Iterator iter = parameters.keySet().iterator(); iter - .hasNext(); ) { - String name = iter.next(); - String value = parameters.get(name); - params.append(name + "="); - try { - params.append(URLEncoder.encode(value, encoding)); - } catch (UnsupportedEncodingException e) { - throw new RuntimeException(e.getMessage(), e); - } catch (Exception e) { - String message = String.format("'%s'='%s'", name, value); - throw new RuntimeException(message, e); - } - if (iter.hasNext()) { - params.append("&"); - } - } - } - return params.toString(); - } -} \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/verification/aop/VerificationInterceptor.java b/framework/src/main/java/cn/lili/modules/verification/aop/VerificationInterceptor.java index 0948babd..913fcb25 100644 --- a/framework/src/main/java/cn/lili/modules/verification/aop/VerificationInterceptor.java +++ b/framework/src/main/java/cn/lili/modules/verification/aop/VerificationInterceptor.java @@ -3,7 +3,7 @@ package cn.lili.modules.verification.aop; import cn.lili.common.enums.ResultCode; import cn.lili.common.exception.ServiceException; import cn.lili.modules.verification.aop.annotation.Verification; -import cn.lili.modules.verification.enums.VerificationEnums; +import cn.lili.modules.verification.entity.enums.VerificationEnums; import cn.lili.modules.verification.service.VerificationService; import lombok.extern.slf4j.Slf4j; import org.aspectj.lang.JoinPoint; diff --git a/framework/src/main/java/cn/lili/modules/verification/aop/annotation/Verification.java b/framework/src/main/java/cn/lili/modules/verification/aop/annotation/Verification.java index a6bd95e0..26b79aa2 100644 --- a/framework/src/main/java/cn/lili/modules/verification/aop/annotation/Verification.java +++ b/framework/src/main/java/cn/lili/modules/verification/aop/annotation/Verification.java @@ -1,7 +1,7 @@ package cn.lili.modules.verification.aop.annotation; -import cn.lili.modules.verification.enums.VerificationEnums; +import cn.lili.modules.verification.entity.enums.VerificationEnums; import java.lang.annotation.*; diff --git a/framework/src/main/java/cn/lili/modules/verification/enums/VerificationEnums.java b/framework/src/main/java/cn/lili/modules/verification/entity/enums/VerificationEnums.java similarity index 86% rename from framework/src/main/java/cn/lili/modules/verification/enums/VerificationEnums.java rename to framework/src/main/java/cn/lili/modules/verification/entity/enums/VerificationEnums.java index 4825c9a6..48b6b92b 100644 --- a/framework/src/main/java/cn/lili/modules/verification/enums/VerificationEnums.java +++ b/framework/src/main/java/cn/lili/modules/verification/entity/enums/VerificationEnums.java @@ -1,4 +1,4 @@ -package cn.lili.modules.verification.enums; +package cn.lili.modules.verification.entity.enums; /** * VerificationEnums diff --git a/framework/src/main/java/cn/lili/modules/verification/service/VerificationService.java b/framework/src/main/java/cn/lili/modules/verification/service/VerificationService.java index 44c3f836..40d709c5 100644 --- a/framework/src/main/java/cn/lili/modules/verification/service/VerificationService.java +++ b/framework/src/main/java/cn/lili/modules/verification/service/VerificationService.java @@ -1,6 +1,6 @@ package cn.lili.modules.verification.service; -import cn.lili.modules.verification.enums.VerificationEnums; +import cn.lili.modules.verification.entity.enums.VerificationEnums; import java.io.IOException; import java.util.Map; diff --git a/framework/src/main/java/cn/lili/modules/verification/service/impl/VerificationServiceImpl.java b/framework/src/main/java/cn/lili/modules/verification/service/impl/VerificationServiceImpl.java index c5449bc6..8cb4b56e 100644 --- a/framework/src/main/java/cn/lili/modules/verification/service/impl/VerificationServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/verification/service/impl/VerificationServiceImpl.java @@ -7,12 +7,12 @@ import cn.lili.common.exception.ServiceException; import cn.lili.common.properties.VerificationCodeProperties; import cn.lili.common.utils.StringUtils; import cn.lili.common.vo.SerializableStream; +import cn.lili.modules.verification.SliderImageUtil; import cn.lili.modules.verification.entity.dos.VerificationSource; import cn.lili.modules.verification.entity.dto.VerificationDTO; -import cn.lili.modules.verification.service.VerificationSourceService; -import cn.lili.modules.verification.SliderImageUtil; -import cn.lili.modules.verification.enums.VerificationEnums; +import cn.lili.modules.verification.entity.enums.VerificationEnums; import cn.lili.modules.verification.service.VerificationService; +import cn.lili.modules.verification.service.VerificationSourceService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; diff --git a/framework/src/main/java/cn/lili/modules/member/entity/dos/MemberWallet.java b/framework/src/main/java/cn/lili/modules/wallet/entity/dos/MemberWallet.java similarity index 95% rename from framework/src/main/java/cn/lili/modules/member/entity/dos/MemberWallet.java rename to framework/src/main/java/cn/lili/modules/wallet/entity/dos/MemberWallet.java index 9b7dab44..cf9fdfe8 100644 --- a/framework/src/main/java/cn/lili/modules/member/entity/dos/MemberWallet.java +++ b/framework/src/main/java/cn/lili/modules/wallet/entity/dos/MemberWallet.java @@ -1,4 +1,4 @@ -package cn.lili.modules.member.entity.dos; +package cn.lili.modules.wallet.entity.dos; import cn.lili.mybatis.BaseEntity; import com.baomidou.mybatisplus.annotation.TableName; diff --git a/framework/src/main/java/cn/lili/modules/member/entity/dos/MemberWithdrawApply.java b/framework/src/main/java/cn/lili/modules/wallet/entity/dos/MemberWithdrawApply.java similarity index 97% rename from framework/src/main/java/cn/lili/modules/member/entity/dos/MemberWithdrawApply.java rename to framework/src/main/java/cn/lili/modules/wallet/entity/dos/MemberWithdrawApply.java index 02ca4597..02aaf1eb 100644 --- a/framework/src/main/java/cn/lili/modules/member/entity/dos/MemberWithdrawApply.java +++ b/framework/src/main/java/cn/lili/modules/wallet/entity/dos/MemberWithdrawApply.java @@ -1,4 +1,4 @@ -package cn.lili.modules.member.entity.dos; +package cn.lili.modules.wallet.entity.dos; import cn.lili.mybatis.BaseEntity; import com.baomidou.mybatisplus.annotation.FieldFill; diff --git a/framework/src/main/java/cn/lili/modules/order/trade/entity/dos/Recharge.java b/framework/src/main/java/cn/lili/modules/wallet/entity/dos/Recharge.java similarity index 98% rename from framework/src/main/java/cn/lili/modules/order/trade/entity/dos/Recharge.java rename to framework/src/main/java/cn/lili/modules/wallet/entity/dos/Recharge.java index dc1ca9fd..fb1bf454 100644 --- a/framework/src/main/java/cn/lili/modules/order/trade/entity/dos/Recharge.java +++ b/framework/src/main/java/cn/lili/modules/wallet/entity/dos/Recharge.java @@ -1,4 +1,4 @@ -package cn.lili.modules.order.trade.entity.dos; +package cn.lili.modules.wallet.entity.dos; import cn.lili.modules.order.order.entity.enums.PayStatusEnum; import cn.lili.mybatis.BaseIdEntity; diff --git a/framework/src/main/java/cn/lili/modules/order/trade/entity/dos/WalletLog.java b/framework/src/main/java/cn/lili/modules/wallet/entity/dos/WalletLog.java similarity index 58% rename from framework/src/main/java/cn/lili/modules/order/trade/entity/dos/WalletLog.java rename to framework/src/main/java/cn/lili/modules/wallet/entity/dos/WalletLog.java index 8dc7112f..60185153 100644 --- a/framework/src/main/java/cn/lili/modules/order/trade/entity/dos/WalletLog.java +++ b/framework/src/main/java/cn/lili/modules/wallet/entity/dos/WalletLog.java @@ -1,5 +1,7 @@ -package cn.lili.modules.order.trade.entity.dos; +package cn.lili.modules.wallet.entity.dos; +import cn.lili.modules.wallet.entity.dto.MemberWalletUpdateDTO; +import cn.lili.modules.wallet.entity.enums.DepositServiceTypeEnum; import cn.lili.mybatis.BaseIdEntity; import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.TableField; @@ -29,34 +31,21 @@ public class WalletLog extends BaseIdEntity { private static final long serialVersionUID = -1599270544927161096L; - /** - * 会员id - */ @ApiModelProperty(value = "会员id") private String memberId; - /** - * 会员名称 - */ @ApiModelProperty(value = "会员名称") private String memberName; - /** - * 金额 - */ + @ApiModelProperty(value = "金额") private Double money; /** - * 变动业务类型 - * - * @see cn.lili.modules.order.trade.entity.enums.DepositServiceTypeEnum + * @see DepositServiceTypeEnum */ @ApiModelProperty(value = "业务类型") private String serviceType; - /** - * 日志明细 - */ @ApiModelProperty(value = "日志明细") private String detail; @@ -76,17 +65,30 @@ public class WalletLog extends BaseIdEntity { /** * 构建新的预存款日志对象 * - * @param memberId 会员id - * @param memberName 会员名称 - * @param money 金额 - * @param detail 备注 + * @param memberName 会员名称 + * @param memberWalletUpdateDTO 变动模型 */ - public WalletLog(String memberId, String memberName, Double money, String detail, String serviceType) { - this.setMemberId(memberId); + public WalletLog(String memberName, MemberWalletUpdateDTO memberWalletUpdateDTO) { + this.setMemberId(memberWalletUpdateDTO.getMemberId()); this.setMemberName(memberName); - this.setMoney(money); - this.setDetail(detail); - this.setServiceType(serviceType); + this.setMoney(memberWalletUpdateDTO.getMoney()); + this.setDetail(memberWalletUpdateDTO.getDetail()); + this.setServiceType(memberWalletUpdateDTO.getServiceType()); + } + + /** + * 构建新的预存款日志对象 + * + * @param memberName 会员名称 + * @param memberWalletUpdateDTO 变动模型 + * @param isReduce 是否是消费 + */ + public WalletLog(String memberName, MemberWalletUpdateDTO memberWalletUpdateDTO, boolean isReduce) { + this.setMemberId(memberWalletUpdateDTO.getMemberId()); + this.setMemberName(memberName); + this.setMoney(isReduce ? -memberWalletUpdateDTO.getMoney() : memberWalletUpdateDTO.getMoney()); + this.setDetail(memberWalletUpdateDTO.getDetail()); + this.setServiceType(memberWalletUpdateDTO.getServiceType()); } } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/wallet/entity/dto/MemberWalletUpdateDTO.java b/framework/src/main/java/cn/lili/modules/wallet/entity/dto/MemberWalletUpdateDTO.java new file mode 100644 index 00000000..70d18c86 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/wallet/entity/dto/MemberWalletUpdateDTO.java @@ -0,0 +1,30 @@ +package cn.lili.modules.wallet.entity.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; + +/** + * 会员余额变动模型 + * + * @author Chopper + * @version v1.0 + * 2021-12-01 09:35 + */ +@Data +@AllArgsConstructor +public class MemberWalletUpdateDTO { + + @ApiModelProperty(value = "变动金额") + private Double money; + @ApiModelProperty(value = "变动会员id") + private String memberId; + @ApiModelProperty(value = "日志详情") + private String detail; + + /** + * @see cn.lili.modules.wallet.entity.enums.DepositServiceTypeEnum + */ + @ApiModelProperty(value = "变动业务原因") + private String serviceType; +} diff --git a/framework/src/main/java/cn/lili/modules/member/entity/dto/MemberWithdrawalMessage.java b/framework/src/main/java/cn/lili/modules/wallet/entity/dto/MemberWithdrawalMessage.java similarity index 75% rename from framework/src/main/java/cn/lili/modules/member/entity/dto/MemberWithdrawalMessage.java rename to framework/src/main/java/cn/lili/modules/wallet/entity/dto/MemberWithdrawalMessage.java index 2e468323..6eeb7f62 100644 --- a/framework/src/main/java/cn/lili/modules/member/entity/dto/MemberWithdrawalMessage.java +++ b/framework/src/main/java/cn/lili/modules/wallet/entity/dto/MemberWithdrawalMessage.java @@ -1,5 +1,6 @@ -package cn.lili.modules.member.entity.dto; +package cn.lili.modules.wallet.entity.dto; +import cn.lili.modules.wallet.entity.enums.MemberWithdrawalDestinationEnum; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -22,7 +23,7 @@ public class MemberWithdrawalMessage { private String status; /** - * @see cn.lili.modules.member.entity.enums.MemberWithdrawalDestinationEnum + * @see MemberWithdrawalDestinationEnum */ @ApiModelProperty(value = "提现到哪里") private String destination; diff --git a/framework/src/main/java/cn/lili/modules/order/trade/entity/enums/DepositServiceTypeEnum.java b/framework/src/main/java/cn/lili/modules/wallet/entity/enums/DepositServiceTypeEnum.java similarity index 92% rename from framework/src/main/java/cn/lili/modules/order/trade/entity/enums/DepositServiceTypeEnum.java rename to framework/src/main/java/cn/lili/modules/wallet/entity/enums/DepositServiceTypeEnum.java index cbfae540..ff6109df 100644 --- a/framework/src/main/java/cn/lili/modules/order/trade/entity/enums/DepositServiceTypeEnum.java +++ b/framework/src/main/java/cn/lili/modules/wallet/entity/enums/DepositServiceTypeEnum.java @@ -1,4 +1,4 @@ -package cn.lili.modules.order.trade.entity.enums; +package cn.lili.modules.wallet.entity.enums; /** * 预存款变动日志业务类型 diff --git a/framework/src/main/java/cn/lili/modules/member/entity/enums/MemberWithdrawalDestinationEnum.java b/framework/src/main/java/cn/lili/modules/wallet/entity/enums/MemberWithdrawalDestinationEnum.java similarity index 90% rename from framework/src/main/java/cn/lili/modules/member/entity/enums/MemberWithdrawalDestinationEnum.java rename to framework/src/main/java/cn/lili/modules/wallet/entity/enums/MemberWithdrawalDestinationEnum.java index bfcbaa0a..1ebabf31 100644 --- a/framework/src/main/java/cn/lili/modules/member/entity/enums/MemberWithdrawalDestinationEnum.java +++ b/framework/src/main/java/cn/lili/modules/wallet/entity/enums/MemberWithdrawalDestinationEnum.java @@ -1,4 +1,4 @@ -package cn.lili.modules.member.entity.enums; +package cn.lili.modules.wallet.entity.enums; /** * 会员提现到哪里 枚举 diff --git a/framework/src/main/java/cn/lili/modules/member/entity/enums/WithdrawStatusEnum.java b/framework/src/main/java/cn/lili/modules/wallet/entity/enums/WithdrawStatusEnum.java similarity index 92% rename from framework/src/main/java/cn/lili/modules/member/entity/enums/WithdrawStatusEnum.java rename to framework/src/main/java/cn/lili/modules/wallet/entity/enums/WithdrawStatusEnum.java index 53b96e94..3910eace 100755 --- a/framework/src/main/java/cn/lili/modules/member/entity/enums/WithdrawStatusEnum.java +++ b/framework/src/main/java/cn/lili/modules/wallet/entity/enums/WithdrawStatusEnum.java @@ -1,4 +1,4 @@ -package cn.lili.modules.member.entity.enums; +package cn.lili.modules.wallet.entity.enums; /** * 提现申请状态枚举类 diff --git a/framework/src/main/java/cn/lili/modules/member/entity/vo/MemberWalletVO.java b/framework/src/main/java/cn/lili/modules/wallet/entity/vo/MemberWalletVO.java similarity index 93% rename from framework/src/main/java/cn/lili/modules/member/entity/vo/MemberWalletVO.java rename to framework/src/main/java/cn/lili/modules/wallet/entity/vo/MemberWalletVO.java index 774084ea..cc98aa60 100644 --- a/framework/src/main/java/cn/lili/modules/member/entity/vo/MemberWalletVO.java +++ b/framework/src/main/java/cn/lili/modules/wallet/entity/vo/MemberWalletVO.java @@ -1,4 +1,4 @@ -package cn.lili.modules.member.entity.vo; +package cn.lili.modules.wallet.entity.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/framework/src/main/java/cn/lili/modules/member/entity/vo/MemberWithdrawApplyQueryVO.java b/framework/src/main/java/cn/lili/modules/wallet/entity/vo/MemberWithdrawApplyQueryVO.java similarity index 96% rename from framework/src/main/java/cn/lili/modules/member/entity/vo/MemberWithdrawApplyQueryVO.java rename to framework/src/main/java/cn/lili/modules/wallet/entity/vo/MemberWithdrawApplyQueryVO.java index e5c72401..99ffd599 100644 --- a/framework/src/main/java/cn/lili/modules/member/entity/vo/MemberWithdrawApplyQueryVO.java +++ b/framework/src/main/java/cn/lili/modules/wallet/entity/vo/MemberWithdrawApplyQueryVO.java @@ -1,4 +1,4 @@ -package cn.lili.modules.member.entity.vo; +package cn.lili.modules.wallet.entity.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/framework/src/main/java/cn/lili/modules/member/mapper/MemberWalletMapper.java b/framework/src/main/java/cn/lili/modules/wallet/mapper/MemberWalletMapper.java similarity index 70% rename from framework/src/main/java/cn/lili/modules/member/mapper/MemberWalletMapper.java rename to framework/src/main/java/cn/lili/modules/wallet/mapper/MemberWalletMapper.java index eec4d70f..2c8a1450 100644 --- a/framework/src/main/java/cn/lili/modules/member/mapper/MemberWalletMapper.java +++ b/framework/src/main/java/cn/lili/modules/wallet/mapper/MemberWalletMapper.java @@ -1,7 +1,7 @@ -package cn.lili.modules.member.mapper; +package cn.lili.modules.wallet.mapper; -import cn.lili.modules.member.entity.dos.MemberWallet; +import cn.lili.modules.wallet.entity.dos.MemberWallet; import com.baomidou.mybatisplus.core.mapper.BaseMapper; /** diff --git a/framework/src/main/java/cn/lili/modules/member/mapper/MemberWithdrawApplyMapper.java b/framework/src/main/java/cn/lili/modules/wallet/mapper/MemberWithdrawApplyMapper.java similarity index 70% rename from framework/src/main/java/cn/lili/modules/member/mapper/MemberWithdrawApplyMapper.java rename to framework/src/main/java/cn/lili/modules/wallet/mapper/MemberWithdrawApplyMapper.java index 8ed446b2..bf2addfc 100644 --- a/framework/src/main/java/cn/lili/modules/member/mapper/MemberWithdrawApplyMapper.java +++ b/framework/src/main/java/cn/lili/modules/wallet/mapper/MemberWithdrawApplyMapper.java @@ -1,7 +1,7 @@ -package cn.lili.modules.member.mapper; +package cn.lili.modules.wallet.mapper; -import cn.lili.modules.member.entity.dos.MemberWithdrawApply; +import cn.lili.modules.wallet.entity.dos.MemberWithdrawApply; import com.baomidou.mybatisplus.core.mapper.BaseMapper; /** diff --git a/framework/src/main/java/cn/lili/modules/order/trade/mapper/RechargeMapper.java b/framework/src/main/java/cn/lili/modules/wallet/mapper/RechargeMapper.java similarity index 68% rename from framework/src/main/java/cn/lili/modules/order/trade/mapper/RechargeMapper.java rename to framework/src/main/java/cn/lili/modules/wallet/mapper/RechargeMapper.java index fafc2195..fba8eeed 100644 --- a/framework/src/main/java/cn/lili/modules/order/trade/mapper/RechargeMapper.java +++ b/framework/src/main/java/cn/lili/modules/wallet/mapper/RechargeMapper.java @@ -1,6 +1,6 @@ -package cn.lili.modules.order.trade.mapper; +package cn.lili.modules.wallet.mapper; -import cn.lili.modules.order.trade.entity.dos.Recharge; +import cn.lili.modules.wallet.entity.dos.Recharge; import com.baomidou.mybatisplus.core.mapper.BaseMapper; /** diff --git a/framework/src/main/java/cn/lili/modules/order/trade/mapper/WalletLogMapper.java b/framework/src/main/java/cn/lili/modules/wallet/mapper/WalletLogMapper.java similarity index 68% rename from framework/src/main/java/cn/lili/modules/order/trade/mapper/WalletLogMapper.java rename to framework/src/main/java/cn/lili/modules/wallet/mapper/WalletLogMapper.java index 2ea8ae05..61f2db7f 100644 --- a/framework/src/main/java/cn/lili/modules/order/trade/mapper/WalletLogMapper.java +++ b/framework/src/main/java/cn/lili/modules/wallet/mapper/WalletLogMapper.java @@ -1,6 +1,6 @@ -package cn.lili.modules.order.trade.mapper; +package cn.lili.modules.wallet.mapper; -import cn.lili.modules.order.trade.entity.dos.WalletLog; +import cn.lili.modules.wallet.entity.dos.WalletLog; import com.baomidou.mybatisplus.core.mapper.BaseMapper; /** diff --git a/framework/src/main/java/cn/lili/modules/member/service/MemberWalletService.java b/framework/src/main/java/cn/lili/modules/wallet/service/MemberWalletService.java similarity index 50% rename from framework/src/main/java/cn/lili/modules/member/service/MemberWalletService.java rename to framework/src/main/java/cn/lili/modules/wallet/service/MemberWalletService.java index effcc319..99334fd3 100644 --- a/framework/src/main/java/cn/lili/modules/member/service/MemberWalletService.java +++ b/framework/src/main/java/cn/lili/modules/wallet/service/MemberWalletService.java @@ -1,10 +1,11 @@ -package cn.lili.modules.member.service; +package cn.lili.modules.wallet.service; import cn.lili.modules.member.entity.dos.Member; -import cn.lili.modules.member.entity.dos.MemberWallet; -import cn.lili.modules.member.entity.dos.MemberWithdrawApply; -import cn.lili.modules.member.entity.vo.MemberWalletVO; +import cn.lili.modules.wallet.entity.dos.MemberWallet; +import cn.lili.modules.wallet.entity.dos.MemberWithdrawApply; +import cn.lili.modules.wallet.entity.dto.MemberWalletUpdateDTO; +import cn.lili.modules.wallet.entity.vo.MemberWalletVO; import com.baomidou.mybatisplus.extension.service.IService; /** @@ -26,57 +27,42 @@ public interface MemberWalletService extends IService { /** * 增加用户预存款余额 * - * @param money 金额 - * @param memberId 会员id - * @param serviceType 业务类型 @see DepositServiceTypeEnum - * @param detail 操作描述 - * @return 返回增加结果 true:增加成功 false:增加失败 + * @param memberWalletUpdateDTO 变动模型 + * @return 返回增加结果 true:成功 false:失败 */ - Boolean increase(Double money, String memberId, String detail, String serviceType); + Boolean increase(MemberWalletUpdateDTO memberWalletUpdateDTO); /** * 从冻结金额到余额 * - * @param money 金额 - * @param memberId 会员id - * @param serviceType 业务类型 @see DepositServiceTypeEnum - * @param detail 操作描述 - * @return 返回增加结果 true:增加成功 false:增加失败 + * @param memberWalletUpdateDTO 变动模型 + * @return 返回冻结结果 true:成功 false:失败 */ - Boolean increaseWithdrawal(Double money, String memberId, String detail, String serviceType); + Boolean increaseWithdrawal(MemberWalletUpdateDTO memberWalletUpdateDTO); /** * 扣减用户预存款余额 * - * @param money 金额 - * @param memberId 会员id - * @param detail 操作描述 - * @param serviceType 业务类型 @see DepositServiceTypeEnum - * @return 操作状态 + * @param memberWalletUpdateDTO 变动模型 + * @return 操作状态 true:成功 false:失败 */ - Boolean reduce(Double money, String memberId, String detail, String serviceType); + Boolean reduce(MemberWalletUpdateDTO memberWalletUpdateDTO); /** * 提现扣减余额到冻结金额 * - * @param money 金额 - * @param memberId 会员id - * @param detail 操作描述 - * @param serviceType 业务类型 @see DepositServiceTypeEnum - * @return 操作状态 + * @param memberWalletUpdateDTO 变动模型 + * @return 操作状态 true:成功 false:失败 */ - Boolean reduceWithdrawal(Double money, String memberId, String detail, String serviceType); + Boolean reduceWithdrawal(MemberWalletUpdateDTO memberWalletUpdateDTO); /** * 提现扣减冻结金额 * - * @param money 金额 - * @param memberId 会员id - * @param detail 操作描述 - * @param serviceType 类型 + * @param memberWalletUpdateDTO 变动模型 * @return 操作状态 */ - Boolean reduceFrozen(Double money, String memberId, String detail, String serviceType); + Boolean reduceFrozen(MemberWalletUpdateDTO memberWalletUpdateDTO); /** * 设置支付密码 diff --git a/framework/src/main/java/cn/lili/modules/member/service/MemberWithdrawApplyService.java b/framework/src/main/java/cn/lili/modules/wallet/service/MemberWithdrawApplyService.java similarity index 84% rename from framework/src/main/java/cn/lili/modules/member/service/MemberWithdrawApplyService.java rename to framework/src/main/java/cn/lili/modules/wallet/service/MemberWithdrawApplyService.java index ae9ac2b5..95f2339c 100644 --- a/framework/src/main/java/cn/lili/modules/member/service/MemberWithdrawApplyService.java +++ b/framework/src/main/java/cn/lili/modules/wallet/service/MemberWithdrawApplyService.java @@ -1,9 +1,9 @@ -package cn.lili.modules.member.service; +package cn.lili.modules.wallet.service; import cn.lili.common.vo.PageVO; -import cn.lili.modules.member.entity.dos.MemberWithdrawApply; -import cn.lili.modules.member.entity.vo.MemberWithdrawApplyQueryVO; +import cn.lili.modules.wallet.entity.dos.MemberWithdrawApply; +import cn.lili.modules.wallet.entity.vo.MemberWithdrawApplyQueryVO; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; diff --git a/framework/src/main/java/cn/lili/modules/order/trade/service/RechargeService.java b/framework/src/main/java/cn/lili/modules/wallet/service/RechargeService.java similarity index 90% rename from framework/src/main/java/cn/lili/modules/order/trade/service/RechargeService.java rename to framework/src/main/java/cn/lili/modules/wallet/service/RechargeService.java index e7034250..818b7ef9 100644 --- a/framework/src/main/java/cn/lili/modules/order/trade/service/RechargeService.java +++ b/framework/src/main/java/cn/lili/modules/wallet/service/RechargeService.java @@ -1,13 +1,13 @@ -package cn.lili.modules.order.trade.service; +package cn.lili.modules.wallet.service; import cn.lili.common.vo.PageVO; -import cn.lili.modules.order.trade.entity.dos.Recharge; import cn.lili.modules.order.trade.entity.vo.RechargeQueryVO; +import cn.lili.modules.wallet.entity.dos.Recharge; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; /** - * 预存款充值记录业务层 + * 预存款充值业务层 * * @author pikachu * @since 2020-02-25 14:10:16 diff --git a/framework/src/main/java/cn/lili/modules/order/trade/service/WalletLogService.java b/framework/src/main/java/cn/lili/modules/wallet/service/WalletLogService.java similarity index 82% rename from framework/src/main/java/cn/lili/modules/order/trade/service/WalletLogService.java rename to framework/src/main/java/cn/lili/modules/wallet/service/WalletLogService.java index 8ca0722f..4803c08c 100644 --- a/framework/src/main/java/cn/lili/modules/order/trade/service/WalletLogService.java +++ b/framework/src/main/java/cn/lili/modules/wallet/service/WalletLogService.java @@ -1,13 +1,13 @@ -package cn.lili.modules.order.trade.service; +package cn.lili.modules.wallet.service; import cn.lili.common.vo.PageVO; -import cn.lili.modules.order.trade.entity.dos.WalletLog; import cn.lili.modules.order.trade.entity.vo.DepositQueryVO; +import cn.lili.modules.wallet.entity.dos.WalletLog; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; /** - * 预存款日志业务层 + * 钱包变动日志业务层 * * @author pikachu * @since 2020-02-25 14:10:16 diff --git a/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberWalletServiceImpl.java b/framework/src/main/java/cn/lili/modules/wallet/serviceimpl/MemberWalletServiceImpl.java similarity index 82% rename from framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberWalletServiceImpl.java rename to framework/src/main/java/cn/lili/modules/wallet/serviceimpl/MemberWalletServiceImpl.java index b58407f3..defd9ca7 100644 --- a/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberWalletServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/wallet/serviceimpl/MemberWalletServiceImpl.java @@ -1,4 +1,4 @@ -package cn.lili.modules.member.serviceimpl; +package cn.lili.modules.wallet.serviceimpl; import cn.lili.common.enums.ResultCode; @@ -10,23 +10,24 @@ import cn.lili.common.utils.CurrencyUtil; import cn.lili.common.utils.SnowFlake; import cn.lili.common.utils.StringUtils; import cn.lili.modules.member.entity.dos.Member; -import cn.lili.modules.member.entity.dos.MemberWallet; -import cn.lili.modules.member.entity.dos.MemberWithdrawApply; -import cn.lili.modules.member.entity.dto.MemberWithdrawalMessage; -import cn.lili.modules.member.entity.enums.MemberWithdrawalDestinationEnum; -import cn.lili.modules.member.entity.enums.WithdrawStatusEnum; -import cn.lili.modules.member.entity.vo.MemberWalletVO; -import cn.lili.modules.member.mapper.MemberWalletMapper; import cn.lili.modules.member.service.MemberService; -import cn.lili.modules.member.service.MemberWalletService; -import cn.lili.modules.member.service.MemberWithdrawApplyService; -import cn.lili.modules.order.trade.entity.dos.WalletLog; -import cn.lili.modules.order.trade.entity.enums.DepositServiceTypeEnum; -import cn.lili.modules.order.trade.service.WalletLogService; import cn.lili.modules.system.entity.dos.Setting; import cn.lili.modules.system.entity.dto.WithdrawalSetting; import cn.lili.modules.system.entity.enums.SettingEnum; import cn.lili.modules.system.service.SettingService; +import cn.lili.modules.wallet.entity.dos.MemberWallet; +import cn.lili.modules.wallet.entity.dos.MemberWithdrawApply; +import cn.lili.modules.wallet.entity.dos.WalletLog; +import cn.lili.modules.wallet.entity.dto.MemberWalletUpdateDTO; +import cn.lili.modules.wallet.entity.dto.MemberWithdrawalMessage; +import cn.lili.modules.wallet.entity.enums.DepositServiceTypeEnum; +import cn.lili.modules.wallet.entity.enums.MemberWithdrawalDestinationEnum; +import cn.lili.modules.wallet.entity.enums.WithdrawStatusEnum; +import cn.lili.modules.wallet.entity.vo.MemberWalletVO; +import cn.lili.modules.wallet.mapper.MemberWalletMapper; +import cn.lili.modules.wallet.service.MemberWalletService; +import cn.lili.modules.wallet.service.MemberWithdrawApplyService; +import cn.lili.modules.wallet.service.WalletLogService; import cn.lili.rocketmq.RocketmqSendCallbackBuilder; import cn.lili.rocketmq.tags.MemberTagsEnum; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -42,7 +43,7 @@ import java.util.Date; /** - * 会员预存款业务层实现 + * 会员余额业务层实现 * * @author pikachu * @since 2020-02-25 14:10:16 @@ -94,82 +95,82 @@ public class MemberWalletServiceImpl extends ServiceImpl CurrencyUtil.sub(memberWallet.getMemberWallet(), money)) { + if (0 > CurrencyUtil.sub(memberWallet.getMemberWallet(), memberWalletUpdateDTO.getMoney())) { return false; } - memberWallet.setMemberWallet(CurrencyUtil.sub(memberWallet.getMemberWallet(), money)); + memberWallet.setMemberWallet(CurrencyUtil.sub(memberWallet.getMemberWallet(), memberWalletUpdateDTO.getMoney())); //保存记录 this.updateById(memberWallet); //新增预存款日志 - WalletLog walletLog = new WalletLog(memberWallet.getMemberId(), memberWallet.getMemberName(), -money, detail, serviceType); + WalletLog walletLog = new WalletLog(memberWallet.getMemberName(), memberWalletUpdateDTO, true); walletLogService.save(walletLog); return true; } @Override - public Boolean reduceWithdrawal(Double money, String memberId, String detail, String serviceType) { + public Boolean reduceWithdrawal(MemberWalletUpdateDTO memberWalletUpdateDTO) { //检测会员预存款讯息是否存在,如果不存在则新建 - MemberWallet memberWallet = this.checkMemberWallet(memberId); + MemberWallet memberWallet = this.checkMemberWallet(memberWalletUpdateDTO.getMemberId()); //减少预存款,需要校验 如果不够扣减预存款 - if (0 > CurrencyUtil.sub(memberWallet.getMemberWallet(), money)) { + if (0 > CurrencyUtil.sub(memberWallet.getMemberWallet(), memberWalletUpdateDTO.getMoney())) { throw new ServiceException(ResultCode.WALLET_WITHDRAWAL_INSUFFICIENT); } - memberWallet.setMemberWallet(CurrencyUtil.sub(memberWallet.getMemberWallet(), money)); - memberWallet.setMemberFrozenWallet(CurrencyUtil.add(memberWallet.getMemberFrozenWallet(), money)); + memberWallet.setMemberWallet(CurrencyUtil.sub(memberWallet.getMemberWallet(), memberWalletUpdateDTO.getMoney())); + memberWallet.setMemberFrozenWallet(CurrencyUtil.add(memberWallet.getMemberFrozenWallet(), memberWalletUpdateDTO.getMoney())); //修改余额 this.updateById(memberWallet); //新增预存款日志 - WalletLog walletLog = new WalletLog(memberWallet.getMemberId(), memberWallet.getMemberName(), -money, detail, serviceType); + WalletLog walletLog = new WalletLog(memberWallet.getMemberName(), memberWalletUpdateDTO, true); walletLogService.save(walletLog); return true; } @Override - public Boolean reduceFrozen(Double money, String memberId, String detail, String serviceType) { + public Boolean reduceFrozen(MemberWalletUpdateDTO memberWalletUpdateDTO) { //检测会员预存款讯息是否存在,如果不存在则新建 - MemberWallet memberWallet = this.checkMemberWallet(memberId); + MemberWallet memberWallet = this.checkMemberWallet(memberWalletUpdateDTO.getMemberId()); //校验此金额是否超过冻结金额 - if (0 > CurrencyUtil.sub(memberWallet.getMemberWallet(), money)) { + if (0 > CurrencyUtil.sub(memberWallet.getMemberWallet(), memberWalletUpdateDTO.getMoney())) { throw new ServiceException(ResultCode.WALLET_WITHDRAWAL_INSUFFICIENT); } - memberWallet.setMemberFrozenWallet(CurrencyUtil.sub(memberWallet.getMemberFrozenWallet(), money)); + memberWallet.setMemberFrozenWallet(CurrencyUtil.sub(memberWallet.getMemberFrozenWallet(), memberWalletUpdateDTO.getMoney())); this.updateById(memberWallet); //新增预存款日志 - WalletLog walletLog = new WalletLog(memberWallet.getMemberId(), memberWallet.getMemberName(), -money, "提现金额已冻结,审核通过提现成功", serviceType); + WalletLog walletLog = new WalletLog(memberWallet.getMemberName(), memberWalletUpdateDTO, true); walletLogService.save(walletLog); return true; } @@ -273,12 +274,12 @@ public class MemberWalletServiceImpl extends ServiceImpl i //执行保存操作 this.updateById(recharge); //增加预存款余额 - memberWalletService.increase(recharge.getRechargeMoney(), recharge.getMemberId(), "会员余额充值,充值单号为:" + recharge.getRechargeSn(), DepositServiceTypeEnum.WALLET_RECHARGE.name()); + memberWalletService.increase(new MemberWalletUpdateDTO(recharge.getRechargeMoney(), recharge.getMemberId(), "会员余额充值,充值单号为:" + recharge.getRechargeSn(), DepositServiceTypeEnum.WALLET_RECHARGE.name())); } } diff --git a/framework/src/main/java/cn/lili/modules/order/trade/serviceimpl/WalletLogServiceImpl.java b/framework/src/main/java/cn/lili/modules/wallet/serviceimpl/WalletLogServiceImpl.java similarity index 88% rename from framework/src/main/java/cn/lili/modules/order/trade/serviceimpl/WalletLogServiceImpl.java rename to framework/src/main/java/cn/lili/modules/wallet/serviceimpl/WalletLogServiceImpl.java index 30f2ea31..bbafece0 100644 --- a/framework/src/main/java/cn/lili/modules/order/trade/serviceimpl/WalletLogServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/wallet/serviceimpl/WalletLogServiceImpl.java @@ -1,12 +1,12 @@ -package cn.lili.modules.order.trade.serviceimpl; +package cn.lili.modules.wallet.serviceimpl; -import cn.lili.mybatis.util.PageUtil; import cn.lili.common.utils.StringUtils; import cn.lili.common.vo.PageVO; -import cn.lili.modules.order.trade.entity.dos.WalletLog; import cn.lili.modules.order.trade.entity.vo.DepositQueryVO; -import cn.lili.modules.order.trade.mapper.WalletLogMapper; -import cn.lili.modules.order.trade.service.WalletLogService; +import cn.lili.modules.wallet.entity.dos.WalletLog; +import cn.lili.modules.wallet.mapper.WalletLogMapper; +import cn.lili.modules.wallet.service.WalletLogService; +import cn.lili.mybatis.util.PageUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; diff --git a/framework/src/main/java/cn/lili/modules/message/entity/dos/WechatMPMessage.java b/framework/src/main/java/cn/lili/modules/wechat/entity/dos/WechatMPMessage.java similarity index 95% rename from framework/src/main/java/cn/lili/modules/message/entity/dos/WechatMPMessage.java rename to framework/src/main/java/cn/lili/modules/wechat/entity/dos/WechatMPMessage.java index 3150f70e..4e1d530c 100644 --- a/framework/src/main/java/cn/lili/modules/message/entity/dos/WechatMPMessage.java +++ b/framework/src/main/java/cn/lili/modules/wechat/entity/dos/WechatMPMessage.java @@ -1,4 +1,4 @@ -package cn.lili.modules.message.entity.dos; +package cn.lili.modules.wechat.entity.dos; import cn.lili.mybatis.BaseEntity; import com.baomidou.mybatisplus.annotation.TableName; diff --git a/framework/src/main/java/cn/lili/modules/message/entity/dos/WechatMessage.java b/framework/src/main/java/cn/lili/modules/wechat/entity/dos/WechatMessage.java similarity index 95% rename from framework/src/main/java/cn/lili/modules/message/entity/dos/WechatMessage.java rename to framework/src/main/java/cn/lili/modules/wechat/entity/dos/WechatMessage.java index adbff5eb..5753b2e6 100644 --- a/framework/src/main/java/cn/lili/modules/message/entity/dos/WechatMessage.java +++ b/framework/src/main/java/cn/lili/modules/wechat/entity/dos/WechatMessage.java @@ -1,4 +1,4 @@ -package cn.lili.modules.message.entity.dos; +package cn.lili.modules.wechat.entity.dos; import cn.lili.mybatis.BaseEntity; import com.baomidou.mybatisplus.annotation.TableName; diff --git a/framework/src/main/java/cn/lili/modules/message/entity/enums/WechatMessageItemEnums.java b/framework/src/main/java/cn/lili/modules/wechat/entity/enums/WechatMessageItemEnums.java similarity index 96% rename from framework/src/main/java/cn/lili/modules/message/entity/enums/WechatMessageItemEnums.java rename to framework/src/main/java/cn/lili/modules/wechat/entity/enums/WechatMessageItemEnums.java index beff0714..9d1697ec 100644 --- a/framework/src/main/java/cn/lili/modules/message/entity/enums/WechatMessageItemEnums.java +++ b/framework/src/main/java/cn/lili/modules/wechat/entity/enums/WechatMessageItemEnums.java @@ -1,4 +1,4 @@ -package cn.lili.modules.message.entity.enums; +package cn.lili.modules.wechat.entity.enums; /** * 微信模版设置变量 diff --git a/framework/src/main/java/cn/lili/modules/message/mapper/WechatMPMessageMapper.java b/framework/src/main/java/cn/lili/modules/wechat/mapper/WechatMPMessageMapper.java similarity index 78% rename from framework/src/main/java/cn/lili/modules/message/mapper/WechatMPMessageMapper.java rename to framework/src/main/java/cn/lili/modules/wechat/mapper/WechatMPMessageMapper.java index 954d7638..5adbf322 100644 --- a/framework/src/main/java/cn/lili/modules/message/mapper/WechatMPMessageMapper.java +++ b/framework/src/main/java/cn/lili/modules/wechat/mapper/WechatMPMessageMapper.java @@ -1,7 +1,7 @@ -package cn.lili.modules.message.mapper; +package cn.lili.modules.wechat.mapper; +import cn.lili.modules.wechat.entity.dos.WechatMPMessage; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import cn.lili.modules.message.entity.dos.WechatMPMessage; import org.apache.ibatis.annotations.Delete; /** diff --git a/framework/src/main/java/cn/lili/modules/message/mapper/WechatMessageMapper.java b/framework/src/main/java/cn/lili/modules/wechat/mapper/WechatMessageMapper.java similarity index 77% rename from framework/src/main/java/cn/lili/modules/message/mapper/WechatMessageMapper.java rename to framework/src/main/java/cn/lili/modules/wechat/mapper/WechatMessageMapper.java index 1fbc16ab..1beb733a 100644 --- a/framework/src/main/java/cn/lili/modules/message/mapper/WechatMessageMapper.java +++ b/framework/src/main/java/cn/lili/modules/wechat/mapper/WechatMessageMapper.java @@ -1,6 +1,6 @@ -package cn.lili.modules.message.mapper; +package cn.lili.modules.wechat.mapper; -import cn.lili.modules.message.entity.dos.WechatMessage; +import cn.lili.modules.wechat.entity.dos.WechatMessage; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Delete; diff --git a/framework/src/main/java/cn/lili/modules/message/service/WechatMPMessageService.java b/framework/src/main/java/cn/lili/modules/wechat/service/WechatMPMessageService.java similarity index 73% rename from framework/src/main/java/cn/lili/modules/message/service/WechatMPMessageService.java rename to framework/src/main/java/cn/lili/modules/wechat/service/WechatMPMessageService.java index 05b2aef8..eeccfd5c 100644 --- a/framework/src/main/java/cn/lili/modules/message/service/WechatMPMessageService.java +++ b/framework/src/main/java/cn/lili/modules/wechat/service/WechatMPMessageService.java @@ -1,7 +1,7 @@ -package cn.lili.modules.message.service; +package cn.lili.modules.wechat.service; +import cn.lili.modules.wechat.entity.dos.WechatMPMessage; import com.baomidou.mybatisplus.extension.service.IService; -import cn.lili.modules.message.entity.dos.WechatMPMessage; /** * 微信小程序消息订阅 业务层 diff --git a/framework/src/main/java/cn/lili/modules/message/service/WechatMessageService.java b/framework/src/main/java/cn/lili/modules/wechat/service/WechatMessageService.java similarity index 72% rename from framework/src/main/java/cn/lili/modules/message/service/WechatMessageService.java rename to framework/src/main/java/cn/lili/modules/wechat/service/WechatMessageService.java index f471ed89..c5514586 100644 --- a/framework/src/main/java/cn/lili/modules/message/service/WechatMessageService.java +++ b/framework/src/main/java/cn/lili/modules/wechat/service/WechatMessageService.java @@ -1,6 +1,6 @@ -package cn.lili.modules.message.service; +package cn.lili.modules.wechat.service; -import cn.lili.modules.message.entity.dos.WechatMessage; +import cn.lili.modules.wechat.entity.dos.WechatMessage; import com.baomidou.mybatisplus.extension.service.IService; /** diff --git a/framework/src/main/java/cn/lili/modules/message/serviceimpl/WechatMPMessageServiceImpl.java b/framework/src/main/java/cn/lili/modules/wechat/serviceimpl/WechatMPMessageServiceImpl.java similarity index 94% rename from framework/src/main/java/cn/lili/modules/message/serviceimpl/WechatMPMessageServiceImpl.java rename to framework/src/main/java/cn/lili/modules/wechat/serviceimpl/WechatMPMessageServiceImpl.java index a10a752a..44701c19 100644 --- a/framework/src/main/java/cn/lili/modules/message/serviceimpl/WechatMPMessageServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/wechat/serviceimpl/WechatMPMessageServiceImpl.java @@ -1,20 +1,20 @@ -package cn.lili.modules.message.serviceimpl; +package cn.lili.modules.wechat.serviceimpl; import cn.hutool.http.HttpUtil; import cn.hutool.json.JSONArray; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; +import cn.lili.common.enums.ClientTypeEnum; import cn.lili.common.enums.ResultCode; import cn.lili.common.exception.ServiceException; -import cn.lili.common.enums.ClientTypeEnum; -import cn.lili.modules.message.entity.dos.WechatMPMessage; -import cn.lili.modules.message.entity.enums.WechatMessageItemEnums; -import cn.lili.modules.message.mapper.WechatMPMessageMapper; -import cn.lili.modules.message.service.WechatMPMessageService; -import cn.lili.modules.message.util.WechatAccessTokenUtil; -import cn.lili.modules.message.util.WechatMessageUtil; +import cn.lili.common.utils.HttpUtils; import cn.lili.modules.order.order.entity.enums.OrderStatusEnum; -import cn.lili.modules.system.utils.HttpUtils; +import cn.lili.modules.wechat.entity.dos.WechatMPMessage; +import cn.lili.modules.wechat.entity.enums.WechatMessageItemEnums; +import cn.lili.modules.wechat.mapper.WechatMPMessageMapper; +import cn.lili.modules.wechat.service.WechatMPMessageService; +import cn.lili.modules.wechat.util.WechatAccessTokenUtil; +import cn.lili.modules.wechat.util.WechatMessageUtil; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/framework/src/main/java/cn/lili/modules/message/serviceimpl/WechatMessageServiceImpl.java b/framework/src/main/java/cn/lili/modules/wechat/serviceimpl/WechatMessageServiceImpl.java similarity index 94% rename from framework/src/main/java/cn/lili/modules/message/serviceimpl/WechatMessageServiceImpl.java rename to framework/src/main/java/cn/lili/modules/wechat/serviceimpl/WechatMessageServiceImpl.java index b2d78cb1..c05fb7ad 100644 --- a/framework/src/main/java/cn/lili/modules/message/serviceimpl/WechatMessageServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/wechat/serviceimpl/WechatMessageServiceImpl.java @@ -1,19 +1,19 @@ -package cn.lili.modules.message.serviceimpl; +package cn.lili.modules.wechat.serviceimpl; import cn.hutool.http.HttpUtil; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; +import cn.lili.common.enums.ClientTypeEnum; import cn.lili.common.enums.ResultCode; import cn.lili.common.exception.ServiceException; -import cn.lili.common.enums.ClientTypeEnum; -import cn.lili.modules.message.entity.dos.WechatMessage; -import cn.lili.modules.message.entity.enums.WechatMessageItemEnums; -import cn.lili.modules.message.mapper.WechatMessageMapper; -import cn.lili.modules.message.service.WechatMessageService; -import cn.lili.modules.message.util.WechatAccessTokenUtil; -import cn.lili.modules.message.util.WechatMessageUtil; +import cn.lili.common.utils.HttpUtils; import cn.lili.modules.order.order.entity.enums.OrderStatusEnum; -import cn.lili.modules.system.utils.HttpUtils; +import cn.lili.modules.wechat.entity.dos.WechatMessage; +import cn.lili.modules.wechat.entity.enums.WechatMessageItemEnums; +import cn.lili.modules.wechat.mapper.WechatMessageMapper; +import cn.lili.modules.wechat.service.WechatMessageService; +import cn.lili.modules.wechat.util.WechatAccessTokenUtil; +import cn.lili.modules.wechat.util.WechatMessageUtil; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/framework/src/main/java/cn/lili/modules/message/util/WechatAccessTokenUtil.java b/framework/src/main/java/cn/lili/modules/wechat/util/WechatAccessTokenUtil.java similarity index 99% rename from framework/src/main/java/cn/lili/modules/message/util/WechatAccessTokenUtil.java rename to framework/src/main/java/cn/lili/modules/wechat/util/WechatAccessTokenUtil.java index fc7411c8..643c3e90 100644 --- a/framework/src/main/java/cn/lili/modules/message/util/WechatAccessTokenUtil.java +++ b/framework/src/main/java/cn/lili/modules/wechat/util/WechatAccessTokenUtil.java @@ -1,12 +1,12 @@ -package cn.lili.modules.message.util; +package cn.lili.modules.wechat.util; import cn.hutool.http.HttpUtil; import cn.hutool.json.JSONObject; import cn.lili.cache.Cache; import cn.lili.cache.CachePrefix; +import cn.lili.common.enums.ClientTypeEnum; import cn.lili.common.enums.ResultCode; import cn.lili.common.exception.ServiceException; -import cn.lili.common.enums.ClientTypeEnum; import cn.lili.common.utils.HttpUtils; import cn.lili.modules.system.entity.dos.Setting; import cn.lili.modules.system.entity.dto.connect.WechatConnectSetting; diff --git a/framework/src/main/java/cn/lili/modules/message/util/WechatMessageData.java b/framework/src/main/java/cn/lili/modules/wechat/util/WechatMessageData.java similarity index 97% rename from framework/src/main/java/cn/lili/modules/message/util/WechatMessageData.java rename to framework/src/main/java/cn/lili/modules/wechat/util/WechatMessageData.java index 8866cb31..e425ab8c 100644 --- a/framework/src/main/java/cn/lili/modules/message/util/WechatMessageData.java +++ b/framework/src/main/java/cn/lili/modules/wechat/util/WechatMessageData.java @@ -1,4 +1,4 @@ -package cn.lili.modules.message.util; +package cn.lili.modules.wechat.util; import cn.hutool.json.JSONUtil; import lombok.Data; diff --git a/framework/src/main/java/cn/lili/modules/message/util/WechatMessageUtil.java b/framework/src/main/java/cn/lili/modules/wechat/util/WechatMessageUtil.java similarity index 91% rename from framework/src/main/java/cn/lili/modules/message/util/WechatMessageUtil.java rename to framework/src/main/java/cn/lili/modules/wechat/util/WechatMessageUtil.java index 2259b314..da0dfc45 100644 --- a/framework/src/main/java/cn/lili/modules/message/util/WechatMessageUtil.java +++ b/framework/src/main/java/cn/lili/modules/wechat/util/WechatMessageUtil.java @@ -1,28 +1,28 @@ -package cn.lili.modules.message.util; +package cn.lili.modules.wechat.util; import cn.hutool.http.HttpUtil; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; +import cn.lili.common.enums.ClientTypeEnum; import cn.lili.common.enums.ResultCode; import cn.lili.common.exception.ServiceException; import cn.lili.common.utils.DateUtil; +import cn.lili.common.utils.HttpUtils; import cn.lili.common.utils.StringUtils; -import cn.lili.common.enums.ClientTypeEnum; import cn.lili.modules.connect.entity.Connect; import cn.lili.modules.connect.entity.enums.ConnectEnum; import cn.lili.modules.connect.service.ConnectService; -import cn.lili.modules.message.entity.dos.WechatMPMessage; -import cn.lili.modules.message.entity.dos.WechatMessage; -import cn.lili.modules.message.entity.enums.WechatMessageItemEnums; -import cn.lili.modules.message.service.WechatMPMessageService; -import cn.lili.modules.message.service.WechatMessageService; +import cn.lili.modules.member.entity.dto.ConnectQueryDTO; import cn.lili.modules.order.order.entity.dos.Order; import cn.lili.modules.order.order.entity.dos.OrderItem; import cn.lili.modules.order.order.service.OrderItemService; import cn.lili.modules.order.order.service.OrderService; -import cn.lili.modules.system.utils.HttpUtils; +import cn.lili.modules.wechat.entity.dos.WechatMPMessage; +import cn.lili.modules.wechat.entity.dos.WechatMessage; +import cn.lili.modules.wechat.entity.enums.WechatMessageItemEnums; +import cn.lili.modules.wechat.service.WechatMPMessageService; +import cn.lili.modules.wechat.service.WechatMessageService; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -87,11 +87,9 @@ public class WechatMessageUtil { return; } - QueryWrapper queryWrapper = new QueryWrapper(); - queryWrapper.eq("user_id", order.getMemberId()); - queryWrapper.eq("union_type", ConnectEnum.WECHAT.name()); - - Connect connect = connectService.getOne(queryWrapper); + Connect connect = connectService.queryConnect( + ConnectQueryDTO.builder().userId(order.getMemberId()).unionType(ConnectEnum.WECHAT.name()).build() + ); if (connect == null) { return; } @@ -147,11 +145,9 @@ public class WechatMessageUtil { return; } - QueryWrapper queryWrapper = new QueryWrapper(); - queryWrapper.eq("user_id", order.getMemberId()); - queryWrapper.eq("union_type", ConnectEnum.WECHAT_MP_OPEN_ID.name()); - - Connect connect = connectService.getOne(queryWrapper); + Connect connect = connectService.queryConnect( + ConnectQueryDTO.builder().userId(order.getMemberId()).unionType(ConnectEnum.WECHAT_MP_OPEN_ID.name()).build() + ); if (connect == null) { return; } diff --git a/framework/src/main/java/cn/lili/modules/message/util/WechatMpCodeUtil.java b/framework/src/main/java/cn/lili/modules/wechat/util/WechatMpCodeUtil.java similarity index 93% rename from framework/src/main/java/cn/lili/modules/message/util/WechatMpCodeUtil.java rename to framework/src/main/java/cn/lili/modules/wechat/util/WechatMpCodeUtil.java index ba93afa6..9ff0890a 100644 --- a/framework/src/main/java/cn/lili/modules/message/util/WechatMpCodeUtil.java +++ b/framework/src/main/java/cn/lili/modules/wechat/util/WechatMpCodeUtil.java @@ -1,12 +1,11 @@ -package cn.lili.modules.message.util; +package cn.lili.modules.wechat.util; +import cn.lili.common.enums.ClientTypeEnum; import cn.lili.common.enums.ResultCode; import cn.lili.common.exception.ServiceException; -import cn.lili.common.enums.ClientTypeEnum; import cn.lili.modules.message.entity.dos.ShortLink; import cn.lili.modules.message.service.ShortLinkService; import com.alibaba.fastjson.JSON; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.apache.http.HttpEntity; @@ -100,16 +99,14 @@ public class WechatMpCodeUtil { //短链接存储 ShortLink shortLink = new ShortLink(); - //已经保存过则不再保存 - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper(); - queryWrapper.eq(ShortLink::getOriginalParams, scene); - List shortLinks = shortLinkService.list(queryWrapper); + shortLink.setOriginalParams(scene); + List shortLinks = shortLinkService.queryShortLinks(shortLink); if (shortLinks.size() > 0) { shortLink = shortLinks.get(0); } else { shortLink.setOriginalParams(scene); shortLinkService.save(shortLink); - shortLink = shortLinkService.getOne(queryWrapper); + shortLink = shortLinkService.queryShortLinks(shortLink).get(0); } String accessToken = wechatAccessTokenUtil.cgiAccessToken(ClientTypeEnum.WECHAT_MP); Map params = new HashMap<>(4); diff --git a/framework/src/main/java/cn/lili/mybatis/BaseEntity.java b/framework/src/main/java/cn/lili/mybatis/BaseEntity.java index 07cb838d..ab73d591 100644 --- a/framework/src/main/java/cn/lili/mybatis/BaseEntity.java +++ b/framework/src/main/java/cn/lili/mybatis/BaseEntity.java @@ -13,6 +13,9 @@ import org.springframework.data.annotation.CreatedBy; import org.springframework.data.annotation.CreatedDate; import org.springframework.data.annotation.LastModifiedBy; import org.springframework.data.annotation.LastModifiedDate; +import org.springframework.data.elasticsearch.annotations.DateFormat; +import org.springframework.data.elasticsearch.annotations.Field; +import org.springframework.data.elasticsearch.annotations.FieldType; import org.springframework.format.annotation.DateTimeFormat; import java.io.Serializable; @@ -36,7 +39,6 @@ public abstract class BaseEntity implements Serializable { @TableId - @TableField @ApiModelProperty(value = "唯一标识", hidden = true) private String id; @@ -51,6 +53,7 @@ public abstract class BaseEntity implements Serializable { @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @TableField(fill = FieldFill.INSERT) @ApiModelProperty(value = "创建时间", hidden = true) + @Field(type = FieldType.Date, format = DateFormat.custom, pattern = "yyyy-MM-dd HH:mm:ss || yyyy-MM-dd || yyyy/MM/dd HH:mm:ss|| yyyy/MM/dd ||epoch_millis") private Date createTime; @LastModifiedBy @@ -63,6 +66,7 @@ public abstract class BaseEntity implements Serializable { @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @TableField(fill = FieldFill.UPDATE) @ApiModelProperty(value = "更新时间", hidden = true) + @Field(type = FieldType.Date, format = DateFormat.custom, pattern = "yyyy-MM-dd HH:mm:ss || yyyy-MM-dd || yyyy/MM/dd HH:mm:ss|| yyyy/MM/dd ||epoch_millis") private Date updateTime; @TableField(fill = FieldFill.INSERT) diff --git a/framework/src/main/java/cn/lili/mybatis/BaseIdEntity.java b/framework/src/main/java/cn/lili/mybatis/BaseIdEntity.java index cab38ce6..9b926c74 100644 --- a/framework/src/main/java/cn/lili/mybatis/BaseIdEntity.java +++ b/framework/src/main/java/cn/lili/mybatis/BaseIdEntity.java @@ -1,6 +1,5 @@ package cn.lili.mybatis; -import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import io.swagger.annotations.ApiModelProperty; @@ -28,7 +27,6 @@ public abstract class BaseIdEntity implements Serializable { @TableId - @TableField @ApiModelProperty(value = "唯一标识", hidden = true) private String id; diff --git a/framework/src/main/java/cn/lili/mybatis/mybatisplus/MybatisPlusConfig.java b/framework/src/main/java/cn/lili/mybatis/mybatisplus/MybatisPlusConfig.java index de13d972..87bb2f2c 100644 --- a/framework/src/main/java/cn/lili/mybatis/mybatisplus/MybatisPlusConfig.java +++ b/framework/src/main/java/cn/lili/mybatis/mybatisplus/MybatisPlusConfig.java @@ -1,6 +1,8 @@ package cn.lili.mybatis.mybatisplus; -import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor; +import com.baomidou.mybatisplus.annotation.DbType; +import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; +import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import org.mybatis.spring.annotation.MapperScan; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -15,9 +17,10 @@ public class MybatisPlusConfig { * 分页插件,自动识别数据库类型 */ @Bean - public PaginationInterceptor paginationInterceptor() { - - return new PaginationInterceptor(); + public MybatisPlusInterceptor mybatisPlusInterceptor() { + MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); + interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); + return interceptor; //阻断解析器,测试环境使用 // PaginationInterceptor paginationInterceptor = new PaginationInterceptor(); diff --git a/framework/src/main/java/cn/lili/mybatis/util/PageUtil.java b/framework/src/main/java/cn/lili/mybatis/util/PageUtil.java index 691da042..32a69b7a 100644 --- a/framework/src/main/java/cn/lili/mybatis/util/PageUtil.java +++ b/framework/src/main/java/cn/lili/mybatis/util/PageUtil.java @@ -7,6 +7,7 @@ import cn.lili.common.utils.StringUtils; import cn.lili.common.vo.PageVO; import cn.lili.common.vo.SearchVO; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.OrderItem; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -150,4 +151,25 @@ public class PageUtil { return list.subList(fromIndex, toIndex); } } + + /** + * 转换分页类型 + * + * @param originPage 原分页 + * @param records 新分页数据 + * @param 新类型 + * @return 新类型分页 + */ + public static IPage convertPage(IPage originPage, List records) { + IPage resultPage = new Page<>(); + if (originPage != null) { + resultPage.setCurrent(originPage.getCurrent()); + resultPage.setPages(originPage.getPages()); + resultPage.setTotal(originPage.getTotal()); + resultPage.setSize(originPage.getSize()); + resultPage.setRecords(records); + } + return resultPage; + } + } diff --git a/framework/src/main/java/cn/lili/rocketmq/tags/GoodsTagsEnum.java b/framework/src/main/java/cn/lili/rocketmq/tags/GoodsTagsEnum.java index 73e3b7d6..651e4ce5 100644 --- a/framework/src/main/java/cn/lili/rocketmq/tags/GoodsTagsEnum.java +++ b/framework/src/main/java/cn/lili/rocketmq/tags/GoodsTagsEnum.java @@ -14,6 +14,14 @@ public enum GoodsTagsEnum { * "更新商品索引" */ UPDATE_GOODS_INDEX("更新商品索引"), + /** + * "更新商品索引促销信息" + */ + UPDATE_GOODS_INDEX_PROMOTIONS("更新商品索引促销信息"), + /** + * "更新商品索引促销信息" + */ + DELETE_GOODS_INDEX_PROMOTIONS("更新商品索引促销信息"), /** * "更新商品索引部分字段" diff --git a/framework/src/main/java/cn/lili/rocketmq/tags/MqOrderTagsEnum.java b/framework/src/main/java/cn/lili/rocketmq/tags/OrderTagsEnum.java similarity index 85% rename from framework/src/main/java/cn/lili/rocketmq/tags/MqOrderTagsEnum.java rename to framework/src/main/java/cn/lili/rocketmq/tags/OrderTagsEnum.java index cfe9ba87..20363e3d 100644 --- a/framework/src/main/java/cn/lili/rocketmq/tags/MqOrderTagsEnum.java +++ b/framework/src/main/java/cn/lili/rocketmq/tags/OrderTagsEnum.java @@ -6,7 +6,7 @@ package cn.lili.rocketmq.tags; * @author paulG * @since 2020/12/9 **/ -public enum MqOrderTagsEnum { +public enum OrderTagsEnum { /** * 订单创建 @@ -20,7 +20,7 @@ public enum MqOrderTagsEnum { private final String description; - MqOrderTagsEnum(String description) { + OrderTagsEnum(String description) { this.description = description; } diff --git a/framework/src/main/resources/sensitive/sensitive_words.txt b/framework/src/main/resources/sensitive/sensitive_words.txt deleted file mode 100644 index 04912c08..00000000 --- a/framework/src/main/resources/sensitive/sensitive_words.txt +++ /dev/null @@ -1,6 +0,0 @@ -共产党 -习近平 -毛泽东 -胡锦涛 -邓小平 -强奸 \ No newline at end of file diff --git a/framework/src/main/resources/sensitive_words.txt b/framework/src/main/resources/sensitive_words.txt deleted file mode 100644 index 04912c08..00000000 --- a/framework/src/main/resources/sensitive_words.txt +++ /dev/null @@ -1,6 +0,0 @@ -共产党 -习近平 -毛泽东 -胡锦涛 -邓小平 -强奸 \ No newline at end of file diff --git a/framework/src/test/java/cn/lili/test/RedisLimiterHelperTest.java b/framework/src/test/java/cn/lili/test/RedisLimiterHelperTest.java index b329c27c..936bc736 100644 --- a/framework/src/test/java/cn/lili/test/RedisLimiterHelperTest.java +++ b/framework/src/test/java/cn/lili/test/RedisLimiterHelperTest.java @@ -2,7 +2,7 @@ package cn.lili.test; import cn.lili.modules.order.order.entity.dos.OrderItem; import cn.lili.modules.order.order.service.OrderItemService; -import cn.lili.modules.statistics.serviceimpl.OrderStatisticsDataServiceImpl; +import cn.lili.modules.statistics.serviceimpl.OrderStatisticsServiceImpl; import org.junit.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; @@ -28,7 +28,7 @@ public class RedisLimiterHelperTest { private OrderItemService orderItemService; @Autowired - private OrderStatisticsDataServiceImpl orderStatisticsDataService; + private OrderStatisticsServiceImpl orderStatisticsDataService; @Test diff --git a/manager-api/src/main/java/cn/lili/controller/other/distribution/DistributionCashManagerController.java b/manager-api/src/main/java/cn/lili/controller/distribution/DistributionCashManagerController.java similarity index 97% rename from manager-api/src/main/java/cn/lili/controller/other/distribution/DistributionCashManagerController.java rename to manager-api/src/main/java/cn/lili/controller/distribution/DistributionCashManagerController.java index 67838270..ef0fde1c 100644 --- a/manager-api/src/main/java/cn/lili/controller/other/distribution/DistributionCashManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/distribution/DistributionCashManagerController.java @@ -1,4 +1,4 @@ -package cn.lili.controller.other.distribution; +package cn.lili.controller.distribution; import cn.lili.common.enums.ResultUtil; import cn.lili.common.vo.ResultMessage; diff --git a/manager-api/src/main/java/cn/lili/controller/other/distribution/DistributionGoodsManagerController.java b/manager-api/src/main/java/cn/lili/controller/distribution/DistributionGoodsManagerController.java similarity index 94% rename from manager-api/src/main/java/cn/lili/controller/other/distribution/DistributionGoodsManagerController.java rename to manager-api/src/main/java/cn/lili/controller/distribution/DistributionGoodsManagerController.java index 59968852..a4182635 100644 --- a/manager-api/src/main/java/cn/lili/controller/other/distribution/DistributionGoodsManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/distribution/DistributionGoodsManagerController.java @@ -1,6 +1,5 @@ -package cn.lili.controller.other.distribution; +package cn.lili.controller.distribution; -import cn.lili.common.enums.ResultCode; import cn.lili.common.enums.ResultUtil; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.distribution.entity.dto.DistributionGoodsSearchParams; diff --git a/manager-api/src/main/java/cn/lili/controller/other/distribution/DistributionManagerController.java b/manager-api/src/main/java/cn/lili/controller/distribution/DistributionManagerController.java similarity index 98% rename from manager-api/src/main/java/cn/lili/controller/other/distribution/DistributionManagerController.java rename to manager-api/src/main/java/cn/lili/controller/distribution/DistributionManagerController.java index c31d07bc..9c0e6ca9 100644 --- a/manager-api/src/main/java/cn/lili/controller/other/distribution/DistributionManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/distribution/DistributionManagerController.java @@ -1,8 +1,8 @@ -package cn.lili.controller.other.distribution; +package cn.lili.controller.distribution; import cn.lili.common.enums.ResultCode; -import cn.lili.common.exception.ServiceException; import cn.lili.common.enums.ResultUtil; +import cn.lili.common.exception.ServiceException; import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.distribution.entity.dos.Distribution; diff --git a/manager-api/src/main/java/cn/lili/controller/other/distribution/DistributionOrderManagerController.java b/manager-api/src/main/java/cn/lili/controller/distribution/DistributionOrderManagerController.java similarity index 97% rename from manager-api/src/main/java/cn/lili/controller/other/distribution/DistributionOrderManagerController.java rename to manager-api/src/main/java/cn/lili/controller/distribution/DistributionOrderManagerController.java index ae1c3d8f..acbbdb24 100644 --- a/manager-api/src/main/java/cn/lili/controller/other/distribution/DistributionOrderManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/distribution/DistributionOrderManagerController.java @@ -1,4 +1,4 @@ -package cn.lili.controller.other.distribution; +package cn.lili.controller.distribution; import cn.lili.common.enums.ResultUtil; import cn.lili.common.vo.ResultMessage; diff --git a/manager-api/src/main/java/cn/lili/controller/goods/CategoryManagerController.java b/manager-api/src/main/java/cn/lili/controller/goods/CategoryManagerController.java index 86458e63..3561f45e 100644 --- a/manager-api/src/main/java/cn/lili/controller/goods/CategoryManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/goods/CategoryManagerController.java @@ -100,7 +100,7 @@ public class CategoryManagerController { } //查询某商品分类的商品数量 - Integer count = goodsService.getGoodsCountByCategory(id); + long count = goodsService.getGoodsCountByCategory(id); if (count > 0) { throw new ServiceException(ResultCode.CATEGORY_HAS_GOODS); } diff --git a/manager-api/src/main/java/cn/lili/controller/goods/GoodsManagerController.java b/manager-api/src/main/java/cn/lili/controller/goods/GoodsManagerController.java index a0791e42..76d0fb11 100644 --- a/manager-api/src/main/java/cn/lili/controller/goods/GoodsManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/goods/GoodsManagerController.java @@ -1,8 +1,8 @@ package cn.lili.controller.goods; import cn.lili.common.enums.ResultCode; -import cn.lili.common.exception.ServiceException; import cn.lili.common.enums.ResultUtil; +import cn.lili.common.exception.ServiceException; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.goods.entity.dos.Goods; import cn.lili.modules.goods.entity.dos.GoodsSku; @@ -61,7 +61,7 @@ public class GoodsManagerController { @GetMapping(value = "/auth/list") public IPage getAuthPage(GoodsSearchParams goodsSearchParams) { - goodsSearchParams.setIsAuth(GoodsAuthEnum.TOBEAUDITED.name()); + goodsSearchParams.setAuthFlag(GoodsAuthEnum.TOBEAUDITED.name()); return goodsService.queryByParams(goodsSearchParams); } @@ -73,7 +73,7 @@ public class GoodsManagerController { @PutMapping(value = "/{goodsId}/under") public ResultMessage underGoods(@PathVariable String goodsId, @NotEmpty(message = "下架原因不能为空") @RequestParam String reason) { List goodsIds = Arrays.asList(goodsId.split(",")); - if (Boolean.TRUE.equals(goodsService.updateGoodsMarketAble(goodsIds, GoodsStatusEnum.DOWN, reason))) { + if (Boolean.TRUE.equals(goodsService.managerUpdateGoodsMarketAble(goodsIds, GoodsStatusEnum.DOWN, reason))) { return ResultUtil.success(); } throw new ServiceException(ResultCode.GOODS_UNDER_ERROR); @@ -82,12 +82,12 @@ public class GoodsManagerController { @ApiOperation(value = "管理员审核商品", notes = "管理员审核商品") @ApiImplicitParams({ @ApiImplicitParam(name = "goodsIds", value = "商品ID", required = true, paramType = "path", allowMultiple = true, dataType = "int"), - @ApiImplicitParam(name = "isAuth", value = "审核结果", required = true, paramType = "query", dataType = "string") + @ApiImplicitParam(name = "authFlag", value = "审核结果", required = true, paramType = "query", dataType = "string") }) @PutMapping(value = "{goodsIds}/auth") - public ResultMessage auth(@PathVariable List goodsIds, @RequestParam String isAuth) { + public ResultMessage auth(@PathVariable List goodsIds, @RequestParam String authFlag) { //校验商品是否存在 - if (goodsService.auditGoods(goodsIds, GoodsAuthEnum.valueOf(isAuth))) { + if (goodsService.auditGoods(goodsIds, GoodsAuthEnum.valueOf(authFlag))) { return ResultUtil.success(); } throw new ServiceException(ResultCode.GOODS_AUTH_ERROR); diff --git a/manager-api/src/main/java/cn/lili/controller/hotwords/HotWordsManagerController.java b/manager-api/src/main/java/cn/lili/controller/goods/HotWordsManagerController.java old mode 100644 new mode 100755 similarity index 66% rename from manager-api/src/main/java/cn/lili/controller/hotwords/HotWordsManagerController.java rename to manager-api/src/main/java/cn/lili/controller/goods/HotWordsManagerController.java index 678c5f40..ee042cf9 --- a/manager-api/src/main/java/cn/lili/controller/hotwords/HotWordsManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/goods/HotWordsManagerController.java @@ -1,4 +1,4 @@ -package cn.lili.controller.hotwords; +package cn.lili.controller.goods; import cn.lili.common.enums.ResultUtil; import cn.lili.common.vo.ResultMessage; @@ -8,10 +8,7 @@ import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; /** * 管理端,app版本控制器 @@ -21,7 +18,7 @@ import org.springframework.web.bind.annotation.RestController; */ @RestController @Api(tags = "管理端,系统设置扩展接口") -@RequestMapping("/manager/hotwords/hotWords") +@RequestMapping("/manager/hotwords") public class HotWordsManagerController { @Autowired @@ -29,16 +26,22 @@ public class HotWordsManagerController { @ApiOperation(value = "获取热词") @GetMapping - public ResultMessage getHotWords() { + public ResultMessage getHotWords() { return ResultUtil.data(esGoodsSearchService.getHotWords(100)); } @ApiOperation(value = "设置热词") @PostMapping - public ResultMessage paymentForm(@Validated HotWordsDTO hotWords) { - + public ResultMessage paymentForm(@Validated HotWordsDTO hotWords) { esGoodsSearchService.setHotWords(hotWords); return ResultUtil.success(); } + @ApiOperation(value = "设置热词") + @DeleteMapping("/{words}") + public ResultMessage deleteWords(@PathVariable String words) { + esGoodsSearchService.deleteHotWords(words); + return ResultUtil.success(); + } + } diff --git a/manager-api/src/main/java/cn/lili/controller/member/MemberMessageManagerController.java b/manager-api/src/main/java/cn/lili/controller/message/MemberMessageManagerController.java similarity index 97% rename from manager-api/src/main/java/cn/lili/controller/member/MemberMessageManagerController.java rename to manager-api/src/main/java/cn/lili/controller/message/MemberMessageManagerController.java index 4f23d206..c9ac3893 100644 --- a/manager-api/src/main/java/cn/lili/controller/member/MemberMessageManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/message/MemberMessageManagerController.java @@ -1,4 +1,4 @@ -package cn.lili.controller.member; +package cn.lili.controller.message; import cn.lili.common.enums.ResultUtil; import cn.lili.common.vo.PageVO; diff --git a/manager-api/src/main/java/cn/lili/controller/member/MemberNoticeLogManagerController.java b/manager-api/src/main/java/cn/lili/controller/message/MemberNoticeLogManagerController.java similarity index 98% rename from manager-api/src/main/java/cn/lili/controller/member/MemberNoticeLogManagerController.java rename to manager-api/src/main/java/cn/lili/controller/message/MemberNoticeLogManagerController.java index 0b41722a..506bbc5a 100644 --- a/manager-api/src/main/java/cn/lili/controller/member/MemberNoticeLogManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/message/MemberNoticeLogManagerController.java @@ -1,11 +1,11 @@ -package cn.lili.controller.member; +package cn.lili.controller.message; import cn.lili.common.enums.ResultUtil; -import cn.lili.mybatis.util.PageUtil; import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.member.entity.dos.MemberNoticeLog; import cn.lili.modules.member.service.MemberNoticeLogService; +import cn.lili.mybatis.util.PageUtil; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; diff --git a/manager-api/src/main/java/cn/lili/controller/setting/MemberNoticeManagerController.java b/manager-api/src/main/java/cn/lili/controller/message/MemberNoticeManagerController.java similarity index 98% rename from manager-api/src/main/java/cn/lili/controller/setting/MemberNoticeManagerController.java rename to manager-api/src/main/java/cn/lili/controller/message/MemberNoticeManagerController.java index 11df7c8d..be252cbb 100644 --- a/manager-api/src/main/java/cn/lili/controller/setting/MemberNoticeManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/message/MemberNoticeManagerController.java @@ -1,4 +1,4 @@ -package cn.lili.controller.setting; +package cn.lili.controller.message; import cn.lili.common.enums.ResultUtil; import cn.lili.common.security.context.UserContext; diff --git a/manager-api/src/main/java/cn/lili/controller/member/MemberNoticeSenterManagerController.java b/manager-api/src/main/java/cn/lili/controller/message/MemberNoticeSenterManagerController.java similarity index 98% rename from manager-api/src/main/java/cn/lili/controller/member/MemberNoticeSenterManagerController.java rename to manager-api/src/main/java/cn/lili/controller/message/MemberNoticeSenterManagerController.java index 72c9ccfe..edd03c9a 100644 --- a/manager-api/src/main/java/cn/lili/controller/member/MemberNoticeSenterManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/message/MemberNoticeSenterManagerController.java @@ -1,12 +1,12 @@ -package cn.lili.controller.member; +package cn.lili.controller.message; import cn.lili.common.enums.ResultUtil; -import cn.lili.mybatis.util.PageUtil; import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; import cn.lili.common.vo.SearchVO; import cn.lili.modules.member.entity.dos.MemberNoticeSenter; import cn.lili.modules.member.service.MemberNoticeSenterService; +import cn.lili.mybatis.util.PageUtil; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; diff --git a/manager-api/src/main/java/cn/lili/controller/setting/ServiceNoticeManagerController.java b/manager-api/src/main/java/cn/lili/controller/message/ServiceNoticeManagerController.java similarity index 98% rename from manager-api/src/main/java/cn/lili/controller/setting/ServiceNoticeManagerController.java rename to manager-api/src/main/java/cn/lili/controller/message/ServiceNoticeManagerController.java index c9205995..8510d1e2 100644 --- a/manager-api/src/main/java/cn/lili/controller/setting/ServiceNoticeManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/message/ServiceNoticeManagerController.java @@ -1,4 +1,4 @@ -package cn.lili.controller.setting; +package cn.lili.controller.message; import cn.lili.common.enums.ResultUtil; import cn.lili.common.vo.PageVO; diff --git a/manager-api/src/main/java/cn/lili/controller/trade/AfterSaleManagerController.java b/manager-api/src/main/java/cn/lili/controller/order/AfterSaleManagerController.java similarity index 93% rename from manager-api/src/main/java/cn/lili/controller/trade/AfterSaleManagerController.java rename to manager-api/src/main/java/cn/lili/controller/order/AfterSaleManagerController.java index 00fab268..e6fbe4ff 100644 --- a/manager-api/src/main/java/cn/lili/controller/trade/AfterSaleManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/order/AfterSaleManagerController.java @@ -1,11 +1,11 @@ -package cn.lili.controller.trade; +package cn.lili.controller.order; import cn.lili.common.enums.ResultUtil; import cn.lili.common.vo.ResultMessage; -import cn.lili.modules.order.order.entity.dos.AfterSale; -import cn.lili.modules.order.order.entity.vo.AfterSaleSearchParams; -import cn.lili.modules.order.order.entity.vo.AfterSaleVO; -import cn.lili.modules.order.order.service.AfterSaleService; +import cn.lili.modules.order.aftersale.entity.dos.AfterSale; +import cn.lili.modules.order.aftersale.entity.vo.AfterSaleSearchParams; +import cn.lili.modules.order.aftersale.entity.vo.AfterSaleVO; +import cn.lili.modules.order.aftersale.service.AfterSaleService; import cn.lili.modules.store.entity.dto.StoreAfterSaleAddressDTO; import cn.lili.modules.system.entity.vo.Traces; import com.baomidou.mybatisplus.core.metadata.IPage; diff --git a/manager-api/src/main/java/cn/lili/controller/trade/AfterSaleReasonManagerController.java b/manager-api/src/main/java/cn/lili/controller/order/AfterSaleReasonManagerController.java similarity index 94% rename from manager-api/src/main/java/cn/lili/controller/trade/AfterSaleReasonManagerController.java rename to manager-api/src/main/java/cn/lili/controller/order/AfterSaleReasonManagerController.java index 2f1e7c13..916c5bff 100644 --- a/manager-api/src/main/java/cn/lili/controller/trade/AfterSaleReasonManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/order/AfterSaleReasonManagerController.java @@ -1,10 +1,10 @@ -package cn.lili.controller.trade; +package cn.lili.controller.order; import cn.lili.common.enums.ResultUtil; import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; -import cn.lili.modules.order.order.entity.dos.AfterSaleReason; -import cn.lili.modules.order.order.service.AfterSaleReasonService; +import cn.lili.modules.order.aftersale.entity.dos.AfterSaleReason; +import cn.lili.modules.order.aftersale.service.AfterSaleReasonService; import cn.lili.mybatis.util.PageUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; diff --git a/manager-api/src/main/java/cn/lili/controller/trade/OrderComplaintManagerController.java b/manager-api/src/main/java/cn/lili/controller/order/OrderComplaintManagerController.java similarity index 99% rename from manager-api/src/main/java/cn/lili/controller/trade/OrderComplaintManagerController.java rename to manager-api/src/main/java/cn/lili/controller/order/OrderComplaintManagerController.java index d8fc9cab..6b682013 100644 --- a/manager-api/src/main/java/cn/lili/controller/trade/OrderComplaintManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/order/OrderComplaintManagerController.java @@ -1,4 +1,4 @@ -package cn.lili.controller.trade; +package cn.lili.controller.order; import cn.lili.common.enums.ResultUtil; import cn.lili.common.security.AuthUser; diff --git a/manager-api/src/main/java/cn/lili/controller/trade/OrderLogManagerController.java b/manager-api/src/main/java/cn/lili/controller/order/OrderLogManagerController.java similarity index 98% rename from manager-api/src/main/java/cn/lili/controller/trade/OrderLogManagerController.java rename to manager-api/src/main/java/cn/lili/controller/order/OrderLogManagerController.java index c5bcd87f..9a96a0ca 100644 --- a/manager-api/src/main/java/cn/lili/controller/trade/OrderLogManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/order/OrderLogManagerController.java @@ -1,12 +1,12 @@ -package cn.lili.controller.trade; +package cn.lili.controller.order; -import cn.lili.mybatis.util.PageUtil; import cn.lili.common.enums.ResultUtil; import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; import cn.lili.common.vo.SearchVO; import cn.lili.modules.order.trade.entity.dos.OrderLog; import cn.lili.modules.order.trade.service.OrderLogService; +import cn.lili.mybatis.util.PageUtil; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; diff --git a/manager-api/src/main/java/cn/lili/controller/trade/OrderManagerController.java b/manager-api/src/main/java/cn/lili/controller/order/OrderManagerController.java similarity index 99% rename from manager-api/src/main/java/cn/lili/controller/trade/OrderManagerController.java rename to manager-api/src/main/java/cn/lili/controller/order/OrderManagerController.java index 4d247f90..a9f2658c 100644 --- a/manager-api/src/main/java/cn/lili/controller/trade/OrderManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/order/OrderManagerController.java @@ -1,4 +1,4 @@ -package cn.lili.controller.trade; +package cn.lili.controller.order; import cn.lili.common.enums.ResultUtil; import cn.lili.common.vo.ResultMessage; diff --git a/manager-api/src/main/java/cn/lili/controller/trade/PaymentLogManagerController.java b/manager-api/src/main/java/cn/lili/controller/order/PaymentLogManagerController.java similarity index 83% rename from manager-api/src/main/java/cn/lili/controller/trade/PaymentLogManagerController.java rename to manager-api/src/main/java/cn/lili/controller/order/PaymentLogManagerController.java index aa61f83c..15cc9420 100644 --- a/manager-api/src/main/java/cn/lili/controller/trade/PaymentLogManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/order/PaymentLogManagerController.java @@ -1,13 +1,13 @@ -package cn.lili.controller.trade; +package cn.lili.controller.order; -import cn.lili.mybatis.util.PageUtil; import cn.lili.common.enums.ResultUtil; import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; import cn.lili.common.vo.SearchVO; import cn.lili.modules.order.order.entity.dos.Order; import cn.lili.modules.order.order.entity.vo.PaymentLog; -import cn.lili.modules.payment.service.PaymentService; +import cn.lili.modules.order.order.service.OrderService; +import cn.lili.mybatis.util.PageUtil; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -31,7 +31,7 @@ import org.springframework.web.bind.annotation.RestController; public class PaymentLogManagerController { @Autowired - private PaymentService paymentService; + private OrderService orderService; @GetMapping @@ -39,6 +39,6 @@ public class PaymentLogManagerController { public ResultMessage> getByPage(Order order, SearchVO searchVo, PageVO page) { - return ResultUtil.data(paymentService.page(PageUtil.initPage(page), PageUtil.initWrapper(order, searchVo))); + return ResultUtil.data(orderService.queryPaymentLogs(PageUtil.initPage(page), PageUtil.initWrapper(order, searchVo))); } } diff --git a/manager-api/src/main/java/cn/lili/controller/trade/ReceiptManagerController.java b/manager-api/src/main/java/cn/lili/controller/order/ReceiptManagerController.java similarity index 97% rename from manager-api/src/main/java/cn/lili/controller/trade/ReceiptManagerController.java rename to manager-api/src/main/java/cn/lili/controller/order/ReceiptManagerController.java index f7429a34..b3c92744 100644 --- a/manager-api/src/main/java/cn/lili/controller/trade/ReceiptManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/order/ReceiptManagerController.java @@ -1,4 +1,4 @@ -package cn.lili.controller.trade; +package cn.lili.controller.order; import cn.lili.common.enums.ResultUtil; import cn.lili.common.vo.PageVO; diff --git a/manager-api/src/main/java/cn/lili/controller/trade/RefundLogManagerController.java b/manager-api/src/main/java/cn/lili/controller/order/RefundLogManagerController.java similarity index 98% rename from manager-api/src/main/java/cn/lili/controller/trade/RefundLogManagerController.java rename to manager-api/src/main/java/cn/lili/controller/order/RefundLogManagerController.java index 8ca6c8df..c53befc4 100644 --- a/manager-api/src/main/java/cn/lili/controller/trade/RefundLogManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/order/RefundLogManagerController.java @@ -1,4 +1,4 @@ -package cn.lili.controller.trade; +package cn.lili.controller.order; import cn.lili.common.enums.ResultUtil; import cn.lili.common.vo.PageVO; diff --git a/manager-api/src/main/java/cn/lili/controller/other/CustomWordsController.java b/manager-api/src/main/java/cn/lili/controller/other/CustomWordsController.java index fbd07e66..8556775c 100644 --- a/manager-api/src/main/java/cn/lili/controller/other/CustomWordsController.java +++ b/manager-api/src/main/java/cn/lili/controller/other/CustomWordsController.java @@ -1,6 +1,8 @@ package cn.lili.controller.other; import cn.hutool.core.text.CharSequenceUtil; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; import cn.lili.common.enums.ResultCode; import cn.lili.common.enums.ResultUtil; import cn.lili.common.exception.ServiceException; @@ -57,7 +59,8 @@ public class CustomWordsController { return ""; } - if (!setting.getSettingValue().equals(secretKey)) { + JSONObject jsonObject = JSONUtil.parseObj(setting.getSettingValue()); + if (!secretKey.equals(jsonObject.get("secretKey"))) { throw new ServiceException(ResultCode.CUSTOM_WORDS_SECRET_KEY_ERROR); } diff --git a/manager-api/src/main/java/cn/lili/controller/other/ElasticsearchController.java b/manager-api/src/main/java/cn/lili/controller/other/ElasticsearchController.java index 4451507c..2ecb8cdd 100644 --- a/manager-api/src/main/java/cn/lili/controller/other/ElasticsearchController.java +++ b/manager-api/src/main/java/cn/lili/controller/other/ElasticsearchController.java @@ -1,6 +1,5 @@ package cn.lili.controller.other; -import cn.lili.cache.Cache; import cn.lili.common.enums.ResultUtil; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.search.service.EsGoodsIndexService; @@ -27,9 +26,6 @@ public class ElasticsearchController { @Autowired private EsGoodsIndexService esGoodsIndexService; - @Autowired - private Cache cache; - @GetMapping public ResultMessage init() { esGoodsIndexService.init(); diff --git a/manager-api/src/main/java/cn/lili/controller/other/PageDataManagerController.java b/manager-api/src/main/java/cn/lili/controller/other/PageDataManagerController.java index ae0b0233..8c78a25d 100644 --- a/manager-api/src/main/java/cn/lili/controller/other/PageDataManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/other/PageDataManagerController.java @@ -1,14 +1,13 @@ package cn.lili.controller.other; +import cn.lili.common.aop.annotation.DemoSite; import cn.lili.common.enums.ResultUtil; import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; -import cn.lili.modules.system.aspect.annotation.DemoSite; import cn.lili.modules.page.entity.dos.PageData; import cn.lili.modules.page.entity.dto.PageDataDTO; import cn.lili.modules.page.entity.vos.PageDataListVO; import cn.lili.modules.page.service.PageDataService; -import cn.lili.modules.system.aspect.annotation.DemoSite; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; diff --git a/manager-api/src/main/java/cn/lili/controller/other/SensitiveWordsManagerController.java b/manager-api/src/main/java/cn/lili/controller/other/SensitiveWordsManagerController.java index 457d3362..2e1fbc15 100644 --- a/manager-api/src/main/java/cn/lili/controller/other/SensitiveWordsManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/other/SensitiveWordsManagerController.java @@ -1,12 +1,11 @@ package cn.lili.controller.other; import cn.lili.common.enums.ResultUtil; -import cn.lili.mybatis.util.PageUtil; import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.system.entity.dos.SensitiveWords; import cn.lili.modules.system.service.SensitiveWordsService; -import cn.lili.modules.system.utils.SensitiveWordsFilter; +import cn.lili.mybatis.util.PageUtil; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; @@ -48,7 +47,7 @@ public class SensitiveWordsManagerController { @PostMapping public ResultMessage add(@Valid SensitiveWords sensitiveWords) { sensitiveWordsService.save(sensitiveWords); - SensitiveWordsFilter.put(sensitiveWords.getSensitiveWord()); + sensitiveWordsService.resetCache(); return ResultUtil.data(sensitiveWords); } @@ -58,7 +57,7 @@ public class SensitiveWordsManagerController { public ResultMessage edit(@PathVariable String id, SensitiveWords sensitiveWords) { sensitiveWords.setId(id); sensitiveWordsService.updateById(sensitiveWords); - SensitiveWordsFilter.put(sensitiveWords.getSensitiveWord()); + sensitiveWordsService.resetCache(); return ResultUtil.data(sensitiveWords); } @@ -66,12 +65,8 @@ public class SensitiveWordsManagerController { @ApiImplicitParam(name = "ids", value = "敏感词ID", required = true, dataType = "String", allowMultiple = true, paramType = "path") @DeleteMapping(value = "/delByIds/{ids}") public ResultMessage delAllByIds(@PathVariable List ids) { - for (String id : ids) { - String name = sensitiveWordsService.getById(id).getSensitiveWord(); - SensitiveWordsFilter.remove(name); - sensitiveWordsService.removeById(id); - } + sensitiveWordsService.removeByIds(ids); + sensitiveWordsService.resetCache(); return ResultUtil.success(); - } } diff --git a/manager-api/src/main/java/cn/lili/controller/other/VerificationSourceController.java b/manager-api/src/main/java/cn/lili/controller/other/VerificationSourceController.java index d650cfa1..d2083564 100644 --- a/manager-api/src/main/java/cn/lili/controller/other/VerificationSourceController.java +++ b/manager-api/src/main/java/cn/lili/controller/other/VerificationSourceController.java @@ -1,10 +1,10 @@ package cn.lili.controller.other; +import cn.lili.common.aop.annotation.DemoSite; import cn.lili.common.enums.ResultUtil; import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; import cn.lili.common.vo.SearchVO; -import cn.lili.modules.system.aspect.annotation.DemoSite; import cn.lili.modules.verification.entity.dos.VerificationSource; import cn.lili.modules.verification.service.VerificationSourceService; import cn.lili.mybatis.util.PageUtil; diff --git a/manager-api/src/main/java/cn/lili/controller/passport/AdminUserManagerController.java b/manager-api/src/main/java/cn/lili/controller/passport/AdminUserManagerController.java index e718a02e..34ac3f9b 100644 --- a/manager-api/src/main/java/cn/lili/controller/passport/AdminUserManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/passport/AdminUserManagerController.java @@ -1,5 +1,6 @@ package cn.lili.controller.passport; +import cn.lili.common.aop.annotation.DemoSite; import cn.lili.common.enums.ResultCode; import cn.lili.common.enums.ResultUtil; import cn.lili.common.exception.ServiceException; @@ -17,8 +18,7 @@ import cn.lili.modules.permission.entity.dto.AdminUserDTO; import cn.lili.modules.permission.entity.vo.AdminUserVO; import cn.lili.modules.permission.service.AdminUserService; import cn.lili.modules.permission.service.DepartmentService; -import cn.lili.modules.system.aspect.annotation.DemoSite; -import cn.lili.modules.verification.enums.VerificationEnums; +import cn.lili.modules.verification.entity.enums.VerificationEnums; import cn.lili.modules.verification.service.VerificationService; import cn.lili.mybatis.util.PageUtil; import com.baomidou.mybatisplus.core.metadata.IPage; diff --git a/manager-api/src/main/java/cn/lili/controller/passport/MemberManagerController.java b/manager-api/src/main/java/cn/lili/controller/passport/MemberManagerController.java index c4f9714c..65285b49 100644 --- a/manager-api/src/main/java/cn/lili/controller/passport/MemberManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/passport/MemberManagerController.java @@ -1,5 +1,6 @@ package cn.lili.controller.passport; +import cn.lili.common.aop.annotation.DemoSite; import cn.lili.common.enums.ResultUtil; import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; @@ -9,7 +10,6 @@ import cn.lili.modules.member.entity.dto.MemberAddDTO; import cn.lili.modules.member.entity.vo.MemberSearchVO; import cn.lili.modules.member.entity.vo.MemberVO; import cn.lili.modules.member.service.MemberService; -import cn.lili.modules.system.aspect.annotation.DemoSite; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; @@ -78,7 +78,7 @@ public class MemberManagerController { @ApiOperation(value = "根据条件查询会员总数") @GetMapping("/num") - public ResultMessage getByPage(MemberSearchVO memberSearchVO) { + public ResultMessage getByPage(MemberSearchVO memberSearchVO) { return ResultUtil.data(memberService.getMemberNum(memberSearchVO)); } diff --git a/manager-api/src/main/java/cn/lili/controller/permission/MenuManagerController.java b/manager-api/src/main/java/cn/lili/controller/permission/MenuManagerController.java index 33787d21..6c7c478b 100644 --- a/manager-api/src/main/java/cn/lili/controller/permission/MenuManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/permission/MenuManagerController.java @@ -1,12 +1,12 @@ package cn.lili.controller.permission; +import cn.lili.common.aop.annotation.DemoSite; import cn.lili.common.enums.ResultUtil; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.permission.entity.dos.Menu; import cn.lili.modules.permission.entity.dto.MenuSearchParams; import cn.lili.modules.permission.entity.vo.MenuVO; import cn.lili.modules.permission.service.MenuService; -import cn.lili.modules.system.aspect.annotation.DemoSite; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; diff --git a/manager-api/src/main/java/cn/lili/controller/promotion/CouponActivityManagerController.java b/manager-api/src/main/java/cn/lili/controller/promotion/CouponActivityManagerController.java index d912fd83..635d9ff1 100644 --- a/manager-api/src/main/java/cn/lili/controller/promotion/CouponActivityManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/promotion/CouponActivityManagerController.java @@ -7,7 +7,6 @@ import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.promotion.entity.dos.CouponActivity; import cn.lili.modules.promotion.entity.dto.CouponActivityDTO; -import cn.lili.modules.promotion.entity.enums.PromotionStatusEnum; import cn.lili.modules.promotion.entity.vos.CouponActivityVO; import cn.lili.modules.promotion.service.CouponActivityService; import cn.lili.mybatis.util.PageUtil; @@ -19,6 +18,8 @@ import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import java.util.Collections; + /** * 优惠券活动 * @@ -50,8 +51,10 @@ public class CouponActivityManagerController { @PostMapping @PutMapping(consumes = "application/json", produces = "application/json") public ResultMessage addCouponActivity(@RequestBody(required = false) CouponActivityDTO couponActivityDTO) { - couponActivityDTO.setPromotionStatus(PromotionStatusEnum.NEW.name()); - return ResultUtil.data(couponActivityService.addCouponActivity(couponActivityDTO)); + if (couponActivityService.savePromotions(couponActivityDTO)) { + return ResultUtil.data(couponActivityDTO); + } + return ResultUtil.error(ResultCode.COUPON_ACTIVITY_SAVE_ERROR); } @ApiOperation(value = "关闭优惠券活动") @@ -60,7 +63,7 @@ public class CouponActivityManagerController { }) @DeleteMapping("/{id}") public ResultMessage updateStatus(@PathVariable String id) { - if (couponActivityService.updateCouponActivityStatus(id, PromotionStatusEnum.END)) { + if (couponActivityService.updateStatus(Collections.singletonList(id), null, null)) { return ResultUtil.success(ResultCode.SUCCESS); } throw new ServiceException(ResultCode.ERROR); diff --git a/manager-api/src/main/java/cn/lili/controller/promotion/CouponManagerController.java b/manager-api/src/main/java/cn/lili/controller/promotion/CouponManagerController.java index a178d83e..f46cb888 100644 --- a/manager-api/src/main/java/cn/lili/controller/promotion/CouponManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/promotion/CouponManagerController.java @@ -9,11 +9,11 @@ import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.promotion.entity.dos.Coupon; import cn.lili.modules.promotion.entity.dos.MemberCoupon; -import cn.lili.modules.promotion.entity.enums.PromotionStatusEnum; -import cn.lili.modules.promotion.entity.vos.CouponSearchParams; +import cn.lili.modules.promotion.entity.dto.search.CouponSearchParams; import cn.lili.modules.promotion.entity.vos.CouponVO; import cn.lili.modules.promotion.service.CouponService; import cn.lili.modules.promotion.service.MemberCouponService; +import cn.lili.modules.promotion.tools.PromotionTools; import cn.lili.mybatis.util.PageUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -43,14 +43,14 @@ public class CouponManagerController { @ApiOperation(value = "获取优惠券列表") @GetMapping public ResultMessage> getCouponList(CouponSearchParams queryParam, PageVO page) { - queryParam.setStoreId("platform"); - return ResultUtil.data(couponService.getCouponsByPageFromMongo(queryParam, page)); + queryParam.setStoreId(PromotionTools.PLATFORM_ID); + return ResultUtil.data(couponService.pageVOFindAll(queryParam, page)); } @ApiOperation(value = "获取优惠券详情") @GetMapping("/{couponId}") public ResultMessage getCoupon(@PathVariable String couponId) { - CouponVO coupon = couponService.getCouponDetailFromMongo(couponId); + CouponVO coupon = couponService.getDetail(couponId); return ResultUtil.data(coupon); } @@ -58,24 +58,24 @@ public class CouponManagerController { @PostMapping(consumes = "application/json", produces = "application/json") public ResultMessage addCoupon(@RequestBody CouponVO couponVO) { this.setStoreInfo(couponVO); - couponService.add(couponVO); + couponService.savePromotions(couponVO); return ResultUtil.data(couponVO); } @ApiOperation(value = "修改优惠券") @PutMapping(consumes = "application/json", produces = "application/json") public ResultMessage updateCoupon(@RequestBody CouponVO couponVO) { + this.setStoreInfo(couponVO); Coupon coupon = couponService.getById(couponVO.getId()); - couponVO.setPromotionStatus(PromotionStatusEnum.NEW.name()); - couponService.updateCoupon(couponVO); + couponService.updatePromotions(couponVO); return ResultUtil.data(coupon); } @ApiOperation(value = "修改优惠券状态") @PutMapping("/status") - public ResultMessage updateCouponStatus(String couponIds, String promotionStatus) { + public ResultMessage updateCouponStatus(String couponIds, Long startTime, Long endTime) { String[] split = couponIds.split(","); - if (couponService.updateCouponStatus(Arrays.asList(split), PromotionStatusEnum.valueOf(promotionStatus))) { + if (couponService.updateStatus(Arrays.asList(split), startTime, endTime)) { return ResultUtil.success(ResultCode.COUPON_EDIT_STATUS_SUCCESS); } throw new ServiceException(ResultCode.COUPON_EDIT_STATUS_ERROR); @@ -84,9 +84,7 @@ public class CouponManagerController { @ApiOperation(value = "批量删除") @DeleteMapping(value = "/{ids}") public ResultMessage delAllByIds(@PathVariable List ids) { - for (String id : ids) { - couponService.deleteCoupon(id); - } + couponService.removePromotions(ids); return ResultUtil.success(); } @@ -114,8 +112,8 @@ public class CouponManagerController { if (currentUser == null) { throw new ServiceException(ResultCode.USER_NOT_EXIST); } - couponVO.setStoreId("platform"); - couponVO.setStoreName("platform"); + couponVO.setStoreId(PromotionTools.PLATFORM_ID); + couponVO.setStoreName(PromotionTools.PLATFORM_NAME); } } diff --git a/manager-api/src/main/java/cn/lili/controller/promotion/FullDiscountManagerController.java b/manager-api/src/main/java/cn/lili/controller/promotion/FullDiscountManagerController.java index 61206531..0647cf36 100644 --- a/manager-api/src/main/java/cn/lili/controller/promotion/FullDiscountManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/promotion/FullDiscountManagerController.java @@ -5,8 +5,8 @@ import cn.lili.common.enums.ResultUtil; import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.order.cart.entity.vo.FullDiscountVO; -import cn.lili.modules.promotion.entity.enums.PromotionStatusEnum; -import cn.lili.modules.promotion.entity.vos.FullDiscountSearchParams; +import cn.lili.modules.promotion.entity.dos.FullDiscount; +import cn.lili.modules.promotion.entity.dto.search.FullDiscountSearchParams; import cn.lili.modules.promotion.service.FullDiscountService; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.Api; @@ -16,6 +16,8 @@ import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import java.util.Collections; + /** * 管理端,满额活动接口 * @@ -26,14 +28,15 @@ import org.springframework.web.bind.annotation.*; @Api(tags = "管理端,满额活动接口") @RequestMapping("/manager/promotion/fullDiscount") public class FullDiscountManagerController { + @Autowired private FullDiscountService fullDiscountService; @ApiOperation(value = "获取满优惠列表") @GetMapping - public ResultMessage> getCouponList(FullDiscountSearchParams searchParams, PageVO page) { + public ResultMessage> getCouponList(FullDiscountSearchParams searchParams, PageVO page) { page.setNotConvert(true); - return ResultUtil.data(fullDiscountService.getFullDiscountByPageFromMongo(searchParams, page)); + return ResultUtil.data(fullDiscountService.pageFindAll(searchParams, page)); } @ApiOperation(value = "获取满优惠详情") @@ -42,20 +45,14 @@ public class FullDiscountManagerController { return ResultUtil.data(fullDiscountService.getFullDiscount(id)); } - @ApiOperation(value = "获取满优惠商品列表") - @GetMapping("/goods/{id}") - public ResultMessage getCouponGoods(@PathVariable String id) { - return ResultUtil.data(fullDiscountService.getFullDiscount(id)); - } - @ApiOperation(value = "修改满额活动状态") @ApiImplicitParams({ @ApiImplicitParam(name = "id", value = "满额活动ID", required = true, paramType = "path"), @ApiImplicitParam(name = "promotionStatus", value = "满额活动状态", required = true, paramType = "path") }) - @PutMapping("/status/{id}/{promotionStatus}") - public ResultMessage updateCouponStatus(@PathVariable String id, @PathVariable String promotionStatus) { - if (fullDiscountService.updateFullDiscountStatus(id, PromotionStatusEnum.valueOf(promotionStatus))) { + @PutMapping("/status/{id}") + public ResultMessage updateCouponStatus(@PathVariable String id, Long startTime, Long endTime) { + if (fullDiscountService.updateStatus(Collections.singletonList(id), startTime, endTime)) { return ResultUtil.success(ResultCode.SUCCESS); } return ResultUtil.error(ResultCode.ERROR); diff --git a/manager-api/src/main/java/cn/lili/controller/promotion/KanJiaActivityGoodsManagerController.java b/manager-api/src/main/java/cn/lili/controller/promotion/KanJiaActivityGoodsManagerController.java index c31cd919..d8897141 100644 --- a/manager-api/src/main/java/cn/lili/controller/promotion/KanJiaActivityGoodsManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/promotion/KanJiaActivityGoodsManagerController.java @@ -6,9 +6,10 @@ import cn.lili.common.enums.ResultUtil; import cn.lili.common.exception.ServiceException; import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; +import cn.lili.modules.promotion.entity.dos.KanjiaActivityGoods; import cn.lili.modules.promotion.entity.dto.KanjiaActivityGoodsDTO; import cn.lili.modules.promotion.entity.dto.KanjiaActivityGoodsOperationDTO; -import cn.lili.modules.promotion.entity.vos.kanjia.KanjiaActivityGoodsParams; +import cn.lili.modules.promotion.entity.dto.search.KanjiaActivityGoodsParams; import cn.lili.modules.promotion.service.KanjiaActivityGoodsService; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.Api; @@ -23,7 +24,7 @@ import java.util.Arrays; * 管理端,促销接口 * * @author qiuqiu - * @date 2021/7/2 + * @since 2021/7/2 **/ @RestController @Api(tags = "管理端,砍价促销接口") @@ -43,8 +44,8 @@ public class KanJiaActivityGoodsManagerController { @ApiOperation(value = "获取砍价活动分页") @GetMapping - public ResultMessage> getKanJiaActivityPage(KanjiaActivityGoodsParams KanJiaActivityParams, PageVO page) { - return ResultUtil.data(kanJiaActivityGoodsService.getForPage(KanJiaActivityParams, page)); + public ResultMessage> getKanJiaActivityPage(KanjiaActivityGoodsParams kanJiaParams, PageVO page) { + return ResultUtil.data(kanJiaActivityGoodsService.pageFindAll(kanJiaParams, page)); } @@ -59,7 +60,9 @@ public class KanJiaActivityGoodsManagerController { @PutMapping @ApiOperation(value = "修改砍价商品") public ResultMessage updatePointsGoods(@RequestBody KanjiaActivityGoodsDTO kanJiaActivityGoodsDTO) { - kanJiaActivityGoodsService.updateKanjiaActivityGoods(kanJiaActivityGoodsDTO); + if (!kanJiaActivityGoodsService.updateKanjiaActivityGoods(kanJiaActivityGoodsDTO)) { + return ResultUtil.error(ResultCode.KANJIA_GOODS_UPDATE_ERROR); + } return ResultUtil.success(); } @@ -67,7 +70,7 @@ public class KanJiaActivityGoodsManagerController { @DeleteMapping("/{ids}") @ApiOperation(value = "删除砍价商品") public ResultMessage delete(@PathVariable String ids) { - if (kanJiaActivityGoodsService.deleteKanJiaGoods(Arrays.asList(ids.split(",")))) { + if (kanJiaActivityGoodsService.removePromotions(Arrays.asList(ids.split(",")))) { return ResultUtil.success(); } throw new ServiceException(ResultCode.KANJIA_GOODS_DELETE_ERROR); diff --git a/manager-api/src/main/java/cn/lili/controller/promotion/PintuanManagerController.java b/manager-api/src/main/java/cn/lili/controller/promotion/PintuanManagerController.java index f87c5655..7210d33c 100644 --- a/manager-api/src/main/java/cn/lili/controller/promotion/PintuanManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/promotion/PintuanManagerController.java @@ -7,10 +7,10 @@ import cn.lili.common.exception.ServiceException; import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.promotion.entity.dos.Pintuan; -import cn.lili.modules.promotion.entity.dto.PromotionGoodsDTO; -import cn.lili.modules.promotion.entity.vos.PintuanSearchParams; +import cn.lili.modules.promotion.entity.dos.PromotionGoods; +import cn.lili.modules.promotion.entity.dto.search.PintuanSearchParams; +import cn.lili.modules.promotion.entity.dto.search.PromotionGoodsSearchParams; import cn.lili.modules.promotion.entity.vos.PintuanVO; -import cn.lili.modules.promotion.entity.vos.PromotionGoodsSearchParams; import cn.lili.modules.promotion.service.PintuanService; import cn.lili.modules.promotion.service.PromotionGoodsService; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -19,7 +19,7 @@ import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; -import java.util.Date; +import java.util.Arrays; /** * 管理端,平台拼团接口 @@ -38,46 +38,35 @@ public class PintuanManagerController { @GetMapping(value = "/{id}") @ApiOperation(value = "通过id获取") - public ResultMessage get(@PathVariable String id) { - Pintuan pintuan = pintuanService.getPintuanByIdFromMongo(id); + public ResultMessage get(@PathVariable String id) { + PintuanVO pintuan = pintuanService.getPintuanVO(id); return ResultUtil.data(pintuan); } @GetMapping @ApiOperation(value = "根据条件分页查询拼团活动列表") - public ResultMessage> getPintuanByPage(PintuanSearchParams queryParam, PageVO pageVo) { - IPage pintuanByPageFromMongo = pintuanService.getPintuanByPageFromMongo(queryParam, pageVo); - return ResultUtil.data(pintuanByPageFromMongo); + public ResultMessage> getPintuanByPage(PintuanSearchParams queryParam, PageVO pageVo) { + IPage pintuanIPage = pintuanService.pageFindAll(queryParam, pageVo); + return ResultUtil.data(pintuanIPage); } @GetMapping("/goods/{pintuanId}") @ApiOperation(value = "根据条件分页查询拼团活动商品列表") - public ResultMessage> getPintuanGoodsByPage(@PathVariable String pintuanId, PageVO pageVo) { + public ResultMessage> getPintuanGoodsByPage(@PathVariable String pintuanId, PageVO pageVo) { PromotionGoodsSearchParams searchParams = new PromotionGoodsSearchParams(); searchParams.setPromotionId(pintuanId); searchParams.setPromotionType(PromotionTypeEnum.PINTUAN.name()); - IPage promotionGoods = promotionGoodsService.getPromotionGoods(searchParams, pageVo); - return ResultUtil.data(promotionGoods); + return ResultUtil.data(promotionGoodsService.pageFindAll(searchParams, pageVo)); } - @PutMapping("/open/{pintuanId}") - @ApiOperation(value = "手动开启拼团活动") - public ResultMessage openPintuan(@PathVariable String pintuanId, Long startTime, Long endTime) { - if (pintuanService.openPintuan(pintuanId, new Date(startTime), new Date(endTime))) { + @PutMapping("/status/{pintuanIds}") + @ApiOperation(value = "操作拼团活动状态") + public ResultMessage openPintuan(@PathVariable String pintuanIds, Long startTime, Long endTime) { + if (pintuanService.updateStatus(Arrays.asList(pintuanIds.split(",")), startTime, endTime)) { return ResultUtil.success(ResultCode.PINTUAN_MANUAL_OPEN_SUCCESS); } throw new ServiceException(ResultCode.PINTUAN_MANUAL_OPEN_ERROR); } - @PutMapping("/close/{pintuanId}") - @ApiOperation(value = "手动关闭拼团活动") - public ResultMessage closePintuan(@PathVariable String pintuanId) { - if (pintuanService.closePintuan(pintuanId)) { - return ResultUtil.success(ResultCode.PINTUAN_MANUAL_CLOSE_SUCCESS); - } - throw new ServiceException(ResultCode.PINTUAN_MANUAL_CLOSE_ERROR); - } - - } diff --git a/manager-api/src/main/java/cn/lili/controller/promotion/PointsGoodsManagerController.java b/manager-api/src/main/java/cn/lili/controller/promotion/PointsGoodsManagerController.java index db15c51f..d4442ab0 100644 --- a/manager-api/src/main/java/cn/lili/controller/promotion/PointsGoodsManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/promotion/PointsGoodsManagerController.java @@ -1,13 +1,13 @@ package cn.lili.controller.promotion; import cn.lili.common.enums.ResultCode; -import cn.lili.common.exception.ServiceException; -import cn.lili.common.security.AuthUser; -import cn.lili.common.security.context.UserContext; import cn.lili.common.enums.ResultUtil; +import cn.lili.common.exception.ServiceException; +import cn.lili.common.security.context.UserContext; import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; -import cn.lili.modules.promotion.entity.vos.PointsGoodsSearchParams; +import cn.lili.modules.promotion.entity.dos.PointsGoods; +import cn.lili.modules.promotion.entity.dto.search.PointsGoodsSearchParams; import cn.lili.modules.promotion.entity.vos.PointsGoodsVO; import cn.lili.modules.promotion.service.PointsGoodsService; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -16,9 +16,9 @@ import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.Objects; /** * 管理端,积分商品接口 @@ -35,40 +35,34 @@ public class PointsGoodsManagerController { @PostMapping(consumes = "application/json", produces = "application/json") @ApiOperation(value = "添加积分商品") - public ResultMessage addPointsGoods(@RequestBody List pointsGoodsList) { - List collect = new ArrayList<>(); - for (PointsGoodsVO i : pointsGoodsList) { - i.setStoreName(i.getGoodsSku().getStoreName()); - i.setStoreId(i.getGoodsSku().getStoreId()); - collect.add(i); + public ResultMessage addPointsGoods(@RequestBody List pointsGoodsList) { + if (pointsGoodsService.savePointsGoodsBatch(pointsGoodsList)) { + return ResultUtil.success(); } - pointsGoodsService.addPointsGoods(collect); - return ResultUtil.success(); + return ResultUtil.error(ResultCode.POINT_GOODS_ERROR); } @PutMapping(consumes = "application/json", produces = "application/json") @ApiOperation(value = "修改积分商品") public ResultMessage updatePointsGoods(@RequestBody PointsGoodsVO pointsGoods) { - AuthUser currentUser = UserContext.getCurrentUser(); - pointsGoods.setStoreId(currentUser.getId()); - pointsGoods.setStoreName("platform"); - pointsGoodsService.updatePointsGoods(pointsGoods); + Objects.requireNonNull(UserContext.getCurrentUser()); + pointsGoodsService.updatePromotions(pointsGoods); return ResultUtil.success(); } - @PutMapping("/{ids}") + @PutMapping("/status/{ids}") @ApiOperation(value = "修改积分商品状态") - public ResultMessage updatePointsGoodsStatus(@PathVariable String ids, String promotionStatus) { - if (pointsGoodsService.updatePointsGoodsPromotionStatus(Arrays.asList(ids.split(",")), promotionStatus)) { + public ResultMessage updatePointsGoodsStatus(@PathVariable String ids, Long startTime, Long endTime) { + if (pointsGoodsService.updateStatus(Arrays.asList(ids.split(",")), startTime, endTime)) { return ResultUtil.success(); } - throw new ServiceException(ResultCode.POINT_GOODS_ERROR); + return ResultUtil.error(ResultCode.POINT_GOODS_ERROR); } @DeleteMapping("/{ids}") @ApiOperation(value = "删除积分商品") public ResultMessage delete(@PathVariable String ids) { - if (pointsGoodsService.deletePointsGoods(Arrays.asList(ids.split(",")))) { + if (pointsGoodsService.removePromotions(Arrays.asList(ids.split(",")))) { return ResultUtil.success(); } throw new ServiceException(ResultCode.POINT_GOODS_ERROR); @@ -76,8 +70,8 @@ public class PointsGoodsManagerController { @GetMapping @ApiOperation(value = "分页获取积分商品") - public ResultMessage> getPointsGoodsPage(PointsGoodsSearchParams searchParams, PageVO page) { - IPage pointsGoodsByPage = pointsGoodsService.getPointsGoodsByPage(searchParams, page); + public ResultMessage> getPointsGoodsPage(PointsGoodsSearchParams searchParams, PageVO page) { + IPage pointsGoodsByPage = pointsGoodsService.pageFindAll(searchParams, page); return ResultUtil.data(pointsGoodsByPage); } diff --git a/manager-api/src/main/java/cn/lili/controller/promotion/PromotionManagerController.java b/manager-api/src/main/java/cn/lili/controller/promotion/PromotionManagerController.java index 72fea8ef..9afbb2b4 100644 --- a/manager-api/src/main/java/cn/lili/controller/promotion/PromotionManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/promotion/PromotionManagerController.java @@ -3,9 +3,11 @@ package cn.lili.controller.promotion; import cn.lili.common.enums.ResultUtil; import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; -import cn.lili.modules.promotion.entity.dto.PromotionGoodsDTO; -import cn.lili.modules.promotion.service.PromotionService; +import cn.lili.modules.promotion.entity.dos.PromotionGoods; +import cn.lili.modules.promotion.entity.dto.search.PromotionGoodsSearchParams; +import cn.lili.modules.promotion.entity.enums.PromotionsStatusEnum; import cn.lili.modules.promotion.service.PromotionGoodsService; +import cn.lili.modules.promotion.service.PromotionService; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -42,8 +44,12 @@ public class PromotionManagerController { @GetMapping("/{promotionId}/goods") @ApiOperation(value = "获取当前进行中的促销活动商品") - public ResultMessage> getPromotionGoods(@PathVariable String promotionId, String promotionType, PageVO pageVO) { - IPage promotionGoods = promotionGoodsService.getCurrentPromotionGoods(promotionType, pageVO); + public ResultMessage> getPromotionGoods(@PathVariable String promotionId, String promotionType, PageVO pageVO) { + PromotionGoodsSearchParams searchParams = new PromotionGoodsSearchParams(); + searchParams.setPromotionId(promotionId); + searchParams.setPromotionType(promotionType); + searchParams.setPromotionStatus(PromotionsStatusEnum.START.name()); + IPage promotionGoods = promotionGoodsService.pageFindAll(searchParams, pageVO); return ResultUtil.data(promotionGoods); } diff --git a/manager-api/src/main/java/cn/lili/controller/promotion/SeckillManagerController.java b/manager-api/src/main/java/cn/lili/controller/promotion/SeckillManagerController.java index 27b02dfa..7eb9452d 100644 --- a/manager-api/src/main/java/cn/lili/controller/promotion/SeckillManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/promotion/SeckillManagerController.java @@ -5,7 +5,7 @@ import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.promotion.entity.dos.Seckill; import cn.lili.modules.promotion.entity.dos.SeckillApply; -import cn.lili.modules.promotion.entity.vos.SeckillSearchParams; +import cn.lili.modules.promotion.entity.dto.search.SeckillSearchParams; import cn.lili.modules.promotion.entity.vos.SeckillVO; import cn.lili.modules.promotion.service.SeckillApplyService; import cn.lili.modules.promotion.service.SeckillService; @@ -16,6 +16,8 @@ import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import java.util.Collections; + /** * 管理端,秒杀活动接口 * @@ -40,9 +42,9 @@ public class SeckillManagerController { @ApiOperation(value = "修改秒杀活动") - @PutMapping - public ResultMessage updateSeckill(SeckillVO seckillVO) { - seckillService.modifySeckill(seckillVO); + @PutMapping(consumes = "application/json", produces = "application/json") + public ResultMessage updateSeckill(@RequestBody SeckillVO seckillVO) { + seckillService.updatePromotions(seckillVO); return ResultUtil.data(seckillVO); } @@ -50,44 +52,36 @@ public class SeckillManagerController { @ApiImplicitParam(name = "id", value = "秒杀活动ID", required = true, dataType = "String", paramType = "path") @GetMapping(value = "/{id}") public ResultMessage get(@PathVariable String id) { - Seckill seckill = seckillService.getSeckillByIdFromMongo(id); + Seckill seckill = seckillService.getById(id); return ResultUtil.data(seckill); } @ApiOperation(value = "分页查询秒杀活动列表") @GetMapping - public ResultMessage> getAll(SeckillSearchParams param, PageVO pageVo) { - return ResultUtil.data(seckillService.getSeckillByPageFromMongo(param, pageVo)); + public ResultMessage> getAll(SeckillSearchParams param, PageVO pageVo) { + return ResultUtil.data(seckillService.pageFindAll(param, pageVo)); } @ApiOperation(value = "删除一个秒杀活动") @ApiImplicitParam(name = "id", value = "秒杀活动ID", required = true, dataType = "String", paramType = "path") @DeleteMapping("/{id}") public ResultMessage deleteSeckill(@PathVariable String id) { - seckillService.deleteSeckill(id); + seckillService.removePromotions(Collections.singletonList(id)); return ResultUtil.success(); } - @ApiOperation(value = "关闭一个秒杀活动") + @ApiOperation(value = "操作秒杀活动状态") @ApiImplicitParam(name = "id", value = "秒杀活动ID", required = true, dataType = "String", paramType = "path") - @PutMapping("/close/{id}") - public ResultMessage closeSeckill(@PathVariable String id) { - seckillService.closeSeckill(id); - return ResultUtil.success(); - } - - @ApiOperation(value = "开启一个秒杀活动") - @ApiImplicitParam(name = "id", value = "秒杀活动ID", required = true, dataType = "String", paramType = "path") - @PutMapping("/open/{id}") - public ResultMessage openSeckill(@PathVariable String id) { - seckillService.openSeckill(id); + @PutMapping("/status/{id}") + public ResultMessage updateSeckillStatus(@PathVariable String id, Long startTime, Long endTime) { + seckillService.updateStatus(Collections.singletonList(id), startTime, endTime); return ResultUtil.success(); } @ApiOperation(value = "获取秒杀活动申请列表") @GetMapping("/apply") public ResultMessage> getSeckillApply(SeckillSearchParams param, PageVO pageVo) { - IPage seckillApply = seckillApplyService.getSeckillApplyFromMongo(param, pageVo); + IPage seckillApply = seckillApplyService.getSeckillApplyPage(param, pageVo); return ResultUtil.data(seckillApply); } diff --git a/manager-api/src/main/java/cn/lili/controller/setting/RegionManagerController.java b/manager-api/src/main/java/cn/lili/controller/setting/RegionManagerController.java index 223bf548..d479bfe7 100644 --- a/manager-api/src/main/java/cn/lili/controller/setting/RegionManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/setting/RegionManagerController.java @@ -1,10 +1,10 @@ package cn.lili.controller.setting; +import cn.lili.common.aop.annotation.DemoSite; import cn.lili.common.enums.ResultUtil; import cn.lili.common.vo.ResultMessage; -import cn.lili.modules.system.aspect.annotation.DemoSite; -import cn.lili.modules.system.service.RegionService; import cn.lili.modules.system.entity.dos.Region; +import cn.lili.modules.system.service.RegionService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; diff --git a/manager-api/src/main/java/cn/lili/controller/setting/SettingManagerController.java b/manager-api/src/main/java/cn/lili/controller/setting/SettingManagerController.java index 19146d11..e0f9c48d 100644 --- a/manager-api/src/main/java/cn/lili/controller/setting/SettingManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/setting/SettingManagerController.java @@ -1,11 +1,11 @@ package cn.lili.controller.setting; import cn.hutool.json.JSONUtil; +import cn.lili.common.aop.annotation.DemoSite; import cn.lili.common.enums.ResultCode; import cn.lili.common.enums.ResultUtil; import cn.lili.common.exception.ServiceException; import cn.lili.common.vo.ResultMessage; -import cn.lili.modules.system.aspect.annotation.DemoSite; import cn.lili.modules.system.entity.dos.Setting; import cn.lili.modules.system.entity.dto.*; import cn.lili.modules.system.entity.dto.connect.QQConnectSetting; diff --git a/manager-api/src/main/java/cn/lili/controller/setting/SmsManagerController.java b/manager-api/src/main/java/cn/lili/controller/sms/SmsManagerController.java similarity index 91% rename from manager-api/src/main/java/cn/lili/controller/setting/SmsManagerController.java rename to manager-api/src/main/java/cn/lili/controller/sms/SmsManagerController.java index c07eef61..70026cf7 100644 --- a/manager-api/src/main/java/cn/lili/controller/setting/SmsManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/sms/SmsManagerController.java @@ -1,10 +1,10 @@ -package cn.lili.controller.setting; +package cn.lili.controller.sms; import cn.lili.common.enums.ResultUtil; import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; -import cn.lili.modules.message.entity.dos.SmsReach; -import cn.lili.modules.message.service.SmsReachService; +import cn.lili.modules.sms.entity.dos.SmsReach; +import cn.lili.modules.sms.service.SmsReachService; import cn.lili.mybatis.util.PageUtil; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.Api; diff --git a/manager-api/src/main/java/cn/lili/controller/setting/SmsSignManagerController.java b/manager-api/src/main/java/cn/lili/controller/sms/SmsSignManagerController.java similarity index 94% rename from manager-api/src/main/java/cn/lili/controller/setting/SmsSignManagerController.java rename to manager-api/src/main/java/cn/lili/controller/sms/SmsSignManagerController.java index 9ed17cee..de3244f7 100644 --- a/manager-api/src/main/java/cn/lili/controller/setting/SmsSignManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/sms/SmsSignManagerController.java @@ -1,10 +1,10 @@ -package cn.lili.controller.setting; +package cn.lili.controller.sms; import cn.lili.common.enums.ResultUtil; import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; -import cn.lili.modules.message.entity.dos.SmsSign; -import cn.lili.modules.message.service.SmsSignService; +import cn.lili.modules.sms.entity.dos.SmsSign; +import cn.lili.modules.sms.service.SmsSignService; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; diff --git a/manager-api/src/main/java/cn/lili/controller/setting/SmsTemplateManagerController.java b/manager-api/src/main/java/cn/lili/controller/sms/SmsTemplateManagerController.java similarity index 93% rename from manager-api/src/main/java/cn/lili/controller/setting/SmsTemplateManagerController.java rename to manager-api/src/main/java/cn/lili/controller/sms/SmsTemplateManagerController.java index bd8ae97b..f9beef26 100644 --- a/manager-api/src/main/java/cn/lili/controller/setting/SmsTemplateManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/sms/SmsTemplateManagerController.java @@ -1,10 +1,10 @@ -package cn.lili.controller.setting; +package cn.lili.controller.sms; import cn.lili.common.enums.ResultUtil; import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; -import cn.lili.modules.message.entity.dos.SmsTemplate; -import cn.lili.modules.message.service.SmsTemplateService; +import cn.lili.modules.sms.entity.dos.SmsTemplate; +import cn.lili.modules.sms.service.SmsTemplateService; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; diff --git a/manager-api/src/main/java/cn/lili/controller/statistics/GoodsStatisticsManagerController.java b/manager-api/src/main/java/cn/lili/controller/statistics/GoodsStatisticsManagerController.java index 21325245..7849998c 100644 --- a/manager-api/src/main/java/cn/lili/controller/statistics/GoodsStatisticsManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/statistics/GoodsStatisticsManagerController.java @@ -5,7 +5,7 @@ import cn.lili.common.vo.ResultMessage; import cn.lili.modules.statistics.entity.dto.GoodsStatisticsQueryParam; import cn.lili.modules.statistics.entity.vo.CategoryStatisticsDataVO; import cn.lili.modules.statistics.entity.vo.GoodsStatisticsDataVO; -import cn.lili.modules.statistics.service.GoodsStatisticsDataService; +import cn.lili.modules.statistics.service.StoreFlowStatisticsService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; @@ -21,22 +21,22 @@ import java.util.List; * @author Bulbasaur * @since 2020/12/9 19:04 */ -@Api(tags = "管理端,商品统计接口") +@Api(tags = "管理端,商品流水统计接口") @RestController @RequestMapping("/manager/statistics/goods") public class GoodsStatisticsManagerController { @Autowired - private GoodsStatisticsDataService goodsStatisticsDataService; + private StoreFlowStatisticsService storeFlowStatisticsService; @ApiOperation(value = "获取统计列表,排行前一百的数据") @GetMapping public ResultMessage> getByPage(GoodsStatisticsQueryParam goodsStatisticsQueryParam) { - return ResultUtil.data(goodsStatisticsDataService.getGoodsStatisticsData(goodsStatisticsQueryParam, 100)); + return ResultUtil.data(storeFlowStatisticsService.getGoodsStatisticsData(goodsStatisticsQueryParam, 100)); } @ApiOperation(value = "获取行业统计列表") @GetMapping("/getCategoryByPage") public ResultMessage> getCategoryByPage(GoodsStatisticsQueryParam goodsStatisticsQueryParam) { - return ResultUtil.data(goodsStatisticsDataService.getCategoryStatisticsData(goodsStatisticsQueryParam)); + return ResultUtil.data(storeFlowStatisticsService.getCategoryStatisticsData(goodsStatisticsQueryParam)); } } diff --git a/manager-api/src/main/java/cn/lili/controller/statistics/MemberStatisticsManagerController.java b/manager-api/src/main/java/cn/lili/controller/statistics/MemberStatisticsManagerController.java index 84af4758..30aed609 100644 --- a/manager-api/src/main/java/cn/lili/controller/statistics/MemberStatisticsManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/statistics/MemberStatisticsManagerController.java @@ -4,7 +4,7 @@ import cn.lili.common.enums.ResultUtil; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.statistics.entity.dos.MemberStatisticsData; import cn.lili.modules.statistics.entity.dto.StatisticsQueryParam; -import cn.lili.modules.statistics.service.MemberStatisticsDataService; +import cn.lili.modules.statistics.service.MemberStatisticsService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; @@ -25,11 +25,11 @@ import java.util.List; @RequestMapping("/manager/statistics/member") public class MemberStatisticsManagerController { @Autowired - private MemberStatisticsDataService memberStatisticsDataService; + private MemberStatisticsService memberStatisticsService; @ApiOperation(value = "获取会员统计") @GetMapping public ResultMessage> getByList(StatisticsQueryParam statisticsQueryParam) { - return ResultUtil.data(memberStatisticsDataService.statistics(statisticsQueryParam)); + return ResultUtil.data(memberStatisticsService.statistics(statisticsQueryParam)); } } diff --git a/manager-api/src/main/java/cn/lili/controller/statistics/OrderStatisticsManagerController.java b/manager-api/src/main/java/cn/lili/controller/statistics/OrderStatisticsManagerController.java index de151751..f307ca03 100644 --- a/manager-api/src/main/java/cn/lili/controller/statistics/OrderStatisticsManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/statistics/OrderStatisticsManagerController.java @@ -3,14 +3,13 @@ package cn.lili.controller.statistics; import cn.lili.common.enums.ResultUtil; import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; -import cn.lili.modules.order.order.entity.dos.AfterSale; +import cn.lili.modules.order.aftersale.entity.dos.AfterSale; import cn.lili.modules.order.order.entity.vo.OrderSimpleVO; -import cn.lili.modules.order.order.service.AfterSaleService; -import cn.lili.modules.order.order.service.OrderService; import cn.lili.modules.statistics.entity.dto.StatisticsQueryParam; import cn.lili.modules.statistics.entity.vo.OrderOverviewVO; import cn.lili.modules.statistics.entity.vo.OrderStatisticsDataVO; -import cn.lili.modules.statistics.service.OrderStatisticsDataService; +import cn.lili.modules.statistics.service.AfterSaleStatisticsService; +import cn.lili.modules.statistics.service.OrderStatisticsService; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -34,17 +33,15 @@ import java.util.List; @RequestMapping("/manager/statistics/order") public class OrderStatisticsManagerController { @Autowired - private OrderStatisticsDataService orderStatisticsDataService; + private OrderStatisticsService orderStatisticsService; @Autowired - private OrderService orderService; - @Autowired - private AfterSaleService afterSaleService; + private AfterSaleStatisticsService afterSaleStatisticsService; @ApiOperation(value = "订单概览统计") @GetMapping("/overview") public ResultMessage overview(StatisticsQueryParam statisticsQueryParam) { try { - return ResultUtil.data(orderStatisticsDataService.overview(statisticsQueryParam)); + return ResultUtil.data(orderStatisticsService.overview(statisticsQueryParam)); } catch (Exception e) { log.error("订单概览统计错误",e); } @@ -55,7 +52,7 @@ public class OrderStatisticsManagerController { @GetMapping public ResultMessage> statisticsChart(StatisticsQueryParam statisticsQueryParam) { try { - return ResultUtil.data(orderStatisticsDataService.statisticsChart(statisticsQueryParam)); + return ResultUtil.data(orderStatisticsService.statisticsChart(statisticsQueryParam)); } catch (Exception e) { log.error("订单图表统计",e); } @@ -67,7 +64,7 @@ public class OrderStatisticsManagerController { @GetMapping("/order") public ResultMessage> order(StatisticsQueryParam statisticsQueryParam, PageVO pageVO) { try { - return ResultUtil.data(orderService.getStatistics(statisticsQueryParam, pageVO)); + return ResultUtil.data(orderStatisticsService.getStatistics(statisticsQueryParam, pageVO)); } catch (Exception e) { log.error("订单统计",e); } @@ -78,6 +75,6 @@ public class OrderStatisticsManagerController { @ApiOperation(value = "退单统计") @GetMapping("/refund") public ResultMessage> refund(StatisticsQueryParam statisticsQueryParam, PageVO pageVO) { - return ResultUtil.data(afterSaleService.getStatistics(statisticsQueryParam, pageVO)); + return ResultUtil.data(afterSaleStatisticsService.getStatistics(statisticsQueryParam, pageVO)); } } diff --git a/manager-api/src/main/java/cn/lili/controller/statistics/ViewStatisticsManagerController.java b/manager-api/src/main/java/cn/lili/controller/statistics/ViewStatisticsManagerController.java index 67847cce..01ffd699 100644 --- a/manager-api/src/main/java/cn/lili/controller/statistics/ViewStatisticsManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/statistics/ViewStatisticsManagerController.java @@ -6,7 +6,7 @@ import cn.lili.modules.member.entity.vo.MemberDistributionVO; import cn.lili.modules.statistics.entity.dto.StatisticsQueryParam; import cn.lili.modules.statistics.entity.vo.OnlineMemberVO; import cn.lili.modules.statistics.entity.vo.PlatformViewVO; -import cn.lili.modules.statistics.service.PlatformViewDataService; +import cn.lili.modules.statistics.service.PlatformViewService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; @@ -27,31 +27,31 @@ import java.util.List; @RequestMapping("/manager/statistics/view") public class ViewStatisticsManagerController { @Autowired - private PlatformViewDataService platformViewDataService; + private PlatformViewService platformViewService; @ApiOperation(value = "流量数据 表单获取") @GetMapping("/list") public ResultMessage> getByPage(StatisticsQueryParam queryParam) { - return ResultUtil.data(platformViewDataService.list(queryParam)); + return ResultUtil.data(platformViewService.list(queryParam)); } @ApiOperation(value = "当前在线人数") @GetMapping("/online/current") public ResultMessage currentNumberPeopleOnline() { - return ResultUtil.data(platformViewDataService.online()); + return ResultUtil.data(platformViewService.online()); } @ApiOperation(value = "会员分布") @GetMapping("/online/distribution") public ResultMessage> memberDistribution() { - return ResultUtil.data(platformViewDataService.memberDistribution()); + return ResultUtil.data(platformViewService.memberDistribution()); } @ApiOperation(value = "在线人数历史(默认48小时)") @GetMapping("/online/history") public ResultMessage> history() { - return ResultUtil.data(platformViewDataService.statisticsOnline()); + return ResultUtil.data(platformViewService.statisticsOnline()); } } diff --git a/manager-api/src/main/java/cn/lili/controller/store/BillManagerController.java b/manager-api/src/main/java/cn/lili/controller/store/BillManagerController.java index d6f08dda..128cbe18 100644 --- a/manager-api/src/main/java/cn/lili/controller/store/BillManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/store/BillManagerController.java @@ -4,6 +4,7 @@ import cn.lili.common.enums.ResultUtil; import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.order.order.entity.dos.StoreFlow; +import cn.lili.modules.order.order.service.StoreFlowService; import cn.lili.modules.store.entity.dos.Bill; import cn.lili.modules.store.entity.dto.BillSearchParams; import cn.lili.modules.store.entity.vos.BillListVO; @@ -31,6 +32,9 @@ public class BillManagerController { @Autowired private BillService billService; + @Autowired + private StoreFlowService storeFlowService; + @ApiOperation(value = "通过id获取结算单") @ApiImplicitParam(name = "id", value = "结算单ID", required = true, paramType = "path") @GetMapping(value = "/get/{id}") @@ -51,7 +55,7 @@ public class BillManagerController { }) @GetMapping(value = "/{id}/getStoreFlow") public ResultMessage> getStoreFlow(@PathVariable String id, String flowType, PageVO pageVO) { - return ResultUtil.data(billService.getStoreFlow(id, flowType, pageVO)); + return ResultUtil.data(storeFlowService.getStoreFlow(id, flowType, pageVO)); } @ApiOperation(value = "支付结算单") diff --git a/manager-api/src/main/java/cn/lili/controller/store/StoreManagerController.java b/manager-api/src/main/java/cn/lili/controller/store/StoreManagerController.java index ac4321d5..ae4b8c73 100644 --- a/manager-api/src/main/java/cn/lili/controller/store/StoreManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/store/StoreManagerController.java @@ -1,5 +1,6 @@ package cn.lili.controller.store; +import cn.lili.common.aop.annotation.DemoSite; import cn.lili.common.enums.ResultUtil; import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; @@ -12,7 +13,6 @@ import cn.lili.modules.store.entity.vos.StoreSearchParams; import cn.lili.modules.store.entity.vos.StoreVO; import cn.lili.modules.store.service.StoreDetailService; import cn.lili.modules.store.service.StoreService; -import cn.lili.modules.system.aspect.annotation.DemoSite; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.Api; diff --git a/manager-api/src/main/java/cn/lili/controller/member/MemberWalletManagerController.java b/manager-api/src/main/java/cn/lili/controller/wallet/MemberWalletManagerController.java similarity index 88% rename from manager-api/src/main/java/cn/lili/controller/member/MemberWalletManagerController.java rename to manager-api/src/main/java/cn/lili/controller/wallet/MemberWalletManagerController.java index 0265c2da..9b232f4c 100644 --- a/manager-api/src/main/java/cn/lili/controller/member/MemberWalletManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/wallet/MemberWalletManagerController.java @@ -1,9 +1,9 @@ -package cn.lili.controller.member; +package cn.lili.controller.wallet; import cn.lili.common.enums.ResultUtil; import cn.lili.common.vo.ResultMessage; -import cn.lili.modules.member.entity.vo.MemberWalletVO; -import cn.lili.modules.member.service.MemberWalletService; +import cn.lili.modules.wallet.entity.vo.MemberWalletVO; +import cn.lili.modules.wallet.service.MemberWalletService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; diff --git a/manager-api/src/main/java/cn/lili/controller/member/MemberWithdrawApplyManagerController.java b/manager-api/src/main/java/cn/lili/controller/wallet/MemberWithdrawApplyManagerController.java similarity index 90% rename from manager-api/src/main/java/cn/lili/controller/member/MemberWithdrawApplyManagerController.java rename to manager-api/src/main/java/cn/lili/controller/wallet/MemberWithdrawApplyManagerController.java index f17d9e5d..c5f8c36a 100644 --- a/manager-api/src/main/java/cn/lili/controller/member/MemberWithdrawApplyManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/wallet/MemberWithdrawApplyManagerController.java @@ -1,12 +1,12 @@ -package cn.lili.controller.member; +package cn.lili.controller.wallet; import cn.lili.common.enums.ResultUtil; import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; -import cn.lili.modules.member.entity.dos.MemberWithdrawApply; -import cn.lili.modules.member.entity.vo.MemberWithdrawApplyQueryVO; -import cn.lili.modules.member.service.MemberWithdrawApplyService; +import cn.lili.modules.wallet.entity.dos.MemberWithdrawApply; +import cn.lili.modules.wallet.entity.vo.MemberWithdrawApplyQueryVO; +import cn.lili.modules.wallet.service.MemberWithdrawApplyService; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; diff --git a/manager-api/src/main/java/cn/lili/controller/trade/RechargeManagerController.java b/manager-api/src/main/java/cn/lili/controller/wallet/RechargeManagerController.java similarity index 90% rename from manager-api/src/main/java/cn/lili/controller/trade/RechargeManagerController.java rename to manager-api/src/main/java/cn/lili/controller/wallet/RechargeManagerController.java index 152739d8..e6aeec07 100644 --- a/manager-api/src/main/java/cn/lili/controller/trade/RechargeManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/wallet/RechargeManagerController.java @@ -1,11 +1,11 @@ -package cn.lili.controller.trade; +package cn.lili.controller.wallet; import cn.lili.common.enums.ResultUtil; import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; -import cn.lili.modules.order.trade.entity.dos.Recharge; import cn.lili.modules.order.trade.entity.vo.RechargeQueryVO; -import cn.lili.modules.order.trade.service.RechargeService; +import cn.lili.modules.wallet.entity.dos.Recharge; +import cn.lili.modules.wallet.service.RechargeService; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; diff --git a/manager-api/src/main/java/cn/lili/controller/trade/WalletLogManagerController.java b/manager-api/src/main/java/cn/lili/controller/wallet/WalletLogManagerController.java similarity index 89% rename from manager-api/src/main/java/cn/lili/controller/trade/WalletLogManagerController.java rename to manager-api/src/main/java/cn/lili/controller/wallet/WalletLogManagerController.java index 60afa39f..91a58b6b 100644 --- a/manager-api/src/main/java/cn/lili/controller/trade/WalletLogManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/wallet/WalletLogManagerController.java @@ -1,11 +1,11 @@ -package cn.lili.controller.trade; +package cn.lili.controller.wallet; import cn.lili.common.enums.ResultUtil; import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; -import cn.lili.modules.order.trade.entity.dos.WalletLog; import cn.lili.modules.order.trade.entity.vo.DepositQueryVO; -import cn.lili.modules.order.trade.service.WalletLogService; +import cn.lili.modules.wallet.entity.dos.WalletLog; +import cn.lili.modules.wallet.service.WalletLogService; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; diff --git a/manager-api/src/main/java/cn/lili/controller/setting/WechatMPMessageManagerController.java b/manager-api/src/main/java/cn/lili/controller/wechat/WechatMPMessageManagerController.java similarity index 94% rename from manager-api/src/main/java/cn/lili/controller/setting/WechatMPMessageManagerController.java rename to manager-api/src/main/java/cn/lili/controller/wechat/WechatMPMessageManagerController.java index b26e3816..5dc705a7 100644 --- a/manager-api/src/main/java/cn/lili/controller/setting/WechatMPMessageManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/wechat/WechatMPMessageManagerController.java @@ -1,12 +1,12 @@ -package cn.lili.controller.setting; +package cn.lili.controller.wechat; import cn.lili.common.enums.ResultUtil; -import cn.lili.mybatis.util.PageUtil; import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; import cn.lili.common.vo.SearchVO; -import cn.lili.modules.message.entity.dos.WechatMPMessage; -import cn.lili.modules.message.service.WechatMPMessageService; +import cn.lili.modules.wechat.entity.dos.WechatMPMessage; +import cn.lili.modules.wechat.service.WechatMPMessageService; +import cn.lili.mybatis.util.PageUtil; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; diff --git a/manager-api/src/main/java/cn/lili/controller/setting/WechatMessageManageController.java b/manager-api/src/main/java/cn/lili/controller/wechat/WechatMessageManageController.java similarity index 93% rename from manager-api/src/main/java/cn/lili/controller/setting/WechatMessageManageController.java rename to manager-api/src/main/java/cn/lili/controller/wechat/WechatMessageManageController.java index 36a8d593..16d45c78 100644 --- a/manager-api/src/main/java/cn/lili/controller/setting/WechatMessageManageController.java +++ b/manager-api/src/main/java/cn/lili/controller/wechat/WechatMessageManageController.java @@ -1,11 +1,11 @@ -package cn.lili.controller.setting; +package cn.lili.controller.wechat; import cn.lili.common.enums.ResultUtil; -import cn.lili.mybatis.util.PageUtil; import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; -import cn.lili.modules.message.entity.dos.WechatMessage; -import cn.lili.modules.message.service.WechatMessageService; +import cn.lili.modules.wechat.entity.dos.WechatMessage; +import cn.lili.modules.wechat.service.WechatMessageService; +import cn.lili.mybatis.util.PageUtil; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; diff --git a/manager-api/src/main/java/cn/lili/security/ManagerAuthenticationFilter.java b/manager-api/src/main/java/cn/lili/security/ManagerAuthenticationFilter.java index d45eb63f..27a1586f 100755 --- a/manager-api/src/main/java/cn/lili/security/ManagerAuthenticationFilter.java +++ b/manager-api/src/main/java/cn/lili/security/ManagerAuthenticationFilter.java @@ -1,6 +1,7 @@ package cn.lili.security; import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONUtil; import cn.lili.cache.Cache; import cn.lili.cache.CachePrefix; import cn.lili.common.security.AuthUser; @@ -90,25 +91,39 @@ public class ManagerAuthenticationFilter extends BasicAuthenticationFilter { //获取数据(GET 请求)权限 if (request.getMethod().equals(RequestMethod.GET.name())) { //如果用户的超级权限和查阅权限都不包含当前请求的api - if (PatternMatchUtils.simpleMatch(permission.get(PermissionEnum.SUPER.name()).toArray(new String[0]), requestUrl) - || PatternMatchUtils.simpleMatch(permission.get(PermissionEnum.QUERY.name()).toArray(new String[0]), requestUrl)) { + if (match(permission.get(PermissionEnum.SUPER.name()), requestUrl) || + match(permission.get(PermissionEnum.QUERY.name()), requestUrl)) { } else { ResponseUtil.output(response, ResponseUtil.resultMap(false, 400, "权限不足")); + log.error("当前请求路径:{},所拥有权限:{}", requestUrl, JSONUtil.toJsonStr(permission)); throw new NoPermissionException("权限不足"); } } //非get请求(数据操作) 判定鉴权 else { - if (PatternMatchUtils.simpleMatch(permission.get(PermissionEnum.SUPER.name()).toArray(new String[0]), requestUrl)) { - - } else { + if (!match(permission.get(PermissionEnum.SUPER.name()), requestUrl)) { ResponseUtil.output(response, ResponseUtil.resultMap(false, 400, "权限不足")); + log.error("当前请求路径:{},所拥有权限:{}", requestUrl, JSONUtil.toJsonStr(permission)); throw new NoPermissionException("权限不足"); } } } } + /** + * 校验权限 + * + * @param permissions 权限集合 + * @param url 请求地址 + * @return 是否拥有权限 + */ + boolean match(List permissions, String url) { + if (permissions == null || permissions.isEmpty()) { + return false; + } + return PatternMatchUtils.simpleMatch(permissions.toArray(new String[0]), url); + } + /** * 获取token信息 * diff --git a/manager-api/src/main/resources/application.yml b/manager-api/src/main/resources/application.yml index ec6937e6..1ecab32a 100644 --- a/manager-api/src/main/resources/application.yml +++ b/manager-api/src/main/resources/application.yml @@ -29,15 +29,6 @@ spring: admin: client: url: http://127.0.0.1:8000 - # mongodb - data: - mongodb: - uri: 127.0.0.1:27017 - database: lilishop - username: root - password: lilishop - authentication-database: admin - # replica-set-name: mongoreplset cache: type: redis # Redis @@ -131,6 +122,7 @@ ignored: - /manager/user/login - /manager/user/refresh/** - /manager/elasticsearch + - /manager/custom-words - /druid/** - /swagger-ui.html - /doc.html @@ -173,7 +165,6 @@ logging: cn.lili: info # org.hibernate: debug # org.springframework: debug - # org.springframework.data.mongodb.core: debug file: # 指定路径 path: lili-logs diff --git a/manager-api/src/test/java/cn/lili/test/elasticsearch/EsTest.java b/manager-api/src/test/java/cn/lili/test/elasticsearch/EsTest.java index 0ddd4001..3ecf49f3 100644 --- a/manager-api/src/test/java/cn/lili/test/elasticsearch/EsTest.java +++ b/manager-api/src/test/java/cn/lili/test/elasticsearch/EsTest.java @@ -1,6 +1,5 @@ package cn.lili.test.elasticsearch; -import cn.hutool.http.HtmlUtil; import cn.hutool.json.JSONUtil; import cn.lili.cache.Cache; import cn.lili.common.vo.PageVO; @@ -20,8 +19,6 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; -import org.owasp.html.PolicyFactory; -import org.owasp.html.Sanitizers; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.data.elasticsearch.core.SearchPage; @@ -29,7 +26,6 @@ import org.springframework.test.context.junit.jupiter.SpringExtension; import java.util.ArrayList; import java.util.List; -import java.util.Map; /** * @author paulG @@ -59,12 +55,22 @@ class EsTest { public static void main(String[] args) { - PolicyFactory policy = Sanitizers.FORMATTING.and(Sanitizers.LINKS); - String safeHTML = policy.sanitize("+ADw-script+AD4-alert(document.cookie)+ADw-/script+AD4-"); - System.out.println(safeHTML); - System.out.println(Sanitizers.FORMATTING.and(Sanitizers.FORMATTING).sanitize("+ADw-script+AD4-alert(document.cookie)+ADw-/script+AD4-")); - System.out.println(HtmlUtil.unescape(safeHTML)); - System.out.println(HtmlUtil.filter("+ADw-script+AD4-alert(document.cookie)+ADw-/script+AD4-")); +// PolicyFactory policy = Sanitizers.FORMATTING.and(Sanitizers.LINKS); +// String safeHTML = policy.sanitize("+ADw-script+AD4-alert(document.cookie)+ADw-/script+AD4-"); +// System.out.println(safeHTML); +// System.out.println(Sanitizers.FORMATTING.and(Sanitizers.FORMATTING).sanitize("+ADw-script+AD4-alert(document.cookie)+ADw-/script+AD4-")); +// System.out.println(HtmlUtil.unescape(safeHTML)); +// System.out.println(HtmlUtil.filter("+ADw-script+AD4-alert(document.cookie)+ADw-/script+AD4-")); +// Date dt1 = new Date(2021, 12, 10); +// Date dt2 = new Date(2021, 12, 14); +// + + } + + @Test + void cleanInvalidPromotion() { + this.esGoodsIndexService.cleanInvalidPromotion(); + Assertions.assertTrue(true); } @Test @@ -117,14 +123,12 @@ class EsTest { @Test void init() { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(GoodsSku::getIsAuth, GoodsAuthEnum.PASS.name()); + queryWrapper.eq(GoodsSku::getAuthFlag, GoodsAuthEnum.PASS.name()); queryWrapper.eq(GoodsSku::getMarketEnable, GoodsStatusEnum.UPPER.name()); List list = goodsSkuService.list(queryWrapper); List esGoodsIndices = new ArrayList<>(); for (GoodsSku goodsSku : list) { EsGoodsIndex index = new EsGoodsIndex(goodsSku); - Map goodsCurrentPromotionMap = promotionService.getGoodsCurrentPromotionMap(index); - index.setPromotionMap(goodsCurrentPromotionMap); esGoodsIndices.add(index); cache.put(GoodsSkuService.getStockCacheKey(goodsSku.getId()), goodsSku.getQuantity()); } @@ -166,62 +170,7 @@ class EsTest { @Test void updateIndex() { -// EsGoodsIndex goodsIndex = new EsGoodsIndex(); -// goodsIndex.setId("121"); -// goodsIndex.setBrandId("113"); -// goodsIndex.setGoodsId("113"); -// goodsIndex.setCategoryPath("0|1"); -// goodsIndex.setBuyCount(100); -// goodsIndex.setCommentNum(100); -// goodsIndex.setGoodsName("惠普(HP)战66 三代AMD版14英寸轻薄笔记本电脑(锐龙7nm 六核R5-4500U 16G 512G 400尼特高色域一年上门 )"); -// goodsIndex.setGrade(100D); -// goodsIndex.setHighPraiseNum(100); -// goodsIndex.setIntro("I'd like a cup of tea, please"); -// goodsIndex.setIsAuth("1"); -// goodsIndex.setMarketEnable("1"); -// goodsIndex.setMobileIntro("I want something cold to drink"); -// goodsIndex.setPoint(100); -// goodsIndex.setPrice(100D); -// goodsIndex.setSelfOperated(true); -// goodsIndex.setStoreId("113"); -// goodsIndex.setStoreName("惠普自营官方旗舰店"); -// goodsIndex.setStoreCategoryPath("1"); -// goodsIndex.setThumbnail("picture"); -// goodsIndex.setSn("A113"); -// Map promotionMap = new HashMap<>(); -// Coupon coupon = new Coupon(); -// coupon.setStoreId("113"); -// coupon.setStoreName("惠普自营官方旗舰店"); -// coupon.setPromotionStatus(PromotionStatusEnum.START.name()); -// coupon.setReceivedNum(0); -// coupon.setConsumeLimit(11D); -// coupon.setCouponLimitNum(10); -// coupon.setCouponName("满11减10"); -// coupon.setCouponType(CouponTypeEnum.PRICE.name()); -// coupon.setGetType(CouponGetEnum.FREE.name()); -// coupon.setPrice(10D); -// promotionMap.put(PromotionTypeEnum.COUPON.name(), coupon); -// goodsIndex.setPromotionMap(promotionMap); -// List esGoodsAttributeList = new ArrayList<>(); -// EsGoodsAttribute attribute = new EsGoodsAttribute(); -// attribute.setType(0); -// attribute.setName("颜色"); -// attribute.setValue("14英寸"); -// esGoodsAttributeList.add(attribute); -// esGoodsAttributeList.add(attribute); -// attribute = new EsGoodsAttribute(); -// attribute.setName("版本"); -// attribute.setValue("【战66新品】R5-4500 8G 256G"); -// esGoodsAttributeList.add(attribute); -// attribute = new EsGoodsAttribute(); -// attribute.setName("配置"); -// attribute.setValue("i5 8G 512G 2G独显"); -// esGoodsAttributeList.add(attribute); -// goodsIndex.setAttrList(esGoodsAttributeList); -// GoodsSku goodsSkuByIdFromCache = goodsSkuService.getGoodsSkuByIdFromCache("121"); -// EsGoodsIndex goodsIndex = new EsGoodsIndex(goodsSkuByIdFromCache); EsGoodsIndex byId = esGoodsIndexService.findById("121"); - byId.setPromotionMap(null); esGoodsIndexService.updateIndex(byId); Assertions.assertTrue(true); } @@ -246,7 +195,7 @@ class EsTest { goodsIndex.setGrade(100D); goodsIndex.setHighPraiseNum(100); goodsIndex.setIntro("I'd like a cup of tea, please"); - goodsIndex.setIsAuth("1"); + goodsIndex.setAuthFlag("1"); goodsIndex.setMarketEnable("1"); goodsIndex.setMobileIntro("I want something cold to drink"); goodsIndex.setPoint(0); diff --git a/manager-api/src/test/java/cn/lili/test/promotion/CouponTest.java b/manager-api/src/test/java/cn/lili/test/promotion/CouponTest.java index 5f40fd62..0104a869 100644 --- a/manager-api/src/test/java/cn/lili/test/promotion/CouponTest.java +++ b/manager-api/src/test/java/cn/lili/test/promotion/CouponTest.java @@ -2,17 +2,16 @@ package cn.lili.test.promotion; import cn.lili.common.enums.PromotionTypeEnum; import cn.lili.common.vo.PageVO; -import cn.lili.common.properties.RocketmqCustomProperties; import cn.lili.modules.goods.entity.enums.GoodsStatusEnum; -import cn.lili.modules.goods.service.GoodsSkuService; import cn.lili.modules.promotion.entity.dos.Coupon; import cn.lili.modules.promotion.entity.dos.PromotionGoods; -import cn.lili.modules.promotion.entity.enums.*; -import cn.lili.modules.promotion.entity.vos.CouponSearchParams; +import cn.lili.modules.promotion.entity.dto.search.CouponSearchParams; +import cn.lili.modules.promotion.entity.enums.CouponGetEnum; +import cn.lili.modules.promotion.entity.enums.CouponTypeEnum; +import cn.lili.modules.promotion.entity.enums.PromotionsScopeTypeEnum; import cn.lili.modules.promotion.entity.vos.CouponVO; import cn.lili.modules.promotion.service.CouponService; import com.baomidou.mybatisplus.core.metadata.IPage; -import org.apache.rocketmq.spring.core.RocketMQTemplate; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -34,15 +33,6 @@ class CouponTest { @Autowired private CouponService couponService; - @Autowired - private GoodsSkuService goodsSkuService; - - @Autowired - private RocketMQTemplate rocketMQTemplate; - - @Autowired - private RocketmqCustomProperties rocketmqCustomProperties; - @Test void addCoupon() { CouponVO couponVO = new CouponVO(); @@ -50,7 +40,6 @@ class CouponTest { couponVO.setCouponType(CouponTypeEnum.DISCOUNT.name()); couponVO.setDescription(couponVO.getCouponName() + " are expensive"); couponVO.setGetType(CouponGetEnum.FREE.name()); - couponVO.setPromotionStatus(PromotionStatusEnum.NEW.name()); // couponVO.setStoreId("0"); // couponVO.setStoreName("platform"); couponVO.setStoreId("131"); @@ -61,7 +50,7 @@ class CouponTest { // couponVO.setPrice(200D); couponVO.setCouponDiscount(0.1D); - couponVO.setScopeType(CouponScopeTypeEnum.PORTION_GOODS.name()); + couponVO.setScopeType(PromotionsScopeTypeEnum.PORTION_GOODS.name()); couponVO.setScopeId("121"); couponVO.setStartTime(cn.hutool.core.date.DateUtil.parse("2020-11-30 15:58:00")); couponVO.setEndTime(cn.hutool.core.date.DateUtil.parse("2020-12-30 23:50:00")); @@ -82,7 +71,6 @@ class CouponTest { promotionGoods.setTitle(couponVO.getPromotionName()); promotionGoods.setPromotionId(couponVO.getId()); promotionGoods.setQuantity(1000); - promotionGoods.setPromotionStatus(couponVO.getPromotionStatus()); promotionGoods.setPromotionType(PromotionTypeEnum.COUPON.name()); promotionGoodsList.add(promotionGoods); // @@ -99,7 +87,7 @@ class CouponTest { // promotionGoodsList.add(promotionGoods); // couponVO.setPromotionGoodsList(promotionGoodsList); - Assertions.assertNotNull(couponService.add(couponVO)); + Assertions.assertNotNull(couponService.savePromotions(couponVO)); } @Test @@ -110,7 +98,6 @@ class CouponTest { couponVO.setCouponType(CouponTypeEnum.DISCOUNT.name()); couponVO.setDescription(couponVO.getId() + " is expensive"); couponVO.setGetType(CouponGetEnum.FREE.name()); - couponVO.setPromotionStatus(PromotionStatusEnum.START.name()); couponVO.setStoreId("132"); couponVO.setStoreName("联想自营旗舰店"); couponVO.setStoreCommission(99.99D); @@ -119,7 +106,7 @@ class CouponTest { couponVO.setCouponDiscount(10D); couponVO.setPrice(0D); - couponVO.setScopeType(CouponScopeTypeEnum.PORTION_GOODS.name()); + couponVO.setScopeType(PromotionsScopeTypeEnum.PORTION_GOODS.name()); couponVO.setScopeId("134,133"); couponVO.setStartTime(cn.hutool.core.date.DateUtil.parse("2020-11-10 17:01:00")); couponVO.setEndTime(cn.hutool.core.date.DateUtil.parse("2020-11-10 17:10:00")); @@ -144,7 +131,6 @@ class CouponTest { promotionGoods.setStartTime(couponVO.getStartTime()); promotionGoods.setEndTime(couponVO.getEndTime()); promotionGoods.setTitle(couponVO.getPromotionName()); - promotionGoods.setPromotionStatus(couponVO.getPromotionStatus()); promotionGoodsList.add(promotionGoods); promotionGoods = new PromotionGoods(); @@ -160,35 +146,22 @@ class CouponTest { promotionGoods.setStartTime(couponVO.getStartTime()); promotionGoods.setEndTime(couponVO.getEndTime()); promotionGoods.setTitle(couponVO.getPromotionName()); - promotionGoods.setPromotionStatus(couponVO.getPromotionStatus()); promotionGoodsList.add(promotionGoods); couponVO.setPromotionGoodsList(promotionGoodsList); - Assertions.assertNotNull(couponService.updateCoupon(couponVO)); + Assertions.assertTrue(couponService.updatePromotions(couponVO)); } @Test - void searchFromMongo() { + void search() { CouponSearchParams queryParam = new CouponSearchParams(); queryParam.setStoreId(""); PageVO pageVo = new PageVO(); pageVo.setPageNumber(0); pageVo.setPageSize(10); - IPage couponsByPageFromMongo = couponService.getCouponsByPageFromMongo(queryParam, pageVo); - Assertions.assertNotNull(couponsByPageFromMongo); - couponsByPageFromMongo.getRecords().forEach(System.out::println); - } - - @Test - void searchFromMysql() { - CouponSearchParams queryParam = new CouponSearchParams(); - - PageVO pageVo = new PageVO(); - pageVo.setPageNumber(0); - pageVo.setPageSize(10); - IPage coupons = couponService.getCouponsByPage(queryParam, pageVo); - Assertions.assertNotNull(coupons); - coupons.getRecords().forEach(System.out::println); + IPage couponsByPage = couponService.pageFindAll(queryParam, pageVo); + Assertions.assertNotNull(couponsByPage); + couponsByPage.getRecords().forEach(System.out::println); } @Test diff --git a/manager-api/src/test/java/cn/lili/test/promotion/FullDiscountTest.java b/manager-api/src/test/java/cn/lili/test/promotion/FullDiscountTest.java index 174f0a5b..aad4e24c 100644 --- a/manager-api/src/test/java/cn/lili/test/promotion/FullDiscountTest.java +++ b/manager-api/src/test/java/cn/lili/test/promotion/FullDiscountTest.java @@ -1,17 +1,15 @@ package cn.lili.test.promotion; import cn.hutool.core.util.RandomUtil; -import cn.hutool.json.JSONUtil; +import cn.lili.common.enums.PromotionTypeEnum; import cn.lili.common.vo.PageVO; import cn.lili.modules.goods.entity.dos.GoodsSku; import cn.lili.modules.goods.service.GoodsSkuService; +import cn.lili.modules.order.cart.entity.vo.FullDiscountVO; import cn.lili.modules.promotion.entity.dos.FullDiscount; import cn.lili.modules.promotion.entity.dos.PromotionGoods; -import cn.lili.modules.promotion.entity.enums.PromotionStatusEnum; -import cn.lili.common.enums.PromotionTypeEnum; -import cn.lili.modules.promotion.entity.vos.FullDiscountSearchParams; +import cn.lili.modules.promotion.entity.dto.search.FullDiscountSearchParams; import cn.lili.modules.promotion.service.FullDiscountService; -import cn.lili.modules.order.cart.entity.vo.FullDiscountVO; import com.baomidou.mybatisplus.core.metadata.IPage; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; @@ -21,6 +19,7 @@ import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit.jupiter.SpringExtension; import java.util.ArrayList; +import java.util.Collections; import java.util.List; /** @@ -43,11 +42,10 @@ class FullDiscountTest { fullDiscountVO.setStoreId("131"); fullDiscountVO.setStoreName("小米自营旗舰店"); fullDiscountVO.setDescription("full discount test " + RandomUtil.randomNumber()); - fullDiscountVO.setIsFullMinus(true); + fullDiscountVO.setFullMinusFlag(true); fullDiscountVO.setFullMoney(130D); fullDiscountVO.setFullMinus(100D); - fullDiscountVO.setPromotionStatus(PromotionStatusEnum.NEW.name()); - fullDiscountVO.setIsFreeFreight(true); + fullDiscountVO.setFreeFreightFlag(true); fullDiscountVO.setPromotionName("FullDiscount-" + fullDiscountVO.getId()); fullDiscountVO.setTitle("满" + fullDiscountVO.getFullMoney() + "减" + fullDiscountVO.getFullMinus()); @@ -64,17 +62,16 @@ class FullDiscountTest { promotionGoods.setNum(10); promotionGoods.setQuantity(100); promotionGoods.setPromotionId(fullDiscountVO.getId()); - promotionGoods.setPromotionStatus(PromotionStatusEnum.NEW.name()); promotionGoods.setPromotionType(PromotionTypeEnum.FULL_DISCOUNT.name()); promotionGoods.setTitle("满" + fullDiscountVO.getFullMoney() + "减" + fullDiscountVO.getFullMinus()); promotionGoodsLis.add(promotionGoods); fullDiscountVO.setPromotionGoodsList(promotionGoodsLis); - Assertions.assertNotNull(fullDiscountService.addFullDiscount(fullDiscountVO)); + Assertions.assertTrue(fullDiscountService.savePromotions(fullDiscountVO)); } @Test - void searchFromMongo() { + void search() { PageVO pageVo = new PageVO(); pageVo.setPageSize(10); pageVo.setPageNumber(0); @@ -82,12 +79,9 @@ class FullDiscountTest { pageVo.setSort("startTime"); pageVo.setOrder("asc"); - IPage fullDiscountByPageFromMongo = fullDiscountService.getFullDiscountByPageFromMongo(new FullDiscountSearchParams(), null); + IPage fullDiscountByPage = fullDiscountService.pageFindAll(new FullDiscountSearchParams(), null); - Assertions.assertNotNull(fullDiscountByPageFromMongo); - FullDiscount fullDiscount = JSONUtil.toBean(JSONUtil.parseObj(fullDiscountByPageFromMongo.getPages()), FullDiscount.class); - System.out.println(fullDiscount); -// fullDiscountByPageFromMongo.forEach(System.out::println); + Assertions.assertNotNull(fullDiscountByPage); } @Test @@ -97,11 +91,10 @@ class FullDiscountTest { fullDiscountVO.setStoreId("132"); fullDiscountVO.setStoreName("联想自营旗舰店"); fullDiscountVO.setDescription("Not worth"); - fullDiscountVO.setIsFullMinus(true); + fullDiscountVO.setFullMinusFlag(true); fullDiscountVO.setFullMoney(100D); fullDiscountVO.setFullMinus(80D); - fullDiscountVO.setPromotionStatus(PromotionStatusEnum.NEW.name()); - fullDiscountVO.setIsFreeFreight(true); + fullDiscountVO.setFreeFreightFlag(true); fullDiscountVO.setPromotionName("FullDiscount-" + fullDiscountVO.getId()); fullDiscountVO.setTitle("满" + fullDiscountVO.getFullMoney() + "减" + fullDiscountVO.getFullMinus()); @@ -111,7 +104,6 @@ class FullDiscountTest { List promotionGoodsLis = new ArrayList<>(); PromotionGoods promotionGoods = new PromotionGoods(); promotionGoods.setSkuId("134"); - promotionGoods.setPromotionStatus(PromotionStatusEnum.NEW.name()); promotionGoods.setPrice(18000D); promotionGoods.setStartTime(fullDiscountVO.getStartTime()); promotionGoods.setEndTime(fullDiscountVO.getEndTime()); @@ -124,12 +116,12 @@ class FullDiscountTest { promotionGoods.setStoreId("132"); promotionGoodsLis.add(promotionGoods); fullDiscountVO.setPromotionGoodsList(promotionGoodsLis); - Assertions.assertNotNull(fullDiscountService.modifyFullDiscount(fullDiscountVO)); + Assertions.assertTrue(fullDiscountService.updatePromotions(fullDiscountVO)); } @Test void delete() { - Assertions.assertTrue(fullDiscountService.deleteFullDiscount("1325995092947525632")); + Assertions.assertTrue(fullDiscountService.removePromotions(Collections.singletonList("1325995092947525632"))); } diff --git a/manager-api/src/test/java/cn/lili/test/promotion/PromotionPriceTest.java b/manager-api/src/test/java/cn/lili/test/promotion/PromotionPriceTest.java index 0eda72ad..cfdafeb2 100644 --- a/manager-api/src/test/java/cn/lili/test/promotion/PromotionPriceTest.java +++ b/manager-api/src/test/java/cn/lili/test/promotion/PromotionPriceTest.java @@ -1,15 +1,8 @@ package cn.lili.test.promotion; -import cn.hutool.json.JSONUtil; -import cn.lili.common.enums.PromotionTypeEnum; -import cn.lili.common.enums.ResultUtil; -import cn.lili.common.vo.PageVO; -import cn.lili.common.vo.ResultMessage; -import cn.lili.modules.promotion.entity.dto.BasePromotion; -import cn.lili.modules.promotion.entity.dto.PromotionGoodsDTO; +import cn.lili.modules.promotion.entity.dos.BasePromotions; import cn.lili.modules.promotion.service.PromotionGoodsService; import cn.lili.modules.promotion.service.PromotionService; -import com.baomidou.mybatisplus.core.metadata.IPage; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -37,20 +30,10 @@ class PromotionPriceTest { void testSeckillPrice() { Map currentPromotion = promotionService.getCurrentPromotion(); for (Map.Entry entry : currentPromotion.entrySet()) { - BasePromotion promotion = (BasePromotion) entry.getValue(); + BasePromotions promotion = (BasePromotions) entry.getValue(); System.out.println(entry.getKey() + "-" + promotion.getId()); } Assertions.assertTrue(true); } - @Test - void testSeckillPrice1() { - IPage promotionGoods = promotionGoodsServiceService.getCurrentPromotionGoods(PromotionTypeEnum.FULL_DISCOUNT.name(), new PageVO()); - - ResultMessage> data = ResultUtil.data(promotionGoods); - String s = JSONUtil.toJsonStr(data); - System.out.println(s); - Assertions.assertTrue(true); - } - } diff --git a/manager-api/src/test/java/cn/lili/test/promotion/SeckillTest.java b/manager-api/src/test/java/cn/lili/test/promotion/SeckillTest.java index f6ab823c..27788a5b 100644 --- a/manager-api/src/test/java/cn/lili/test/promotion/SeckillTest.java +++ b/manager-api/src/test/java/cn/lili/test/promotion/SeckillTest.java @@ -1,7 +1,7 @@ package cn.lili.test.promotion; import cn.lili.modules.member.service.MemberService; -import cn.lili.modules.promotion.entity.enums.PromotionApplyStatusEnum; +import cn.lili.modules.promotion.entity.enums.PromotionsApplyStatusEnum; import cn.lili.modules.promotion.entity.vos.SeckillApplyVO; import cn.lili.modules.promotion.service.SeckillApplyService; import cn.lili.modules.promotion.service.SeckillService; @@ -60,7 +60,7 @@ class SeckillTest { seckillApplyVO.setSkuId("1387977574860193792"); seckillApplyVO.setOriginalPrice(4000D); seckillApplyVO.setPrice(3600D); - seckillApplyVO.setPromotionApplyStatus(PromotionApplyStatusEnum.APPLY.name()); + seckillApplyVO.setPromotionApplyStatus(PromotionsApplyStatusEnum.APPLY.name()); seckillApplyVO.setQuantity(1); seckillApplyVO.setSalesNum(0); seckillApplyVO.setSeckillId("10000"); @@ -73,7 +73,7 @@ class SeckillTest { seckillApplyVO.setSkuId("1387977574864388096"); seckillApplyVO.setOriginalPrice(4000D); seckillApplyVO.setPrice(3600D); - seckillApplyVO.setPromotionApplyStatus(PromotionApplyStatusEnum.APPLY.name()); + seckillApplyVO.setPromotionApplyStatus(PromotionsApplyStatusEnum.APPLY.name()); seckillApplyVO.setQuantity(1); seckillApplyVO.setSalesNum(0); seckillApplyVO.setSeckillId("10000"); diff --git a/manager-api/src/test/java/cn/lili/test/rocketmq/MsgExtRocketMqTest.java b/manager-api/src/test/java/cn/lili/test/rocketmq/MsgExtRocketMqTest.java index 6096dd97..b33633a4 100644 --- a/manager-api/src/test/java/cn/lili/test/rocketmq/MsgExtRocketMqTest.java +++ b/manager-api/src/test/java/cn/lili/test/rocketmq/MsgExtRocketMqTest.java @@ -1,8 +1,8 @@ package cn.lili.test.rocketmq; -import cn.lili.rocketmq.RocketmqSendCallbackBuilder; -import cn.lili.rocketmq.tags.MqOrderTagsEnum; import cn.lili.common.properties.RocketmqCustomProperties; +import cn.lili.rocketmq.RocketmqSendCallbackBuilder; +import cn.lili.rocketmq.tags.OrderTagsEnum; import org.apache.rocketmq.spring.core.RocketMQTemplate; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; @@ -29,7 +29,7 @@ class MsgExtRocketMqTest { @Test void searchAll() { - String destination = rocketmqCustomProperties.getOrderTopic() + ":" + MqOrderTagsEnum.STATUS_CHANGE.name(); + String destination = rocketmqCustomProperties.getOrderTopic() + ":" + OrderTagsEnum.STATUS_CHANGE.name(); Message message = MessageBuilder.withPayload("Context").build(); rocketMQTemplate.asyncSend(destination, message, RocketmqSendCallbackBuilder.commonCallback()); rocketMQTemplate.send(destination, message); diff --git a/pom.xml b/pom.xml index a81e6fcd..ba666989 100644 --- a/pom.xml +++ b/pom.xml @@ -23,12 +23,12 @@ 1 4.13.40.ALL 5.1.48 - 3.3.1.tmp - 5.5.8 + 3.4.3.4 + 5.7.16 2.0.3.RELEASE 3.0.0 2.9.10 - 1.18.20 + 1.18.22 4.5.18 3.11.1 2.0.1 diff --git a/seller-api/src/main/java/cn/lili/controller/other/distribution/DistributionGoodsStoreController.java b/seller-api/src/main/java/cn/lili/controller/distribution/DistributionGoodsStoreController.java similarity index 98% rename from seller-api/src/main/java/cn/lili/controller/other/distribution/DistributionGoodsStoreController.java rename to seller-api/src/main/java/cn/lili/controller/distribution/DistributionGoodsStoreController.java index 92e90709..9cbb89cb 100644 --- a/seller-api/src/main/java/cn/lili/controller/other/distribution/DistributionGoodsStoreController.java +++ b/seller-api/src/main/java/cn/lili/controller/distribution/DistributionGoodsStoreController.java @@ -1,6 +1,7 @@ -package cn.lili.controller.other.distribution; +package cn.lili.controller.distribution; import cn.lili.common.enums.ResultUtil; +import cn.lili.common.security.OperationalJudgment; import cn.lili.common.security.context.UserContext; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.distribution.entity.dos.DistributionGoods; @@ -9,7 +10,6 @@ import cn.lili.modules.distribution.entity.dto.DistributionGoodsSearchParams; import cn.lili.modules.distribution.entity.vos.DistributionGoodsVO; import cn.lili.modules.distribution.service.DistributionGoodsService; import cn.lili.modules.distribution.service.DistributionSelectedGoodsService; -import cn.lili.common.security.OperationalJudgment; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.Api; diff --git a/seller-api/src/main/java/cn/lili/controller/other/distribution/DistributionOrderStoreController.java b/seller-api/src/main/java/cn/lili/controller/distribution/DistributionOrderStoreController.java similarity index 97% rename from seller-api/src/main/java/cn/lili/controller/other/distribution/DistributionOrderStoreController.java rename to seller-api/src/main/java/cn/lili/controller/distribution/DistributionOrderStoreController.java index e3d97183..6b714ca8 100644 --- a/seller-api/src/main/java/cn/lili/controller/other/distribution/DistributionOrderStoreController.java +++ b/seller-api/src/main/java/cn/lili/controller/distribution/DistributionOrderStoreController.java @@ -1,4 +1,4 @@ -package cn.lili.controller.other.distribution; +package cn.lili.controller.distribution; import cn.lili.common.enums.ResultUtil; import cn.lili.common.security.context.UserContext; diff --git a/seller-api/src/main/java/cn/lili/controller/goods/CategoryParameterGroupStoreController.java b/seller-api/src/main/java/cn/lili/controller/goods/CategoryParameterGroupStoreController.java index 2c377dbf..a7cfd999 100644 --- a/seller-api/src/main/java/cn/lili/controller/goods/CategoryParameterGroupStoreController.java +++ b/seller-api/src/main/java/cn/lili/controller/goods/CategoryParameterGroupStoreController.java @@ -2,7 +2,6 @@ package cn.lili.controller.goods; import cn.lili.modules.goods.entity.vos.ParameterGroupVO; import cn.lili.modules.goods.service.CategoryParameterGroupService; -import cn.lili.modules.goods.service.ParametersService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; diff --git a/seller-api/src/main/java/cn/lili/controller/goods/DraftGoodsStoreController.java b/seller-api/src/main/java/cn/lili/controller/goods/DraftGoodsStoreController.java index 556f6dac..2e3d1c86 100644 --- a/seller-api/src/main/java/cn/lili/controller/goods/DraftGoodsStoreController.java +++ b/seller-api/src/main/java/cn/lili/controller/goods/DraftGoodsStoreController.java @@ -3,6 +3,7 @@ package cn.lili.controller.goods; import cn.lili.common.enums.ResultCode; import cn.lili.common.enums.ResultUtil; import cn.lili.common.exception.ServiceException; +import cn.lili.common.security.OperationalJudgment; import cn.lili.common.security.context.UserContext; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.goods.entity.dos.DraftGoods; @@ -10,7 +11,6 @@ import cn.lili.modules.goods.entity.dto.DraftGoodsDTO; import cn.lili.modules.goods.entity.dto.DraftGoodsSearchParams; import cn.lili.modules.goods.entity.vos.DraftGoodsVO; import cn.lili.modules.goods.service.DraftGoodsService; -import cn.lili.common.security.OperationalJudgment; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; diff --git a/seller-api/src/main/java/cn/lili/controller/goods/GoodsLabelStoreController.java b/seller-api/src/main/java/cn/lili/controller/goods/GoodsLabelStoreController.java index 9baf8ca0..231617b4 100644 --- a/seller-api/src/main/java/cn/lili/controller/goods/GoodsLabelStoreController.java +++ b/seller-api/src/main/java/cn/lili/controller/goods/GoodsLabelStoreController.java @@ -1,12 +1,12 @@ package cn.lili.controller.goods; import cn.lili.common.enums.ResultUtil; +import cn.lili.common.security.OperationalJudgment; import cn.lili.common.security.context.UserContext; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.goods.entity.dos.StoreGoodsLabel; import cn.lili.modules.goods.entity.vos.StoreGoodsLabelVO; import cn.lili.modules.goods.service.StoreGoodsLabelService; -import cn.lili.common.security.OperationalJudgment; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; diff --git a/seller-api/src/main/java/cn/lili/controller/goods/GoodsStoreController.java b/seller-api/src/main/java/cn/lili/controller/goods/GoodsStoreController.java index 4615dcba..5aadb600 100644 --- a/seller-api/src/main/java/cn/lili/controller/goods/GoodsStoreController.java +++ b/seller-api/src/main/java/cn/lili/controller/goods/GoodsStoreController.java @@ -1,6 +1,7 @@ package cn.lili.controller.goods; import cn.lili.common.enums.ResultUtil; +import cn.lili.common.security.OperationalJudgment; import cn.lili.common.security.context.UserContext; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.goods.entity.dos.Goods; @@ -16,7 +17,6 @@ import cn.lili.modules.goods.service.GoodsService; import cn.lili.modules.goods.service.GoodsSkuService; import cn.lili.modules.store.entity.dos.StoreDetail; import cn.lili.modules.store.service.StoreDetailService; -import cn.lili.common.security.OperationalJudgment; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.Api; @@ -84,7 +84,7 @@ public class GoodsStoreController { StoreDetail storeDetail = OperationalJudgment.judgment(storeDetailService.getStoreDetail(storeId)); Integer stockWarnNum = storeDetail.getStockWarning(); goodsSearchParams.setStoreId(storeId); - goodsSearchParams.setQuantity(stockWarnNum); + goodsSearchParams.setLeQuantity(stockWarnNum); goodsSearchParams.setMarketEnable(GoodsStatusEnum.UPPER.name()); IPage goodsSku = goodsSkuService.getGoodsSkuByPage(goodsSearchParams); StockWarningVO stockWarning = new StockWarningVO(stockWarnNum, goodsSku); diff --git a/seller-api/src/main/java/cn/lili/controller/trade/BillStoreController.java b/seller-api/src/main/java/cn/lili/controller/member/BillStoreController.java similarity index 89% rename from seller-api/src/main/java/cn/lili/controller/trade/BillStoreController.java rename to seller-api/src/main/java/cn/lili/controller/member/BillStoreController.java index 88add03f..630882e7 100644 --- a/seller-api/src/main/java/cn/lili/controller/trade/BillStoreController.java +++ b/seller-api/src/main/java/cn/lili/controller/member/BillStoreController.java @@ -1,16 +1,17 @@ -package cn.lili.controller.trade; +package cn.lili.controller.member; import cn.lili.common.context.ThreadContextHolder; import cn.lili.common.enums.ResultUtil; +import cn.lili.common.security.OperationalJudgment; import cn.lili.common.security.context.UserContext; import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.order.order.entity.dos.StoreFlow; +import cn.lili.modules.order.order.service.StoreFlowService; import cn.lili.modules.store.entity.dos.Bill; import cn.lili.modules.store.entity.dto.BillSearchParams; import cn.lili.modules.store.entity.vos.BillListVO; import cn.lili.modules.store.service.BillService; -import cn.lili.common.security.OperationalJudgment; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; @@ -36,6 +37,9 @@ public class BillStoreController { @Autowired private BillService billService; + @Autowired + private StoreFlowService storeFlowService; + @ApiOperation(value = "获取结算单分页") @GetMapping(value = "/getByPage") public ResultMessage> getByPage(BillSearchParams billSearchParams) { @@ -59,7 +63,7 @@ public class BillStoreController { @GetMapping(value = "/{id}/getStoreFlow") public ResultMessage> getStoreFlow(@PathVariable String id, String flowType, PageVO pageVO) { OperationalJudgment.judgment(billService.getById(id)); - return ResultUtil.data(billService.getStoreFlow(id, flowType, pageVO)); + return ResultUtil.data(storeFlowService.getStoreFlow(id, flowType, pageVO)); } @ApiOperation(value = "获取商家分销订单流水分页") @@ -69,7 +73,7 @@ public class BillStoreController { @GetMapping(value = "/{id}/getDistributionFlow") public ResultMessage> getDistributionFlow(@PathVariable String id, PageVO pageVO) { OperationalJudgment.judgment(billService.getById(id)); - return ResultUtil.data(billService.getDistributionFlow(id, pageVO)); + return ResultUtil.data(storeFlowService.getDistributionFlow(id, pageVO)); } @ApiOperation(value = "核对结算单") @@ -81,13 +85,13 @@ public class BillStoreController { return ResultUtil.success(); } - @ApiOperation(value = "下载结算单",produces="application/octet-stream") + @ApiOperation(value = "下载结算单", produces = "application/octet-stream") @ApiImplicitParam(name = "id", value = "结算单ID", required = true, paramType = "path", dataType = "String") @GetMapping(value = "/downLoad/{id}") public void downLoadDeliverExcel(@PathVariable String id) { OperationalJudgment.judgment(billService.getById(id)); HttpServletResponse response = ThreadContextHolder.getHttpResponse(); - billService.download(response,id); + billService.download(response, id); } diff --git a/seller-api/src/main/java/cn/lili/controller/trade/MemberEvaluationStoreController.java b/seller-api/src/main/java/cn/lili/controller/member/MemberEvaluationStoreController.java similarity index 98% rename from seller-api/src/main/java/cn/lili/controller/trade/MemberEvaluationStoreController.java rename to seller-api/src/main/java/cn/lili/controller/member/MemberEvaluationStoreController.java index db07c545..007a348a 100644 --- a/seller-api/src/main/java/cn/lili/controller/trade/MemberEvaluationStoreController.java +++ b/seller-api/src/main/java/cn/lili/controller/member/MemberEvaluationStoreController.java @@ -1,13 +1,13 @@ -package cn.lili.controller.trade; +package cn.lili.controller.member; import cn.lili.common.enums.ResultUtil; +import cn.lili.common.security.OperationalJudgment; import cn.lili.common.security.context.UserContext; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.member.entity.dto.EvaluationQueryParams; import cn.lili.modules.member.entity.vo.MemberEvaluationListVO; import cn.lili.modules.member.entity.vo.MemberEvaluationVO; import cn.lili.modules.member.service.MemberEvaluationService; -import cn.lili.common.security.OperationalJudgment; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; diff --git a/seller-api/src/main/java/cn/lili/controller/settings/StoreMessageController.java b/seller-api/src/main/java/cn/lili/controller/message/StoreMessageController.java similarity index 99% rename from seller-api/src/main/java/cn/lili/controller/settings/StoreMessageController.java rename to seller-api/src/main/java/cn/lili/controller/message/StoreMessageController.java index 5f2fffab..bac31ad2 100644 --- a/seller-api/src/main/java/cn/lili/controller/settings/StoreMessageController.java +++ b/seller-api/src/main/java/cn/lili/controller/message/StoreMessageController.java @@ -1,7 +1,8 @@ -package cn.lili.controller.settings; +package cn.lili.controller.message; import cn.lili.common.enums.ResultUtil; +import cn.lili.common.security.OperationalJudgment; import cn.lili.common.security.context.UserContext; import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; @@ -9,7 +10,6 @@ import cn.lili.modules.message.entity.dos.StoreMessage; import cn.lili.modules.message.entity.enums.MessageStatusEnum; import cn.lili.modules.message.entity.vos.StoreMessageQueryVO; import cn.lili.modules.message.service.StoreMessageService; -import cn.lili.common.security.OperationalJudgment; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; diff --git a/seller-api/src/main/java/cn/lili/controller/trade/AfterSaleStoreController.java b/seller-api/src/main/java/cn/lili/controller/order/AfterSaleStoreController.java similarity index 94% rename from seller-api/src/main/java/cn/lili/controller/trade/AfterSaleStoreController.java rename to seller-api/src/main/java/cn/lili/controller/order/AfterSaleStoreController.java index 8ab2c6df..e2d8c5d2 100644 --- a/seller-api/src/main/java/cn/lili/controller/trade/AfterSaleStoreController.java +++ b/seller-api/src/main/java/cn/lili/controller/order/AfterSaleStoreController.java @@ -1,15 +1,15 @@ -package cn.lili.controller.trade; +package cn.lili.controller.order; import cn.lili.common.enums.ResultUtil; +import cn.lili.common.security.OperationalJudgment; import cn.lili.common.security.context.UserContext; import cn.lili.common.vo.ResultMessage; -import cn.lili.modules.order.order.entity.dos.AfterSale; -import cn.lili.modules.order.order.entity.vo.AfterSaleSearchParams; -import cn.lili.modules.order.order.entity.vo.AfterSaleVO; -import cn.lili.modules.order.order.service.AfterSaleService; +import cn.lili.modules.order.aftersale.entity.dos.AfterSale; +import cn.lili.modules.order.aftersale.entity.vo.AfterSaleSearchParams; +import cn.lili.modules.order.aftersale.entity.vo.AfterSaleVO; +import cn.lili.modules.order.aftersale.service.AfterSaleService; import cn.lili.modules.store.entity.dto.StoreAfterSaleAddressDTO; import cn.lili.modules.system.entity.vo.Traces; -import cn.lili.common.security.OperationalJudgment; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; diff --git a/seller-api/src/main/java/cn/lili/controller/trade/OrderComplaintStoreController.java b/seller-api/src/main/java/cn/lili/controller/order/OrderComplaintStoreController.java similarity index 99% rename from seller-api/src/main/java/cn/lili/controller/trade/OrderComplaintStoreController.java rename to seller-api/src/main/java/cn/lili/controller/order/OrderComplaintStoreController.java index b2ed9a92..68c34028 100644 --- a/seller-api/src/main/java/cn/lili/controller/trade/OrderComplaintStoreController.java +++ b/seller-api/src/main/java/cn/lili/controller/order/OrderComplaintStoreController.java @@ -1,7 +1,8 @@ -package cn.lili.controller.trade; +package cn.lili.controller.order; import cn.lili.common.enums.ResultUtil; import cn.lili.common.security.AuthUser; +import cn.lili.common.security.OperationalJudgment; import cn.lili.common.security.context.UserContext; import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; @@ -10,7 +11,6 @@ import cn.lili.modules.order.order.entity.enums.CommunicationOwnerEnum; import cn.lili.modules.order.order.entity.vo.*; import cn.lili.modules.order.order.service.OrderComplaintCommunicationService; import cn.lili.modules.order.order.service.OrderComplaintService; -import cn.lili.common.security.OperationalJudgment; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; diff --git a/seller-api/src/main/java/cn/lili/controller/trade/OrderLogStoreController.java b/seller-api/src/main/java/cn/lili/controller/order/OrderLogStoreController.java similarity index 97% rename from seller-api/src/main/java/cn/lili/controller/trade/OrderLogStoreController.java rename to seller-api/src/main/java/cn/lili/controller/order/OrderLogStoreController.java index a3e1aa41..36d9865e 100644 --- a/seller-api/src/main/java/cn/lili/controller/trade/OrderLogStoreController.java +++ b/seller-api/src/main/java/cn/lili/controller/order/OrderLogStoreController.java @@ -1,11 +1,11 @@ -package cn.lili.controller.trade; +package cn.lili.controller.order; import cn.lili.common.enums.ResultUtil; +import cn.lili.common.security.OperationalJudgment; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.order.order.service.OrderService; import cn.lili.modules.order.trade.entity.dos.OrderLog; import cn.lili.modules.order.trade.service.OrderLogService; -import cn.lili.common.security.OperationalJudgment; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; diff --git a/seller-api/src/main/java/cn/lili/controller/trade/OrderStoreController.java b/seller-api/src/main/java/cn/lili/controller/order/OrderStoreController.java similarity index 98% rename from seller-api/src/main/java/cn/lili/controller/trade/OrderStoreController.java rename to seller-api/src/main/java/cn/lili/controller/order/OrderStoreController.java index 5fd12d49..f2c5c0f2 100644 --- a/seller-api/src/main/java/cn/lili/controller/trade/OrderStoreController.java +++ b/seller-api/src/main/java/cn/lili/controller/order/OrderStoreController.java @@ -1,19 +1,19 @@ -package cn.lili.controller.trade; +package cn.lili.controller.order; import cn.lili.common.context.ThreadContextHolder; import cn.lili.common.enums.ResultCode; import cn.lili.common.enums.ResultUtil; +import cn.lili.common.security.OperationalJudgment; import cn.lili.common.security.context.UserContext; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.member.entity.dto.MemberAddressDTO; +import cn.lili.modules.member.service.StoreLogisticsService; import cn.lili.modules.order.order.entity.dto.OrderExportDTO; import cn.lili.modules.order.order.entity.dto.OrderSearchParams; import cn.lili.modules.order.order.entity.vo.OrderDetailVO; import cn.lili.modules.order.order.entity.vo.OrderSimpleVO; import cn.lili.modules.order.order.service.OrderPriceService; import cn.lili.modules.order.order.service.OrderService; -import cn.lili.modules.system.service.StoreLogisticsService; -import cn.lili.common.security.OperationalJudgment; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; diff --git a/seller-api/src/main/java/cn/lili/controller/trade/ReceiptStoreController.java b/seller-api/src/main/java/cn/lili/controller/order/ReceiptStoreController.java similarity index 98% rename from seller-api/src/main/java/cn/lili/controller/trade/ReceiptStoreController.java rename to seller-api/src/main/java/cn/lili/controller/order/ReceiptStoreController.java index 59c51be6..25c0e45f 100644 --- a/seller-api/src/main/java/cn/lili/controller/trade/ReceiptStoreController.java +++ b/seller-api/src/main/java/cn/lili/controller/order/ReceiptStoreController.java @@ -1,6 +1,7 @@ -package cn.lili.controller.trade; +package cn.lili.controller.order; import cn.lili.common.enums.ResultUtil; +import cn.lili.common.security.OperationalJudgment; import cn.lili.common.security.context.UserContext; import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; @@ -9,7 +10,6 @@ import cn.lili.modules.order.order.entity.dto.OrderReceiptDTO; import cn.lili.modules.order.order.entity.dto.ReceiptSearchParams; import cn.lili.modules.order.order.service.OrderService; import cn.lili.modules.order.order.service.ReceiptService; -import cn.lili.common.security.OperationalJudgment; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; diff --git a/seller-api/src/main/java/cn/lili/controller/other/LogisticsStoreController.java b/seller-api/src/main/java/cn/lili/controller/other/LogisticsStoreController.java index 04a5cf8c..50f72a53 100644 --- a/seller-api/src/main/java/cn/lili/controller/other/LogisticsStoreController.java +++ b/seller-api/src/main/java/cn/lili/controller/other/LogisticsStoreController.java @@ -4,9 +4,9 @@ package cn.lili.controller.other; import cn.lili.common.enums.ResultUtil; import cn.lili.common.security.context.UserContext; import cn.lili.common.vo.ResultMessage; +import cn.lili.modules.member.service.StoreLogisticsService; import cn.lili.modules.store.entity.dos.StoreLogistics; import cn.lili.modules.system.entity.vo.StoreLogisticsVO; -import cn.lili.modules.system.service.StoreLogisticsService; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; diff --git a/seller-api/src/main/java/cn/lili/controller/other/broadcast/StudioStoreController.java b/seller-api/src/main/java/cn/lili/controller/other/broadcast/StudioStoreController.java index 067c7fbd..7fcba96b 100644 --- a/seller-api/src/main/java/cn/lili/controller/other/broadcast/StudioStoreController.java +++ b/seller-api/src/main/java/cn/lili/controller/other/broadcast/StudioStoreController.java @@ -3,13 +3,13 @@ package cn.lili.controller.other.broadcast; import cn.lili.common.enums.ResultCode; import cn.lili.common.enums.ResultUtil; import cn.lili.common.exception.ServiceException; +import cn.lili.common.security.OperationalJudgment; import cn.lili.common.security.context.UserContext; import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.goods.entity.dos.Studio; import cn.lili.modules.goods.entity.vos.StudioVO; import cn.lili.modules.goods.service.StudioService; -import cn.lili.common.security.OperationalJudgment; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; diff --git a/seller-api/src/main/java/cn/lili/controller/passport/StorePassportController.java b/seller-api/src/main/java/cn/lili/controller/passport/StorePassportController.java index 4513b137..e6cc7aa8 100644 --- a/seller-api/src/main/java/cn/lili/controller/passport/StorePassportController.java +++ b/seller-api/src/main/java/cn/lili/controller/passport/StorePassportController.java @@ -8,7 +8,7 @@ import cn.lili.common.security.enums.UserEnums; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.member.entity.dos.Member; import cn.lili.modules.member.service.MemberService; -import cn.lili.modules.verification.enums.VerificationEnums; +import cn.lili.modules.verification.entity.enums.VerificationEnums; import cn.lili.modules.verification.service.VerificationService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; diff --git a/seller-api/src/main/java/cn/lili/controller/promotion/CouponStoreController.java b/seller-api/src/main/java/cn/lili/controller/promotion/CouponStoreController.java index 3270da52..90844293 100644 --- a/seller-api/src/main/java/cn/lili/controller/promotion/CouponStoreController.java +++ b/seller-api/src/main/java/cn/lili/controller/promotion/CouponStoreController.java @@ -4,15 +4,14 @@ import cn.lili.common.enums.ResultCode; import cn.lili.common.enums.ResultUtil; import cn.lili.common.exception.ServiceException; import cn.lili.common.security.AuthUser; +import cn.lili.common.security.OperationalJudgment; import cn.lili.common.security.context.UserContext; import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.promotion.entity.dos.Coupon; -import cn.lili.modules.promotion.entity.enums.PromotionStatusEnum; -import cn.lili.modules.promotion.entity.vos.CouponSearchParams; +import cn.lili.modules.promotion.entity.dto.search.CouponSearchParams; import cn.lili.modules.promotion.entity.vos.CouponVO; import cn.lili.modules.promotion.service.CouponService; -import cn.lili.common.security.OperationalJudgment; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.Api; @@ -45,14 +44,14 @@ public class CouponStoreController { page.setNotConvert(true); String storeId = Objects.requireNonNull(UserContext.getCurrentUser()).getStoreId(); queryParam.setStoreId(storeId); - IPage coupons = couponService.getCouponsByPageFromMongo(queryParam, page); + IPage coupons = couponService.pageVOFindAll(queryParam, page); return ResultUtil.data(coupons); } @ApiOperation(value = "获取优惠券详情") @GetMapping("/{couponId}") public ResultMessage getCouponList(@PathVariable String couponId) { - CouponVO coupon = OperationalJudgment.judgment(couponService.getCouponDetailFromMongo(couponId)); + CouponVO coupon = OperationalJudgment.judgment(couponService.getDetail(couponId)); return ResultUtil.data(coupon); } @@ -62,20 +61,23 @@ public class CouponStoreController { AuthUser currentUser = Objects.requireNonNull(UserContext.getCurrentUser()); couponVO.setStoreId(currentUser.getStoreId()); couponVO.setStoreName(currentUser.getStoreName()); - couponService.add(couponVO); - return ResultUtil.data(couponVO); + if (couponService.savePromotions(couponVO)) { + return ResultUtil.data(couponVO); + } + return ResultUtil.error(ResultCode.COUPON_SAVE_ERROR); } @PutMapping(consumes = "application/json", produces = "application/json") @ApiOperation(value = "修改优惠券") public ResultMessage updateCoupon(@RequestBody CouponVO couponVO) { - OperationalJudgment.judgment(couponService.getCouponDetailFromMongo(couponVO.getId())); + OperationalJudgment.judgment(couponService.getById(couponVO.getId())); AuthUser currentUser = Objects.requireNonNull(UserContext.getCurrentUser()); couponVO.setStoreId(currentUser.getStoreId()); couponVO.setStoreName(currentUser.getStoreName()); - couponVO.setPromotionStatus(PromotionStatusEnum.NEW.name()); - CouponVO coupon = couponService.updateCoupon(couponVO); - return ResultUtil.data(coupon); + if (couponService.updatePromotions(couponVO)) { + return ResultUtil.data(couponVO); + } + return ResultUtil.error(ResultCode.COUPON_SAVE_ERROR); } @DeleteMapping(value = "/{ids}") @@ -87,19 +89,16 @@ public class CouponStoreController { queryWrapper.eq(Coupon::getStoreId, storeId); List list = couponService.list(queryWrapper); List filterIds = list.stream().map(Coupon::getId).collect(Collectors.toList()); - for (String id : filterIds) { - couponService.deleteCoupon(id); - } - return ResultUtil.success(); + return couponService.removePromotions(filterIds) ? ResultUtil.success() : ResultUtil.error(ResultCode.COUPON_DELETE_ERROR); } @ApiOperation(value = "修改优惠券状态") @PutMapping("/status") - public ResultMessage updateCouponStatus(String couponIds, String promotionStatus) { + public ResultMessage updateCouponStatus(String couponIds, Long startTime, Long endTime) { AuthUser currentUser = Objects.requireNonNull(UserContext.getCurrentUser()); String[] split = couponIds.split(","); List couponIdList = couponService.list(new LambdaQueryWrapper().in(Coupon::getId, Arrays.asList(split)).eq(Coupon::getStoreId, currentUser.getStoreId())).stream().map(Coupon::getId).collect(Collectors.toList()); - if (couponService.updateCouponStatus(couponIdList, PromotionStatusEnum.valueOf(promotionStatus))) { + if (couponService.updateStatus(couponIdList, startTime, endTime)) { return ResultUtil.success(ResultCode.COUPON_EDIT_STATUS_SUCCESS); } throw new ServiceException(ResultCode.COUPON_EDIT_STATUS_ERROR); diff --git a/seller-api/src/main/java/cn/lili/controller/promotion/FullDiscountStoreController.java b/seller-api/src/main/java/cn/lili/controller/promotion/FullDiscountStoreController.java index 974af737..4a95f6b0 100644 --- a/seller-api/src/main/java/cn/lili/controller/promotion/FullDiscountStoreController.java +++ b/seller-api/src/main/java/cn/lili/controller/promotion/FullDiscountStoreController.java @@ -3,15 +3,14 @@ package cn.lili.controller.promotion; import cn.lili.common.enums.ResultCode; import cn.lili.common.enums.ResultUtil; import cn.lili.common.security.AuthUser; +import cn.lili.common.security.OperationalJudgment; import cn.lili.common.security.context.UserContext; import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.order.cart.entity.vo.FullDiscountVO; import cn.lili.modules.promotion.entity.dos.FullDiscount; -import cn.lili.modules.promotion.entity.enums.PromotionStatusEnum; -import cn.lili.modules.promotion.entity.vos.FullDiscountSearchParams; +import cn.lili.modules.promotion.entity.dto.search.FullDiscountSearchParams; import cn.lili.modules.promotion.service.FullDiscountService; -import cn.lili.common.security.OperationalJudgment; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; @@ -20,6 +19,7 @@ import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import java.util.Collections; import java.util.Objects; /** @@ -42,9 +42,10 @@ public class FullDiscountStoreController { AuthUser currentUser = Objects.requireNonNull(UserContext.getCurrentUser()); fullDiscountVO.setStoreId(currentUser.getStoreId()); fullDiscountVO.setStoreName(currentUser.getStoreName()); - fullDiscountVO.setPromotionStatus(PromotionStatusEnum.NEW.name()); - FullDiscount fullDiscount = fullDiscountService.addFullDiscount(fullDiscountVO); - return ResultUtil.data(fullDiscount); + if (!fullDiscountService.savePromotions(fullDiscountVO)) { + return ResultUtil.error(ResultCode.PINTUAN_ADD_ERROR); + } + return ResultUtil.data(fullDiscountVO); } @ApiOperation(value = "通过id获取") @@ -56,10 +57,10 @@ public class FullDiscountStoreController { @ApiOperation(value = "根据条件分页查询满优惠活动") @GetMapping - public ResultMessage> getFullDiscountByPage(FullDiscountSearchParams searchParams, PageVO page) { + public ResultMessage> getFullDiscountByPage(FullDiscountSearchParams searchParams, PageVO page) { String storeId = Objects.requireNonNull(UserContext.getCurrentUser()).getStoreId(); searchParams.setStoreId(storeId); - IPage fullDiscountByPage = fullDiscountService.getFullDiscountByPageFromMongo(searchParams, page); + IPage fullDiscountByPage = fullDiscountService.pageFindAll(searchParams, page); return ResultUtil.data(fullDiscountByPage); } @@ -70,15 +71,17 @@ public class FullDiscountStoreController { AuthUser currentUser = Objects.requireNonNull(UserContext.getCurrentUser()); fullDiscountVO.setStoreId(currentUser.getStoreId()); fullDiscountVO.setStoreName(currentUser.getStoreName()); - fullDiscountService.modifyFullDiscount(fullDiscountVO); + if (!fullDiscountService.updatePromotions(fullDiscountVO)) { + return ResultUtil.error(ResultCode.PINTUAN_EDIT_ERROR); + } return ResultUtil.success(ResultCode.FULL_DISCOUNT_EDIT_SUCCESS); } @ApiOperation(value = "删除满优惠活动") @DeleteMapping("/{id}") public ResultMessage deleteFullDiscount(@PathVariable String id) { - OperationalJudgment.judgment(fullDiscountService.getFullDiscount(id)); - fullDiscountService.deleteFullDiscount(id); + OperationalJudgment.judgment(fullDiscountService.getById(id)); + fullDiscountService.removePromotions(Collections.singletonList(id)); return ResultUtil.success(ResultCode.FULL_DISCOUNT_EDIT_DELETE); } @@ -88,10 +91,10 @@ public class FullDiscountStoreController { @ApiImplicitParam(name = "id", value = "满额活动ID", required = true, paramType = "path"), @ApiImplicitParam(name = "promotionStatus", value = "满额活动状态", required = true, paramType = "path") }) - @PutMapping("/status/{id}/{promotionStatus}") - public ResultMessage updateCouponStatus(@PathVariable String id, @PathVariable String promotionStatus) { + @PutMapping("/status/{id}") + public ResultMessage updateCouponStatus(@PathVariable String id, Long startTime, Long endTime) { OperationalJudgment.judgment(fullDiscountService.getFullDiscount(id)); - if (fullDiscountService.updateFullDiscountStatus(id, PromotionStatusEnum.valueOf(promotionStatus))) { + if (fullDiscountService.updateStatus(Collections.singletonList(id), startTime, endTime)) { return ResultUtil.success(ResultCode.SUCCESS); } return ResultUtil.error(ResultCode.ERROR); diff --git a/seller-api/src/main/java/cn/lili/controller/promotion/PintuanStoreController.java b/seller-api/src/main/java/cn/lili/controller/promotion/PintuanStoreController.java index a676c1ea..80b369bd 100644 --- a/seller-api/src/main/java/cn/lili/controller/promotion/PintuanStoreController.java +++ b/seller-api/src/main/java/cn/lili/controller/promotion/PintuanStoreController.java @@ -1,20 +1,22 @@ package cn.lili.controller.promotion; +import cn.hutool.core.util.ArrayUtil; import cn.lili.common.enums.PromotionTypeEnum; import cn.lili.common.enums.ResultCode; import cn.lili.common.enums.ResultUtil; import cn.lili.common.exception.ServiceException; import cn.lili.common.security.AuthUser; +import cn.lili.common.security.OperationalJudgment; import cn.lili.common.security.context.UserContext; import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; -import cn.lili.modules.promotion.entity.dto.PromotionGoodsDTO; -import cn.lili.modules.promotion.entity.vos.PintuanSearchParams; +import cn.lili.modules.promotion.entity.dos.Pintuan; +import cn.lili.modules.promotion.entity.dos.PromotionGoods; +import cn.lili.modules.promotion.entity.dto.search.PintuanSearchParams; +import cn.lili.modules.promotion.entity.dto.search.PromotionGoodsSearchParams; import cn.lili.modules.promotion.entity.vos.PintuanVO; -import cn.lili.modules.promotion.entity.vos.PromotionGoodsSearchParams; import cn.lili.modules.promotion.service.PintuanService; import cn.lili.modules.promotion.service.PromotionGoodsService; -import cn.lili.common.security.OperationalJudgment; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -22,8 +24,10 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; -import java.util.Date; +import java.util.Collections; +import java.util.List; import java.util.Objects; +import java.util.stream.Collectors; /** * 店铺端,拼团管理接口 @@ -44,30 +48,28 @@ public class PintuanStoreController { @GetMapping @ApiOperation(value = "根据条件分页查询拼团活动列表") - public ResultMessage> getPintuanByPage(PintuanSearchParams queryParam, PageVO pageVo) { + public ResultMessage> getPintuanByPage(PintuanSearchParams queryParam, PageVO pageVo) { AuthUser currentUser = Objects.requireNonNull(UserContext.getCurrentUser()); queryParam.setStoreId(currentUser.getStoreId()); - IPage pintuanByPageFromMongo = pintuanService.getPintuanByPageFromMongo(queryParam, pageVo); - return ResultUtil.data(pintuanByPageFromMongo); + return ResultUtil.data(pintuanService.pageFindAll(queryParam, pageVo)); } @GetMapping(value = "/{id}") @ApiOperation(value = "通过id获取") public ResultMessage get(@PathVariable String id) { - PintuanVO pintuan = OperationalJudgment.judgment(pintuanService.getPintuanByIdFromMongo(id)); + PintuanVO pintuan = OperationalJudgment.judgment(pintuanService.getPintuanVO(id)); return ResultUtil.data(pintuan); } @GetMapping("/goods/{pintuanId}") @ApiOperation(value = "根据条件分页查询拼团活动商品列表") - public ResultMessage> getPintuanGoodsByPage(@PathVariable String pintuanId, PageVO pageVo) { + public ResultMessage> getPintuanGoodsByPage(@PathVariable String pintuanId, PageVO pageVo) { AuthUser currentUser = Objects.requireNonNull(UserContext.getCurrentUser()); PromotionGoodsSearchParams searchParams = new PromotionGoodsSearchParams(); searchParams.setStoreId(currentUser.getStoreId()); searchParams.setPromotionId(pintuanId); searchParams.setPromotionType(PromotionTypeEnum.PINTUAN.name()); - IPage promotionGoods = promotionGoodsService.getPromotionGoods(searchParams, pageVo); - return ResultUtil.data(promotionGoods); + return ResultUtil.data(promotionGoodsService.pageFindAll(searchParams, pageVo)); } @PostMapping(consumes = "application/json", produces = "application/json") @@ -76,7 +78,7 @@ public class PintuanStoreController { AuthUser currentUser = Objects.requireNonNull(UserContext.getCurrentUser()); pintuan.setStoreId(currentUser.getStoreId()); pintuan.setStoreName(currentUser.getStoreName()); - if (pintuanService.addPintuan(pintuan)) { + if (pintuanService.savePromotions(pintuan)) { return ResultUtil.success(ResultCode.PINTUAN_ADD_SUCCESS); } throw new ServiceException(ResultCode.PINTUAN_ADD_ERROR); @@ -85,42 +87,38 @@ public class PintuanStoreController { @PutMapping(consumes = "application/json", produces = "application/json") @ApiOperation(value = "修改拼团活动") public ResultMessage editPintuan(@RequestBody @Validated PintuanVO pintuan) { - OperationalJudgment.judgment(pintuanService.getPintuanByIdFromMongo(pintuan.getId())); + OperationalJudgment.judgment(pintuanService.getById(pintuan.getId())); AuthUser currentUser = Objects.requireNonNull(UserContext.getCurrentUser()); pintuan.setStoreId(currentUser.getStoreId()); pintuan.setStoreName(currentUser.getStoreName()); - if (pintuanService.modifyPintuan(pintuan)) { + if (pintuan.getPromotionGoodsList() != null && !pintuan.getPromotionGoodsList().isEmpty()) { + List skuIds = pintuan.getPromotionGoodsList().stream().map(PromotionGoods::getSkuId).collect(Collectors.toList()); + pintuan.setScopeId(ArrayUtil.join(skuIds.toArray(), ",")); + } else { + pintuan.setScopeId(null); + } + if (pintuanService.updatePromotions(pintuan)) { return ResultUtil.success(ResultCode.PINTUAN_EDIT_SUCCESS); } throw new ServiceException(ResultCode.PINTUAN_EDIT_ERROR); } - @PutMapping("/open/{pintuanId}") - @ApiOperation(value = "手动开启拼团活动") + @PutMapping("/status/{pintuanId}") + @ApiOperation(value = "操作拼团活动状态") public ResultMessage openPintuan(@PathVariable String pintuanId, Long startTime, Long endTime) { - OperationalJudgment.judgment(pintuanService.getPintuanByIdFromMongo(pintuanId)); - if (pintuanService.openPintuan(pintuanId, new Date(startTime), new Date(endTime))) { + OperationalJudgment.judgment(pintuanService.getById(pintuanId)); + if (pintuanService.updateStatus(Collections.singletonList(pintuanId), startTime, endTime)) { return ResultUtil.success(ResultCode.PINTUAN_MANUAL_OPEN_SUCCESS); } throw new ServiceException(ResultCode.PINTUAN_MANUAL_OPEN_ERROR); } - @PutMapping("/close/{pintuanId}") - @ApiOperation(value = "手动关闭拼团活动") - public ResultMessage closePintuan(@PathVariable String pintuanId) { - OperationalJudgment.judgment(pintuanService.getPintuanByIdFromMongo(pintuanId)); - if (pintuanService.closePintuan(pintuanId)) { - return ResultUtil.success(ResultCode.PINTUAN_MANUAL_CLOSE_SUCCESS); - } - throw new ServiceException(ResultCode.PINTUAN_MANUAL_CLOSE_ERROR); - } - @DeleteMapping("/{pintuanId}") @ApiOperation(value = "手动删除拼团活动") public ResultMessage deletePintuan(@PathVariable String pintuanId) { - OperationalJudgment.judgment(pintuanService.getPintuanByIdFromMongo(pintuanId)); - if (pintuanService.deletePintuan(pintuanId)) { + OperationalJudgment.judgment(pintuanService.getById(pintuanId)); + if (pintuanService.removePromotions(Collections.singletonList(pintuanId))) { return ResultUtil.success(ResultCode.PINTUAN_DELETE_SUCCESS); } throw new ServiceException(ResultCode.PINTUAN_DELETE_ERROR); diff --git a/seller-api/src/main/java/cn/lili/controller/promotion/SeckillStoreController.java b/seller-api/src/main/java/cn/lili/controller/promotion/SeckillStoreController.java index 14f32197..550c6a23 100644 --- a/seller-api/src/main/java/cn/lili/controller/promotion/SeckillStoreController.java +++ b/seller-api/src/main/java/cn/lili/controller/promotion/SeckillStoreController.java @@ -1,17 +1,16 @@ package cn.lili.controller.promotion; import cn.lili.common.enums.ResultUtil; +import cn.lili.common.security.OperationalJudgment; import cn.lili.common.security.context.UserContext; import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.promotion.entity.dos.Seckill; import cn.lili.modules.promotion.entity.dos.SeckillApply; +import cn.lili.modules.promotion.entity.dto.search.SeckillSearchParams; import cn.lili.modules.promotion.entity.vos.SeckillApplyVO; -import cn.lili.modules.promotion.entity.vos.SeckillSearchParams; -import cn.lili.modules.promotion.entity.vos.SeckillVO; import cn.lili.modules.promotion.service.SeckillApplyService; import cn.lili.modules.promotion.service.SeckillService; -import cn.lili.common.security.OperationalJudgment; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -38,8 +37,8 @@ public class SeckillStoreController { @GetMapping @ApiOperation(value = "获取秒杀活动列表") - public ResultMessage> getSeckillPage(SeckillSearchParams queryParam, PageVO pageVo) { - IPage seckillPage = seckillService.getSeckillByPageFromMongo(queryParam, pageVo); + public ResultMessage> getSeckillPage(SeckillSearchParams queryParam, PageVO pageVo) { + IPage seckillPage = seckillService.pageFindAll(queryParam, pageVo); return ResultUtil.data(seckillPage); } @@ -48,14 +47,14 @@ public class SeckillStoreController { public ResultMessage> getSeckillApplyPage(SeckillSearchParams queryParam, PageVO pageVo) { String storeId = Objects.requireNonNull(UserContext.getCurrentUser()).getStoreId(); queryParam.setStoreId(storeId); - IPage seckillPage = seckillApplyService.getSeckillApplyFromMongo(queryParam, pageVo); + IPage seckillPage = seckillApplyService.getSeckillApplyPage(queryParam, pageVo); return ResultUtil.data(seckillPage); } @GetMapping("/{seckillId}") - @ApiOperation(value = "获取秒杀活动") + @ApiOperation(value = "获取秒杀活动信息") public ResultMessage getSeckill(@PathVariable String seckillId) { - return ResultUtil.data(seckillService.getSeckillByIdFromMongo(seckillId)); + return ResultUtil.data(seckillService.getById(seckillId)); } @GetMapping("/apply/{seckillApplyId}") diff --git a/seller-api/src/main/java/cn/lili/controller/settings/FreightTemplateStoreController.java b/seller-api/src/main/java/cn/lili/controller/settings/FreightTemplateStoreController.java index 0232f21f..f84c4ecf 100644 --- a/seller-api/src/main/java/cn/lili/controller/settings/FreightTemplateStoreController.java +++ b/seller-api/src/main/java/cn/lili/controller/settings/FreightTemplateStoreController.java @@ -1,11 +1,11 @@ package cn.lili.controller.settings; import cn.lili.common.enums.ResultUtil; +import cn.lili.common.security.OperationalJudgment; import cn.lili.common.security.context.UserContext; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.store.entity.vos.FreightTemplateVO; import cn.lili.modules.store.service.FreightTemplateService; -import cn.lili.common.security.OperationalJudgment; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; diff --git a/seller-api/src/main/java/cn/lili/controller/settings/StoreAddressController.java b/seller-api/src/main/java/cn/lili/controller/settings/StoreAddressController.java index 85d5d5d2..684d055b 100644 --- a/seller-api/src/main/java/cn/lili/controller/settings/StoreAddressController.java +++ b/seller-api/src/main/java/cn/lili/controller/settings/StoreAddressController.java @@ -2,12 +2,12 @@ package cn.lili.controller.settings; import cn.lili.common.enums.ResultUtil; +import cn.lili.common.security.OperationalJudgment; import cn.lili.common.security.context.UserContext; import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.store.entity.dos.StoreAddress; import cn.lili.modules.store.service.StoreAddressService; -import cn.lili.common.security.OperationalJudgment; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; diff --git a/seller-api/src/main/java/cn/lili/controller/settings/StoreSettingsController.java b/seller-api/src/main/java/cn/lili/controller/settings/StoreSettingsController.java index 15f1fc07..3287d59d 100644 --- a/seller-api/src/main/java/cn/lili/controller/settings/StoreSettingsController.java +++ b/seller-api/src/main/java/cn/lili/controller/settings/StoreSettingsController.java @@ -56,6 +56,14 @@ public class StoreSettingsController { return ResultUtil.data(result); } + @ApiOperation(value = "修改商家设置") + @PutMapping("/merchantEuid") + public ResultMessage edit(String merchantEuid) { + //修改UDESK设置 + Boolean result = storeDetailService.editMerchantEuid(merchantEuid); + return ResultUtil.data(result); + } + @ApiOperation(value = "修改店铺库存预警数量") @ApiImplicitParam(name = "stockWarning", value = "库存预警数量", required = true, dataType = "Integer", paramType = "query") @PutMapping("/updateStockWarning") diff --git a/seller-api/src/main/java/cn/lili/controller/statistics/GoodsStatisticsStoreController.java b/seller-api/src/main/java/cn/lili/controller/statistics/GoodsStatisticsStoreController.java index e89475e7..75159dd0 100644 --- a/seller-api/src/main/java/cn/lili/controller/statistics/GoodsStatisticsStoreController.java +++ b/seller-api/src/main/java/cn/lili/controller/statistics/GoodsStatisticsStoreController.java @@ -5,7 +5,7 @@ import cn.lili.common.security.context.UserContext; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.statistics.entity.dto.GoodsStatisticsQueryParam; import cn.lili.modules.statistics.entity.vo.GoodsStatisticsDataVO; -import cn.lili.modules.statistics.service.GoodsStatisticsDataService; +import cn.lili.modules.statistics.service.StoreFlowStatisticsService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; @@ -31,13 +31,13 @@ public class GoodsStatisticsStoreController { * 商品统计 */ @Autowired - private GoodsStatisticsDataService goodsStatisticsDataService; + private StoreFlowStatisticsService storeFlowStatisticsService; @ApiOperation(value = "获取统计列表,排行前一百的数据") @GetMapping public ResultMessage> getByPage(GoodsStatisticsQueryParam statisticsQueryParam) { String storeId = Objects.requireNonNull(UserContext.getCurrentUser()).getStoreId(); statisticsQueryParam.setStoreId(storeId); - return ResultUtil.data(goodsStatisticsDataService.getGoodsStatisticsData(statisticsQueryParam, 100)); + return ResultUtil.data(storeFlowStatisticsService.getGoodsStatisticsData(statisticsQueryParam, 100)); } } diff --git a/seller-api/src/main/java/cn/lili/controller/statistics/IndexStatisticsStoreController.java b/seller-api/src/main/java/cn/lili/controller/statistics/IndexStatisticsStoreController.java index 8187062b..32f11e59 100644 --- a/seller-api/src/main/java/cn/lili/controller/statistics/IndexStatisticsStoreController.java +++ b/seller-api/src/main/java/cn/lili/controller/statistics/IndexStatisticsStoreController.java @@ -6,8 +6,8 @@ import cn.lili.common.vo.ResultMessage; import cn.lili.modules.statistics.entity.dto.GoodsStatisticsQueryParam; import cn.lili.modules.statistics.entity.vo.GoodsStatisticsDataVO; import cn.lili.modules.statistics.entity.vo.StoreIndexStatisticsVO; -import cn.lili.modules.statistics.service.GoodsStatisticsDataService; import cn.lili.modules.statistics.service.IndexStatisticsService; +import cn.lili.modules.statistics.service.StoreFlowStatisticsService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; @@ -33,7 +33,7 @@ public class IndexStatisticsStoreController { * 热卖商品统计 */ @Autowired - private GoodsStatisticsDataService goodsStatisticsDataService; + private StoreFlowStatisticsService storeFlowStatisticsService; /** * 首页统计 */ @@ -45,7 +45,7 @@ public class IndexStatisticsStoreController { public ResultMessage> getByPage(GoodsStatisticsQueryParam statisticsQueryParam) { String storeId = Objects.requireNonNull(UserContext.getCurrentUser()).getStoreId(); statisticsQueryParam.setStoreId(storeId); - return ResultUtil.data(goodsStatisticsDataService.getGoodsStatisticsData(statisticsQueryParam, 100)); + return ResultUtil.data(storeFlowStatisticsService.getGoodsStatisticsData(statisticsQueryParam, 100)); } @ApiOperation(value = "获取首页查询数据") diff --git a/seller-api/src/main/java/cn/lili/controller/statistics/OrderStatisticsStoreController.java b/seller-api/src/main/java/cn/lili/controller/statistics/OrderStatisticsStoreController.java index 1875ac11..2285e9ad 100644 --- a/seller-api/src/main/java/cn/lili/controller/statistics/OrderStatisticsStoreController.java +++ b/seller-api/src/main/java/cn/lili/controller/statistics/OrderStatisticsStoreController.java @@ -4,14 +4,13 @@ import cn.lili.common.enums.ResultUtil; import cn.lili.common.security.context.UserContext; import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; -import cn.lili.modules.order.order.entity.dos.AfterSale; +import cn.lili.modules.order.aftersale.entity.dos.AfterSale; import cn.lili.modules.order.order.entity.vo.OrderSimpleVO; -import cn.lili.modules.order.order.service.AfterSaleService; -import cn.lili.modules.order.order.service.OrderService; import cn.lili.modules.statistics.entity.dto.StatisticsQueryParam; import cn.lili.modules.statistics.entity.vo.OrderOverviewVO; import cn.lili.modules.statistics.entity.vo.OrderStatisticsDataVO; -import cn.lili.modules.statistics.service.OrderStatisticsDataService; +import cn.lili.modules.statistics.service.AfterSaleStatisticsService; +import cn.lili.modules.statistics.service.OrderStatisticsService; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -36,21 +35,16 @@ import java.util.Objects; @RequestMapping("/store/statistics/order") public class OrderStatisticsStoreController { - /** - * 订单 - */ - @Autowired - private OrderService orderService; /** * 售后 */ @Autowired - private AfterSaleService afterSaleService; + private AfterSaleStatisticsService afterSaleStatisticsService; /** * 订单统计 */ @Autowired - private OrderStatisticsDataService orderStatisticsDataService; + private OrderStatisticsService orderStatisticsService; @ApiOperation(value = "订单概览统计") @GetMapping("/overview") @@ -58,7 +52,7 @@ public class OrderStatisticsStoreController { String storeId = Objects.requireNonNull(UserContext.getCurrentUser()).getStoreId(); try { statisticsQueryParam.setStoreId(storeId); - return ResultUtil.data(orderStatisticsDataService.overview(statisticsQueryParam)); + return ResultUtil.data(orderStatisticsService.overview(statisticsQueryParam)); } catch (Exception e) { log.error("订单概览统计错误", e); } @@ -71,7 +65,7 @@ public class OrderStatisticsStoreController { String storeId = Objects.requireNonNull(UserContext.getCurrentUser()).getStoreId(); try { statisticsQueryParam.setStoreId(storeId); - return ResultUtil.data(orderStatisticsDataService.statisticsChart(statisticsQueryParam)); + return ResultUtil.data(orderStatisticsService.statisticsChart(statisticsQueryParam)); } catch (Exception e) { log.error("订单图表统计错误", e); } @@ -85,7 +79,7 @@ public class OrderStatisticsStoreController { String storeId = Objects.requireNonNull(UserContext.getCurrentUser()).getStoreId(); try { statisticsQueryParam.setStoreId(storeId); - return ResultUtil.data(orderService.getStatistics(statisticsQueryParam, pageVO)); + return ResultUtil.data(orderStatisticsService.getStatistics(statisticsQueryParam, pageVO)); } catch (Exception e) { log.error("订单统计错误", e); } @@ -98,6 +92,6 @@ public class OrderStatisticsStoreController { public ResultMessage> refund(StatisticsQueryParam statisticsQueryParam, PageVO pageVO) { String storeId = Objects.requireNonNull(UserContext.getCurrentUser()).getStoreId(); statisticsQueryParam.setStoreId(storeId); - return ResultUtil.data(afterSaleService.getStatistics(statisticsQueryParam, pageVO)); + return ResultUtil.data(afterSaleStatisticsService.getStatistics(statisticsQueryParam, pageVO)); } } diff --git a/seller-api/src/main/java/cn/lili/controller/statistics/ViewStatisticsStoreController.java b/seller-api/src/main/java/cn/lili/controller/statistics/ViewStatisticsStoreController.java index 6ecd7480..dca45408 100644 --- a/seller-api/src/main/java/cn/lili/controller/statistics/ViewStatisticsStoreController.java +++ b/seller-api/src/main/java/cn/lili/controller/statistics/ViewStatisticsStoreController.java @@ -5,7 +5,7 @@ import cn.lili.common.security.context.UserContext; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.statistics.entity.dto.StatisticsQueryParam; import cn.lili.modules.statistics.entity.vo.PlatformViewVO; -import cn.lili.modules.statistics.service.PlatformViewDataService; +import cn.lili.modules.statistics.service.PlatformViewService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; @@ -27,13 +27,13 @@ import java.util.Objects; @RequestMapping("/store/statistics/view") public class ViewStatisticsStoreController { @Autowired - private PlatformViewDataService platformViewDataService; + private PlatformViewService platformViewService; @ApiOperation(value = "流量数据 表单获取") @GetMapping("/list") public ResultMessage> getByPage(StatisticsQueryParam queryParam) { String storeId = Objects.requireNonNull(UserContext.getCurrentUser()).getStoreId(); queryParam.setStoreId(storeId); - return ResultUtil.data(platformViewDataService.list(queryParam)); + return ResultUtil.data(platformViewService.list(queryParam)); } } diff --git a/seller-api/src/main/resources/application.yml b/seller-api/src/main/resources/application.yml index ccbd076a..30690a2a 100644 --- a/seller-api/src/main/resources/application.yml +++ b/seller-api/src/main/resources/application.yml @@ -29,15 +29,6 @@ spring: admin: client: url: http://127.0.0.1:8000 - # mongodb - data: - mongodb: - uri: 127.0.0.1:27017 - database: lilishop - username: root - password: lilishop - authentication-database: admin - # replica-set-name: mongoreplset cache: type: redis # Redis @@ -171,7 +162,6 @@ logging: cn.lili: info # org.hibernate: debug # org.springframework: debug - # org.springframework.data.mongodb.core: debug file: # 指定路径 path: lili-logs