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: #服务地址