From 8832646742aff7d8ad37471f41350cd8950caf67 Mon Sep 17 00:00:00 2001
From: “mitao” <“2763622819@qq.com”>
Date: 星期六, 20 十二月 2025 17:22:03 +0800
Subject: [PATCH] 小程序订单我的订单
---
ruoyi-system/src/main/java/com/ruoyi/system/vo/AppletOrderDetailVO.java | 81 +++++++
ruoyi-system/src/main/java/com/ruoyi/system/vo/AppletOrderListVO.java | 46 ++++
pom.xml | 2
ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/OrderController.java | 87 +++++++
ruoyi-applet/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java | 20 +
ruoyi-applet/src/main/resources/application-test.yml | 10
ruoyi-framework/src/main/java/com/ruoyi/framework/config/ApplicationConfig.java | 20 +
ruoyi-system/src/main/java/com/ruoyi/system/mapper/AppletOrderMapper.java | 29 ++
ruoyi-system/src/main/java/com/ruoyi/system/service/AppletOrderService.java | 60 +++++
ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java | 23 +
ruoyi-system/src/main/java/com/ruoyi/system/query/AppletOrderListQuery.java | 22 ++
ruoyi-applet/src/main/resources/application-prod.yml | 13
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TCommissionTransactionFlowServiceImpl.java | 23 +
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AppletOrderServiceImpl.java | 115 ++++++++++
ruoyi-system/src/main/resources/mapper/system/AppletOrderMapper.xml | 51 ++++
ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/UserIndexController.java | 6
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ICBCNotifyServiceImpl.java | 29 -
17 files changed, 573 insertions(+), 64 deletions(-)
diff --git a/pom.xml b/pom.xml
index 7e522a1..6f43501 100644
--- a/pom.xml
+++ b/pom.xml
@@ -10,7 +10,7 @@
<name>ruoyi</name>
<url>http://www.ruoyi.vip</url>
- <description>若依管理系统</description>
+ <description>嘉视达</description>
<properties>
<ruoyi.version>3.8.6</ruoyi.version>
diff --git a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/OrderController.java b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/OrderController.java
index 295ff4f..f5f8694 100644
--- a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/OrderController.java
+++ b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/OrderController.java
@@ -1,14 +1,19 @@
package com.ruoyi.web.controller.api;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.framework.web.service.TokenService;
import com.ruoyi.system.dto.BigGiftPlaceOrderDTO;
import com.ruoyi.system.dto.FinalPaymentDTO;
import com.ruoyi.system.dto.PhysicalGoodsPlaceOrderDTO;
import com.ruoyi.system.model.TAppUser;
+import com.ruoyi.system.query.AppletOrderListQuery;
+import com.ruoyi.system.service.AppletOrderService;
import com.ruoyi.system.service.TAppUserService;
import com.ruoyi.system.service.TBigGiftPackageOrderService;
import com.ruoyi.system.service.TPhysicalGoodsOrderService;
+import com.ruoyi.system.vo.AppletOrderDetailVO;
+import com.ruoyi.system.vo.AppletOrderListVO;
import com.ruoyi.system.vo.PlaceOrderVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -16,10 +21,7 @@
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Lazy;
import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
@@ -41,6 +43,21 @@
private final TAppUserService appUserService;
private final TBigGiftPackageOrderService bigGiftPackageOrderService;
private final TPhysicalGoodsOrderService physicalGoodsOrderService;
+ private final AppletOrderService appletOrderService;
+
+ /**
+ * 订单列表分页查询
+ *
+ * @param query 查询条件
+ * @return 订单列表
+ */
+ @ApiOperation(value = "订单列表分页查询", response = AppletOrderListVO.class)
+ @PostMapping("/list")
+ public R<Page<AppletOrderListVO>> getOrderList(@RequestBody AppletOrderListQuery query) {
+ Integer userId = tokenService.getLoginUserApplet().getUserId();
+ Page<AppletOrderListVO> page = appletOrderService.getOrderList(query, userId);
+ return R.ok(page);
+ }
/**
* 大礼包商品下单
@@ -110,4 +127,66 @@
PlaceOrderVO result = bigGiftPackageOrderService.payFinalPayment(dto.getOrderId(), userId, appUser.getOpenid());
return R.ok(result);
}
+
+ /**
+ * 实物商品订单详情
+ *
+ * @param id 订单ID
+ * @return 订单详情
+ */
+ @ApiOperation(value = "实物商品订单详情", response = AppletOrderDetailVO.class)
+ @GetMapping("/physical/detail/{id}")
+ public R<AppletOrderDetailVO> getPhysicalOrderDetail(@PathVariable Integer id) {
+ Integer userId = tokenService.getLoginUserApplet().getUserId();
+ AppletOrderDetailVO detail = appletOrderService.getPhysicalOrderDetail(id, userId);
+ if (detail == null) {
+ return R.fail("订单不存在或无权查看");
+ }
+ return R.ok(detail);
+ }
+
+ /**
+ * 大礼包订单详情
+ *
+ * @param id 订单ID
+ * @return 订单详情
+ */
+ @ApiOperation(value = "大礼包订单详情", response = AppletOrderDetailVO.class)
+ @GetMapping("/big-gift/detail/{id}")
+ public R<AppletOrderDetailVO> getBigGiftOrderDetail(@PathVariable Integer id) {
+ Integer userId = tokenService.getLoginUserApplet().getUserId();
+ AppletOrderDetailVO detail = appletOrderService.getBigGiftOrderDetail(id, userId);
+ if (detail == null) {
+ return R.fail("订单不存在或无权查看");
+ }
+ return R.ok(detail);
+ }
+
+ /**
+ * 实物商品确认收货
+ *
+ * @param id 订单ID
+ * @return 操作结果
+ */
+ @ApiOperation(value = "实物商品确认收货")
+ @PostMapping("/physical/confirm/{id}")
+ public R<Void> confirmPhysicalOrder(@PathVariable Integer id) {
+ Integer userId = tokenService.getLoginUserApplet().getUserId();
+ boolean success = appletOrderService.confirmPhysicalOrder(id, userId);
+ return success ? R.ok() : R.fail("确认收货失败,订单不存在或状态不正确");
+ }
+
+ /**
+ * 大礼包确认收货
+ *
+ * @param id 订单ID
+ * @return 操作结果
+ */
+ @ApiOperation(value = "大礼包确认收货")
+ @PostMapping("/big-gift/confirm/{id}")
+ public R<Void> confirmBigGiftOrder(@PathVariable Integer id) {
+ Integer userId = tokenService.getLoginUserApplet().getUserId();
+ boolean success = appletOrderService.confirmBigGiftOrder(id, userId);
+ return success ? R.ok() : R.fail("确认收货失败,订单不存在或状态不正确");
+ }
}
diff --git a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/UserIndexController.java b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/UserIndexController.java
index 06c4c8e..a903d00 100644
--- a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/UserIndexController.java
+++ b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/UserIndexController.java
@@ -8,6 +8,7 @@
import com.ruoyi.system.dto.UpdateUserDto;
import com.ruoyi.system.model.TAppUser;
import com.ruoyi.system.service.TAppUserService;
+import com.ruoyi.system.service.TCommissionTransactionFlowService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
@@ -27,12 +28,15 @@
private final TAppUserService tAppUserService;
private final TokenService tokenService;
+ private final TCommissionTransactionFlowService commissionTransactionFlowService;
@ApiOperation(value = "个人中心--用户信息",response = TAppUser.class)
@GetMapping(value = "/getUserInfo")
public R<TAppUser> getUserInfo() {
Integer userId = tokenService.getLoginUserApplet().getUserId();
- return R.ok(tAppUserService.getById(userId));
+ TAppUser appUser = tAppUserService.getById(userId);
+
+ return R.ok();
}
@ApiOperation(value = "个人中心--修改手机号")
diff --git a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java
index 8c0f5cf..b911aa1 100644
--- a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java
+++ b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java
@@ -24,8 +24,10 @@
import com.ruoyi.system.utils.wx.body.resp.Code2SessionRespBody;
import com.ruoyi.system.utils.wx.body.resq.Code2SessionResqBody;
import com.ruoyi.system.utils.wx.model.WeixinProperties;
+import com.ruoyi.system.utils.wx.pojo.AppletUserDecodeData;
import com.ruoyi.system.utils.wx.pojo.AppletUserEncrypteData;
import com.ruoyi.system.utils.wx.tools.WxAppletTools;
+import com.ruoyi.system.utils.wx.tools.WxUtils;
import com.ruoyi.web.controller.tool.MsgUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -149,20 +151,20 @@
String openid = body.getOpenid();
String sessionKey = body.getSessionKey();
// 用户信息解密 数据验签
-// if (StringUtils.isNotBlank(data.getSignature())) {
-// WxUtils.verifySignature(data.getRawData(), sessionKey, data.getSignature());
-// }
-// if(StringUtils.isEmpty(data.getEncryptedData()) || StringUtils.isEmpty(data.getIv())){
-// return R.fail("已拒绝授权");
-// }
-// AppletUserDecodeData appletUserDecodeData = WxUtils.encryptedData(data.getEncryptedData(), sessionKey, data.getIv());
-// appletUserDecodeData.setOpenId(openid);
+ if (StringUtils.hasLength(data.getSignature())) {
+ WxUtils.verifySignature(data.getRawData(), sessionKey, data.getSignature());
+ }
+ if(StringUtils.isEmpty(data.getEncryptedData()) || StringUtils.isEmpty(data.getIv())){
+ return R.fail("已拒绝授权");
+ }
+ AppletUserDecodeData appletUserDecodeData = WxUtils.encryptedData(data.getEncryptedData(), sessionKey, data.getIv());
+ appletUserDecodeData.setOpenId(openid);
// 先使用openId和当前手机号进行查询
TAppUser sysAppUser = appUserService.getOne(Wrappers.lambdaQuery(TAppUser.class)
.and(e->e.eq(TAppUser::getOpenid, openid)));
if (sysAppUser==null){
sysAppUser = new TAppUser();
-// sysAppUser.setPhoneNumber(appletUserDecodeData.getPhoneNumber());
+ sysAppUser.setPhone(appletUserDecodeData.getPhoneNumber());
sysAppUser.setOpenid(openid);
// 手机号中间四位替换为*
// sysAppUser.setNickName(appletUserDecodeData.getPhoneNumber().replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2"));
diff --git a/ruoyi-applet/src/main/resources/application-prod.yml b/ruoyi-applet/src/main/resources/application-prod.yml
index cd550ac..7da3f0e 100644
--- a/ruoyi-applet/src/main/resources/application-prod.yml
+++ b/ruoyi-applet/src/main/resources/application-prod.yml
@@ -249,7 +249,7 @@
order-refund-url: "https://gw.open.icbc.com.cn/api/cardbusiness/aggregatepay/b2c/online/refundqry/V1"
# 完整的回调通知地址,支付完成后通知商户的URL
- notify-url: ""
+ notify-url: "/icbc-notify/"
# 回调方法的路径
notify-url-method: "/icbc-notify/"
@@ -258,13 +258,13 @@
keys:
# 我方私钥,用于签名请求
- my-private-key: ""
+ my-private-key: "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDKTiDDXWHil2veWR9nCzAkSlQIt9qyILoeLfhV/dIZ0YoqHTnIefARnSIaDP0y1Pqc7orTcNifKBQBaV8AbXIjow+VZpsysoyN4rnjmW3xOx600CaxQLKnXnl4eWkH/mHlkSb+Khv/hsmrNTwMtpf6ZE+NlVQFAXYgJZ5+JlaM4tgfdavXYXk053MffuPE/M+GZEvpFkrCpP1PJovwRvYZCeyTuNC6OEKgpkphfF7uJBbUV5GkgiG3Lzvt8WqgNo9ANzidfDGfKfrSMm3lF8YF1wt1u7ieZ99oasiR8q5nhSqXt2slAMSYpUdfsM4//6Tj8qkjnDdl0DquMBqX3S3XAgMBAAECggEAAODS8pYqsR2gKcBwSvW4+UdbUwhdSi2rMStY6yKlcVhABcvHru+ck67/cWaCCOD0z46XirBwOEynvZPUBj/zYWU5UZg270LoKkuELBFD8WqkyPsoV9ekjuZxl4zLYG4BxcnaBftv0K2onXYnMxTt1vftgntV+ImXli8jn3+SG510gIqzdp4qoQgySMmu+ew2I8Ank3yacg+ThYuJuG2T/RWyCoQKzw4vIRqilLnnqiM83AJniI5cM56EgMRCFOxsXR4fED5BHMaFJNlxNhWGVp8PE4s2S3aRsozJfMeH+SX/4/6u8fcG0w2eMFeJieNK56cOYgoXFkj6buQZCCt9XQKBgQDTcr6qYZsSk2tuXkFZiQ0JKe6FglQp8byBDU+40ESVtVLs8+ztQFE6/0lHgvwwtif2CkN6tFCcbfWfNF4g9Sgf/8G2MiCywFO8igbn7eRFePs4Ow2xdKbRP1GhRtL9nv5HGFT7O/puCxhkPZ4OVUg+e7E4eS0o+IiU8DSL5sa8YwKBgQD07jggN5H9LDbluZ7u6zvA/xBAM06Py/CCcmBCSK7Ekso7Rb0zBdTd+qhuErQEydgjRDeYGTsv0kBAPLb3nud7z/6R1pm2ofrCOT7QoJsNPcRAdyiMoRpxe+VhRbVIsSfsDQpO7uYiSpC3+kcMBPaS/3YMP9QsO7sUFpZlgkcA/QKBgAYrOtTNtDB+jIvTxCRQk0jJKGRMwRfYLZ+2O7Uwnk+f0qOHGkpxre0CtaiYcbMaHWBYPE/AIvntW1Uhuf1MKbeFRqmCHOIaKlc9z6XEkvxT40BouKWMubExH7iM0GsF0HVSiGgr/8pmGHgUNCBG7Kyl/y2em2qulY2C1IWgXfvxAoGBAMA3U4S1F7UARfTzP29w3GwRv8cifL0M56r35+Mc90r9iAgMKvcn1G6AkD4SH4TCgwTqPFb5NiHJdvLyswSRiEj6amY5bFiPtiNGma1Q3V3+401UNlZm+EGnYdR8yFBL93Cgqz5W7fRrYDeCCs+79WZXZWUnknNETQTu1QjEvMRhAoGBAKxtYlqPMBQ9KiBLipaj/jAx7xlPmhphgcGHPf7sBgDplq9vTO9dq+XK4Fhj1fV9OEmNDC0muk9l9WXBkhww7ji6k7zhY4H7DAPhe1MD/rqkcq7SKA4zeHNbt2TScAzzYpKmN8lSA7G4MgcG4IQcYpwxNzsR7Pf4W0cM0Qf4LgyZ"
# 对方(即工行)网关公钥,用于验证返回的签名
- api-gw-public-key: ""
+ api-gw-public-key: "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCMpjaWjngB4E3ATh+G1DVAmQnIpiPEFAEDqRfNGAVvvH35yDetqewKi0l7OEceTMN1C6NPym3zStvSoQayjYV+eIcZERkx31KhtFu9clZKgRTyPjdKMIth/wBtPKjL/5+PYalLdomM4ONthrPgnkN4x4R0+D4+EBpXo8gNiAFsNwIDAQAB"
# APP的编号,应用在API开放平台注册时生成
- app-id: ""
+ app-id: "11000000000000018953"
# 商户编号,用于标识商户账户
mer-id: ""
@@ -273,15 +273,14 @@
mer-prtcl-no: ""
# 设备号,设备的唯一标识符
- decive-info: ""
+ decive-info: "013467007045764"
# 微信APP的编号,便于与微信支付接口对接
- wx-app-id: ""
+ wx-app-id: "wx87744e4e4094a829"
# 微信公众号的APP编号,供公众号支付使用
wx-gzh-app-id: ""
# 订单超时时间,单位为分钟
expire-time: "60"
-
diff --git a/ruoyi-applet/src/main/resources/application-test.yml b/ruoyi-applet/src/main/resources/application-test.yml
index 50762c2..d324b88 100644
--- a/ruoyi-applet/src/main/resources/application-test.yml
+++ b/ruoyi-applet/src/main/resources/application-test.yml
@@ -248,13 +248,13 @@
keys:
# 我方私钥,用于签名请求
- my-private-key: ""
+ my-private-key: "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDKTiDDXWHil2veWR9nCzAkSlQIt9qyILoeLfhV/dIZ0YoqHTnIefARnSIaDP0y1Pqc7orTcNifKBQBaV8AbXIjow+VZpsysoyN4rnjmW3xOx600CaxQLKnXnl4eWkH/mHlkSb+Khv/hsmrNTwMtpf6ZE+NlVQFAXYgJZ5+JlaM4tgfdavXYXk053MffuPE/M+GZEvpFkrCpP1PJovwRvYZCeyTuNC6OEKgpkphfF7uJBbUV5GkgiG3Lzvt8WqgNo9ANzidfDGfKfrSMm3lF8YF1wt1u7ieZ99oasiR8q5nhSqXt2slAMSYpUdfsM4//6Tj8qkjnDdl0DquMBqX3S3XAgMBAAECggEAAODS8pYqsR2gKcBwSvW4+UdbUwhdSi2rMStY6yKlcVhABcvHru+ck67/cWaCCOD0z46XirBwOEynvZPUBj/zYWU5UZg270LoKkuELBFD8WqkyPsoV9ekjuZxl4zLYG4BxcnaBftv0K2onXYnMxTt1vftgntV+ImXli8jn3+SG510gIqzdp4qoQgySMmu+ew2I8Ank3yacg+ThYuJuG2T/RWyCoQKzw4vIRqilLnnqiM83AJniI5cM56EgMRCFOxsXR4fED5BHMaFJNlxNhWGVp8PE4s2S3aRsozJfMeH+SX/4/6u8fcG0w2eMFeJieNK56cOYgoXFkj6buQZCCt9XQKBgQDTcr6qYZsSk2tuXkFZiQ0JKe6FglQp8byBDU+40ESVtVLs8+ztQFE6/0lHgvwwtif2CkN6tFCcbfWfNF4g9Sgf/8G2MiCywFO8igbn7eRFePs4Ow2xdKbRP1GhRtL9nv5HGFT7O/puCxhkPZ4OVUg+e7E4eS0o+IiU8DSL5sa8YwKBgQD07jggN5H9LDbluZ7u6zvA/xBAM06Py/CCcmBCSK7Ekso7Rb0zBdTd+qhuErQEydgjRDeYGTsv0kBAPLb3nud7z/6R1pm2ofrCOT7QoJsNPcRAdyiMoRpxe+VhRbVIsSfsDQpO7uYiSpC3+kcMBPaS/3YMP9QsO7sUFpZlgkcA/QKBgAYrOtTNtDB+jIvTxCRQk0jJKGRMwRfYLZ+2O7Uwnk+f0qOHGkpxre0CtaiYcbMaHWBYPE/AIvntW1Uhuf1MKbeFRqmCHOIaKlc9z6XEkvxT40BouKWMubExH7iM0GsF0HVSiGgr/8pmGHgUNCBG7Kyl/y2em2qulY2C1IWgXfvxAoGBAMA3U4S1F7UARfTzP29w3GwRv8cifL0M56r35+Mc90r9iAgMKvcn1G6AkD4SH4TCgwTqPFb5NiHJdvLyswSRiEj6amY5bFiPtiNGma1Q3V3+401UNlZm+EGnYdR8yFBL93Cgqz5W7fRrYDeCCs+79WZXZWUnknNETQTu1QjEvMRhAoGBAKxtYlqPMBQ9KiBLipaj/jAx7xlPmhphgcGHPf7sBgDplq9vTO9dq+XK4Fhj1fV9OEmNDC0muk9l9WXBkhww7ji6k7zhY4H7DAPhe1MD/rqkcq7SKA4zeHNbt2TScAzzYpKmN8lSA7G4MgcG4IQcYpwxNzsR7Pf4W0cM0Qf4LgyZ"
# 对方(即工行)网关公钥,用于验证返回的签名
- api-gw-public-key: ""
+ api-gw-public-key: "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCMpjaWjngB4E3ATh+G1DVAmQnIpiPEFAEDqRfNGAVvvH35yDetqewKi0l7OEceTMN1C6NPym3zStvSoQayjYV+eIcZERkx31KhtFu9clZKgRTyPjdKMIth/wBtPKjL/5+PYalLdomM4ONthrPgnkN4x4R0+D4+EBpXo8gNiAFsNwIDAQAB"
# APP的编号,应用在API开放平台注册时生成
- app-id: ""
+ app-id: "11000000000000018953"
# 商户编号,用于标识商户账户
mer-id: ""
@@ -263,10 +263,10 @@
mer-prtcl-no: ""
# 设备号,设备的唯一标识符
- decive-info: ""
+ decive-info: "013467007045764"
# 微信APP的编号,便于与微信支付接口对接
- wx-app-id: ""
+ wx-app-id: "wx87744e4e4094a829"
# 微信公众号的APP编号,供公众号支付使用
wx-gzh-app-id: ""
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ApplicationConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ApplicationConfig.java
index 1d4dc1f..d0d9c03 100644
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ApplicationConfig.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ApplicationConfig.java
@@ -1,11 +1,17 @@
package com.ruoyi.framework.config;
-import java.util.TimeZone;
+import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer;
+import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
+import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;
+import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
+
+import java.time.format.DateTimeFormatter;
+import java.util.TimeZone;
/**
* 程序注解配置
@@ -19,12 +25,20 @@
@MapperScan("com.ruoyi.**.mapper")
public class ApplicationConfig
{
+ private static final String DATE_TIME_PATTERN = "yyyy-MM-dd HH:mm:ss";
+ private static final String DATE_PATTERN = "yyyy-MM-dd";
+
/**
- * 时区配置
+ * 时区配置 + LocalDateTime全局格式化
*/
@Bean
public Jackson2ObjectMapperBuilderCustomizer jacksonObjectMapperCustomization()
{
- return jacksonObjectMapperBuilder -> jacksonObjectMapperBuilder.timeZone(TimeZone.getDefault());
+ return builder -> builder
+ .timeZone(TimeZone.getDefault())
+ .serializers(new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DATE_TIME_PATTERN)))
+ .deserializers(new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DATE_TIME_PATTERN)))
+ .serializers(new LocalDateSerializer(DateTimeFormatter.ofPattern(DATE_PATTERN)))
+ .deserializers(new LocalDateDeserializer(DateTimeFormatter.ofPattern(DATE_PATTERN)));
}
}
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java
index 638e95d..ee93cd1 100644
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java
@@ -5,6 +5,7 @@
import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.constant.UserConstants;
import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.core.domain.entity.TAppUserResp;
import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.core.domain.model.LoginUserApplet;
import com.ruoyi.common.core.redis.RedisCache;
@@ -23,6 +24,7 @@
import com.ruoyi.system.service.ISysUserService;
import com.ruoyi.system.service.TAppUserService;
import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.authentication.AuthenticationManager;
@@ -199,13 +201,19 @@
throw new UserNotExistsException();
}
// 用户验证
- TAppUser user = tAppUserService.getOne(Wrappers.<TAppUser>lambdaQuery().eq(TAppUser::getPhone,username));
+ TAppUser user = tAppUserService.getOne(Wrappers.<TAppUser>lambdaQuery().eq(TAppUser::getPhone,username).ne(TAppUser::getStatus,3));
if (StringUtils.isNull(user)){
- log.info("登录用户:{} 不存在.", username);
- throw new ServiceException(MessageUtils.message("user.not.exists"));
- } else if (user.getStatus().equals(3)) {
- log.info("登录用户:{} 已被删除.", username);
- throw new ServiceException(MessageUtils.message("user.password.delete"));
+ log.info("登录用户:{} 不存在.创建一个新用户", username);
+ user = new TAppUser();
+ user.setPhone(username);
+ user.setStatus(1);
+ tAppUserService.save(user);
+ // throw new ServiceException(MessageUtils.message("user.not.exists"));
+ } else {
+ if (user.getStatus().equals(2)) {
+ log.info("登录用户:{} 已被停用.", username);
+ throw new ServiceException(MessageUtils.message("user.blocked"));
+ }
}
if ("test".equals(env) || "dev".equals(env)) {
if (!code.equals("111111")) {
@@ -224,6 +232,9 @@
AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")));
LoginUserApplet loginUser = new LoginUserApplet(user.getId(), null, null, null);
recordAppLoginInfo(loginUser.getUserId().toString());
+ TAppUserResp sysUserResp = new TAppUserResp();
+ BeanUtils.copyProperties(user, sysUserResp);
+ loginUser.setUser(sysUserResp);
// 生成token
return loginUser;
}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/AppletOrderMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/AppletOrderMapper.java
new file mode 100644
index 0000000..4c743cb
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/AppletOrderMapper.java
@@ -0,0 +1,29 @@
+package com.ruoyi.system.mapper;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.system.query.AppletOrderListQuery;
+import com.ruoyi.system.vo.AppletOrderListVO;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 小程序端订单Mapper
+ *
+ * @author mitao
+ * @since 2025-12-20
+ */
+public interface AppletOrderMapper {
+
+ /**
+ * 分页查询订单列表
+ *
+ * @param page 分页参数
+ * @param query 查询条件
+ * @param appUserId 用户ID
+ * @return 订单列表
+ */
+ List<AppletOrderListVO> selectOrderList(Page<AppletOrderListVO> page,
+ @Param("query") AppletOrderListQuery query,
+ @Param("appUserId") Integer appUserId);
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/query/AppletOrderListQuery.java b/ruoyi-system/src/main/java/com/ruoyi/system/query/AppletOrderListQuery.java
new file mode 100644
index 0000000..82be061
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/query/AppletOrderListQuery.java
@@ -0,0 +1,22 @@
+package com.ruoyi.system.query;
+
+import com.ruoyi.common.core.domain.BasePage;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 小程序端订单列表查询条件
+ *
+ * @author mitao
+ * @since 2025-12-20
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "AppletOrderListQuery", description = "小程序端订单列表查询条件")
+public class AppletOrderListQuery extends BasePage {
+
+ @ApiModelProperty(value = "订单状态筛选(null=全部,1=待支付,2=已付定金,3=已支付)")
+ private Integer status;
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/AppletOrderService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/AppletOrderService.java
new file mode 100644
index 0000000..6a39ece
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/AppletOrderService.java
@@ -0,0 +1,60 @@
+package com.ruoyi.system.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.system.query.AppletOrderListQuery;
+import com.ruoyi.system.vo.AppletOrderDetailVO;
+import com.ruoyi.system.vo.AppletOrderListVO;
+
+/**
+ * 小程序端订单Service
+ *
+ * @author mitao
+ * @since 2025-12-20
+ */
+public interface AppletOrderService {
+
+ /**
+ * 分页查询订单列表
+ *
+ * @param query 查询条件
+ * @param appUserId 用户ID
+ * @return 分页结果
+ */
+ Page<AppletOrderListVO> getOrderList(AppletOrderListQuery query, Integer appUserId);
+
+ /**
+ * 获取实物商品订单详情
+ *
+ * @param orderId 订单ID
+ * @param appUserId 用户ID
+ * @return 订单详情
+ */
+ AppletOrderDetailVO getPhysicalOrderDetail(Integer orderId, Integer appUserId);
+
+ /**
+ * 获取大礼包订单详情
+ *
+ * @param orderId 订单ID
+ * @param appUserId 用户ID
+ * @return 订单详情
+ */
+ AppletOrderDetailVO getBigGiftOrderDetail(Integer orderId, Integer appUserId);
+
+ /**
+ * 实物商品确认收货
+ *
+ * @param orderId 订单ID
+ * @param appUserId 用户ID
+ * @return 是否成功
+ */
+ boolean confirmPhysicalOrder(Integer orderId, Integer appUserId);
+
+ /**
+ * 大礼包确认收货
+ *
+ * @param orderId 订单ID
+ * @param appUserId 用户ID
+ * @return 是否成功
+ */
+ boolean confirmBigGiftOrder(Integer orderId, Integer appUserId);
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AppletOrderServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AppletOrderServiceImpl.java
new file mode 100644
index 0000000..b67f122
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AppletOrderServiceImpl.java
@@ -0,0 +1,115 @@
+package com.ruoyi.system.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.alibaba.fastjson2.JSON;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.system.mapper.AppletOrderMapper;
+import com.ruoyi.system.model.TBigGiftPackage;
+import com.ruoyi.system.model.TBigGiftPackageOrder;
+import com.ruoyi.system.model.TPhysicalGoods;
+import com.ruoyi.system.model.TPhysicalGoodsOrder;
+import com.ruoyi.system.query.AppletOrderListQuery;
+import com.ruoyi.system.service.AppletOrderService;
+import com.ruoyi.system.service.TBigGiftPackageOrderService;
+import com.ruoyi.system.service.TPhysicalGoodsOrderService;
+import com.ruoyi.system.vo.AppletOrderDetailVO;
+import com.ruoyi.system.vo.AppletOrderListVO;
+import lombok.RequiredArgsConstructor;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * 小程序端订单Service实现
+ *
+ * @author mitao
+ * @since 2025-12-20
+ */
+@Service
+@RequiredArgsConstructor(onConstructor_ = @Lazy)
+public class AppletOrderServiceImpl implements AppletOrderService {
+
+ private final AppletOrderMapper appletOrderMapper;
+ private final TPhysicalGoodsOrderService physicalGoodsOrderService;
+ private final TBigGiftPackageOrderService bigGiftPackageOrderService;
+
+ @Override
+ public Page<AppletOrderListVO> getOrderList(AppletOrderListQuery query, Integer appUserId) {
+ Page<AppletOrderListVO> page = new Page<>(query.getPageNum(), query.getPageSize());
+ List<AppletOrderListVO> list = appletOrderMapper.selectOrderList(page, query, appUserId);
+ page.setRecords(list);
+ return page;
+ }
+
+ @Override
+ public AppletOrderDetailVO getPhysicalOrderDetail(Integer orderId, Integer appUserId) {
+ TPhysicalGoodsOrder order = physicalGoodsOrderService.getById(orderId);
+ if (order == null || !order.getAppUserId().equals(appUserId)) {
+ return null;
+ }
+
+ AppletOrderDetailVO vo = BeanUtil.copyProperties(order, AppletOrderDetailVO.class);
+ vo.setOrderType(2); // 实物商品
+
+ // 解析商品JSON
+ if (order.getPhysicalGoods() != null) {
+ TPhysicalGoods goods = JSON.parseObject(order.getPhysicalGoods(), TPhysicalGoods.class);
+ if (goods != null) {
+ vo.setGoodsName(goods.getName());
+ vo.setGoodsIntro(goods.getIntroduction());
+ vo.setGoodsCover(goods.getCoverImage());
+ vo.setGoodsPrice(goods.getTotalPrice());
+ }
+ }
+ return vo;
+ }
+
+ @Override
+ public AppletOrderDetailVO getBigGiftOrderDetail(Integer orderId, Integer appUserId) {
+ TBigGiftPackageOrder order = bigGiftPackageOrderService.getById(orderId);
+ if (order == null || !order.getAppUserId().equals(appUserId)) {
+ return null;
+ }
+
+ AppletOrderDetailVO vo = BeanUtil.copyProperties(order, AppletOrderDetailVO.class);
+ vo.setOrderType(1); // 大礼包
+
+ // 解析商品JSON
+ if (order.getBigGiftPackage() != null) {
+ TBigGiftPackage goods = JSON.parseObject(order.getBigGiftPackage(), TBigGiftPackage.class);
+ if (goods != null) {
+ vo.setGoodsName(goods.getName());
+ vo.setGoodsIntro(goods.getIntroduction());
+ vo.setGoodsCover(goods.getCoverImage());
+ vo.setGoodsPrice(goods.getTotalPrice());
+ }
+ }
+ return vo;
+ }
+
+ @Override
+ public boolean confirmPhysicalOrder(Integer orderId, Integer appUserId) {
+ TPhysicalGoodsOrder order = physicalGoodsOrderService.getById(orderId);
+ // 校验订单存在、归属、状态(2=完成支付才能确认收货)
+ if (order == null || !order.getAppUserId().equals(appUserId) || order.getStatus() != 2) {
+ return false;
+ }
+ order.setStatus(3); // 确认收货
+ order.setDeliveryTime(LocalDateTime.now());
+ return physicalGoodsOrderService.updateById(order);
+ }
+
+ @Override
+ public boolean confirmBigGiftOrder(Integer orderId, Integer appUserId) {
+ TBigGiftPackageOrder order = bigGiftPackageOrderService.getById(orderId);
+ // 校验订单存在、归属、状态(3=完成支付才能确认收货)
+ if (order == null || !order.getAppUserId().equals(appUserId) || order.getStatus() != 3) {
+ return false;
+ }
+ order.setStatus(4); // 确认收货
+ order.setDeliveryTime(LocalDateTime.now());
+ return bigGiftPackageOrderService.updateById(order);
+ }
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ICBCNotifyServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ICBCNotifyServiceImpl.java
index 4a2763f..c4175e2 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ICBCNotifyServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ICBCNotifyServiceImpl.java
@@ -11,15 +11,13 @@
import com.ruoyi.system.config.ICBCConfig;
import com.ruoyi.system.model.TBigGiftPackageOrder;
import com.ruoyi.system.model.TPhysicalGoodsOrder;
-import com.ruoyi.system.service.ICBCNotifyService;
-import com.ruoyi.system.service.TBigGiftPackageOrderService;
-import com.ruoyi.system.service.TCommissionTransactionFlowService;
-import com.ruoyi.system.service.TPhysicalGoodsOrderService;
+import com.ruoyi.system.service.*;
+import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
+import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
-import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@@ -36,19 +34,16 @@
*/
@Service
@Slf4j
+@RequiredArgsConstructor(onConstructor_ = @Lazy)
public class ICBCNotifyServiceImpl implements ICBCNotifyService {
- @Resource
- private ICBCConfig icbcConfig;
+ private final ICBCConfig icbcConfig;
- @Resource
- private TBigGiftPackageOrderService bigGiftPackageOrderService;
+ private final TBigGiftPackageOrderService bigGiftPackageOrderService;
- @Resource
- private TPhysicalGoodsOrderService physicalGoodsOrderService;
+ private final TPhysicalGoodsOrderService physicalGoodsOrderService;
- @Resource
- private TCommissionTransactionFlowService commissionTransactionFlowService;
+ private final TCommissionTransactionFlowService commissionTransactionFlowService;
@Override
@Transactional(rollbackFor = Exception.class)
@@ -217,14 +212,6 @@
physicalGoodsOrderService.updateById(order);
log.info("订单{}状态更新为完成支付", orderCode);
- // 实物商品支付完成后,立即计算分佣
- commissionTransactionFlowService.calculateAndSaveCommission(
- order.getId(),
- 2, // 订单类型:2=实物商品
- order.getOrderPrice(),
- order.getAppUserId()
- );
- log.info("订单{}分佣计算完成", orderCode);
} else {
log.error("订单{}【工商银行】实物商品支付失败,错误信息:{}", orderCode, bizContent.getString("return_msg"));
}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TCommissionTransactionFlowServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TCommissionTransactionFlowServiceImpl.java
index 9c1a94a..15fe997 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TCommissionTransactionFlowServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TCommissionTransactionFlowServiceImpl.java
@@ -1,18 +1,19 @@
package com.ruoyi.system.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.system.mapper.TCommissionTransactionFlowMapper;
import com.ruoyi.system.model.TAppUser;
import com.ruoyi.system.model.TCommissionTransactionFlow;
-import com.ruoyi.system.mapper.TCommissionTransactionFlowMapper;
import com.ruoyi.system.model.THtmlConfig;
import com.ruoyi.system.service.TAppUserService;
import com.ruoyi.system.service.TCommissionTransactionFlowService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.system.service.THtmlConfigService;
+import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
+import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
-import javax.annotation.Resource;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDateTime;
@@ -27,13 +28,12 @@
*/
@Slf4j
@Service
+@RequiredArgsConstructor(onConstructor_ = @Lazy)
public class TCommissionTransactionFlowServiceImpl extends ServiceImpl<TCommissionTransactionFlowMapper, TCommissionTransactionFlow> implements TCommissionTransactionFlowService {
- @Resource
- private TAppUserService appUserService;
+ private final TAppUserService appUserService;
- @Resource
- private THtmlConfigService htmlConfigService;
+ private final THtmlConfigService htmlConfigService;
@Override
public void calculateAndSaveCommission(Integer orderId, Integer orderType, BigDecimal orderPrice, Integer appUserId) {
@@ -202,6 +202,15 @@
save(flow);
log.info("保存佣金流水成功,用户ID:{},佣金金额:{}", userId, commissionAmount);
+
+ // 更新用户累计积分(佣金金额1:1转积分)
+ TAppUser user = appUserService.getById(userId);
+ if (user != null) {
+ int currentIntegral = user.getAccumulativeIntegral() != null ? user.getAccumulativeIntegral() : 0;
+ user.setAccumulativeIntegral(currentIntegral + commissionAmount.intValue());
+ appUserService.updateById(user);
+ log.info("更新用户累计积分成功,用户ID:{},新增积分:{},累计积分:{}", userId, commissionAmount.intValue(), user.getAccumulativeIntegral());
+ }
}
/**
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/AppletOrderDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/AppletOrderDetailVO.java
new file mode 100644
index 0000000..9f9e353
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/AppletOrderDetailVO.java
@@ -0,0 +1,81 @@
+package com.ruoyi.system.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * 小程序端订单详情VO
+ *
+ * @author mitao
+ * @since 2025-12-20
+ */
+@Data
+@ApiModel(value = "AppletOrderDetailVO", description = "小程序端订单详情VO")
+public class AppletOrderDetailVO {
+
+ // ========== 订单基础信息 ==========
+
+ @ApiModelProperty(value = "订单ID")
+ private Integer id;
+
+ @ApiModelProperty(value = "订单编号")
+ private String code;
+
+ @ApiModelProperty(value = "订单类型(1=大礼包,2=实物商品)")
+ private Integer orderType;
+
+ @ApiModelProperty(value = "订单状态")
+ private Integer status;
+
+ @ApiModelProperty(value = "下单时间")
+ private LocalDateTime createTime;
+
+ // ========== 商品信息(从JSON解析) ==========
+
+ @ApiModelProperty(value = "商品名称")
+ private String goodsName;
+
+ @ApiModelProperty(value = "商品简介")
+ private String goodsIntro;
+
+ @ApiModelProperty(value = "商品封面图")
+ private String goodsCover;
+
+ @ApiModelProperty(value = "商品总价")
+ private BigDecimal goodsPrice;
+
+ // ========== 金额信息 ==========
+
+ @ApiModelProperty(value = "订单价格")
+ private BigDecimal orderPrice;
+
+ @ApiModelProperty(value = "支付金额")
+ private BigDecimal paymentPrice;
+
+ @ApiModelProperty(value = "订金(大礼包)")
+ private BigDecimal deposit;
+
+ @ApiModelProperty(value = "尾款(大礼包)")
+ private BigDecimal finalPayment;
+
+ @ApiModelProperty(value = "支付方式(1=订金+尾款,2=全款)(大礼包)")
+ private Integer paymentType;
+
+ // ========== 时间信息 ==========
+
+ @ApiModelProperty(value = "付款时间(实物商品)")
+ private LocalDateTime paymentTime;
+
+ @ApiModelProperty(value = "订金付款时间(大礼包)")
+ private LocalDateTime depositTime;
+
+ @ApiModelProperty(value = "尾款付款时间(大礼包)")
+ private LocalDateTime finalPaymentTime;
+
+ @ApiModelProperty(value = "确认收货时间")
+ private LocalDateTime deliveryTime;
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/AppletOrderListVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/AppletOrderListVO.java
new file mode 100644
index 0000000..17c273d
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/AppletOrderListVO.java
@@ -0,0 +1,46 @@
+package com.ruoyi.system.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * 小程序端订单列表VO
+ *
+ * @author mitao
+ * @since 2025-12-20
+ */
+@Data
+@ApiModel(value = "AppletOrderListVO", description = "小程序端订单列表VO")
+public class AppletOrderListVO {
+
+ @ApiModelProperty(value = "订单ID")
+ private Integer id;
+
+ @ApiModelProperty(value = "订单编号")
+ private String code;
+
+ @ApiModelProperty(value = "商品名称")
+ private String goodsName;
+
+ @ApiModelProperty(value = "商品简介")
+ private String goodsIntro;
+
+ @ApiModelProperty(value = "商品封面图")
+ private String goodsCover;
+
+ @ApiModelProperty(value = "商品总价")
+ private BigDecimal goodsPrice;
+
+ @ApiModelProperty(value = "下单时间")
+ private LocalDateTime createTime;
+
+ @ApiModelProperty(value = "订单类型(1=大礼包,2=实物商品)")
+ private Integer orderType;
+
+ @ApiModelProperty(value = "订单状态(1=待支付,2=已付定金,3=已支付)")
+ private Integer status;
+}
diff --git a/ruoyi-system/src/main/resources/mapper/system/AppletOrderMapper.xml b/ruoyi-system/src/main/resources/mapper/system/AppletOrderMapper.xml
new file mode 100644
index 0000000..ec239c2
--- /dev/null
+++ b/ruoyi-system/src/main/resources/mapper/system/AppletOrderMapper.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.system.mapper.AppletOrderMapper">
+
+ <select id="selectOrderList" resultType="com.ruoyi.system.vo.AppletOrderListVO">
+ SELECT t.id, t.code, t.goodsName, t.goodsIntro, t.goodsCover, t.goodsPrice, t.createTime, t.orderType, t.status
+ FROM (
+ SELECT
+ o.id,
+ o.code,
+ JSON_UNQUOTE(JSON_EXTRACT(o.big_gift_package, '$.name')) AS goodsName,
+ JSON_UNQUOTE(JSON_EXTRACT(o.big_gift_package, '$.introduction')) AS goodsIntro,
+ JSON_UNQUOTE(JSON_EXTRACT(o.big_gift_package, '$.coverImage')) AS goodsCover,
+ JSON_UNQUOTE(JSON_EXTRACT(o.big_gift_package, '$.totalPrice')) AS goodsPrice,
+ o.create_time AS createTime,
+ 1 AS orderType,
+ o.status
+ FROM t_big_gift_package_order o
+ WHERE o.del_flag = 0 AND o.app_user_id = #{appUserId}
+
+ UNION ALL
+
+ SELECT
+ o.id,
+ o.code,
+ JSON_UNQUOTE(JSON_EXTRACT(o.physical_goods, '$.name')) AS goodsName,
+ JSON_UNQUOTE(JSON_EXTRACT(o.physical_goods, '$.introduction')) AS goodsIntro,
+ JSON_UNQUOTE(JSON_EXTRACT(o.physical_goods, '$.coverImage')) AS goodsCover,
+ JSON_UNQUOTE(JSON_EXTRACT(o.physical_goods, '$.totalPrice')) AS goodsPrice,
+ o.create_time AS createTime,
+ 2 AS orderType,
+ CASE WHEN o.status = 2 THEN 3 ELSE o.status END AS status
+ FROM t_physical_goods_order o
+ WHERE o.del_flag = 0 AND o.app_user_id = #{appUserId}
+ ) t
+ <where>
+ <if test="query.status != null">
+ <choose>
+ <when test="query.status == 3">
+ AND (t.status = 3 OR (t.orderType = 1 AND t.status = 4))
+ </when>
+ <otherwise>
+ AND t.status = #{query.status}
+ </otherwise>
+ </choose>
+ </if>
+ </where>
+ ORDER BY t.createTime DESC
+ </select>
+
+</mapper>
--
Gitblit v1.7.1