From 9f62bf8ddd5d67785fd42ba4247b2929b81d5623 Mon Sep 17 00:00:00 2001
From: Jack <46790855@qq.com>
Date: Sat, 27 Sep 2025 12:16:46 +0800
Subject: [PATCH 01/22] =?UTF-8?q?=E6=8B=89=E5=8D=A1=E6=8B=89=E5=88=86?=
=?UTF-8?q?=E8=B4=A6=E5=BC=82=E6=AD=A5=E9=80=9A=E7=9F=A5=E5=A4=84=EF=BC=8C?=
=?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BA=86=E6=8F=90=E7=8E=B0=E6=B5=81=E7=A8=8B?=
=?UTF-8?q?=E3=80=82?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../quartz/job/UpdateOrderSeparateJob.java | 2 +-
.../admin/LakalaAdminController.java | 2 +-
.../shop/lakala/service/LakalaApiService.java | 5 +-
.../service/impl/LakalaApiServiceImpl.java | 59 +++++++++++--------
4 files changed, 39 insertions(+), 29 deletions(-)
diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/components/quartz/job/UpdateOrderSeparateJob.java b/mall-shop/src/main/java/com/suisung/mall/shop/components/quartz/job/UpdateOrderSeparateJob.java
index ccaf0825..8fea6e7c 100644
--- a/mall-shop/src/main/java/com/suisung/mall/shop/components/quartz/job/UpdateOrderSeparateJob.java
+++ b/mall-shop/src/main/java/com/suisung/mall/shop/components/quartz/job/UpdateOrderSeparateJob.java
@@ -27,7 +27,7 @@ public class UpdateOrderSeparateJob extends QuartzJobBean {
return;
}
- Integer processedCount = lakalaApiService.fixedUnSuccessSeparateStatusJob();
+ Integer processedCount = lakalaApiService.fixUnSuccessSeparateStatusJob();
logger.info("[分账状态修复定时任务] 执行完成,共处理 {} 条记录", processedCount);
} catch (Exception e) {
diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/controller/admin/LakalaAdminController.java b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/controller/admin/LakalaAdminController.java
index 1eb0afe7..f1da4113 100644
--- a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/controller/admin/LakalaAdminController.java
+++ b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/controller/admin/LakalaAdminController.java
@@ -49,7 +49,7 @@ public class LakalaAdminController extends BaseControllerImpl {
}
// 执行业务逻辑
- Boolean success = lakalaPayService.ewalletWithDrawD1(paramsJSON.getStr("mercId"), paramsJSON.getStr("merOrderNo"), paramsJSON.getStr("drawAmt"), paramsJSON.getStr("remark"), paramsJSON.getStr("summary"));
+ Boolean success = lakalaPayService.ewalletWithDrawD1(paramsJSON.getStr("mercId"), paramsJSON.getStr("merOrderNo"), paramsJSON.getStr("drawAmt"), paramsJSON.getStr("summary"));
if (success) {
return CommonResult.success("账户D1提现提交成功");
}
diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/LakalaApiService.java b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/LakalaApiService.java
index 49366084..6f12006b 100644
--- a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/LakalaApiService.java
+++ b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/LakalaApiService.java
@@ -299,7 +299,7 @@ public interface LakalaApiService {
*
* @return
*/
- Integer fixedUnSuccessSeparateStatusJob();
+ Integer fixUnSuccessSeparateStatusJob();
/**
* 检测修复补全商户的商户分账业务信息及分账接收方绑定关系(分账业务申请异步通知的补偿机制)
@@ -337,10 +337,9 @@ public interface LakalaApiService {
* @param mercId 822商户号或receiveNo
* @param merOrderNo 商户订单号
* @param drawAmt 提现金额(分)
- * @param remark
* @param summary
*/
- Boolean ewalletWithDrawD1(String mercId, String merOrderNo, String drawAmt, String remark, String summary);
+ Boolean ewalletWithDrawD1(String mercId, String merOrderNo, String drawAmt, String summary);
/**
* 拉卡拉账户D1提现结果通知
diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LakalaApiServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LakalaApiServiceImpl.java
index 70dea245..ab640bfc 100644
--- a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LakalaApiServiceImpl.java
+++ b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LakalaApiServiceImpl.java
@@ -2693,13 +2693,14 @@ public class LakalaApiServiceImpl implements LakalaApiService {
* 参考文档:https://o.lakala.com/#/home/document/detail?id=393
*
*
- * @param request
+ * @param request HTTP请求对象,包含拉卡拉分账结果通知的参数
* @param merchantNoParam 分账方商户号,非空表示是事后补偿
* @param separateNoParam 分账指令流水号,非空表示是事后补偿
- *
- * - 成功: {"code": "SUCCESS", "message": "操作成功"}
- * - 失败: {"code": "FAIL", "message": "错误信息"}
- *
+ * @return 处理结果JSON对象
+ *
+ * - 成功: {"code": "SUCCESS", "message": "操作成功"}
+ * - 失败: {"code": "FAIL", "message": "错误信息"}
+ *
*/
@Override
public JSONObject sacsSeparateNotify(HttpServletRequest request, String merchantNoParam, String separateNoParam) {
@@ -2708,7 +2709,8 @@ public class LakalaApiServiceImpl implements LakalaApiService {
JSONObject paramsJson = null;
if (!StrUtil.hasBlank(merchantNoParam, separateNoParam)) {
channel = "(补偿)";
- log.info("[拉卡拉分账通知] 开始处理拉卡拉分账结果通知异步回调 merchantNoParam={},separateNoParam={}" + channel, merchantNoParam, separateNoParam);
+ log.info("[拉卡拉分账通知] 开始处理拉卡拉分账结果通知异步回调{},merchantNoParam={},separateNoParam={}",
+ channel, merchantNoParam, separateNoParam);
paramsJson = sacsQuery(merchantNoParam, separateNoParam);
} else {
log.info("[拉卡拉分账通知] 开始处理拉卡拉分账结果通知异步回调");
@@ -2742,15 +2744,15 @@ public class LakalaApiServiceImpl implements LakalaApiService {
String status = paramsJson.getStr("status");
String finalStatus = paramsJson.getStr("final_status");
- // 必要参数
+ // 必要参数校验
List missingParams = new ArrayList<>();
if (StrUtil.isBlank(outSeparateNo)) missingParams.add("outSeparateNo");
if (StrUtil.isBlank(separateNo)) missingParams.add("separateNo");
if (StrUtil.isBlank(status)) missingParams.add("status");
if (!missingParams.isEmpty()) {
- String errorMsg = "分账通知缺少必要参数" + channel + String.join(", ", missingParams);
- log.error("[拉卡拉分账通知] {} {},参数详情: {}", channel, errorMsg, paramsJson);
+ String errorMsg = "分账通知缺少必要参数" + channel + ": " + String.join(", ", missingParams);
+ log.error("[拉卡拉分账通知] {},参数详情: {}", errorMsg, paramsJson);
return JSONUtil.createObj()
.put("code", "FAIL")
.put("message", errorMsg);
@@ -2761,7 +2763,7 @@ public class LakalaApiServiceImpl implements LakalaApiService {
if (lklOrderSeparateExist == null) {
String errorMsg = "未找到对应的分账记录" + channel;
log.error("[拉卡拉分账通知] {},外部分账单号={},分账单号={},参数详情: {}",
- errorMsg, outSeparateNo, separateNoParam, paramsJson);
+ errorMsg, outSeparateNo, separateNo, paramsJson);
return JSONUtil.createObj()
.put("code", "FAIL")
.put("message", errorMsg);
@@ -2779,8 +2781,8 @@ public class LakalaApiServiceImpl implements LakalaApiService {
}
// 6. 记录关键参数信息,便于问题排查
- log.info("[拉卡拉分账通知] 接收到分账通知,分账单号={},外部分账单号={},状态={},最终状态={}" + channel,
- separateNo, outSeparateNo, status, finalStatus);
+ log.info("[拉卡拉分账通知] 接收到分账通知{},分账单号={},外部分账单号={},状态={},最终状态={}",
+ channel, separateNo, outSeparateNo, status, finalStatus);
// 7. 构建分账记录对象 - 准备更新数据库的分账记录
LklOrderSeparate lklOrderSeparate = new LklOrderSeparate();
@@ -2819,14 +2821,25 @@ public class LakalaApiServiceImpl implements LakalaApiService {
// 更改分账状态:分账成功
shopOrderLklService.updateSeparateStatusByReceiveLogNo(logNo, CommonConstant.Sta_Separate_Success, "");
+ // RMK 本次分账成功后,给商户和接收方 D1提现到银行卡
+ if (CollUtil.isNotEmpty(detailDatas)) {
+ for (JSONObject detailData : detailDatas.jsonIter()) {
+ String recvNo = detailData.getStr("recv_no"); // 822商户号或接收方号
+ String amt = detailData.getStr("amt"); // 单位(分)
+ if (StrUtil.isNotBlank(recvNo) && StrUtil.isNotBlank(amt)) {
+ ewalletWithDrawD1(recvNo, outSeparateNo, amt, JSONUtil.toJsonStr(detailDatas));
+ }
+ }
+ }
+
// 9. 记录处理成功日志
- log.info("[拉卡拉分账通知] 分账通知处理成功, separateNo={}, status={}" + channel, separateNo, status);
+ log.info("[拉卡拉分账通知] 分账通知处理成功{},separateNo={},status={}", channel, separateNo, status);
return JSONUtil.createObj()
.put("code", "SUCCESS")
.put("message", "操作成功");
} catch (Exception e) {
// 10. 异常处理
- String errorMsg = String.format("分账通知数据处理异常: %s" + channel, e.getMessage());
+ String errorMsg = String.format("分账通知数据处理异常: %s%s", e.getMessage(), channel);
log.error("[拉卡拉分账通知] {}", errorMsg, e);
return JSONUtil.createObj()
.put("code", "FAIL")
@@ -2920,15 +2933,15 @@ public class LakalaApiServiceImpl implements LakalaApiService {
* @return 成功处理的记录数量
*/
@Override
- public Integer fixedUnSuccessSeparateStatusJob() {
+ public Integer fixUnSuccessSeparateStatusJob() {
log.info("[分账状态修复任务] 开始执行未成功分账记录的状态修复任务");
- // 获取3天前分账状态未成功的记录
+ // 获取2天前分账状态未成功的记录
Date now = new Date();
- Date threeDaysAgo = DateUtils.addHours(now, -72);
+ Date threeDaysAgo = DateUtils.addHours(now, -48);
// 分页参数
- int pageSize = 100;
+ int pageSize = 200;
int currentPage = 1;
int totalSuccessCount = 0;
int totalProcessed = 0;
@@ -3384,12 +3397,11 @@ public class LakalaApiServiceImpl implements LakalaApiService {
* @param mercId 822商户号或receiveNo
* @param merOrderNo 商户订单号
* @param drawAmt 提现金额(分)
- * @param remark 备注信息
* @param summary 摘要信息
* @return 操作结果,成功返回true,失败返回false
*/
@Override
- public Boolean ewalletWithDrawD1(String mercId, String merOrderNo, String drawAmt, String remark, String summary) {
+ public Boolean ewalletWithDrawD1(String mercId, String merOrderNo, String drawAmt, String summary) {
// 1. 参数校验
if (StrUtil.hasBlank(mercId, merOrderNo, drawAmt)) {
log.warn("[D1提现申请] D1提现参数校验失败,关键参数为空: mercId={}, merOrderNo={}, drawAmt={}",
@@ -3399,8 +3411,10 @@ public class LakalaApiServiceImpl implements LakalaApiService {
// 账号类型(01:收款账户,04:分账接收方账户)
String payType = "04";
+ String payTypeStr = "接收方账户04";
if (StrUtil.startWith(mercId, "822")) {
payType = "01";
+ payTypeStr = "收款账户01";
}
try {
@@ -3411,10 +3425,7 @@ public class LakalaApiServiceImpl implements LakalaApiService {
return false;
}
- // 设置默认值
- if (StrUtil.isBlank(remark)) {
- remark = String.format("商户订单:%s 账号类型:%s 分账后立即提现", merOrderNo, payType);
- }
+ String remark = String.format("订单:%s %s 分账后立即提现", merOrderNo, payTypeStr);
log.info("[D1提现申请] 开始处理D1提现,商户号={},订单号={},提现金额={}分", mercId, merOrderNo, drawAmt);
From f16efdd8b9fe595d911f411b6b0b08b3b085fe36 Mon Sep 17 00:00:00 2001
From: Jack <46790855@qq.com>
Date: Sat, 27 Sep 2025 12:27:31 +0800
Subject: [PATCH 02/22] =?UTF-8?q?=E6=9C=89=E6=96=B0=E8=AE=A2=E5=8D=95?=
=?UTF-8?q?=E7=9A=84=E6=97=B6=E5=80=99=EF=BC=8C=E4=B8=8D=E7=BB=99=E5=95=86?=
=?UTF-8?q?=E5=AE=B6=E5=8F=91=E7=9F=AD=E4=BF=A1=E4=BA=86=EF=BC=8C=E9=81=BF?=
=?UTF-8?q?=E5=85=8D=E6=89=93=E6=89=B0=E5=95=86=E5=AE=B6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../lakala/service/impl/LakalaApiServiceImpl.java | 8 +++++---
.../order/service/impl/ShopOrderBaseServiceImpl.java | 12 ++++++------
2 files changed, 11 insertions(+), 9 deletions(-)
diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LakalaApiServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LakalaApiServiceImpl.java
index ab640bfc..78ddc55d 100644
--- a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LakalaApiServiceImpl.java
+++ b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LakalaApiServiceImpl.java
@@ -2824,10 +2824,12 @@ public class LakalaApiServiceImpl implements LakalaApiService {
// RMK 本次分账成功后,给商户和接收方 D1提现到银行卡
if (CollUtil.isNotEmpty(detailDatas)) {
for (JSONObject detailData : detailDatas.jsonIter()) {
- String recvNo = detailData.getStr("recv_no"); // 822商户号或接收方号
- String amt = detailData.getStr("amt"); // 单位(分)
+ String recvNo = detailData.getStr("recv_no");
+ String amt = detailData.getStr("amt");
if (StrUtil.isNotBlank(recvNo) && StrUtil.isNotBlank(amt)) {
- ewalletWithDrawD1(recvNo, outSeparateNo, amt, JSONUtil.toJsonStr(detailDatas));
+ Boolean drawSuccess = ewalletWithDrawD1(recvNo, outSeparateNo, amt, JSONUtil.toJsonStr(detailDatas));
+ log.info("[拉卡拉分账通知] 账户D1提现{},商户号={},分账单号={},金额={}分",
+ Boolean.TRUE.equals(drawSuccess) ? "成功" : "失败", recvNo, outSeparateNo, amt);
}
}
}
diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/order/service/impl/ShopOrderBaseServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/order/service/impl/ShopOrderBaseServiceImpl.java
index 6812c641..fc71150d 100644
--- a/mall-shop/src/main/java/com/suisung/mall/shop/order/service/impl/ShopOrderBaseServiceImpl.java
+++ b/mall-shop/src/main/java/com/suisung/mall/shop/order/service/impl/ShopOrderBaseServiceImpl.java
@@ -3236,11 +3236,11 @@ public class ShopOrderBaseServiceImpl extends BaseServiceImpl tmplArgs = new HashMap<>(2);
- tmplArgs.put("order_id", order_id);
- tmplArgs.put("order_payment_amount", order_payment_amount);
+ // Map tmplArgs = new HashMap<>(2);
+ // tmplArgs.put("order_id", order_id);
+ // tmplArgs.put("order_payment_amount", order_payment_amount);
// 所有店铺管理员的发送邮件, 提醒商家:您有一笔新的订单 ${order_id},请及时处理。
- shopMessageTemplateService.aliyunSmsSend(shopKeeperMobiles, "SMS_476810378", tmplArgs);//SMS_475836097
+ // shopMessageTemplateService.aliyunSmsSend(shopKeeperMobiles, "SMS_476810378", tmplArgs);
}
// 付款成功,对通知推广员进行提醒
@@ -4220,7 +4220,7 @@ public class ShopOrderBaseServiceImpl extends BaseServiceImpl stockDeltaMap = new HashMap<>();
stockDeltaMap.put(Convert.toStr(shopProductItem.getItem_src_id()), order_item_quantity);
@@ -7234,7 +7234,7 @@ public class ShopOrderBaseServiceImpl extends BaseServiceImpl stockDeltaMap = new HashMap<>();
stockDeltaMap.put(Convert.toStr(item_src_id), -cart_quantity);
syncThirdDataService.incrProductStockToRedis(stockDeltaMap);
From 1d7234300442f926e03e32d5fc8b31988026f9c9 Mon Sep 17 00:00:00 2001
From: liyj <1617420630@qq.com>
Date: Sat, 27 Sep 2025 15:28:55 +0800
Subject: [PATCH 03/22] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=AC=A1=E6=97=A5?=
=?UTF-8?q?=E8=A1=A5=E5=85=A8=E5=8A=9F=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../modules/product/ShopProductItem.java | 4 ++
.../quartz/job/ProductItemAutoFillJob.java | 53 +++++++++++++++++++
.../impl/ShopProductBaseServiceImpl.java | 13 +++++
sql/shop/dev/20250927_ddl.sql | 3 ++
4 files changed, 73 insertions(+)
create mode 100644 mall-shop/src/main/java/com/suisung/mall/shop/components/quartz/job/ProductItemAutoFillJob.java
create mode 100644 sql/shop/dev/20250927_ddl.sql
diff --git a/mall-common/src/main/java/com/suisung/mall/common/modules/product/ShopProductItem.java b/mall-common/src/main/java/com/suisung/mall/common/modules/product/ShopProductItem.java
index bb6508b8..d0105d68 100644
--- a/mall-common/src/main/java/com/suisung/mall/common/modules/product/ShopProductItem.java
+++ b/mall-common/src/main/java/com/suisung/mall/common/modules/product/ShopProductItem.java
@@ -183,5 +183,9 @@ public class ShopProductItem implements Serializable {
@TableField(exist=false)
private String mergedUnitPrices;
+ @ApiModelProperty(value = "次日自动补满至")
+ private Integer automatic;
+ @ApiModelProperty(value = "是否开启次日补全1开启,0不开启")
+ private String is_open_automatic;
}
diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/components/quartz/job/ProductItemAutoFillJob.java b/mall-shop/src/main/java/com/suisung/mall/shop/components/quartz/job/ProductItemAutoFillJob.java
new file mode 100644
index 00000000..404f7a3f
--- /dev/null
+++ b/mall-shop/src/main/java/com/suisung/mall/shop/components/quartz/job/ProductItemAutoFillJob.java
@@ -0,0 +1,53 @@
+package com.suisung.mall.shop.components.quartz.job;
+
+
+import cn.hutool.core.util.PageUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+
+import com.suisung.mall.common.modules.product.ShopProductItem;
+import com.suisung.mall.shop.config.SpringUtil;
+import com.suisung.mall.shop.product.service.ShopProductItemService;
+import org.quartz.JobExecutionContext;
+import org.quartz.JobExecutionException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.scheduling.quartz.QuartzJobBean;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 任务:用于次日更新商品的库存
+ */
+public class ProductItemAutoFillJob extends QuartzJobBean {
+ @Override
+ protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {
+ Logger logger = LoggerFactory.getLogger(ProductItemAutoFillJob.class);
+ logger.info("次日更新商品库存开始");
+ ShopProductItemService shopProductItemService= SpringUtil.getBean(ShopProductItemService.class);
+ long startTime = System.nanoTime();
+ // 更新商品库存
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ queryWrapper.eq("is_open_automatic","1");
+ queryWrapper.apply("item_quantity queryWrapper2 = new QueryWrapper<>();
+ queryWrapper2.eq("is_open_automatic","1");
+ queryWrapper2.apply("item_quantity pageShopProductItem=shopProductItemService.lists(queryWrapper2,i, batchSize);
+ List shopProductItems= pageShopProductItem.getRecords();
+ shopProductItems= shopProductItems.stream()
+ .peek(shopProductItem -> shopProductItem.setItem_quantity(shopProductItem.getAutomatic()))
+ .collect(Collectors.toList());
+ shopProductItemService.updateBatchById(shopProductItems);
+ }
+
+ long endTime = System.nanoTime();
+ long duration = (endTime - startTime);
+ logger.info("更新商品库存结束,总共更新商品数量:{},耗时{}",total,duration / 1000000000);
+ }
+}
diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/product/service/impl/ShopProductBaseServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/product/service/impl/ShopProductBaseServiceImpl.java
index 72572971..1eeb211a 100644
--- a/mall-shop/src/main/java/com/suisung/mall/shop/product/service/impl/ShopProductBaseServiceImpl.java
+++ b/mall-shop/src/main/java/com/suisung/mall/shop/product/service/impl/ShopProductBaseServiceImpl.java
@@ -25,6 +25,7 @@ import com.suisung.mall.common.constant.CommonConstant;
import com.suisung.mall.common.constant.ConfigConstant;
import com.suisung.mall.common.constant.MqConstant;
import com.suisung.mall.common.domain.UserDto;
+import com.suisung.mall.common.enums.DicEnum;
import com.suisung.mall.common.exception.ApiException;
import com.suisung.mall.common.feignService.EduService;
import com.suisung.mall.common.feignService.SearchService;
@@ -480,6 +481,18 @@ public class ShopProductBaseServiceImpl extends BaseServiceImpl item_image_other = Convert.toList(String.class, productItemMap.get("color_img"));
diff --git a/sql/shop/dev/20250927_ddl.sql b/sql/shop/dev/20250927_ddl.sql
new file mode 100644
index 00000000..ff68d04b
--- /dev/null
+++ b/sql/shop/dev/20250927_ddl.sql
@@ -0,0 +1,3 @@
+alter table shop_product_item add automatic INTEGER DEFAULT NULL COMMENT '次日自动补满至';
+alter table shop_product_item add is_open_automatic varchar(1) not null DEFAULT '0' COMMENT '是否开启次日补全1开启,0不开启';
+alter table shop_product_item add index `index_is_open_automatic` (`is_open_automatic`) USING BTREE;
\ No newline at end of file
From 43f88175cda1f4139ef636e9101b7aae00ce8f95 Mon Sep 17 00:00:00 2001
From: liyj <1617420630@qq.com>
Date: Sat, 27 Sep 2025 17:16:34 +0800
Subject: [PATCH 04/22] =?UTF-8?q?shop=5Fbase=E9=98=B2=E6=AD=A2=E7=A9=BA?=
=?UTF-8?q?=E4=BF=AE=E6=94=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../com/suisung/mall/common/modules/store/ShopStoreBase.java | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/mall-common/src/main/java/com/suisung/mall/common/modules/store/ShopStoreBase.java b/mall-common/src/main/java/com/suisung/mall/common/modules/store/ShopStoreBase.java
index 17a6c8cf..8b1b0ef9 100644
--- a/mall-common/src/main/java/com/suisung/mall/common/modules/store/ShopStoreBase.java
+++ b/mall-common/src/main/java/com/suisung/mall/common/modules/store/ShopStoreBase.java
@@ -1,8 +1,6 @@
package com.suisung.mall.common.modules.store;
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@@ -58,6 +56,7 @@ public class ShopStoreBase implements Serializable {
private String store_area;
@ApiModelProperty(value = "所属地区(DOT)")
+ @TableField(updateStrategy = FieldStrategy.NOT_EMPTY)
private String store_district_id;
@ApiModelProperty(value = "店铺详细地址")
From 77fdb2727557a6ed304c41617fa956d788f9bd3f Mon Sep 17 00:00:00 2001
From: liyj <1617420630@qq.com>
Date: Sat, 27 Sep 2025 18:16:05 +0800
Subject: [PATCH 05/22] =?UTF-8?q?=E8=BF=87=E6=BB=A4=E4=B8=8D=E6=98=BE?=
=?UTF-8?q?=E7=A4=BA=E7=9A=84=E5=BA=97=E9=93=BA=E5=88=86=E7=B1=BB?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../base/service/impl/ShopBaseStoreCategoryServiceImpl.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/base/service/impl/ShopBaseStoreCategoryServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/base/service/impl/ShopBaseStoreCategoryServiceImpl.java
index cce836ee..2ac3ad33 100644
--- a/mall-shop/src/main/java/com/suisung/mall/shop/base/service/impl/ShopBaseStoreCategoryServiceImpl.java
+++ b/mall-shop/src/main/java/com/suisung/mall/shop/base/service/impl/ShopBaseStoreCategoryServiceImpl.java
@@ -65,8 +65,8 @@ public class ShopBaseStoreCategoryServiceImpl extends BaseServiceImpl
Date: Sat, 27 Sep 2025 19:18:41 +0800
Subject: [PATCH 06/22] =?UTF-8?q?=E5=BA=97=E9=93=BA=E6=8C=89=E5=AD=90?=
=?UTF-8?q?=E7=B1=BB=E6=9F=A5=E8=AF=A2?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../store/service/impl/ShopStoreBaseServiceImpl.java | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStoreBaseServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStoreBaseServiceImpl.java
index 6250405a..53d8eb7a 100644
--- a/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStoreBaseServiceImpl.java
+++ b/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStoreBaseServiceImpl.java
@@ -790,9 +790,15 @@ public class ShopStoreBaseServiceImpl extends BaseServiceImpl 1) {
- queryWrapper.in("store_category_id", store_category_ids);
+ queryWrapper.and(q->{
+ q.in("store_category_id",store_category_ids);
+ q.or().in("store_2nd_category_id",store_category_ids);
+ });
} else {
- queryWrapper.eq("store_category_id", store_category_id);
+ queryWrapper.or(q->{
+ q.eq("store_category_id",store_category_ids);
+ q.or().eq("store_2nd_category_id",store_category_ids);
+ });
}
params.put("store_category_id", store_category_id);
}
From 22cfe81958b314c9dcdd8cb089840b2352a637ee Mon Sep 17 00:00:00 2001
From: Jack <46790855@qq.com>
Date: Sat, 27 Sep 2025 19:35:22 +0800
Subject: [PATCH 07/22] =?UTF-8?q?=E5=BA=97=E9=93=BA=E5=85=B3=E9=94=AE?=
=?UTF-8?q?=E5=AD=97=E6=AE=B5=EF=BC=8C=E5=90=8C=E6=AD=A5=E9=9C=80=E8=A6=81?=
=?UTF-8?q?=E6=9D=A1=E4=BB=B6=E6=89=8D=E6=9B=B4=E6=96=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../impl/ShopStoreBaseServiceImpl.java | 23 ++++--
.../controller/WxOrderShippingController.java | 23 ++++++
.../service/WxOrderShippingService.java | 7 ++
.../impl/WxOrderShippingServiceImpl.java | 70 ++++++++++++++++++-
4 files changed, 113 insertions(+), 10 deletions(-)
diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStoreBaseServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStoreBaseServiceImpl.java
index 6250405a..08b8836f 100644
--- a/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStoreBaseServiceImpl.java
+++ b/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStoreBaseServiceImpl.java
@@ -3199,18 +3199,27 @@ public class ShopStoreBaseServiceImpl extends BaseServiceImpl result = wxOrderShippingService.updateOrderDetailPath(params.getStr("path"));
+ if (!result.getFirst()) {
+ throw new ApiException(result.getSecond());
+ }
+ return CommonResult.success();
+ }
}
diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/wechat/service/WxOrderShippingService.java b/mall-shop/src/main/java/com/suisung/mall/shop/wechat/service/WxOrderShippingService.java
index 76db7a99..8f996fe5 100644
--- a/mall-shop/src/main/java/com/suisung/mall/shop/wechat/service/WxOrderShippingService.java
+++ b/mall-shop/src/main/java/com/suisung/mall/shop/wechat/service/WxOrderShippingService.java
@@ -30,4 +30,11 @@ public interface WxOrderShippingService {
* @return 返回确认收货结果,包含成功状态和错误消息
*/
Pair notifyConfirmReceive(String orderId);
+
+
+ /**
+ * 配置订单详情路径
+ * 参考:https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/business-capabilities/order_center/order_center.html
+ */
+ Pair updateOrderDetailPath(String orderId);
}
diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/wechat/service/impl/WxOrderShippingServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/wechat/service/impl/WxOrderShippingServiceImpl.java
index 4c3e2369..72fe8e24 100644
--- a/mall-shop/src/main/java/com/suisung/mall/shop/wechat/service/impl/WxOrderShippingServiceImpl.java
+++ b/mall-shop/src/main/java/com/suisung/mall/shop/wechat/service/impl/WxOrderShippingServiceImpl.java
@@ -33,22 +33,23 @@ import org.springframework.web.client.HttpClientErrorException;
import java.util.Date;
+/**
+ * 对接微信订单管理相关接口
+ */
@Slf4j
@Service
public class WxOrderShippingServiceImpl implements WxOrderShippingService {
+ private final String ORDER_DETAIL_PATH = "https://api.weixin.qq.com/wxa/business/shipping";
@Lazy
@Autowired
private WxUtil wxUtil;
-
@Lazy
@Autowired
private ShopOrderBaseService shopOrderBaseService;
-
@Lazy
@Autowired
private ShopStoreSfOrderService shopStoreSfOrderService;
-
@Lazy
@Autowired
private ShopOrderLogisticsService shopOrderLogisticsService;
@@ -241,4 +242,67 @@ public class WxOrderShippingServiceImpl implements WxOrderShippingService {
return Pair.of(false, "通知微信确认收货失败: " + e.getMessage());
}
}
+
+ /**
+ * 配置订单详情路径
+ * 参考:https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/business-capabilities/order_center/order_center.html
+ *
+ * @param path 订单详情页面路径
+ * @return 配置结果,包含成功状态和错误消息
+ */
+ @Override
+ public Pair updateOrderDetailPath(String path) {
+ log.debug("开始配置订单详情路径,路径: {}", path);
+ if (StrUtil.isBlank(path)) {
+ log.warn("订单详情路径为空,默认:{}", ORDER_DETAIL_PATH);
+// return Pair.of(false, "详情路径 path 不能为空");
+ path = ORDER_DETAIL_PATH;
+ }
+
+ try {
+ // 获取微信访问令牌
+ String accessToken = wxUtil.getAccessToken();
+ if (StrUtil.isBlank(accessToken)) {
+ log.error("获取AccessToken失败");
+ return Pair.of(false, "获取AccessToken失败");
+ }
+
+ // 构造请求参数
+ JSONObject paramsJSON = new JSONObject()
+ .set("path", String.format("%s?on=${商品订单号}", path));
+
+ // 构造请求URL
+ String postUrl = "https://api.weixin.qq.com/wxa/sec/order/update_order_detail_path?access_token=" + accessToken;
+ log.debug("配置订单详情路径请求: {} \n {}", postUrl, paramsJSON);
+
+ // 发送请求到微信API
+ JSONObject respObj = RestTemplateHttpUtil.sendPost(
+ postUrl,
+ null, paramsJSON, JSONObject.class
+ );
+
+ // 处理响应结果
+ if (respObj == null) {
+ log.error("配置订单详情路径失败,返回结果为空");
+ return Pair.of(false, "配置订单详情路径失败,返回结果为空");
+ }
+
+ int errCode = respObj.getInt("errcode", -1);
+ if (errCode != 0) {
+ String errorMsg = respObj.getStr("errmsg", "未知错误");
+ log.error("配置订单详情路径失败,错误码: {}, 错误信息: {}", errCode, errorMsg);
+ return Pair.of(false, "配置订单详情路径失败: " + errorMsg);
+ }
+
+ log.info("配置订单详情路径成功,路径: {}", path);
+ return Pair.of(true, "配置订单详情路径成功");
+
+ } catch (HttpClientErrorException e) {
+ log.error("HTTP请求错误,状态码: {}, 错误信息: {}", e.getStatusCode(), e.getMessage(), e);
+ return Pair.of(false, "HTTP请求错误: " + e.getMessage());
+ } catch (Exception e) {
+ log.error("配置订单详情路径失败,错误信息: {}", e.getMessage(), e);
+ return Pair.of(false, "配置订单详情路径失败: " + e.getMessage());
+ }
+ }
}
From 62b5d71b3be4c704d1c2f0f27f4944542603faf8 Mon Sep 17 00:00:00 2001
From: Jack <46790855@qq.com>
Date: Sat, 27 Sep 2025 21:09:53 +0800
Subject: [PATCH 08/22] =?UTF-8?q?=E9=80=9A=E7=9F=A5=E6=B6=88=E6=81=AF=20?=
=?UTF-8?q?=E8=B7=B3=E8=BD=AC=20=E6=8E=A5=E5=8F=A3=E5=AF=B9=E6=8E=A5?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../controller/WxOrderShippingController.java | 2 +-
.../service/WxOrderShippingService.java | 17 +++-
.../impl/WxOrderShippingServiceImpl.java | 91 +++++++++++++++++--
3 files changed, 102 insertions(+), 8 deletions(-)
diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/wechat/controller/WxOrderShippingController.java b/mall-shop/src/main/java/com/suisung/mall/shop/wechat/controller/WxOrderShippingController.java
index a5e897c0..889de78f 100644
--- a/mall-shop/src/main/java/com/suisung/mall/shop/wechat/controller/WxOrderShippingController.java
+++ b/mall-shop/src/main/java/com/suisung/mall/shop/wechat/controller/WxOrderShippingController.java
@@ -40,6 +40,6 @@ public class WxOrderShippingController {
if (!result.getFirst()) {
throw new ApiException(result.getSecond());
}
- return CommonResult.success();
+ return CommonResult.success(result.getSecond());
}
}
diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/wechat/service/WxOrderShippingService.java b/mall-shop/src/main/java/com/suisung/mall/shop/wechat/service/WxOrderShippingService.java
index 8f996fe5..b31dacc7 100644
--- a/mall-shop/src/main/java/com/suisung/mall/shop/wechat/service/WxOrderShippingService.java
+++ b/mall-shop/src/main/java/com/suisung/mall/shop/wechat/service/WxOrderShippingService.java
@@ -36,5 +36,20 @@ public interface WxOrderShippingService {
* 配置订单详情路径
* 参考:https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/business-capabilities/order_center/order_center.html
*/
- Pair updateOrderDetailPath(String orderId);
+ /**
+ * 更新订单详情路径
+ * 参考:https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/business-capabilities/order_center/order_center.html
+ *
+ * @param path 包括参数名=${商品订单号}
+ * @return
+ */
+ Pair updateOrderDetailPath(String path);
+
+ /**
+ * 消息跳转路径设置接口
+ *
+ * @param orderId 订单号
+ * @return
+ */
+ Pair setMsgJumpPath(String orderId);
}
diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/wechat/service/impl/WxOrderShippingServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/wechat/service/impl/WxOrderShippingServiceImpl.java
index 72fe8e24..dbecf5e4 100644
--- a/mall-shop/src/main/java/com/suisung/mall/shop/wechat/service/impl/WxOrderShippingServiceImpl.java
+++ b/mall-shop/src/main/java/com/suisung/mall/shop/wechat/service/impl/WxOrderShippingServiceImpl.java
@@ -40,7 +40,8 @@ import java.util.Date;
@Service
public class WxOrderShippingServiceImpl implements WxOrderShippingService {
- private final String ORDER_DETAIL_PATH = "https://api.weixin.qq.com/wxa/business/shipping";
+ private final String ORDER_DETAIL_PATH = "member/order/detail";
+
@Lazy
@Autowired
private WxUtil wxUtil;
@@ -160,6 +161,9 @@ public class WxOrderShippingServiceImpl implements WxOrderShippingService {
return Pair.of(false, "发货信息录入失败: " + errorMsg);
}
+ // 跳转链接设置
+ setMsgJumpPath(orderId);
+
log.info("发货信息录入成功, 订单ID: {}", orderId);
return Pair.of(true, "发货信息录入成功");
@@ -231,6 +235,10 @@ public class WxOrderShippingServiceImpl implements WxOrderShippingService {
return Pair.of(false, "通知微信用户确认收货失败: " + errorMsg);
}
+ // 跳转链接设置
+ setMsgJumpPath(orderId);
+
+
log.info("通知微信用户确认收货成功, 订单ID: {}", orderId);
return Pair.of(true, "通知微信用户确认收货成功");
@@ -254,9 +262,8 @@ public class WxOrderShippingServiceImpl implements WxOrderShippingService {
public Pair updateOrderDetailPath(String path) {
log.debug("开始配置订单详情路径,路径: {}", path);
if (StrUtil.isBlank(path)) {
- log.warn("订单详情路径为空,默认:{}", ORDER_DETAIL_PATH);
-// return Pair.of(false, "详情路径 path 不能为空");
- path = ORDER_DETAIL_PATH;
+ path = String.format("%s?on=${商品订单号}", ORDER_DETAIL_PATH);
+ log.warn("订单详情路径为空,默认:{}", path);
}
try {
@@ -267,9 +274,13 @@ public class WxOrderShippingServiceImpl implements WxOrderShippingService {
return Pair.of(false, "获取AccessToken失败");
}
+ if (!StrUtil.contains(path, "?")) {
+ path = String.format("%s?on=${商品订单号}", path);
+ }
+
// 构造请求参数
JSONObject paramsJSON = new JSONObject()
- .set("path", String.format("%s?on=${商品订单号}", path));
+ .set("path", path);
// 构造请求URL
String postUrl = "https://api.weixin.qq.com/wxa/sec/order/update_order_detail_path?access_token=" + accessToken;
@@ -295,7 +306,7 @@ public class WxOrderShippingServiceImpl implements WxOrderShippingService {
}
log.info("配置订单详情路径成功,路径: {}", path);
- return Pair.of(true, "配置订单详情路径成功");
+ return Pair.of(true, path);
} catch (HttpClientErrorException e) {
log.error("HTTP请求错误,状态码: {}, 错误信息: {}", e.getStatusCode(), e.getMessage(), e);
@@ -305,4 +316,72 @@ public class WxOrderShippingServiceImpl implements WxOrderShippingService {
return Pair.of(false, "配置订单详情路径失败: " + e.getMessage());
}
}
+
+ /**
+ * 消息跳转路径设置接口
+ * 参考:https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/business-capabilities/order-shipping/order-shipping.html
+ * 用于设置微信订单消息中的跳转路径,用户点击消息时可跳转到指定页面
+ *
+ * @param orderId 订单号
+ * @return 设置结果,包含成功状态和跳转路径
+ */
+ @Override
+ public Pair setMsgJumpPath(String orderId) {
+ log.debug("开始设置消息跳转路径,订单ID: {}", orderId);
+
+ if (StrUtil.isBlank(orderId)) {
+ log.warn("订单号不能为空");
+ return Pair.of(false, "订单号不能为空");
+ }
+
+ try {
+ // 获取微信访问令牌
+ String accessToken = wxUtil.getAccessToken();
+ if (StrUtil.isBlank(accessToken)) {
+ log.error("获取AccessToken失败,订单ID: {}", orderId);
+ return Pair.of(false, "获取AccessToken失败");
+ }
+
+ // 构造跳转路径
+ String path = String.format("%s?on=%s", ORDER_DETAIL_PATH, orderId);
+ log.debug("构造消息跳转路径: {}", path);
+
+ // 构造请求参数
+ JSONObject paramsJSON = new JSONObject()
+ .set("path", path);
+
+ // 构造请求URL
+ String postUrl = "https://api.weixin.qq.com/wxa/sec/order/set_msg_jump_path?access_token=" + accessToken;
+ log.debug("消息跳转路径设置请求: {} \n {}", postUrl, paramsJSON);
+
+ // 发送请求到微信API
+ JSONObject respObj = RestTemplateHttpUtil.sendPost(
+ postUrl,
+ null, paramsJSON, JSONObject.class
+ );
+
+ // 处理响应结果
+ if (respObj == null) {
+ log.error("消息跳转路径设置失败,订单ID: {}, 返回结果为空", orderId);
+ return Pair.of(false, "消息跳转路径设置失败,返回结果为空");
+ }
+
+ int errCode = respObj.getInt("errcode", -1);
+ if (errCode != 0) {
+ String errorMsg = respObj.getStr("errmsg", "未知错误");
+ log.error("消息跳转路径设置失败,订单ID: {}, 错误码: {}, 错误信息: {}", orderId, errCode, errorMsg);
+ return Pair.of(false, "消息跳转路径设置失败: " + errorMsg);
+ }
+
+ log.info("消息跳转路径设置成功,订单ID: {}, 路径: {}", orderId, path);
+ return Pair.of(true, path);
+
+ } catch (HttpClientErrorException e) {
+ log.error("HTTP请求错误,订单ID: {}, 状态码: {}, 错误信息: {}", orderId, e.getStatusCode(), e.getMessage(), e);
+ return Pair.of(false, "HTTP请求错误: " + e.getMessage());
+ } catch (Exception e) {
+ log.error("消息跳转路径设置失败,订单ID: {}, 错误信息: {}", orderId, e.getMessage(), e);
+ return Pair.of(false, "消息跳转路径设置失败: " + e.getMessage());
+ }
+ }
}
From 129ba5b394f39822b771a3695820413d42a46d52 Mon Sep 17 00:00:00 2001
From: Jack <46790855@qq.com>
Date: Mon, 29 Sep 2025 10:15:39 +0800
Subject: [PATCH 09/22] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E5=BE=AE=E4=BF=A1=20ac?=
=?UTF-8?q?cessToken=20redis=20=E8=BF=87=E6=9C=9F=E6=97=B6=E9=97=B4?=
=?UTF-8?q?=E6=8F=90=E5=89=8D1=E5=88=86=E9=92=9F=E8=BF=87=E6=9C=9F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../com/suisung/mall/shop/wechat/utils/WxUtil.java | 14 ++++++++++----
1 file changed, 10 insertions(+), 4 deletions(-)
diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/wechat/utils/WxUtil.java b/mall-shop/src/main/java/com/suisung/mall/shop/wechat/utils/WxUtil.java
index 1d6f6fc2..64b51146 100644
--- a/mall-shop/src/main/java/com/suisung/mall/shop/wechat/utils/WxUtil.java
+++ b/mall-shop/src/main/java/com/suisung/mall/shop/wechat/utils/WxUtil.java
@@ -58,18 +58,24 @@ public class WxUtil {
params.put("secret", xcx_app_secret);
params.put("grant_type", "client_credential");
- JSONObject resultObj = new JSONObject();
String response = HttpUtil.get("https://api.weixin.qq.com/cgi-bin/token", params);
JSONObject jsonObject = JSONUtil.parseObj(response);
+ // 修正:使用 jsonObject 而不是 resultObj 来检查错误信息
Object errmsg = jsonObject.get("errmsg");
if (ObjectUtil.isNotEmpty(errmsg)) {
- String errmsgStr = Convert.toStr(resultObj.get("errmsg"));
- if (!errmsgStr.equals("0")) {
+ String errmsgStr = Convert.toStr(errmsg);
+ if (!"0".equals(errmsgStr)) {
throw new ApiException(I18nUtil._("获取access_token失败"));
}
}
- Integer expiresIn = Convert.toInt(jsonObject.get("expires_in"), 0);
+
+ // 优化:expiresIn 逻辑更清晰
+ Long expiresIn = Convert.toLong(jsonObject.get("expires_in"), 7200L) - 60L;
+ if (expiresIn <= 0L) {
+ expiresIn = 7140L;
+ }
redisService.set(StateCode.WX_XCX_ACCESSTOKEN, Convert.toStr(jsonObject.get("access_token")), expiresIn);
}
+
}
From 8687a295c0608f876163be0e804fdb8fc94b34d7 Mon Sep 17 00:00:00 2001
From: liyj <1617420630@qq.com>
Date: Mon, 29 Sep 2025 10:51:54 +0800
Subject: [PATCH 10/22] =?UTF-8?q?=E5=BA=97=E9=93=BA=E5=88=86=E7=B1=BB?=
=?UTF-8?q?=E6=9F=A5=E8=AF=A2=E6=8C=89=E5=AD=90=E7=B1=BB=E6=9F=A5=E8=AF=A2?=
=?UTF-8?q?=E9=97=AE=E9=A2=98=E4=BF=AE=E6=94=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../ShopBaseStoreCategoryServiceImpl.java | 3 +-
.../impl/ShopStoreBaseServiceImpl.java | 59 ++++++++-----------
2 files changed, 27 insertions(+), 35 deletions(-)
diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/base/service/impl/ShopBaseStoreCategoryServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/base/service/impl/ShopBaseStoreCategoryServiceImpl.java
index 2ac3ad33..d1591c8f 100644
--- a/mall-shop/src/main/java/com/suisung/mall/shop/base/service/impl/ShopBaseStoreCategoryServiceImpl.java
+++ b/mall-shop/src/main/java/com/suisung/mall/shop/base/service/impl/ShopBaseStoreCategoryServiceImpl.java
@@ -89,7 +89,8 @@ public class ShopBaseStoreCategoryServiceImpl extends BaseServiceImpl row = new HashMap<>();
- row.put("store_category_id", String.valueOf(store_category_id));
+ row.put("store_category_id", String.valueOf(store_category_parent_id));
+ row.put("store_2nd_category_id", String.valueOf(store_category_id));
row.put("findStore", true);
row.put("store_type", "1");
Map storeListMap = shopStoreBaseService.getStoreList(1, pageSize, row);
diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStoreBaseServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStoreBaseServiceImpl.java
index 2d696425..97a28e00 100644
--- a/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStoreBaseServiceImpl.java
+++ b/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStoreBaseServiceImpl.java
@@ -736,12 +736,18 @@ public class ShopStoreBaseServiceImpl extends BaseServiceImpl store_category_ids = new ArrayList<>();
- QueryWrapper storeCategoryQueryWrapper = new QueryWrapper<>();
- storeCategoryQueryWrapper.eq("store_category_parent_id", store_category_id);
- storeCategoryQueryWrapper.select("store_category_id");
- List shopBaseStoreCategories = shopBaseStoreCategoryService.list(storeCategoryQueryWrapper);
- store_category_ids.add(store_category_id);
- for (ShopBaseStoreCategory storeCategory : shopBaseStoreCategories) {
- store_category_ids.add(storeCategory.getStore_category_id());
- }
- if (store_category_ids.size() > 1) {
- queryWrapper.and(q->{
- q.in("store_category_id",store_category_ids);
- q.or().in("store_2nd_category_id",store_category_ids);
- });
- } else {
- queryWrapper.or(q->{
- q.eq("store_category_id",store_category_ids);
- q.or().eq("store_2nd_category_id",store_category_ids);
- });
- }
+ queryWrapper.eq("store_category_id",store_category_id);
params.put("store_category_id", store_category_id);
}
+ if(CheckUtil.isNotEmpty(store_2nd_category_id)){
+ queryWrapper.eq("store_2nd_category_id",store_2nd_category_id);
+ }
+
queryWrapper.eq("store_is_open", 1);
params.put("store_is_open", 1);
@@ -3100,20 +3091,20 @@ public class ShopStoreBaseServiceImpl extends BaseServiceImpl storeCategoryIds = new ArrayList<>();
- QueryWrapper storeCategoryQueryWrapper = new QueryWrapper<>();
- storeCategoryQueryWrapper.eq("store_category_parent_id", storeCategoryId);
- List shopBaseStoreCategories = shopBaseStoreCategoryService.list(storeCategoryQueryWrapper);
- if (!shopBaseStoreCategories.isEmpty()) {
- storeCategoryIds.add(storeCategoryId);
- shopBaseStoreCategories.forEach(shopBaseStoreCategory -> {
- storeCategoryIds.add(shopBaseStoreCategory.getStore_category_id());
- });
- params.put("storeCategoryIds", storeCategoryIds);
- } else {
- params.put("storeCategoryId", storeCategoryId);
- }
-
+// List storeCategoryIds = new ArrayList<>();
+// QueryWrapper storeCategoryQueryWrapper = new QueryWrapper<>();
+// storeCategoryQueryWrapper.eq("store_category_parent_id", storeCategoryId);
+// List shopBaseStoreCategories = shopBaseStoreCategoryService.list(storeCategoryQueryWrapper);
+// if (!shopBaseStoreCategories.isEmpty()) {
+// storeCategoryIds.add(storeCategoryId);
+// shopBaseStoreCategories.forEach(shopBaseStoreCategory -> {
+// storeCategoryIds.add(shopBaseStoreCategory.getStore_category_id());
+// });
+// params.put("storeCategoryIds", storeCategoryIds);
+// } else {
+// params.put("storeCategoryId", storeCategoryId);
+// }
+ params.put("storeCategoryId", storeCategoryId);
params.put("subSiteId", subSiteId);
params.put("storeName", storeName);
From 8eb1e4f59f9773ffee8edebfbc27e678dc37956a Mon Sep 17 00:00:00 2001
From: liyj <1617420630@qq.com>
Date: Mon, 29 Sep 2025 14:54:24 +0800
Subject: [PATCH 11/22] =?UTF-8?q?=E5=BA=97=E9=93=BA=E6=A0=91=E5=BD=A2?=
=?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=98=BE=E7=A4=BA=E6=9D=A1=E4=BB=B6=E6=9F=A5?=
=?UTF-8?q?=E8=AF=A2?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../admin/ShopBaseStoreCategoryAdminController.java | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/base/controller/admin/ShopBaseStoreCategoryAdminController.java b/mall-shop/src/main/java/com/suisung/mall/shop/base/controller/admin/ShopBaseStoreCategoryAdminController.java
index a1e03660..ffb48e8e 100644
--- a/mall-shop/src/main/java/com/suisung/mall/shop/base/controller/admin/ShopBaseStoreCategoryAdminController.java
+++ b/mall-shop/src/main/java/com/suisung/mall/shop/base/controller/admin/ShopBaseStoreCategoryAdminController.java
@@ -72,8 +72,12 @@ public class ShopBaseStoreCategoryAdminController {
@RequestMapping(value = "/categoryTree", method = RequestMethod.GET)
public CommonResult categoryTree(ShopBaseStoreCategory category) {
QueryWrapper queryWrapper = new QueryWrapper<>();
- if (category.getStore_category_parent_id() != null)
+ if (category.getStore_category_parent_id() != null){
queryWrapper.eq("store_category_parent_id", category.getStore_category_parent_id());
+ }
+ if(category.getCategory_is_enable() != null){
+ queryWrapper.eq("category_is_enable", category.getCategory_is_enable());
+ }
return CommonResult.success(shopBaseStoreCategoryService.getCategoryTree(queryWrapper));
}
From f2a07771b28fbb66d04478079b3fc11ede312012 Mon Sep 17 00:00:00 2001
From: liyj <1617420630@qq.com>
Date: Mon, 29 Sep 2025 17:11:37 +0800
Subject: [PATCH 12/22] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=BA=97=E9=93=BA?=
=?UTF-8?q?=E4=BA=8C=E7=BA=A7=E5=88=86=E7=B1=BB=E9=80=89=E6=8B=A9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../shop/store/service/impl/ShopStoreBaseServiceImpl.java | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStoreBaseServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStoreBaseServiceImpl.java
index 97a28e00..d5e690da 100644
--- a/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStoreBaseServiceImpl.java
+++ b/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStoreBaseServiceImpl.java
@@ -2301,6 +2301,11 @@ public class ShopStoreBaseServiceImpl extends BaseServiceImpl
Date: Mon, 29 Sep 2025 17:30:41 +0800
Subject: [PATCH 13/22] =?UTF-8?q?=E6=8F=90=E7=8E=B0=E5=92=8C=E9=A1=BA?=
=?UTF-8?q?=E4=B8=B0=E5=90=8C=E5=9F=8E=E9=85=8D=E7=BD=AE=20=E8=BD=AC?=
=?UTF-8?q?=E6=AD=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../mall/common/pojo/dto/LklSeparateDTO.java | 8 +--
.../suisung/mall/common/utils/CheckUtil.java | 62 +++++++++++++++--
.../service/impl/LakalaApiServiceImpl.java | 5 +-
.../service/impl/SFExpressApiServiceImpl.java | 2 +-
.../admin/ShopStorePrinterController.java | 6 ++
.../service/ShopStorePrinterService.java | 8 +++
.../impl/ShopStoreBaseServiceImpl.java | 8 ++-
.../impl/ShopStorePrinterServiceImpl.java | 66 +++++++++++++++++--
.../mall/shop/store/utis/FeieUtil.java | 6 +-
.../src/main/resources/bootstrap-prod.yml | 2 +-
10 files changed, 148 insertions(+), 25 deletions(-)
diff --git a/mall-common/src/main/java/com/suisung/mall/common/pojo/dto/LklSeparateDTO.java b/mall-common/src/main/java/com/suisung/mall/common/pojo/dto/LklSeparateDTO.java
index 4f454da4..13c43d3a 100644
--- a/mall-common/src/main/java/com/suisung/mall/common/pojo/dto/LklSeparateDTO.java
+++ b/mall-common/src/main/java/com/suisung/mall/common/pojo/dto/LklSeparateDTO.java
@@ -61,12 +61,12 @@ public class LklSeparateDTO {
// 测试基于可分账金额的分账算法(正常情况)
System.out.println("\n=== 基于可分账金额的分账算法测试(正常情况) ===");
LklSeparateDTO dto2 = new LklSeparateDTO();
- dto2.setTotalSeparateAmount(1); // 分账总额 1000分
- dto2.setShippingFee(0); // 配送费 100分
+ dto2.setTotalSeparateAmount(1500); // 分账总额 1000分
+ dto2.setShippingFee(500); // 配送费 100分
// dto2.setRefCanSeparateAmount(null);
dto2.setLklRatio(new BigDecimal("0.0025")); // 拉卡拉分账比例 0.0025
- dto2.setMchRatio(new BigDecimal("0.94")); // 商家分账比例 0.857 (会产生小数)
- dto2.setPlatRatio(new BigDecimal("0.01")); // 平台分账比例 0.01
+ dto2.setMchRatio(new BigDecimal("0.95")); // 商家分账比例 0.857 (会产生小数)
+ dto2.setPlatRatio(new BigDecimal("0.06")); // 平台分账比例 0.01
// 不设置一级和二级代理商分账比例,测试不参与分账的情况
// dto2.setAgent1stRatio(new BigDecimal("0.01")); // 一级代理商分账比例 0.023 (会产生小数)
// dto2.setAgent2ndRatio(new BigDecimal("0.04")); // 二级代理商分账比例 0.031 (会产生小数)
diff --git a/mall-common/src/main/java/com/suisung/mall/common/utils/CheckUtil.java b/mall-common/src/main/java/com/suisung/mall/common/utils/CheckUtil.java
index e1e66e23..2b1dd6f8 100644
--- a/mall-common/src/main/java/com/suisung/mall/common/utils/CheckUtil.java
+++ b/mall-common/src/main/java/com/suisung/mall/common/utils/CheckUtil.java
@@ -188,28 +188,80 @@ public class CheckUtil {
return true;
}
+ /**
+ * 校验数据的某个字段是否为指定值
+ *
+ * @param value 指定值的字段值
+ * @param data 需要对比的数据Map
+ * @param key 字段名
+ * @return boolean 字段值等于指定值返回true,否则返回false
+ */
public static boolean checkDataRights(Integer value, Map data, String key) {
- if (CollUtil.isEmpty(data)) return false;
+ // 检查数据是否为空或key是否为空
+ if (CollUtil.isEmpty(data) || StrUtil.isBlank(key)) {
+ log.debug("数据为空或key为空, data: {}, key: {}", data, key);
+ return false;
+ }
+ // 从数据中获取指定key的值并转换为Integer类型
Integer _value = Convert.toInt(data.get(key));
- return ObjectUtil.equal(_value, value);
+ // 比较获取的值与指定值是否相等
+ boolean result = ObjectUtil.equal(_value, value);
+ log.info("校验数据权限, key: {}, 值: {}==数据值: {} ? 结果: {}", key, value, _value, result);
+ return result;
}
+ /**
+ * 校验数据对象的某个字段是否为指定值
+ *
+ * @param value 指定值的字段值
+ * @param data 需要对比的数据对象
+ * @param idMapper 获取数据对象ID的函数
+ * @param 数据对象类型
+ * @return boolean 字段值等于指定值返回true,否则返回false
+ */
public static boolean checkDataRights(Integer value, T data, Function idMapper) {
- if (ObjectUtil.isEmpty(data)) return false;
+ // 检查数据对象或映射函数是否为空
+ if (ObjectUtil.isEmpty(data) || ObjectUtil.isEmpty(idMapper)) {
+ log.debug("数据对象或映射函数为空, data: {}, idMapper: {}", data, idMapper);
+ return false;
+ }
+ // 通过映射函数获取数据对象的值
Object _value = idMapper.apply(data);
- return ObjectUtil.equal(_value, value);
+ // 比较获取的值与指定值是否相等
+ boolean result = ObjectUtil.equal(_value, value);
+ log.debug("校验单个对象数据权限, 值: {}, 数据值: {}, 结果: {}", value, _value, result);
+ return result;
}
+ /**
+ * 校验数据列表中每个对象的某个字段是否为指定值
+ *
+ * @param value 指定值的字段值
+ * @param data 需要对比的数据列表
+ * @param idMapper 获取数据对象ID的函数
+ * @param 数据对象类型
+ * @return boolean 所有对象字段值都等于指定值返回true,否则返回false
+ */
public static boolean checkDataRights(Integer value, List data, Function idMapper) {
- if (CollUtil.isEmpty(data)) return false;
+ // 检查数据列表或映射函数是否为空
+ if (CollUtil.isEmpty(data) || ObjectUtil.isEmpty(idMapper)) {
+ log.debug("数据列表或映射函数为空, 数据大小: {}, 映射函数: {}",
+ data != null ? data.size() : 0, idMapper);
+ return false;
+ }
+ // 遍历数据列表中的每个对象
for (T datum : data) {
+ // 递归校验每个对象,如果有任何一个不匹配则返回false
if (!checkDataRights(value, datum, idMapper)) {
+ log.debug("列表数据权限校验失败,失败项: {}", datum);
return false;
}
}
+ log.debug("列表数据权限校验成功, 数据大小: {}, 值: {}", data.size(), value);
return true;
}
+
public static String addslashes(String str) {
if (str == null) {
return null;
diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LakalaApiServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LakalaApiServiceImpl.java
index 78ddc55d..8c194b82 100644
--- a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LakalaApiServiceImpl.java
+++ b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LakalaApiServiceImpl.java
@@ -2823,11 +2823,14 @@ public class LakalaApiServiceImpl implements LakalaApiService {
// RMK 本次分账成功后,给商户和接收方 D1提现到银行卡
if (CollUtil.isNotEmpty(detailDatas)) {
+ int idx = 1;
for (JSONObject detailData : detailDatas.jsonIter()) {
String recvNo = detailData.getStr("recv_no");
String amt = detailData.getStr("amt");
if (StrUtil.isNotBlank(recvNo) && StrUtil.isNotBlank(amt)) {
- Boolean drawSuccess = ewalletWithDrawD1(recvNo, outSeparateNo, amt, JSONUtil.toJsonStr(detailDatas));
+ String outSeparateNoTemp = String.format("%s_%s", outSeparateNo, idx);
+ Boolean drawSuccess = ewalletWithDrawD1(recvNo, outSeparateNoTemp, amt, JSONUtil.toJsonStr(detailDatas));
+ idx++;
log.info("[拉卡拉分账通知] 账户D1提现{},商户号={},分账单号={},金额={}分",
Boolean.TRUE.equals(drawSuccess) ? "成功" : "失败", recvNo, outSeparateNo, amt);
}
diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/sfexpress/service/impl/SFExpressApiServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/sfexpress/service/impl/SFExpressApiServiceImpl.java
index 2e3021f1..efb562c7 100644
--- a/mall-shop/src/main/java/com/suisung/mall/shop/sfexpress/service/impl/SFExpressApiServiceImpl.java
+++ b/mall-shop/src/main/java/com/suisung/mall/shop/sfexpress/service/impl/SFExpressApiServiceImpl.java
@@ -1112,7 +1112,7 @@ public class SFExpressApiServiceImpl implements SFExpressApiService {
// wxOrderShippingService.notifyConfirmReceive(shopStoreSfOrder.getShop_order_id());
// 订单确认收货
- // shopOrderBaseService.receive(shopStoreSfOrder.getShop_order_id(), null);
+// shopOrderBaseService.receive(shopStoreSfOrder.getShop_order_id(), null);
String orderId = shopStoreSfOrder.getShop_order_id();
diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/store/controller/admin/ShopStorePrinterController.java b/mall-shop/src/main/java/com/suisung/mall/shop/store/controller/admin/ShopStorePrinterController.java
index 27f9eaf9..ec799cf9 100644
--- a/mall-shop/src/main/java/com/suisung/mall/shop/store/controller/admin/ShopStorePrinterController.java
+++ b/mall-shop/src/main/java/com/suisung/mall/shop/store/controller/admin/ShopStorePrinterController.java
@@ -137,5 +137,11 @@ public class ShopStorePrinterController {
return shopStorePrinterService.tryPrint(printer_id);
}
+ @ApiOperation(value = "向厂家删除一个打票机", notes = "向厂家删除一个打票机")
+ @RequestMapping(value = "/delete/from/feie", method = {RequestMethod.POST})
+ public CommonResult deleteFeiePrinter(@RequestParam(name = "sn_list", required = true) String snList) {
+ return shopStorePrinterService.deleteFeiePrinter(snList);
+ }
+
}
\ No newline at end of file
diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/store/service/ShopStorePrinterService.java b/mall-shop/src/main/java/com/suisung/mall/shop/store/service/ShopStorePrinterService.java
index 123ae4f1..833c0e35 100644
--- a/mall-shop/src/main/java/com/suisung/mall/shop/store/service/ShopStorePrinterService.java
+++ b/mall-shop/src/main/java/com/suisung/mall/shop/store/service/ShopStorePrinterService.java
@@ -94,5 +94,13 @@ public interface ShopStorePrinterService extends IBaseService
* @param printerId 打印机Id
**/
CommonResult tryPrint(Long printerId);
+
+ /**
+ * 从飞鹅厂家删除飞鹅打印机
+ *
+ * @param snList 打印机编号,多台打印机请用减号“-”连接起来。如:316500010-316500011-316500012
+ * @return
+ */
+ CommonResult deleteFeiePrinter(String snList);
}
diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStoreBaseServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStoreBaseServiceImpl.java
index 97a28e00..7bc5b37a 100644
--- a/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStoreBaseServiceImpl.java
+++ b/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStoreBaseServiceImpl.java
@@ -786,11 +786,11 @@ public class ShopStoreBaseServiceImpl extends BaseServiceImpl queryWrapper2 = new QueryWrapper<>();
queryWrapper2.eq("store_id", record.getStore_id());
queryWrapper2.eq("printer_sn", record.getPrinter_sn());
- ShopStorePrinter existRecord2 = getOne(queryWrapper2);
+ ShopStorePrinter existRecord2 = findOne(queryWrapper2);
if (existRecord2 == null || existRecord2.getPrinter_id() <= 0) {
+
// 打印机从未加入到厂家到情况,往厂商添加打印机
// 格式:"922441475#r6ZXPvHH#核销柜台";
- Pair retPair = feieUtil.addPrinter(String.format("%s#%s#%s", record.getPrinter_sn(), record.getPrinter_key(), record.getPrinter_name()));
+ String printerInfo = String.format("%s#%s#%s", record.getPrinter_sn(), record.getPrinter_key(), record.getPrinter_name());
+ logger.info("向厂家添加新打印机: {}", printerInfo);
+ Pair retPair = feieUtil.addPrinter(printerInfo);
+
if (retPair.getFirst()) {
+ logger.info("向厂家添加打印机成功,SN: {}", record.getPrinter_sn());
updateWrapper.set("flag", CommonConstant.Enable);
updateWrapper.set("status", CommonConstant.Enable);
} else {
+ logger.warn("向厂家添加打印机失败,SN: {}, 错误信息: {}", record.getPrinter_sn(), retPair.getSecond());
msg = msg + ",但打印机绑定未成功,请检查打印机编号和密钥是否填写正确。";
updateWrapper.set("flag", CommonConstant.Disable2);
updateWrapper.set("status", CommonConstant.Disable2);
}
// 解绑之前的打印机
+ logger.info("解绑原打印机,SN: {}", existRecord.getPrinter_sn());
feieUtil.delPrinter(existRecord.getPrinter_sn());
} else {
// 打印机编号已被使用
+ logger.warn("打印机已添加,请勿重复操作,SN: {}", record.getPrinter_sn());
return CommonResult.success(null, "打票机已添加,请勿重复操作");
}
}
boolean success = update(updateWrapper);
if (success) {
+ logger.info("更新打印机信息成功,打印机ID: {}", record.getPrinter_id());
return CommonResult.success(null, msg);
}
+ logger.error("更新打印机信息失败,打印机ID: {}", record.getPrinter_id());
return CommonResult.failed("修改失败!");
-
}
@@ -243,9 +270,9 @@ public class ShopStorePrinterServiceImpl extends BaseServiceImpl retPair = feieUtil.delPrinter(record.getPrinter_sn());
+ if (!retPair.getFirst()) {
+ return CommonResult.failed(retPair.getSecond());
}
}
@@ -442,5 +469,30 @@ public class ShopStorePrinterServiceImpl extends BaseServiceImpl retPair = feieUtil.delPrinter(snList);
+ if (!retPair.getFirst()) {
+ logger.error("从厂家删除飞鹅打印机失败,打印机编号: {}", snList);
+ return CommonResult.failed(retPair.getSecond());
+ }
+ logger.info("从厂家删除飞鹅打印机成功,打印机编号: {}", snList);
+ return CommonResult.success("从厂家删除飞鹅打印机成功");
+ }
+
}
diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/store/utis/FeieUtil.java b/mall-shop/src/main/java/com/suisung/mall/shop/store/utis/FeieUtil.java
index d8ea19fc..3f0a5ae2 100644
--- a/mall-shop/src/main/java/com/suisung/mall/shop/store/utis/FeieUtil.java
+++ b/mall-shop/src/main/java/com/suisung/mall/shop/store/utis/FeieUtil.java
@@ -120,18 +120,18 @@ public class FeieUtil {
* @param snList 打印机编号,多台打印机请用减号“-”连接起来。如:316500010-316500011-316500012
* @return
*/
- public boolean delPrinter(String snList) {
+ public Pair delPrinter(String snList) {
List nvps = new ArrayList();
nvps.add(new BasicNameValuePair("snlist", snList));
FeiePrinterApiRes reps = sendHttpPost("Open_printerDelList", nvps);
logger.info("飞鹅删除打印机返回数据:{}", reps);
if (reps != null && reps.getRet().equals(0)) {
- return true;
+ return Pair.of(true, "打印机删除成功!");
}
logger.error("飞鹅删除打印机操作失败:{}", reps.getMsg());
- return false;
+ return Pair.of(true, "打印机删除失败:" + reps.getMsg());
}
/**
diff --git a/mall-shop/src/main/resources/bootstrap-prod.yml b/mall-shop/src/main/resources/bootstrap-prod.yml
index 7470b438..1b38418c 100644
--- a/mall-shop/src/main/resources/bootstrap-prod.yml
+++ b/mall-shop/src/main/resources/bootstrap-prod.yml
@@ -191,7 +191,7 @@ sf-express:
# dev_id: 1715091463
# appid: 1715091463
# appkey: 47466ae69c530f831395e1bc405639fb
- enable: 2
+ enable: 1
#拉卡拉进件配置
lakala:
#服务地址
From 2a4dfe2b24102d6a6e1a3c1d901848bc79b10813 Mon Sep 17 00:00:00 2001
From: Jack <46790855@qq.com>
Date: Mon, 29 Sep 2025 17:57:16 +0800
Subject: [PATCH 14/22] =?UTF-8?q?=E6=8F=90=E7=8E=B0=E8=AE=A2=E5=8D=95fix?=
=?UTF-8?q?=20bug?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../shop/lakala/service/impl/LakalaApiServiceImpl.java | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LakalaApiServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LakalaApiServiceImpl.java
index 8c194b82..445f9b1c 100644
--- a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LakalaApiServiceImpl.java
+++ b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LakalaApiServiceImpl.java
@@ -2821,18 +2821,18 @@ public class LakalaApiServiceImpl implements LakalaApiService {
// 更改分账状态:分账成功
shopOrderLklService.updateSeparateStatusByReceiveLogNo(logNo, CommonConstant.Sta_Separate_Success, "");
- // RMK 本次分账成功后,给商户和接收方 D1提现到银行卡
+ // 本次分账成功后,给商户和接收方 D1提现到银行卡
if (CollUtil.isNotEmpty(detailDatas)) {
int idx = 1;
for (JSONObject detailData : detailDatas.jsonIter()) {
String recvNo = detailData.getStr("recv_no");
String amt = detailData.getStr("amt");
if (StrUtil.isNotBlank(recvNo) && StrUtil.isNotBlank(amt)) {
- String outSeparateNoTemp = String.format("%s_%s", outSeparateNo, idx);
+ String outSeparateNoTemp = String.format("%s_%d", outSeparateNo, idx);
Boolean drawSuccess = ewalletWithDrawD1(recvNo, outSeparateNoTemp, amt, JSONUtil.toJsonStr(detailDatas));
- idx++;
log.info("[拉卡拉分账通知] 账户D1提现{},商户号={},分账单号={},金额={}分",
- Boolean.TRUE.equals(drawSuccess) ? "成功" : "失败", recvNo, outSeparateNo, amt);
+ Boolean.TRUE.equals(drawSuccess) ? "成功" : "失败", recvNo, outSeparateNoTemp, amt);
+ idx++;
}
}
}
From ce85d72ceefb5656e2fca76fa54a0cc2d82844a1 Mon Sep 17 00:00:00 2001
From: Jack <46790855@qq.com>
Date: Tue, 30 Sep 2025 00:23:16 +0800
Subject: [PATCH 15/22] =?UTF-8?q?=E5=B0=8F=E9=97=AE=E9=A2=98=E4=BF=AE?=
=?UTF-8?q?=E5=A4=8D?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../service/impl/LakalaApiServiceImpl.java | 15 ++++++--
.../order/service/ShopOrderInfoService.java | 8 +++++
.../impl/ShopOrderBaseServiceImpl.java | 11 +++---
.../impl/ShopOrderInfoServiceImpl.java | 35 +++++++++++++++++++
.../service/impl/SFExpressApiServiceImpl.java | 5 +--
.../impl/ShopStorePrinterServiceImpl.java | 2 --
...StoreSameCityTransportBaseServiceImpl.java | 1 +
.../impl/WxOrderShippingServiceImpl.java | 3 +-
8 files changed, 67 insertions(+), 13 deletions(-)
diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LakalaApiServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LakalaApiServiceImpl.java
index 445f9b1c..311cb06c 100644
--- a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LakalaApiServiceImpl.java
+++ b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LakalaApiServiceImpl.java
@@ -39,6 +39,7 @@ import com.suisung.mall.shop.lakala.utils.LakalaUtil;
import com.suisung.mall.shop.message.service.PushMessageService;
import com.suisung.mall.shop.message.service.ShopMessageTemplateService;
import com.suisung.mall.shop.order.service.ShopOrderBaseService;
+import com.suisung.mall.shop.order.service.ShopOrderInfoService;
import com.suisung.mall.shop.order.service.ShopOrderLklService;
import com.suisung.mall.shop.page.service.OssService;
import com.suisung.mall.shop.store.service.ShopMchEntryService;
@@ -153,6 +154,10 @@ public class LakalaApiServiceImpl implements LakalaApiService {
@Resource
private ShopOrderBaseService shopOrderBaseService;
+ @Lazy
+ @Resource
+ private ShopOrderInfoService shopOrderInfoService;
+
@Lazy
@Resource
private PushMessageService pushMessageService;
@@ -772,7 +777,7 @@ public class LakalaApiServiceImpl implements LakalaApiService {
/**
- * 发货类交易确认收货通知处理
+ * 发货类交易确认收货通知处理, 微信通知拉卡拉,拉卡拉通知我们系统,已经完成确认收货
*
* 参考文档:https://o.lakala.com/#/home/document/detail?id=1003
*
@@ -2825,8 +2830,12 @@ public class LakalaApiServiceImpl implements LakalaApiService {
if (CollUtil.isNotEmpty(detailDatas)) {
int idx = 1;
for (JSONObject detailData : detailDatas.jsonIter()) {
- String recvNo = detailData.getStr("recv_no");
- String amt = detailData.getStr("amt");
+ if (detailData == null || detailData.isEmpty()) {
+ continue;
+ }
+
+ String recvNo = Convert.toStr(detailData.get("recv_no"), "");
+ String amt = Convert.toStr(detailData.get("amt"), "");
if (StrUtil.isNotBlank(recvNo) && StrUtil.isNotBlank(amt)) {
String outSeparateNoTemp = String.format("%s_%d", outSeparateNo, idx);
Boolean drawSuccess = ewalletWithDrawD1(recvNo, outSeparateNoTemp, amt, JSONUtil.toJsonStr(detailDatas));
diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/order/service/ShopOrderInfoService.java b/mall-shop/src/main/java/com/suisung/mall/shop/order/service/ShopOrderInfoService.java
index 812ec6d3..c0488662 100644
--- a/mall-shop/src/main/java/com/suisung/mall/shop/order/service/ShopOrderInfoService.java
+++ b/mall-shop/src/main/java/com/suisung/mall/shop/order/service/ShopOrderInfoService.java
@@ -81,4 +81,12 @@ public interface ShopOrderInfoService extends IBaseService {
*/
CommonResult orderPickingCompleted(String storeId, String orderId);
+ /**
+ * 确认收货之后更改订单的收货状态
+ *
+ * @param orderId 订单ID
+ * @return Boolean 更新是否成功
+ */
+ Boolean updateOrderReceived(String orderId);
+
}
diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/order/service/impl/ShopOrderBaseServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/order/service/impl/ShopOrderBaseServiceImpl.java
index fc71150d..47dc8acf 100644
--- a/mall-shop/src/main/java/com/suisung/mall/shop/order/service/impl/ShopOrderBaseServiceImpl.java
+++ b/mall-shop/src/main/java/com/suisung/mall/shop/order/service/impl/ShopOrderBaseServiceImpl.java
@@ -2374,10 +2374,10 @@ public class ShopOrderBaseServiceImpl extends BaseServiceImpl updateWrapper = new UpdateWrapper<>();
+ updateWrapper.eq("order_id", orderId)
+ .ne("order_is_received", CommonConstant.Enable);
+ updateWrapper.set("order_is_received", CommonConstant.Enable)
+ .set("order_deal_time", System.currentTimeMillis());
+
+ boolean result = update(updateWrapper);
+ if (result) {
+ logger.info("[确认收货] 订单收货状态更新成功, orderId={}", orderId);
+ } else {
+ logger.warn("[确认收货] 订单收货状态更新失败, orderId={}", orderId);
+ }
+
+ return result;
+ } catch (Exception e) {
+ logger.error("[确认收货] 订单收货状态更新异常, orderId={}", orderId, e);
+ return false;
+ }
+ }
+
// todo 优化多次远程查询
private Map dashboardPlantform() {
List order_state = Arrays.asList(
diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/sfexpress/service/impl/SFExpressApiServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/sfexpress/service/impl/SFExpressApiServiceImpl.java
index efb562c7..72cbfbbd 100644
--- a/mall-shop/src/main/java/com/suisung/mall/shop/sfexpress/service/impl/SFExpressApiServiceImpl.java
+++ b/mall-shop/src/main/java/com/suisung/mall/shop/sfexpress/service/impl/SFExpressApiServiceImpl.java
@@ -263,7 +263,7 @@ public class SFExpressApiServiceImpl implements SFExpressApiService {
//汽配 18:珠宝 20:披萨 21:中餐 22:水产 27:专人直送 32:中端饮品 33:便利店 34:面包糕点 35:火锅 36:证照 40:烧烤小龙虾 41:外部落地配 47:烟酒
//行 48:成人用品 99:其他
// 经营类型: 快餐,百货,生鲜,高端饮品,蛋糕,鲜花,数码,服装,披萨,水产,中端饮品,便利店,面包糕点,烟酒,其他
- params.put("shop_product_types", "1,3,6,8,13,14,15,16,20,22,32,33,34,47,99");
+ params.put("shop_product_types", "33"); //"1,3,6,8,13,14,15,16,20,22,32,33,34,47,99"
params.put("shop_type", 1); // 店铺类型: 1-普通型 2-平台型
params.put("shop_address", shopAddress); // 店铺地址
params.put("longitude", longitude); // 经度
@@ -1014,7 +1014,8 @@ public class SFExpressApiServiceImpl implements SFExpressApiService {
orderStatus = StateCode.ORDER_STATE_RECEIVED; //已签收
// 通知微信用户确认收货(同城配送不能调用微信的确认收货)
- // wxOrderShippingService.notifyConfirmReceive(shopStoreSfOrder.getShop_order_id());
+ wxOrderShippingService.notifyConfirmReceive(shopStoreSfOrder.getShop_order_id());
+
// 不要提前 订单确认收货,等微信拉卡拉确认通知
// try {
// shopOrderBaseService.receive(shopOrderId, null);
diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStorePrinterServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStorePrinterServiceImpl.java
index f76971fb..bf7f484e 100644
--- a/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStorePrinterServiceImpl.java
+++ b/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStorePrinterServiceImpl.java
@@ -259,7 +259,6 @@ public class ShopStorePrinterServiceImpl extends BaseServiceImpl saveOrUpdateResult = saveOrUpdateShopStoreSameCityTransportBase(transportBase);
diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/wechat/service/impl/WxOrderShippingServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/wechat/service/impl/WxOrderShippingServiceImpl.java
index dbecf5e4..36c23633 100644
--- a/mall-shop/src/main/java/com/suisung/mall/shop/wechat/service/impl/WxOrderShippingServiceImpl.java
+++ b/mall-shop/src/main/java/com/suisung/mall/shop/wechat/service/impl/WxOrderShippingServiceImpl.java
@@ -237,8 +237,7 @@ public class WxOrderShippingServiceImpl implements WxOrderShippingService {
// 跳转链接设置
setMsgJumpPath(orderId);
-
-
+
log.info("通知微信用户确认收货成功, 订单ID: {}", orderId);
return Pair.of(true, "通知微信用户确认收货成功");
From 62d76b3a67290509e9f9c3f6b5877ee50fab0f2a Mon Sep 17 00:00:00 2001
From: liyj <1617420630@qq.com>
Date: Tue, 30 Sep 2025 10:47:55 +0800
Subject: [PATCH 16/22] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=BA=97=E9=93=BA?=
=?UTF-8?q?=E8=90=A5=E4=B8=9A=E6=97=B6=E9=97=B4=E4=BF=AE=E6=94=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../store/service/impl/ShopStoreBaseServiceImpl.java | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStoreBaseServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStoreBaseServiceImpl.java
index a00c33b9..c3d207de 100644
--- a/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStoreBaseServiceImpl.java
+++ b/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStoreBaseServiceImpl.java
@@ -3875,6 +3875,7 @@ public class ShopStoreBaseServiceImpl extends BaseServiceImpl shopStoreInfoUpdateWrapper=new UpdateWrapper<>();
+ shopStoreInfoUpdateWrapper.eq("store_id",storeId);
+ shopStoreInfoUpdateWrapper.set("store_opening_hours",store_opening_hours);
+ shopStoreInfoUpdateWrapper.set("store_close_hours",store_close_hours);
+ shopStoreInfoService.update(shopStoreInfoUpdateWrapper);
+ }
// 使用 UpdateWrapper 更新店铺营业状态
boolean updated = update(new UpdateWrapper()
.eq("store_id", storeId)
From afaca094f52941927263c9e2fe409cd76c9d20e1 Mon Sep 17 00:00:00 2001
From: Jack <46790855@qq.com>
Date: Tue, 30 Sep 2025 22:16:19 +0800
Subject: [PATCH 17/22] =?UTF-8?q?=E9=80=80=E6=AC=BE=20=E9=85=8D=E9=80=81?=
=?UTF-8?q?=E8=B4=B9=20=E6=B5=81=E7=A8=8B=E6=9B=B4=E6=94=B9=EF=BC=8C?=
=?UTF-8?q?=E6=8B=89=E5=8D=A1=E6=8B=89=20=E5=90=88=E5=8D=95=20=E9=9C=80?=
=?UTF-8?q?=E5=88=86=E5=BC=80=20=E9=80=80=E6=AC=BE?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../mall/common/constant/CommonConstant.java | 5 +
.../exception/GlobalExceptionHandler.java | 4 +-
.../common/modules/order/ShopOrderData.java | 3 +
.../modules/order/dto/MchOrderInfoDTO.java | 2 +
.../mall/common/pojo/dto/LklSeparateDTO.java | 4 +-
.../service/impl/LakalaPayServiceImpl.java | 4 +
.../impl/PayConsumeTradeServiceImpl.java | 358 +-----------------
.../shop/lakala/service/LakalaApiService.java | 24 ++
.../service/impl/LakalaApiServiceImpl.java | 107 ++++++
.../impl/ShopMessageTemplateServiceImpl.java | 81 ++--
.../admin/ShopOrderReturnController.java | 3 +
.../order/service/ShopOrderLklService.java | 19 +
.../impl/ShopOrderBaseServiceImpl.java | 62 ++-
.../service/impl/ShopOrderLklServiceImpl.java | 62 +++
.../impl/ShopOrderReturnServiceImpl.java | 65 ++--
.../mapper/order/ShopOrderBaseMapper.xml | 4 +-
.../mapper/order/ShopOrderDataMapper.xml | 2 +-
17 files changed, 367 insertions(+), 442 deletions(-)
diff --git a/mall-common/src/main/java/com/suisung/mall/common/constant/CommonConstant.java b/mall-common/src/main/java/com/suisung/mall/common/constant/CommonConstant.java
index 52c0ec0f..5837be79 100644
--- a/mall-common/src/main/java/com/suisung/mall/common/constant/CommonConstant.java
+++ b/mall-common/src/main/java/com/suisung/mall/common/constant/CommonConstant.java
@@ -110,4 +110,9 @@ public class CommonConstant {
//秒杀活动订阅消息模板id
public static final String BIND_SUB_TMPL_SKILL = "kiDj_hSF_ASwD-Dlgxnypi6IJBQZ12a-hEpd3zZ-Uxc";
+ //分账计算方式:1-按总金额;2-按可分账金额;
+ public static final int SeparateCalcMode_TotalAmt = 1;
+ public static final int SeparateCalcMode_CanSeparateAmt = 2;
+
+
}
diff --git a/mall-common/src/main/java/com/suisung/mall/common/exception/GlobalExceptionHandler.java b/mall-common/src/main/java/com/suisung/mall/common/exception/GlobalExceptionHandler.java
index 850a999c..f36913fe 100644
--- a/mall-common/src/main/java/com/suisung/mall/common/exception/GlobalExceptionHandler.java
+++ b/mall-common/src/main/java/com/suisung/mall/common/exception/GlobalExceptionHandler.java
@@ -3,6 +3,7 @@ package com.suisung.mall.common.exception;
import cn.hutool.core.util.StrUtil;
import com.suisung.mall.common.api.CommonResult;
import com.suisung.mall.common.api.ResultCode;
+import io.seata.rm.datasource.exec.LockWaitTimeoutException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.dao.DataAccessException;
@@ -91,13 +92,14 @@ public class GlobalExceptionHandler {
/**
* 处理系统级异常(数据库异常/通用异常)
*/
- @ExceptionHandler({SQLException.class, DataAccessException.class, Exception.class})
+ @ExceptionHandler({SQLException.class, DataAccessException.class, LockWaitTimeoutException.class, Exception.class})
public CommonResult handleSystemException(HttpServletRequest req, Exception e) {
logError(req, e.getMessage(), e);
if (e instanceof SQLException || e instanceof DataAccessException) {
return CommonResult.failed("系统数据异常,请联系管理员!");
}
+
return CommonResult.failed("系统内部异常,请联系管理员!");
}
diff --git a/mall-common/src/main/java/com/suisung/mall/common/modules/order/ShopOrderData.java b/mall-common/src/main/java/com/suisung/mall/common/modules/order/ShopOrderData.java
index d00071c8..152a1839 100644
--- a/mall-common/src/main/java/com/suisung/mall/common/modules/order/ShopOrderData.java
+++ b/mall-common/src/main/java/com/suisung/mall/common/modules/order/ShopOrderData.java
@@ -92,6 +92,9 @@ public class ShopOrderData implements Serializable {
@ApiModelProperty(value = "实际运费金额-卖家可修改")
private BigDecimal order_shipping_fee;
+ @ApiModelProperty(value = "平台内部运费金额")
+ private BigDecimal order_shipping_fee_inner;
+
@ApiModelProperty(value = "总计分账金额(从拉卡拉上分账,分给平台和代理商费用),单位:元")
private BigDecimal total_separate_value;
diff --git a/mall-common/src/main/java/com/suisung/mall/common/modules/order/dto/MchOrderInfoDTO.java b/mall-common/src/main/java/com/suisung/mall/common/modules/order/dto/MchOrderInfoDTO.java
index 09dc7562..002a4a4b 100644
--- a/mall-common/src/main/java/com/suisung/mall/common/modules/order/dto/MchOrderInfoDTO.java
+++ b/mall-common/src/main/java/com/suisung/mall/common/modules/order/dto/MchOrderInfoDTO.java
@@ -72,6 +72,8 @@ public class MchOrderInfoDTO implements Serializable {
private Integer delivery_type_id;
@ApiModelProperty(value = "订单运费")
private BigDecimal order_shipping_fee;
+ @ApiModelProperty(value = "平台内部配送费")
+ private BigDecimal order_shipping_fee_inner;
@ApiModelProperty(value = "平台费")
private BigDecimal platform_fee;
@ApiModelProperty(value = "店铺统一设置的打包费")
diff --git a/mall-common/src/main/java/com/suisung/mall/common/pojo/dto/LklSeparateDTO.java b/mall-common/src/main/java/com/suisung/mall/common/pojo/dto/LklSeparateDTO.java
index 13c43d3a..7050b80f 100644
--- a/mall-common/src/main/java/com/suisung/mall/common/pojo/dto/LklSeparateDTO.java
+++ b/mall-common/src/main/java/com/suisung/mall/common/pojo/dto/LklSeparateDTO.java
@@ -68,8 +68,8 @@ public class LklSeparateDTO {
dto2.setMchRatio(new BigDecimal("0.95")); // 商家分账比例 0.857 (会产生小数)
dto2.setPlatRatio(new BigDecimal("0.06")); // 平台分账比例 0.01
// 不设置一级和二级代理商分账比例,测试不参与分账的情况
- // dto2.setAgent1stRatio(new BigDecimal("0.01")); // 一级代理商分账比例 0.023 (会产生小数)
- // dto2.setAgent2ndRatio(new BigDecimal("0.04")); // 二级代理商分账比例 0.031 (会产生小数)
+ dto2.setAgent1stRatio(new BigDecimal("0.11")); // 一级代理商分账比例 0.023 (会产生小数)
+ dto2.setAgent2ndRatio(new BigDecimal("0.04")); // 二级代理商分账比例 0.031 (会产生小数)
SharingResult result2 = dto2.sharingOnCanSeparateAmount();
System.out.println(result2);
diff --git a/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/LakalaPayServiceImpl.java b/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/LakalaPayServiceImpl.java
index af84ef61..7777d5df 100644
--- a/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/LakalaPayServiceImpl.java
+++ b/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/LakalaPayServiceImpl.java
@@ -574,6 +574,10 @@ public class LakalaPayServiceImpl implements LakalaPayService {
// TODO 重要的逻辑,获取是否已经分账?已分账:分账退回;查商家账户余额够不够退回?够就执行退回
+ if (StrUtil.isBlank(refundReason)) {
+ refundReason = "商家与买方协商退款";
+ }
+
// 5. 构造退款请求并发送
V3LabsRelationRefundRequest refundRequest = new V3LabsRelationRefundRequest();
refundRequest.setOutTradeNo(outTradeNo);
diff --git a/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/PayConsumeTradeServiceImpl.java b/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/PayConsumeTradeServiceImpl.java
index 873fc809..a8678096 100644
--- a/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/PayConsumeTradeServiceImpl.java
+++ b/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/PayConsumeTradeServiceImpl.java
@@ -188,7 +188,7 @@ public class PayConsumeTradeServiceImpl extends BaseServiceImpl return_rows) {
- List paid_return_id_row = new ArrayList<>();
-
- // 原路退回标记
- boolean order_refund_flag = accountBaseConfigService.getConfig("order_refund_flag", false);
- List order_id_rows = return_rows.stream().map(ShopOrderReturn::getOrder_id).distinct().collect(Collectors.toList());
-
- List order_data_rows = shopService.getsShopOrderData(order_id_rows);
-
- List store_ids = return_rows.stream().map(ShopOrderReturn::getStore_id).distinct().collect(Collectors.toList());
- List