Commit 58cc8f87 by JayZhouLeiHao

修改代码

parent 3a078276
......@@ -28,7 +28,12 @@ public class H5MemberInterceptor extends HandlerInterceptorAdapter {
"/h5/wechat/login",
"/h5/account/login",
"/h5/register",
"/h5/validate"
"/h5/validate",
"/h5/agreementInfo/list",
"/h5/file/upload",
"/h5/slideshowInfo/list",
"/h5/posterInfo/list",
"/h5/blackImgInfo/list"
};
@Override
......
......@@ -6,9 +6,9 @@ spring:
druid:
# 主库数据源
master:
url: jdbc:mysql://db1.prd.jianghuxx.com:3317/wenchuang_test?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&rewriteBatchedStatements=true
url: jdbc:mysql://db1.prd.nyinhong.com:3317/wenchuang_test?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&rewriteBatchedStatements=true
username: root
password: 4f9fa23639242790
password: 2a0a6dfc62648fc3
# 从库数据源
slave:
# 从数据源开关/默认关闭
......@@ -21,18 +21,27 @@ spring:
login-username: ruoyi
login-password: 123456
# redis 配置
# redis:
# # 地址
# host: 127.0.0.1
# # 端口,默认为6379
# port: 6379
# # 数据库索引
# database: 0
# # 密码
## password: yongqi@2022
redis:
# 地址
host: localhost
host: cluster1.prd.nyinhong.com
# 端口,默认为6379
port: 6379
port: 6319
# 数据库索引
database: 0
# 密码
# password:
password: yongqi@2022
ruoyi:
# 文件路径 示例( Windows配置C:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath)
profile: E:/yinhong/wenchuang/Java/file
profile: /www/wwwroot/wenchuang/profile
scheduling:
enabled: false
#操作oss需要的一些参数
......@@ -43,16 +52,17 @@ aliyun:
endPoint: 你的endpoint # Endpoint:在阿里云oss控制台查看自己使用的endpoint
bucketName: 你的bucketName # bucket 名称
wechat:
enabled: false
appId: 你的微信服务号信息(h5的时候需要,小程序的时候不需要)
secret: 你的微信服务号信息(h5的时候需要,小程序的时候不需要)
merchantId: 微信支付商户号
privateKeyPath: 微信支付密钥地址相对地址
merchantSerialNumber: 微信支付密钥对应的序列号
apiV3key: 微信支付apiV3key
notifyUrl: 微信支付回调地址
miniProgramAppId: wxb323afcbe152514f
miniProgramSecret: f975fc175dad70717f9a09384b55a9f7
enabled: true
appId:
secret:
merchantId: 1685133653
# privateKeyPath: E:\yinhong\wenchuang\Java\RuoYi-Mall\ruoyi-admin\src\main\resources\cert\apiclient_key.pem
privateKeyPath: /www/wwwroot/wenchuang/cert/apiclient_key.pem
merchantSerialNumber: 36FCC4F5C894D8A64F56AFA572A461E5F50A49B7
apiV3key: 1ascgdvbhyacbnhfdaqwexzfghbvgfa1
notifyUrl: https://wenchuang.yyinhong.cn/api/no-auth/wechat/notify
miniProgramAppId: wx4fd771bb1917b4f6
miniProgramSecret: 72eaa3bc19d635736c5ecfadf3404b1a
sms:
enabled: true
# 阿里云 dysmsapi.aliyuncs.com
......
......@@ -9,7 +9,7 @@ ruoyi:
# 实例演示开关
demoEnabled: true
# 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath)
profile: C:/ruoyi/uploadPath
profile: /www/wwwroot/wenchuang/profile
# 获取ip地址开关
addressEnabled: true
# 验证码类型 math 数组计算 char 字符验证
......@@ -120,8 +120,8 @@ token:
# 令牌密钥
secret: abcdefghijkomnopqrstuvwxyx
# 令牌有效期(默认30分钟)
expireTime: 30
memberExpireTime: 30
expireTime: 380
memberExpireTime: 380
# mybatis-plus 配置
mybatis-plus:
# 搜索指定包别名
......@@ -156,8 +156,8 @@ xss:
urlPatterns: /system/*,/monitor/*,/tool/*
extra:
wx:
appid: wxb323afcbe152514f
secret: f975fc175dad70717f9a09384b55a9f7
appid: wx4fd771bb1917b4f6
secret: 72eaa3bc19d635736c5ecfadf3404b1a
redirect: ""
scheduling:
enabled: true
......
-----BEGIN CERTIFICATE-----
MIIEITCCAwmgAwIBAgIUNvzE9ciU2KZPVq+lcqRh5fUKSbcwDQYJKoZIhvcNAQEL
BQAwXjELMAkGA1UEBhMCQ04xEzARBgNVBAoTClRlbnBheS5jb20xHTAbBgNVBAsT
FFRlbnBheS5jb20gQ0EgQ2VudGVyMRswGQYDVQQDExJUZW5wYXkuY29tIFJvb3Qg
Q0EwHhcNMjQwOTEyMDMxMDA5WhcNMjkwOTExMDMxMDA5WjB7MRMwEQYDVQQDDAox
Njg1MTMzNjUzMRswGQYDVQQKDBLlvq7kv6HllYbmiLfns7vnu58xJzAlBgNVBAsM
HuS4iua1t+S8mOeyn+W5v+WRiuaciemZkOWFrOWPuDELMAkGA1UEBhMCQ04xETAP
BgNVBAcMCFNoZW5aaGVuMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
3z4OMaUWtmM+Kmygz3wtRZaw/u7p0y96sqA2o0QX/kUfkaDsGWblyCpA9O1CRFER
boNRZO5BRAoCnKFwe0C/xcjwzo9lYTO6oWYdBfTk09gnX6tg5+H63ypfKvhYSjbw
4cNKuvl9uA5KM4MiuPyPCkIGBiReTEsqUsH4jXWRN7aJ/m6FVIAQZDKZ57407uk6
FaMpYxaM1K1xxOSxlezrjR2d95VokKi/SQCkkDypX0THQOKB/iP7/juMVkXHIcD7
n0tNGiiy/9BU3CF9ZZOE5AlpDjaUZoXRMdr4AuKToYvqIzeRbEcVxHU19wTx0WB7
w8JvjtdQYnpCxPTv6k8TsQIDAQABo4G5MIG2MAkGA1UdEwQCMAAwCwYDVR0PBAQD
AgP4MIGbBgNVHR8EgZMwgZAwgY2ggYqggYeGgYRodHRwOi8vZXZjYS5pdHJ1cy5j
b20uY24vcHVibGljL2l0cnVzY3JsP0NBPTFCRDQyMjBFNTBEQkMwNEIwNkFEMzk3
NTQ5ODQ2QzAxQzNFOEVCRDImc2c9SEFDQzQ3MUI2NTQyMkUxMkIyN0E5RDMzQTg3
QUQxQ0RGNTkyNkUxNDAzNzEwDQYJKoZIhvcNAQELBQADggEBAFIMZFxybIjhBPzD
vy1OXKGluTBnVsb20qsSOWkpAHpN660U8BN+GTWWP/l0jZbfnngaMNQpamWd/KPU
f9fy3DfWzF+2iqNSsYxLGRa7Tz6uvxvBlS5mpnRYqiuMzAZhtrVomZV+yNfGPkzO
0K5vi3BsZ+IqkaYQsbVwNW8vxpw604F+k9MLhaVBxSqKKDhtg20Bl/WEEzaEUWvW
wkj44IiT8IQYkS2sSnwQCpo53uTHdYNTmF6DYqB8ZrVS+0G1oVaSqegdBLweVEdJ
msmo2A4a5iQq+JyFSjZNb0hir/BV4er+jXZ0uCs0YGAFGUwh3S1apavFYp073J5x
AEKZ6cU=
-----END CERTIFICATE-----
......@@ -12,9 +12,12 @@ public enum OrderStatus
NOT_DELIVERED(1, "待发货"),
DELIVERED(2, "待收货"),
COMPLETE(3, "已完成"),
CLOSED(4, "已关闭"),
INVALID(5, "无效订单"),
REFUUND(-2, "售后订单");
CLOSED(4, "已取消"),
INVALID(5, "已售后"),
REFUUND(6, "售后中"),
REFUND_ERROR(9,"退款失败"),
REFUND_OK(8,"退款成功");
private final Integer type;
private final String msg;
......
......@@ -109,6 +109,9 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
).permitAll()
.antMatchers("/h5/**").permitAll()
.antMatchers("/no-auth/**").permitAll()
.antMatchers("/h5/slideshowInfo/**").permitAll()
.antMatchers("/h5/posterInfo/**").permitAll()
.antMatchers("/h5/blackImgInfo/**").permitAll()
.antMatchers("/common/download**").anonymous()
.antMatchers("/common/download/resource**").anonymous()
.antMatchers("/swagger-ui.html").anonymous()
......
......@@ -62,11 +62,7 @@
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15to18</artifactId>
<version>1.64</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
......@@ -91,5 +87,11 @@
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-framework</artifactId>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
<version>1.70</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
......@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
......
......@@ -2,6 +2,7 @@ package com.cyl.h5.controller;
import com.cyl.manager.act.domain.entity.ActivityApplyInfo;
import com.cyl.manager.act.domain.query.ActivityApplyInfoQuery;
import com.cyl.manager.act.domain.vo.ActivityApplyInfoSaveVo;
import com.cyl.manager.act.service.ActivityApplyInfoService;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
......@@ -35,7 +36,6 @@ public class H5ActivityApplyInfoController extends BaseController {
@ApiOperation("我的报名列表")
@PostMapping("/list")
public ResponseEntity<Page<ActivityApplyInfo>> list(@RequestBody ActivityApplyInfoQuery query, Pageable page) {
query.setUserId(getUserId());
List<ActivityApplyInfo> list = service.selectList(query, page);
return ResponseEntity.ok(new PageImpl<>(list, page, ((com.github.pagehelper.Page) list).getTotal()));
}
......@@ -52,4 +52,11 @@ public class H5ActivityApplyInfoController extends BaseController {
public ResponseEntity<Integer> edit(@RequestBody ActivityApplyInfo activityApplyInfo) {
return ResponseEntity.ok(service.update(activityApplyInfo));
}
@ApiOperation("新增活动报名信息")
@Log(title = "活动报名信息", businessType = BusinessType.INSERT)
@PostMapping
public ResponseEntity<Integer> insert(@RequestBody ActivityApplyInfoSaveVo activityApplyInfoSaveVo) {
return ResponseEntity.ok(service.insertAll(activityApplyInfoSaveVo));
}
}
package com.cyl.h5.controller;
import com.cyl.manager.oth.domain.entity.AgreementInfo;
import com.cyl.manager.oth.domain.query.AgreementInfoQuery;
import com.cyl.manager.oth.service.AgreementInfoService;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.enums.BusinessType;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 协议管理信息Controller
*
* @author zcc
* @date 2024-08-01
*/
@Api(description ="小程序-协议管理信息接口列表")
@RestController
@RequestMapping("/h5/agreementInfo")
public class H5AgreementInfoController extends BaseController {
@Autowired
private AgreementInfoService service;
@ApiOperation("小程序-查询协议管理信息列表")
@PostMapping("/list")
public ResponseEntity<Page<AgreementInfo>> list(@RequestBody AgreementInfoQuery query, Pageable page) {
List<AgreementInfo> list = service.selectList(query, page);
return ResponseEntity.ok(new PageImpl<>(list, page, ((com.github.pagehelper.Page)list).getTotal()));
}
@ApiOperation("小程序-获取协议管理信息详细信息")
@GetMapping(value = "/{id}")
public ResponseEntity<AgreementInfo> getInfo(@PathVariable("id") Long id) {
return ResponseEntity.ok(service.selectById(id));
}
}
package com.cyl.h5.controller;
import com.cyl.manager.oth.domain.entity.BlackImgInfo;
import com.cyl.manager.oth.domain.query.BlackImgInfoQuery;
import com.cyl.manager.oth.service.BlackImgInfoService;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.enums.BusinessType;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 背景图管理信息Controller
*
* @author zcc
* @date 2024-08-01
*/
@Api(description ="小程序-背景图管理信息接口列表")
@RestController
@RequestMapping("/h5/blackImgInfo")
public class H5BlackImgInfoController extends BaseController {
@Autowired
private BlackImgInfoService service;
@ApiOperation("小程序-查询背景图管理信息列表")
@PostMapping("/list")
public ResponseEntity<Page<BlackImgInfo>> list(@RequestBody BlackImgInfoQuery query, Pageable page) {
List<BlackImgInfo> list = service.selectList(query, page);
return ResponseEntity.ok(new PageImpl<>(list, page, ((com.github.pagehelper.Page)list).getTotal()));
}
}
......@@ -12,6 +12,7 @@ import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.redis.RedisService;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.OssUtils;
import com.ruoyi.common.utils.file.FileUploadUtils;
import com.ruoyi.system.service.ISysConfigService;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.StringUtils;
......@@ -20,6 +21,7 @@ import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.*;
import java.util.stream.Collectors;
......@@ -96,9 +98,13 @@ public class H5CommonController {
}
@PostMapping("/h5/file/upload")
public AjaxResult uploadFile(MultipartFile file) {
String url = ossUtils.uploadOneFile(file);
return AjaxResult.successData(url);
public AjaxResult uploadFile(MultipartFile file) throws IOException {
//返回上传oss的url
String url = FileUploadUtils.upload(file);
AjaxResult ajax = AjaxResult.success();
ajax.put("fileName", file.getOriginalFilename());
ajax.put("url", url);
return ajax;
}
@GetMapping("/no-auth/config/get")
......
......@@ -3,12 +3,15 @@ package com.cyl.h5.controller;
import com.cyl.h5.service.H5MemberAddressService;
import com.cyl.manager.ums.domain.form.MemberAddressForm;
import com.cyl.manager.ums.domain.vo.MemberAddressVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@Api(description ="小程序-会员收货地址")
@RestController
@RequestMapping("/h5/member/address")
public class H5MemberAddressController {
......@@ -17,6 +20,7 @@ public class H5MemberAddressController {
private H5MemberAddressService h5MemberAddressService;
@GetMapping("/list")
@ApiOperation("小程序-会员收货地址列表")
public ResponseEntity<List<MemberAddressVO>> getList(){
return ResponseEntity.ok(h5MemberAddressService.selectList());
}
......@@ -27,11 +31,13 @@ public class H5MemberAddressController {
}
@PostMapping("/create")
@ApiOperation("小程序-新增会员收货地址")
public ResponseEntity<Integer> create(@RequestBody MemberAddressForm memberAddressForm){
return ResponseEntity.ok(h5MemberAddressService.insert(memberAddressForm));
}
@PutMapping("/update")
@ApiOperation("小程序-修改会员收货地址")
public ResponseEntity<Integer> update(@RequestBody MemberAddressForm memberAddressForm){
return ResponseEntity.ok(h5MemberAddressService.update(memberAddressForm));
}
......@@ -42,6 +48,7 @@ public class H5MemberAddressController {
}
@DeleteMapping("/{id}")
@ApiOperation("小程序-删除会员收货地址")
public ResponseEntity<Integer> remove(@PathVariable Long id) {
return ResponseEntity.ok(h5MemberAddressService.deleteById(id));
}
......
package com.cyl.h5.controller;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.cyl.h5.domain.form.RegisterForm;
import com.cyl.h5.domain.vo.H5LoginVO;
import com.cyl.h5.domain.vo.RegisterVO;
import com.cyl.h5.domain.vo.ValidatePhoneVO;
import com.cyl.h5.domain.vo.WechatLoginVO;
import com.cyl.h5.service.H5MemberService;
import com.cyl.manager.ums.domain.entity.Member;
import com.cyl.manager.ums.domain.vo.MemberVO;
import com.cyl.manager.ums.mapper.MemberMapper;
import com.ruoyi.common.core.domain.model.LoginMember;
import com.ruoyi.framework.web.service.TokenService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
......@@ -19,6 +23,7 @@ import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
@Api(description = "小程序-会员信息接口")
@RestController
@RequestMapping("/h5")
public class H5MemberController {
......@@ -26,29 +31,31 @@ public class H5MemberController {
@Autowired
private H5MemberService service;
@Autowired
private MemberMapper memberMapper;
@Autowired
private TokenService tokenService;
@ApiOperation("会员注册")
@PostMapping("/register")
public ResponseEntity<RegisterVO> register(@RequestBody RegisterForm request){
public ResponseEntity<RegisterVO> register(@RequestBody RegisterForm request) {
return ResponseEntity.ok(service.register(request));
}
@ApiOperation("注册登录验证码校验手机号")
@GetMapping("/validate/{phone}")
public ResponseEntity<ValidatePhoneVO> validate(@PathVariable String phone){
public ResponseEntity<ValidatePhoneVO> validate(@PathVariable String phone) {
return ResponseEntity.ok(service.validate(phone));
}
@ApiOperation("手机号密码登录")
@PostMapping("/account/login")
public ResponseEntity<H5LoginVO> accountLogin(@RequestBody String data){
public ResponseEntity<H5LoginVO> accountLogin(@RequestBody String data) {
return ResponseEntity.ok(service.accountLogin(data));
}
@PostMapping("/wechat/login")
public ResponseEntity<H5LoginVO> wechatLogin(String data) throws Exception {
@GetMapping("/wechat/login")
public ResponseEntity<H5LoginVO> wechatLogin(@RequestParam("data") String data) throws Exception {
if (StringUtils.isEmpty(data)) {
return ResponseEntity.ok(null);
}
......@@ -58,19 +65,19 @@ public class H5MemberController {
@ApiOperation("sms登录")
@PostMapping("/sms/login")
public ResponseEntity<H5LoginVO> smsLogin(@RequestBody String data){
public ResponseEntity<H5LoginVO> smsLogin(@RequestBody String data) {
return ResponseEntity.ok(service.smsLogin(data));
}
@ApiOperation("获取会员信息")
@GetMapping("/member/info")
public ResponseEntity<MemberVO> getMemberInfo(){
public ResponseEntity<MemberVO> getMemberInfo() {
return ResponseEntity.ok(service.getMemberInfo());
}
@ApiOperation("设置会员微信信息")
@PostMapping("/member/setWechatInfo")
public void setWechatInfo(@RequestBody String data){
public void setWechatInfo(@RequestBody String data) {
service.setWechatInfo(data);
}
......@@ -78,8 +85,14 @@ public class H5MemberController {
@GetMapping("/record/login")
public void add(HttpServletRequest request) {
LoginMember loginMember = tokenService.getLoginMember(request);
if (loginMember != null){
if (loginMember != null) {
service.insert(loginMember.getMemberId());
}
}
@ApiOperation("修改会员信息")
@PutMapping("/upd")
public void upd(@RequestBody Member member) {
service.upd(member);
}
}
......@@ -7,8 +7,10 @@ import com.cyl.h5.domain.vo.*;
import com.cyl.h5.service.H5OrderService;
import com.cyl.manager.oms.domain.entity.Aftersale;
import com.cyl.manager.oms.domain.entity.Order;
import com.cyl.manager.oms.domain.entity.OrderItem;
import com.cyl.manager.oms.domain.form.DealWithAftersaleForm;
import com.cyl.manager.oms.service.AftersaleService;
import com.cyl.manager.oms.service.OrderItemService;
import com.cyl.manager.oms.service.OrderService;
import com.cyl.manager.ums.domain.entity.Member;
import com.ruoyi.common.constant.Constants;
......@@ -17,6 +19,7 @@ import com.ruoyi.common.core.redis.RedisService;
import com.ruoyi.common.enums.AftersaleStatus;
import com.ruoyi.common.enums.OrderStatus;
import com.ruoyi.framework.config.LocalDataUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -27,6 +30,7 @@ import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
@Api(description = "小程序-订单信息")
@RestController
@RequestMapping("/h5/order")
@Slf4j
......@@ -40,20 +44,23 @@ public class H5OrderController {
@Autowired
private OrderService orderService;
@ApiOperation("下单")
@Autowired
private OrderItemService orderItemService;
@ApiOperation("小程序-下单")
@PostMapping("/add")
public ResponseEntity<Long> submit(@RequestBody OrderSubmitForm form) {
Member member = (Member) LocalDataUtil.getVar(Constants.MEMBER_INFO);
Long memberId = member.getId();
String redisKey = "h5_order_add" + memberId;
String redisValue = memberId + "_" + System.currentTimeMillis();
try{
try {
redisService.lock(redisKey, redisValue, 60);
return ResponseEntity.ok(service.submit(form));
}catch (Exception e){
} catch (Exception e) {
log.info("创建订单方法异常", e);
throw new RuntimeException(e.getMessage());
}finally {
} finally {
try {
redisService.unLock(redisKey, redisValue);
} catch (Exception e) {
......@@ -64,50 +71,59 @@ public class H5OrderController {
@ApiOperation("下单前校验")
@PostMapping("/addOrderCheck")
public ResponseEntity<OrderCalcVO> addOrderCheck(@RequestBody OrderCreateForm orderCreateForm){
public ResponseEntity<OrderCalcVO> addOrderCheck(@RequestBody OrderCreateForm orderCreateForm) {
return ResponseEntity.ok(service.addOrderCheck(orderCreateForm));
}
@ApiOperation("订单列表")
@GetMapping("/page")
public ResponseEntity<PageImpl<H5OrderVO>> orderPage(Integer status, Pageable pageable){
public ResponseEntity<PageImpl<H5OrderVO>> orderPage(Integer status, Pageable pageable) {
Member member = (Member) LocalDataUtil.getVar(Constants.MEMBER_INFO);
return ResponseEntity.ok(service.orderPage(status, member.getId(), pageable));
}
@ApiOperation("订单详情")
@GetMapping("/orderDetail")
public ResponseEntity<H5OrderVO> orderDetail(@RequestParam(required = false) Long orderId){
if (orderId == null){
public ResponseEntity<H5OrderVO> orderDetail(@RequestParam(required = false) Long orderId) {
if (orderId == null) {
throw new RuntimeException("系统繁忙");
}
return ResponseEntity.ok(service.orderDetail(orderId));
}
/**
* 确认收货
*
* @param orderId
* @param type=0主订单,type=1子订单
* @return
*/
@ApiOperation("确认收货")
@GetMapping("/orderComplete")
public ResponseEntity<String> orderComplete(Long orderId) {
log.info("确认收货,订单id:"+orderId);
String redisKey = "h5_oms_order_complete_"+orderId;
String redisValue = orderId+"_"+System.currentTimeMillis();
try{
redisService.lock(redisKey,redisValue,60);
return ResponseEntity.ok(service.orderComplete(orderId));
}catch (Exception e){
log.error("确认收货异常",e);
public ResponseEntity<String> orderComplete(Long orderId, Long type) {
log.info("确认收货,订单id:" + orderId);
String redisKey = "h5_oms_order_complete_" + orderId;
String redisValue = orderId + "_" + System.currentTimeMillis();
Member member = (Member) LocalDataUtil.getVar(Constants.MEMBER_INFO);
Long memberId = member.getId();
try {
redisService.lock(redisKey, redisValue, 60);
return ResponseEntity.ok(service.orderComplete(orderId, type,memberId));
} catch (Exception e) {
log.error("确认收货异常", e);
throw new RuntimeException(e.getMessage());
}finally {
try{
redisService.unLock(redisKey,redisValue);
}catch (Exception e){
log.error("",e);
} finally {
try {
redisService.unLock(redisKey, redisValue);
} catch (Exception e) {
log.error("", e);
}
}
}
@ApiOperation("订单数量统计")
@GetMapping("/countOrder")
public ResponseEntity<CountOrderVO> orderNumCount(){
public ResponseEntity<CountOrderVO> orderNumCount() {
Member member = (Member) LocalDataUtil.getVar(Constants.MEMBER_INFO);
Long memberId = member.getId();
return ResponseEntity.ok(service.orderNumCount(memberId));
......@@ -115,69 +131,76 @@ public class H5OrderController {
@ApiOperation("取消订单")
@PostMapping("/orderCancel")
public ResponseEntity<String> orderCancel(@RequestBody CancelOrderForm request){
public ResponseEntity<String> orderCancel(@RequestBody CancelOrderForm request) {
Member member = (Member) LocalDataUtil.getVar(Constants.MEMBER_INFO);
String redisKey = "h5_oms_order_cancel_"+ request.getIdList().get(0);
String redisValue = request.getIdList().get(0)+"_"+System.currentTimeMillis();
try{
redisService.lock(redisKey,redisValue,60);
String redisKey = "h5_oms_order_cancel_" + request.getIdList().get(0);
String redisValue = request.getIdList().get(0) + "_" + System.currentTimeMillis();
try {
redisService.lock(redisKey, redisValue, 60);
return ResponseEntity.ok(service.orderBatchCancel(request, member.getId()));
}catch (Exception e){
log.error("订单取消方法异常",e);
} catch (Exception e) {
log.error("订单取消方法异常", e);
throw new RuntimeException("订单取消失败");
}finally {
} finally {
try {
redisService.unLock(redisKey,redisValue);
}catch (Exception e){
log.error("",e);
redisService.unLock(redisKey, redisValue);
} catch (Exception e) {
log.error("", e);
}
}
}
@ApiOperation("订单支付")
@PostMapping("/orderPay")
public ResponseEntity<OrderPayVO> orderPay(@RequestBody OrderPayForm req){
log.info("订单支付","提交的数据:"+JSONObject.toJSONString(req));
String redisKey = "h5_oms_order_pay_"+req.getPayId();
String redisValue = req.getPayId()+"_"+System.currentTimeMillis();
public ResponseEntity<OrderPayVO> orderPay(@RequestBody OrderPayForm req) {
log.info("订单支付", "提交的数据:" + JSONObject.toJSONString(req));
String redisKey = "h5_oms_order_pay_" + req.getPayId();
String redisValue = req.getPayId() + "_" + System.currentTimeMillis();
try {
redisService.lock(redisKey, redisValue, 60);
Member member = (Member) LocalDataUtil.getVar(Constants.MEMBER_INFO);
Long memberId = member.getId();
req.setMemberId(memberId);
return ResponseEntity.ok(service.orderPay(req));
}catch (Exception e){
} catch (Exception e) {
log.error("支付方法异常", e);
throw new RuntimeException(e.getMessage());
}finally {
try{
redisService.unLock(redisKey,redisValue);
}catch (Exception e){
log.error("",e);
} finally {
try {
redisService.unLock(redisKey, redisValue);
} catch (Exception e) {
log.error("", e);
}
}
}
@ApiOperation("申请售后")
@PostMapping("/applyRefund")
public ResponseEntity<Boolean> applyRefund(@RequestBody ApplyRefundForm applyRefundForm){
public ResponseEntity<Boolean> applyRefund(@RequestBody ApplyRefundForm applyRefundForm) {
String redisKey = "h5_oms_order_applyRefund_" + applyRefundForm.getOrderId();
String redisValue = applyRefundForm.getOrderId() + "_" + System.currentTimeMillis();
try{
Member member = (Member) LocalDataUtil.getVar(Constants.MEMBER_INFO);
Long memberId = member.getId();
try {
redisService.lock(redisKey, redisValue, 60);
Order order = service.applyRefund(applyRefundForm);
Order order = service.selectById(applyRefundForm.getOrderId());
// 如果是未发货,系统自动退款
if (order.getStatus().equals(OrderStatus.NOT_DELIVERED.getType())) {
DealWithAftersaleForm req = new DealWithAftersaleForm();
req.setOrderId(applyRefundForm.getOrderId());
req.setMemberId(memberId);
req.setOrderItemId(applyRefundForm.getOrderItemId());
req.setOptType(1);
aftersaleService.dealWith(req, order.getMemberId(), "直接发起退款");
//申请售后
} else {
service.applyRefund(applyRefundForm);
}
return ResponseEntity.ok(true);
}catch (Exception e){
log.error("申请售后发生异常",e);
} catch (Exception e) {
log.error("申请售后发生异常", e);
throw new RuntimeException(e.getMessage());
}finally {
} finally {
try {
redisService.unLock(redisKey, redisValue);
} catch (Exception e) {
......@@ -188,17 +211,17 @@ public class H5OrderController {
@ApiOperation("取消售后")
@GetMapping("/cancelRefund")
public ResponseEntity<String> cancelRefund(Long orderId){
log.info("【取消售后】订单id:" + orderId);
String redisKey = "h5_oms_order_cancelRefund_" + orderId;
String redisValue = orderId + "_" + System.currentTimeMillis();
try{
public ResponseEntity<String> cancelRefund(Long orderItemId) {
log.info("【取消售后】订单id:" + orderItemId);
String redisKey = "h5_oms_order_cancelRefund_" + orderItemId;
String redisValue = orderItemId + "_" + System.currentTimeMillis();
try {
redisService.lock(redisKey, redisValue, 60);
return ResponseEntity.ok(service.cancelRefund(orderId));
}catch (Exception e){
log.error("取消售后发生异常",e);
return ResponseEntity.ok(service.cancelRefund(orderItemId));
} catch (Exception e) {
log.error("取消售后发生异常", e);
throw new RuntimeException(e.getMessage());
}finally {
} finally {
try {
redisService.unLock(redisKey, redisValue);
} catch (Exception e) {
......@@ -209,44 +232,33 @@ public class H5OrderController {
@ApiOperation("售后订单详情")
@GetMapping("/refundOrderDetail")
public ResponseEntity<AftersaleRefundInfoVO> refundOrderDetail(@RequestParam Long orderId){
public ResponseEntity<AftersaleRefundInfoVO> refundOrderDetail(@RequestParam Long orderId) {
return ResponseEntity.ok(service.refundOrderDetail(orderId));
}
@ApiOperation("用户提交退货单号")
@PostMapping("/aftersale/delivery")
public AjaxResult delivery(@RequestBody @Valid DeliveryReq req){
log.info("用户提交退货单号","提交的数据:"+JSONObject.toJSONString(req));
String redisKey = "h5_oms_order_delivery_"+req.getOrderId();
String redisValue = req.getOrderId()+"_"+System.currentTimeMillis();
public AjaxResult delivery(@RequestBody @Valid DeliveryReq req) {
log.info("用户提交退货单号", "提交的数据:" + JSONObject.toJSONString(req));
String redisKey = "h5_oms_order_delivery_" + req.getOrderId();
String redisValue = req.getOrderId() + "_" + System.currentTimeMillis();
try {
redisService.lock(redisKey, redisValue, 60);
Order order = service.selectById(req.getOrderId());
Aftersale aftersale = aftersaleService.queryAfterSale(req.getOrderId());
if(order == null || aftersale == null){
OrderItem order = orderItemService.selectById(req.getOrderId());
if (order == null) {
return AjaxResult.error("未查询到订单信息");
}
//仅退款不需要退货
if(aftersale.getType() == 1){
return AjaxResult.error("仅退款不需要退货");
}
if(aftersale.getStatus() != AftersaleStatus.WAIT.getType()){
return AjaxResult.error("当前状态不可退货");
}
//更新退款单
aftersale.setRefundWpCode(req.getDeliveryCompanyCode());
aftersale.setRefundWaybillCode(req.getDeliverySn());
aftersaleService.update(aftersale);
order.setRefundOn(req.getDeliverySn());
orderItemService.update(order);
return AjaxResult.success();
}catch (Exception e){
} catch (Exception e) {
log.error("用户提交退货单号异常", e);
return AjaxResult.error("提交发货信息失败");
}finally {
try{
redisService.unLock(redisKey,redisValue);
}catch (Exception e){
log.error("",e);
} finally {
try {
redisService.unLock(redisKey, redisValue);
} catch (Exception e) {
log.error("", e);
}
}
}
......
package com.cyl.h5.controller;
import com.cyl.manager.oth.domain.entity.PosterInfo;
import com.cyl.manager.oth.domain.query.PosterInfoQuery;
import com.cyl.manager.oth.service.PosterInfoService;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.enums.BusinessType;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 主引流海报信息Controller
*
* @author zcc
* @date 2024-08-01
*/
@Api(description ="小程序-主引流海报信息接口列表")
@RestController
@RequestMapping("/h5/posterInfo")
public class H5PosterInfoController extends BaseController {
@Autowired
private PosterInfoService service;
@ApiOperation("小程序-查询主引流海报信息列表")
@PostMapping("/list")
public ResponseEntity<Page<PosterInfo>> list(@RequestBody PosterInfoQuery query, Pageable page) {
List<PosterInfo> list = service.selectList(query, page);
return ResponseEntity.ok(new PageImpl<>(list, page, ((com.github.pagehelper.Page)list).getTotal()));
}
}
package com.cyl.h5.controller;
import com.cyl.manager.pms.convert.ProductCategoryConvert;
import com.cyl.manager.pms.domain.entity.ProductCategory;
import com.cyl.manager.pms.domain.query.ProductCategoryQuery;
import com.cyl.manager.pms.domain.vo.ProductCategoryVO;
import com.cyl.manager.pms.service.ProductCategoryService;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.enums.BusinessType;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 商品分类Controller
*
* @author zcc
* @date 2022-11-28
*/
@Api(description ="小程序-商品分类接口列表")
@RestController
@RequestMapping("/h5/productCategory")
public class H5ProductCategoryController extends BaseController {
@Autowired
private ProductCategoryService service;
@Autowired
private ProductCategoryConvert convert;
@ApiOperation("小程序-查询商品分类列表")
@PostMapping("/list")
public ResponseEntity<List<ProductCategoryVO>> list(@RequestBody ProductCategoryQuery query) {
List<ProductCategoryVO> list = service.selectList(query, null);
return ResponseEntity.ok(list);
}
@ApiOperation("小程序-获取商品分类详细信息")
@GetMapping(value = "/{id}")
public ResponseEntity<ProductCategory> getInfo(@PathVariable("id") Long id) {
return ResponseEntity.ok(service.selectById(id));
}
}
package com.cyl.h5.controller;
import com.cyl.manager.oth.domain.entity.SalesAddressInfo;
import com.cyl.manager.oth.domain.query.SalesAddressInfoQuery;
import com.cyl.manager.oth.service.SalesAddressInfoService;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.enums.BusinessType;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 退货地址信息Controller
*
* @author zcc
* @date 2024-08-01
*/
@Api(description ="小程序-退货地址信息接口列表")
@RestController
@RequestMapping("/h5/salesAddressInfo")
public class H5SalesAddressInfoController extends BaseController {
@Autowired
private SalesAddressInfoService service;
@ApiOperation("查询退货地址信息列表")
@PostMapping("/list")
public ResponseEntity<Page<SalesAddressInfo>> list(@RequestBody SalesAddressInfoQuery query, Pageable page) {
List<SalesAddressInfo> list = service.selectList(query, page);
return ResponseEntity.ok(new PageImpl<>(list, page, ((com.github.pagehelper.Page)list).getTotal()));
}
@ApiOperation("获取退货地址信息详细信息")
@GetMapping(value = "/{id}")
public ResponseEntity<SalesAddressInfo> getInfo(@PathVariable("id") Long id) {
return ResponseEntity.ok(service.selectById(id));
}
}
package com.cyl.h5.controller;
import com.cyl.manager.oth.domain.entity.SlideshowInfo;
import com.cyl.manager.oth.domain.query.SlideshowInfoQuery;
import com.cyl.manager.oth.service.SlideshowInfoService;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.enums.BusinessType;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 轮播图信息Controller
*
* @author zcc
* @date 2024-08-01
*/
@Api(description ="小程序-轮播图信息接口列表")
@RestController
@RequestMapping("/h5/slideshowInfo")
public class H5SlideshowInfoController extends BaseController {
@Autowired
private SlideshowInfoService service;
@ApiOperation("小程序-查询轮播图信息列表")
@PostMapping("/list")
public ResponseEntity<Page<SlideshowInfo>> list(@RequestBody SlideshowInfoQuery query, Pageable page) {
List<SlideshowInfo> list = service.selectList(query, page);
return ResponseEntity.ok(new PageImpl<>(list, page, ((com.github.pagehelper.Page)list).getTotal()));
}
@ApiOperation("小程序-获取轮播图信息详细信息")
@GetMapping(value = "/{id}")
public ResponseEntity<SlideshowInfo> getInfo(@PathVariable("id") Long id) {
return ResponseEntity.ok(service.selectById(id));
}
}
......@@ -16,7 +16,7 @@
@ApiModel(value = "发货记录")
public class DeliveryReq {
@ApiModelProperty(value = "订单id", required = true)
@ApiModelProperty(value = "订单id", required = true)
@NotNull(message = "订单id不能为空")
private Long orderId;
......@@ -24,7 +24,4 @@
@NotBlank(message = "物流单号不能为空")
private String deliverySn;
@ApiModelProperty(value = "快递公司Code", required = true)
@NotBlank(message = "快递公司Code不能为空")
private String deliveryCompanyCode;
}
\ No newline at end of file
......@@ -34,6 +34,17 @@
@ApiModelProperty(value = "运费", hidden = true)
private BigDecimal freightAmount;
@ApiModelProperty(value = "优惠后金额", hidden = true)
private BigDecimal couponMoney;
@ApiModelProperty(value = "使用积分", hidden = true)
private BigDecimal useIntegral;
private BigDecimal giveIntegral;
@ApiModelProperty("抵扣金额")
private BigDecimal deMoney;
@ApiModelProperty(value = "隐藏 业务过程中的数据", hidden = true)
private Sku sku;
......
......@@ -16,19 +16,22 @@ public class ApplyRefundForm {
@ApiModelProperty(value = "申请售后类型 1:仅退款 2:退货退款", required = true)
private Integer applyRefundType;
@ApiModelProperty(value = "退款原因", required = true)
@ApiModelProperty(value = "退款原因")
private String reason;
@ApiModelProperty(value = "申请退货数量", required = true)
private Integer quantity;
@ApiModelProperty(value = "退款金额")
private BigDecimal refundAmount;
@ApiModelProperty(value = "退还积分")
private BigDecimal refundIntegral;
@ApiModelProperty(value = "描述")
private String description;
@ApiModelProperty("凭证图片以逗号隔开")
private String proofPics;
@ApiModelProperty(name = "如果只生请一笔售后传入子订单的id")
private Long orderItemId;
}
package com.cyl.h5.domain.form;
import com.cyl.h5.domain.dto.OrderProductListDTO;
import com.ruoyi.common.annotation.Excel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.util.List;
@Data
......@@ -17,6 +20,17 @@ public class OrderSubmitForm {
/** 订单来源,购物车则为cart */
private String from;
private Long memberCouponId;
@ApiModelProperty("订单总金额")
private BigDecimal totalAmount;
@ApiModelProperty("应付金额(实际支付金额)")
private BigDecimal payAmount;
private BigDecimal totalIntegral;
private BigDecimal giveIntegral;
private BigDecimal deMoney;
@NotEmpty
private List<OrderProductListDTO> skuList;
@Data
......
......@@ -75,4 +75,19 @@ public class H5OrderVO {
@ApiModelProperty("支付倒计时")
private Long timeToPay;
@ApiModelProperty("抵扣金额")
private BigDecimal deMoney;
private String deliveryCompany;
@ApiModelProperty(value = "退款原因", required = true)
private String reason;
@ApiModelProperty("凭证图片以逗号隔开")
private String proofPics;
/**
* 赠送积分
*/
private BigDecimal giveIntegral;
}
......@@ -9,4 +9,8 @@ public class H5ProductVO {
private String pic;
private String name;
private BigDecimal price;
private BigDecimal startPrice;
private BigDecimal endPrice;
}
......@@ -321,6 +321,18 @@ public class H5MemberService {
memberWechatMapper.update(null, wrapper);
}
public void upd(Member member) {
UpdateWrapper<Member> wrapper = new UpdateWrapper<>();
wrapper.eq("id", member.getId());
if(StringUtils.isNotEmpty(member.getNickname())){
wrapper.set("nickname", member.getNickname());
}
if(StringUtils.isNotEmpty(member.getAvatar())){
wrapper.set("avatar", member.getAvatar());
}
memberMapper.update(null, wrapper);
}
/**
* 新增会员登录记录
*
......
......@@ -12,7 +12,9 @@ import com.cyl.h5.domain.dto.OrderProductListDTO;
import com.cyl.h5.domain.dto.PayNotifyMessageDTO;
import com.cyl.h5.domain.form.*;
import com.cyl.h5.domain.vo.*;
import com.cyl.manager.act.domain.entity.IntegralHistory;
import com.cyl.manager.act.domain.entity.MemberCoupon;
import com.cyl.manager.act.mapper.IntegralHistoryMapper;
import com.cyl.manager.act.service.IntegralHistoryService;
import com.cyl.manager.act.service.MemberCouponService;
import com.cyl.manager.oms.convert.AftersaleItemConvert;
......@@ -31,6 +33,7 @@ import com.cyl.manager.ums.domain.entity.MemberCart;
import com.cyl.manager.ums.domain.entity.MemberWechat;
import com.cyl.manager.ums.mapper.MemberAddressMapper;
import com.cyl.manager.ums.mapper.MemberCartMapper;
import com.cyl.manager.ums.mapper.MemberMapper;
import com.cyl.manager.ums.mapper.MemberWechatMapper;
import com.cyl.wechat.WechatPayData;
import com.cyl.wechat.WechatPayService;
......@@ -41,13 +44,17 @@ import com.ruoyi.common.core.redis.RedisService;
import com.ruoyi.common.enums.AftersaleStatus;
import com.ruoyi.common.enums.OrderRefundStatus;
import com.ruoyi.common.enums.OrderStatus;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.AesCryptoUtils;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.IDGenerator;
import com.ruoyi.framework.config.LocalDataUtil;
import com.wechat.pay.java.service.partnerpayments.jsapi.model.Transaction;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.weaver.ast.Or;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
import org.springframework.http.ResponseEntity;
......@@ -116,6 +123,9 @@ public class H5OrderService {
@Autowired
private AftersaleItemConvert aftersaleItemConvert;
@Value("${aes.key}")
private String aesKey;
@Autowired
private OrderItemConvert orderItemConvert;
......@@ -125,6 +135,12 @@ public class H5OrderService {
@Autowired
private MemberCouponService memberCouponService;
@Autowired
private MemberMapper memberMapper;
@Autowired
private IntegralHistoryMapper integralHistoryMapper;
@Transactional
public Long submit(OrderSubmitForm form) {
Member member = (Member) LocalDataUtil.getVar(Constants.MEMBER_INFO);
......@@ -177,9 +193,6 @@ public class H5OrderService {
}
couponAmount = coupon.getCouponAmount();
}
//计算商品总额、订单总额(订单总金额=商品总金额,因为暂时没有运费等概念)
BigDecimal productTotalAmount = BigDecimal.ZERO;
BigDecimal orderTotalAmount = BigDecimal.ZERO;
for (OrderProductListDTO dto : skuList) {
if (!querySkuMap.containsKey(dto.getSkuId())) {
throw new RuntimeException("商品SKU不存在");
......@@ -195,8 +208,6 @@ public class H5OrderService {
if (sku.getStock() < skuQuantityMap.get(sku.getId())) {
throw new RuntimeException("库存不足");
}
productTotalAmount = productTotalAmount.add(sku.getPrice().multiply(BigDecimal.valueOf(skuQuantityMap.get(sku.getId()))));
orderTotalAmount = orderTotalAmount.add(sku.getPrice().multiply(BigDecimal.valueOf(skuQuantityMap.get(sku.getId()))));
dto.setSku(sku);
dto.setProduct(product);
}
......@@ -215,20 +226,41 @@ public class H5OrderService {
order.setMemberUsername(member.getNickname());
order.setPayType(Constants.PayType.WECHAT);
order.setCouponAmount(couponAmount);
order.setTotalIntegral(form.getTotalIntegral());
order.setMemberCouponId(form.getMemberCouponId());
order.setTotalAmount(orderTotalAmount);
order.setDeMoney(form.getDeMoney());
order.setGiveIntegral(form.getGiveIntegral());
order.setTotalAmount(form.getTotalAmount());
order.setPurchasePrice(BigDecimal.ZERO);
order.setFreightAmount(BigDecimal.ZERO);
BigDecimal subtract = orderTotalAmount.subtract(couponAmount);
order.setPayAmount(subtract.compareTo(BigDecimal.ZERO) > 0 ? subtract : BigDecimal.ZERO);
order.setPayAmount(form.getPayAmount());
//是否使用积分进行扣减
if (order.getPayAmount().compareTo(BigDecimal.ZERO) == 0) {
order.setStatus(Constants.OrderStatus.SEND);
//扣减积分
BigDecimal integral = member.getIntegral().subtract(order.getTotalIntegral());
UpdateWrapper<Member> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("id", member.getId());
updateWrapper.set("integral", integral);
memberMapper.update(null, updateWrapper);
IntegralHistory history = new IntegralHistory();
history.setOpType(2);
history.setSubOpType(23);
history.setAmount(order.getTotalIntegral());
history.setOrderId(orderId);
history.setOrderAmount(form.getPayAmount());
history.setMemberId(member.getId());
history.setCreateTime(LocalDateTime.now());
integralHistoryMapper.insert(history);
} else {
order.setStatus(Constants.OrderStatus.NOTPAID);
}
order.setAftersaleStatus(1);
order.setReceiverName(memberAddress.getName());
order.setReceiverPhone(memberAddress.getPhoneHidden());
order.setReceiverPhone(AesCryptoUtils.decrypt(aesKey, memberAddress.getPhoneEncrypted()));
order.setReceiverPhoneEncrypted(memberAddress.getPhoneEncrypted());
order.setReceiverPostCode(memberAddress.getPostCode());
order.setReceiverProvince(memberAddress.getProvince());
......@@ -449,12 +481,32 @@ public class H5OrderService {
optHistory.setCreateTime(optDate);
optHistory.setUpdateTime(optDate);
orderOperateHistoryMapper.insert(optHistory);
//赠送积分逻辑
});
}
@Transactional
public String orderComplete(Long orderId) {
public String orderComplete(Long orderId, Long type, Long memberId) {
BigDecimal totalMoney = BigDecimal.ZERO;
LocalDateTime optDate = LocalDateTime.now();
if (type == 1) {
OrderItem orderItem = orderItemMapper.selectById(orderId);
if (orderItem == null) {
throw new RuntimeException("未查询到订单信息");
}
// 只有【待收货】状态才能确认
if (!orderItem.getStatus().equals("6")) {
throw new RuntimeException("订单状态已改变,请刷新");
}
totalMoney = orderItem.getGiveIntegral();
orderItem.setUpdateTime(optDate);
UpdateWrapper<OrderItem> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("id", orderId);
updateWrapper.set("status", 7);
updateWrapper.set("update_time", optDate);
orderItemMapper.update(null, updateWrapper);
} else {
Order order = orderMapper.selectById(orderId);
OrderItem queryOrderItem = new OrderItem();
queryOrderItem.setOrderId(orderId);
......@@ -462,16 +514,25 @@ public class H5OrderService {
if (order == null || CollectionUtil.isEmpty(orderItemList)) {
throw new RuntimeException("未查询到订单信息");
}
// 只有【待收货】状态才能确认
if (!order.getStatus().equals(Constants.H5OrderStatus.DELIVERED)) {
throw new RuntimeException("订单状态已改变,请刷新");
}
totalMoney = order.getGiveIntegral();
order.setStatus(Constants.H5OrderStatus.COMPLETED);
order.setReceiveTime(optDate);
order.setConfirmStatus(1);
order.setUpdateTime(optDate);
order.setUpdateBy(SecurityUtil.getLocalMember().getId());
orderMapper.updateById(order);
//修改子订单状态
List<OrderItem> orderItems = orderItemMapper.selectList(new QueryWrapper<OrderItem>().eq("order_id", orderId));
if (CollectionUtil.isNotEmpty(orderItems)) {
for (OrderItem orderItem : orderItems) {
orderItem.setUpdateTime(optDate);
UpdateWrapper<OrderItem> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("id", orderItem.getId());
updateWrapper.set("status", 7);
updateWrapper.set("update_time", optDate);
orderItemMapper.update(null, updateWrapper);
}
}
//创建订单操作记录
OrderOperateHistory optHistory = new OrderOperateHistory();
optHistory.setOrderId(order.getId());
......@@ -483,7 +544,26 @@ public class H5OrderService {
optHistory.setUpdateBy(order.getMemberId());
optHistory.setUpdateTime(optDate);
orderOperateHistoryMapper.insert(optHistory);
return order.getOrderSn();
}
//赠送积分
if (totalMoney.compareTo(BigDecimal.ZERO) > 0) {
//赠送积分
Member member = memberMapper.selectById(memberId);
UpdateWrapper<Member> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("id", member.getId());
updateWrapper.set("integral", member.getIntegral().add(totalMoney));
memberMapper.update(null, updateWrapper);
IntegralHistory history = new IntegralHistory();
history.setOpType(1);
history.setSubOpType(12);
history.setAmount(totalMoney);
history.setOrderId(orderId);
history.setMemberId(memberId);
history.setCreateTime(LocalDateTime.now());
integralHistoryMapper.insert(history);
}
return "确认收货成功!";
}
/**
......@@ -515,7 +595,7 @@ public class H5OrderService {
if (CollectionUtil.isEmpty(orderItem)) {
throw new RuntimeException("未查询到订单信息");
}
long count = orderList.stream().filter(it -> !Constants.H5OrderStatus.UN_PAY.equals(it.getStatus())).count();
long count = orderList.stream().filter(it -> !Constants.H5OrderStatus.UN_PAY.equals(it.getStatus()) && !Constants.H5OrderStatus.NOT_DELIVERED.equals(it.getStatus())).count();
if (count > 0) {
throw new RuntimeException("订单状态已更新,请刷新页面");
}
......@@ -612,7 +692,7 @@ public class H5OrderService {
wechatPaymentHistory = new WechatPaymentHistory();
wechatPaymentHistory.setOrderId(orderList.get(0).getPayId());
wechatPaymentHistory.setMemberId(req.getMemberId());
wechatPaymentHistory.setOpenid(memberWechat.getOpenid());
wechatPaymentHistory.setOpenid(openId);
wechatPaymentHistory.setTitle(orderItemList.get(0).getProductName());
wechatPaymentHistory.setMoney(orderList.get(0).getPayAmount());
wechatPaymentHistory.setOpType(Constants.PaymentOpType.PAY);
......@@ -647,7 +727,8 @@ public class H5OrderService {
String signatureStr = Stream.of(appId, String.valueOf(timeStamp), nonceStr, prepayId)
.collect(Collectors.joining("\n", "", "\n"));
try {
paySign = WechatPayUtil.getSign(signatureStr, WechatPayData.privateKeyPath);
paySign = WechatPayUtil.getSign(signatureStr, "/www/wwwroot/wenchuang/cert/apiclient_key.pem");
// paySign = WechatPayUtil.getSign(signatureStr, "E:\\yinhong\\wenchuang\\Java\\RuoYi-Mall\\ruoyi-admin\\src\\main\\resources\\cert\\apiclient_key.pem");
} catch (Exception e) {
throw new RuntimeException("支付失败");
}
......@@ -674,7 +755,7 @@ public class H5OrderService {
LocalDateTime optDate = LocalDateTime.now();
try {
redisService.lock(redisKey, redisValue, 60);
//先判断信回调的是否未success
//先判断信回调的是否未success
if (!Transaction.TradeStateEnum.SUCCESS.equals(messageDTO.getTradeStatus())) {
log.error("【订单支付回调】订单状态不是支付成功状态" + messageDTO.getTradeStatus());
throw new RuntimeException();
......@@ -709,6 +790,17 @@ public class H5OrderService {
//处理积分
integralHistoryService.handleIntegral(order.getId(), order.getPayAmount(), order.getMemberId());
//修改子订单状态
List<OrderItem> orderItemList = orderItemMapper.selectList(new QueryWrapper<OrderItem>().eq("order_id", order.getId()));
if (CollectionUtil.isNotEmpty(orderItemList)) {
orderItemList.forEach(orderItem -> {
UpdateWrapper<OrderItem> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("id", orderItem.getId());
updateWrapper.set("status", "5");
orderItemMapper.update(null, updateWrapper);
});
}
});
UpdateWrapper<WechatPaymentHistory> paymentHistoryUpdateWrapper = new UpdateWrapper<>();
paymentHistoryUpdateWrapper.eq("order_id", messageDTO.getOutTradeNo()).set("payment_id", messageDTO.getTradeNo())
......@@ -735,77 +827,35 @@ public class H5OrderService {
*/
@Transactional
public Order applyRefund(ApplyRefundForm applyRefundForm) {
Order order = orderMapper.selectById(applyRefundForm.getOrderId());
//是否符合售后条件
this.checkIfCanApplyRefund(order);
LocalDateTime optDate = LocalDateTime.now();
Long memberId = order.getMemberId();
//创建售后单aftersale
Aftersale addAftersale = new Aftersale();
addAftersale.setId(IDGenerator.generateId());
addAftersale.setMemberId(order.getMemberId());
addAftersale.setOrderId(order.getId());
addAftersale.setReturnAmount(order.getPayAmount());
addAftersale.setType(applyRefundForm.getApplyRefundType());
addAftersale.setStatus(AftersaleStatus.APPLY.getType());
addAftersale.setReason(applyRefundForm.getReason());
addAftersale.setQuantity(applyRefundForm.getQuantity());
addAftersale.setReason(applyRefundForm.getReason());
addAftersale.setDescription(applyRefundForm.getDescription());
addAftersale.setProofPics(applyRefundForm.getProofPics());
addAftersale.setCreateTime(optDate);
addAftersale.setCreateBy(memberId);
addAftersale.setUpdateTime(optDate);
addAftersale.setUpdateBy(memberId);
int rows = aftersaleMapper.insert(addAftersale);
if (rows != 1) {
throw new RuntimeException("插入订单售后失败");
}
//创建aftersale item
QueryWrapper<OrderItem> orderItemQw = new QueryWrapper<>();
orderItemQw.eq("order_id", order.getId());
List<OrderItem> orderItemList = orderItemMapper.selectList(orderItemQw);
List<AftersaleItem> addAftersaleItemList = new ArrayList<>();
orderItemList.forEach(orderItem -> {
AftersaleItem aftersaleItem = new AftersaleItem();
aftersaleItem.setMemberId(memberId);
aftersaleItem.setAftersaleId(addAftersale.getId());
aftersaleItem.setOrderId(orderItem.getOrderId());
aftersaleItem.setOrderItemId(orderItem.getId());
aftersaleItem.setReturnAmount(orderItem.getSalePrice().multiply(BigDecimal.valueOf(orderItem.getQuantity())));
aftersaleItem.setQuantity(orderItem.getQuantity());
aftersaleItem.setCreateTime(optDate);
aftersaleItem.setCreateBy(memberId);
aftersaleItem.setUpdateTime(optDate);
aftersaleItem.setUpdateBy(memberId);
addAftersaleItemList.add(aftersaleItem);
});
rows = aftersaleItemMapper.insertBatch(addAftersaleItemList);
if (rows < 1) {
throw new RuntimeException("创建售后订单item失败");
}
//更新订单
OrderItem orderItem = orderItemMapper.selectById(applyRefundForm.getOrderItemId());
if (null == orderItem) {
throw new ServiceException("所选产品信息有误!");
}
Order order = orderMapper.selectById(orderItem.getOrderId());
if (null == order) {
throw new ServiceException("订单不存在!");
}
//修改子订单状态
UpdateWrapper<OrderItem> itemUpdateWrapper = new UpdateWrapper<>();
itemUpdateWrapper.eq("id", orderItem.getId());
itemUpdateWrapper.set("status", "0");
itemUpdateWrapper.set("update_time", optDate);
itemUpdateWrapper.set("reason", applyRefundForm.getReason());
itemUpdateWrapper.set("proof_pics", applyRefundForm.getProofPics());
int row = orderItemMapper.update(null, itemUpdateWrapper);
if (row != 1) {
throw new RuntimeException("申请售后失败!");
}
//修改主订单状态
UpdateWrapper<Order> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("id", order.getId()).set("aftersale_status", OrderRefundStatus.APPLY.getType())
.set("update_time", optDate)
.set("update_by", memberId);
rows = orderMapper.update(null, updateWrapper);
if (rows < 1) {
throw new RuntimeException("修改订单状态失败");
}
//创建订单操作记录
OrderOperateHistory optHistory = new OrderOperateHistory();
optHistory.setOrderId(order.getId());
optHistory.setOrderSn(order.getOrderSn());
optHistory.setOperateMan("" + memberId);
optHistory.setOrderStatus(11);
optHistory.setCreateTime(optDate);
optHistory.setCreateBy(memberId);
optHistory.setUpdateBy(memberId);
optHistory.setUpdateTime(optDate);
rows = orderOperateHistoryMapper.insert(optHistory);
if (rows < 1) {
throw new RuntimeException("创建订单操作记录失败");
updateWrapper.eq("id", order.getId());
updateWrapper.set("status", OrderStatus.REFUUND.getType());
updateWrapper.set("update_time", optDate);
int update = orderMapper.update(null, updateWrapper);
if (update != 1) {
throw new RuntimeException("申请售后失败!");
}
return order;
}
......@@ -817,10 +867,10 @@ public class H5OrderService {
*/
private void checkIfCanApplyRefund(Order order) {
if (order == null) {
throw new RuntimeException("查询到订单信息");
throw new RuntimeException("查询到订单信息");
}
Integer status = order.getStatus();
boolean flag = OrderStatus.NOT_DELIVERED.getType().equals(status) || OrderStatus.DELIVERED.getType().equals(status)
boolean flag = OrderStatus.NOT_DELIVERED.getType().equals(status)
|| OrderStatus.COMPLETE.getType().equals(status);
if (!flag) {
throw new RuntimeException("该订单无法申请售后");
......@@ -842,41 +892,28 @@ public class H5OrderService {
* @return
*/
@Transactional
public String cancelRefund(Long orderId) {
Order order = orderMapper.selectById(orderId);
if (order == null) {
public String cancelRefund(Long orderItemId) {
OrderItem orderItem = orderItemMapper.selectById(orderItemId);
if (orderItem == null) {
throw new RuntimeException("未查询到该订单");
}
//查询是否有(待处理和退货中)售后单
QueryWrapper<Aftersale> aftersaleQw = new QueryWrapper<>();
aftersaleQw.eq("order_id", orderId);
aftersaleQw.in("status", Arrays.asList(AftersaleStatus.APPLY.getType(), AftersaleStatus.WAIT.getType()));
Aftersale aftersale = aftersaleMapper.selectOne(aftersaleQw);
if (aftersale == null) {
throw new RuntimeException("无售后单");
}
if (OrderRefundStatus.SUCCESS.getType().equals(order.getAftersaleStatus())) {
throw new RuntimeException("已退款成功");
}
Member member = (Member) LocalDataUtil.getVar(Constants.MEMBER_INFO);
LocalDateTime optDate = LocalDateTime.now();
//更新售后单状态
UpdateWrapper<Aftersale> aftersaleUpdateWrapper = new UpdateWrapper<>();
aftersaleUpdateWrapper.eq("id", aftersale.getId());
aftersaleUpdateWrapper.set("status", AftersaleStatus.CANCEL.getType());
aftersaleUpdateWrapper.set("update_time", optDate);
aftersaleUpdateWrapper.set("update_by", member.getId());
int rows = aftersaleMapper.update(null, aftersaleUpdateWrapper);
if (rows < 1) {
throw new RuntimeException("更新售后单失败");
//查询主订单中有几个子订单
Order order = orderMapper.selectById(orderItem.getOrderId());
List<OrderItem> orderItemList = orderItemMapper.selectList(new QueryWrapper<OrderItem>().eq("order_id", order.getId()));
if (orderItemList.size() > 1) {
}
//更新订单售后状态
// 更新订单
UpdateWrapper<Order> updateOrderWrapper = new UpdateWrapper<>();
updateOrderWrapper.eq("id", orderId)
.set("aftersale_status", OrderRefundStatus.NO_REFUND.getType()).set("update_time", optDate)
UpdateWrapper<OrderItem> updateOrderWrapper = new UpdateWrapper<>();
updateOrderWrapper.eq("id", orderItemId)
.set("status", "4")
.set("update_time", optDate)
.set("update_by", member.getId());
rows = orderMapper.update(null, updateOrderWrapper);
int rows = orderItemMapper.update(null, updateOrderWrapper);
if (rows != 1) {
throw new RuntimeException("更新订单状态失败");
}
......@@ -917,4 +954,21 @@ public class H5OrderService {
public Order selectById(Long orderId) {
return orderMapper.selectById(orderId);
}
public String refundOn(Long id, String on) {
OrderItem orderItem = orderItemMapper.selectById(id);
if (null == orderItem) {
throw new ServiceException("子订单不存在!");
}
UpdateWrapper<OrderItem> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("id", id);
updateWrapper.set("status", "2");
updateWrapper.set("refund_on", on);
int row = orderItemMapper.update(null, updateWrapper);
if (row > 1) {
return "提交成功!";
}
return "提交失败!";
}
}
......@@ -55,7 +55,7 @@ public class OrderJob {
QueryWrapper<Order> qw = new QueryWrapper<>();
qw.eq("status", Constants.OrderStatus.GET);
qw.eq("aftersale_status", 1);
qw.le("delivery_time", LocalDateTime.now().minusDays(15));
qw.le("delivery_time", LocalDateTime.now().minusDays(7));
List<Order> orderList = orderMapper.selectList(qw);
h5OrderService.orderCompleteByJob(orderList);
log.info("【订单完成任务结束】,处理了:{}个订单",orderList.size());
......
......@@ -71,10 +71,9 @@ public class H5IntegralHistoryController extends BaseController {
}
@ApiOperation("积分统计")
@PostMapping("/stat")
public ResponseEntity<IntegralStatVO> statIntegral(@RequestBody IntegralHistoryQuery query) {
IntegralStatVO res = service.statIntegral(query);
@GetMapping("/stat")
public ResponseEntity<IntegralStatVO> statIntegral() {
IntegralStatVO res = service.statIntegral(null);
return ResponseEntity.ok(res);
}
}
......@@ -25,6 +25,8 @@ public class ActivityApplyInfo extends BaseAudit {
@Excel(name = "活动id")
private Long activityId;
@TableField(exist = false)
private String coverUrl;
/**
* 报名用户id
*/
......@@ -84,4 +86,18 @@ public class ActivityApplyInfo extends BaseAudit {
@ApiModelProperty("删除标志(0代表存在 2代表删除)")
private String delFlag;
@ApiModelProperty("报名人数")
@Excel(name = "报名人数")
@TableField(exist = false)
private String num;
@ApiModelProperty("人数限制")
@Excel(name = "人数限制")
@TableField(exist = false)
private Long personCondition;
/**
* 活动结束时间
*/
private String activityEndTime;
}
......@@ -2,8 +2,10 @@ package com.cyl.manager.act.domain.entity;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseAudit;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
......@@ -16,7 +18,7 @@ import com.baomidou.mybatisplus.annotation.TableName;
@ApiModel(description="活动信息对象")
@Data
@TableName("activity_info")
public class ActivityInfo {
public class ActivityInfo extends BaseAudit {
private static final long serialVersionUID = 1L;
@ApiModelProperty("主键")
......@@ -86,4 +88,15 @@ public class ActivityInfo {
@ApiModelProperty("删除标志")
private String delFlag;
/**
* 活动状态(0:启用,1:禁用)
*/
private String status;
/**
* 报名人数
*/
@TableField(exist = false)
private Integer num;
}
......@@ -35,8 +35,8 @@ public class IntegralHistory {
@Excel(name = "类型 1:收入 2:支出 3:其他")
private Integer opType;
@ApiModelProperty("子类型:11签到 12消费获得 21退款扣除积分")
@Excel(name = "子类型:11签到 12消费获得 21退款扣除积分")
@ApiModelProperty("子类型:11签到 12消费获得 21退款扣除积分 22 兑换优惠券,23平台扣除,24平台赠送,25退款退回积分")
@Excel(name = "子类型:11签到 12消费获得 21退款扣除积分 22 兑换优惠券,23平台扣除,24平台赠送,25退款退回积分")
private Integer subOpType;
@ApiModelProperty("订单金额")
......
......@@ -24,4 +24,6 @@ public class ActivityApplyInfoQuery {
private String cancelUserName;
private Long userId;
private Long activityId;
}
......@@ -40,4 +40,9 @@ public class ActivityInfoQuery {
@ApiModelProperty("活动介绍 精确匹配")
private String activityIntroduce;
/**
* 活动状态(0:启用,1:禁用)
*/
private String status;
}
package com.cyl.manager.act.domain.vo;
import com.cyl.manager.act.domain.entity.ActivityApplyInfo;
import com.ruoyi.common.annotation.Excel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
@Data
public class ActivityApplyInfoSaveVo {
/**
* 活动id
*/
private Long activityId;
private Long userId;
/**
* 活动结束时间
*/
private String activityEndTime;
/**
* 报名用户数组
*/
private List<ActivityApplyInfo> activityApplyInfos;
}
......@@ -52,4 +52,8 @@ public class ActivityInfoVO {
@Excel(name = "备注")
private String remark;
private String delFlag;
/**
* 活动状态(0:启用,1:禁用)
*/
private String status;
}
......@@ -23,7 +23,7 @@ public class IntegralHistoryVO {
@Excel(name = "类型 1:收入 2:支出 3:其他")
private Integer opType;
/** 子类型:11签到 12消费获得 21退款扣除积分 */
@Excel(name = "子类型:11签到 12消费获得 21退款扣除积分")
@Excel(name = "子类型:11签到 12消费获得 21退款扣除积分 22 兑换优惠券,23平台扣除,24平台赠送")
private Integer subOpType;
/** 订单金额 */
@Excel(name = "订单金额")
......
......@@ -20,5 +20,5 @@ public interface IntegralHistoryMapper extends BaseMapper<IntegralHistory> {
*/
List<IntegralHistory> selectByEntity(IntegralHistory integralHistory);
IntegralStatVO statIntegral(LocalDateTime start, LocalDateTime end, Long memberId);
IntegralStatVO statIntegral(Long memberId);
}
package com.cyl.manager.act.service;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.time.LocalDateTime;
import java.util.Optional;
import cn.hutool.core.util.RandomUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.cyl.manager.act.domain.entity.ActivityApplyInfo;
import com.cyl.manager.act.domain.entity.ActivityInfo;
import com.cyl.manager.act.domain.query.ActivityApplyInfoQuery;
import com.cyl.manager.act.domain.vo.ActivityApplyInfoSaveVo;
import com.cyl.manager.act.mapper.ActivityApplyInfoMapper;
import com.cyl.manager.act.mapper.ActivityInfoMapper;
import com.cyl.manager.ums.domain.entity.Member;
import com.cyl.manager.ums.mapper.MemberMapper;
import com.github.pagehelper.PageHelper;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.utils.sign.Md5Utils;
import com.ruoyi.system.mapper.SysUserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.apache.commons.lang3.StringUtils;
......@@ -30,6 +43,9 @@ public class ActivityApplyInfoService {
@Autowired
private ActivityInfoMapper activityInfoMapper;
@Autowired
private MemberMapper memberMapper;
/**
* 查询活动报名信息
*
......@@ -37,7 +53,31 @@ public class ActivityApplyInfoService {
* @return 活动报名信息
*/
public ActivityApplyInfo selectById(Long id) {
return activityApplyInfoMapper.selectById(id);
ActivityApplyInfo activityApplyInfo = activityApplyInfoMapper.selectById(id);
int num;
List<ActivityApplyInfo> list = activityApplyInfoMapper.selectList(Wrappers.<ActivityApplyInfo>lambdaQuery()
.eq(ActivityApplyInfo::getActivityId, activityApplyInfo.getActivityId()).ne(ActivityApplyInfo::getStatus,3));
if (CollectionUtils.isNotEmpty(list)) {
num = list.size();
} else {
num = 0;
}
Optional.ofNullable(activityInfoMapper.selectById(activityApplyInfo.getActivityId()))
.ifPresent(activityInfo -> {
activityApplyInfo.setActivityTitle(activityInfo.getActivityTitle());
activityApplyInfo.setCoverUrl(activityInfo.getCoverUrl());
activityApplyInfo.setActivityDate(activityInfo.getActivityDate());
activityApplyInfo.setActivityAddress(activityInfo.getActivityAddress());
activityApplyInfo.setApplyStartTime(activityInfo.getApplyStartTime());
activityApplyInfo.setApplyEndTime(activityInfo.getApplyEndTime());
activityApplyInfo.setNum(num + "/" + activityInfo.getPersonCondition());
activityApplyInfo.setPersonCondition(activityInfo.getPersonCondition());
});
Member member = memberMapper.selectById(activityApplyInfo.getUserId());
if (null != member) {
activityApplyInfo.setCancelUserName(member.getNickname());
}
return activityApplyInfo;
}
/**
......@@ -48,6 +88,21 @@ public class ActivityApplyInfoService {
* @return 活动报名信息
*/
public List<ActivityApplyInfo> selectList(ActivityApplyInfoQuery query, Pageable page) {
List<ActivityApplyInfo> result = activityApplyInfoMapper.selectList(null);
if (CollectionUtils.isNotEmpty(result)) {
result.forEach(activityApplyInfo -> {
//判断报名活动是否到期并且未核销
if (activityApplyInfo.getStatus().equals("0")) {
if (isBeforeCurrentTime(activityApplyInfo.getActivityEndTime())) {
UpdateWrapper<ActivityApplyInfo> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("id", activityApplyInfo.getId());
updateWrapper.set("status", "2");
//修改状态
activityApplyInfoMapper.update(null, updateWrapper);
}
}
});
}
if (page != null) {
PageHelper.startPage(page.getPageNumber() + 1, page.getPageSize());
}
......@@ -68,22 +123,42 @@ public class ActivityApplyInfoService {
if (!StringUtils.isEmpty(status)) {
qw.eq("status", status);
}
if (null != query.getActivityId()) {
qw.eq("activity_id", query.getActivityId());
}
List<ActivityApplyInfo> activityApplyInfos = activityApplyInfoMapper.selectList(qw);
if (CollectionUtils.isNotEmpty(activityApplyInfos)) {
activityApplyInfos.forEach(activityApplyInfo -> {
Optional.ofNullable(activityInfoMapper.selectById(activityApplyInfo.getActivityId()))
.ifPresent(activityInfo -> {
activityApplyInfo.setActivityTitle(activityInfo.getActivityTitle());
activityApplyInfo.setCoverUrl(activityInfo.getCoverUrl());
activityApplyInfo.setActivityDate(activityInfo.getActivityDate());
activityApplyInfo.setActivityAddress(activityInfo.getActivityAddress());
activityApplyInfo.setApplyStartTime(activityInfo.getApplyStartTime());
activityApplyInfo.setApplyEndTime(activityInfo.getApplyEndTime());
//获取报名人数
List<ActivityApplyInfo> list = activityApplyInfoMapper.selectList(Wrappers.<ActivityApplyInfo>lambdaQuery()
.eq(ActivityApplyInfo::getActivityId, activityInfo.getId()).ne(ActivityApplyInfo::getStatus, "3"));
activityApplyInfo.setNum(String.valueOf(list.size()));
activityApplyInfo.setPersonCondition(activityInfo.getPersonCondition());
});
});
}
return activityApplyInfos;
}
public static boolean isBeforeCurrentTime(String inputTime) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm");
try {
Date date = sdf.parse(inputTime);
return date.before(new Date());
} catch (ParseException e) {
throw new RuntimeException("时间格式错误", e);
}
}
/**
* 新增活动报名信息
*
......@@ -97,6 +172,36 @@ public class ActivityApplyInfoService {
}
/**
* 批量新增活动报名信息
*
* @param activityApplyInfoSaveVo 活动报名信息
* @return 结果
*/
public int insertAll(ActivityApplyInfoSaveVo activityApplyInfoSaveVo) {
int i = 0;
if (null != activityApplyInfoSaveVo.getActivityId()) {
ActivityInfo activityInfo = activityInfoMapper.selectById(activityApplyInfoSaveVo.getActivityId());
if (CollectionUtils.isNotEmpty(activityApplyInfoSaveVo.getActivityApplyInfos())) {
for (ActivityApplyInfo activityApplyInfo : activityApplyInfoSaveVo.getActivityApplyInfos()) {
activityApplyInfo.setCreateTime(LocalDateTime.now());
activityApplyInfo.setDelFlag("0");
activityApplyInfo.setActivityEndTime(activityApplyInfoSaveVo.getActivityEndTime());
activityApplyInfo.setActivityTitle(activityInfo.getActivityTitle());
activityApplyInfo.setActivityDate(activityInfo.getActivityDate());
activityApplyInfo.setActivityAddress(activityInfo.getActivityAddress());
activityApplyInfo.setApplyStartTime(activityInfo.getApplyStartTime());
activityApplyInfo.setActivityId(activityInfo.getId());
activityApplyInfo.setUserId(activityApplyInfoSaveVo.getUserId());
activityApplyInfo.setApplyEndTime(activityInfo.getApplyEndTime());
activityApplyInfo.setCancelCode(RandomUtil.randomString(10));
i = activityApplyInfoMapper.insert(activityApplyInfo);
}
}
}
return i;
}
/**
* 修改活动报名信息
*
* @param activityApplyInfo 活动报名信息
......
......@@ -4,9 +4,14 @@ import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.List;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.cyl.manager.act.domain.entity.ActivityApplyInfo;
import com.cyl.manager.act.domain.entity.ActivityInfo;
import com.cyl.manager.act.domain.query.ActivityInfoQuery;
import com.cyl.manager.act.mapper.ActivityApplyInfoMapper;
import com.cyl.manager.act.mapper.ActivityInfoMapper;
import com.github.pagehelper.PageHelper;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -17,7 +22,6 @@ import org.springframework.stereotype.Service;
/**
* 活动信息Service业务层处理
*
*
* @author zcc
*/
@Service
......@@ -25,6 +29,10 @@ public class ActivityInfoService {
@Autowired
private ActivityInfoMapper activityInfoMapper;
@Autowired
private ActivityApplyInfoMapper activityApplyInfoMapper;
/**
* 查询活动信息
*
......@@ -32,7 +40,16 @@ public class ActivityInfoService {
* @return 活动信息
*/
public ActivityInfo selectById(Long id) {
return activityInfoMapper.selectById(id);
ActivityInfo activityInfo = activityInfoMapper.selectById(id);
//获取报名人数
List<ActivityApplyInfo> activityApplyInfos = activityApplyInfoMapper.selectList(Wrappers.<ActivityApplyInfo>lambdaQuery()
.eq(ActivityApplyInfo::getActivityId, activityInfo.getId())
.ne(ActivityApplyInfo::getDelFlag, "2")
.notIn(ActivityApplyInfo::getStatus, 2, 3));
if (CollectionUtils.isNotEmpty(activityApplyInfos)) {
activityInfo.setNum(activityApplyInfos.size());
}
return activityInfo;
}
/**
......@@ -47,7 +64,7 @@ public class ActivityInfoService {
PageHelper.startPage(page.getPageNumber() + 1, page.getPageSize());
}
QueryWrapper<ActivityInfo> qw = new QueryWrapper<>();
qw.eq("del_flag",0);
qw.eq("del_flag", 0);
String activityTitle = query.getActivityTitle();
if (!StringUtils.isEmpty(activityTitle)) {
qw.eq("activity_title", activityTitle);
......@@ -64,6 +81,9 @@ public class ActivityInfoService {
if (!StringUtils.isEmpty(applyEndTime)) {
qw.eq("apply_end_time", applyEndTime);
}
if (!StringUtils.isEmpty(query.getStatus())) {
qw.eq("status", query.getStatus());
}
String activityAddress = query.getActivityAddress();
if (!StringUtils.isEmpty(activityAddress)) {
qw.eq("activity_address", activityAddress);
......@@ -84,7 +104,19 @@ public class ActivityInfoService {
if (!StringUtils.isEmpty(activityIntroduce)) {
qw.eq("activity_introduce", activityIntroduce);
}
return activityInfoMapper.selectList(qw);
List<ActivityInfo> list = activityInfoMapper.selectList(qw);
if (CollectionUtils.isNotEmpty(list)) {
list.forEach(activityInfo -> {
//获取报名人数
List<ActivityApplyInfo> activityApplyInfos = activityApplyInfoMapper.selectList(Wrappers.<ActivityApplyInfo>lambdaQuery()
.eq(ActivityApplyInfo::getActivityId, activityInfo.getId())
.notIn(ActivityApplyInfo::getStatus, 2, 3));
if (CollectionUtils.isNotEmpty(activityApplyInfos)) {
activityInfo.setNum(activityApplyInfos.size());
}
});
}
return list;
}
/**
......
......@@ -7,13 +7,19 @@ import java.util.List;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.cyl.h5.config.SecurityUtil;
import com.cyl.manager.act.constant.IntegralRule;
import com.cyl.manager.act.domain.vo.IntegralStatVO;
import com.cyl.manager.oms.domain.entity.Order;
import com.cyl.manager.oms.mapper.OrderMapper;
import com.cyl.manager.ums.domain.entity.Member;
import com.cyl.manager.ums.domain.entity.MemberAccount;
import com.cyl.manager.ums.mapper.MemberAccountMapper;
import com.cyl.manager.ums.mapper.MemberMapper;
import com.github.pagehelper.PageHelper;
import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.system.service.ISysConfigService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -40,6 +46,10 @@ public class IntegralHistoryService {
private MemberAccountMapper memberAccountMapper;
@Autowired
private ISysConfigService sysConfigService;
@Autowired
private MemberMapper memberMapper;
@Autowired
private OrderMapper orderMapper;
/**
* 查询积分流水表
......@@ -142,32 +152,36 @@ public class IntegralHistoryService {
}
public void handleIntegral(Long orderId, BigDecimal amount, Long memberId) {
String config = sysConfigService.selectConfigByKey(Constants.INTEGRAL_RULE_KEY);
IntegralRule rule;
if (StringUtils.isNotEmpty(config)) {
rule = JSON.parseObject(config, IntegralRule.class);
} else {
rule = new IntegralRule();
//扣除用户积分
Member member = memberMapper.selectById(memberId);
if (null == member) {
throw new ServiceException("用户信息异常!");
}
BigDecimal divide = amount.divide(rule.getOrderAmount(), 0, RoundingMode.DOWN);
if (divide.compareTo(BigDecimal.ZERO) < 1) {
log.info("订单:{},金额:{}不足{}元,不记录积分",orderId,amount,rule.getOrderAmount());
return;
//获取订单信息
Order order = orderMapper.selectById(orderId);
if (null == order) {
throw new ServiceException("订单信息异常!");
}
BigDecimal total = divide.multiply(rule.getOrderCount());
if (total.compareTo(BigDecimal.ZERO) < 1) {
log.info("订单:{},orderCount为0,不记录积分",orderId);
if(null == order.getTotalIntegral() || order.getTotalIntegral().compareTo(BigDecimal.ZERO) < 1){
log.info("订单:{},金额为0,不记录积分", orderId);
return;
}
BigDecimal integral = member.getIntegral().subtract(order.getTotalIntegral());
UpdateWrapper<Member> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("id", memberId);
updateWrapper.set("integral", integral);
memberMapper.update(null, updateWrapper);
IntegralHistory history = new IntegralHistory();
history.setOpType(1);
history.setSubOpType(12);
history.setAmount(total);
history.setOpType(2);
history.setSubOpType(23);
history.setAmount(order.getTotalIntegral());
history.setOrderId(orderId);
history.setOrderAmount(amount);
history.setMemberId(memberId);
history.setCreateTime(LocalDateTime.now());
insert2(history);
integralHistoryMapper.insert(history);
}
/**
......@@ -195,9 +209,7 @@ public class IntegralHistoryService {
PageHelper.startPage(page.getPageNumber() + 1, page.getPageSize());
}
QueryWrapper<IntegralHistory> qw = new QueryWrapper<>();
qw.eq("member_id", SecurityUtil.getLocalMember().getId())
.ge("create_time", query.getStart())
.le("create_time", query.getEnd());
qw.eq("member_id", SecurityUtil.getLocalMember().getId());
Integer opType = query.getOpType();
if (opType != null) {
qw.eq("op_type", opType);
......@@ -212,7 +224,7 @@ public class IntegralHistoryService {
public IntegralStatVO statIntegral(IntegralHistoryQuery query) {
Long memberId = SecurityUtil.getLocalMember().getId();
IntegralStatVO statVO = integralHistoryMapper.statIntegral(query.getStart(), query.getEnd(), memberId);
IntegralStatVO statVO = integralHistoryMapper.statIntegral(memberId);
if (statVO == null) {
statVO = new IntegralStatVO();
}
......
package com.cyl.manager.live.domain;
import java.util.Date;
/**
* 调取微信接口创建直播间所用实体
*
* @author songrongzhen
* @date 2023/05/05
*/
public class WechatzbjView {
/**
* 直播间房号
*/
private Number id;
/**
* 直播间名字
* 是否必填:是
*/
private String name;
/**
* 背景图,填入mediaID(mediaID获取后,三天内有效)
* 是否必填:是
*/
private String coverImg;
/**
* 直播计划开始时间(开播时间需要在当前时间的10分钟后 并且 开始时间不能在 6 个月后)
* 是否必填:是
*/
private Number startTime;
/**
* 直播计划结束时间(开播时间和结束时间间隔不得短于30分钟,不得超过24小时)
* 是否必填:是
*/
private Number endTime;
/**
* 主播昵称
* 是否必填:是
*/
private String anchorName;
/**
* 主播微信号
* 是否必填:是
*/
private String anchorWechat;
/**
* 主播副号微信号
* 是否必填:否
*/
private String subAnchorWechat;
/**
* 创建者微信号
* 是否必填:否
*/
private String createrWechat;
/**
* 分享图,填入mediaID(mediaID获取后,三天内有效)
* 是否必填:是
*/
private String shareImg;
/**
* 购物直播频道封面图,填入mediaID(mediaID获取后,三天内有效)
* 是否必填:是
*/
private String feedsImg;
/**
* 是否开启官方收录 【1: 开启,0:关闭】,默认开启收录
* 是否必填:否
*/
private Number isFeedsPublic;
/**
* 直播间类型 【1: 推流,0:手机直播】
* 是否必填:是
*/
private Number type;
/**
* 是否关闭点赞 【0:开启,1:关闭】
* 是否必填:是
*/
private Number closeLike;
/**
* 是否关闭货架 【0:开启,1:关闭】
* 是否必填:是
*/
private Number closeGoods;
/**
* 是否关闭评论 【0:开启,1:关闭】
* 是否必填:是
*/
private Number closeComment;
/**
* 是否关闭回放 【0:开启,1:关闭】
* 是否必填:否
*/
private Number closeReplay;
/**
* 是否关闭分享 【0:开启,1:关闭】
* 是否必填:否
*/
private Number closeShare;
/**
* 是否关闭客服 【0:开启,1:关闭】
* 是否必填:否
*/
private Number closeKf;
}
\ No newline at end of file
......@@ -2,6 +2,7 @@ package com.cyl.manager.oms.controller;
import com.cyl.manager.oms.convert.OrderConvert;
import com.cyl.manager.oms.domain.entity.Order;
import com.cyl.manager.oms.domain.entity.OrderItem;
import com.cyl.manager.oms.domain.query.OrderQuery;
import com.cyl.manager.oms.domain.form.DeliverProductForm;
import com.cyl.manager.oms.domain.form.ManagerOrderQueryForm;
......@@ -25,13 +26,14 @@ import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 订单表Controller
*
* @author zcc
* @date 2022-12-01
*/
@Api(description ="订单表接口列表")
@Api(description = "订单表接口列表")
@RestController
@RequestMapping("/oms/order")
@Slf4j
......@@ -102,27 +104,28 @@ public class OrderController extends BaseController {
@PreAuthorize("@ss.hasPermi('oms:order:note:add')")
@Log(title = "订单表", businessType = BusinessType.UPDATE)
@PostMapping("/merchantNote/add")
public ResponseEntity<Integer> saveMerchantNote(@RequestBody Order order){
public ResponseEntity<Integer> saveMerchantNote(@RequestBody Order order) {
return ResponseEntity.ok(service.saveMerchantNote(order));
}
@ApiOperation("管理后台订单发货")
@PreAuthorize("@ss.hasPermi('oms:order:delivery')")
@PostMapping("/deliverProduct")
public ResponseEntity<String> delivery(@RequestBody DeliverProductForm request){
public ResponseEntity<String> delivery(@RequestBody DeliverProductForm request) {
Long userId = SecurityUtils.getUserId();
String redisKey = "oms_order_deliverProduct" + request.getOrderId();
String redisValue = request.getOrderId() + "_" + System.currentTimeMillis();
try{
try {
redisService.lock(redisKey, redisValue, 60);
return ResponseEntity.ok(service.deliverProduct(request, userId));
}catch (Exception e){
} catch (Exception e) {
log.error("订单发货接口异常");
throw new RuntimeException("发货失败");
}finally {
try{
redisService.unLock(redisKey, redisValue);;
}catch (Exception e){
} finally {
try {
redisService.unLock(redisKey, redisValue);
;
} catch (Exception e) {
log.error("", e);
}
}
......@@ -130,15 +133,40 @@ public class OrderController extends BaseController {
@ApiOperation("订单日志")
@GetMapping("/log/{orderId}")
public ResponseEntity<List<OrderOperateHistoryVO>> log(@PathVariable Long orderId){
public ResponseEntity<List<OrderOperateHistoryVO>> log(@PathVariable Long orderId) {
return ResponseEntity.ok(service.log(orderId));
}
@PreAuthorize("@ss.hasAnyRoles('admin')")
@ApiOperation("订单解密")
@GetMapping("/decryptPhone/{orderId}")
public ResponseEntity<String> decryptPhone(@PathVariable Long orderId){
public ResponseEntity<String> decryptPhone(@PathVariable Long orderId) {
String decryptPhone = service.decryptPhone(orderId);
return ResponseEntity.ok(decryptPhone);
}
@ApiOperation("查询退款产品信息")
@GetMapping(value = "/refundOrderDetail/{id}")
public ResponseEntity<List<OrderItem>> refundOrderDetail(@PathVariable("id") Long id) {
return ResponseEntity.ok(service.refundOrderDetail(id));
}
@ApiOperation("通过OR驳回,STATUS=0通过,STATUS=1驳回")
@GetMapping("/refund")
public ResponseEntity<String> refund(Long id, Long status) {
return ResponseEntity.ok(service.refund(id, status));
}
@ApiOperation("退款")
@GetMapping("/tuikuan")
public ResponseEntity<String> tuikuan(Long id) {
return ResponseEntity.ok(service.tuikuan(id));
}
@ApiOperation("驳回")
@GetMapping("/bohui")
public ResponseEntity<String> bohui(Long id,Long type) {
return ResponseEntity.ok(service.bohui(id,type));
}
}
......@@ -61,8 +61,8 @@ public class Order extends BaseAudit {
@Excel(name = "支付方式:0->未支付;1->支付宝;2->微信")
private Integer payType;
@ApiModelProperty("订单状态:0->待付款;1->待发货;2->已发货;3->已完成;4->已关闭;5->无效订单")
@Excel(name = "订单状态:0->待付款;1->待发货;2->已发货;3->已完成;4->已关闭;5->无效订单")
@ApiModelProperty("订单状态:0->待付款;1->待发货;2->待收货;3->已完成;4->订单取消;5->售后取消;->6:售后处理中,7:申请失败,8: 退款成功,9:待退款")
@Excel(name = "订单状态:0->待付款;1->待发货;2->待收货;3->已完成;4->订单取消;5->售后取消;->6:售后处理中,7:申请失败,8: 退款成功,9:待退款")
private Integer status;
@ApiModelProperty("退款状态,枚举值:1:无售后或售后关闭,2:售后处理中,3:退款中,4: 退款成功")
......@@ -159,4 +159,20 @@ public class Order extends BaseAudit {
@ApiModelProperty("优惠券金额")
private BigDecimal couponAmount;
@ApiModelProperty("抵扣金额")
private BigDecimal deMoney;
@ApiModelProperty("使用积分")
private BigDecimal totalIntegral;
@ApiModelProperty(value = "退款原因", required = true)
private String reason;
@ApiModelProperty("凭证图片以逗号隔开")
private String proofPics;
/**
* 赠送积分
*/
private BigDecimal giveIntegral;
}
......@@ -10,12 +10,13 @@ import io.swagger.annotations.ApiModelProperty;
import com.ruoyi.common.core.domain.BaseAudit;
import lombok.Data;
import com.baomidou.mybatisplus.annotation.TableName;
/**
* 订单中所包含的商品对象 oms_order_item
*
* @author zcc
*/
@ApiModel(description="订单中所包含的商品对象")
@ApiModel(description = "订单中所包含的商品对象")
@Data
@TableName("oms_order_item")
public class OrderItem extends BaseAudit {
......@@ -81,4 +82,29 @@ public class OrderItem extends BaseAudit {
@Excel(name = "商品sku属性:[{\"key\":\"颜色\",\"value\":\"颜色\"},{\"key\":\"容量\",\"value\":\"4G\"}]")
private String spData;
@ApiModelProperty("优惠后金额")
private BigDecimal couponMoney;
@ApiModelProperty("使用积分")
private BigDecimal useIntegral;
@ApiModelProperty("抵扣金额")
private BigDecimal deMoney;
@ApiModelProperty("状态(0:售后中,1:申请失败,2:待退款,3:退款失败,4:售后取消,5:待发货,6:待收货,7:已完成,8:退款成功,9:已取消)")
private String status;
/**
* 赠送积分
*/
private BigDecimal giveIntegral;
@ApiModelProperty(value = "退款原因")
private String reason;
@ApiModelProperty("凭证图片以逗号隔开")
private String proofPics;
@ApiModelProperty("退货单号")
private String refundOn;
}
......@@ -20,4 +20,15 @@ import javax.validation.constraints.NotNull;
@ApiModelProperty(name = "remark",value = "拒绝理由 操作类型为2时必填",required = true,dataType = "String")
private String remark;
@ApiModelProperty(name = "如果只生请一笔售后传入子订单的id")
private Long orderItemId;
@ApiModelProperty(name = "退款原因")
private String reason;
@ApiModelProperty("凭证图片以逗号隔开")
private String proofPics;
private Long memberId;
}
\ No newline at end of file
......@@ -30,7 +30,7 @@ public class ManagerOrderQueryForm {
@ApiModelProperty(name = "payType", value = "支付方式 0->未支付;1->支付宝;2->微信", required = true, dataType = "Integer")
private Integer payType;
@ApiModelProperty(name = "status", value = "订单状态:0->待付款;1->待发货;2->已发货;3->已完成;4->已关闭;5->无效订单", required = true, dataType = "String")
@ApiModelProperty(name = "status", value = "订单状态:0->待付款;1->待发货;2->待收货;3->已完成;4->订单取消;5->售后取消;->6:售后处理中,7:申请失败,8: 退款成功,9:待退款", required = true, dataType = "String")
private Integer status;
@ApiModelProperty("省份/直辖市 精确匹配")
......
......@@ -35,7 +35,7 @@ public class OrderQuery {
@ApiModelProperty("支付方式:0->未支付;1->支付宝;2->微信 精确匹配")
private Integer payType;
@ApiModelProperty("订单状态:0->待付款;1->待发货;2->已发货;3->已完成;4->已关闭;5->无效订单 精确匹配")
@ApiModelProperty("订单状态:0->待付款;1->待发货;2->待收货;3->已完成;4->订单取消;5->售后取消;->6:售后处理中,7:申请失败,8: 退款成功,9:待退款")
private Integer status;
@ApiModelProperty("退款状态,枚举值:1:无售后或售后关闭,2:售后处理中,3:退款中,4: 退款成功 精确匹配")
......
......@@ -44,4 +44,11 @@ public class ManagerOrderDetailVO {
@ApiModelProperty("订单金额")
private BigDecimal totalAmount;
private BigDecimal couponAmount;
@ApiModelProperty("抵扣金额")
private BigDecimal deMoney;
/**
* 赠送积分
*/
private BigDecimal giveIntegral;
}
......@@ -9,6 +9,7 @@ import java.math.BigDecimal;
@Data
@ApiModel("订单")
public class ManagerOrderProductVO {
private Long id;
@ApiModelProperty("商品id")
private Long productId;
@ApiModelProperty("商品名称")
......@@ -21,5 +22,20 @@ public class ManagerOrderProductVO {
private Integer buyNum;
@ApiModelProperty("销售价格")
private BigDecimal salePrice;
@ApiModelProperty("优惠后金额")
private BigDecimal couponMoney;
private String status;
@ApiModelProperty(value = "退款原因")
private String reason;
@ApiModelProperty("凭证图片以逗号隔开")
private String proofPics;
@ApiModelProperty("退货单号")
private String refundOn;
@ApiModelProperty("使用积分")
private BigDecimal useIntegral;
}
......@@ -31,7 +31,7 @@ public class ManagerOrderVO {
@ApiModelProperty(name = "avatar",value = "用户头像",required = true,dataType = "String")
private String avatar;
@ApiModelProperty(name = "status",value = "订单状态:0->待付款;1->待发货;2->已发货;3->已完成;4->已关闭;5->无效订单",required = true,dataType = "Integer")
@ApiModelProperty(name = "status",value = "0->待付款;1->待发货;2->已发货;3->已完成;4->已关闭;5->无效订单;->6:售后处理中,7:退款中,8: 退款成功",required = true,dataType = "Integer")
private Integer status;
@ApiModelProperty("退款状态,枚举值:1:无售后或售后关闭,2:售后处理中,3:退款中,4: 退款成功")
......@@ -92,6 +92,8 @@ public class ManagerOrderVO {
private String receiverProvince;
private String receiverPhoneEncrypted;
private String receiverCity;
private String receiverDistrict;
......@@ -101,4 +103,13 @@ public class ManagerOrderVO {
private String mark;
private BigDecimal couponAmount;
@ApiModelProperty("抵扣金额")
private BigDecimal deMoney;
@ApiModelProperty("使用积分")
private BigDecimal totalIntegral;
/**
* 赠送积分
*/
private BigDecimal giveIntegral;
}
......@@ -3,6 +3,7 @@ package com.cyl.manager.oms.domain.vo;
import java.math.BigDecimal;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseAudit;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 订单中所包含的商品 数据视图对象
......@@ -55,4 +56,20 @@ public class OrderItemVO extends BaseAudit {
/** 商品sku属性:[{\"key\":\"颜色\",\"value\":\"颜色\"},{\"key\":\"容量\",\"value\":\"4G\"}] */
@Excel(name = "商品sku属性:[{\"key\":\"颜色\",\"value\":\"颜色\"},{\"key\":\"容量\",\"value\":\"4G\"}]")
private String spData;
private BigDecimal deMoney;
/**
* 赠送积分
*/
private BigDecimal giveIntegral;
@ApiModelProperty(value = "退款原因")
private String reason;
@ApiModelProperty("凭证图片以逗号隔开")
private String proofPics;
@ApiModelProperty("退货单号")
private String refundOn;
@ApiModelProperty("优惠后金额")
private BigDecimal couponMoney;
}
......@@ -8,6 +8,7 @@ import com.cyl.manager.oms.domain.entity.OrderItem;
import com.ruoyi.common.annotation.Excel;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.core.domain.BaseAudit;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 订单表 数据视图对象
......@@ -43,8 +44,8 @@ public class OrderVO extends BaseAudit {
/** 支付方式:0->未支付;1->支付宝;2->微信 */
@Excel(name = "支付方式:0->未支付;1->支付宝;2->微信")
private Integer payType;
/** 订单状态:0->待付款;1->待发货;2->已发货;3->已完成;4->已关闭;5->无效订单 */
@Excel(name = "订单状态:0->待付款;1->待发货;2->已发货;3->已完成;4->已关闭;5->无效订单")
/** 订单状态:0->待付款;1->待发货;2->待收货;3->已完成;4->订单取消;5->售后取消;->6:售后处理中,7:申请失败,8: 退款成功,9:待退款 */
@Excel(name = "订单状态:0->待付款;1->待发货;2->待收货;3->已完成;4->订单取消;5->售后取消;->6:售后处理中,7:申请失败,8: 退款成功,9:待退款")
private Integer status;
/** 退款状态,枚举值:1:无售后或售后关闭,2:售后处理中,3:退款中,4: 退款成功 */
@Excel(name = "退款状态,枚举值:1:无售后或售后关闭,2:售后处理中,3:退款中,4: 退款成功")
......@@ -52,6 +53,11 @@ public class OrderVO extends BaseAudit {
/** 物流公司(配送方式) */
@Excel(name = "物流公司(配送方式)")
private String deliveryCompany;
@ApiModelProperty(value = "退款原因", required = true)
private String reason;
@ApiModelProperty("凭证图片以逗号隔开")
private String proofPics;
/** 物流单号 */
@Excel(name = "物流单号")
private String deliverySn;
......@@ -109,5 +115,10 @@ public class OrderVO extends BaseAudit {
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Excel(name = "确认收货时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime receiveTime;
@ApiModelProperty("抵扣金额")
private BigDecimal deMoney;
@ApiModelProperty("使用积分")
private BigDecimal totalIntegral;
private List<OrderItem> items;
}
......@@ -3,15 +3,19 @@ package com.cyl.manager.oms.service;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.*;
import java.util.concurrent.atomic.AtomicReference;
import java.util.stream.Collectors;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.cyl.manager.act.domain.entity.IntegralHistory;
import com.cyl.manager.act.mapper.IntegralHistoryMapper;
import com.cyl.manager.act.service.MemberCouponService;
import com.cyl.manager.oms.convert.OrderOperateHistoryConvert;
import com.cyl.manager.oms.domain.entity.*;
......@@ -32,6 +36,9 @@ import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.enums.AftersaleStatus;
import com.ruoyi.common.enums.OrderRefundStatus;
import com.ruoyi.common.enums.OrderStatus;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.framework.config.LocalDataUtil;
import com.wechat.pay.java.service.refund.model.Refund;
import com.wechat.pay.java.service.refund.model.RefundNotification;
import lombok.extern.slf4j.Slf4j;
......@@ -79,6 +86,8 @@ public class AftersaleService {
private WechatPayService wechatPayService;
@Autowired
private OrderOperateHistoryMapper operateHistoryMapper;
@Autowired
private IntegralHistoryMapper integralHistoryMapper;
/**
* 查询订单售后
......@@ -239,7 +248,6 @@ public class AftersaleService {
* 售后处理
*
* @param request 请求体
* @param user 操作人
* @return
*/
@Transactional(rollbackFor = Exception.class)
......@@ -248,32 +256,76 @@ public class AftersaleService {
if (order == null) {
throw new RuntimeException("无该订单");
}
QueryWrapper<Aftersale> aftersaleQw = new QueryWrapper<>();
aftersaleQw.eq("order_id", request.getOrderId());
if (request.getOptType() == 3) {
aftersaleQw.eq("status", 1);
LocalDateTime optDate = LocalDateTime.now();
//不是0元订单
if (order.getPayAmount().compareTo(BigDecimal.ZERO) > 0) {
//只申请一笔售后
if (request.getOrderItemId() != null) {
List<OrderItem> orderItem = orderItemMapper.selectList(new QueryWrapper<OrderItem>().eq("id", request.getOrderItemId()));
if (CollectionUtil.isNotEmpty(orderItem)) {
// 是否需要发起退款
if (request.getOptType() == Constants.OptType.AGREE) {
BigDecimal money = new BigDecimal("0.00");
if (orderItem.get(0).getCouponMoney() == null || orderItem.get(0).getCouponMoney().compareTo(BigDecimal.ZERO) <= 0) {
money = orderItem.get(0).getSalePrice();
} else {
aftersaleQw.eq("status", 0);
money = orderItem.get(0).getCouponMoney();
}
Aftersale aftersale = aftersaleMapper.selectOne(aftersaleQw);
if (aftersale == null) {
throw new RuntimeException("没有售后单");
BigDecimal multiply = money.multiply(BigDecimal.valueOf(orderItem.get(0).getQuantity()));
//开始退款
Refund wechatResponse = wechatPayService.refundPay(order.getOrderSn() + RandomUtil.randomNumbers(5),
order.getPayId() + "",
"https://wenchuang.yyinhong.cn/api/no-auth/wechat/weChatRefundNotify",
multiply.multiply(new BigDecimal("100")).longValue(),
order.getPayAmount().multiply(new BigDecimal("100")).longValue(), request.getReason());
log.info("发起微信退款返回信息,tradeRefund:{}", JSONObject.toJSONString(wechatResponse == null ? "" : wechatResponse));
//库存回滚
orderItem.stream().collect(Collectors.groupingBy(it -> it.getSkuId())).forEach((k, v) -> {
AtomicReference<Integer> totalCount = new AtomicReference<>(0);
v.forEach(it -> totalCount.updateAndGet(v1 -> v1 + it.getQuantity()));
skuMapper.updateStockById(k, optDate, -1 * totalCount.get());
});
//处理积分
sendBack(request.getMemberId(), null, orderItem.get(0).getId());
}
//售后状态与售后类型是否对应
if (Constants.OptType.AGREE.equals(request.getOptType()) || Constants.OptType.REFUSE.equals(request.getOptType())) {
if (!AftersaleStatus.APPLY.getType().equals(aftersale.getStatus())) {
throw new RuntimeException("订单状态错误,请刷新页面后重试!");
}
//全部退款
} else {
if (!AftersaleStatus.WAIT.getType().equals(aftersale.getStatus())) {
throw new RuntimeException("订单状态错误,请刷新页面后重试!");
if (request.getOptType() == Constants.OptType.AGREE) {
//开始退款
Refund wechatResponse = wechatPayService.refundPay(order.getOrderSn() + RandomUtil.randomNumbers(5),
order.getPayId() + "",
"https://wenchuang.yyinhong.cn/api/no-auth/wechat/weChatRefundNotify",
order.getPayAmount().multiply(new BigDecimal("100")).longValue(),
order.getPayAmount().multiply(new BigDecimal("100")).longValue(),
request.getReason());
log.info("发起微信退款返回信息,tradeRefund:{}", JSONObject.toJSONString(wechatResponse == null ? "" : wechatResponse));
List<OrderItem> orderItem = orderItemMapper.selectList(new QueryWrapper<OrderItem>().eq("order_id", request.getOrderId()));
if (CollectionUtil.isNotEmpty(orderItem)) {
//库存回滚
orderItem.stream().collect(Collectors.groupingBy(it -> it.getSkuId())).forEach((k, v) -> {
AtomicReference<Integer> totalCount = new AtomicReference<>(0);
v.forEach(it -> totalCount.updateAndGet(v1 -> v1 + it.getQuantity()));
skuMapper.updateStockById(k, optDate, -1 * totalCount.get());
});
}
//处理积分
sendBack(request.getMemberId(), order.getId(), null);
//修改子订单状态
List<OrderItem> orderItems = orderItemMapper.selectList(new QueryWrapper<OrderItem>().eq("order_id", request.getOrderId()));
if (CollectionUtil.isNotEmpty(orderItems)) {
for (OrderItem item : orderItems) {
item.setStatus("9");
orderItemMapper.updateById(item);
}
//拒绝则理由必填
if (Constants.OptType.REFUSE.equals(request.getOptType()) && StrUtil.isBlank(request.getRemark())) {
throw new RuntimeException("请填写拒绝理由");
}
LocalDateTime optDate = LocalDateTime.now();
}
}
} else {
//处理积分
sendBack(request.getMemberId(), order.getId(),null);
}
//要创建的订单操作记录,status后续判断再设置
OrderOperateHistory optHistory = new OrderOperateHistory();
optHistory.setOrderId(order.getId());
......@@ -283,102 +335,97 @@ public class AftersaleService {
optHistory.setCreateBy(userId);
optHistory.setUpdateBy(userId);
optHistory.setUpdateTime(optDate);
//封装售后wrapper
UpdateWrapper<Aftersale> aftersaleWrapper = new UpdateWrapper<>();
aftersaleWrapper.eq("order_id", request.getOrderId());
aftersaleWrapper.eq("status", AftersaleStatus.APPLY.getType());
aftersaleWrapper.set("handle_man", optUserName);
aftersaleWrapper.set("update_time", optDate);
aftersaleWrapper.set("handle_time", optDate);
aftersaleWrapper.set("update_by", userId);
//封装订单wrapper
UpdateWrapper<Order> orderWrapper = new UpdateWrapper<>();
orderWrapper.eq("id", request.getOrderId());
orderWrapper.set("update_time", optDate);
orderWrapper.set("update_by", userId);
//更新订单、售后单,创建操作记录
if (request.getOptType().equals(Constants.OptType.REFUSE)) {
aftersaleWrapper.set("status", AftersaleStatus.REJECT.getType());
aftersaleWrapper.set("handle_note", request.getRemark());
orderWrapper.set("aftersale_status", OrderRefundStatus.NO_REFUND.getType());
optHistory.setOrderStatus(14);
} else if (request.getOptType().equals(Constants.OptType.AGREE)) {
aftersaleWrapper.set("status", AftersaleStatus.WAIT.getType());
orderWrapper.set("aftersale_status", Objects.equals(aftersale.getType(), 1) ? 3 : 2);
optHistory.setOrderStatus(12);
} else {
//如果是退货退款 order身上的售后状态应该是保持不变的 仅退款的话就进入退款了
orderWrapper.set("aftersale_status", 3);
orderWrapper.set("reason", request.getReason());
orderWrapper.set("proof_pics", request.getProofPics());
orderWrapper.set("status", OrderStatus.CLOSED.getType());
int row = orderMapper.update(null, orderWrapper);
if (row != 1) {
throw new RuntimeException("修改订单状态失败");
}
}
int rows = aftersaleMapper.update(null, aftersaleWrapper);
// if (rows < 1) {
// throw new RuntimeException("更新售后单失败");
// }
rows = orderMapper.update(null, orderWrapper);
if (rows < 1) {
throw new RuntimeException("更新订单失败");
}
rows = orderOperateHistoryMapper.insert(optHistory);
if (rows < 1) {
throw new RuntimeException("创建订单操作记录失败");
}
// 是否需要发起退款
if ((request.getOptType() == Constants.OptType.GIVING || (request.getOptType() == Constants.OptType.AGREE && aftersale.getType() == 1))) {
tradeRefund(aftersale, order, optDate, userId);
List<OrderItem> orderItem = orderItemMapper.selectList(new QueryWrapper<OrderItem>().eq("order_id", request.getOrderId()));
//库存回滚
orderItem.stream().collect(Collectors.groupingBy(it -> it.getSkuId())).forEach((k, v) -> {
AtomicReference<Integer> totalCount = new AtomicReference<>(0);
v.forEach(it -> totalCount.updateAndGet(v1 -> v1 + it.getQuantity()));
skuMapper.updateStockById(k, optDate, -1 * totalCount.get());
});
optHistory.setOrderStatus(OrderStatus.CLOSED.getType());
int his = orderOperateHistoryMapper.insert(optHistory);
if (his != 1) {
log.info("订单日志记录失败!");
}
}
public void tradeRefund(Aftersale returnApply, Order order, LocalDateTime optDate, Long userId) {
//查一下微信订单
QueryWrapper<WechatPaymentHistory> qw = new QueryWrapper<>();
qw.eq("order_id", order.getPayId()).eq("op_type", 1);
WechatPaymentHistory history = wechatPaymentHistoryMapper.selectOne(qw);
//查用户的微信信息
QueryWrapper<MemberWechat> wechatQw = new QueryWrapper<>();
wechatQw.eq("member_id", order.getMemberId());
MemberWechat memberWechat = memberWechatMapper.selectOne(wechatQw);
//查订单item
QueryWrapper<OrderItem> itemQw = new QueryWrapper<>();
itemQw.eq("order_id", order.getId());
OrderItem orderItem = orderItemMapper.selectOne(itemQw);
//开始退款
Refund wechatResponse = wechatPayService.refundPay(returnApply.getId() + "",
order.getPayId() + "",
"https://mall.ichengle.top/api/no-auth/wechat/weChatRefundNotify",
returnApply.getReturnAmount().multiply(new BigDecimal("100")).longValue(),
history.getMoney().multiply(new BigDecimal("100")).longValue(), returnApply.getReason());
log.info("发起微信退款返回信息,tradeRefund:{}", JSONObject.toJSONString(wechatResponse == null ? "" : wechatResponse));
if (wechatResponse != null && Arrays.asList("PROCESSING", "SUCCESS").contains(wechatResponse.getStatus().name())) {
qw = new QueryWrapper<>();
qw.eq("order_id", order.getId()).eq("op_type", 3);
WechatPaymentHistory refundHistory = wechatPaymentHistoryMapper.selectOne(qw);
if (refundHistory == null) {
WechatPaymentHistory wechatPaymentHistory = new WechatPaymentHistory();
wechatPaymentHistory.setPaymentId(wechatResponse.getRefundId());
wechatPaymentHistory.setMemberId(order.getMemberId());
wechatPaymentHistory.setOpenid(memberWechat.getOpenid());
wechatPaymentHistory.setTitle(orderItem.getProductName());
wechatPaymentHistory.setOrderId(order.getId());
wechatPaymentHistory.setMoney(returnApply.getReturnAmount().multiply(new BigDecimal("100")));
wechatPaymentHistory.setOpType(3);
wechatPaymentHistory.setPaymentStatus(0);
wechatPaymentHistory.setResponseBody(JSON.toJSONString(wechatResponse));
wechatPaymentHistory.setCreateTime(optDate);
wechatPaymentHistory.setUpdateTime(optDate);
wechatPaymentHistory.setCreateBy(userId);
wechatPaymentHistory.setUpdateBy(userId);
wechatPaymentHistoryMapper.insert(wechatPaymentHistory);
/**
* 退回积分
*/
public void sendBack(Long memberId, Long orderId, Long orderItemId) {
BigDecimal integral = new BigDecimal("0.00");
if (orderItemId != null) {
//只返回一部分积分
OrderItem orderItem = orderItemMapper.selectById(orderItemId);
if (null == orderItem) {
throw new ServiceException("退款商品信息有误!");
} else {
UpdateWrapper<WechatPaymentHistory> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("id", refundHistory.getId())
.set("payment_id", wechatResponse.getRefundId()).set("update_time", optDate);
wechatPaymentHistoryMapper.update(null, updateWrapper);
if (orderItem.getUseIntegral() != null && orderItem.getUseIntegral().compareTo(BigDecimal.ZERO) > 0) {
//记录积分流水
IntegralHistory integralHistory = new IntegralHistory();
integralHistory.setMemberId(memberId);
integralHistory.setAmount(orderItem.getUseIntegral());
integralHistory.setOpType(Constants.OptType.AGREE);
integralHistory.setSubOpType(25);
integralHistory.setOrderAmount(orderItem.getCouponMoney());
integralHistory.setOrderId(orderItem.getOrderId());
integralHistoryMapper.insert(integralHistory);
//修改用户积分
Member member = memberMapper.selectById(memberId);
if (null == member) {
throw new ServiceException("会员信息有误!");
}
BigDecimal add = member.getIntegral().add(orderItem.getUseIntegral());
UpdateWrapper<Member> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("id", memberId);
updateWrapper.set("integral", add);
memberMapper.update(null, updateWrapper);
}
}
}
if (orderId != null) {
//全部退款
Order order = orderMapper.selectById(orderId);
if (order == null) {
throw new ServiceException("订单信息有误!");
}
//记录积分流水
if (order.getTotalIntegral() != null && order.getTotalIntegral().compareTo(BigDecimal.ZERO) > 0) {
IntegralHistory integralHistory = new IntegralHistory();
integralHistory.setMemberId(memberId);
integralHistory.setAmount(order.getTotalIntegral());
integralHistory.setOpType(Constants.OptType.AGREE);
integralHistory.setSubOpType(25);
integral = order.getTotalIntegral();
integralHistory.setCreateTime(LocalDateTime.now());
integralHistory.setOrderAmount(order.getPayAmount());
integralHistory.setOrderId(order.getId());
integralHistoryMapper.insert(integralHistory);
//修改用户积分
Member member = memberMapper.selectById(memberId);
if (null == member) {
throw new ServiceException("会员信息有误!");
}
BigDecimal add = member.getIntegral().add(integral);
UpdateWrapper<Member> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("id", memberId);
updateWrapper.set("integral", add);
memberMapper.update(null, updateWrapper);
}
}
}
......@@ -393,64 +440,6 @@ public class AftersaleService {
if ("PROCESSING".equals(weChatRefundNotify.getRefundStatus().name())) {
return;
}
//查一下微信订单
QueryWrapper<WechatPaymentHistory> qw = new QueryWrapper<>();
qw.eq("payment_id", weChatRefundNotify.getRefundId()).eq("op_type", 3);
WechatPaymentHistory history = wechatPaymentHistoryMapper.selectOne(qw);
if (history == null) {
log.info("未找到退款单");
throw new RuntimeException();
}
LocalDateTime optDate = LocalDateTime.now();
QueryWrapper<Order> orderQw = new QueryWrapper<>();
orderQw.eq("id", history.getOrderId());
Order order = orderMapper.selectOne(orderQw);
if (order.getStatus() == OrderRefundStatus.SUCCESS.getType()) {
log.info("订单已经是退款成功状态");
throw new RuntimeException();
}
QueryWrapper<Aftersale> aftersaleQw = new QueryWrapper<>();
aftersaleQw.eq("order_id", history.getOrderId()).eq("status", AftersaleStatus.WAIT.getType());
if ("SUCCESS".equals(weChatRefundNotify.getRefundStatus().name())) {
//更改订单表
UpdateWrapper<Order> orderUpdateWrapper = new UpdateWrapper<>();
orderUpdateWrapper.eq("id", history.getOrderId())
.set("aftersale_status", OrderRefundStatus.SUCCESS.getType());
orderMapper.update(null, orderUpdateWrapper);
//更改 售后表
UpdateWrapper<Aftersale> aftersaleWrapper = new UpdateWrapper<>();
aftersaleWrapper.eq("order_id", history.getOrderId()).set("status", AftersaleStatus.SUCCESS.getType());
aftersaleMapper.update(null, aftersaleWrapper);
//更改 微信表
UpdateWrapper<WechatPaymentHistory> paymentWrapper = new UpdateWrapper<>();
paymentWrapper.eq("payment_id", weChatRefundNotify.getRefundId()).eq("op_type", 3)
.set("payment_status", 1);
wechatPaymentHistoryMapper.update(null, paymentWrapper);
OrderOperateHistory optHistory = new OrderOperateHistory();
optHistory.setOrderId(order.getId());
optHistory.setOperateMan("系统");
optHistory.setCreateTime(optDate);
optHistory.setCreateBy(order.getMemberId());
optHistory.setUpdateBy(order.getMemberId());
optHistory.setUpdateTime(optDate);
optHistory.setOrderStatus(13);
operateHistoryMapper.insert(optHistory);
// 回滚商品和sku销量
OrderItem orderItem = orderItemMapper.selectOne(new QueryWrapper<OrderItem>().eq("order_id", order.getId()));
skuMapper.updateStockById(orderItem.getSkuId(), LocalDateTime.now(), -1 * orderItem.getQuantity());
//退还优惠券
if (order.getMemberCouponId() != null) {
memberCouponService.backCoupon(Arrays.asList(order.getMemberCouponId()));
}
} else {
//更改订单表
UpdateWrapper<Order> orderUpdateWrapper = new UpdateWrapper<>();
orderUpdateWrapper.eq("id", history.getOrderId())
.set("aftersale_status", OrderRefundStatus.FAIL.getType());
orderMapper.update(null, orderUpdateWrapper);
}
}
public List<OrderOperateHistoryVO> log(Long orderId) {
......@@ -464,8 +453,8 @@ public class AftersaleService {
public Aftersale queryAfterSale(Long orderId) {
QueryWrapper<Aftersale> itemQw = new QueryWrapper<>();
itemQw.eq("order_id",orderId);
itemQw.in("status",Arrays.asList(AftersaleStatus.APPLY.getType(),AftersaleStatus.WAIT.getType()));
itemQw.eq("order_id", orderId);
itemQw.in("status", Arrays.asList(AftersaleStatus.APPLY.getType(), AftersaleStatus.WAIT.getType()));
return aftersaleMapper.selectOne(itemQw);
}
}
......@@ -4,6 +4,7 @@ import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.cyl.h5.domain.dto.OrderProductListDTO;
......@@ -22,7 +23,6 @@ import org.springframework.transaction.annotation.Transactional;
/**
* 订单中所包含的商品Service业务层处理
*
*
* @author zcc
*/
@Service
......@@ -144,19 +144,23 @@ public class OrderItemService extends ServiceImpl<OrderItemMapper, OrderItem> {
@Transactional
public void saveOrderItem(Member member, LocalDateTime optTime,
Long orderId, List<OrderProductListDTO> list){
Long orderId, List<OrderProductListDTO> list) {
List<OrderItem> addOrderItemList = new ArrayList<>();
list.forEach(item -> {
OrderItem orderItem = new OrderItem();
orderItem.setId(IDGenerator.generateId());
orderItem.setGiveIntegral(item.getGiveIntegral());
orderItem.setOrderId(orderId);
orderItem.setProductId(item.getProduct().getId());
orderItem.setOutProductId(item.getProduct().getOutProductId());
orderItem.setSkuId(item.getSku().getId());
orderItem.setOutSkuId(item.getSku().getOutSkuId());
orderItem.setPic(item.getSku().getPic());
orderItem.setDeMoney(item.getDeMoney());
orderItem.setProductName(item.getProduct().getName());
orderItem.setSalePrice(item.getSku().getPrice());
orderItem.setCouponMoney(item.getCouponMoney());
orderItem.setUseIntegral(item.getUseIntegral());
orderItem.setQuantity(item.getQuantity());
orderItem.setProductCategoryId(item.getProduct().getCategoryId());
orderItem.setSpData(item.getSku().getSpData());
......@@ -165,7 +169,7 @@ public class OrderItemService extends ServiceImpl<OrderItemMapper, OrderItem> {
addOrderItemList.add(orderItem);
});
boolean flag = saveBatch(addOrderItemList);
if (!flag){
if (!flag) {
throw new RuntimeException("新增订单item失败");
}
}
......
......@@ -2,11 +2,15 @@ package com.cyl.manager.oms.service;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.RandomUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.cyl.h5.domain.query.OrderH5Query;
import com.cyl.manager.act.domain.entity.IntegralHistory;
import com.cyl.manager.act.mapper.IntegralHistoryMapper;
import com.cyl.manager.oms.convert.OrderConvert;
import com.cyl.manager.oms.convert.OrderOperateHistoryConvert;
import com.cyl.manager.oms.domain.entity.Order;
......@@ -27,11 +31,16 @@ import com.cyl.manager.ums.domain.entity.Member;
import com.cyl.manager.ums.mapper.MemberAddressMapper;
import com.cyl.manager.ums.mapper.MemberCartMapper;
import com.cyl.manager.ums.mapper.MemberMapper;
import com.cyl.wechat.WechatPayService;
import com.github.pagehelper.PageHelper;
import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.enums.OrderStatus;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.AesCryptoUtils;
import com.ruoyi.common.utils.PhoneUtils;
import com.ruoyi.common.utils.SecurityUtils;
import com.wechat.pay.java.service.refund.model.Refund;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
......@@ -41,17 +50,19 @@ import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.*;
import java.util.concurrent.atomic.AtomicReference;
import java.util.stream.Collectors;
/**
* 订单表Service业务层处理
*
*
* @author zcc
*/
@Service
@Slf4j
public class OrderService {
@Autowired
private OrderMapper orderMapper;
......@@ -81,6 +92,10 @@ public class OrderService {
private OrderDeliveryHistoryMapper orderDeliveryHistoryMapper;
@Autowired
private OrderOperateHistoryConvert historyConvert;
@Autowired(required = false)
private WechatPayService wechatPayService;
@Autowired
private IntegralHistoryMapper integralHistoryMapper;
/**
* 查询订单表
......@@ -90,13 +105,14 @@ public class OrderService {
*/
public ManagerOrderDetailVO selectById(Long id) {
Order order = orderMapper.selectById(id);
if (order == null){
if (order == null) {
throw new RuntimeException("查不到订单信息");
}
ManagerOrderDetailVO managerOrderDetailVO = new ManagerOrderDetailVO();
//封装订单信息
managerOrderDetailVO.setOrderId(id);
managerOrderDetailVO.setCouponAmount(order.getCouponAmount());
managerOrderDetailVO.setDeMoney(order.getDeMoney());
managerOrderDetailVO.setOrderSn(order.getOrderSn());
managerOrderDetailVO.setOrderStatus(order.getStatus());
managerOrderDetailVO.setCreateTime(order.getCreateTime());
......@@ -130,8 +146,15 @@ public class OrderService {
List<ManagerOrderProductVO> productList = new ArrayList<>();
orderItemList.forEach(item -> {
ManagerOrderProductVO productVO = new ManagerOrderProductVO();
productVO.setId(item.getId());
productVO.setProductId(item.getProductId());
productVO.setCouponMoney(item.getCouponMoney());
productVO.setBuyNum(item.getQuantity());
productVO.setStatus(item.getStatus());
productVO.setReason(item.getReason());
productVO.setRefundOn(item.getRefundOn());
productVO.setUseIntegral(item.getUseIntegral());
productVO.setProofPics(item.getProofPics());
productVO.setPic(item.getPic());
productVO.setProductName(item.getProductName());
productVO.setSalePrice(item.getSalePrice());
......@@ -153,15 +176,23 @@ public class OrderService {
if (page != null) {
PageHelper.startPage(page.getPageNumber() + 1, page.getPageSize());
}
if (!StringUtils.isEmpty(query.getUserPhone())){
if (!StringUtils.isEmpty(query.getUserPhone())) {
query.setUserPhone(AesCryptoUtils.encrypt(aesKey, query.getUserPhone()));
}
List<ManagerOrderVO> managerOrderVOList = orderMapper.selectManagerOrderPage(query);
if (CollectionUtil.isEmpty(managerOrderVOList)){
if (CollectionUtil.isEmpty(managerOrderVOList)) {
return new PageImpl<>(managerOrderVOList, page, 0);
}
managerOrderVOList.forEach(managerOrderVO -> {
if(StringUtils.isNotEmpty(managerOrderVO.getReceiverPhoneEncrypted())){
//解密手机号
String phone = AesCryptoUtils.decrypt(aesKey, managerOrderVO.getReceiverPhoneEncrypted());
managerOrderVO.setReceiverPhone(phone);
managerOrderVO.setUserPhone(phone);
}
});
long total = ((com.github.pagehelper.Page) managerOrderVOList).getTotal();
Map<Long, ManagerOrderVO> orderMap = managerOrderVOList.stream().collect(Collectors.toMap(ManagerOrderVO::getId, it -> it, (v1,v2) -> v2, LinkedHashMap::new));
Map<Long, ManagerOrderVO> orderMap = managerOrderVOList.stream().collect(Collectors.toMap(ManagerOrderVO::getId, it -> it, (v1, v2) -> v2, LinkedHashMap::new));
//查orderItem
QueryWrapper<OrderItem> qw = new QueryWrapper<>();
qw.in("order_id", orderMap.keySet());
......@@ -266,7 +297,7 @@ public class OrderService {
public Integer saveMerchantNote(Order order) {
Order orderInDb = orderMapper.selectById(order.getId());
if (orderInDb == null){
if (orderInDb == null) {
throw new RuntimeException("订单不存在");
}
UpdateWrapper<Order> qw = new UpdateWrapper<>();
......@@ -278,6 +309,7 @@ public class OrderService {
/**
* 管理后台发货
* 目前发货是这样的:待发货、已发货、已完成都能执行发货,每次都会创建一条新的发货记录且修改订单发货信息
*
* @param request 发货请求
* @param userId 操作人
* @return 结果
......@@ -289,40 +321,40 @@ public class OrderService {
QueryWrapper<OrderItem> qw = new QueryWrapper<>();
qw.eq("order_id", request.getOrderId());
List<OrderItem> orderItemList = orderItemMapper.selectList(qw);
if (order == null || CollectionUtil.isEmpty(orderItemList)){
if (order == null || CollectionUtil.isEmpty(orderItemList)) {
throw new RuntimeException("未找到该订单信息");
}
// 是否为待发货、已发货 、已完成
if (!(Constants.OrderStatus.SEND.equals(order.getStatus())
|| Constants.OrderStatus.GET.equals(order.getStatus())
|| Constants.OrderStatus.CONFIRM.equals(order.getStatus()))){
throw new RuntimeException("订单状态错误");
}
Integer orderStatus =
Constants.OrderStatus.SEND.equals(order.getStatus()) ? Constants.OrderStatus.GET : order.getStatus();
//更新订单
LocalDateTime optDate = LocalDateTime.now();
order.setUpdateBy(null);
order.setStatus(orderStatus);
order.setStatus(OrderStatus.DELIVERED.getType());
order.setDeliveryTime(optDate);
order.setUpdateTime(optDate);
order.setDeliveryCompany(request.getExpressName());
order.setDeliverySn(request.getExpressSn());
orderMapper.updateById(order);
//更新子订单状态
for (OrderItem orderItem : orderItemList) {
UpdateWrapper<OrderItem> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("id", orderItem.getId());
updateWrapper.set("status", "6");
orderItemMapper.update(null, updateWrapper);
}
//创建新的发货记录
this.createDeliveryHistory(request, userId, optDate);
//创建订单操作记录
this.createOrderOptHistory(order.getId(), order.getOrderSn(), orderStatus, userId, optDate);
this.createOrderOptHistory(order.getId(), order.getOrderSn(), OrderStatus.DELIVERED.getType(), userId, optDate);
return "发货成功";
}
/**
* 创建发货记录
*
* @param request 发货请求
* @param userId 操作人
* @param optDate 操作时间
*/
private void createDeliveryHistory(DeliverProductForm request, Long userId, LocalDateTime optDate){
private void createDeliveryHistory(DeliverProductForm request, Long userId, LocalDateTime optDate) {
OrderDeliveryHistory orderDeliveryHistory = new OrderDeliveryHistory();
orderDeliveryHistory.setOrderId(request.getOrderId());
orderDeliveryHistory.setDeliveryCompany(request.getExpressName());
......@@ -337,12 +369,13 @@ public class OrderService {
/**
* 创建订单操作历史
*
* @param orderId 订单id
* @param orderStatus 订单状态
* @param userId 操作人
* @param optDate 操作时间
*/
private void createOrderOptHistory(Long orderId, String orderSn, Integer orderStatus, Long userId, LocalDateTime optDate){
private void createOrderOptHistory(Long orderId, String orderSn, Integer orderStatus, Long userId, LocalDateTime optDate) {
OrderOperateHistory optHistory = new OrderOperateHistory();
optHistory.setOrderId(orderId);
optHistory.setOrderSn(orderSn);
......@@ -360,6 +393,7 @@ public class OrderService {
/**
* 根据订单id查询订单操作日志
*
* @param orderId 订单id
* @return 结果
*/
......@@ -375,9 +409,9 @@ public class OrderService {
public String decryptPhone(Long orderId) {
Order order = orderMapper.selectById(orderId);
String receiverPhoneEncrypted = order.getReceiverPhoneEncrypted();
if(receiverPhoneEncrypted!=null){
return AesCryptoUtils.decrypt(aesKey,receiverPhoneEncrypted);
}else {
if (receiverPhoneEncrypted != null) {
return AesCryptoUtils.decrypt(aesKey, receiverPhoneEncrypted);
} else {
return null;
}
}
......@@ -388,16 +422,169 @@ public class OrderService {
return false;
}
UpdateWrapper<Order> updateWrapper = new UpdateWrapper<>();
updateWrapper.set("receiver_name",order.getReceiverName())
.set("receiver_phone",PhoneUtils.hidePhone(order.getReceiverPhone()))
.set("receiver_city",order.getReceiverCity())
.set("receiver_district",order.getReceiverDistrict())
.set("receiver_province",order.getReceiverProvince())
.set("receiver_detail_address",order.getReceiverDetailAddress())
.set("receiver_phone_encrypted",AesCryptoUtils.encrypt(aesKey, order.getReceiverPhone()))
.set("update_time",LocalDateTime.now());
updateWrapper.eq("id",order.getId());
updateWrapper.set("receiver_name", order.getReceiverName())
.set("receiver_phone", PhoneUtils.hidePhone(order.getReceiverPhone()))
.set("receiver_city", order.getReceiverCity())
.set("receiver_district", order.getReceiverDistrict())
.set("receiver_province", order.getReceiverProvince())
.set("receiver_detail_address", order.getReceiverDetailAddress())
.set("receiver_phone_encrypted", AesCryptoUtils.encrypt(aesKey, order.getReceiverPhone()))
.set("update_time", LocalDateTime.now());
updateWrapper.eq("id", order.getId());
int update = orderMapper.update(null, updateWrapper);
return update == 1;
}
public List<OrderItem> refundOrderDetail(Long orderId) {
//查询需要售后的产品
QueryWrapper<OrderItem> orderItemQw = new QueryWrapper<>();
orderItemQw.eq("order_id", orderId);
orderItemQw.eq("status", "0");
List<OrderItem> orderItemList = orderItemMapper.selectList(orderItemQw);
return orderItemList;
}
public String refund(Long id, Long status) {
OrderItem orderItem = orderItemMapper.selectById(id);
if (null == orderItem) {
throw new ServiceException("子订单不存在!");
}
Order order = orderMapper.selectById(orderItem.getOrderId());
if (null == order) {
throw new ServiceException("订单不存在!");
}
//通过
if (status == 0L) {
UpdateWrapper<OrderItem> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("id", orderItem.getId());
updateWrapper.set("status", "2");
orderItemMapper.update(null, updateWrapper);
return "已通过";
} else {
UpdateWrapper<OrderItem> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("id", orderItem.getId());
updateWrapper.set("status", "1");
orderItemMapper.update(null, updateWrapper);
return "已驳回";
}
}
@Transactional
public String tuikuan(Long id) {
LocalDateTime optDate = LocalDateTime.now();
BigDecimal money = new BigDecimal("0.00");
List<OrderItem> orderItem = orderItemMapper.selectList(new LambdaQueryWrapper<OrderItem>().eq(OrderItem::getId, id));
if (CollectionUtil.isEmpty(orderItem)) {
throw new ServiceException("子订单不存在!");
}
Order order = orderMapper.selectById(orderItem.get(0).getOrderId());
if (null == order) {
throw new ServiceException("订单不存在!");
}
if (orderItem.get(0).getCouponMoney() != null && orderItem.get(0).getCouponMoney().compareTo(BigDecimal.ZERO) > 0) {
money = orderItem.get(0).getCouponMoney();
if (orderItem.get(0).getCouponMoney().compareTo(BigDecimal.ZERO) == 0) {
orderItem.get(0).setStatus("8");
orderItemMapper.updateById(orderItem.get(0));
//库存回滚
orderItem.stream().collect(Collectors.groupingBy(it -> it.getSkuId())).forEach((k, v) -> {
AtomicReference<Integer> totalCount = new AtomicReference<>(0);
v.forEach(it -> totalCount.updateAndGet(v1 -> v1 + it.getQuantity()));
skuMapper.updateStockById(k, optDate, -1 * totalCount.get());
});
//退还积分
Member member = memberMapper.selectById(order.getMemberId());
UpdateWrapper<Member> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("id", member.getId());
BigDecimal add = member.getIntegral().add(orderItem.get(0).getUseIntegral());
updateWrapper.set("integral", add);
memberMapper.update(null, updateWrapper);
IntegralHistory history = new IntegralHistory();
history.setOpType(1);
history.setSubOpType(25);
history.setAmount(orderItem.get(0).getUseIntegral());
history.setOrderId(order.getId());
history.setOrderAmount(order.getPayAmount());
history.setMemberId(order.getMemberId());
history.setCreateTime(LocalDateTime.now());
integralHistoryMapper.insert(history);
return "退款成功";
}
} else {
money = orderItem.get(0).getSalePrice();
}
try {
BigDecimal multiply = money.multiply(BigDecimal.valueOf(orderItem.get(0).getQuantity()));
long refundAmount = multiply.multiply(new BigDecimal("100")).longValue();
long totalAmount = order.getPayAmount().multiply(new BigDecimal("100")).longValue();
log.info("开始退款, 订单号: {}, 支付ID: {}, 退款金额: {}, 原支付金额: {}, 退款原因: {}",
order.getOrderSn(), order.getPayId(), refundAmount, totalAmount, orderItem.get(0).getReason());
Refund wechatResponse = wechatPayService.refundPay(
order.getOrderSn() + RandomUtil.randomNumbers(5),
order.getPayId() + "",
"https://wenchuang.yyinhong.cn/api/no-auth/wechat/weChatRefundNotify",
refundAmount,
totalAmount,
orderItem.get(0).getReason()
);
log.info("发起微信退款返回信息, tradeRefund: {}",
JSONObject.toJSONString(wechatResponse == null ? "" : wechatResponse));
} catch (Exception e) {
log.error("退款过程中发生异常: ", e);
}
orderItem.get(0).setStatus("8");
orderItemMapper.updateById(orderItem.get(0));
if(orderItem.get(0).getUseIntegral() != null && orderItem.get(0).getUseIntegral().compareTo(BigDecimal.ZERO) > 0){
//退还积分
Member member = memberMapper.selectById(order.getMemberId());
UpdateWrapper<Member> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("id", member.getId());
BigDecimal add = member.getIntegral().add(orderItem.get(0).getUseIntegral());
updateWrapper.set("integral", add);
memberMapper.update(null, updateWrapper);
IntegralHistory history = new IntegralHistory();
history.setOpType(1);
history.setSubOpType(25);
history.setAmount(orderItem.get(0).getUseIntegral());
history.setOrderId(order.getId());
history.setOrderAmount(order.getPayAmount());
history.setMemberId(member.getId());
history.setCreateTime(LocalDateTime.now());
integralHistoryMapper.insert(history);
}
//库存回滚
orderItem.stream().collect(Collectors.groupingBy(it -> it.getSkuId())).forEach((k, v) -> {
AtomicReference<Integer> totalCount = new AtomicReference<>(0);
v.forEach(it -> totalCount.updateAndGet(v1 -> v1 + it.getQuantity()));
skuMapper.updateStockById(k, optDate, -1 * totalCount.get());
});
return "退款成功";
}
public String bohui(Long id, Long type) {
OrderItem orderItem = orderItemMapper.selectById(id);
if (null == orderItem) {
throw new ServiceException("子订单不存在!");
}
Order order = orderMapper.selectById(orderItem.getOrderId());
if (null == order) {
throw new ServiceException("订单不存在!");
}
if (type == 0L) {
orderItem.setStatus("1");
} else {
orderItem.setStatus("3");
}
int row = orderItemMapper.updateById(orderItem);
if (row > 1) {
return "驳回成功";
}
return "驳回失败";
}
}
......@@ -74,8 +74,8 @@ public class SlideshowInfoController extends BaseController {
@ApiOperation("删除轮播图信息")
@PreAuthorize("@ss.hasPermi('oth:slideshowInfo:remove')")
@Log(title = "轮播图信息", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public ResponseEntity<Integer> remove(@PathVariable Long[] ids) {
return ResponseEntity.ok(service.deleteByIds(ids));
@DeleteMapping("/{id}")
public ResponseEntity<Integer> remove(@PathVariable Long id) {
return ResponseEntity.ok(service.deleteByIds(id));
}
}
......@@ -19,12 +19,18 @@ public class AgreementInfo extends BaseAudit {
@ApiModelProperty("主键")
private Long id;
@ApiModelProperty("协议内容")
@Excel(name = "协议内容")
private String content;
@ApiModelProperty("用户协议")
@Excel(name = "用户协议")
private String userContent;
@ApiModelProperty("类型(0:用户协议,1:隐私协议,2:购买须知)")
@Excel(name = "类型", readConverterExp = "0=:用户协议,1:隐私协议,2:购买须知")
private String type;
@ApiModelProperty("隐私协议")
@Excel(name = "隐私协议")
private String privacyContent;
@ApiModelProperty("购买协议")
@Excel(name = "购买协议")
private String buyContent;
@ApiModelProperty("是否展示直播(0:否,1:是)")
private String isZb;
}
......@@ -19,12 +19,16 @@ public class BlackImgInfo extends BaseAudit {
@ApiModelProperty("主键")
private Long id;
@ApiModelProperty("背景图url")
@Excel(name = "背景图url")
private String imgUrl;
@ApiModelProperty("首页背景图url")
@Excel(name = "首页背景图url")
private String homeImgUrl;
@ApiModelProperty("类型(0:首页,1:产品分类,2:我的)")
@Excel(name = "类型", readConverterExp = "0=:首页,1:产品分类,2:我的")
private String type;
@ApiModelProperty("产品分类背景图url")
@Excel(name = "产品分类背景图url")
private String typeImgUrl;
@ApiModelProperty("我的背景图url")
@Excel(name = "我的背景图url")
private String thisImgUrl;
}
......@@ -45,7 +45,7 @@ public class ScenicSpotInfo extends BaseAudit {
@ApiModelProperty("相关产品id")
@Excel(name = "相关产品id")
private Long productId;
private String productIds;
@ApiModelProperty("备注")
@Excel(name = "备注")
......
......@@ -14,6 +14,5 @@ import io.swagger.annotations.ApiModelProperty;
@Data
public class AgreementInfoQuery {
@ApiModelProperty("类型(0:用户协议,1:隐私协议,2:购买须知)")
private String type;
}
......@@ -11,7 +11,6 @@ import io.swagger.annotations.ApiModelProperty;
@ApiModel(description="背景图管理信息 查询 对象")
@Data
public class BlackImgInfoQuery {
@ApiModelProperty("类型(0:首页,1:产品分类,2:我的) 精确匹配")
private String type;
}
......@@ -30,6 +30,6 @@ public class ScenicSpotInfoQuery {
private String introduce;
@ApiModelProperty("相关产品id 精确匹配")
private Long productId;
private Long productIds;
}
......@@ -3,7 +3,9 @@ package com.cyl.manager.oth.domain.vo;
import com.ruoyi.common.annotation.Excel;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.core.domain.BaseAudit;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 协议管理信息 数据视图对象
*
......@@ -11,12 +13,23 @@ import lombok.Data;
*/
@Data
public class AgreementInfoVO extends BaseAudit {
/** 主键 */
/**
* 主键
*/
private Long id;
/** 协议内容 */
@Excel(name = "协议内容")
private String content;
/** 类型(0:用户协议,1:隐私协议,2:购买须知) */
@Excel(name = "类型", readConverterExp = "0=:用户协议,1:隐私协议,2:购买须知")
private String type;
@ApiModelProperty("用户协议")
@Excel(name = "用户协议")
private String userContent;
@ApiModelProperty("隐私协议")
@Excel(name = "隐私协议")
private String privacyContent;
@ApiModelProperty("购买协议")
@Excel(name = "购买协议")
private String buyContent;
@ApiModelProperty("是否展示直播(0:否,1:是)")
private String isZb;
}
......@@ -3,6 +3,7 @@ package com.cyl.manager.oth.domain.vo;
import com.ruoyi.common.annotation.Excel;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.core.domain.BaseAudit;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 背景图管理信息 数据视图对象
......@@ -13,10 +14,15 @@ import lombok.Data;
public class BlackImgInfoVO extends BaseAudit {
/** 主键 */
private Long id;
/** 背景图url */
@Excel(name = "背景图url")
private String imgUrl;
/** 类型(0:首页,1:产品分类,2:我的) */
@Excel(name = "类型", readConverterExp = "0=:首页,1:产品分类,2:我的")
private String type;
@ApiModelProperty("首页背景图url")
@Excel(name = "首页背景图url")
private String homeImgUrl;
@ApiModelProperty("产品分类背景图url")
@Excel(name = "产品分类背景图url")
private String typeImgUrl;
@ApiModelProperty("我的背景图url")
@Excel(name = "我的背景图url")
private String thisImgUrl;
}
......@@ -34,7 +34,7 @@ public class ScenicSpotInfoVO extends BaseAudit {
private String introduce;
/** 相关产品id */
@Excel(name = "相关产品id")
private Long productId;
private String productIds;
/** 备注 */
@Excel(name = "备注")
private String remark;
......
......@@ -47,7 +47,6 @@ public class AgreementInfoService {
PageHelper.startPage(page.getPageNumber() + 1, page.getPageSize());
}
LambdaQueryWrapper<AgreementInfo> qw = new LambdaQueryWrapper<>();
qw.eq(AgreementInfo::getType, query.getType());
return agreementInfoMapper.selectList(qw);
}
......
......@@ -46,10 +46,6 @@ public class BlackImgInfoService {
PageHelper.startPage(page.getPageNumber() + 1, page.getPageSize());
}
QueryWrapper<BlackImgInfo> qw = new QueryWrapper<>();
String type = query.getType();
if (!StringUtils.isEmpty(type)) {
qw.eq("type", type);
}
return blackImgInfoMapper.selectList(qw);
}
......
......@@ -2,6 +2,8 @@ package com.cyl.manager.oth.service;
import java.util.Arrays;
import java.util.List;
import java.time.LocalDateTime;
import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.cyl.manager.oth.domain.entity.ScenicSpotInfo;
import com.cyl.manager.oth.domain.query.ScenicSpotInfoQuery;
......@@ -69,10 +71,6 @@ public class ScenicSpotInfoService {
if (!StringUtils.isEmpty(introduce)) {
qw.eq("introduce", introduce);
}
Long productId = query.getProductId();
if (productId != null) {
qw.eq("product_id", productId);
}
return scenicSpotInfoMapper.selectList(qw);
}
......
......@@ -51,6 +51,7 @@ public class SlideshowInfoService {
if (!StringUtils.isEmpty(nameLike)) {
qw.like("name", nameLike);
}
qw.orderByAsc("order_num");
return slideshowInfoMapper.selectList(qw);
}
......@@ -81,8 +82,8 @@ public class SlideshowInfoService {
* @param ids 需要删除的轮播图信息主键
* @return 结果
*/
public int deleteByIds(Long[] ids) {
return slideshowInfoMapper.updateDelFlagByIds(ids);
public int deleteByIds(Long id) {
return slideshowInfoMapper.deleteById(id);
}
/**
......
......@@ -85,4 +85,15 @@ public class Product extends BaseAudit {
@Excel(name = "商品分类名称")
private String productCategoryName;
/**
* 虚拟销量
*/
@ApiModelProperty("虚拟销量")
@Excel(name = "虚拟销量")
private Long virtualSales;
private BigDecimal startPrice;
private BigDecimal endPrice;
}
......@@ -63,5 +63,15 @@ public class ProductVO extends BaseAudit {
private String productCategoryName;
@Excel(name = "商品销售属性,json格式")
private String productAttr;
private BigDecimal startPrice;
private BigDecimal endPrice;
/**
* 虚拟销量
*/
private Long virtualSales;
private List<Sku> skuList;
}
......@@ -4,8 +4,10 @@ import java.util.*;
import java.time.LocalDateTime;
import java.util.stream.Collectors;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson2.util.BeanUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.cyl.h5.domain.vo.ProductDetailVO;
......@@ -29,7 +31,6 @@ import org.springframework.transaction.annotation.Transactional;
/**
* 商品信息Service业务层处理
*
*
* @author zcc
*/
@Service
......@@ -53,7 +54,7 @@ public class ProductService {
*/
public ProductVO selectById(Long id) {
Product product = productMapper.selectById(id);
ProductVO productVO = convert.do2vo(product);
ProductVO productVO = BeanUtil.toBean(product, ProductVO.class);
QueryWrapper<Sku> qw = new QueryWrapper<>();
qw.eq("product_id", product.getId());
List<Sku> skus = skuMapper.selectList(qw);
......@@ -73,13 +74,13 @@ public class ProductService {
PageHelper.startPage(page.getPageNumber() + 1, page.getPageSize());
}
QueryWrapper<Product> qw = new QueryWrapper<>();
if (StringUtils.isNoneEmpty(query.getOrderField())){
if (StringUtils.isNoneEmpty(query.getOrderField())) {
if (StringUtils.isNotEmpty(query.getOrderSort()) && "desc".equalsIgnoreCase(query.getOrderSort())) {
qw.orderByDesc(query.getOrderField());
} else {
qw.orderByAsc(query.getOrderField());
}
}else {
} else {
qw.orderByDesc("publish_status");
qw.orderByAsc("sort");
}
......@@ -87,19 +88,21 @@ public class ProductService {
if (categoryId != null) {
qw.eq("category_id", categoryId);
}
Integer publishStatus = query.getPublishStatus();
if (publishStatus != null) {
qw.eq("publish_status", publishStatus);
if (StringUtils.isNotEmpty(query.getProductCategoryNameLike())) {
qw.eq("product_category_name", query.getProductCategoryNameLike());
}
String search = query.getSearch();
if (StringUtils.isNoneEmpty(search)){
qw.like("name", "%".concat(query.getSearch().trim()).concat("%"));
}
if (CollectionUtil.isNotEmpty(query.getExcludeProductIds())) {
qw.notIn("id",query.getExcludeProductIds());
String search = query.getNameLike();
if (StringUtils.isNoneEmpty(search)) {
qw.like("name", "%".concat(search.trim()).concat("%"));
}
if (CollectionUtil.isNotEmpty(query.getIds())) {
qw.in("id",query.getIds());
qw.in("id", query.getIds());
}
if (null != query.getPublishStatus()) {
qw.in("publish_status", query.getPublishStatus());
}
if (CollectionUtil.isNotEmpty(query.getExcludeProductIds())) {
qw.in("id", query.getExcludeProductIds());
}
return productMapper.selectList(qw);
}
......@@ -113,11 +116,11 @@ public class ProductService {
@Transactional
public int insert(ProductVO productVO) {
Product product = convert.vo2do(productVO);
Product product = BeanUtil.toBean(productVO, Product.class);
product.setCreateTime(LocalDateTime.now());
List<Sku> skuList = productVO.getSkuList();
productMapper.insert(product);
if(skuList!=null){
if (skuList != null) {
skuList.forEach(sku -> {
sku.setProductId(product.getId());
sku.setCreateTime(LocalDateTime.now());
......@@ -141,20 +144,20 @@ public class ProductService {
return 0;
}
Long userId = SecurityUtils.getUserId();
Product product = convert.vo2do(productVO);
Product product = BeanUtil.toBean(productVO, Product.class);
List<Sku> skuList = productVO.getSkuList();
product.setUpdateBy(userId);
product.setUpdateTime(LocalDateTime.now());
productMapper.updateById(product);
//查找库中所有的sku
Map<String,Object> map = new HashMap<>();
Map<String, Object> map = new HashMap<>();
map.put("product_id", product.getId());
Map<Long, Sku> skuMap = skuMapper.selectByMap(map).stream().collect(Collectors.toMap(it -> it.getId(), it -> it));
//针对已有的进行编辑
List<Sku> updateList = productVO.getSkuList().stream().filter(it -> it.getId() != null).collect(Collectors.toList());
if (!CollectionUtil.isEmpty(updateList)) {
log.info("共有{}个sku需要修改,{},productId:{}",updateList.size(), JSONUtil.toJsonStr(updateList),productVO.getId());
updateList.forEach(it->{
log.info("共有{}个sku需要修改,{},productId:{}", updateList.size(), JSONUtil.toJsonStr(updateList), productVO.getId());
updateList.forEach(it -> {
Sku sku = skuMap.get(it.getId());
sku.setUpdateBy(SecurityUtils.getUserId());
sku.setUpdateTime(LocalDateTime.now());
......@@ -169,7 +172,7 @@ public class ProductService {
//针对没有的进行新增
List<Sku> addList = productVO.getSkuList().stream().filter(it -> it.getId() == null).collect(Collectors.toList());
if (!CollectionUtil.isEmpty(addList)) {
log.info("共有{}个sku需要新增,{},productId:{}",addList.size(), JSONUtil.toJsonStr(addList),productVO.getId());
log.info("共有{}个sku需要新增,{},productId:{}", addList.size(), JSONUtil.toJsonStr(addList), productVO.getId());
addList.forEach(sku -> {
sku.setProductId(product.getId());
sku.setCreateTime(LocalDateTime.now());
......@@ -179,7 +182,7 @@ public class ProductService {
//删除
List<Long> deleteIds = skuMap.keySet().stream().filter(it -> !idList.contains(it)).collect(Collectors.toList());
if (!CollectionUtil.isEmpty(deleteIds)) {
log.info("共有{}个sku需要删除,{},productId:{}",deleteIds.size(), JSONUtil.toJsonStr(deleteIds),productVO.getId());
log.info("共有{}个sku需要删除,{},productId:{}", deleteIds.size(), JSONUtil.toJsonStr(deleteIds), productVO.getId());
skuMapper.deleteBatchIds(deleteIds);
}
return 1;
......
package com.cyl.manager.ums.controller;
import com.cyl.manager.ums.convert.MemberConvert;
import com.cyl.manager.ums.domain.dto.MemberDTO;
import com.cyl.manager.ums.domain.form.ChangeMemberStatusForm;
import com.cyl.manager.ums.domain.entity.Member;
import com.cyl.manager.ums.domain.query.MemberQuery;
......@@ -24,13 +25,14 @@ import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 会员信息Controller
*
* @author zcc
* @date 2022-11-28
*/
@Api(description ="会员信息接口列表")
@Api(description = "会员信息接口列表")
@RestController
public class MemberController extends BaseController {
@Autowired
......@@ -40,7 +42,7 @@ public class MemberController extends BaseController {
@Autowired
private WechatAuthService wechatAuthService;
@RequestMapping(path ={"/ums/member/wechat/code","/h5/member/wechat/code","/no-auth/wechat/code"},method=RequestMethod.GET)
@RequestMapping(path = {"/ums/member/wechat/code", "/h5/member/wechat/code", "/no-auth/wechat/code"}, method = RequestMethod.GET)
public AjaxResult getWechatCode(@RequestParam(required = false) String scene) {
return AjaxResult.successData(wechatAuthService.getQRCode(scene));
}
......@@ -50,7 +52,7 @@ public class MemberController extends BaseController {
@PostMapping("/ums/member/list")
public ResponseEntity<Page<Member>> list(@RequestBody MemberQuery query, Pageable page) {
List<Member> list = service.selectList(query, page);
return ResponseEntity.ok(new PageImpl<>(list, page, ((com.github.pagehelper.Page)list).getTotal()));
return ResponseEntity.ok(new PageImpl<>(list, page, ((com.github.pagehelper.Page) list).getTotal()));
}
@ApiOperation("导出会员信息列表")
......@@ -70,6 +72,12 @@ public class MemberController extends BaseController {
return ResponseEntity.ok(service.selectById(id));
}
@ApiOperation("会员积分增加减少")
@PostMapping(value = "/ums/member/integralAddOrSub")
public ResponseEntity<Integer> integralAddOrSub(@RequestBody MemberDTO member) {
return ResponseEntity.ok(service.integralAddOrSub(member));
}
@ApiOperation("新增会员信息")
@PreAuthorize("@ss.hasPermi('ums:member:add')")
@Log(title = "会员信息", businessType = BusinessType.INSERT)
......@@ -105,19 +113,19 @@ public class MemberController extends BaseController {
@ApiOperation(("修改会员账户状态"))
@Log(title = "会员信息", businessType = BusinessType.UPDATE)
@PostMapping("/ums/member/status/change")
public ResponseEntity<Integer> changeStatus(@RequestBody ChangeMemberStatusForm form){
public ResponseEntity<Integer> changeStatus(@RequestBody ChangeMemberStatusForm form) {
return ResponseEntity.ok(service.changeStatus(form));
}
@ApiOperation("会员手机号解密")
@GetMapping("/ums/member/phone/decrypt/{phoneEncrypted}")
public ResponseEntity<String> getPhoneDecrypted(@PathVariable String phoneEncrypted){
public ResponseEntity<String> getPhoneDecrypted(@PathVariable String phoneEncrypted) {
return ResponseEntity.ok(service.getPhoneDecrypted(phoneEncrypted));
}
@ApiOperation("查看会员统计数据")
@GetMapping("/ums/member/view/statistics/{memberId}")
public ResponseEntity<MemberDataStatisticsVO> viewStatistics(@PathVariable Long memberId){
public ResponseEntity<MemberDataStatisticsVO> viewStatistics(@PathVariable Long memberId) {
return ResponseEntity.ok(service.viewStatistics(memberId));
}
}
package com.cyl.manager.ums.domain.dto;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class MemberDTO {
private String type;
private Long memberId;
private BigDecimal integral;
}
......@@ -85,6 +85,9 @@ public class Member extends BaseAudit {
@Excel(name = "等级")
private Integer level;
@ApiModelProperty("用户身份(0:普通用户,1:核销人员)")
private String userType;
@ApiModelProperty("用户剩余积分")
@Excel(name = "用户剩余积分")
private BigDecimal integral;
......
......@@ -66,4 +66,6 @@ public class MemberQuery {
private String beginTime;
private String endTime;
private String userType;
}
......@@ -6,6 +6,7 @@ import java.time.LocalDateTime;
import com.ruoyi.common.annotation.Excel;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.core.domain.BaseAudit;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 会员信息 数据视图对象
......@@ -61,6 +62,9 @@ public class MemberVO extends BaseAudit {
/** 等级 */
@Excel(name = "等级")
private Integer level;
@ApiModelProperty("用户身份(0:普通用户,1:核销人员)")
private String userType;
/** 用户剩余积分 */
@Excel(name = "用户剩余积分")
private BigDecimal integral;
......
......@@ -3,8 +3,11 @@ package com.cyl.manager.ums.service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.cyl.manager.act.domain.entity.IntegralHistory;
import com.cyl.manager.act.mapper.IntegralHistoryMapper;
import com.cyl.manager.oms.mapper.AftersaleMapper;
import com.cyl.manager.oms.mapper.OrderMapper;
import com.cyl.manager.ums.domain.dto.MemberDTO;
import com.cyl.manager.ums.domain.entity.Member;
import com.cyl.manager.ums.domain.entity.MemberCart;
import com.cyl.manager.ums.mapper.MemberCartMapper;
......@@ -21,13 +24,14 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;
/**
* 会员信息Service业务层处理
*
*
* @author zcc
*/
@Service
......@@ -46,6 +50,9 @@ public class MemberService {
@Autowired
private AftersaleMapper aftersaleMapper;
@Autowired
private IntegralHistoryMapper integralHistoryMapper;
/**
* 查询会员信息
*
......@@ -57,6 +64,40 @@ public class MemberService {
}
/**
* 会员积分增加减少
*/
public int integralAddOrSub(MemberDTO dto) {
Member member = memberMapper.selectById(dto.getMemberId());
if (null != member) {
IntegralHistory integralHistory = new IntegralHistory();
BigDecimal jf = new BigDecimal("0.0");
if (dto.getType().equals("0")) {
//平台扣减
integralHistory.setMemberId(dto.getMemberId());
integralHistory.setAmount(dto.getIntegral());
integralHistory.setOpType(2);
integralHistory.setSubOpType(23);
jf = member.getIntegral().subtract(dto.getIntegral());
} else if (dto.getType().equals("1")) {
//平台赠送
integralHistory.setMemberId(dto.getMemberId());
integralHistory.setAmount(dto.getIntegral());
integralHistory.setOpType(1);
integralHistory.setSubOpType(24);
jf = member.getIntegral().add(dto.getIntegral());
}
UpdateWrapper<Member> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("id", dto.getMemberId());
updateWrapper.set("integral", jf);
memberMapper.update(null, updateWrapper);
integralHistory.setCreateTime(LocalDateTime.now());
return integralHistoryMapper.insert(integralHistory);
}
return 0;
}
/**
* 查询会员信息列表
*
* @param query 查询条件
......@@ -65,34 +106,37 @@ public class MemberService {
*/
public List<Member> selectList(MemberQuery query, Pageable page) {
if (page != null) {
PageHelper.startPage(page.getPageNumber() + 1, page.getPageSize(), SortUtil.sort2string(page.getSort(),"id desc"));
PageHelper.startPage(page.getPageNumber() + 1, page.getPageSize(), SortUtil.sort2string(page.getSort(), "id desc"));
}
QueryWrapper<Member> qw = new QueryWrapper<>();
String nicknameLike = query.getNickname();
if (!StringUtils.isEmpty(nicknameLike)) {
qw.like("nickname", nicknameLike);
}
if (!StringUtils.isEmpty(query.getUserType())) {
qw.like("user_type", query.getUserType());
}
String phone = query.getPhone();
if (!StringUtils.isEmpty(phone)) {
qw.eq("phone_encrypted", AesCryptoUtils.encrypt(aesKey, phone));
}
if (!StringUtils.isEmpty(query.getBeginTime()) && !StringUtils.isEmpty(query.getEndTime())){
if (!StringUtils.isEmpty(query.getBeginTime()) && !StringUtils.isEmpty(query.getEndTime())) {
qw.ge("create_time", query.getBeginTime());
qw.lt("create_time", query.getEndTime());
}
if (query.getHasMark() != null) {
switch (query.getHasMark()) {
case 0:
qw.isNull("mark").or().eq("mark","");
qw.isNull("mark").or().eq("mark", "");
break;
case 1:
qw.isNotNull("mark").ne("mark","");
qw.isNotNull("mark").ne("mark", "");
break;
default:
break;
}
}
if (query.getStatus() != null){
if (query.getStatus() != null) {
qw.eq("status", query.getStatus());
}
return memberMapper.selectList(qw);
......@@ -121,10 +165,10 @@ public class MemberService {
public int updateMark(Member member) {
UpdateWrapper<Member> updateWrapper = new UpdateWrapper<>();
updateWrapper.set("mark",member.getMark())
.set("update_time",LocalDateTime.now())
.eq("id",member.getId());
return memberMapper.update(null,updateWrapper);
updateWrapper.set("mark", member.getMark())
.set("update_time", LocalDateTime.now())
.eq("id", member.getId());
return memberMapper.update(null, updateWrapper);
}
/**
......
......@@ -41,8 +41,8 @@ public class WechatController {
}
@ApiOperation("获取微信用户授权信息")
@PostMapping("/getWechatUserAuth")
public ResponseEntity<WechatUserAuth> getWechatUserAuth(@RequestBody String data){
@GetMapping("/getWechatUserAuth")
public ResponseEntity<WechatUserAuth> getWechatUserAuth(@RequestParam("data") String data){
return ResponseEntity.ok(service.getWechatUserAuth(data));
}
}
......@@ -2,9 +2,12 @@ package com.cyl.wechat;
import com.wechat.pay.java.core.Config;
import com.wechat.pay.java.core.RSAAutoCertificateConfig;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
import java.io.IOException;
public class WechatPayConfig {
private static Config wechatPayConfig;
......@@ -17,7 +20,34 @@ public class WechatPayConfig {
if (wechatPayConfig == null) {
wechatPayConfig = new RSAAutoCertificateConfig.Builder()
.merchantId(WechatPayData.merchantId)
.privateKeyFromPath(WechatPayData.privateKeyPath)
.privateKey("-----BEGIN PRIVATE KEY-----\n" +
"MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDfPg4xpRa2Yz4q\n" +
"bKDPfC1FlrD+7unTL3qyoDajRBf+RR+RoOwZZuXIKkD07UJEURFug1Fk7kFECgKc\n" +
"oXB7QL/FyPDOj2VhM7qhZh0F9OTT2Cdfq2Dn4frfKl8q+FhKNvDhw0q6+X24Dkoz\n" +
"gyK4/I8KQgYGJF5MSypSwfiNdZE3ton+boVUgBBkMpnnvjTu6ToVoyljFozUrXHE\n" +
"5LGV7OuNHZ33lWiQqL9JAKSQPKlfRMdA4oH+I/v+O4xWRcchwPufS00aKLL/0FTc\n" +
"IX1lk4TkCWkONpRmhdEx2vgC4pOhi+ojN5FsRxXEdTX3BPHRYHvDwm+O11BiekLE\n" +
"9O/qTxOxAgMBAAECggEATk/ojsXI9+ZMknlU2DRJdVXtdSC+adUIB81oHVHv0MTS\n" +
"1DVNXYPZK6SW8NSiIHEH2mq6jNt/jaytSeDgInyOSYW549wtxjFtUN0PZV2JQD9d\n" +
"YJQwBGgjp1Gn3N0Nq8smKSxm9Lw8u+pXYUapUZdXXlPW5SSw57aefDWLSaRqcs4w\n" +
"TmruBaTTXGXyqjijQ2CRmxMaxH8kksetretHUyvgUGPntMXcROoIN22DbCkKiOdh\n" +
"F5IEDKdfCB/P+4nI0pmbaCm8mbRb7jykptJg3/sHu0cKLD4JNHNwOzk2hUmIIPk0\n" +
"tw+VNgJBP4xnhOZlEe+mdGBGqQD1ZqXHCWYg0bkoIQKBgQDzM8aq3xvDiDXBX7+O\n" +
"rVEOTA05w/B4AvPxXSOqxCGlPjBPoxHGcDCwNYoNQvZU2NYKbOWOhZZm0vUw1uqm\n" +
"beXrfnWlYXycUl3aKI6k8YHrMTMvwgtLJXVIguvCW2Pup1gWX+uAuybaJl5ynnpf\n" +
"vjawxUxwDZYjh76V8jJOdzEtVQKBgQDq/WWBJbLFPYSjyuzthZaZ5aOAI8VZMNEr\n" +
"iWTm2zN7+jUVOIwVorQtQjZPCZyTh3U9m60BBrZixsIogVGAuplR/B63YkB1hWut\n" +
"SKnauJLzcgsOQa1lmWHnJcxtA2eZ1iGuH2eiFB/c0GEznpVId40Gs3fEpt+xR45h\n" +
"W4h1Iges7QKBgAkcPGn0N58IgDMBOjTHC01Ezg4G6AAm5Cp7ebWQ6U2+WaLyEd1k\n" +
"IH7JUqWSh5XAFayITcUb/flWF7c/pcScQ0uiDhgm4bsdXsSoVkeZgGtmCWvVkgS7\n" +
"n3wa42gBcmnjPOqBp1nIKPltDIawpxblEjlm+qkL6T7le980FmxYDLCNAoGBAJv8\n" +
"+ZRxYepsm8/etMg3FXGzboVxOV+reC5eVgypFdQGk5Yyo0r5ZoFkooh06OtF0B3F\n" +
"aWJ1Aj0vk1MwBNpfA8fYhMtW/VMF7iRpR9dZDrNr0Mr17hSzbLnz7W+wAuWrr0/W\n" +
"qQR+N2htKxkI/C/OrF72Y1q3K2aTCYC3Mi4PGOlBAoGBAJGIuDGQVaWY7XlKNYqk\n" +
"g+0l3CoPO1GokGU17YVzrM4UrvNqPy6R/+KHtX/XYd0kh+4xHKEIydC2TZXHvdvo\n" +
"AuP1zrEmnV0FZy8quw+89KX5uj0SO81yGHReDawlG2AAMZc6SmYrEFumlFKBOeVn\n" +
"Hf8trwRlMLiv+10a4bwZtNon\n" +
"-----END PRIVATE KEY-----\n")
.merchantSerialNumber(WechatPayData.merchantSerialNumber)
.apiV3Key(WechatPayData.apiV3key)
.build();
......
......@@ -29,7 +29,7 @@ public class WechatPayUtil {
public static String getSign(String signatureStr,String privateKey) throws InvalidKeyException, NoSuchAlgorithmException, SignatureException, IOException, URISyntaxException {
//replace 根据实际情况,不一定都需要
String replace = privateKey.replace("\\n", "\n");
InputStream certStream = Files.newInputStream(Paths.get(privateKey));
InputStream certStream = Files.newInputStream(Paths.get(replace));
PrivateKey merchantPrivateKey = PemUtil.readPemPrivateKey(certStream);
Signature sign = Signature.getInstance("SHA256withRSA");
sign.initSign(merchantPrivateKey);
......
......@@ -34,8 +34,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
select sum(case when op_type = 1 then amount else 0 end) as income,
sum(case when op_type = 2 then amount else 0 end) as expenditure
from act_integral_history
where member_id = #{param3}
and create_time >= #{param1}
and create_time <![CDATA[ <= ]]> #{param2}
where member_id = #{param1}
</select>
</mapper>
......@@ -95,6 +95,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
select
a.id,
a.order_sn orderSn,
a.de_money deMoney,
a.aftersale_status aftersaleStatus,
a.status,
a.member_username userName,
......@@ -114,6 +115,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
a.receiver_district receiverDistrict,
a.receiver_detail_address receiverDetailAddress,
a.delivery_time deliveryTime,
a.receiver_phone_encrypted receiverPhoneEncrypted,
a.delivery_sn deliverySn,
-- b.quantity buyNum,
-- b.pic,
......@@ -183,15 +185,26 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
delete_status=0
and member_id=#{memberId}
<if test="status==-1">
and status in (1,2,3,4)
and status in (1,2,3,4,5,6,7,8,9)
</if>
<if test="status>-1 and status&lt;3">
and status=#{status}
and aftersale_status=1
<if test="status==6">
and status in (5,6,9,8,5,6,7,8,9)
</if>
<if test="status==-2">
and aftersale_status in (2, 3)
</if>
<if test="status==0">
and status in (0)
</if>
<if test="status==1">
and status in (1)
</if>
<if test="status==2">
and status in (2)
</if>
<if test="status==3">
and status in (3)
</if>
order by create_time desc
</select>
<select id="selectOrderDetail" resultType="com.cyl.h5.domain.vo.H5OrderVO">
......@@ -214,7 +227,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
receiver_province,
receiver_city,
receiver_district,
receiver_detail_address
receiver_detail_address,
de_money,
delivery_company,
give_integral
from oms_order
where
delete_status=0
......
......@@ -6,8 +6,9 @@
<resultMap type="AgreementInfo" id="AgreementInfoResult">
<result property="id" column="id"/>
<result property="content" column="content"/>
<result property="type" column="type"/>
<result property="userContent" column="user_content"/>
<result property="privacyContent" column="privacy_content"/>
<result property="buyContent" column="buy_content"/>
<result property="createBy" column="create_by"/>
<result property="createTime" column="create_time"/>
<result property="updateBy" column="update_by"/>
......@@ -19,7 +20,7 @@
</resultMap>
<sql id="selectAgreementInfoVo">
select id, content, type, create_by, create_time, update_by, update_time
select id, user_content, privacy_content,buy_content, create_by, create_time, update_by, update_time
from agreement_info
</sql>
......
......@@ -6,8 +6,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<resultMap type="BlackImgInfo" id="BlackImgInfoResult">
<result property="id" column="id"/>
<result property="imgUrl" column="img_url"/>
<result property="type" column="type"/>
<result property="homeImgUrl" column="home_img_url"/>
<result property="typeImgUrl" column="type_img_url"/>
<result property="thisImgUrl" column="this_img_url"/>
<result property="createBy" column="create_by"/>
<result property="createTime" column="create_time"/>
<result property="updateBy" column="update_by"/>
......@@ -19,7 +20,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</resultMap>
<sql id="selectBlackImgInfoVo">
select id, img_url, type, create_by, create_time, update_by, update_time from black_img_info
select id, home_img_url, type_img_url, this_img_url,create_by, create_time, update_by, update_time from black_img_info
</sql>
<select id="selectByEntity" parameterType="BlackImgInfo" resultMap="BlackImgInfoResult">
......
......@@ -21,6 +21,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="detailMobileHtml" column="detail_mobile_html"/>
<result property="brandName" column="brand_name"/>
<result property="productCategoryName" column="product_category_name"/>
<result property="virtualSales" column="virtual_sales"/>
<result property="createBy" column="create_by"/>
<result property="createTime" column="create_time"/>
<result property="updateBy" column="update_by"/>
......
......@@ -64,4 +64,7 @@ public interface SysUserRoleMapper
@Select("SELECT count(0) FROM sys_user_role WHERE user_id = #{userId} AND role_id = #{roleId}")
int countRoleAndUserId(@Param("roleId") Long roleId, @Param("userId") Long userId);
@Select("SELECT * FROM sys_user_role WHERE user_id = #{userId}")
SysUserRole selectByUserId(@Param("userId")Long userId);
}
......@@ -2,6 +2,7 @@ package com.ruoyi.system.service.impl;
import java.util.ArrayList;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -32,8 +33,7 @@ import com.ruoyi.system.service.ISysUserService;
* @author ruoyi
*/
@Service
public class SysUserServiceImpl implements ISysUserService
{
public class SysUserServiceImpl implements ISysUserService {
private static final Logger log = LoggerFactory.getLogger(SysUserServiceImpl.class);
@Autowired
......@@ -62,9 +62,15 @@ public class SysUserServiceImpl implements ISysUserService
*/
@Override
@DataScope(deptAlias = "d", userAlias = "u")
public List<SysUser> selectUserList(SysUser user)
{
return userMapper.selectUserList(user);
public List<SysUser> selectUserList(SysUser user) {
List<SysUser> sysUsers = userMapper.selectUserList(user);
for (SysUser sysUser : sysUsers) {
SysUserRole sysUserRole = userRoleMapper.selectByUserId(sysUser.getUserId());
if (null != sysUserRole) {
sysUser.setRoleId(sysUserRole.getRoleId());
}
}
return sysUsers;
}
/**
......@@ -75,8 +81,7 @@ public class SysUserServiceImpl implements ISysUserService
*/
@Override
@DataScope(deptAlias = "d", userAlias = "u")
public List<SysUser> selectAllocatedList(SysUser user)
{
public List<SysUser> selectAllocatedList(SysUser user) {
return userMapper.selectAllocatedList(user);
}
......@@ -88,8 +93,7 @@ public class SysUserServiceImpl implements ISysUserService
*/
@Override
@DataScope(deptAlias = "d", userAlias = "u")
public List<SysUser> selectUnallocatedList(SysUser user)
{
public List<SysUser> selectUnallocatedList(SysUser user) {
return userMapper.selectUnallocatedList(user);
}
......@@ -100,8 +104,7 @@ public class SysUserServiceImpl implements ISysUserService
* @return 用户对象信息
*/
@Override
public SysUser selectUserByUserName(String userName)
{
public SysUser selectUserByUserName(String userName) {
return userMapper.selectUserByUserName(userName);
}
......@@ -112,8 +115,7 @@ public class SysUserServiceImpl implements ISysUserService
* @return 用户对象信息
*/
@Override
public SysUser selectUserById(Long userId)
{
public SysUser selectUserById(Long userId) {
return userMapper.selectUserById(userId);
}
......@@ -124,16 +126,13 @@ public class SysUserServiceImpl implements ISysUserService
* @return 结果
*/
@Override
public String selectUserRoleGroup(String userName)
{
public String selectUserRoleGroup(String userName) {
List<SysRole> list = roleMapper.selectRolesByUserName(userName);
StringBuffer idsStr = new StringBuffer();
for (SysRole role : list)
{
for (SysRole role : list) {
idsStr.append(role.getRoleName()).append(",");
}
if (StringUtils.isNotEmpty(idsStr.toString()))
{
if (StringUtils.isNotEmpty(idsStr.toString())) {
return idsStr.substring(0, idsStr.length() - 1);
}
return idsStr.toString();
......@@ -146,16 +145,13 @@ public class SysUserServiceImpl implements ISysUserService
* @return 结果
*/
@Override
public String selectUserPostGroup(String userName)
{
public String selectUserPostGroup(String userName) {
List<SysPost> list = postMapper.selectPostsByUserName(userName);
StringBuffer idsStr = new StringBuffer();
for (SysPost post : list)
{
for (SysPost post : list) {
idsStr.append(post.getPostName()).append(",");
}
if (StringUtils.isNotEmpty(idsStr.toString()))
{
if (StringUtils.isNotEmpty(idsStr.toString())) {
return idsStr.substring(0, idsStr.length() - 1);
}
return idsStr.toString();
......@@ -168,11 +164,9 @@ public class SysUserServiceImpl implements ISysUserService
* @return 结果
*/
@Override
public String checkUserNameUnique(String userName)
{
public String checkUserNameUnique(String userName) {
int count = userMapper.checkUserNameUnique(userName);
if (count > 0)
{
if (count > 0) {
return UserConstants.NOT_UNIQUE;
}
return UserConstants.UNIQUE;
......@@ -185,12 +179,10 @@ public class SysUserServiceImpl implements ISysUserService
* @return
*/
@Override
public String checkPhoneUnique(SysUser user)
{
public String checkPhoneUnique(SysUser user) {
Long userId = StringUtils.isNull(user.getUserId()) ? -1L : user.getUserId();
SysUser info = userMapper.checkPhoneUnique(user.getPhonenumber());
if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue())
{
if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue()) {
return UserConstants.NOT_UNIQUE;
}
return UserConstants.UNIQUE;
......@@ -203,12 +195,10 @@ public class SysUserServiceImpl implements ISysUserService
* @return
*/
@Override
public String checkEmailUnique(SysUser user)
{
public String checkEmailUnique(SysUser user) {
Long userId = StringUtils.isNull(user.getUserId()) ? -1L : user.getUserId();
SysUser info = userMapper.checkEmailUnique(user.getEmail());
if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue())
{
if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue()) {
return UserConstants.NOT_UNIQUE;
}
return UserConstants.UNIQUE;
......@@ -220,10 +210,8 @@ public class SysUserServiceImpl implements ISysUserService
* @param user 用户信息
*/
@Override
public void checkUserAllowed(SysUser user)
{
if (StringUtils.isNotNull(user.getUserId()) && user.isAdmin())
{
public void checkUserAllowed(SysUser user) {
if (StringUtils.isNotNull(user.getUserId()) && user.isAdmin()) {
throw new ServiceException("不允许操作超级管理员用户");
}
}
......@@ -234,15 +222,12 @@ public class SysUserServiceImpl implements ISysUserService
* @param userId 用户id
*/
@Override
public void checkUserDataScope(Long userId)
{
if (!SysUser.isAdmin(SecurityUtils.getUserId()))
{
public void checkUserDataScope(Long userId) {
if (!SysUser.isAdmin(SecurityUtils.getUserId())) {
SysUser user = new SysUser();
user.setUserId(userId);
List<SysUser> users = SpringUtils.getAopProxy(this).selectUserList(user);
if (StringUtils.isEmpty(users))
{
if (StringUtils.isEmpty(users)) {
throw new ServiceException("没有权限访问用户数据!");
}
}
......@@ -256,8 +241,7 @@ public class SysUserServiceImpl implements ISysUserService
*/
@Override
@Transactional
public int insertUser(SysUser user)
{
public int insertUser(SysUser user) {
// 新增用户信息
int rows = userMapper.insertUser(user);
// 新增用户岗位关联
......@@ -274,8 +258,7 @@ public class SysUserServiceImpl implements ISysUserService
* @return 结果
*/
@Override
public boolean registerUser(SysUser user)
{
public boolean registerUser(SysUser user) {
return userMapper.insertUser(user) > 0;
}
......@@ -287,8 +270,7 @@ public class SysUserServiceImpl implements ISysUserService
*/
@Override
@Transactional
public int updateUser(SysUser user)
{
public int updateUser(SysUser user) {
Long userId = user.getUserId();
// 删除用户与角色关联
userRoleMapper.deleteUserRoleByUserId(userId);
......@@ -309,8 +291,7 @@ public class SysUserServiceImpl implements ISysUserService
*/
@Override
@Transactional
public void insertUserAuth(Long userId, Long[] roleIds)
{
public void insertUserAuth(Long userId, Long[] roleIds) {
userRoleMapper.deleteUserRoleByUserId(userId);
insertUserRole(userId, roleIds);
}
......@@ -322,8 +303,7 @@ public class SysUserServiceImpl implements ISysUserService
* @return 结果
*/
@Override
public int updateUserStatus(SysUser user)
{
public int updateUserStatus(SysUser user) {
return userMapper.updateUser(user);
}
......@@ -334,8 +314,7 @@ public class SysUserServiceImpl implements ISysUserService
* @return 结果
*/
@Override
public int updateUserProfile(SysUser user)
{
public int updateUserProfile(SysUser user) {
return userMapper.updateUser(user);
}
......@@ -347,8 +326,7 @@ public class SysUserServiceImpl implements ISysUserService
* @return 结果
*/
@Override
public boolean updateUserAvatar(String userName, String avatar)
{
public boolean updateUserAvatar(String userName, String avatar) {
return userMapper.updateUserAvatar(userName, avatar) > 0;
}
......@@ -359,8 +337,7 @@ public class SysUserServiceImpl implements ISysUserService
* @return 结果
*/
@Override
public int resetPwd(SysUser user)
{
public int resetPwd(SysUser user) {
return userMapper.updateUser(user);
}
......@@ -372,8 +349,7 @@ public class SysUserServiceImpl implements ISysUserService
* @return 结果
*/
@Override
public int resetUserPwd(String userName, String password)
{
public int resetUserPwd(String userName, String password) {
return userMapper.resetUserPwd(userName, password);
}
......@@ -382,22 +358,18 @@ public class SysUserServiceImpl implements ISysUserService
*
* @param user 用户对象
*/
public void insertUserRole(SysUser user)
{
public void insertUserRole(SysUser user) {
Long[] roles = user.getRoleIds();
if (StringUtils.isNotNull(roles))
{
if (StringUtils.isNotNull(roles)) {
// 新增用户与角色管理
List<SysUserRole> list = new ArrayList<SysUserRole>();
for (Long roleId : roles)
{
for (Long roleId : roles) {
SysUserRole ur = new SysUserRole();
ur.setUserId(user.getUserId());
ur.setRoleId(roleId);
list.add(ur);
}
if (list.size() > 0)
{
if (list.size() > 0) {
userRoleMapper.batchUserRole(list);
}
}
......@@ -408,22 +380,18 @@ public class SysUserServiceImpl implements ISysUserService
*
* @param user 用户对象
*/
public void insertUserPost(SysUser user)
{
public void insertUserPost(SysUser user) {
Long[] posts = user.getPostIds();
if (StringUtils.isNotNull(posts))
{
if (StringUtils.isNotNull(posts)) {
// 新增用户与岗位管理
List<SysUserPost> list = new ArrayList<SysUserPost>();
for (Long postId : posts)
{
for (Long postId : posts) {
SysUserPost up = new SysUserPost();
up.setUserId(user.getUserId());
up.setPostId(postId);
list.add(up);
}
if (list.size() > 0)
{
if (list.size() > 0) {
userPostMapper.batchUserPost(list);
}
}
......@@ -435,21 +403,17 @@ public class SysUserServiceImpl implements ISysUserService
* @param userId 用户ID
* @param roleIds 角色组
*/
public void insertUserRole(Long userId, Long[] roleIds)
{
if (StringUtils.isNotNull(roleIds))
{
public void insertUserRole(Long userId, Long[] roleIds) {
if (StringUtils.isNotNull(roleIds)) {
// 新增用户与角色管理
List<SysUserRole> list = new ArrayList<SysUserRole>();
for (Long roleId : roleIds)
{
for (Long roleId : roleIds) {
SysUserRole ur = new SysUserRole();
ur.setUserId(userId);
ur.setRoleId(roleId);
list.add(ur);
}
if (list.size() > 0)
{
if (list.size() > 0) {
userRoleMapper.batchUserRole(list);
}
}
......@@ -463,8 +427,7 @@ public class SysUserServiceImpl implements ISysUserService
*/
@Override
@Transactional
public int deleteUserById(Long userId)
{
public int deleteUserById(Long userId) {
// 删除用户与角色关联
userRoleMapper.deleteUserRoleByUserId(userId);
// 删除用户与岗位表
......@@ -480,10 +443,8 @@ public class SysUserServiceImpl implements ISysUserService
*/
@Override
@Transactional
public int deleteUserByIds(Long[] userIds)
{
for (Long userId : userIds)
{
public int deleteUserByIds(Long[] userIds) {
for (Long userId : userIds) {
checkUserAllowed(new SysUser(userId));
}
// 删除用户与角色关联
......@@ -502,10 +463,8 @@ public class SysUserServiceImpl implements ISysUserService
* @return 结果
*/
@Override
public String importUser(List<SysUser> userList, Boolean isUpdateSupport, Long userId)
{
if (StringUtils.isNull(userList) || userList.size() == 0)
{
public String importUser(List<SysUser> userList, Boolean isUpdateSupport, Long userId) {
if (StringUtils.isNull(userList) || userList.size() == 0) {
throw new ServiceException("导入用户数据不能为空!");
}
int successNum = 0;
......@@ -513,48 +472,36 @@ public class SysUserServiceImpl implements ISysUserService
StringBuilder successMsg = new StringBuilder();
StringBuilder failureMsg = new StringBuilder();
String password = configService.selectConfigByKey("sys.user.initPassword");
for (SysUser user : userList)
{
try
{
for (SysUser user : userList) {
try {
// 验证是否存在这个用户
SysUser u = userMapper.selectUserByUserName(user.getUserName());
if (StringUtils.isNull(u))
{
if (StringUtils.isNull(u)) {
user.setPassword(SecurityUtils.encryptPassword(password));
user.setCreateBy(userId);
this.insertUser(user);
successNum++;
successMsg.append("<br/>" + successNum + "、账号 " + user.getUserName() + " 导入成功");
}
else if (isUpdateSupport)
{
} else if (isUpdateSupport) {
user.setUpdateBy(userId);
this.updateUser(user);
successNum++;
successMsg.append("<br/>" + successNum + "、账号 " + user.getUserName() + " 更新成功");
}
else
{
} else {
failureNum++;
failureMsg.append("<br/>" + failureNum + "、账号 " + user.getUserName() + " 已存在");
}
}
catch (Exception e)
{
} catch (Exception e) {
failureNum++;
String msg = "<br/>" + failureNum + "、账号 " + user.getUserName() + " 导入失败:";
failureMsg.append(msg + e.getMessage());
log.error(msg, e);
}
}
if (failureNum > 0)
{
if (failureNum > 0) {
failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
throw new ServiceException(failureMsg.toString());
}
else
{
} else {
successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
}
return successMsg.toString();
......
......@@ -65,6 +65,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="userName != null and userName != ''">
AND u.user_name like concat('%', #{userName}, '%')
</if>
<if test="nickName != null and nickName != ''">
AND u.nick_name like concat('%', #{nickName}, '%')
</if>
<if test="status != null and status != ''">
AND u.status = #{status}
</if>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment