merge branch "master"

This commit is contained in:
paulGao 2021-12-11 17:45:25 +08:00
commit 90e550934d
345 changed files with 3529 additions and 2779 deletions

View File

@ -0,0 +1,2 @@
/** 新增已退货数量 **/
ALTER TABLE li_order_item ADD return_goods_number int DEFAULT 0 COMMENT '退货数量 ';

114
README.md
View File

@ -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)   ![github](https://img.shields.io/github/stars/hongyehuicheng/lilishop.svg?style=social&logo=#181717)
### 🔥 商城介绍 ### 商城介绍
**官网**https://pickmall.cn **官网**https://pickmall.cn
Lilishop商城系统支持商家入驻后端基于SpringBoot 研发,前端使用 Vue、uniapp开发 **系统全端全部代码开源** Lilishop商城系统支持商家入驻后端基于SpringBoot 研发,前端使用 Vue、uniapp开发 **系统全端全部代码开源**
商城前后端分离支持分布式部署各个API独立并且有独立的消费者。 商城前后端分离支持分布式部署支持Docker各个API独立并且有独立的消费者。
商城包含 会员模块、**第三方登录模块**、**第三方支付模块**、**楼层装修模块**、订单模块、商品模块、促销模块、分销模块、文章模块、系统设置模块、流量分析模块和平台运营模块
商城包含各种中间件、搜索引擎、多级缓存、分布式事务、分布式任务调度等支持Docker支持k8s。是一款高性能、支持分布式、支持扩展的商城系统。
### 商城 API/消费者 聚合版 ### 商城 API/消费者 聚合版
api不需要单独部署只需启动一个jar包就可以正常运转 如有需要,可以点击跳转 api不需要单独部署只需启动一个jar包就可以正常运转 如有需要,可以点击跳转
https://gitee.com/beijing_hongye_huicheng/lilishop-simplify https://gitee.com/beijing_hongye_huicheng/lilishop-simplify
### ☃️ 商城 开发/使用/常见问题 帮助文档 ### 商城 开发/使用/常见问题 帮助文档
https://docs.pickmall.cn 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 商城UI 项目下3个文件夹
buyer买家PC端seller商家端manager后台管理端
**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后台管理端 PS手机验证码为 111111
### 💧 演示地址(手机验证码为 111111)
**平台管理端**https://admin-b2b2c.pickmall.cn 账号admin/123456 **平台管理端**https://admin-b2b2c.pickmall.cn 账号admin/123456
@ -72,88 +54,54 @@ https://docs.pickmall.cn
**商城PC页面**https://pc-b2b2c.pickmall.cn **商城PC页面**https://pc-b2b2c.pickmall.cn
**商城移动端(请使浏览器手机模式,或者用手机浏览器打开)**https://m-b2b2c.pickmall.cn **商城 小程序/公众号/APP**:扫描二维码
**商城 小程序/公众号/APP支持ios、android**:扫描二维码
![image-20210511171611793](https://pickmall.cn/assets/imgs/h5-qrcode.png) ![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) **商城数据库**
[点击跳转](https://gitee.com/beijing_hongye_huicheng/docker/tree/master/init/mysql)
##### 下载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代码 这里有与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等需自行打包。
### ⚾️ 功能列表 #### 平台管理端功能
#### 🥎 平台管理端功能
![平台管理端功能](https://pickmall.cn/assets/imgs/other/managerList.jpg) ![平台管理端功能](https://pickmall.cn/assets/imgs/other/managerList.jpg)
#### 🥎 卖家功能 #### 卖家功能
![商家端功能](https://pickmall.cn/assets/imgs/other/storeList.jpg) ![商家端功能](https://pickmall.cn/assets/imgs/other/storeList.jpg)
### 商城前端功能展示
#### 商城移动端
### 🧩 商城前端功能展示
#### ⚽️ 商城移动端
<img src="https://pickmall.cn/assets/imgs/other/app.gif" alt="移动端功能展示" style="zoom:50%;" /> <img src="https://pickmall.cn/assets/imgs/other/app.gif" alt="移动端功能展示" style="zoom:50%;" />
#### ⚽️ 平台管理端 #### 平台管理端
![管理端功能展示](https://pickmall.cn/assets/imgs/other/manager.gif) ![管理端功能展示](https://pickmall.cn/assets/imgs/other/manager.gif)
### 技术选型 ### 技术选型
#### 🥅 架构图 #### 架构图
![技术选型](https://lili-system.oss-cn-beijing.aliyuncs.com/docs/%E6%9E%B6%E6%9E%84.png) ![技术选型](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 | | 短信 | 阿里云短信 | 认证 | JWT |
| 日志处理 | Log4j | 接口规范 | RESTful | | 日志处理 | Log4j | 接口规范 | RESTful |
##### 🖥 前端-运营后台、店铺后台 ##### 前端-运营后台、店铺后台
| 说明 | 框架 | 说明 | 框架 | | 说明 | 框架 | 说明 | 框架 |
| ---------- | ---------- | ---------- | ------- | | ---------- | ---------- | ---------- | ------- |
@ -177,14 +125,14 @@ https://gitee.com/beijing_hongye_huicheng/docker/tree/master/init/mysql
| 基础UI库 | iView | UI界面基于 | iView | | 基础UI库 | iView | UI界面基于 | iView |
| 网络请求 | axios | | | | 网络请求 | axios | | |
##### 📱前端-移动端 ##### 前端-移动端
| 说明 | 架构 | 说明 | 架构 | | 说明 | 架构 | 说明 | 架构 |
| --------- | ------- | -------- | ------- | | --------- | ------- | -------- | ------- |
| 基础UI库 | uViewui | 基础框架 | uni-app | | 基础UI库 | uViewui | 基础框架 | uni-app |
| CSS预处理 | scss | 地图引擎 | amap | | CSS预处理 | scss | 地图引擎 | amap |
### 🌟 版本升级 ### 版本升级
``` ```
商城后续会持续版本升级修复bug完善功能覆盖更多业务场景 o2o/b2b/s2b2b2c/跨境电商 商城后续会持续版本升级修复bug完善功能覆盖更多业务场景 o2o/b2b/s2b2b2c/跨境电商
@ -193,7 +141,7 @@ https://gitee.com/beijing_hongye_huicheng/docker/tree/master/init/mysql
``` ```
### ⚠️ 开源须知 ### 开源须知
1.仅允许用于个人学习研究使用. 1.仅允许用于个人学习研究使用.
2.禁止将本开源的代码和资源进行任何形式任何名义的出售. 2.禁止将本开源的代码和资源进行任何形式任何名义的出售.
@ -203,7 +151,7 @@ https://gitee.com/beijing_hongye_huicheng/docker/tree/master/init/mysql
4.限制商用如果需要商业使用请联系我们。QQ3409056806. 4.限制商用如果需要商业使用请联系我们。QQ3409056806.
### 🐧 交流群 ### 交流群
##### 官方qq 1群 961316482已满 ##### 官方qq 1群 961316482已满
##### 官方qq 2群 875294241 ##### 官方qq 2群 875294241

View File

@ -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.enums.ResultUtil;
import cn.lili.common.vo.ResultMessage; import cn.lili.common.vo.ResultMessage;

View File

@ -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.ResultCode;
import cn.lili.common.enums.ResultUtil; import cn.lili.common.enums.ResultUtil;

View File

@ -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.ResultCode;
import cn.lili.common.enums.ResultUtil; import cn.lili.common.enums.ResultUtil;

View File

@ -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.enums.ResultUtil;
import cn.lili.common.vo.ResultMessage; import cn.lili.common.vo.ResultMessage;

View File

@ -1,12 +1,12 @@
package cn.lili.controller.member; package cn.lili.controller.member;
import cn.lili.common.enums.ResultUtil; import cn.lili.common.enums.ResultUtil;
import cn.lili.common.security.OperationalJudgment;
import cn.lili.common.security.context.UserContext; import cn.lili.common.security.context.UserContext;
import cn.lili.common.vo.PageVO; import cn.lili.common.vo.PageVO;
import cn.lili.common.vo.ResultMessage; import cn.lili.common.vo.ResultMessage;
import cn.lili.modules.member.entity.dos.MemberAddress; import cn.lili.modules.member.entity.dos.MemberAddress;
import cn.lili.modules.member.service.MemberAddressService; import cn.lili.modules.member.service.MemberAddressService;
import cn.lili.modules.system.utils.OperationalJudgment;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParam;

View File

@ -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<ServiceNotice> 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<IPage<ServiceNotice>> getByPage(PageVO page, String storeId) {
ServiceNotice serviceNotice = new ServiceNotice();
if (storeId == null) {
storeId = "-1";
}
serviceNotice.setStoreId(storeId);
IPage<ServiceNotice> data = serviceNoticeService.page(PageUtil.initPage(page));
return ResultUtil.data(data);
}
}

View File

@ -1,4 +1,4 @@
package cn.lili.controller.member; package cn.lili.controller.message;
import cn.lili.common.enums.ResultUtil; import cn.lili.common.enums.ResultUtil;
import cn.lili.common.security.context.UserContext; import cn.lili.common.security.context.UserContext;

View File

@ -1,19 +1,19 @@
package cn.lili.controller.trade; package cn.lili.controller.order;
import cn.lili.common.enums.ResultUtil; import cn.lili.common.enums.ResultUtil;
import cn.lili.common.security.OperationalJudgment;
import cn.lili.common.vo.ResultMessage; 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.dos.AfterSaleReason; import cn.lili.modules.order.aftersale.entity.dos.AfterSaleLog;
import cn.lili.modules.order.order.entity.dto.AfterSaleDTO; import cn.lili.modules.order.aftersale.entity.dos.AfterSaleReason;
import cn.lili.modules.order.order.entity.vo.AfterSaleApplyVO; import cn.lili.modules.order.aftersale.entity.dto.AfterSaleDTO;
import cn.lili.modules.order.order.entity.vo.AfterSaleSearchParams; import cn.lili.modules.order.aftersale.entity.vo.AfterSaleApplyVO;
import cn.lili.modules.order.order.entity.vo.AfterSaleVO; import cn.lili.modules.order.aftersale.entity.vo.AfterSaleSearchParams;
import cn.lili.modules.order.order.service.AfterSaleLogService; import cn.lili.modules.order.aftersale.entity.vo.AfterSaleVO;
import cn.lili.modules.order.order.service.AfterSaleReasonService; import cn.lili.modules.order.aftersale.service.AfterSaleLogService;
import cn.lili.modules.order.order.service.AfterSaleService; import cn.lili.modules.order.aftersale.service.AfterSaleReasonService;
import cn.lili.modules.order.trade.entity.dos.AfterSaleLog; import cn.lili.modules.order.aftersale.service.AfterSaleService;
import cn.lili.modules.store.entity.dto.StoreAfterSaleAddressDTO; import cn.lili.modules.store.entity.dto.StoreAfterSaleAddressDTO;
import cn.lili.modules.system.utils.OperationalJudgment;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParam;

View File

@ -1,8 +1,8 @@
package cn.lili.controller.trade; package cn.lili.controller.order;
import cn.lili.common.enums.ResultCode; import cn.lili.common.enums.ResultCode;
import cn.lili.common.exception.ServiceException;
import cn.lili.common.enums.ResultUtil; import cn.lili.common.enums.ResultUtil;
import cn.lili.common.exception.ServiceException;
import cn.lili.common.vo.ResultMessage; import cn.lili.common.vo.ResultMessage;
import cn.lili.modules.order.cart.entity.dto.TradeDTO; 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.enums.CartTypeEnum;

View File

@ -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.ResultCode;
import cn.lili.common.enums.ResultUtil; import cn.lili.common.enums.ResultUtil;
import cn.lili.common.exception.ServiceException; import cn.lili.common.exception.ServiceException;
import cn.lili.common.security.AuthUser; import cn.lili.common.security.AuthUser;
import cn.lili.common.security.OperationalJudgment;
import cn.lili.common.security.context.UserContext; import cn.lili.common.security.context.UserContext;
import cn.lili.common.vo.ResultMessage; import cn.lili.common.vo.ResultMessage;
import cn.lili.modules.order.order.entity.dos.Order; 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.OrderDetailVO;
import cn.lili.modules.order.order.entity.vo.OrderSimpleVO; import cn.lili.modules.order.order.entity.vo.OrderSimpleVO;
import cn.lili.modules.order.order.service.OrderService; import cn.lili.modules.order.order.service.OrderService;
import cn.lili.modules.system.utils.OperationalJudgment;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParam;

View File

@ -1,7 +1,8 @@
package cn.lili.controller.trade; package cn.lili.controller.order;
import cn.lili.common.enums.ResultUtil; import cn.lili.common.enums.ResultUtil;
import cn.lili.common.security.AuthUser; import cn.lili.common.security.AuthUser;
import cn.lili.common.security.OperationalJudgment;
import cn.lili.common.security.context.UserContext; import cn.lili.common.security.context.UserContext;
import cn.lili.common.vo.PageVO; import cn.lili.common.vo.PageVO;
import cn.lili.common.vo.ResultMessage; 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.entity.vo.OrderComplaintVO;
import cn.lili.modules.order.order.service.OrderComplaintCommunicationService; import cn.lili.modules.order.order.service.OrderComplaintCommunicationService;
import cn.lili.modules.order.order.service.OrderComplaintService; import cn.lili.modules.order.order.service.OrderComplaintService;
import cn.lili.modules.system.utils.OperationalJudgment;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParam;

View File

@ -1,4 +1,4 @@
package cn.lili.controller.trade; package cn.lili.controller.order;
import cn.lili.common.enums.ResultUtil; import cn.lili.common.enums.ResultUtil;
import cn.lili.common.vo.PageVO; import cn.lili.common.vo.PageVO;

View File

@ -1,9 +1,9 @@
package cn.lili.controller.trade; package cn.lili.controller.order;
import cn.lili.common.enums.ResultUtil; import cn.lili.common.enums.ResultUtil;
import cn.lili.common.vo.ResultMessage; import cn.lili.common.vo.ResultMessage;
import cn.lili.modules.order.trade.entity.dos.Recharge; import cn.lili.modules.wallet.entity.dos.Recharge;
import cn.lili.modules.order.trade.service.RechargeService; import cn.lili.modules.wallet.service.RechargeService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiImplicitParams;

View File

@ -6,8 +6,8 @@ import cn.lili.common.vo.ResultMessage;
import cn.lili.modules.member.entity.dos.Member; import cn.lili.modules.member.entity.dos.Member;
import cn.lili.modules.member.entity.dto.MemberEditDTO; import cn.lili.modules.member.entity.dto.MemberEditDTO;
import cn.lili.modules.member.service.MemberService; import cn.lili.modules.member.service.MemberService;
import cn.lili.modules.system.sms.SmsUtil; import cn.lili.modules.sms.SmsUtil;
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.VerificationService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParam;

View File

@ -2,16 +2,16 @@ package cn.lili.controller.passport.connect;
import cn.lili.common.enums.ResultCode; import cn.lili.common.enums.ResultCode;
import cn.lili.common.enums.ResultUtil;
import cn.lili.common.exception.ServiceException; import cn.lili.common.exception.ServiceException;
import cn.lili.common.security.token.Token; 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.common.vo.ResultMessage;
import cn.lili.modules.connect.entity.dto.AuthCallback; import cn.lili.modules.connect.entity.dto.AuthCallback;
import cn.lili.modules.connect.entity.dto.ConnectAuthUser; import cn.lili.modules.connect.entity.dto.ConnectAuthUser;
import cn.lili.modules.connect.request.AuthRequest; import cn.lili.modules.connect.request.AuthRequest;
import cn.lili.modules.connect.service.ConnectService; import cn.lili.modules.connect.service.ConnectService;
import cn.lili.modules.connect.util.ConnectUtil; import cn.lili.modules.connect.util.ConnectUtil;
import cn.lili.modules.connect.util.UuidUtils;
import cn.lili.modules.member.service.MemberService; import cn.lili.modules.member.service.MemberService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParam;

View File

@ -1,14 +1,14 @@
package cn.lili.controller.passport.connect; package cn.lili.controller.passport.connect;
import cn.lili.common.security.token.Token;
import cn.lili.common.enums.ResultUtil; import cn.lili.common.enums.ResultUtil;
import cn.lili.common.security.token.Token;
import cn.lili.common.vo.ResultMessage; import cn.lili.common.vo.ResultMessage;
import cn.lili.modules.connect.entity.dto.WechatMPLoginParams; import cn.lili.modules.connect.entity.dto.WechatMPLoginParams;
import cn.lili.modules.connect.service.ConnectService; 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.ShortLinkService;
import cn.lili.modules.message.service.WechatMPMessageService; import cn.lili.modules.wechat.entity.dos.WechatMPMessage;
import cn.lili.modules.message.util.WechatMpCodeUtil; import cn.lili.modules.wechat.service.WechatMPMessageService;
import cn.lili.modules.wechat.util.WechatMpCodeUtil;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;

View File

@ -2,6 +2,7 @@ package cn.lili.controller.promotion;
import cn.lili.common.enums.ResultUtil; import cn.lili.common.enums.ResultUtil;
import cn.lili.common.security.AuthUser; import cn.lili.common.security.AuthUser;
import cn.lili.common.security.OperationalJudgment;
import cn.lili.common.security.context.UserContext; import cn.lili.common.security.context.UserContext;
import cn.lili.common.vo.PageVO; import cn.lili.common.vo.PageVO;
import cn.lili.common.vo.ResultMessage; import cn.lili.common.vo.ResultMessage;
@ -12,7 +13,6 @@ import cn.lili.modules.promotion.entity.vos.CouponSearchParams;
import cn.lili.modules.promotion.entity.vos.CouponVO; import cn.lili.modules.promotion.entity.vos.CouponVO;
import cn.lili.modules.promotion.service.CouponService; import cn.lili.modules.promotion.service.CouponService;
import cn.lili.modules.promotion.service.MemberCouponService; import cn.lili.modules.promotion.service.MemberCouponService;
import cn.lili.modules.system.utils.OperationalJudgment;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParam;

View File

@ -4,12 +4,13 @@ import cn.lili.common.enums.ResultUtil;
import cn.lili.common.security.context.UserContext; import cn.lili.common.security.context.UserContext;
import cn.lili.common.vo.PageVO; import cn.lili.common.vo.PageVO;
import cn.lili.common.vo.ResultMessage; 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.StoreBankDTO;
import cn.lili.modules.store.entity.dto.StoreCompanyDTO; import cn.lili.modules.store.entity.dto.StoreCompanyDTO;
import cn.lili.modules.store.entity.dto.StoreOtherInfoDTO; import cn.lili.modules.store.entity.dto.StoreOtherInfoDTO;
import cn.lili.modules.store.entity.vos.*; import cn.lili.modules.store.entity.vos.*;
import cn.lili.modules.store.service.StoreDetailService; import cn.lili.modules.store.service.StoreDetailService;
import cn.lili.modules.store.service.StoreGoodsLabelService;
import cn.lili.modules.store.service.StoreService; import cn.lili.modules.store.service.StoreService;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;

View File

@ -1,4 +1,4 @@
package cn.lili.controller.member; package cn.lili.controller.wallet;
import cn.lili.common.enums.ResultUtil; import cn.lili.common.enums.ResultUtil;

View File

@ -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.ResultCode;
import cn.lili.common.enums.ResultUtil; 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.security.context.UserContext;
import cn.lili.common.vo.ResultMessage; import cn.lili.common.vo.ResultMessage;
import cn.lili.modules.member.entity.dos.Member; 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.MemberService;
import cn.lili.modules.member.service.MemberWalletService; import cn.lili.modules.verification.entity.enums.VerificationEnums;
import cn.lili.modules.verification.enums.VerificationEnums;
import cn.lili.modules.verification.service.VerificationService; 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 com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParam;

View File

@ -1,13 +1,13 @@
package cn.lili.controller.member; package cn.lili.controller.wallet;
import cn.lili.common.enums.ResultUtil; import cn.lili.common.enums.ResultUtil;
import cn.lili.common.security.context.UserContext; import cn.lili.common.security.context.UserContext;
import cn.lili.common.vo.PageVO; import cn.lili.common.vo.PageVO;
import cn.lili.common.vo.ResultMessage; import cn.lili.common.vo.ResultMessage;
import cn.lili.modules.member.entity.dos.MemberWithdrawApply; import cn.lili.modules.wallet.entity.dos.MemberWithdrawApply;
import cn.lili.modules.member.entity.vo.MemberWithdrawApplyQueryVO; import cn.lili.modules.wallet.entity.vo.MemberWithdrawApplyQueryVO;
import cn.lili.modules.member.service.MemberWithdrawApplyService; import cn.lili.modules.wallet.service.MemberWithdrawApplyService;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;

View File

@ -1,12 +1,12 @@
package cn.lili.controller.member; package cn.lili.controller.wallet;
import cn.lili.common.enums.ResultUtil; import cn.lili.common.enums.ResultUtil;
import cn.lili.common.security.context.UserContext; import cn.lili.common.security.context.UserContext;
import cn.lili.common.vo.PageVO; import cn.lili.common.vo.PageVO;
import cn.lili.common.vo.ResultMessage; 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.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 com.baomidou.mybatisplus.core.metadata.IPage;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;

View File

@ -1,12 +1,12 @@
package cn.lili.controller.trade; package cn.lili.controller.wallet;
import cn.lili.common.enums.ResultUtil; import cn.lili.common.enums.ResultUtil;
import cn.lili.common.security.AuthUser; import cn.lili.common.security.AuthUser;
import cn.lili.common.security.context.UserContext; import cn.lili.common.security.context.UserContext;
import cn.lili.common.vo.PageVO; import cn.lili.common.vo.PageVO;
import cn.lili.common.vo.ResultMessage; import cn.lili.common.vo.ResultMessage;
import cn.lili.modules.order.trade.entity.dos.WalletLog; import cn.lili.modules.wallet.entity.dos.WalletLog;
import cn.lili.modules.order.trade.service.WalletLogService; import cn.lili.modules.wallet.service.WalletLogService;
import cn.lili.mybatis.util.PageUtil; import cn.lili.mybatis.util.PageUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;

View File

@ -2,11 +2,11 @@ package cn.lili.controller.common;
import cn.lili.cache.Cache; import cn.lili.cache.Cache;
import cn.lili.common.enums.ResultCode; import cn.lili.common.enums.ResultCode;
import cn.lili.common.enums.ResultUtil;
import cn.lili.common.exception.ServiceException; import cn.lili.common.exception.ServiceException;
import cn.lili.common.security.AuthUser; import cn.lili.common.security.AuthUser;
import cn.lili.common.security.context.UserContext; import cn.lili.common.security.context.UserContext;
import cn.lili.common.security.enums.UserEnums; import cn.lili.common.security.enums.UserEnums;
import cn.lili.common.enums.ResultUtil;
import cn.lili.common.vo.PageVO; import cn.lili.common.vo.PageVO;
import cn.lili.common.vo.ResultMessage; import cn.lili.common.vo.ResultMessage;
import cn.lili.common.vo.SearchVO; import cn.lili.common.vo.SearchVO;
@ -78,9 +78,7 @@ public class FileController {
} }
throw new ServiceException(ResultCode.USER_AUTHORITY_ERROR); throw new ServiceException(ResultCode.USER_AUTHORITY_ERROR);
case MANAGER: case MANAGER:
if (file.getUserEnums().equals(authUser.getRole().name())) { break;
break;
}
default: default:
throw new ServiceException(ResultCode.USER_AUTHORITY_ERROR); throw new ServiceException(ResultCode.USER_AUTHORITY_ERROR);
} }

View File

@ -1,7 +1,7 @@
package cn.lili.controller.member; package cn.lili.controller.common;
import cn.lili.common.utils.IpHelper;
import cn.lili.common.enums.ResultUtil; import cn.lili.common.enums.ResultUtil;
import cn.lili.common.utils.IpHelper;
import cn.lili.common.vo.ResultMessage; import cn.lili.common.vo.ResultMessage;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
@ -19,8 +19,8 @@ import javax.servlet.http.HttpServletRequest;
* @since 2020-02-25 14:10:16 * @since 2020-02-25 14:10:16
*/ */
@RestController @RestController
@Api(tags = "管理端,IP接口") @Api(tags = "获取IP信息以及天气")
@RequestMapping("/manager/common/ip") @RequestMapping("/common/ip")
public class IpInfoManagerController { public class IpInfoManagerController {
@Autowired @Autowired
private IpHelper ipHelper; private IpHelper ipHelper;
@ -28,7 +28,6 @@ public class IpInfoManagerController {
@RequestMapping(value = "/info", method = RequestMethod.GET) @RequestMapping(value = "/info", method = RequestMethod.GET)
@ApiOperation(value = "IP及天气相关信息") @ApiOperation(value = "IP及天气相关信息")
public ResultMessage<Object> upload(HttpServletRequest request) { public ResultMessage<Object> upload(HttpServletRequest request) {
String result = ipHelper.getIpCity(request); String result = ipHelper.getIpCity(request);
return ResultUtil.data(result); return ResultUtil.data(result);
} }

View File

@ -3,7 +3,7 @@ package cn.lili.controller.common;
import cn.lili.cache.limit.annotation.LimitPoint; import cn.lili.cache.limit.annotation.LimitPoint;
import cn.lili.common.enums.ResultUtil; import cn.lili.common.enums.ResultUtil;
import cn.lili.common.vo.ResultMessage; 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 cn.lili.modules.verification.service.VerificationService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;

View File

@ -4,8 +4,8 @@ import cn.lili.cache.limit.annotation.LimitPoint;
import cn.lili.common.enums.ResultCode; import cn.lili.common.enums.ResultCode;
import cn.lili.common.enums.ResultUtil; import cn.lili.common.enums.ResultUtil;
import cn.lili.common.vo.ResultMessage; import cn.lili.common.vo.ResultMessage;
import cn.lili.modules.system.sms.SmsUtil; import cn.lili.modules.sms.SmsUtil;
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.VerificationService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParam;

View File

@ -1,7 +1,7 @@
package cn.lili.event; package cn.lili.event;
import cn.lili.modules.order.order.entity.dos.AfterSale; import cn.lili.modules.order.aftersale.entity.dos.AfterSale;
/** /**
* 售后单改变状态 * 售后单改变状态

View File

@ -1,6 +1,6 @@
package cn.lili.event; package cn.lili.event;
import cn.lili.modules.member.entity.dto.MemberWithdrawalMessage; import cn.lili.modules.wallet.entity.dto.MemberWithdrawalMessage;
/** /**
* 会员提现消息 * 会员提现消息

View File

@ -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.entity.enums.DistributionOrderStatusEnum;
import cn.lili.modules.distribution.mapper.DistributionOrderMapper; import cn.lili.modules.distribution.mapper.DistributionOrderMapper;
import cn.lili.modules.distribution.service.DistributionOrderService; 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.order.entity.dto.OrderMessage;
import cn.lili.modules.order.trade.entity.enums.AfterSaleStatusEnum; import cn.lili.modules.order.trade.entity.enums.AfterSaleStatusEnum;
import cn.lili.timetask.handler.EveryDayExecute; import cn.lili.timetask.handler.EveryDayExecute;

View File

@ -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.order.trade.service.OrderLogService;
import cn.lili.modules.promotion.service.MemberCouponService; import cn.lili.modules.promotion.service.MemberCouponService;
import cn.lili.rocketmq.RocketmqSendCallbackBuilder; import cn.lili.rocketmq.RocketmqSendCallbackBuilder;
import cn.lili.rocketmq.tags.MqOrderTagsEnum; import cn.lili.rocketmq.tags.OrderTagsEnum;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.spring.core.RocketMQTemplate; import org.apache.rocketmq.spring.core.RocketMQTemplate;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -190,7 +190,7 @@ public class FullDiscountExecute implements TradeEvent, OrderStatusChangeEvent {
orderMessage.setPaymentMethod(order.getPaymentMethod()); orderMessage.setPaymentMethod(order.getPaymentMethod());
orderMessage.setNewStatus(OrderStatusEnum.PAID); orderMessage.setNewStatus(OrderStatusEnum.PAID);
String destination = rocketmqCustomProperties.getOrderTopic() + ":" + MqOrderTagsEnum.STATUS_CHANGE.name(); String destination = rocketmqCustomProperties.getOrderTopic() + ":" + OrderTagsEnum.STATUS_CHANGE.name();
//发送订单变更mq消息 //发送订单变更mq消息
rocketMQTemplate.asyncSend(destination, JSONUtil.toJsonStr(orderMessage), RocketmqSendCallbackBuilder.commonCallback()); rocketMQTemplate.asyncSend(destination, JSONUtil.toJsonStr(orderMessage), RocketmqSendCallbackBuilder.commonCallback());

View File

@ -1,7 +1,6 @@
package cn.lili.event.impl; package cn.lili.event.impl;
import cn.hutool.core.convert.Convert;
import cn.lili.common.utils.CurrencyUtil; import cn.lili.common.utils.CurrencyUtil;
import cn.lili.common.utils.StringUtils; import cn.lili.common.utils.StringUtils;
import cn.lili.event.AfterSaleStatusChangeEvent; 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.dos.MemberEvaluation;
import cn.lili.modules.member.entity.enums.PointTypeEnum; import cn.lili.modules.member.entity.enums.PointTypeEnum;
import cn.lili.modules.member.service.MemberService; 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.dos.Order;
import cn.lili.modules.order.order.entity.dto.OrderMessage; 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.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.entity.enums.PayStatusEnum;
import cn.lili.modules.order.order.service.OrderService; 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.AfterSaleStatusEnum;

View File

@ -3,8 +3,7 @@ package cn.lili.event.impl;
import cn.lili.event.MemberRegisterEvent; import cn.lili.event.MemberRegisterEvent;
import cn.lili.modules.member.entity.dos.Member; import cn.lili.modules.member.entity.dos.Member;
import cn.lili.modules.member.service.MemberWalletService; import cn.lili.modules.wallet.service.MemberWalletService;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;

View File

@ -2,22 +2,22 @@ package cn.lili.event.impl;
import cn.lili.event.*; import cn.lili.event.*;
import cn.lili.modules.member.entity.dto.MemberPointMessage; 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.PointTypeEnum;
import cn.lili.modules.member.entity.enums.WithdrawStatusEnum;
import cn.lili.modules.message.entity.dto.NoticeMessageDTO; import cn.lili.modules.message.entity.dto.NoticeMessageDTO;
import cn.lili.modules.message.entity.enums.NoticeMessageNodeEnum; import cn.lili.modules.message.entity.enums.NoticeMessageNodeEnum;
import cn.lili.modules.message.entity.enums.NoticeMessageParameterEnum; import cn.lili.modules.message.entity.enums.NoticeMessageParameterEnum;
import cn.lili.modules.message.service.NoticeMessageService; 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.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.dto.OrderMessage;
import cn.lili.modules.order.order.entity.enums.OrderPromotionTypeEnum; import cn.lili.modules.order.order.entity.enums.OrderPromotionTypeEnum;
import cn.lili.modules.order.order.entity.vo.OrderDetailVO; import cn.lili.modules.order.order.entity.vo.OrderDetailVO;
import cn.lili.modules.order.order.service.OrderService; 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.AfterSaleStatusEnum;
import cn.lili.modules.order.trade.entity.enums.AfterSaleTypeEnum; 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.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;

View File

@ -2,10 +2,10 @@ package cn.lili.event.impl;
import cn.lili.event.OrderStatusChangeEvent; import cn.lili.event.OrderStatusChangeEvent;
import cn.lili.event.TradeEvent; 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.cart.entity.dto.TradeDTO;
import cn.lili.modules.order.order.entity.dto.OrderMessage; import cn.lili.modules.order.order.entity.dto.OrderMessage;
import cn.lili.modules.order.order.entity.vo.OrderVO; import cn.lili.modules.order.order.entity.vo.OrderVO;
import cn.lili.modules.wechat.util.WechatMessageUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;

View File

@ -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();
}
}

View File

@ -1,9 +1,9 @@
package cn.lili.listener; package cn.lili.listener;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import cn.lili.rocketmq.tags.AfterSaleTagsEnum;
import cn.lili.event.AfterSaleStatusChangeEvent; 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 lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.common.message.MessageExt; import org.apache.rocketmq.common.message.MessageExt;
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener; import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
@ -17,7 +17,6 @@ import java.util.List;
* 售后通知 * 售后通知
* *
* @author paulG * @author paulG
* @since 2020/12/9
*/ */
@Slf4j @Slf4j
@Component @Component

View File

@ -11,19 +11,13 @@ import cn.lili.modules.distribution.entity.dos.DistributionGoods;
import cn.lili.modules.distribution.entity.dos.DistributionSelectedGoods; import cn.lili.modules.distribution.entity.dos.DistributionSelectedGoods;
import cn.lili.modules.distribution.service.DistributionGoodsService; import cn.lili.modules.distribution.service.DistributionGoodsService;
import cn.lili.modules.distribution.service.DistributionSelectedGoodsService; import cn.lili.modules.distribution.service.DistributionSelectedGoodsService;
import cn.lili.modules.goods.entity.dos.Brand; import cn.lili.modules.goods.entity.dos.*;
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.dto.GoodsCompleteMessage; import cn.lili.modules.goods.entity.dto.GoodsCompleteMessage;
import cn.lili.modules.goods.entity.dto.GoodsParamsDTO; import cn.lili.modules.goods.entity.dto.GoodsParamsDTO;
import cn.lili.modules.goods.entity.dto.GoodsSearchParams; import cn.lili.modules.goods.entity.dto.GoodsSearchParams;
import cn.lili.modules.goods.entity.enums.GoodsAuthEnum; import cn.lili.modules.goods.entity.enums.GoodsAuthEnum;
import cn.lili.modules.goods.entity.enums.GoodsStatusEnum; import cn.lili.modules.goods.entity.enums.GoodsStatusEnum;
import cn.lili.modules.goods.service.BrandService; import cn.lili.modules.goods.service.*;
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.member.entity.dos.FootPrint; import cn.lili.modules.member.entity.dos.FootPrint;
import cn.lili.modules.member.entity.dos.MemberEvaluation; import cn.lili.modules.member.entity.dos.MemberEvaluation;
import cn.lili.modules.member.service.FootprintService; import cn.lili.modules.member.service.FootprintService;
@ -35,8 +29,6 @@ import cn.lili.modules.promotion.entity.vos.PromotionGoodsSearchParams;
import cn.lili.modules.promotion.service.PromotionGoodsService; import cn.lili.modules.promotion.service.PromotionGoodsService;
import cn.lili.modules.search.entity.dos.EsGoodsIndex; import cn.lili.modules.search.entity.dos.EsGoodsIndex;
import cn.lili.modules.search.service.EsGoodsIndexService; import cn.lili.modules.search.service.EsGoodsIndexService;
import cn.lili.modules.store.entity.dos.StoreGoodsLabel;
import cn.lili.modules.store.service.StoreGoodsLabelService;
import cn.lili.modules.store.service.StoreService; import cn.lili.modules.store.service.StoreService;
import cn.lili.rocketmq.tags.GoodsTagsEnum; import cn.lili.rocketmq.tags.GoodsTagsEnum;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@ -197,10 +189,6 @@ public class GoodsMessageListener implements RocketMQListener<MessageExt> {
List<String> skuIds = JSONUtil.toList(message, String.class); List<String> skuIds = JSONUtil.toList(message, String.class);
goodsCollectionService.deleteSkuCollection(skuIds); goodsCollectionService.deleteSkuCollection(skuIds);
break; break;
//收藏商品
case GOODS_COLLECTION:
storeService.updateStoreCollectionNum(new String(messageExt.getBody()));
break;
//商品评价 //商品评价
case GOODS_COMMENT_COMPLETE: case GOODS_COMMENT_COMPLETE:
MemberEvaluation memberEvaluation = JSONUtil.toBean(new String(messageExt.getBody()), MemberEvaluation.class); MemberEvaluation memberEvaluation = JSONUtil.toBean(new String(messageExt.getBody()), MemberEvaluation.class);
@ -394,9 +382,8 @@ public class GoodsMessageListener implements RocketMQListener<MessageExt> {
*/ */
private void updateGoodsNum(MessageExt messageExt) { private void updateGoodsNum(MessageExt messageExt) {
Goods goods;
try { try {
goods = JSONUtil.toBean(new String(messageExt.getBody()), Goods.class); Goods goods = JSONUtil.toBean(new String(messageExt.getBody()), Goods.class);
//更新店铺商品数量 //更新店铺商品数量
assert goods != null; assert goods != null;
storeService.updateStoreGoodsNum(goods.getStoreId()); storeService.updateStoreGoodsNum(goods.getStoreId());

View File

@ -1,15 +1,15 @@
package cn.lili.listener; package cn.lili.listener;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import cn.lili.rocketmq.tags.MemberTagsEnum;
import cn.lili.event.MemberPointChangeEvent; import cn.lili.event.MemberPointChangeEvent;
import cn.lili.event.MemberRegisterEvent; import cn.lili.event.MemberRegisterEvent;
import cn.lili.event.MemberWithdrawalEvent; import cn.lili.event.MemberWithdrawalEvent;
import cn.lili.modules.member.entity.dos.Member; import cn.lili.modules.member.entity.dos.Member;
import cn.lili.modules.member.entity.dos.MemberSign; import cn.lili.modules.member.entity.dos.MemberSign;
import cn.lili.modules.member.entity.dto.MemberPointMessage; 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.member.service.MemberSignService;
import cn.lili.modules.wallet.entity.dto.MemberWithdrawalMessage;
import cn.lili.rocketmq.tags.MemberTagsEnum;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.common.message.MessageExt; import org.apache.rocketmq.common.message.MessageExt;
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener; import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;

View File

@ -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.MemberMessage;
import cn.lili.modules.message.entity.dos.Message; import cn.lili.modules.message.entity.dos.Message;
import cn.lili.modules.message.entity.dos.StoreMessage; 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.MessageSendClient;
import cn.lili.modules.message.entity.enums.MessageStatusEnum; import cn.lili.modules.message.entity.enums.MessageStatusEnum;
import cn.lili.modules.message.entity.enums.RangeEnum; import cn.lili.modules.message.entity.enums.RangeEnum;
import cn.lili.modules.message.service.MemberMessageService; import cn.lili.modules.message.service.MemberMessageService;
import cn.lili.modules.message.service.StoreMessageService; 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.entity.dos.Store;
import cn.lili.modules.store.service.StoreService; import cn.lili.modules.store.service.StoreService;
import cn.lili.modules.system.sms.SmsUtil;
import cn.lili.rocketmq.tags.OtherTagsEnum; import cn.lili.rocketmq.tags.OtherTagsEnum;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;

View File

@ -2,11 +2,11 @@ package cn.lili.listener;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import cn.lili.cache.Cache; import cn.lili.cache.Cache;
import cn.lili.rocketmq.tags.MqOrderTagsEnum;
import cn.lili.event.OrderStatusChangeEvent; import cn.lili.event.OrderStatusChangeEvent;
import cn.lili.event.TradeEvent; import cn.lili.event.TradeEvent;
import cn.lili.modules.order.cart.entity.dto.TradeDTO; 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.dto.OrderMessage;
import cn.lili.rocketmq.tags.OrderTagsEnum;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.common.message.MessageExt; import org.apache.rocketmq.common.message.MessageExt;
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener; import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
@ -58,7 +58,7 @@ public class OrderMessageListener implements RocketMQListener<MessageExt> {
*/ */
public void orderStatusEvent(MessageExt messageExt) { public void orderStatusEvent(MessageExt messageExt) {
switch (MqOrderTagsEnum.valueOf(messageExt.getTags())) { switch (OrderTagsEnum.valueOf(messageExt.getTags())) {
//订单创建 //订单创建
case ORDER_CREATE: case ORDER_CREATE:
String key = new String(messageExt.getBody()); String key = new String(messageExt.getBody());

View File

@ -1,6 +1,5 @@
package cn.lili.timetask.handler.impl.coupon; package cn.lili.timetask.handler.impl.coupon;
import cn.lili.common.utils.DateUtil;
import cn.lili.modules.promotion.entity.dos.MemberCoupon; import cn.lili.modules.promotion.entity.dos.MemberCoupon;
import cn.lili.modules.promotion.entity.enums.MemberCouponStatusEnum; import cn.lili.modules.promotion.entity.enums.MemberCouponStatusEnum;
import cn.lili.modules.promotion.service.MemberCouponService; import cn.lili.modules.promotion.service.MemberCouponService;
@ -43,7 +42,7 @@ public class CouponExecute implements EveryDayExecute {
this.memberCouponService.update(updateWrapper); this.memberCouponService.update(updateWrapper);
Calendar calendar = Calendar.getInstance(); Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.DAY_OF_MONTH, calendar.get(Calendar.DAY_OF_MONTH) + EXPIRATION_DAY); calendar.set(Calendar.DAY_OF_MONTH, calendar.get(Calendar.DAY_OF_MONTH) - EXPIRATION_DAY);
Date removeTime = calendar.getTime(); Date removeTime = calendar.getTime();
//删除过期/已使用的优惠券 //删除过期/已使用的优惠券
LambdaUpdateWrapper<MemberCoupon> deleteWrapper = new LambdaUpdateWrapper<MemberCoupon>() LambdaUpdateWrapper<MemberCoupon> deleteWrapper = new LambdaUpdateWrapper<MemberCoupon>()

View File

@ -8,6 +8,7 @@ import cn.lili.common.exception.ServiceException;
import cn.lili.modules.member.entity.dto.MemberEvaluationDTO; import cn.lili.modules.member.entity.dto.MemberEvaluationDTO;
import cn.lili.modules.member.entity.enums.EvaluationGradeEnum; import cn.lili.modules.member.entity.enums.EvaluationGradeEnum;
import cn.lili.modules.member.service.MemberEvaluationService; 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.Order;
import cn.lili.modules.order.order.entity.dos.OrderItem; import cn.lili.modules.order.order.entity.dos.OrderItem;
import cn.lili.modules.order.order.entity.enums.CommentStatusEnum; import cn.lili.modules.order.order.entity.enums.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.OrderItemAfterSaleStatusEnum;
import cn.lili.modules.order.order.entity.enums.OrderStatusEnum; import cn.lili.modules.order.order.entity.enums.OrderStatusEnum;
import cn.lili.modules.order.order.mapper.OrderItemMapper; 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.OrderItemService;
import cn.lili.modules.order.order.service.OrderService; import cn.lili.modules.order.order.service.OrderService;
import cn.lili.modules.system.entity.dos.Setting; import cn.lili.modules.system.entity.dos.Setting;

View File

@ -4,12 +4,12 @@ import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import cn.lili.modules.order.order.entity.enums.PayStatusEnum; 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.dos.Setting;
import cn.lili.modules.system.entity.dto.OrderSetting; import cn.lili.modules.system.entity.dto.OrderSetting;
import cn.lili.modules.system.entity.enums.SettingEnum; import cn.lili.modules.system.entity.enums.SettingEnum;
import cn.lili.modules.system.service.SettingService; 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 cn.lili.timetask.handler.EveryMinuteExecute;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;

View File

@ -1,7 +1,7 @@
package cn.lili.timetask.handler.impl.statistics; package cn.lili.timetask.handler.impl.statistics;
import cn.lili.modules.statistics.entity.dos.MemberStatisticsData; 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 cn.lili.timetask.handler.EveryDayExecute;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -24,7 +24,7 @@ public class MemberStatisticsExecute implements EveryDayExecute {
* 会员统计 * 会员统计
*/ */
@Autowired @Autowired
private MemberStatisticsDataService memberStatisticsDataService; private MemberStatisticsService memberStatisticsService;
@Override @Override
public void execute() { 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); calendar.set(Calendar.DAY_OF_MONTH, calendar.get(Calendar.DAY_OF_MONTH) - 1);
startTime = calendar.getTime(); startTime = calendar.getTime();
MemberStatisticsData memberStatisticsData = new MemberStatisticsData(); MemberStatisticsData memberStatisticsData = new MemberStatisticsData();
memberStatisticsData.setMemberCount(memberStatisticsDataService.memberCount(endTime)); memberStatisticsData.setMemberCount(memberStatisticsService.memberCount(endTime));
memberStatisticsData.setCreateDate(startTime); memberStatisticsData.setCreateDate(startTime);
memberStatisticsData.setActiveQuantity(memberStatisticsDataService.activeQuantity(startTime)); memberStatisticsData.setActiveQuantity(memberStatisticsService.activeQuantity(startTime));
memberStatisticsData.setNewlyAdded(memberStatisticsDataService.newlyAdded(startTime, endTime)); memberStatisticsData.setNewlyAdded(memberStatisticsService.newlyAdded(startTime, endTime));
memberStatisticsDataService.save(memberStatisticsData); memberStatisticsService.save(memberStatisticsData);
} catch (Exception e) { } catch (Exception e) {
log.error("每日会员统计功能异常:", 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);
}
} }

View File

@ -5,7 +5,7 @@ import cn.lili.cache.Cache;
import cn.lili.cache.CachePrefix; import cn.lili.cache.CachePrefix;
import cn.lili.common.utils.BeanUtil; import cn.lili.common.utils.BeanUtil;
import cn.lili.modules.statistics.entity.dos.PlatformViewData; 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 cn.lili.timetask.handler.EveryDayExecute;
import lombok.Data; import lombok.Data;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -37,7 +37,7 @@ public class PageViewStatisticsExecute implements EveryDayExecute {
* 平台PV统计 * 平台PV统计
*/ */
@Autowired @Autowired
private PlatformViewDataService platformViewDataService; private PlatformViewService platformViewService;
@Override @Override
public void execute() { public void execute() {
@ -123,7 +123,7 @@ public class PageViewStatisticsExecute implements EveryDayExecute {
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
void batchSave(List<String> pvKeys, List<String> uvKeys, List<PlatformViewData> platformViewData) { void batchSave(List<String> pvKeys, List<String> uvKeys, List<PlatformViewData> platformViewData) {
log.debug("批量保存流量数据,共计【{}】条", platformViewData.size()); log.debug("批量保存流量数据,共计【{}】条", platformViewData.size());
platformViewDataService.saveBatch(platformViewData); platformViewService.saveBatch(platformViewData);
//批量删除缓存key //批量删除缓存key
cache.multiDel(pvKeys); cache.multiDel(pvKeys);
cache.multiDel(uvKeys); cache.multiDel(uvKeys);

View File

@ -26,6 +26,12 @@
</exclusion> </exclusion>
</exclusions> </exclusions>
</dependency> </dependency>
<!--定时任务-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId> <artifactId>spring-boot-starter-web</artifactId>
@ -80,11 +86,11 @@
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId> <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency> </dependency>
<!-- &lt;!&ndash; Websocket &ndash;&gt;--> <!-- &lt;!&ndash; Websocket &ndash;&gt;-->
<!-- <dependency>--> <!-- <dependency>-->
<!-- <groupId>org.springframework.boot</groupId>--> <!-- <groupId>org.springframework.boot</groupId>-->
<!-- <artifactId>spring-boot-starter-websocket</artifactId>--> <!-- <artifactId>spring-boot-starter-websocket</artifactId>-->
<!-- </dependency>--> <!-- </dependency>-->
<!-- MybatisPlus --> <!-- MybatisPlus -->
<dependency> <dependency>
<groupId>com.baomidou</groupId> <groupId>com.baomidou</groupId>
@ -271,11 +277,11 @@
<artifactId>logstash-logback-encoder</artifactId> <artifactId>logstash-logback-encoder</artifactId>
<version>${logstash-logback-encoder}</version> <version>${logstash-logback-encoder}</version>
</dependency> </dependency>
<!-- <dependency>--> <!-- <dependency>-->
<!-- <groupId>javax.interceptor</groupId>--> <!-- <groupId>javax.interceptor</groupId>-->
<!-- <artifactId>javax.interceptor-api</artifactId>--> <!-- <artifactId>javax.interceptor-api</artifactId>-->
<!-- <version>${interceptor-api}</version>--> <!-- <version>${interceptor-api}</version>-->
<!-- </dependency>--> <!-- </dependency>-->
<dependency> <dependency>
<groupId>de.codecentric</groupId> <groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId> <artifactId>spring-boot-admin-starter-client</artifactId>

View File

@ -480,7 +480,11 @@ public enum CachePrefix {
/** /**
* 订单暂时缓存 * 订单暂时缓存
*/ */
ORDER; ORDER,
/**
* 敏感词
*/
SENSITIVE;
public static String removePrefix(String str) { public static String removePrefix(String str) {

View File

@ -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> T get(String key, Class<T> 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<Object> 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<Object> 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<DefaultTypedTuple> zrangeByScoreWithScores(String key, int from, long to) {
Set<DefaultTypedTuple> 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);
}
}

View File

@ -1,4 +1,4 @@
package cn.lili.modules.system.aspect.annotation; package cn.lili.common.aop.annotation;
import java.lang.annotation.*; import java.lang.annotation.*;

View File

@ -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.enums.ResultCode;
import cn.lili.common.exception.ServiceException; import cn.lili.common.exception.ServiceException;
import cn.lili.common.properties.SystemSettingProperties; 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.Aspect;
import org.aspectj.lang.annotation.Before; import org.aspectj.lang.annotation.Before;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;

View File

@ -210,6 +210,7 @@ public enum ResultCode {
AFTER_STATUS_ERROR(33006, "售后状态错误,请刷新页面"), AFTER_STATUS_ERROR(33006, "售后状态错误,请刷新页面"),
RETURN_MONEY_OFFLINE_BANK_ERROR(33007, "当账号类型为银行转账时,银行信息不能为空"), RETURN_MONEY_OFFLINE_BANK_ERROR(33007, "当账号类型为银行转账时,银行信息不能为空"),
AFTER_SALES_PRICE_ERROR(33004, "申请退款金额错误"), AFTER_SALES_PRICE_ERROR(33004, "申请退款金额错误"),
AFTER_GOODS_NUMBER_ERROR(33008, "申请售后商品数量错误"),
/** /**
* 投诉 * 投诉

View File

@ -1,8 +1,7 @@
package cn.lili.modules.system.utils; package cn.lili.common.security;
import cn.lili.common.enums.ResultCode; import cn.lili.common.enums.ResultCode;
import cn.lili.common.exception.ServiceException; import cn.lili.common.exception.ServiceException;
import cn.lili.common.security.AuthUser;
import cn.lili.common.security.context.UserContext; import cn.lili.common.security.context.UserContext;
import cn.lili.common.utils.BeanUtil; import cn.lili.common.utils.BeanUtil;

View File

@ -4,6 +4,7 @@ package cn.lili.common.security.filter;
import cn.hutool.core.text.CharSequenceUtil; import cn.hutool.core.text.CharSequenceUtil;
import cn.hutool.http.HtmlUtil; import cn.hutool.http.HtmlUtil;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import lombok.extern.slf4j.Slf4j;
import org.owasp.html.Sanitizers; import org.owasp.html.Sanitizers;
import javax.servlet.ReadListener; import javax.servlet.ReadListener;
@ -27,6 +28,7 @@ import java.util.Map;
* @version v1.0 * @version v1.0
* 2021-06-04 10:39 * 2021-06-04 10:39
*/ */
@Slf4j
public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper { public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper {
@ -35,7 +37,20 @@ public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper {
* *
* @todo 这里的参数应该更智能些例如iv前端的参数包含这两个字母就会放过这是有问题的 * @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",
"privateKey",
"wechatpay",
};
public XssHttpServletRequestWrapper(HttpServletRequest request) { public XssHttpServletRequestWrapper(HttpServletRequest request) {
super(request); super(request);
@ -128,45 +143,72 @@ public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper {
*/ */
@Override @Override
public ServletInputStream getInputStream() throws IOException { 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()))) { BufferedReader bufferedReader = null;
//将body转换为map
Map<String, Object> map = JSONUtil.parseObj(body.toString()); InputStreamReader reader = null;
//创建空的map用于存储结果
Map<String, Object> resultMap = new HashMap<>(map.size()); //获取输入流
//遍历数组 ServletInputStream in = null;
for (Map.Entry<String, Object> entry : map.entrySet()) { try {
//如果map.get(key)获取到的是字符串就需要进行处理如果不是直接存储resultMap in = super.getInputStream();
if (map.get(entry.getKey()) instanceof String) { //用于存储输入流
resultMap.put(entry.getKey(), filterXss(entry.getKey(), entry.getValue().toString())); StringBuilder body = new StringBuilder();
} else { reader = new InputStreamReader(in, StandardCharsets.UTF_8);
resultMap.put(entry.getKey(), entry.getValue()); 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<String, Object> map = JSONUtil.parseObj(body.toString());
//创建空的map用于存储结果
Map<String, Object> resultMap = new HashMap<>(map.size());
//遍历数组
for (Map.Entry<String, Object> 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字符串转换为字节 //将json字符串转换为字节
final ByteArrayInputStream resultBIS = new ByteArrayInputStream(resultStr.getBytes()); final ByteArrayInputStream bis = new ByteArrayInputStream(body.toString().getBytes());
//实现接口 //实现接口
return new ServletInputStream() { return new ServletInputStream() {
@Override @Override
@ -181,41 +223,31 @@ public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper {
@Override @Override
public void setReadListener(ReadListener readListener) { public void setReadListener(ReadListener readListener) {
} }
@Override @Override
public int read() { 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) { private String cleanXSS(String value) {

View File

@ -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 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.io.Serializable;
import java.util.List; import java.util.List;
@ -21,9 +15,12 @@ import java.util.NavigableSet;
* 2020-02-25 14:10:16 * 2020-02-25 14:10:16
*/ */
@Slf4j @Slf4j
@Component public class SensitiveWordsFilter implements Serializable {
public class SensitiveWordsFilter implements Serializable, ApplicationRunner {
/**
* 字符*
*/
public final static char WILDCARD_STAR = '*';
/** /**
* 为2的n次方考虑到敏感词大概在10k左右 * 为2的n次方考虑到敏感词大概在10k左右
@ -37,98 +34,27 @@ public class SensitiveWordsFilter implements Serializable, ApplicationRunner {
* 类似HashMap的桶比较稀疏 * 类似HashMap的桶比较稀疏
* 使用2个字符的hash定位 * 使用2个字符的hash定位
*/ */
protected static SensitiveWordsNode[] nodes; protected static SensitiveWordsNode[] nodes = new SensitiveWordsNode[0];
@Autowired
private SensitiveWordsService sensitiveWordsService;
/** /**
* 增加一个敏感词如果词的长度trim后小于2则丢弃<br/> * 更新中的nodes用于防止动态更新时原有nodes被清空导致无法正常写入过滤词
* 此方法构建并不是主要的性能优化点
*
* @param word 敏感词
* @return 操作结果
*/ */
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 * @return
*/ */
public static void remove(String word) { public static String filter(String sentence) {
return filter(sentence, WILDCARD_STAR);
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);
}
}
} }
/** /**
* 对句子进行敏感词过滤<br/> * 对句子进行敏感词过滤<br/>
* 如果无敏感词返回输入的sentence对象即可以用下面的方式判断是否有敏感词<br/><code> * 如果无敏感词返回输入的sentence对象即可以用下面的方式判断是否有敏感词<br/>
* String result = filter.filter(sentence, CharacterConstant.WILDCARD_STAR);<br/>
* if(result != sentence){<br/>
* &nbsp;&nbsp;//有敏感词<br/>
* }
* </code>
* *
* @param sentence 句子 * @param sentence 句子
* @param replace 敏感词的替换字符 * @param replace 敏感词的替换字符
@ -224,25 +150,96 @@ public class SensitiveWordsFilter implements Serializable, ApplicationRunner {
} }
} }
/** /**
* 初始化敏感词 * 初始化敏感词
*
* @param args
* @throws Exception
*/ */
@Override public static void init(List<String> words) {
public void run(ApplicationArguments args) { log.info("开始初始化敏感词");
try { nodesUpdate = new SensitiveWordsNode[DEFAULT_INITIAL_CAPACITY];
nodes = new SensitiveWordsNode[DEFAULT_INITIAL_CAPACITY]; for (String word : words) {
//加入平台添加的敏感词 put(word);
List<SensitiveWords> list = sensitiveWordsService.list(); }
if (list != null && list.size() > 0) { nodes = nodesUpdate;
for (SensitiveWords sensitiveWords : list) { }
put(sensitiveWords.getSensitiveWord());
/**
* 增加一个敏感词如果词的长度trim后小于2则丢弃<br/>
* 此方法构建并不是主要的性能优化点
*
* @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);
}
} }
} }
} }

View File

@ -1,4 +1,4 @@
package cn.lili.modules.system.utils; package cn.lili.common.sensitive;
import java.io.Serializable; import java.io.Serializable;
import java.util.TreeSet; import java.util.TreeSet;

View File

@ -1,13 +1,14 @@
package cn.lili.modules.system.utils; package cn.lili.common.sensitive;
import java.io.Serializable; import java.io.Serializable;
/** /**
* 字符指针
* *
* @author Bulbasaur * @author Bulbasaur
* @since 2020-02-25 14:10:16 * @since 2020-02-25 14:10:16
*/ */
public class StringPointer implements Serializable, CharSequence, Comparable<StringPointer>{ public class StringPointer implements Serializable, CharSequence, Comparable<StringPointer> {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@ -19,13 +20,13 @@ public class StringPointer implements Serializable, CharSequence, Comparable<Str
private int hash = 0; private int hash = 0;
public StringPointer(String str){ public StringPointer(String str) {
value = str.toCharArray(); value = str.toCharArray();
offset = 0; offset = 0;
length = value.length; length = value.length;
} }
public StringPointer(char[] value, int offset, int length){ public StringPointer(char[] value, int offset, int length) {
this.value = value; this.value = value;
this.offset = offset; this.offset = offset;
this.length = length; this.length = length;
@ -34,10 +35,11 @@ public class StringPointer implements Serializable, CharSequence, Comparable<Str
/** /**
* 计算该位置后包含2个字符的hash值 * 计算该位置后包含2个字符的hash值
*
* @param i 0 length - 2 * @param i 0 length - 2
* @return 0 length - 2 * @return 0 length - 2
*/ */
public int nextTwoCharHash(int i){ public int nextTwoCharHash(int i) {
return 31 * value[offset + i] + value[offset + i + 1]; return 31 * value[offset + i] + value[offset + i + 1];
} }
@ -48,25 +50,25 @@ public class StringPointer implements Serializable, CharSequence, Comparable<Str
* @param i 0 length - 2 * @param i 0 length - 2
* @return int值 * @return int值
*/ */
public int nextTwoCharMix(int i){ public int nextTwoCharMix(int i) {
return (value[offset + i] << 16) | value[offset + i + 1]; return (value[offset + i] << 16) | value[offset + i + 1];
} }
/** /**
* 该位置后包含的字符串是否以某个词word开头 * 该位置后包含的字符串是否以某个词word开头
* *
* @param i 0 length - 2 * @param i 0 length - 2
* @param word * @param word
* @return 是否 * @return 是否
*/ */
public boolean nextStartsWith(int i, StringPointer word){ public boolean nextStartsWith(int i, StringPointer word) {
//是否长度超出 //是否长度超出
if(word.length > length - i){ if (word.length > length - i) {
return false; return false;
} }
//从尾开始判断 //从尾开始判断
for(int c = word.length - 1; c >= 0; c --){ for (int c = word.length - 1; c >= 0; c--) {
if(value[offset + i + c] != word.value[word.offset + c]){ if (value[offset + i + c] != word.value[word.offset + c]) {
return false; return false;
} }
} }
@ -76,31 +78,31 @@ public class StringPointer implements Serializable, CharSequence, Comparable<Str
/** /**
* 填充替换 * 填充替换
* *
* @param begin 从此位置开始 * @param begin 从此位置开始
* @param end 到此位置结束不含 * @param end 到此位置结束不含
* @param fillWith 以此字符填充替换 * @param fillWith 以此字符填充替换
*/ */
public void fill(int begin, int end, char fillWith){ public void fill(int begin, int end, char fillWith) {
for(int i = begin; i < end; i ++){ for (int i = begin; i < end; i++) {
value[offset + i] = fillWith; value[offset + i] = fillWith;
} }
} }
@Override @Override
public int length(){ public int length() {
return length; return length;
} }
@Override @Override
public char charAt(int i){ public char charAt(int i) {
return value[offset + i]; return value[offset + i];
} }
public StringPointer substring(int begin){ public StringPointer substring(int begin) {
return new StringPointer(value, offset + begin, length - begin); return new StringPointer(value, offset + begin, length - begin);
} }
public StringPointer substring(int begin, int end){ public StringPointer substring(int begin, int end) {
return new StringPointer(value, offset + begin, end - begin); return new StringPointer(value, offset + begin, end - begin);
} }
@ -110,7 +112,7 @@ public class StringPointer implements Serializable, CharSequence, Comparable<Str
} }
@Override @Override
public String toString(){ public String toString() {
return new String(value, offset, length); return new String(value, offset, length);
} }
@ -132,12 +134,12 @@ public class StringPointer implements Serializable, CharSequence, Comparable<Str
return true; return true;
} }
if (anObject instanceof StringPointer) { if (anObject instanceof StringPointer) {
StringPointer that = (StringPointer)anObject; StringPointer that = (StringPointer) anObject;
if (length == that.length) { if (length == that.length) {
char[] v1 = this.value; char[] v1 = this.value;
char[] v2 = that.value; char[] v2 = that.value;
for(int i = 0; i < this.length; i ++){ for (int i = 0; i < this.length; i++) {
if(v1[this.offset + i] != v2[that.offset + i]){ if (v1[this.offset + i] != v2[that.offset + i]) {
return false; return false;
} }
} }

View File

@ -0,0 +1,45 @@
package cn.lili.common.sensitive.init;
import cn.lili.cache.Cache;
import cn.lili.cache.CachePrefix;
import cn.lili.common.sensitive.SensitiveWordsFilter;
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.util.List;
/**
* 敏感词加载
*
* @author Chopper
* @version v1.0
* 2021-11-23 12:08
*/
@Component
@Slf4j
public class SensitiveWordsLoader implements ApplicationRunner {
@Autowired
private Cache<List<String>> cache;
/**
* 程序启动时获取最新的需要过滤的敏感词
* <p>
* 这里即便缓存中为空也没关系定时任务会定时重新加载敏感词
*
* @param args 启动参数
*/
@Override
public void run(ApplicationArguments args) {
List<String> sensitives = cache.get(CachePrefix.SENSITIVE.getPrefix());
log.info("系统初始化敏感词");
if (sensitives == null || sensitives.isEmpty()) {
return;
}
SensitiveWordsFilter.init(sensitives);
}
}

View File

@ -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();
}
}

View File

@ -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<List<String>> cache;
/**
* 定时更新敏感词信息
*
* @param jobExecutionContext
*/
@Override
protected void executeInternal(JobExecutionContext jobExecutionContext) {
log.info("敏感词定时更新");
List<String> sensitives = cache.get(CachePrefix.SENSITIVE.getPrefix());
if (sensitives == null || sensitives.isEmpty()) {
return;
}
SensitiveWordsFilter.init(sensitives);
}
}

View File

@ -3,11 +3,10 @@ package cn.lili.common.utils;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import java.io.*;
import java.util.Base64; import java.util.Base64;
import java.util.Base64.Decoder; import java.util.Base64.Decoder;
import java.io.*;
/** /**
* base64转为multipartFile工具类 * base64转为multipartFile工具类
* *
@ -55,7 +54,7 @@ public class Base64DecodeMultipartFile implements MultipartFile {
} }
@Override @Override
public InputStream getInputStream() throws IOException { public InputStream getInputStream() {
return new ByteArrayInputStream(imgContent); return new ByteArrayInputStream(imgContent);
} }
@ -66,8 +65,9 @@ public class Base64DecodeMultipartFile implements MultipartFile {
stream = new FileOutputStream(dest); stream = new FileOutputStream(dest);
stream.write(imgContent); stream.write(imgContent);
} catch (IOException e) { } catch (IOException e) {
log.error("transferTo错误",e); log.error("transferTo错误", e);
}finally { } finally {
assert stream != null;
stream.close(); stream.close();
} }
} }
@ -94,7 +94,7 @@ public class Base64DecodeMultipartFile implements MultipartFile {
byte[] bytes = Base64.getDecoder().decode(base64); byte[] bytes = Base64.getDecoder().decode(base64);
stream = new ByteArrayInputStream(bytes); stream = new ByteArrayInputStream(bytes);
} catch (Exception e) { } catch (Exception e) {
log.error("base64ToInputStream错误",e); log.error("base64ToInputStream错误", e);
} }
return stream; return stream;
} }
@ -111,13 +111,13 @@ public class Base64DecodeMultipartFile implements MultipartFile {
} }
data = swapStream.toByteArray(); data = swapStream.toByteArray();
} catch (IOException e) { } catch (IOException e) {
log.error("转码错误",e); log.error("转码错误", e);
} finally { } finally {
if (in != null) { if (in != null) {
try { try {
in.close(); in.close();
} catch (IOException e) { } catch (IOException e) {
log.error("inputStreamToStream错误",e); log.error("inputStreamToStream错误", e);
} }
} }
} }

View File

@ -16,7 +16,7 @@ public class BeanUtil {
* 复制属性 * 复制属性
* *
* @param objectFrom 源自对象 * @param objectFrom 源自对象
* @param objectTo 复制给对象 * @param objectTo 复制给对象
*/ */
public static void copyProperties(Object objectFrom, Object objectTo) { public static void copyProperties(Object objectFrom, Object objectTo) {
BeanUtils.copyProperties(objectFrom, objectTo); BeanUtils.copyProperties(objectFrom, objectTo);
@ -25,6 +25,7 @@ public class BeanUtil {
/** /**
* 获取属性名数组 * 获取属性名数组
*
* @param o 获取字段的对象 * @param o 获取字段的对象
* @return 返回各个字段 * @return 返回各个字段
*/ */
@ -49,8 +50,9 @@ public class BeanUtil {
/** /**
* 根据属性名获取属性值 * 根据属性名获取属性值
*
* @param fieldName 属性名 * @param fieldName 属性名
* @param o 对象 * @param o 对象
* @return 属性值 * @return 属性值
*/ */
public static Object getFieldValueByName(String fieldName, Object o) { public static Object getFieldValueByName(String fieldName, Object o) {
@ -69,6 +71,7 @@ public class BeanUtil {
/** /**
* 将对象转换为key value * 将对象转换为key value
* A=a&B=b&C=c 格式 * A=a&B=b&C=c 格式
*
* @param object 对象 * @param object 对象
* @return 格式化结果 * @return 格式化结果
*/ */
@ -87,6 +90,7 @@ public class BeanUtil {
String key = fieldNames[j]; String key = fieldNames[j];
//获取值 //获取值
Object value = BeanUtil.getFieldValueByName(key, object); Object value = BeanUtil.getFieldValueByName(key, object);
assert value != null;
stringBuffer.append(key).append("=").append(value.toString()); stringBuffer.append(key).append("=").append(value.toString());
} }
return stringBuffer.toString(); return stringBuffer.toString();
@ -95,8 +99,9 @@ public class BeanUtil {
/** /**
* key value键值对 转换为 对象 * key value键值对 转换为 对象
* A=a&B=b&C=c 格式 转换为对象 * A=a&B=b&C=c 格式 转换为对象
*
* @param str 对象字符串 * @param str 对象字符串
* @param t 范型 * @param t 范型
* @param <T> 范型 * @param <T> 范型
* @return 格式化结果 * @return 格式化结果
*/ */

View File

@ -1,6 +1,7 @@
package cn.lili.common.utils; package cn.lili.common.utils;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode;
/** /**
* 金额计算工具 * 金额计算工具
@ -28,9 +29,9 @@ public final class CurrencyUtil {
* @return 两个参数的和 * @return 两个参数的和
*/ */
public static Double add(double v1, double v2) { public static Double add(double v1, double v2) {
BigDecimal b1 = new BigDecimal(v1); BigDecimal b1 = BigDecimal.valueOf(v1);
BigDecimal b2 = new BigDecimal(v2); BigDecimal b2 = BigDecimal.valueOf(v2);
return b1.add(b2).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); return b1.add(b2).setScale(2, RoundingMode.HALF_UP).doubleValue();
} }
/** /**
@ -41,9 +42,9 @@ public final class CurrencyUtil {
* @return 两个参数的差 * @return 两个参数的差
*/ */
public static double sub(double v1, double v2) { public static double sub(double v1, double v2) {
BigDecimal b1 = new BigDecimal(v1); BigDecimal b1 = BigDecimal.valueOf(v1);
BigDecimal b2 = new BigDecimal(v2); BigDecimal b2 = BigDecimal.valueOf(v2);
return b1.subtract(b2).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); return b1.subtract(b2).setScale(2, RoundingMode.HALF_UP).doubleValue();
} }
/** /**
@ -54,9 +55,9 @@ public final class CurrencyUtil {
* @return 两个参数的积 * @return 两个参数的积
*/ */
public static Double mul(double v1, double v2) { public static Double mul(double v1, double v2) {
BigDecimal b1 = new BigDecimal(v1); BigDecimal b1 = BigDecimal.valueOf(v1);
BigDecimal b2 = new BigDecimal(v2); BigDecimal b2 = BigDecimal.valueOf(v2);
return b1.multiply(b2).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); return b1.multiply(b2).setScale(2, RoundingMode.HALF_UP).doubleValue();
} }
/** /**
@ -72,9 +73,9 @@ public final class CurrencyUtil {
throw new IllegalArgumentException( throw new IllegalArgumentException(
"The scale must be a positive integer or zero"); "The scale must be a positive integer or zero");
} }
BigDecimal b1 = new BigDecimal(v1); BigDecimal b1 = BigDecimal.valueOf(v1);
BigDecimal b2 = new BigDecimal(v2); BigDecimal b2 = BigDecimal.valueOf(v2);
return b1.multiply(b2).setScale(scale, BigDecimal.ROUND_HALF_UP).doubleValue(); return b1.multiply(b2).setScale(scale, RoundingMode.HALF_UP).doubleValue();
} }
/** /**
@ -105,26 +106,9 @@ public final class CurrencyUtil {
if (v2 == 0) { if (v2 == 0) {
return 0; return 0;
} }
BigDecimal b1 = new BigDecimal(v1); BigDecimal b1 = BigDecimal.valueOf(v1);
BigDecimal b2 = new BigDecimal(v2); BigDecimal b2 = BigDecimal.valueOf(v2);
return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue(); return b1.divide(b2, scale, RoundingMode.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();
} }
/** /**
@ -145,7 +129,6 @@ public final class CurrencyUtil {
* @return double类型分 * @return double类型分
*/ */
public static double reversalFen(Double money) { public static double reversalFen(Double money) {
double price = div(money, 100); return div(money, 100);
return price;
} }
} }

View File

@ -273,7 +273,7 @@ public class DateUtil {
* @return 时间戳 * @return 时间戳
*/ */
public static long getDateline(String date) { 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 时间戳 * @return 时间戳
*/ */
public static long getDateline(String date, String pattern) { public static long getDateline(String date, String pattern) {
return toDate(date, pattern).getTime() / 1000; return Objects.requireNonNull(toDate(date, pattern)).getTime() / 1000;
} }
/** /**

View File

@ -1,19 +1,25 @@
package cn.lili.common.utils; package cn.lili.common.utils;
import com.alibaba.fastjson.JSONObject;
import com.xkcoding.http.HttpUtil; import com.xkcoding.http.HttpUtil;
import com.xkcoding.http.config.HttpConfig; import com.xkcoding.http.config.HttpConfig;
import com.xkcoding.http.support.HttpHeader; import com.xkcoding.http.support.HttpHeader;
import com.xkcoding.http.support.httpclient.HttpClientImpl; 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; import java.util.Map;
/** /**
* HttpUtil 工具统一处理 http 请求方便对 simple-http 做定制 * HTTP 工具类
* * @author liushuai
* @author yadong.zhang (yadong.zhang0415(a)gmail.com)
* @version 4.1
* @since 1.0.0
*/ */
@Slf4j
public class HttpUtils { public class HttpUtils {
public HttpUtils(HttpConfig config) { public HttpUtils(HttpConfig config) {
@ -105,4 +111,258 @@ public class HttpUtils {
public String post(String url, Map<String, String> params, HttpHeader header, boolean encode) { public String post(String url, Map<String, String> params, HttpHeader header, boolean encode) {
return HttpUtil.post(url, params, header, 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<String, String> 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<String, String> 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<String, String> 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<String, String> parameters, String encoding) {
StringBuffer params = new StringBuffer();
if (parameters != null) {
for (Iterator<String> 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();
}
} }

View File

@ -1,4 +1,4 @@
package cn.lili.modules.connect.util; package cn.lili.common.utils;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.concurrent.ThreadLocalRandom; import java.util.concurrent.ThreadLocalRandom;

View File

@ -1,8 +1,10 @@
package cn.lili.modules.connect.request; package cn.lili.modules.connect.request;
import cn.lili.cache.Cache; import cn.lili.cache.Cache;
import cn.lili.common.utils.HttpUtils;
import cn.lili.common.utils.StringUtils; import cn.lili.common.utils.StringUtils;
import cn.lili.common.utils.UrlBuilder; 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.AuthConfig;
import cn.lili.modules.connect.config.ConnectAuth; import cn.lili.modules.connect.config.ConnectAuth;
import cn.lili.modules.connect.entity.dto.AuthCallback; 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.entity.enums.AuthResponseStatus;
import cn.lili.modules.connect.exception.AuthException; import cn.lili.modules.connect.exception.AuthException;
import cn.lili.modules.connect.util.AuthChecker; 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 com.xkcoding.http.util.UrlUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;

View File

@ -5,6 +5,7 @@ import cn.lili.common.security.token.Token;
import cn.lili.modules.connect.entity.Connect; import cn.lili.modules.connect.entity.Connect;
import cn.lili.modules.connect.entity.dto.ConnectAuthUser; import cn.lili.modules.connect.entity.dto.ConnectAuthUser;
import cn.lili.modules.connect.entity.dto.WechatMPLoginParams; import cn.lili.modules.connect.entity.dto.WechatMPLoginParams;
import cn.lili.modules.member.entity.dto.ConnectQueryDTO;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import javax.naming.NoPermissionException; import javax.naming.NoPermissionException;
@ -103,4 +104,12 @@ public interface ConnectService extends IService<Connect> {
* @return token * @return token
*/ */
Token miniProgramAutoLogin(WechatMPLoginParams params); Token miniProgramAutoLogin(WechatMPLoginParams params);
/**
* 根据查询dto获取查询对象
*
* @param connectQueryDTO
* @return
*/
Connect queryConnect(ConnectQueryDTO connectQueryDTO);
} }

View File

@ -12,6 +12,7 @@ import cn.lili.common.security.AuthUser;
import cn.lili.common.security.context.UserContext; import cn.lili.common.security.context.UserContext;
import cn.lili.common.security.token.Token; import cn.lili.common.security.token.Token;
import cn.lili.common.utils.CookieUtil; import cn.lili.common.utils.CookieUtil;
import cn.lili.common.utils.HttpUtils;
import cn.lili.common.utils.StringUtils; import cn.lili.common.utils.StringUtils;
import cn.lili.modules.connect.entity.Connect; import cn.lili.modules.connect.entity.Connect;
import cn.lili.modules.connect.entity.dto.ConnectAuthUser; 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.mapper.ConnectMapper;
import cn.lili.modules.connect.service.ConnectService; import cn.lili.modules.connect.service.ConnectService;
import cn.lili.modules.member.entity.dos.Member; 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.service.MemberService;
import cn.lili.modules.member.token.MemberTokenGenerate; import cn.lili.modules.member.token.MemberTokenGenerate;
import cn.lili.modules.system.entity.dos.Setting; 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.dto.connect.dto.WechatConnectSettingItem;
import cn.lili.modules.system.entity.enums.SettingEnum; import cn.lili.modules.system.entity.enums.SettingEnum;
import cn.lili.modules.system.service.SettingService; 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.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -232,6 +233,16 @@ public class ConnectServiceImpl extends ServiceImpl<ConnectMapper, Connect> impl
return memberTokenGenerate.createToken(newMember.getUsername(), true); return memberTokenGenerate.createToken(newMember.getUsername(), true);
} }
@Override
public Connect queryConnect(ConnectQueryDTO connectQueryDTO) {
LambdaQueryWrapper<Connect> 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);
}
/** /**
* 会员绑定 绑定微信小程序 * 会员绑定 绑定微信小程序
* <p> * <p>

View File

@ -1,6 +1,6 @@
package cn.lili.modules.distribution.entity.dos; 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 cn.lili.mybatis.BaseEntity;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;

View File

@ -49,10 +49,4 @@ public interface DistributionCashService extends IService<DistributionCash> {
*/ */
DistributionCash audit(@PathVariable String id, @RequestParam String result); DistributionCash audit(@PathVariable String id, @RequestParam String result);
/**
* 待处理分销员提现申请数量
*
* @return 待处理分销员提现申请数量
*/
Integer newDistributionCash();
} }

View File

@ -2,14 +2,10 @@ package cn.lili.modules.distribution.serviceimpl;
import cn.lili.common.enums.ResultCode; import cn.lili.common.enums.ResultCode;
import cn.lili.common.exception.ServiceException; import cn.lili.common.exception.ServiceException;
import cn.lili.modules.member.entity.enums.WithdrawStatusEnum; import cn.lili.common.properties.RocketmqCustomProperties;
import cn.lili.rocketmq.RocketmqSendCallbackBuilder;
import cn.lili.rocketmq.tags.MemberTagsEnum;
import cn.lili.common.utils.CurrencyUtil; import cn.lili.common.utils.CurrencyUtil;
import cn.lili.mybatis.util.PageUtil;
import cn.lili.common.utils.SnowFlake; import cn.lili.common.utils.SnowFlake;
import cn.lili.common.vo.PageVO; import cn.lili.common.vo.PageVO;
import cn.lili.common.properties.RocketmqCustomProperties;
import cn.lili.modules.distribution.entity.dos.Distribution; import cn.lili.modules.distribution.entity.dos.Distribution;
import cn.lili.modules.distribution.entity.dos.DistributionCash; import cn.lili.modules.distribution.entity.dos.DistributionCash;
import cn.lili.modules.distribution.entity.enums.DistributionStatusEnum; import cn.lili.modules.distribution.entity.enums.DistributionStatusEnum;
@ -17,13 +13,17 @@ import cn.lili.modules.distribution.entity.vos.DistributionCashSearchParams;
import cn.lili.modules.distribution.mapper.DistributionCashMapper; import cn.lili.modules.distribution.mapper.DistributionCashMapper;
import cn.lili.modules.distribution.service.DistributionCashService; import cn.lili.modules.distribution.service.DistributionCashService;
import cn.lili.modules.distribution.service.DistributionService; import cn.lili.modules.distribution.service.DistributionService;
import cn.lili.modules.member.entity.dto.MemberWithdrawalMessage; import cn.lili.modules.wallet.entity.dto.MemberWalletUpdateDTO;
import cn.lili.modules.member.entity.enums.MemberWithdrawalDestinationEnum; import cn.lili.modules.wallet.entity.dto.MemberWithdrawalMessage;
import cn.lili.modules.member.service.MemberWalletService; import cn.lili.modules.wallet.entity.enums.DepositServiceTypeEnum;
import cn.lili.modules.order.trade.entity.enums.DepositServiceTypeEnum; import cn.lili.modules.wallet.entity.enums.MemberWithdrawalDestinationEnum;
import cn.lili.modules.wallet.entity.enums.WithdrawStatusEnum;
import cn.lili.modules.wallet.service.MemberWalletService;
import cn.lili.mybatis.util.PageUtil;
import cn.lili.rocketmq.RocketmqSendCallbackBuilder;
import cn.lili.rocketmq.tags.MemberTagsEnum;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.rocketmq.spring.core.RocketMQTemplate; import org.apache.rocketmq.spring.core.RocketMQTemplate;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -130,7 +130,7 @@ public class DistributionCashServiceImpl extends ServiceImpl<DistributionCashMap
distributorCash.setDistributionCashStatus(WithdrawStatusEnum.VIA_AUDITING.name()); distributorCash.setDistributionCashStatus(WithdrawStatusEnum.VIA_AUDITING.name());
distributorCash.setPayTime(new Date()); distributorCash.setPayTime(new Date());
//提现到余额 //提现到余额
memberWalletService.increase(distributorCash.getPrice(), distribution.getMemberId(), "分销[" + distributorCash.getSn() + "]佣金提现到余额[" + distributorCash.getPrice() + "]", DepositServiceTypeEnum.WALLET_COMMISSION.name()); memberWalletService.increase(new MemberWalletUpdateDTO(distributorCash.getPrice(), distribution.getMemberId(), "分销[" + distributorCash.getSn() + "]佣金提现到余额[" + distributorCash.getPrice() + "]", DepositServiceTypeEnum.WALLET_COMMISSION.name()));
} else { } else {
memberWithdrawalMessage.setStatus(WithdrawStatusEnum.FAIL_AUDITING.name()); memberWithdrawalMessage.setStatus(WithdrawStatusEnum.FAIL_AUDITING.name());
//分销员可提现金额退回 //分销员可提现金额退回
@ -156,11 +156,4 @@ public class DistributionCashServiceImpl extends ServiceImpl<DistributionCashMap
throw new ServiceException(ResultCode.DISTRIBUTION_CASH_NOT_EXIST); throw new ServiceException(ResultCode.DISTRIBUTION_CASH_NOT_EXIST);
} }
@Override
public Integer newDistributionCash() {
QueryWrapper queryWrapper = Wrappers.query();
queryWrapper.eq("distribution_cash_status", WithdrawStatusEnum.APPLY.name());
return this.count(queryWrapper);
}
} }

View File

@ -4,7 +4,6 @@ import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateTime;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import cn.lili.common.utils.CurrencyUtil; 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.Distribution;
import cn.lili.modules.distribution.entity.dos.DistributionOrder; import cn.lili.modules.distribution.entity.dos.DistributionOrder;
import cn.lili.modules.distribution.entity.enums.DistributionOrderStatusEnum; 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.distribution.service.DistributionService;
import cn.lili.modules.order.order.entity.dos.Order; 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.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.entity.enums.PayStatusEnum;
import cn.lili.modules.order.order.service.OrderService; import cn.lili.modules.order.order.service.OrderService;
import cn.lili.modules.order.order.service.StoreFlowService; 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.dto.DistributionSetting;
import cn.lili.modules.system.entity.enums.SettingEnum; import cn.lili.modules.system.entity.enums.SettingEnum;
import cn.lili.modules.system.service.SettingService; 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.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
@ -87,10 +88,9 @@ public class DistributionOrderServiceImpl extends ServiceImpl<DistributionOrderM
//判断是否为分销订单如果为分销订单则获取分销佣金 //判断是否为分销订单如果为分销订单则获取分销佣金
if (order.getDistributionId() != null) { if (order.getDistributionId() != null) {
//根据订单编号获取有分销金额的店铺流水记录 //根据订单编号获取有分销金额的店铺流水记录
List<StoreFlow> storeFlowList = storeFlowService.list(new LambdaQueryWrapper<StoreFlow>() List<StoreFlow> storeFlowList = storeFlowService
.eq(StoreFlow::getOrderSn, orderSn) .listStoreFlow(StoreFlowQueryDTO.builder().justDistribution(true).orderSn(orderSn).build());
.isNotNull(StoreFlow::getDistributionRebate)); double rebate = 0.0;
Double rebate = 0.0;
//循环店铺流水记录判断是否包含分销商品 //循环店铺流水记录判断是否包含分销商品
//包含分销商品则进行记录分销订单计算分销总额 //包含分销商品则进行记录分销订单计算分销总额
for (StoreFlow storeFlow : storeFlowList) { for (StoreFlow storeFlow : storeFlowList) {
@ -165,7 +165,7 @@ public class DistributionOrderServiceImpl extends ServiceImpl<DistributionOrderM
return; return;
} }
//分销金额 //分销金额
Double rebate = 0.0; double rebate = 0.0;
//包含分销商品则进行记录分销订单计算分销总额 //包含分销商品则进行记录分销订单计算分销总额
for (DistributionOrder distributionOrder : distributionOrderList) { for (DistributionOrder distributionOrder : distributionOrderList) {
@ -187,9 +187,7 @@ public class DistributionOrderServiceImpl extends ServiceImpl<DistributionOrderM
@Override @Override
public void refundOrder(String afterSaleSn) { public void refundOrder(String afterSaleSn) {
//判断是否为分销订单 //判断是否为分销订单
StoreFlow storeFlow = storeFlowService.getOne(new LambdaQueryWrapper<StoreFlow>() StoreFlow storeFlow = storeFlowService.queryOne(StoreFlowQueryDTO.builder().justDistribution(true).refundSn(afterSaleSn).build());
.eq(StoreFlow::getRefundSn, afterSaleSn)
.isNotNull(StoreFlow::getDistributionRebate));
if (storeFlow != null) { if (storeFlow != null) {
//获取收款分销订单 //获取收款分销订单
@ -199,12 +197,7 @@ public class DistributionOrderServiceImpl extends ServiceImpl<DistributionOrderM
if (distributionOrder == null) { if (distributionOrder == null) {
return; return;
} }
//已提交无法重复提交 if (distributionOrder.getDistributionOrderStatus().equals(DistributionOrderStatusEnum.WAIT_BILL.name())) {
if (distributionOrder.getDistributionOrderStatus().equals(DistributionOrderStatusEnum.CANCEL.name())) {
return;
}
//如果未结算则将分销订单取消
else if (distributionOrder.getDistributionOrderStatus().equals(DistributionOrderStatusEnum.WAIT_BILL.name())) {
this.update(new LambdaUpdateWrapper<DistributionOrder>() this.update(new LambdaUpdateWrapper<DistributionOrder>()
.eq(DistributionOrder::getOrderItemSn, storeFlow.getOrderItemSn()) .eq(DistributionOrder::getOrderItemSn, storeFlow.getOrderItemSn())
.set(DistributionOrder::getDistributionOrderStatus, DistributionOrderStatusEnum.CANCEL.name())); .set(DistributionOrder::getDistributionOrderStatus, DistributionOrderStatusEnum.CANCEL.name()));

View File

@ -37,13 +37,4 @@ public interface FileManagerPlugin {
*/ */
void deleteFile(List<String> key); void deleteFile(List<String> key);
/**
* 根据原图生成规定尺寸的图片
*
* @param url 连接
* @param width
* @param height
* @return
*/
String getUrl(String url, Integer width, Integer height);
} }

View File

@ -183,11 +183,4 @@ public class AliFileManagerPlugin implements FileManagerPlugin {
ossClient.shutdown(); ossClient.shutdown();
} }
} }
@Override
public String getUrl(String url, Integer width, Integer height) {
//缩略图全路径
//返回缩略图全路径
return url + "?x-oss-process=style/" + width + "X" + height;
}
} }

View File

@ -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;
}
}

View File

@ -1,4 +1,4 @@
package cn.lili.modules.store.entity.dos; package cn.lili.modules.goods.entity.dos;
import cn.lili.mybatis.BaseEntity; import cn.lili.mybatis.BaseEntity;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;

View File

@ -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;
}

View File

@ -1,4 +1,4 @@
package cn.lili.modules.store.entity.vos; package cn.lili.modules.goods.entity.vos;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;

View File

@ -1,6 +1,6 @@
package cn.lili.modules.store.mapper; package cn.lili.modules.goods.mapper;
import cn.lili.modules.store.entity.dos.StoreGoodsLabel; import cn.lili.modules.goods.entity.dos.StoreGoodsLabel;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/** /**

View File

@ -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.GoodsAuthEnum;
import cn.lili.modules.goods.entity.enums.GoodsStatusEnum; import cn.lili.modules.goods.entity.enums.GoodsStatusEnum;
import cn.lili.modules.goods.entity.vos.GoodsVO; 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.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
@ -91,21 +92,6 @@ public interface GoodsService extends IService<Goods> {
*/ */
boolean auditGoods(List<String> goodsIds, GoodsAuthEnum goodsAuthEnum); boolean auditGoods(List<String> goodsIds, GoodsAuthEnum goodsAuthEnum);
/**
* 获取所有的已上架的商品数量
*
* @param goodsAuthEnum 商品审核枚举
* @param goodsStatusEnum 商品状态枚举
* @return 所有的已上架的商品数量
*/
Integer goodsNum(GoodsStatusEnum goodsStatusEnum, GoodsAuthEnum goodsAuthEnum);
/**
* 获取今天的已上架的商品数量
*
* @return 今天的已上架的商品数量
*/
Integer todayUpperNum();
/** /**
* 更新商品上架状态状态 * 更新商品上架状态状态
@ -148,4 +134,16 @@ public interface GoodsService extends IService<Goods> {
* @param goodsId 商品ID * @param goodsId 商品ID
*/ */
void updateGoodsCommentNum(String goodsId); void updateGoodsCommentNum(String goodsId);
/**
* 批量更新商品的店铺信息
* @param store
*/
void updateStoreDetail(Store store);
/**
* 统计店铺的商品数量
* @param storeId 店铺id
*/
Integer countStoreGoodsNum(String storeId);
} }

View File

@ -1,7 +1,7 @@
package cn.lili.modules.store.service; package cn.lili.modules.goods.service;
import cn.lili.modules.store.entity.dos.StoreGoodsLabel; import cn.lili.modules.goods.entity.dos.StoreGoodsLabel;
import cn.lili.modules.store.entity.vos.StoreGoodsLabelVO; import cn.lili.modules.goods.entity.vos.StoreGoodsLabelVO;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List; import java.util.List;

View File

@ -1,7 +1,7 @@
package cn.lili.modules.goods.serviceimpl; package cn.lili.modules.goods.serviceimpl;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import cn.lili.modules.file.plugin.FileManagerPlugin; import cn.lili.modules.file.util.FileUtil;
import cn.lili.modules.goods.entity.dos.GoodsGallery; import cn.lili.modules.goods.entity.dos.GoodsGallery;
import cn.lili.modules.goods.mapper.GoodsGalleryMapper; import cn.lili.modules.goods.mapper.GoodsGalleryMapper;
import cn.lili.modules.goods.service.GoodsGalleryService; import cn.lili.modules.goods.service.GoodsGalleryService;
@ -29,11 +29,6 @@ import java.util.List;
@Service @Service
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public class GoodsGalleryServiceImpl extends ServiceImpl<GoodsGalleryMapper, GoodsGallery> implements GoodsGalleryService { public class GoodsGalleryServiceImpl extends ServiceImpl<GoodsGalleryMapper, GoodsGallery> implements GoodsGalleryService {
/**
* 文件
*/
@Autowired
private FileManagerPlugin fileManagerPlugin;
/** /**
* 设置 * 设置
*/ */
@ -65,9 +60,9 @@ public class GoodsGalleryServiceImpl extends ServiceImpl<GoodsGalleryMapper, Goo
Setting setting = settingService.get(SettingEnum.GOODS_SETTING.name()); Setting setting = settingService.get(SettingEnum.GOODS_SETTING.name());
GoodsSetting goodsSetting = JSONUtil.toBean(setting.getSettingValue(), GoodsSetting.class); GoodsSetting goodsSetting = JSONUtil.toBean(setting.getSettingValue(), GoodsSetting.class);
//缩略图 //缩略图
String thumbnail = fileManagerPlugin.getUrl(origin, goodsSetting.getAbbreviationPictureWidth(), goodsSetting.getAbbreviationPictureHeight()); String thumbnail = FileUtil.getUrl(origin, goodsSetting.getAbbreviationPictureWidth(), goodsSetting.getAbbreviationPictureHeight());
//小图 //小图
String small = fileManagerPlugin.getUrl(origin, goodsSetting.getSmallPictureWidth(), goodsSetting.getSmallPictureHeight()); String small = FileUtil.getUrl(origin, goodsSetting.getSmallPictureWidth(), goodsSetting.getSmallPictureHeight());
//赋值 //赋值
goodsGallery.setSmall(small); goodsGallery.setSmall(small);
goodsGallery.setThumbnail(thumbnail); goodsGallery.setThumbnail(thumbnail);

View File

@ -1,7 +1,5 @@
package cn.lili.modules.goods.serviceimpl; package cn.lili.modules.goods.serviceimpl;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.text.CharSequenceUtil; import cn.hutool.core.text.CharSequenceUtil;
import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.NumberUtil;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
@ -29,6 +27,7 @@ import cn.lili.modules.member.entity.dos.MemberEvaluation;
import cn.lili.modules.member.entity.enums.EvaluationGradeEnum; import cn.lili.modules.member.entity.enums.EvaluationGradeEnum;
import cn.lili.modules.member.service.MemberEvaluationService; import cn.lili.modules.member.service.MemberEvaluationService;
import cn.lili.modules.store.entity.dos.FreightTemplate; import cn.lili.modules.store.entity.dos.FreightTemplate;
import cn.lili.modules.store.entity.dos.Store;
import cn.lili.modules.store.entity.vos.StoreVO; import cn.lili.modules.store.entity.vos.StoreVO;
import cn.lili.modules.store.service.FreightTemplateService; import cn.lili.modules.store.service.FreightTemplateService;
import cn.lili.modules.store.service.StoreService; import cn.lili.modules.store.service.StoreService;
@ -42,6 +41,7 @@ import cn.lili.rocketmq.tags.GoodsTagsEnum;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@ -121,8 +121,8 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements
@Override @Override
public List<Goods> getByBrandIds(List<String> brandIds) { public List<Goods> getByBrandIds(List<String> brandIds) {
LambdaQueryWrapper<Goods> lambdaQueryWrapper = new LambdaQueryWrapper<Goods> (); LambdaQueryWrapper<Goods> lambdaQueryWrapper = new LambdaQueryWrapper<Goods>();
lambdaQueryWrapper.in(Goods::getBrandId,brandIds); lambdaQueryWrapper.in(Goods::getBrandId, brandIds);
return list(lambdaQueryWrapper); return list(lambdaQueryWrapper);
} }
@ -273,33 +273,6 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements
return result; return result;
} }
@Override
public Integer goodsNum(GoodsStatusEnum goodsStatusEnum, GoodsAuthEnum goodsAuthEnum) {
LambdaQueryWrapper<Goods> 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<Goods> queryWrapper = Wrappers.lambdaQuery();
queryWrapper.eq(Goods::getMarketEnable, GoodsStatusEnum.UPPER.name());
queryWrapper.ge(Goods::getCreateTime, DateUtil.beginOfDay(new DateTime()));
return this.count(queryWrapper);
}
@Override @Override
public Boolean updateGoodsMarketAble(List<String> goodsIds, GoodsStatusEnum goodsStatusEnum, String underReason) { public Boolean updateGoodsMarketAble(List<String> goodsIds, GoodsStatusEnum goodsStatusEnum, String underReason) {
boolean result; boolean result;
@ -396,6 +369,25 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements
this.updateById(goods); this.updateById(goods);
} }
@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 Integer countStoreGoodsNum(String storeId) {
return this.count(
new LambdaQueryWrapper<Goods>()
.eq(Goods::getStoreId, storeId)
.eq(Goods::getIsAuth, GoodsAuthEnum.PASS.name())
.eq(Goods::getMarketEnable, GoodsStatusEnum.UPPER.name()));
}
/** /**
* 添加商品默认图片 * 添加商品默认图片
* *
@ -490,12 +482,12 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements
*/ */
private AuthUser checkStoreAuthority() { private AuthUser checkStoreAuthority() {
AuthUser currentUser = UserContext.getCurrentUser(); AuthUser currentUser = UserContext.getCurrentUser();
if (currentUser == null || (currentUser.getRole().equals(UserEnums.STORE) && currentUser.getStoreId() == null)) { //如果当前会员不为空且为店铺角色
throw new ServiceException(ResultCode.USER_AUTHORITY_ERROR); if (currentUser != null && (currentUser.getRole().equals(UserEnums.STORE) && currentUser.getStoreId() != null)) {
} else if (currentUser.getRole().equals(UserEnums.STORE) && currentUser.getStoreId() != null) {
return currentUser; return currentUser;
} else {
throw new ServiceException(ResultCode.USER_AUTHORITY_ERROR);
} }
return null;
} }
/** /**

View File

@ -535,6 +535,7 @@ public class GoodsSkuServiceImpl extends ServiceImpl<GoodsSkuMapper, GoodsSku> i
* *
* @param goods 商品信息 * @param goods 商品信息
*/ */
@Override
public void generateEs(Goods goods) { public void generateEs(Goods goods) {
String destination = rocketmqCustomProperties.getGoodsTopic() + ":" + GoodsTagsEnum.GENERATOR_GOODS_INDEX.name(); String destination = rocketmqCustomProperties.getGoodsTopic() + ":" + GoodsTagsEnum.GENERATOR_GOODS_INDEX.name();
//发送mq消息 //发送mq消息

View File

@ -1,4 +1,4 @@
package cn.lili.modules.store.serviceimpl; package cn.lili.modules.goods.serviceimpl;
import cn.hutool.core.text.CharSequenceUtil; import cn.hutool.core.text.CharSequenceUtil;
import cn.lili.cache.Cache; import cn.lili.cache.Cache;
@ -7,10 +7,10 @@ import cn.lili.common.enums.ResultCode;
import cn.lili.common.exception.ServiceException; import cn.lili.common.exception.ServiceException;
import cn.lili.common.security.AuthUser; import cn.lili.common.security.AuthUser;
import cn.lili.common.security.context.UserContext; import cn.lili.common.security.context.UserContext;
import cn.lili.modules.store.entity.dos.StoreGoodsLabel; import cn.lili.modules.goods.entity.dos.StoreGoodsLabel;
import cn.lili.modules.store.entity.vos.StoreGoodsLabelVO; import cn.lili.modules.goods.entity.vos.StoreGoodsLabelVO;
import cn.lili.modules.store.mapper.StoreGoodsLabelMapper; import cn.lili.modules.goods.mapper.StoreGoodsLabelMapper;
import cn.lili.modules.store.service.StoreGoodsLabelService; import cn.lili.modules.goods.service.StoreGoodsLabelService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;

View File

@ -3,11 +3,11 @@ package cn.lili.modules.goods.util;
import cn.hutool.json.JSONObject; import cn.hutool.json.JSONObject;
import cn.lili.common.enums.ClientTypeEnum; import cn.lili.common.enums.ClientTypeEnum;
import cn.lili.common.exception.ServiceException; 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.Commodity;
import cn.lili.modules.goods.entity.dos.Studio; import cn.lili.modules.goods.entity.dos.Studio;
import cn.lili.modules.goods.entity.dto.GoodsInfo; import cn.lili.modules.goods.entity.dto.GoodsInfo;
import cn.lili.modules.message.util.WechatAccessTokenUtil; import cn.lili.modules.wechat.util.WechatAccessTokenUtil;
import cn.lili.modules.system.utils.HttpUtils;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;

View File

@ -4,7 +4,7 @@ import cn.hutool.json.JSONObject;
import cn.lili.common.enums.ClientTypeEnum; import cn.lili.common.enums.ClientTypeEnum;
import cn.lili.common.enums.ResultCode; import cn.lili.common.enums.ResultCode;
import cn.lili.common.exception.ServiceException; 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 lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@ -105,8 +105,9 @@ public class WechatMediaUtil {
} catch (Exception e) { } catch (Exception e) {
log.error("微信媒体上传失败", e); log.error("微信媒体上传失败", e);
} }
assert resultStr != null;
JSONObject jsonObject = new JSONObject(resultStr.toString()); JSONObject jsonObject = new JSONObject(resultStr.toString());
log.info("微信媒体上传:" + jsonObject.toString()); log.info("微信媒体上传:" + jsonObject);
//判断是否传递成功如果token过期则重新获取 //判断是否传递成功如果token过期则重新获取
if (jsonObject.get("errcode") != null && ("40001").equals(jsonObject.get("errcode"))) { if (jsonObject.get("errcode") != null && ("40001").equals(jsonObject.get("errcode"))) {
wechatAccessTokenUtil.removeAccessToken(ClientTypeEnum.WECHAT_MP); wechatAccessTokenUtil.removeAccessToken(ClientTypeEnum.WECHAT_MP);

View File

@ -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;
}

View File

@ -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;
}

View File

@ -2,7 +2,6 @@ package cn.lili.modules.member.mapper;
import cn.lili.modules.member.entity.dos.Member; 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 cn.lili.modules.member.entity.vo.MemberVO;
import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
@ -28,13 +27,6 @@ public interface MemberMapper extends BaseMapper<Member> {
@Select("select m.mobile from li_member m") @Select("select m.mobile from li_member m")
List<String> getAllMemberMobile(); List<String> getAllMemberMobile();
/**
* 获取会员分布列表
* @return 会员分布列表
*/
@Select("select client_enum,count(0) as num from li_member group by client_enum")
List<MemberDistributionVO> distribution();
@Select("select * from li_member ${ew.customSqlSegment}") @Select("select * from li_member ${ew.customSqlSegment}")
IPage<MemberVO> pageByMemberVO(IPage<MemberVO> page, @Param(Constants.WRAPPER) Wrapper<Member> queryWrapper); IPage<MemberVO> pageByMemberVO(IPage<MemberVO> page, @Param(Constants.WRAPPER) Wrapper<Member> queryWrapper);
} }

View File

@ -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.store.entity.dos.StoreLogistics;
import cn.lili.modules.system.entity.vo.StoreLogisticsVO; import cn.lili.modules.system.entity.vo.StoreLogisticsVO;

View File

@ -88,18 +88,5 @@ public interface MemberEvaluationService extends IService<MemberEvaluation> {
*/ */
EvaluationNumberVO getEvaluationNumber(String goodsId); EvaluationNumberVO getEvaluationNumber(String goodsId);
/**
* 获取今天新增的评价数量
*
* @return 今日评价数量
*/
Integer todayMemberEvaluation();
/**
* 获取等待回复评价数量
*
* @return 等待回复评价数量
*/
Integer getWaitReplyNum();
} }

View File

@ -9,7 +9,6 @@ import cn.lili.modules.member.entity.dos.Member;
import cn.lili.modules.member.entity.dto.ManagerMemberEditDTO; import cn.lili.modules.member.entity.dto.ManagerMemberEditDTO;
import cn.lili.modules.member.entity.dto.MemberAddDTO; import cn.lili.modules.member.entity.dto.MemberAddDTO;
import cn.lili.modules.member.entity.dto.MemberEditDTO; 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.MemberSearchVO;
import cn.lili.modules.member.entity.vo.MemberVO; import cn.lili.modules.member.entity.vo.MemberVO;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
@ -198,13 +197,6 @@ public interface MemberService extends IService<Member> {
*/ */
Boolean updateMemberStatus(List<String> memberIds, Boolean status); Boolean updateMemberStatus(List<String> memberIds, Boolean status);
/**
* 查看会员数据分布
*
* @return 会员数据分布
*/
List<MemberDistributionVO> distribution();
/** /**
* 根据条件查询会员总数 * 根据条件查询会员总数
* *

View File

@ -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.store.entity.dos.StoreLogistics;
import cn.lili.modules.system.entity.vo.StoreLogisticsVO; import cn.lili.modules.system.entity.vo.StoreLogisticsVO;

View File

@ -1,24 +1,18 @@
package cn.lili.modules.member.serviceimpl; package cn.lili.modules.member.serviceimpl;
import cn.hutool.json.JSONUtil;
import cn.lili.common.enums.ResultCode; import cn.lili.common.enums.ResultCode;
import cn.lili.common.exception.ServiceException; 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.common.security.context.UserContext;
import cn.lili.mybatis.util.PageUtil;
import cn.lili.common.vo.PageVO; 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.dos.GoodsCollection;
import cn.lili.modules.member.entity.vo.GoodsCollectionVO; import cn.lili.modules.member.entity.vo.GoodsCollectionVO;
import cn.lili.modules.member.mapper.GoodsCollectionMapper; import cn.lili.modules.member.mapper.GoodsCollectionMapper;
import cn.lili.modules.member.service.GoodsCollectionService; 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.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 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.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@ -33,19 +27,8 @@ import java.util.Optional;
*/ */
@Service @Service
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public class GoodsCollectionServiceImpl extends ServiceImpl<GoodsCollectionMapper, GoodsCollection> implements GoodsCollectionService { public class GoodsCollectionServiceImpl extends ServiceImpl<GoodsCollectionMapper, GoodsCollection> implements GoodsCollectionService {
/**
* rocketMq
*/
@Autowired
private RocketMQTemplate rocketMQTemplate;
/**
* rocketMq配置
*/
@Autowired
private RocketmqCustomProperties rocketmqCustomProperties;
@Override @Override
public IPage<GoodsCollectionVO> goodsCollection(PageVO pageVo) { public IPage<GoodsCollectionVO> goodsCollection(PageVO pageVo) {
@ -73,10 +56,6 @@ public class GoodsCollectionServiceImpl extends ServiceImpl<GoodsCollectionMappe
goodsCollection = new GoodsCollection(UserContext.getCurrentUser().getId(), skuId); goodsCollection = new GoodsCollection(UserContext.getCurrentUser().getId(), skuId);
this.save(goodsCollection); this.save(goodsCollection);
//商品收藏消息
String destination = rocketmqCustomProperties.getGoodsTopic() + ":" + GoodsTagsEnum.GOODS_COLLECTION.name();
//发送mq消息
rocketMQTemplate.asyncSend(destination, JSONUtil.toJsonStr(skuId), RocketmqSendCallbackBuilder.commonCallback());
return goodsCollection; return goodsCollection;
} }
throw new ServiceException(ResultCode.USER_COLLECTION_EXIST); throw new ServiceException(ResultCode.USER_COLLECTION_EXIST);

View File

@ -1,18 +1,13 @@
package cn.lili.modules.member.serviceimpl; package cn.lili.modules.member.serviceimpl;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import cn.lili.common.enums.ResultCode; import cn.lili.common.enums.ResultCode;
import cn.lili.common.enums.SwitchEnum; import cn.lili.common.enums.SwitchEnum;
import cn.lili.common.exception.ServiceException; 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.common.security.enums.UserEnums;
import cn.lili.mybatis.util.PageUtil;
import cn.lili.common.utils.StringUtils;
import cn.lili.common.properties.RocketmqCustomProperties; import cn.lili.common.properties.RocketmqCustomProperties;
import cn.lili.common.security.context.UserContext;
import cn.lili.common.sensitive.SensitiveWordsFilter;
import cn.lili.common.utils.StringUtils;
import cn.lili.modules.goods.entity.dos.GoodsSku; import cn.lili.modules.goods.entity.dos.GoodsSku;
import cn.lili.modules.goods.service.GoodsSkuService; import cn.lili.modules.goods.service.GoodsSkuService;
import cn.lili.modules.member.entity.dos.Member; import cn.lili.modules.member.entity.dos.Member;
@ -31,9 +26,9 @@ import cn.lili.modules.order.order.entity.dos.OrderItem;
import cn.lili.modules.order.order.entity.enums.CommentStatusEnum; import cn.lili.modules.order.order.entity.enums.CommentStatusEnum;
import cn.lili.modules.order.order.service.OrderItemService; import cn.lili.modules.order.order.service.OrderItemService;
import cn.lili.modules.order.order.service.OrderService; import cn.lili.modules.order.order.service.OrderService;
import cn.lili.modules.system.utils.CharacterConstant; import cn.lili.mybatis.util.PageUtil;
import cn.lili.modules.system.utils.SensitiveWordsFilter; import cn.lili.rocketmq.RocketmqSendCallbackBuilder;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import cn.lili.rocketmq.tags.GoodsTagsEnum;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
@ -121,7 +116,7 @@ public class MemberEvaluationServiceImpl extends ServiceImpl<MemberEvaluationMap
//新增用户评价 //新增用户评价
MemberEvaluation memberEvaluation = new MemberEvaluation(memberEvaluationDTO, goodsSku, member, order); MemberEvaluation memberEvaluation = new MemberEvaluation(memberEvaluationDTO, goodsSku, member, order);
//过滤商品咨询敏感词 //过滤商品咨询敏感词
memberEvaluation.setContent(SensitiveWordsFilter.filter(memberEvaluation.getContent(), CharacterConstant.WILDCARD_STAR)); memberEvaluation.setContent(SensitiveWordsFilter.filter(memberEvaluation.getContent()));
//添加评价 //添加评价
this.save(memberEvaluation); this.save(memberEvaluation);
@ -196,20 +191,6 @@ public class MemberEvaluationServiceImpl extends ServiceImpl<MemberEvaluationMap
return evaluationNumberVO; return evaluationNumberVO;
} }
@Override
public Integer todayMemberEvaluation() {
return this.count(new LambdaQueryWrapper<MemberEvaluation>().ge(MemberEvaluation::getCreateTime, DateUtil.beginOfDay(new DateTime())));
}
@Override
public Integer getWaitReplyNum() {
QueryWrapper<MemberEvaluation> 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);
}
/** /**
* 检测会员评价 * 检测会员评价
* *

View File

@ -14,23 +14,20 @@ import cn.lili.common.security.AuthUser;
import cn.lili.common.security.context.UserContext; import cn.lili.common.security.context.UserContext;
import cn.lili.common.security.enums.UserEnums; import cn.lili.common.security.enums.UserEnums;
import cn.lili.common.security.token.Token; import cn.lili.common.security.token.Token;
import cn.lili.common.sensitive.SensitiveWordsFilter;
import cn.lili.common.utils.BeanUtil; import cn.lili.common.utils.BeanUtil;
import cn.lili.common.utils.CookieUtil; import cn.lili.common.utils.CookieUtil;
import cn.lili.common.utils.StringUtils; import cn.lili.common.utils.StringUtils;
import cn.lili.common.utils.UuidUtils;
import cn.lili.common.vo.PageVO; import cn.lili.common.vo.PageVO;
import cn.lili.modules.connect.config.ConnectAuthEnum; import cn.lili.modules.connect.config.ConnectAuthEnum;
import cn.lili.modules.connect.entity.Connect; import cn.lili.modules.connect.entity.Connect;
import cn.lili.modules.connect.entity.dto.ConnectAuthUser; import cn.lili.modules.connect.entity.dto.ConnectAuthUser;
import cn.lili.modules.connect.service.ConnectService; 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.aop.annotation.PointLogPoint;
import cn.lili.modules.member.entity.dos.Member; import cn.lili.modules.member.entity.dos.Member;
import cn.lili.modules.member.entity.dto.ManagerMemberEditDTO; import cn.lili.modules.member.entity.dto.*;
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.enums.PointTypeEnum; 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.MemberSearchVO;
import cn.lili.modules.member.entity.vo.MemberVO; import cn.lili.modules.member.entity.vo.MemberVO;
import cn.lili.modules.member.mapper.MemberMapper; import cn.lili.modules.member.mapper.MemberMapper;
@ -40,12 +37,9 @@ import cn.lili.modules.member.token.StoreTokenGenerate;
import cn.lili.modules.store.entity.dos.Store; import cn.lili.modules.store.entity.dos.Store;
import cn.lili.modules.store.entity.enums.StoreStatusEnum; import cn.lili.modules.store.entity.enums.StoreStatusEnum;
import cn.lili.modules.store.service.StoreService; 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.mybatis.util.PageUtil;
import cn.lili.rocketmq.RocketmqSendCallbackBuilder; import cn.lili.rocketmq.RocketmqSendCallbackBuilder;
import cn.lili.rocketmq.tags.MemberTagsEnum; 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.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
@ -352,7 +346,7 @@ public class MemberServiceImpl extends ServiceImpl<MemberMapper, Member> impleme
} }
//过滤会员昵称敏感词 //过滤会员昵称敏感词
if (com.baomidou.mybatisplus.core.toolkit.StringUtils.isNotBlank(managerMemberEditDTO.getNickName())) { 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())) { if (com.baomidou.mybatisplus.core.toolkit.StringUtils.isNotBlank(managerMemberEditDTO.getPassword())) {
@ -429,13 +423,6 @@ public class MemberServiceImpl extends ServiceImpl<MemberMapper, Member> impleme
return this.update(updateWrapper); return this.update(updateWrapper);
} }
@Override
public List<MemberDistributionVO> distribution() {
List<MemberDistributionVO> memberDistributionVOS = this.baseMapper.distribution();
return memberDistributionVOS;
}
/** /**
* 根据手机号获取会员 * 根据手机号获取会员
* *
@ -471,10 +458,9 @@ public class MemberServiceImpl extends ServiceImpl<MemberMapper, Member> impleme
* @param type 状态 * @param type 状态
*/ */
private void loginBindUser(Member member, String unionId, String type) { private void loginBindUser(Member member, String unionId, String type) {
LambdaQueryWrapper<Connect> queryWrapper = new LambdaQueryWrapper<>(); Connect connect = connectService.queryConnect(
queryWrapper.eq(Connect::getUnionId, unionId); ConnectQueryDTO.builder().unionId(unionId).unionType(type).build()
queryWrapper.eq(Connect::getUnionType, type); );
Connect connect = connectService.getOne(queryWrapper);
if (connect == null) { if (connect == null) {
connect = new Connect(member.getId(), unionId, type); connect = new Connect(member.getId(), unionId, type);
connectService.save(connect); connectService.save(connect);
@ -498,11 +484,9 @@ public class MemberServiceImpl extends ServiceImpl<MemberMapper, Member> impleme
if (connectAuthUser == null) { if (connectAuthUser == null) {
return; return;
} }
//检测是否已经绑定过用户 Connect connect = connectService.queryConnect(
LambdaQueryWrapper<Connect> queryWrapper = new LambdaQueryWrapper<>(); ConnectQueryDTO.builder().unionId(connectAuthUser.getUuid()).unionType(connectType).build()
queryWrapper.eq(Connect::getUnionId, connectAuthUser.getUuid()); );
queryWrapper.eq(Connect::getUnionType, connectType);
Connect connect = connectService.getOne(queryWrapper);
if (connect == null) { if (connect == null) {
connect = new Connect(member.getId(), connectAuthUser.getUuid(), connectType); connect = new Connect(member.getId(), connectAuthUser.getUuid(), connectType);
connectService.save(connect); connectService.save(connect);
@ -544,10 +528,9 @@ public class MemberServiceImpl extends ServiceImpl<MemberMapper, Member> impleme
throw new ServiceException(ResultCode.USER_OVERDUE_CONNECT_ERROR); throw new ServiceException(ResultCode.USER_OVERDUE_CONNECT_ERROR);
} }
//检测是否已经绑定过用户 //检测是否已经绑定过用户
LambdaQueryWrapper<Connect> queryWrapper = new LambdaQueryWrapper<>(); Connect connect = connectService.queryConnect(
queryWrapper.eq(Connect::getUnionId, connectAuthUser.getUuid()); ConnectQueryDTO.builder().unionType(connectType).unionId(connectAuthUser.getUuid()).build()
queryWrapper.eq(Connect::getUnionType, connectType); );
Connect connect = connectService.getOne(queryWrapper);
//没有关联则返回true表示可以继续绑定 //没有关联则返回true表示可以继续绑定
if (connect == null) { if (connect == null) {
connectAuthUser.setConnectEnum(authInterface); connectAuthUser.setConnectEnum(authInterface);

Some files were not shown because too many files have changed in this diff Show More