'合并订单多售后功能'

This commit is contained in:
fengtianyangyang 2021-11-30 15:03:49 +08:00
commit 94968799c3
138 changed files with 975 additions and 864 deletions

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

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

@ -7,7 +7,7 @@ import cn.lili.modules.member.entity.dos.Member;
import cn.lili.modules.member.entity.dto.MemberEditDTO;
import cn.lili.modules.member.service.MemberService;
import cn.lili.modules.system.sms.SmsUtil;
import cn.lili.modules.verification.enums.VerificationEnums;
import cn.lili.modules.verification.entity.enums.VerificationEnums;
import cn.lili.modules.verification.service.VerificationService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;

View File

@ -11,7 +11,7 @@ import cn.lili.modules.connect.entity.dto.ConnectAuthUser;
import cn.lili.modules.connect.request.AuthRequest;
import cn.lili.modules.connect.service.ConnectService;
import cn.lili.modules.connect.util.ConnectUtil;
import cn.lili.modules.connect.util.UuidUtils;
import cn.lili.common.utils.UuidUtils;
import cn.lili.modules.member.service.MemberService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;

View File

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

View File

@ -2,16 +2,16 @@ package cn.lili.controller.trade;
import cn.lili.common.enums.ResultUtil;
import cn.lili.common.vo.ResultMessage;
import cn.lili.modules.order.order.entity.dos.AfterSale;
import cn.lili.modules.order.order.entity.dos.AfterSaleReason;
import cn.lili.modules.order.order.entity.dto.AfterSaleDTO;
import cn.lili.modules.order.order.entity.vo.AfterSaleApplyVO;
import cn.lili.modules.order.order.entity.vo.AfterSaleSearchParams;
import cn.lili.modules.order.order.entity.vo.AfterSaleVO;
import cn.lili.modules.order.order.service.AfterSaleLogService;
import cn.lili.modules.order.order.service.AfterSaleReasonService;
import cn.lili.modules.order.order.service.AfterSaleService;
import cn.lili.modules.order.trade.entity.dos.AfterSaleLog;
import cn.lili.modules.order.aftersale.entity.dos.AfterSale;
import cn.lili.modules.order.aftersale.entity.dos.AfterSaleReason;
import cn.lili.modules.order.aftersale.entity.dto.AfterSaleDTO;
import cn.lili.modules.order.aftersale.entity.vo.AfterSaleApplyVO;
import cn.lili.modules.order.aftersale.entity.vo.AfterSaleSearchParams;
import cn.lili.modules.order.aftersale.entity.vo.AfterSaleVO;
import cn.lili.modules.order.aftersale.service.AfterSaleLogService;
import cn.lili.modules.order.aftersale.service.AfterSaleReasonService;
import cn.lili.modules.order.aftersale.service.AfterSaleService;
import cn.lili.modules.order.aftersale.entity.dos.AfterSaleLog;
import cn.lili.modules.store.entity.dto.StoreAfterSaleAddressDTO;
import cn.lili.common.security.OperationalJudgment;
import com.baomidou.mybatisplus.core.metadata.IPage;

View File

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

View File

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

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

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.security.context.UserContext;
import cn.lili.common.vo.PageVO;
import cn.lili.common.vo.ResultMessage;
import cn.lili.modules.member.entity.dos.MemberWithdrawApply;
import cn.lili.modules.member.entity.vo.MemberWithdrawApplyQueryVO;
import cn.lili.modules.member.service.MemberWithdrawApplyService;
import cn.lili.modules.wallet.entity.dos.MemberWithdrawApply;
import cn.lili.modules.wallet.entity.vo.MemberWithdrawApplyQueryVO;
import cn.lili.modules.wallet.service.MemberWithdrawApplyService;
import com.baomidou.mybatisplus.core.metadata.IPage;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;

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.security.context.UserContext;
import cn.lili.common.vo.PageVO;
import cn.lili.common.vo.ResultMessage;
import cn.lili.modules.order.trade.entity.dos.Recharge;
import cn.lili.modules.wallet.entity.dos.Recharge;
import cn.lili.modules.order.trade.entity.vo.RechargeQueryVO;
import cn.lili.modules.order.trade.service.RechargeService;
import cn.lili.modules.wallet.service.RechargeService;
import com.baomidou.mybatisplus.core.metadata.IPage;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;

View File

@ -3,7 +3,7 @@ package cn.lili.controller.common;
import cn.lili.cache.limit.annotation.LimitPoint;
import cn.lili.common.enums.ResultUtil;
import cn.lili.common.vo.ResultMessage;
import cn.lili.modules.verification.enums.VerificationEnums;
import cn.lili.modules.verification.entity.enums.VerificationEnums;
import cn.lili.modules.verification.service.VerificationService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;

View File

@ -5,7 +5,7 @@ import cn.lili.common.enums.ResultCode;
import cn.lili.common.enums.ResultUtil;
import cn.lili.common.vo.ResultMessage;
import cn.lili.modules.system.sms.SmsUtil;
import cn.lili.modules.verification.enums.VerificationEnums;
import cn.lili.modules.verification.entity.enums.VerificationEnums;
import cn.lili.modules.verification.service.VerificationService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;

View File

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

View File

@ -1,6 +1,6 @@
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.mapper.DistributionOrderMapper;
import cn.lili.modules.distribution.service.DistributionOrderService;
import cn.lili.modules.order.order.entity.dos.AfterSale;
import cn.lili.modules.order.aftersale.entity.dos.AfterSale;
import cn.lili.modules.order.order.entity.dto.OrderMessage;
import cn.lili.modules.order.trade.entity.enums.AfterSaleStatusEnum;
import cn.lili.timetask.handler.EveryDayExecute;

View File

@ -1,7 +1,6 @@
package cn.lili.event.impl;
import cn.hutool.core.convert.Convert;
import cn.lili.common.utils.CurrencyUtil;
import cn.lili.common.utils.StringUtils;
import cn.lili.event.AfterSaleStatusChangeEvent;
@ -12,11 +11,10 @@ import cn.lili.modules.member.entity.dos.Member;
import cn.lili.modules.member.entity.dos.MemberEvaluation;
import cn.lili.modules.member.entity.enums.PointTypeEnum;
import cn.lili.modules.member.service.MemberService;
import cn.lili.modules.order.order.entity.dos.AfterSale;
import cn.lili.modules.order.aftersale.entity.dos.AfterSale;
import cn.lili.modules.order.order.entity.dos.Order;
import cn.lili.modules.order.order.entity.dto.OrderMessage;
import cn.lili.modules.order.order.entity.enums.OrderPromotionTypeEnum;
import cn.lili.modules.order.order.entity.enums.OrderStatusEnum;
import cn.lili.modules.order.order.entity.enums.PayStatusEnum;
import cn.lili.modules.order.order.service.OrderService;
import cn.lili.modules.order.trade.entity.enums.AfterSaleStatusEnum;

View File

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

View File

@ -2,16 +2,16 @@ package cn.lili.event.impl;
import cn.lili.event.*;
import cn.lili.modules.member.entity.dto.MemberPointMessage;
import cn.lili.modules.member.entity.dto.MemberWithdrawalMessage;
import cn.lili.modules.member.entity.enums.MemberWithdrawalDestinationEnum;
import cn.lili.modules.wallet.entity.dto.MemberWithdrawalMessage;
import cn.lili.modules.wallet.entity.enums.MemberWithdrawalDestinationEnum;
import cn.lili.modules.member.entity.enums.PointTypeEnum;
import cn.lili.modules.member.entity.enums.WithdrawStatusEnum;
import cn.lili.modules.wallet.entity.enums.WithdrawStatusEnum;
import cn.lili.modules.message.entity.dto.NoticeMessageDTO;
import cn.lili.modules.message.entity.enums.NoticeMessageNodeEnum;
import cn.lili.modules.message.entity.enums.NoticeMessageParameterEnum;
import cn.lili.modules.message.service.NoticeMessageService;
import cn.lili.modules.order.cart.entity.dto.TradeDTO;
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.enums.OrderPromotionTypeEnum;
import cn.lili.modules.order.order.entity.vo.OrderDetailVO;

View File

@ -0,0 +1,39 @@
package cn.lili.init;
import cn.lili.cache.Cache;
import cn.lili.cache.CachePrefix;
import cn.lili.common.sensitive.SensitiveWordsFilter;
import cn.lili.modules.system.service.SensitiveWordsService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* 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

@ -3,7 +3,7 @@ package cn.lili.listener;
import cn.hutool.json.JSONUtil;
import cn.lili.rocketmq.tags.AfterSaleTagsEnum;
import cn.lili.event.AfterSaleStatusChangeEvent;
import cn.lili.modules.order.order.entity.dos.AfterSale;
import cn.lili.modules.order.aftersale.entity.dos.AfterSale;
import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.common.message.MessageExt;
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;

View File

@ -8,7 +8,7 @@ import cn.lili.event.MemberWithdrawalEvent;
import cn.lili.modules.member.entity.dos.Member;
import cn.lili.modules.member.entity.dos.MemberSign;
import cn.lili.modules.member.entity.dto.MemberPointMessage;
import cn.lili.modules.member.entity.dto.MemberWithdrawalMessage;
import cn.lili.modules.wallet.entity.dto.MemberWithdrawalMessage;
import cn.lili.modules.member.service.MemberSignService;
import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.common.message.MessageExt;

View File

@ -15,7 +15,7 @@ import cn.lili.modules.order.order.entity.enums.OrderComplaintStatusEnum;
import cn.lili.modules.order.order.entity.enums.OrderItemAfterSaleStatusEnum;
import cn.lili.modules.order.order.entity.enums.OrderStatusEnum;
import cn.lili.modules.order.order.mapper.OrderItemMapper;
import cn.lili.modules.order.order.service.AfterSaleService;
import cn.lili.modules.order.aftersale.service.AfterSaleService;
import cn.lili.modules.order.order.service.OrderItemService;
import cn.lili.modules.order.order.service.OrderService;
import cn.lili.modules.system.entity.dos.Setting;

View File

@ -4,8 +4,8 @@ import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.json.JSONUtil;
import cn.lili.modules.order.order.entity.enums.PayStatusEnum;
import cn.lili.modules.order.trade.entity.dos.Recharge;
import cn.lili.modules.order.trade.service.RechargeService;
import cn.lili.modules.wallet.entity.dos.Recharge;
import cn.lili.modules.wallet.service.RechargeService;
import cn.lili.modules.system.entity.dos.Setting;
import cn.lili.modules.system.entity.dto.OrderSetting;
import cn.lili.modules.system.entity.enums.SettingEnum;

View File

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

View File

@ -35,7 +35,20 @@ public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper {
*
* @todo 这里的参数应该更智能些例如iv前端的参数包含这两个字母就会放过这是有问题的
*/
private static final String[] IGNORE_FIELD = {"logo", "url", "photo", "intro", "content", "name", "image", "encrypted", "iv","mail"};
private static final String[] IGNORE_FIELD = {
"logo",
"url",
"photo",
"intro",
"content",
"name",
"image",
"encrypted",
"iv",
"mail",
"privateKey",
"wechatpay",
};
public XssHttpServletRequestWrapper(HttpServletRequest request) {
super(request);

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 org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;
import java.io.Serializable;
import java.util.List;
@ -21,9 +15,12 @@ import java.util.NavigableSet;
* 2020-02-25 14:10:16
*/
@Slf4j
@Component
public class SensitiveWordsFilter implements Serializable, ApplicationRunner {
public class SensitiveWordsFilter implements Serializable {
/**
* 字符*
*/
public final static char WILDCARD_STAR = '*';
/**
* 为2的n次方考虑到敏感词大概在10k左右
@ -37,98 +34,27 @@ public class SensitiveWordsFilter implements Serializable, ApplicationRunner {
* 类似HashMap的桶比较稀疏
* 使用2个字符的hash定位
*/
protected static SensitiveWordsNode[] nodes;
@Autowired
private SensitiveWordsService sensitiveWordsService;
protected static SensitiveWordsNode[] nodes = new SensitiveWordsNode[0];
/**
* 增加一个敏感词如果词的长度trim后小于2则丢弃<br/>
* 此方法构建并不是主要的性能优化点
*
* @param word 敏感词
* @return 操作结果
* 更新中的nodes用于防止动态更新时原有nodes被清空导致无法正常写入过滤词
*/
public static boolean put(String word) {
protected static SensitiveWordsNode[] nodesUpdate;
//长度小于2的不加入
if (word == null || word.trim().length() < 2) {
return false;
}
//两个字符的不考虑
if (word.length() == 2 && word.matches("\\w\\w")) {
return false;
}
StringPointer sp = new StringPointer(word.trim());
//计算头两个字符的hash
int hash = sp.nextTwoCharHash(0);
//计算头两个字符的mix表示mix相同两个字符相同
int mix = sp.nextTwoCharMix(0);
//转为在hash桶中的位置
int index = hash & (nodes.length - 1);
//从桶里拿第一个节点
SensitiveWordsNode node = nodes[index];
if (node == null) {
//如果没有节点则放进去一个
node = new SensitiveWordsNode(mix);
//并添加词
node.words.add(sp);
//放入桶里
nodes[index] = node;
} else {
//如果已经有节点1个或多个找到正确的节点
for (; node != null; node = node.next) {
//匹配节点
if (node.headTwoCharMix == mix) {
node.words.add(sp);
return true;
}
//如果匹配到最后仍然不成功则追加一个节点
if (node.next == null) {
new SensitiveWordsNode(mix, node).words.add(sp);
return true;
}
}
}
return true;
}
/**
* 移除敏感词
* 过滤铭感次
*
* @param word
* @param sentence 过滤赐予
* @return
*/
public static void remove(String word) {
StringPointer sp = new StringPointer(word.trim());
//计算头两个字符的hash
int hash = sp.nextTwoCharHash(0);
//计算头两个字符的mix表示mix相同两个字符相同
int mix = sp.nextTwoCharMix(0);
//转为在hash桶中的位置
int index = hash & (nodes.length - 1);
SensitiveWordsNode node = nodes[index];
for (; node != null; node = node.next) {
//匹配节点
if (node.headTwoCharMix == mix) {
node.words.remove(sp);
}
}
public static String filter(String sentence) {
return filter(sentence, WILDCARD_STAR);
}
/**
* 对句子进行敏感词过滤<br/>
* 如果无敏感词返回输入的sentence对象即可以用下面的方式判断是否有敏感词<br/><code>
* String result = filter.filter(sentence, CharacterConstant.WILDCARD_STAR);<br/>
* if(result != sentence){<br/>
* &nbsp;&nbsp;//有敏感词<br/>
* }
* </code>
* 如果无敏感词返回输入的sentence对象即可以用下面的方式判断是否有敏感词<br/>
*
* @param sentence 句子
* @param replace 敏感词的替换字符
@ -224,25 +150,96 @@ public class SensitiveWordsFilter implements Serializable, ApplicationRunner {
}
}
/**
* 初始化敏感词
*
* @param args
* @throws Exception
*/
@Override
public void run(ApplicationArguments args) {
try {
nodes = new SensitiveWordsNode[DEFAULT_INITIAL_CAPACITY];
//加入平台添加的敏感词
List<SensitiveWords> list = sensitiveWordsService.list();
if (list != null && list.size() > 0) {
for (SensitiveWords sensitiveWords : list) {
put(sensitiveWords.getSensitiveWord());
public static void init(List<String> words) {
log.info("开始初始化敏感词");
nodesUpdate = new SensitiveWordsNode[DEFAULT_INITIAL_CAPACITY];
for (String word : words) {
put(word);
}
nodes = nodesUpdate;
}
/**
* 增加一个敏感词如果词的长度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.util.TreeSet;

View File

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

@ -1,6 +1,7 @@
package cn.lili.common.utils;
import java.math.BigDecimal;
import java.math.RoundingMode;
/**
* 金额计算工具
@ -30,7 +31,7 @@ public final class CurrencyUtil {
public static Double add(double v1, double v2) {
BigDecimal b1 = new BigDecimal(v1);
BigDecimal b2 = new BigDecimal(v2);
return b1.add(b2).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
return b1.add(b2).setScale(2, RoundingMode.HALF_UP).doubleValue();
}
/**
@ -43,7 +44,7 @@ public final class CurrencyUtil {
public static double sub(double v1, double v2) {
BigDecimal b1 = new BigDecimal(v1);
BigDecimal b2 = new BigDecimal(v2);
return b1.subtract(b2).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
return b1.subtract(b2).setScale(2, RoundingMode.HALF_UP).doubleValue();
}
/**
@ -56,7 +57,7 @@ public final class CurrencyUtil {
public static Double mul(double v1, double v2) {
BigDecimal b1 = new BigDecimal(v1);
BigDecimal b2 = new BigDecimal(v2);
return b1.multiply(b2).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
return b1.multiply(b2).setScale(2, RoundingMode.HALF_UP).doubleValue();
}
/**
@ -74,7 +75,7 @@ public final class CurrencyUtil {
}
BigDecimal b1 = new BigDecimal(v1);
BigDecimal b2 = new BigDecimal(v2);
return b1.multiply(b2).setScale(scale, BigDecimal.ROUND_HALF_UP).doubleValue();
return b1.multiply(b2).setScale(scale, RoundingMode.HALF_UP).doubleValue();
}
/**
@ -107,7 +108,7 @@ public final class CurrencyUtil {
}
BigDecimal b1 = new BigDecimal(v1);
BigDecimal b2 = new BigDecimal(v2);
return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
return b1.divide(b2, scale, RoundingMode.HALF_UP).doubleValue();
}
/**
@ -124,7 +125,7 @@ public final class CurrencyUtil {
}
BigDecimal b = new BigDecimal(v);
BigDecimal one = new BigDecimal("1");
return b.divide(one, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
return b.divide(one, scale, RoundingMode.HALF_UP).doubleValue();
}
/**
@ -145,7 +146,6 @@ public final class CurrencyUtil {
* @return double类型分
*/
public static double reversalFen(Double money) {
double price = div(money, 100);
return price;
return div(money, 100);
}
}

View File

@ -1,19 +1,25 @@
package cn.lili.common.utils;
import com.alibaba.fastjson.JSONObject;
import com.xkcoding.http.HttpUtil;
import com.xkcoding.http.config.HttpConfig;
import com.xkcoding.http.support.HttpHeader;
import com.xkcoding.http.support.httpclient.HttpClientImpl;
import lombok.extern.slf4j.Slf4j;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.Iterator;
import java.util.Map;
/**
* HttpUtil 工具统一处理 http 请求方便对 simple-http 做定制
*
* @author yadong.zhang (yadong.zhang0415(a)gmail.com)
* @version 4.1
* @since 1.0.0
* HTTP 工具类
* @author liushuai
*/
@Slf4j
public class HttpUtils {
public HttpUtils(HttpConfig config) {
@ -105,4 +111,258 @@ public class HttpUtils {
public String post(String url, Map<String, String> params, HttpHeader header, boolean encode) {
return HttpUtil.post(url, params, header, encode);
}
/**
* 静态方法运行参数
*/
public static final int HTTP_CONN_TIMEOUT = 100000;
public static final int HTTP_SOCKET_TIMEOUT = 100000;
/**
* POST 静态方法请求
*
* @param reqUrl
* @param parameters
* @param encoding
* @param connectTimeout
* @param readTimeout
* @return
*/
public static String doPost(String reqUrl, Map<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.util.concurrent.ThreadLocalRandom;

View File

@ -13,7 +13,7 @@ import cn.lili.modules.connect.entity.enums.AuthResponseStatus;
import cn.lili.modules.connect.exception.AuthException;
import cn.lili.modules.connect.util.AuthChecker;
import cn.lili.common.utils.HttpUtils;
import cn.lili.modules.connect.util.UuidUtils;
import cn.lili.common.utils.UuidUtils;
import com.xkcoding.http.util.UrlUtil;
import lombok.extern.slf4j.Slf4j;

View File

@ -12,6 +12,7 @@ import cn.lili.common.security.AuthUser;
import cn.lili.common.security.context.UserContext;
import cn.lili.common.security.token.Token;
import cn.lili.common.utils.CookieUtil;
import cn.lili.common.utils.HttpUtils;
import cn.lili.common.utils.StringUtils;
import cn.lili.modules.connect.entity.Connect;
import cn.lili.modules.connect.entity.dto.ConnectAuthUser;
@ -27,7 +28,6 @@ import cn.lili.modules.system.entity.dto.connect.WechatConnectSetting;
import cn.lili.modules.system.entity.dto.connect.dto.WechatConnectSettingItem;
import cn.lili.modules.system.entity.enums.SettingEnum;
import cn.lili.modules.system.service.SettingService;
import cn.lili.modules.system.utils.HttpUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;

View File

@ -1,6 +1,6 @@
package cn.lili.modules.distribution.entity.dos;
import cn.lili.modules.member.entity.enums.WithdrawStatusEnum;
import cn.lili.modules.wallet.entity.enums.WithdrawStatusEnum;
import cn.lili.mybatis.BaseEntity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;

View File

@ -2,7 +2,7 @@ package cn.lili.modules.distribution.serviceimpl;
import cn.lili.common.enums.ResultCode;
import cn.lili.common.exception.ServiceException;
import cn.lili.modules.member.entity.enums.WithdrawStatusEnum;
import cn.lili.modules.wallet.entity.enums.WithdrawStatusEnum;
import cn.lili.rocketmq.RocketmqSendCallbackBuilder;
import cn.lili.rocketmq.tags.MemberTagsEnum;
import cn.lili.common.utils.CurrencyUtil;
@ -17,10 +17,10 @@ import cn.lili.modules.distribution.entity.vos.DistributionCashSearchParams;
import cn.lili.modules.distribution.mapper.DistributionCashMapper;
import cn.lili.modules.distribution.service.DistributionCashService;
import cn.lili.modules.distribution.service.DistributionService;
import cn.lili.modules.member.entity.dto.MemberWithdrawalMessage;
import cn.lili.modules.member.entity.enums.MemberWithdrawalDestinationEnum;
import cn.lili.modules.member.service.MemberWalletService;
import cn.lili.modules.order.trade.entity.enums.DepositServiceTypeEnum;
import cn.lili.modules.wallet.entity.dto.MemberWithdrawalMessage;
import cn.lili.modules.wallet.entity.enums.MemberWithdrawalDestinationEnum;
import cn.lili.modules.wallet.service.MemberWalletService;
import cn.lili.modules.wallet.entity.enums.DepositServiceTypeEnum;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;

View File

@ -37,13 +37,4 @@ public interface FileManagerPlugin {
*/
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();
}
}
@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,7 +1,7 @@
package cn.lili.modules.goods.serviceimpl;
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.mapper.GoodsGalleryMapper;
import cn.lili.modules.goods.service.GoodsGalleryService;
@ -29,11 +29,6 @@ import java.util.List;
@Service
@Transactional(rollbackFor = Exception.class)
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());
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.setThumbnail(thumbnail);

View File

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

View File

@ -31,8 +31,7 @@ import cn.lili.modules.order.order.entity.dos.OrderItem;
import cn.lili.modules.order.order.entity.enums.CommentStatusEnum;
import cn.lili.modules.order.order.service.OrderItemService;
import cn.lili.modules.order.order.service.OrderService;
import cn.lili.modules.system.utils.CharacterConstant;
import cn.lili.modules.system.utils.SensitiveWordsFilter;
import cn.lili.common.sensitive.SensitiveWordsFilter;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
@ -121,7 +120,7 @@ public class MemberEvaluationServiceImpl extends ServiceImpl<MemberEvaluationMap
//新增用户评价
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);

View File

@ -22,7 +22,7 @@ import cn.lili.modules.connect.config.ConnectAuthEnum;
import cn.lili.modules.connect.entity.Connect;
import cn.lili.modules.connect.entity.dto.ConnectAuthUser;
import cn.lili.modules.connect.service.ConnectService;
import cn.lili.modules.connect.util.UuidUtils;
import cn.lili.common.utils.UuidUtils;
import cn.lili.modules.member.aop.annotation.PointLogPoint;
import cn.lili.modules.member.entity.dos.Member;
import cn.lili.modules.member.entity.dto.ManagerMemberEditDTO;
@ -40,8 +40,7 @@ import cn.lili.modules.member.token.StoreTokenGenerate;
import cn.lili.modules.store.entity.dos.Store;
import cn.lili.modules.store.entity.enums.StoreStatusEnum;
import cn.lili.modules.store.service.StoreService;
import cn.lili.modules.system.utils.CharacterConstant;
import cn.lili.modules.system.utils.SensitiveWordsFilter;
import cn.lili.common.sensitive.SensitiveWordsFilter;
import cn.lili.mybatis.util.PageUtil;
import cn.lili.rocketmq.RocketmqSendCallbackBuilder;
import cn.lili.rocketmq.tags.MemberTagsEnum;
@ -351,7 +350,7 @@ public class MemberServiceImpl extends ServiceImpl<MemberMapper, Member> impleme
}
//过滤会员昵称敏感词
if (com.baomidou.mybatisplus.core.toolkit.StringUtils.isNotBlank(managerMemberEditDTO.getNickName())) {
managerMemberEditDTO.setNickName(SensitiveWordsFilter.filter(managerMemberEditDTO.getNickName(), CharacterConstant.WILDCARD_STAR));
managerMemberEditDTO.setNickName(SensitiveWordsFilter.filter(managerMemberEditDTO.getNickName()));
}
//如果密码不为空则加密密码
if (com.baomidou.mybatisplus.core.toolkit.StringUtils.isNotBlank(managerMemberEditDTO.getPassword())) {

View File

@ -1,5 +1,6 @@
package cn.lili.modules.message.entity.dos;
import cn.lili.mybatis.BaseIdEntity;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@ -15,7 +16,7 @@ import lombok.Data;
@Data
@TableName("li_sms_sign")
@ApiModel(value = "短信签名")
public class SmsSign {
public class SmsSign extends BaseIdEntity {
@ApiModelProperty(value = "签名名称", required = true)
private String signName;

View File

@ -65,7 +65,7 @@ public class SmsSignServiceImpl extends ServiceImpl<SmsSignMapper, SmsSign> impl
try {
Map<String, Object> map = new HashMap<>(16);
//获取未审核通过的签名列表
List<SmsSign> list = list(new LambdaQueryWrapper<SmsSign>().eq(SmsSign::getSignStatus, 0));
List<SmsSign> list = list(new LambdaQueryWrapper<SmsSign>().ne(SmsSign::getSignStatus, 1));
//查询签名状态
for (SmsSign smsSign : list) {
map = aliSmsUtil.querySmsSign(smsSign.getSignName());

View File

@ -7,6 +7,7 @@ import cn.hutool.json.JSONUtil;
import cn.lili.common.enums.ResultCode;
import cn.lili.common.exception.ServiceException;
import cn.lili.common.enums.ClientTypeEnum;
import cn.lili.common.utils.HttpUtils;
import cn.lili.modules.message.entity.dos.WechatMPMessage;
import cn.lili.modules.message.entity.enums.WechatMessageItemEnums;
import cn.lili.modules.message.mapper.WechatMPMessageMapper;
@ -14,7 +15,6 @@ import cn.lili.modules.message.service.WechatMPMessageService;
import cn.lili.modules.message.util.WechatAccessTokenUtil;
import cn.lili.modules.message.util.WechatMessageUtil;
import cn.lili.modules.order.order.entity.enums.OrderStatusEnum;
import cn.lili.modules.system.utils.HttpUtils;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.AllArgsConstructor;
import lombok.Data;

View File

@ -6,6 +6,7 @@ import cn.hutool.json.JSONUtil;
import cn.lili.common.enums.ResultCode;
import cn.lili.common.exception.ServiceException;
import cn.lili.common.enums.ClientTypeEnum;
import cn.lili.common.utils.HttpUtils;
import cn.lili.modules.message.entity.dos.WechatMessage;
import cn.lili.modules.message.entity.enums.WechatMessageItemEnums;
import cn.lili.modules.message.mapper.WechatMessageMapper;
@ -13,7 +14,6 @@ import cn.lili.modules.message.service.WechatMessageService;
import cn.lili.modules.message.util.WechatAccessTokenUtil;
import cn.lili.modules.message.util.WechatMessageUtil;
import cn.lili.modules.order.order.entity.enums.OrderStatusEnum;
import cn.lili.modules.system.utils.HttpUtils;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.AllArgsConstructor;
import lombok.Data;

View File

@ -20,7 +20,7 @@ import cn.lili.modules.order.order.entity.dos.Order;
import cn.lili.modules.order.order.entity.dos.OrderItem;
import cn.lili.modules.order.order.service.OrderItemService;
import cn.lili.modules.order.order.service.OrderService;
import cn.lili.modules.system.utils.HttpUtils;
import cn.lili.common.utils.HttpUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.extern.slf4j.Slf4j;

View File

@ -1,4 +1,4 @@
package cn.lili.modules.order.order.aop;
package cn.lili.modules.order.aftersale.aop;
import java.lang.annotation.*;

View File

@ -1,12 +1,12 @@
package cn.lili.modules.order.order.aop;
package cn.lili.modules.order.aftersale.aop;
import cn.lili.common.security.AuthUser;
import cn.lili.common.security.context.UserContext;
import cn.lili.common.security.enums.UserEnums;
import cn.lili.common.utils.SpelUtil;
import cn.lili.common.utils.ThreadPoolUtil;
import cn.lili.modules.order.order.service.AfterSaleLogService;
import cn.lili.modules.order.trade.entity.dos.AfterSaleLog;
import cn.lili.modules.order.aftersale.service.AfterSaleLogService;
import cn.lili.modules.order.aftersale.entity.dos.AfterSaleLog;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
@ -32,7 +32,7 @@ public class AfterSaleOperationLogAspect {
@Autowired
private AfterSaleLogService afterSaleLogService;
@AfterReturning(returning = "rvt", pointcut = "@annotation(cn.lili.modules.order.order.aop.AfterSaleLogPoint)")
@AfterReturning(returning = "rvt", pointcut = "@annotation(cn.lili.modules.order.aftersale.aop.AfterSaleLogPoint)")
public void afterReturning(JoinPoint joinPoint, Object rvt) {
try {
AuthUser auth = UserContext.getCurrentUser();

View File

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

View File

@ -1,4 +1,4 @@
package cn.lili.modules.order.trade.entity.dos;
package cn.lili.modules.order.aftersale.entity.dos;
import cn.lili.common.security.enums.UserEnums;
import cn.lili.mybatis.BaseIdEntity;

View File

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

View File

@ -1,4 +1,4 @@
package cn.lili.modules.order.order.entity.dto;
package cn.lili.modules.order.aftersale.entity.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

View File

@ -1,4 +1,4 @@
package cn.lili.modules.order.order.entity.dto;
package cn.lili.modules.order.aftersale.entity.dto;
import cn.lili.modules.promotion.entity.dto.BasePromotion;

View File

@ -1,4 +1,4 @@
package cn.lili.modules.order.order.entity.enums;
package cn.lili.modules.order.aftersale.entity.enums;
/**
* 交易投诉状态

View File

@ -1,6 +1,6 @@
package cn.lili.modules.order.order.entity.vo;
package cn.lili.modules.order.aftersale.entity.vo;
import cn.lili.modules.order.order.entity.dos.AfterSale;
import cn.lili.modules.order.aftersale.entity.dos.AfterSale;
import cn.lili.modules.order.trade.entity.enums.AfterSaleStatusEnum;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

View File

@ -1,4 +1,4 @@
package cn.lili.modules.order.order.entity.vo;
package cn.lili.modules.order.aftersale.entity.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

View File

@ -1,4 +1,4 @@
package cn.lili.modules.order.order.entity.vo;
package cn.lili.modules.order.aftersale.entity.vo;
import cn.lili.common.security.context.UserContext;
import cn.lili.common.security.enums.UserEnums;

View File

@ -1,6 +1,6 @@
package cn.lili.modules.order.order.entity.vo;
package cn.lili.modules.order.aftersale.entity.vo;
import cn.lili.modules.order.order.entity.dos.AfterSale;
import cn.lili.modules.order.aftersale.entity.dos.AfterSale;
import jdk.nashorn.internal.objects.annotations.Getter;
import lombok.Data;

View File

@ -1,6 +1,6 @@
package cn.lili.modules.order.trade.mapper;
package cn.lili.modules.order.aftersale.mapper;
import cn.lili.modules.order.trade.entity.dos.AfterSaleLog;
import cn.lili.modules.order.aftersale.entity.dos.AfterSaleLog;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**

View File

@ -1,7 +1,7 @@
package cn.lili.modules.order.order.mapper;
package cn.lili.modules.order.aftersale.mapper;
import cn.lili.modules.order.order.entity.dos.AfterSale;
import cn.lili.modules.order.order.entity.vo.AfterSaleVO;
import cn.lili.modules.order.aftersale.entity.dos.AfterSale;
import cn.lili.modules.order.aftersale.entity.vo.AfterSaleVO;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;

View File

@ -1,6 +1,6 @@
package cn.lili.modules.order.order.mapper;
package cn.lili.modules.order.aftersale.mapper;
import cn.lili.modules.order.order.entity.dos.AfterSaleReason;
import cn.lili.modules.order.aftersale.entity.dos.AfterSaleReason;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**

View File

@ -1,6 +1,6 @@
package cn.lili.modules.order.order.service;
package cn.lili.modules.order.aftersale.service;
import cn.lili.modules.order.trade.entity.dos.AfterSaleLog;
import cn.lili.modules.order.aftersale.entity.dos.AfterSaleLog;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;

View File

@ -1,6 +1,6 @@
package cn.lili.modules.order.order.service;
package cn.lili.modules.order.aftersale.service;
import cn.lili.modules.order.order.entity.dos.AfterSaleReason;
import cn.lili.modules.order.aftersale.entity.dos.AfterSaleReason;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;

View File

@ -1,12 +1,12 @@
package cn.lili.modules.order.order.service;
package cn.lili.modules.order.aftersale.service;
import cn.lili.common.vo.PageVO;
import cn.lili.modules.order.order.entity.dos.AfterSale;
import cn.lili.modules.order.order.entity.dto.AfterSaleDTO;
import cn.lili.modules.order.order.entity.vo.AfterSaleApplyVO;
import cn.lili.modules.order.order.entity.vo.AfterSaleSearchParams;
import cn.lili.modules.order.order.entity.vo.AfterSaleVO;
import cn.lili.modules.order.aftersale.entity.dos.AfterSale;
import cn.lili.modules.order.aftersale.entity.dto.AfterSaleDTO;
import cn.lili.modules.order.aftersale.entity.vo.AfterSaleApplyVO;
import cn.lili.modules.order.aftersale.entity.vo.AfterSaleSearchParams;
import cn.lili.modules.order.aftersale.entity.vo.AfterSaleVO;
import cn.lili.modules.statistics.entity.dto.StatisticsQueryParam;
import cn.lili.modules.store.entity.dto.StoreAfterSaleAddressDTO;
import cn.lili.modules.system.entity.vo.Traces;

View File

@ -1,8 +1,8 @@
package cn.lili.modules.order.order.serviceimpl;
package cn.lili.modules.order.aftersale.serviceimpl;
import cn.lili.modules.order.order.service.AfterSaleLogService;
import cn.lili.modules.order.trade.entity.dos.AfterSaleLog;
import cn.lili.modules.order.trade.mapper.AfterSaleLogMapper;
import cn.lili.modules.order.aftersale.service.AfterSaleLogService;
import cn.lili.modules.order.aftersale.entity.dos.AfterSaleLog;
import cn.lili.modules.order.aftersale.mapper.AfterSaleLogMapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;

View File

@ -1,8 +1,8 @@
package cn.lili.modules.order.order.serviceimpl;
package cn.lili.modules.order.aftersale.serviceimpl;
import cn.lili.modules.order.order.entity.dos.AfterSaleReason;
import cn.lili.modules.order.order.mapper.AfterSaleReasonMapper;
import cn.lili.modules.order.order.service.AfterSaleReasonService;
import cn.lili.modules.order.aftersale.entity.dos.AfterSaleReason;
import cn.lili.modules.order.aftersale.mapper.AfterSaleReasonMapper;
import cn.lili.modules.order.aftersale.service.AfterSaleReasonService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;

View File

@ -1,4 +1,4 @@
package cn.lili.modules.order.order.serviceimpl;
package cn.lili.modules.order.aftersale.serviceimpl;
import cn.hutool.core.text.CharSequenceUtil;
import cn.hutool.core.util.NumberUtil;
@ -13,17 +13,21 @@ import cn.lili.common.utils.BeanUtil;
import cn.lili.common.utils.CurrencyUtil;
import cn.lili.common.utils.SnowFlake;
import cn.lili.common.vo.PageVO;
import cn.lili.modules.order.order.aop.AfterSaleLogPoint;
import cn.lili.modules.order.order.entity.dos.AfterSale;
import cn.lili.modules.order.aftersale.aop.AfterSaleLogPoint;
import cn.lili.modules.order.aftersale.entity.dos.AfterSale;
import cn.lili.modules.order.order.entity.dos.Order;
import cn.lili.modules.order.order.entity.dos.OrderItem;
import cn.lili.modules.order.order.entity.dto.AfterSaleDTO;
import cn.lili.modules.order.order.entity.enums.*;
import cn.lili.modules.order.order.entity.vo.AfterSaleApplyVO;
import cn.lili.modules.order.order.entity.vo.AfterSaleSearchParams;
import cn.lili.modules.order.order.entity.vo.AfterSaleVO;
import cn.lili.modules.order.order.mapper.AfterSaleMapper;
import cn.lili.modules.order.order.service.AfterSaleService;
import cn.lili.modules.order.aftersale.entity.dto.AfterSaleDTO;
import cn.lili.modules.order.order.entity.enums.OrderItemAfterSaleStatusEnum;
import cn.lili.modules.order.order.entity.enums.OrderStatusEnum;
import cn.lili.modules.order.order.entity.enums.OrderTypeEnum;
import cn.lili.modules.order.order.entity.enums.PayStatusEnum;
import cn.lili.modules.order.aftersale.entity.vo.AfterSaleApplyVO;
import cn.lili.modules.order.aftersale.entity.vo.AfterSaleSearchParams;
import cn.lili.modules.order.aftersale.entity.vo.AfterSaleVO;
import cn.lili.modules.order.aftersale.mapper.AfterSaleMapper;
import cn.lili.modules.order.aftersale.service.AfterSaleService;
import cn.lili.modules.order.order.service.OrderItemService;
import cn.lili.modules.order.order.service.OrderService;
import cn.lili.modules.order.trade.entity.enums.AfterSaleRefundWayEnum;

View File

@ -1,6 +1,6 @@
package cn.lili.modules.order.order.entity.dos;
import cn.lili.modules.order.order.entity.enums.ComplaintStatusEnum;
import cn.lili.modules.order.aftersale.entity.enums.ComplaintStatusEnum;
import cn.lili.mybatis.BaseEntity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;

View File

@ -2,7 +2,7 @@ package cn.lili.modules.order.order.entity.vo;
import cn.hutool.core.util.StrUtil;
import cn.lili.modules.order.order.entity.dos.OrderComplaint;
import cn.lili.modules.order.order.entity.enums.ComplaintStatusEnum;
import cn.lili.modules.order.aftersale.entity.enums.ComplaintStatusEnum;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

View File

@ -9,10 +9,14 @@ import cn.lili.modules.order.order.entity.dto.OrderMessage;
import cn.lili.modules.order.order.entity.dto.OrderSearchParams;
import cn.lili.modules.order.order.entity.vo.OrderDetailVO;
import cn.lili.modules.order.order.entity.vo.OrderSimpleVO;
import cn.lili.modules.order.order.entity.vo.PaymentLog;
import cn.lili.modules.statistics.entity.dto.StatisticsQueryParam;
import cn.lili.modules.system.entity.vo.Traces;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.service.IService;
import org.apache.ibatis.annotations.Param;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
@ -235,4 +239,13 @@ public interface OrderService extends IService<Order> {
* @return 金额
*/
Double getPaymentTotal(String orderSn);
/**
* 查询订单支付记录
*
* @param page 分页
* @param queryWrapper 查询条件
* @return 订单支付记录分页
*/
IPage<PaymentLog> queryPaymentLogs(IPage<PaymentLog> page, Wrapper<PaymentLog> queryWrapper);
}

View File

@ -1,12 +1,19 @@
package cn.lili.modules.order.order.service;
import cn.lili.common.vo.PageVO;
import cn.lili.modules.order.order.entity.dos.AfterSale;
import cn.lili.modules.order.aftersale.entity.dos.AfterSale;
import cn.lili.modules.order.order.entity.dos.StoreFlow;
import cn.lili.modules.store.entity.vos.StoreFlowPayDownloadVO;
import cn.lili.modules.store.entity.vos.StoreFlowRefundDownloadVO;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.service.IService;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.util.Date;
import java.util.List;
/**
* 商家订单流水业务层
@ -43,4 +50,20 @@ public interface StoreFlowService extends IService<StoreFlow> {
*/
IPage<StoreFlow> getStoreFlow(String storeId, String type, boolean distribution, PageVO pageVO, Date startTime, Date endTime);
/**
* 获取结算单的入账流水
*
* @param queryWrapper 查询条件
* @return 入账流水
*/
List<StoreFlowPayDownloadVO> getStoreFlowPayDownloadVO(Wrapper<StoreFlow> queryWrapper);
/**
* 获取结算单的退款流水
*
* @param queryWrapper 查询条件
* @return 退款流水
*/
List<StoreFlowRefundDownloadVO> getStoreFlowRefundDownloadVO(Wrapper<StoreFlow> queryWrapper);
}

View File

@ -15,7 +15,7 @@ import cn.lili.modules.order.order.entity.dos.OrderComplaint;
import cn.lili.modules.order.order.entity.dos.OrderComplaintCommunication;
import cn.lili.modules.order.order.entity.dos.OrderItem;
import cn.lili.modules.order.order.entity.dto.OrderComplaintDTO;
import cn.lili.modules.order.order.entity.enums.ComplaintStatusEnum;
import cn.lili.modules.order.aftersale.entity.enums.ComplaintStatusEnum;
import cn.lili.modules.order.order.entity.enums.OrderComplaintStatusEnum;
import cn.lili.modules.order.order.entity.vo.*;
import cn.lili.modules.order.order.mapper.OrderComplaintMapper;

View File

@ -31,6 +31,7 @@ import cn.lili.modules.order.order.entity.enums.*;
import cn.lili.modules.order.order.entity.vo.OrderDetailVO;
import cn.lili.modules.order.order.entity.vo.OrderSimpleVO;
import cn.lili.modules.order.order.entity.vo.OrderVO;
import cn.lili.modules.order.order.entity.vo.PaymentLog;
import cn.lili.modules.order.order.mapper.OrderItemMapper;
import cn.lili.modules.order.order.mapper.OrderMapper;
import cn.lili.modules.order.order.service.*;
@ -56,6 +57,7 @@ import cn.lili.trigger.message.PintuanOrderMessage;
import cn.lili.trigger.model.TimeExecuteConstant;
import cn.lili.trigger.model.TimeTriggerMsg;
import cn.lili.trigger.util.DelayQueueTools;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
@ -598,6 +600,11 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
return order.getFlowPrice();
}
@Override
public IPage<PaymentLog> queryPaymentLogs(IPage<PaymentLog> page, Wrapper<PaymentLog> queryWrapper) {
return baseMapper.queryPaymentLogs(page, queryWrapper);
}
/**
* 循环检查批量发货订单列表
*

View File

@ -2,7 +2,7 @@ package cn.lili.modules.order.order.serviceimpl;
import cn.lili.common.utils.*;
import cn.lili.common.vo.PageVO;
import cn.lili.modules.order.order.entity.dos.AfterSale;
import cn.lili.modules.order.aftersale.entity.dos.AfterSale;
import cn.lili.modules.order.order.entity.dos.Order;
import cn.lili.modules.order.order.entity.dos.OrderItem;
import cn.lili.modules.order.order.entity.dos.StoreFlow;
@ -15,7 +15,10 @@ import cn.lili.modules.order.order.service.OrderService;
import cn.lili.modules.order.order.service.StoreFlowService;
import cn.lili.modules.payment.entity.RefundLog;
import cn.lili.modules.payment.service.RefundLogService;
import cn.lili.modules.store.entity.vos.StoreFlowPayDownloadVO;
import cn.lili.modules.store.entity.vos.StoreFlowRefundDownloadVO;
import cn.lili.mybatis.util.PageUtil;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
@ -168,4 +171,14 @@ public class StoreFlowServiceImpl extends ServiceImpl<StoreFlowMapper, StoreFlow
lambdaQueryWrapper.eq(StringUtils.isNotEmpty(type), StoreFlow::getFlowType, type);
return this.page(PageUtil.initPage(pageVO), lambdaQueryWrapper);
}
@Override
public List<StoreFlowPayDownloadVO> getStoreFlowPayDownloadVO(Wrapper<StoreFlow> queryWrapper) {
return baseMapper.getStoreFlowPayDownloadVO(queryWrapper);
}
@Override
public List<StoreFlowRefundDownloadVO> getStoreFlowRefundDownloadVO(Wrapper<StoreFlow> queryWrapper) {
return baseMapper.getStoreFlowRefundDownloadVO(queryWrapper);
}
}

View File

@ -7,7 +7,7 @@ import cn.lili.common.security.context.UserContext;
import cn.lili.common.utils.SpringContextUtil;
import cn.lili.common.vo.ResultMessage;
import cn.lili.common.enums.ClientTypeEnum;
import cn.lili.modules.member.service.MemberWalletService;
import cn.lili.modules.wallet.service.MemberWalletService;
import cn.lili.modules.payment.kit.dto.PayParam;
import cn.lili.modules.payment.entity.enums.PaymentClientEnum;
import cn.lili.modules.payment.entity.enums.PaymentMethodEnum;

View File

@ -2,11 +2,11 @@ package cn.lili.modules.payment.kit;
import cn.lili.common.utils.SnowFlake;
import cn.lili.common.utils.SpringContextUtil;
import cn.lili.modules.order.order.entity.dos.AfterSale;
import cn.lili.modules.order.aftersale.entity.dos.AfterSale;
import cn.lili.modules.order.order.entity.dos.Order;
import cn.lili.modules.order.order.entity.dos.OrderItem;
import cn.lili.modules.order.order.service.AfterSaleService;
import cn.lili.modules.order.order.service.OrderItemService;
import cn.lili.modules.order.aftersale.service.AfterSaleService;
import cn.lili.modules.order.order.service.OrderService;
import cn.lili.modules.order.order.service.StoreFlowService;
import cn.lili.modules.payment.entity.RefundLog;

View File

@ -4,8 +4,8 @@ import cn.hutool.json.JSONUtil;
import cn.lili.common.enums.ResultCode;
import cn.lili.common.exception.ServiceException;
import cn.lili.modules.order.order.entity.enums.PayStatusEnum;
import cn.lili.modules.order.trade.entity.dos.Recharge;
import cn.lili.modules.order.trade.service.RechargeService;
import cn.lili.modules.wallet.entity.dos.Recharge;
import cn.lili.modules.wallet.service.RechargeService;
import cn.lili.modules.payment.kit.dto.PayParam;
import cn.lili.modules.payment.kit.dto.PaymentSuccessParams;
import cn.lili.modules.payment.entity.enums.CashierEnum;

View File

@ -5,8 +5,8 @@ import cn.lili.common.enums.ResultUtil;
import cn.lili.common.exception.ServiceException;
import cn.lili.common.security.context.UserContext;
import cn.lili.common.vo.ResultMessage;
import cn.lili.modules.member.service.MemberWalletService;
import cn.lili.modules.order.trade.entity.enums.DepositServiceTypeEnum;
import cn.lili.modules.wallet.service.MemberWalletService;
import cn.lili.modules.wallet.entity.enums.DepositServiceTypeEnum;
import cn.lili.modules.payment.entity.RefundLog;
import cn.lili.modules.payment.kit.CashierSupport;
import cn.lili.modules.payment.kit.Payment;

View File

@ -2,6 +2,7 @@ package cn.lili.modules.payment.serviceimpl;
import cn.lili.modules.order.order.entity.vo.PaymentLog;
import cn.lili.modules.order.order.mapper.OrderMapper;
import cn.lili.modules.order.order.service.OrderService;
import cn.lili.modules.payment.kit.CashierSupport;
import cn.lili.modules.payment.kit.dto.PaymentSuccessParams;
import cn.lili.modules.payment.kit.params.CashierExecute;
@ -33,7 +34,7 @@ public class PaymentServiceImpl implements PaymentService {
@Autowired
private CashierSupport cashierSupport;
@Resource
private OrderMapper orderMapper;
private OrderService orderService;
@Override
public void success(PaymentSuccessParams paymentSuccessParams) {
@ -63,6 +64,6 @@ public class PaymentServiceImpl implements PaymentService {
@Override
public IPage<PaymentLog> page(Page<PaymentLog> initPage, QueryWrapper<PaymentLog> initWrapper) {
return orderMapper.queryPaymentLogs(initPage, initWrapper);
return orderService.queryPaymentLogs(initPage, initWrapper);
}
}

View File

@ -228,7 +228,7 @@ public class PointsGoodsServiceImpl extends ServiceImpl<PointsGoodsMapper, Point
@Override
public IPage<PointsGoodsVO> getPointsGoodsByPage(PointsGoodsSearchParams searchParams, PageVO page) {
IPage<PointsGoodsVO> pointsGoodsPage = new Page<>();
if (UserContext.getCurrentUser().getRole().equals(UserEnums.MEMBER)) {
if (UserContext.getCurrentUser() == null || UserContext.getCurrentUser().getRole().equals(UserEnums.MEMBER)) {
searchParams.setPromotionStatus(PromotionStatusEnum.START.name());
}
Query query = searchParams.mongoQuery();

View File

@ -12,7 +12,7 @@ import cn.lili.modules.goods.service.GoodsService;
import cn.lili.modules.member.service.MemberEvaluationService;
import cn.lili.modules.order.order.entity.enums.FlowTypeEnum;
import cn.lili.modules.order.order.entity.enums.OrderStatusEnum;
import cn.lili.modules.order.order.service.AfterSaleService;
import cn.lili.modules.order.aftersale.service.AfterSaleService;
import cn.lili.modules.order.order.service.OrderComplaintService;
import cn.lili.modules.order.trade.entity.enums.AfterSaleTypeEnum;
import cn.lili.modules.promotion.service.SeckillService;

View File

@ -66,8 +66,6 @@ public class BillServiceImpl extends ServiceImpl<BillMapper, Bill> implements Bi
*/
@Autowired
private StoreFlowService storeFlowService;
@Resource
private StoreFlowMapper storeFlowMapper;
@Override
public void createBill(String storeId, Date startTime, DateTime endTime) {
@ -256,7 +254,7 @@ public class BillServiceImpl extends ServiceImpl<BillMapper, Bill> implements Bi
lambdaQueryWrapper.eq(StoreFlow::getStoreId, bill.getStoreId());
lambdaQueryWrapper.between(StoreFlow::getCreateTime, bill.getStartTime(), bill.getCreateTime());
lambdaQueryWrapper.eq(StoreFlow::getFlowType, FlowTypeEnum.PAY.name());
List<StoreFlowPayDownloadVO> storeFlowList = storeFlowMapper.getStoreFlowPayDownloadVO(lambdaQueryWrapper);
List<StoreFlowPayDownloadVO> storeFlowList = storeFlowService.getStoreFlowPayDownloadVO(lambdaQueryWrapper);
writer.write(storeFlowList, true);
writer.setSheet("退款订单");
@ -288,7 +286,7 @@ public class BillServiceImpl extends ServiceImpl<BillMapper, Bill> implements Bi
storeFlowlambdaQueryWrapper.eq(StoreFlow::getStoreId, bill.getStoreId());
storeFlowlambdaQueryWrapper.between(StoreFlow::getCreateTime, bill.getStartTime(), bill.getCreateTime());
storeFlowlambdaQueryWrapper.eq(StoreFlow::getFlowType, FlowTypeEnum.PAY.name());
List<StoreFlowRefundDownloadVO> storeFlowRefundDownloadVOList = storeFlowMapper.getStoreFlowRefundDownloadVO(storeFlowlambdaQueryWrapper);
List<StoreFlowRefundDownloadVO> storeFlowRefundDownloadVOList = storeFlowService.getStoreFlowRefundDownloadVO(storeFlowlambdaQueryWrapper);
writer.write(storeFlowRefundDownloadVOList, true);
ServletOutputStream out = null;

View File

@ -72,11 +72,6 @@ public class StoreServiceImpl extends ServiceImpl<StoreMapper, Store> implements
*/
@Autowired
private StoreDetailService storeDetailService;
/**
* 页面
*/
@Autowired
private PageDataService pageDataService;
/**
* 店铺收藏
*/
@ -188,8 +183,6 @@ public class StoreServiceImpl extends ServiceImpl<StoreMapper, Store> implements
}
if (passed == 0) {
store.setStoreDisable(StoreStatusEnum.OPEN.value());
//添加店铺页面
pageDataService.addStorePageData(store.getId());
//修改会员 表示已有店铺
Member member = memberService.getById(store.getMemberId());
member.setHaveStore(true);

View File

@ -11,5 +11,9 @@ import com.baomidou.mybatisplus.extension.service.IService;
*/
public interface SensitiveWordsService extends IService<SensitiveWords> {
/**
* 重新写入缓存
*/
void resetCache();
}

View File

@ -1,5 +1,7 @@
package cn.lili.modules.system.serviceimpl;
import cn.lili.cache.Cache;
import cn.lili.cache.CachePrefix;
import cn.lili.modules.system.entity.dos.SensitiveWords;
import cn.lili.modules.system.mapper.SensitiveWordsMapper;
import cn.lili.modules.system.service.SensitiveWordsService;
@ -9,6 +11,9 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.stream.Collectors;
/**
* 敏感词业务层实现
*
@ -17,5 +22,17 @@ import org.springframework.transaction.annotation.Transactional;
*/
@Service
public class SensitiveWordsServiceImpl extends ServiceImpl<SensitiveWordsMapper, SensitiveWords> implements SensitiveWordsService {
@Autowired
private Cache<List<String>> cache;
@Override
public void resetCache() {
List<SensitiveWords> sensitiveWordsList = this.list();
if (sensitiveWordsList == null || sensitiveWordsList.isEmpty()) {
return;
}
List<String> sensitiveWords = sensitiveWordsList.stream().map(SensitiveWords::getSensitiveWord).collect(Collectors.toList());
cache.put(CachePrefix.SENSITIVE.getPrefix(), sensitiveWords);
}
}

View File

@ -1,6 +1,6 @@
package cn.lili.modules.system.sms;
import cn.lili.modules.verification.enums.VerificationEnums;
import cn.lili.modules.verification.entity.enums.VerificationEnums;
import java.util.List;
import java.util.Map;

View File

@ -10,7 +10,7 @@ import cn.lili.common.security.context.UserContext;
import cn.lili.modules.system.sms.AliSmsUtil;
import cn.lili.modules.system.sms.SmsUtil;
import cn.lili.common.utils.CommonUtil;
import cn.lili.modules.verification.enums.VerificationEnums;
import cn.lili.modules.verification.entity.enums.VerificationEnums;
import cn.lili.common.properties.SmsTemplateProperties;
import cn.lili.common.properties.SystemSettingProperties;
import cn.lili.common.utils.Base64Utils;

View File

@ -1,20 +0,0 @@
package cn.lili.modules.system.utils;
/**
*
* 字符常量
* @author Bulbasaur
* @version v1.0
* @since v1.0
* 2020-02-25 14:10:16
*/
public class CharacterConstant {
/**
* 字符*
*/
public final static char WILDCARD_STAR = '*';
}

View File

@ -1,243 +0,0 @@
package cn.lili.modules.system.utils;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.Iterator;
import java.util.Map;
/**
* Http工具
*
* @author pikachu
* @since 2018/3/13
*/
@Slf4j
public final class HttpUtils {
public static final int HTTP_CONN_TIMEOUT = 100000;
public static final int HTTP_SOCKET_TIMEOUT = 100000;
public static String doPost(String reqUrl, Map<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";
}
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;
}
private static String getContent(HttpURLConnection urlConn, String encoding) {
try {
String responseContent = null;
InputStream in = urlConn.getInputStream();
BufferedReader rd = new BufferedReader(new InputStreamReader(in, encoding));
String tempLine = rd.readLine();
StringBuffer tempStr = new StringBuffer();
String crlf = System.getProperty("line.separator");
while (tempLine != null) {
tempStr.append(tempLine);
tempStr.append(crlf);
tempLine = rd.readLine();
}
responseContent = tempStr.toString();
rd.close();
in.close();
return responseContent;
} catch (Exception e) {
throw new RuntimeException(e.getMessage(), e);
}
}
/**
* @param link
* @param encoding
* @return
*/
public static String doGet(String link, String encoding, int connectTimeout, int readTimeout) {
HttpURLConnection conn = null;
try {
URL url = new URL(link);
conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(connectTimeout);
conn.setReadTimeout(readTimeout);
BufferedInputStream in = new BufferedInputStream(
conn.getInputStream());
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] buf = new byte[1024];
for (int i = 0; (i = in.read(buf)) > 0; ) {
out.write(buf, 0, i);
}
out.flush();
String s = out.toString(encoding);
return s;
} catch (Exception e) {
throw new RuntimeException(e.getMessage(), e);
} finally {
if (conn != null) {
conn.disconnect();
conn = null;
}
}
}
/**
* 将parameters中数据转换成用"&"链接的http请求参数形式
*
* @param parameters
* @return
*/
private static String generatorParamString(Map<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

@ -3,7 +3,7 @@ package cn.lili.modules.verification.aop;
import cn.lili.common.enums.ResultCode;
import cn.lili.common.exception.ServiceException;
import cn.lili.modules.verification.aop.annotation.Verification;
import cn.lili.modules.verification.enums.VerificationEnums;
import cn.lili.modules.verification.entity.enums.VerificationEnums;
import cn.lili.modules.verification.service.VerificationService;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;

View File

@ -1,7 +1,7 @@
package cn.lili.modules.verification.aop.annotation;
import cn.lili.modules.verification.enums.VerificationEnums;
import cn.lili.modules.verification.entity.enums.VerificationEnums;
import java.lang.annotation.*;

View File

@ -1,4 +1,4 @@
package cn.lili.modules.verification.enums;
package cn.lili.modules.verification.entity.enums;
/**
* VerificationEnums

View File

@ -1,6 +1,6 @@
package cn.lili.modules.verification.service;
import cn.lili.modules.verification.enums.VerificationEnums;
import cn.lili.modules.verification.entity.enums.VerificationEnums;
import java.io.IOException;
import java.util.Map;

View File

@ -11,7 +11,7 @@ import cn.lili.modules.verification.entity.dos.VerificationSource;
import cn.lili.modules.verification.entity.dto.VerificationDTO;
import cn.lili.modules.verification.service.VerificationSourceService;
import cn.lili.modules.verification.SliderImageUtil;
import cn.lili.modules.verification.enums.VerificationEnums;
import cn.lili.modules.verification.entity.enums.VerificationEnums;
import cn.lili.modules.verification.service.VerificationService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;

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