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 dc6e70d4..0b381a27 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
@@ -103,5 +103,8 @@ public class CommonConstant {
public static final Integer Sta_Separate_Undone = 2;
public static final Integer Sta_Separate_Fail = 3;
+ // 最低平台内部配送费 配置key
+ public static final String Inner_Min_DeliveryFee_Key = "inner_min_delivery_fee";
+
}
diff --git a/mall-common/src/main/java/com/suisung/mall/common/constant/RedisConstant.java b/mall-common/src/main/java/com/suisung/mall/common/constant/RedisConstant.java
index 80d9d0f7..86e7577c 100644
--- a/mall-common/src/main/java/com/suisung/mall/common/constant/RedisConstant.java
+++ b/mall-common/src/main/java/com/suisung/mall/common/constant/RedisConstant.java
@@ -37,4 +37,5 @@ public class RedisConstant {
public static final String SF_Order_Proc_WillExpire_Key = ConstantRedis.Cache_NameSpace + "sf_order_proc_will_expire_key__";
public static final String Order_Pay_Retry_Count_Key = ConstantRedis.Cache_NameSpace + "order_pay_retry_count:";
+
}
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 ea5c63ee..abcba871 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
@@ -6,6 +6,7 @@ import lombok.Data;
import lombok.EqualsAndHashCode;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.data.util.Pair;
import java.math.BigDecimal;
import java.math.RoundingMode;
@@ -116,9 +117,9 @@ public class LklSeparateDTO implements java.io.Serializable {
dto2.getTotalSeparateAmount(), dto2.getShippingFee(), dto2.getLklRatio(),
dto2.getMchRatio(), dto2.getPlatRatio());
- boolean result2 = dto2.calcOnCanAmount();
- logger.info("分账计算结果: {}", (result2 ? "成功" : "失败"));
- if (result2) {
+ Pair result2 = dto2.calcOnCanSeparateAmount();
+ logger.info("分账计算结果: {}", (result2.getFirst() ? "成功" : "失败"));
+ if (result2.getFirst()) {
logger.info("分账结果: 总金额={}分, 拉卡拉={}分, 配送费={}分, 可分账={}分, 参考可分账={}分, 商户={}分, 平台={}分, 一级代理商={}分, 二级代理商={}分",
dto2.getTotalSeparateAmount(), dto2.getLklAmount(), dto2.getShippingFee(), dto2.getCanSeparateAmount(), dto2.getRefCanSeparateAmount(),
dto2.getMchAmount(), dto2.getPlatAmount(), dto2.getAgent1stAmount(), dto2.getAgent2ndAmount());
@@ -182,15 +183,15 @@ public class LklSeparateDTO implements java.io.Serializable {
* 5. 按优先级计算各参与方分账金额(商户 > 平台 > 一级代理商 > 二级代理商)
* 6. 确保总额平衡并保障各参与方分账比例
*
- * @return 分账结果是否成功
+ * @return Pair 分账结果是否成功和失败的原因
*/
- public boolean calcOnCanAmount() {
+ public Pair calcOnCanSeparateAmount() {
// 设置分账计算方法类型
isBasedOnTotalAmount = false;
// 检查前提条件
if (!validateInputs()) {
- return false;
+ return Pair.of(false, "分账参数不全");
}
logger.info("开始基于可分账金额的分账计算,总金额={}分,配送费={}分", totalSeparateAmount, shippingFee);
@@ -201,8 +202,9 @@ public class LklSeparateDTO implements java.io.Serializable {
// 计算可分账金额
calculateCanSeparateAmount();
if (canSeparateAmount <= 0) {
- logger.info("分账计算失败:可分账金额必须大于0,当前值={}", canSeparateAmount);
- return false;
+ String errorMsg = "分账计算失败:可分账金额必须大于0,当前值=" + canSeparateAmount;
+ logger.info(errorMsg);
+ return Pair.of(false, errorMsg);
}
// 检查并应用参考可分账金额
@@ -220,9 +222,10 @@ public class LklSeparateDTO implements java.io.Serializable {
// 保障各参与方分账比例
guaranteeRatios();
- logger.info("基于可分账金额的分账计算完成:拉卡拉={}分, 平台={}分, 一级代理商={}分, 二级代理商={}分, 商户={}分",
+ String successMsg = String.format("基于可分账金额的分账计算完成:拉卡拉=%d分, 平台=%d分, 一级代理商=%d分, 二级代理商=%d分, 商户=%d分",
lklAmount, platAmount, agent1stAmount, agent2ndAmount, mchAmount);
- return true;
+ logger.info(successMsg);
+ return Pair.of(true, successMsg);
}
/**
@@ -236,15 +239,15 @@ public class LklSeparateDTO implements java.io.Serializable {
* 5. 按优先级计算各参与方分账金额(平台 > 一级代理商 > 二级代理商 > 商户),基于可分账金额进行分账
* 6. 确保总额平衡并保障各参与方分账比例
*
- * @return 分账结果是否成功
+ * @return Pair 分账结果是否成功和失败的原因
*/
- public boolean calcOnTotalAmount() {
+ public Pair calcOnTotalAmount() {
// 设置分账计算方法类型
isBasedOnTotalAmount = true;
// 检查前提条件
if (!validateInputsForTotalAmount()) {
- return false;
+ return Pair.of(false, "分账参数不全");
}
logger.info("开始基于总金额的分账计算,总金额={}分,配送费={}分", totalSeparateAmount, shippingFee);
@@ -255,8 +258,9 @@ public class LklSeparateDTO implements java.io.Serializable {
// 计算可分账金额
calculateCanSeparateAmount();
if (canSeparateAmount <= 0) {
- logger.info("基于总金额的分账计算失败:可分账金额必须大于0,当前值={}", canSeparateAmount);
- return false;
+ String errorMsg = "基于总金额的分账计算失败:可分账金额必须大于0,当前值=" + canSeparateAmount;
+ logger.info(errorMsg);
+ return Pair.of(false, errorMsg);
}
// 调整分账比例
@@ -274,9 +278,10 @@ public class LklSeparateDTO implements java.io.Serializable {
// 保障各参与方分账比例(忽略商户比例保障)
guaranteeRatiosForTotalAmount();
- logger.info("基于总金额的分账计算完成:拉卡拉={}分, 平台={}分, 一级代理商={}分, 二级代理商={}分, 商户={}分",
+ String successMsg = String.format("基于总金额的分账计算完成:拉卡拉=%d分, 平台=%d分, 一级代理商=%d分, 二级代理商=%d分, 商户=%d分",
lklAmount, platAmount, agent1stAmount, agent2ndAmount, mchAmount);
- return true;
+ logger.info(successMsg);
+ return Pair.of(true, successMsg);
}
/**
diff --git a/mall-common/src/main/java/com/suisung/mall/common/service/impl/CommonService.java b/mall-common/src/main/java/com/suisung/mall/common/service/impl/CommonService.java
index 00ffece4..2ca316e6 100644
--- a/mall-common/src/main/java/com/suisung/mall/common/service/impl/CommonService.java
+++ b/mall-common/src/main/java/com/suisung/mall/common/service/impl/CommonService.java
@@ -257,4 +257,5 @@ public class CommonService {
return null;
}
+
}
diff --git a/mall-pay/src/main/java/com/suisung/mall/pay/service/AccountBaseConfigService.java b/mall-pay/src/main/java/com/suisung/mall/pay/service/AccountBaseConfigService.java
index b8011775..7236c9f7 100644
--- a/mall-pay/src/main/java/com/suisung/mall/pay/service/AccountBaseConfigService.java
+++ b/mall-pay/src/main/java/com/suisung/mall/pay/service/AccountBaseConfigService.java
@@ -39,4 +39,19 @@ public interface AccountBaseConfigService extends IBaseService
+ * 根据配置键获取对应的配置值,如果配置值为空则返回空字符串。
+ *
+ *
+ * @param configKey 配置键
+ * @return 配置值,如果找不到或为空则返回空字符串
+ */
+ @Override
+ public String getSystemConfig(String configKey) {
+ // 参数校验
+ if (StrUtil.isBlank(configKey)) {
+ log.warn("[系统配置] 参数校验失败:配置键不能为空");
+ return "";
+ }
+
+ try {
+ String configValue = accountService.getAccountBaseConfigValue(configKey);
+ return StrUtil.blankToDefault(configValue, "0");
+ } catch (Exception e) {
+ log.error("[系统配置] 获取配置值异常,configKey={}", configKey, e);
+ return "";
+ }
+ }
+
+ /**
+ * 获取平台内部最低配送费,单位(分)
+ *
+ * @return
+ */
+ @Override
+ public Integer getInnerMinDeliveryFee() {
+ String v = getSystemConfig(CommonConstant.Inner_Min_DeliveryFee_Key);
+ return NumberUtil.isNumber(v) ? Convert.toInt(v) : 0;
+ }
+
/**
* 交易模式 2直接交易:商家直接收款; 1担保交易:平台收款,平台和商家结算。
*/
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 1b662ccf..af84ef61 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
@@ -28,10 +28,8 @@ import com.suisung.mall.common.modules.store.ShopStoreBase;
import com.suisung.mall.common.utils.DateTimeUtils;
import com.suisung.mall.common.utils.I18nUtil;
import com.suisung.mall.common.utils.RestTemplateHttpUtil;
+import com.suisung.mall.pay.service.AccountBaseConfigService;
import com.suisung.mall.pay.service.LakalaPayService;
-import com.suisung.mall.pay.service.LklLedgerMemberService;
-import com.suisung.mall.pay.service.LklLedgerMerReceiverBindService;
-import com.suisung.mall.pay.service.LklLedgerReceiverService;
import com.suisung.mall.pay.utils.LakalaUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
@@ -81,14 +79,9 @@ public class LakalaPayServiceImpl implements LakalaPayService {
@Autowired
private ShopService shopService;
+ @Lazy
@Autowired
- private LklLedgerMemberService lklLedgerMemberService;
-
- @Autowired
- private LklLedgerReceiverService lklLedgerReceiverService;
-
- @Autowired
- private LklLedgerMerReceiverBindService lklLedgerMerReceiverBindService;
+ private AccountBaseConfigService accountBaseConfigService;
/**
* 初始化 拉卡拉SDK
@@ -254,6 +247,10 @@ public class LakalaPayServiceImpl implements LakalaPayService {
return respBody;
}
+ // 平台最低配送费,单位(分)
+ Integer innerMinDeliverFee = accountBaseConfigService.getInnerMinDeliveryFee();
+ reqData.set("shopping_fee_inner", innerMinDeliverFee); // 平台内部最低配送费,单位(分)
+
log.info("[拉卡拉预下单] 支付成功,准备保存订单记录, orderId={}", orderId);
// 新增一个拉卡拉订单记录 shop_order_lkl 表
JSONObject lklPayReqAndRespJson = new JSONObject();
@@ -479,7 +476,7 @@ public class LakalaPayServiceImpl implements LakalaPayService {
log.info("[拉卡拉合单预下单] 支付成功,准备保存订单记录, orderId={} shopping_fee_inner={}", orderId, agentAmountInt);
// 新增一个拉卡拉订单记录 shop_order_lkl 表
JSONObject lklPayReqAndRespJson = new JSONObject();
- reqData.set("shopping_fee_inner", agentAmountInt); // 内部配送费
+ reqData.set("shopping_fee_inner", agentAmountInt); // 平台内部最低配送费,单位(分)
lklPayReqAndRespJson.put("req", reqData);
lklPayReqAndRespJson.put("resp", respBody); // 返回原始响应数据
diff --git a/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/PayUserPayServiceImpl.java b/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/PayUserPayServiceImpl.java
index 76ac9e18..4077e7b5 100644
--- a/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/PayUserPayServiceImpl.java
+++ b/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/PayUserPayServiceImpl.java
@@ -130,10 +130,6 @@ public class PayUserPayServiceImpl extends BaseServiceImpl innerDoOrderSeparateByMerchantAndLogNo(String lklMerchantNo, String receiveTradeNo, String receiveLogNo) {
// 1. 输入参数校验
- if (StrUtil.isBlank(lklMerchantNo) || StrUtil.isBlank(receiveTradeNo) || StrUtil.isBlank(receiveLogNo)) {
+ if (StrUtil.hasBlank(lklMerchantNo, receiveTradeNo, receiveLogNo)) {
log.warn("[分账操作] 参数校验失败:缺少必要参数, lklMerchantNo={}, receiveTradeNo={}, receiveLogNo={}",
lklMerchantNo, receiveTradeNo, receiveLogNo);
return Pair.of(false, "缺少必要参数");
}
try {
- log.info("[分账操作] 开始处理分账请求, lklMerchantNo={}, receiveTradeNo={}, receiveLogNo={}",
- lklMerchantNo, receiveTradeNo, receiveLogNo);
-
// 2. 查询订单信息
ShopOrderLkl shopOrderLkl = shopOrderLklService.getByLklMchNoAndReceiveTradeNoAndReceiveLogNo(lklMerchantNo, receiveTradeNo, receiveLogNo);
if (shopOrderLkl == null) {
- log.warn("[分账操作] 失败:对账流水号[{}]不存在", receiveLogNo);
+ log.warn("[分账操作] lklMerchantNo={}, receiveTradeNo={}, receiveLogNo={} 查询订单不存在", lklMerchantNo, receiveTradeNo, receiveLogNo);
return Pair.of(false, "订单不存在");
}
String orderId = shopOrderLkl.getOrder_id();
- log.info("[分账操作] 开始处理订单[{}]的分账", orderId);
+ log.info("[分账操作] 开始处理分账请求, lklMerchantNo={}, receiveTradeNo={}, receiveLogNo={},orderId={}",
+ lklMerchantNo, receiveTradeNo, receiveLogNo, orderId);
// 3. 检查订单状态
if (!CommonConstant.Enable.equals(shopOrderLkl.getReceive_status())) {
- log.warn("[分账操作] 订单[{}]交易流水号[{}]未被确认收货,跳过处理", orderId, receiveTradeNo);
+ log.warn("[分账操作] 订单{}交易流水号{}未被确认收货,跳过处理", orderId, receiveTradeNo);
return Pair.of(false, "订单未确认收货,暂无法分账");
}
// 4. 检查分账状态,避免重复处理
- LklOrderSeparate existingSeparateRecord = lklOrderSeparateService.getByLogNoAndOutTradeNo(shopOrderLkl.getLkl_receive_log_no(), shopOrderLkl.getOut_separate_no());
+ LklOrderSeparate existingSeparateRecord = lklOrderSeparateService.getByLogNoAndOutTradeNo(
+ shopOrderLkl.getLkl_receive_log_no(), shopOrderLkl.getOut_separate_no());
+
if (existingSeparateRecord != null) {
String status = existingSeparateRecord.getStatus();
- if ("SUCCESS".equals(status)) {
- log.info("[分账操作] 订单[{}]交易对账流水号[{}]已完成分账,跳过处理", orderId, shopOrderLkl.getLkl_receive_log_no());
- return Pair.of(true, "订单已处理");
- }
- if ("PROCESSING".equals(status) || "ACCEPTED".equals(status)) {
- log.info("[分账操作] 订单[{}]交易对账流水号[{}]分账处理中或已受理,跳过处理", orderId, shopOrderLkl.getLkl_receive_log_no());
- return Pair.of(true, "订单已处理中或已受理");
- }
- } else {
- if (CommonConstant.Enable.equals(shopOrderLkl.getSeparate_status())) {
- log.warn("[分账操作] 订单[{}]交易流水号[{}]订单已分账,跳过处理", orderId, receiveTradeNo);
- return Pair.of(true, "订单已分账,请勿重复操作");
+ switch (status) {
+ case "SUCCESS":
+ log.info("[分账操作] 订单[{}]交易对账流水号[{}]已完成分账,跳过处理", orderId, shopOrderLkl.getLkl_receive_log_no());
+ return Pair.of(true, "订单已处理");
+ case "PROCESSING":
+ case "ACCEPTED":
+ log.info("[分账操作] 订单[{}]交易对账流水号[{}]分账处理中或已受理,跳过处理", orderId, shopOrderLkl.getLkl_receive_log_no());
+ return Pair.of(true, "订单已处理中或已受理");
}
+ } else if (CommonConstant.Enable.equals(shopOrderLkl.getSeparate_status())) {
+ log.warn("[分账操作] 订单[{}]交易流水号[{}]订单已分账,跳过处理", orderId, receiveTradeNo);
+ return Pair.of(true, "订单已分账,请勿重复操作");
}
- // 可分账金额
- Integer canSeparateAmt = null;
// 5. 检查可分账余额
+ Integer canSeparateAmt = null;
Pair mchCanSplitAmt = queryMchCanSplitAmt(lklMerchantNo, receiveLogNo, shopOrderLkl.getLkl_log_date());
if (mchCanSplitAmt != null) {
- log.error("[分账操作] 查询可分账余额失败:lklMerchantNo={} logDate={} receiveLogNo={}", lklMerchantNo, shopOrderLkl.getLkl_log_date(), receiveLogNo);
+ log.info("[分账操作] 查询拉卡拉可分账余额接口:lklMerchantNo={} logDate={} receiveLogNo={}",
+ lklMerchantNo, shopOrderLkl.getLkl_log_date(), receiveLogNo);
// 可分账金额
canSeparateAmt = Convert.toInt(mchCanSplitAmt.getSecond());
if (canSeparateAmt == null || canSeparateAmt <= 0) {
- log.warn("[分账操作] lklMerchantNo={} receiveTradeNo={} receiveLogNo={} 查询拉卡拉返回的可分账金额={}分,系统将自动计算可分账金额",
- lklMerchantNo, receiveTradeNo, receiveLogNo, canSeparateAmt);
+ log.warn("[分账操作] lklMerchantNo={} receiveTradeNo={} receiveLogNo={} 拉卡拉可分账金额无值或0,系统将自动计算可分账金额",
+ lklMerchantNo, receiveTradeNo, receiveLogNo);
}
}
-
// 6. 获取订单分账相关参数
String merchantNo = shopOrderLkl.getLkl_merchant_no();
// 获取商家分账比例并校验
- BigDecimal merchantSplitRatioRaw = shopOrderLkl.getSplit_ratio();
- boolean canSplitForMerchant = merchantSplitRatioRaw != null
- && merchantSplitRatioRaw.compareTo(BigDecimal.ZERO) > 0
- && merchantSplitRatioRaw.compareTo(new BigDecimal(100)) <= 0;
- if (!canSplitForMerchant) {
+ BigDecimal mchSplitRatioRaw = shopOrderLkl.getSplit_ratio();
+ if (mchSplitRatioRaw == null ||
+ mchSplitRatioRaw.compareTo(BigDecimal.ZERO) <= 0 ||
+ mchSplitRatioRaw.compareTo(new BigDecimal(100)) > 0) {
log.error("[分账操作] 店铺[{}]商家分账比例[{}]不在(0-100]范围内,无法分账",
- shopOrderLkl.getStore_id(), merchantSplitRatioRaw);
+ shopOrderLkl.getStore_id(), mchSplitRatioRaw);
return Pair.of(false, "商家分账比例有误");
}
// 计算商家分账比例(转换为小数)
- BigDecimal merchantSplitRatio = merchantSplitRatioRaw.divide(new BigDecimal(100));
+ BigDecimal mchSplitRatio = mchSplitRatioRaw.divide(new BigDecimal(100));
// 获取分账平台接收方信息
LklLedgerMerReceiverBind platformReceiver = lklLedgerMerReceiverBindService.getPlatformByMerCupNo(merchantNo);
@@ -2221,8 +2219,8 @@ public class LakalaApiServiceImpl implements LakalaApiService {
BigDecimal distributorSplitRatio = BigDecimal.ZERO;
List distributorReceivers = lklLedgerMerReceiverBindService.selectDistributorByMerCupNo(merchantNo);
- if (distributorReceivers != null && !distributorReceivers.isEmpty()) {
- distributorSplitRatio = BigDecimal.valueOf(1).subtract(platformSplitRatio).subtract(merchantSplitRatio);
+ if (CollUtil.isNotEmpty(distributorReceivers)) {
+ distributorSplitRatio = BigDecimal.valueOf(1).subtract(platformSplitRatio).subtract(mchSplitRatio);
log.debug("[分账操作] 检测到代理商存在,调整分账比例: 代理商比例={}, 平台比例={}", distributorSplitRatio, platformSplitRatio);
}
@@ -2235,30 +2233,31 @@ public class LakalaApiServiceImpl implements LakalaApiService {
lklSeparateDTO.setTotalSeparateAmount(shopOrderLkl.getTotal_amt());
lklSeparateDTO.setShippingFee(shoppingFeeInner);
lklSeparateDTO.setLklRatio(wxFeeRatio); // 拉卡拉给的微信分账比例 0.0025 千分之2.5
- lklSeparateDTO.setMchRatio(merchantSplitRatio);
+ lklSeparateDTO.setMchRatio(mchSplitRatio);
lklSeparateDTO.setPlatRatio(platformSplitRatio);
if (distributorSplitRatio.compareTo(BigDecimal.ZERO) > 0) { // 二级代理商参与分账
lklSeparateDTO.setAgent2ndRatio(distributorSplitRatio);
}
lklSeparateDTO.setRefCanSeparateAmount(canSeparateAmt); // 拉卡拉实时返回的可分账金额
-
// 分账方式:根据可分账金额分账
- if (!lklSeparateDTO.calcOnCanAmount()) {
- log.error("[分账操作] 分账系统评估各项参数,发现无法分账 {}", lklSeparateDTO);
- return Pair.of(false, "分账系统评估各项参数,发现无法分账");
- }
-
- if (CheckUtil.isEmpty(canSeparateAmt)) {
- canSeparateAmt = lklSeparateDTO.getCanSeparateAmount();
+ Pair canSeparateAmtResult = lklSeparateDTO.calcOnCanSeparateAmount();
+ if (!canSeparateAmtResult.getFirst()) {
+ log.error("[分账操作] 分账参数评估,结果无法分账 {}", lklSeparateDTO);
+ return Pair.of(false, "分账参数评估,结果无法分账");
}
log.debug("[分账操作] 分账参数计算结果:{}", lklSeparateDTO);
// 更新分账计算结果
shopOrderLkl.setSeparate_remark(lklSeparateDTO.toString());
- shopOrderLkl.setSplit_amt(canSeparateAmt);
- shopOrderLklService.updateById(shopOrderLkl);
+ if (CheckUtil.isEmpty(canSeparateAmt)) {
+ shopOrderLkl.setSplit_amt(lklSeparateDTO.getCanSeparateAmount());
+ canSeparateAmt = lklSeparateDTO.getCanSeparateAmount();
+ } else {
+ shopOrderLkl.setSplit_amt_ref(canSeparateAmt);
+ }
+ shopOrderLklService.safeUpdate(shopOrderLkl);
// 分账金额校验
if (canSeparateAmt <= 0) {
@@ -2279,11 +2278,12 @@ public class LakalaApiServiceImpl implements LakalaApiService {
Integer agentAmount = lklSeparateDTO.getAgent2ndAmount();
log.info("[分账操作] 金额计算结果:订单={}, 商户={}, 总金额={}分, 可分金额={}分, 商家比例={}, 商家分得={}分, 平台比例={}, 平台分得={}分, 代理商比例={}, 代理商分得={}分",
- orderId, merchantNo, shopOrderLkl.getTotal_amt(), canSeparateAmt, merchantSplitRatio, merchantAmount, platformSplitRatio, platformAmount, distributorSplitRatio, agentAmount);
+ orderId, merchantNo, shopOrderLkl.getTotal_amt(), canSeparateAmt, mchSplitRatio, merchantAmount,
+ platformSplitRatio, platformAmount, distributorSplitRatio, agentAmount);
// 构建分账接收方分账参数
// 商家分账参数
- if (merchantAmount > 0) {
+ if (merchantAmount != null && merchantAmount > 0) {
V3SacsSeparateRecvDatas receiver = new V3SacsSeparateRecvDatas();
receiver.setRecvMerchantNo(merchantNo);
receiver.setSeparateValue(merchantAmount.toString());
@@ -2292,7 +2292,7 @@ public class LakalaApiServiceImpl implements LakalaApiService {
}
// 平台分账参数
- if (platformAmount > 0) {
+ if (platformAmount != null && platformAmount > 0) {
V3SacsSeparateRecvDatas receiver = new V3SacsSeparateRecvDatas();
receiver.setRecvNo(platformReceiver.getReceiver_no());
receiver.setSeparateValue(platformAmount.toString());
@@ -2301,7 +2301,7 @@ public class LakalaApiServiceImpl implements LakalaApiService {
}
// 二级代理商(县级)分账参数
- if (agentAmount > 0 && distributorReceivers != null && !distributorReceivers.isEmpty()) {
+ if (agentAmount != null && agentAmount > 0 && CollUtil.isNotEmpty(distributorReceivers)) {
V3SacsSeparateRecvDatas receiver = new V3SacsSeparateRecvDatas();
receiver.setRecvNo(distributorReceivers.get(0).getReceiver_no());
receiver.setSeparateValue(agentAmount.toString());
diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/order/service/ShopOrderLklService.java b/mall-shop/src/main/java/com/suisung/mall/shop/order/service/ShopOrderLklService.java
index 19c16ae5..de12a6d4 100644
--- a/mall-shop/src/main/java/com/suisung/mall/shop/order/service/ShopOrderLklService.java
+++ b/mall-shop/src/main/java/com/suisung/mall/shop/order/service/ShopOrderLklService.java
@@ -104,4 +104,13 @@ public interface ShopOrderLklService extends IBaseService {
* @return
*/
Boolean updateSeparateStatusByReceiveLogNo(String lklReceiveLogNo, Integer separateStatus, String separateRemark);
+
+
+ /**
+ * 不抛异常更新
+ *
+ * @param record
+ * @return
+ */
+ Boolean safeUpdate(ShopOrderLkl record);
}
diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/order/service/impl/ShopOrderLklServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/order/service/impl/ShopOrderLklServiceImpl.java
index 4703d762..5dc261b8 100644
--- a/mall-shop/src/main/java/com/suisung/mall/shop/order/service/impl/ShopOrderLklServiceImpl.java
+++ b/mall-shop/src/main/java/com/suisung/mall/shop/order/service/impl/ShopOrderLklServiceImpl.java
@@ -534,6 +534,9 @@ public class ShopOrderLklServiceImpl extends BaseServiceImpl updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("lkl_receive_log_no", lklReceiveLogNo);
updateWrapper.set("separate_status", separateStatus);
+ if (StrUtil.isNotBlank(separateRemark)) {
+ updateWrapper.set("separate_remark", separateRemark);
+ }
boolean result = update(updateWrapper);
@@ -549,4 +552,48 @@ public class ShopOrderLklServiceImpl extends BaseServiceImpl
+ * 该方法用于更新拉卡拉订单记录,不会抛出异常,而是在出现错误时返回false。
+ *
+ *
+ * @param record 拉卡拉订单记录
+ * @return 更新结果 true-成功 false-失败
+ */
+ @Override
+ public Boolean safeUpdate(ShopOrderLkl record) {
+ // 参数校验
+ if (record == null) {
+ log.warn("[安全更新] 参数校验失败:记录不能为空");
+ return false;
+ }
+
+ if (record.getId() == null) {
+ log.warn("[安全更新] 参数校验失败:记录ID不能为空");
+ return false;
+ }
+
+ try {
+ log.debug("[安全更新] 开始更新拉卡拉订单记录, orderId={}, id={}",
+ record.getOrder_id(), record.getId());
+
+ boolean result = updateById(record);
+
+ if (result) {
+ log.info("[安全更新] 拉卡拉订单记录更新成功, orderId={}, id={}",
+ record.getOrder_id(), record.getId());
+ } else {
+ log.warn("[安全更新] 拉卡拉订单记录更新失败, orderId={}, id={}",
+ record.getOrder_id(), record.getId());
+ }
+
+ return result;
+ } catch (Exception e) {
+ log.error("[安全更新] 拉卡拉订单记录更新异常, orderId={}, id={}",
+ record.getOrder_id(), record.getId(), e);
+ return false;
+ }
+ }
}
diff --git a/mall-shop/src/main/resources/bootstrap-dev.yml b/mall-shop/src/main/resources/bootstrap-dev.yml
index ca564e44..8ccdb5e1 100644
--- a/mall-shop/src/main/resources/bootstrap-dev.yml
+++ b/mall-shop/src/main/resources/bootstrap-dev.yml
@@ -161,10 +161,6 @@ lakala:
#机构代码
org_code: 1951582
is_prod: false
- # 是否收内部邮费
- has_shopping_fee_inner: true
- # 内部邮费,单位(分)
- shopping_fee_inner: 500
# 拉卡拉拓客进件配置
tk:
#服务地址
diff --git a/mall-shop/src/main/resources/bootstrap-local.yml b/mall-shop/src/main/resources/bootstrap-local.yml
index 973fdfdf..a74f6a1b 100644
--- a/mall-shop/src/main/resources/bootstrap-local.yml
+++ b/mall-shop/src/main/resources/bootstrap-local.yml
@@ -161,10 +161,6 @@ lakala:
#机构代码
org_code: 1951582
is_prod: false
- # 是否收内部邮费
- has_shopping_fee_inner: true
- # 内部邮费,单位(分)
- shopping_fee_inner: 500
# 拉卡拉拓客进件配置
tk:
#服务地址
diff --git a/mall-shop/src/main/resources/bootstrap-prod.yml b/mall-shop/src/main/resources/bootstrap-prod.yml
index df4a415f..dd8d906d 100644
--- a/mall-shop/src/main/resources/bootstrap-prod.yml
+++ b/mall-shop/src/main/resources/bootstrap-prod.yml
@@ -177,10 +177,6 @@ lakala:
#机构代码
org_code: 980688
is_prod: true
- # 是否收内部邮费
- has_shopping_fee_inner: false
- # 内部邮费,单位(分)
- shopping_fee_inner: 500
tk:
#服务地址
server_url: https://tkapi.lakala.com
diff --git a/mall-shop/src/main/resources/bootstrap-test.yml b/mall-shop/src/main/resources/bootstrap-test.yml
index 63d28ef1..ae01b836 100644
--- a/mall-shop/src/main/resources/bootstrap-test.yml
+++ b/mall-shop/src/main/resources/bootstrap-test.yml
@@ -165,10 +165,6 @@ lakala:
#机构代码
org_code: 1951582
is_prod: false
- # 是否收内部邮费
- has_shopping_fee_inner: true
- # 内部邮费,单位(分)
- shopping_fee_inner: 500
# 拉卡拉拓客进件配置
tk:
#服务地址
diff --git a/mall-shop/src/main/resources/bootstrap-uat.yml b/mall-shop/src/main/resources/bootstrap-uat.yml
index 63d28ef1..ae01b836 100644
--- a/mall-shop/src/main/resources/bootstrap-uat.yml
+++ b/mall-shop/src/main/resources/bootstrap-uat.yml
@@ -165,10 +165,6 @@ lakala:
#机构代码
org_code: 1951582
is_prod: false
- # 是否收内部邮费
- has_shopping_fee_inner: true
- # 内部邮费,单位(分)
- shopping_fee_inner: 500
# 拉卡拉拓客进件配置
tk:
#服务地址