From 69e97f1b289879080ebc56e2305e563b515eefa4 Mon Sep 17 00:00:00 2001 From: Jack <46790855@qq.com> Date: Fri, 22 Aug 2025 18:11:58 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=88=86=E8=B4=A6=E6=B5=81?= =?UTF-8?q?=E7=A8=8B=EF=BC=8C=E8=BF=90=E8=B4=B9=E7=94=B1=E7=AC=AC=E4=B8=89?= =?UTF-8?q?=E5=95=86=E6=88=B7=E4=BB=A3=E6=94=B6=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/LakalaApiServiceImpl.java | 56 ++++++++++--------- .../service/impl/ShopOrderLklServiceImpl.java | 3 +- .../src/main/resources/bootstrap-prod.yml | 4 +- 3 files changed, 34 insertions(+), 29 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 76bde410..08742041 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 @@ -591,7 +591,6 @@ public class LakalaApiServiceImpl implements LakalaApiService { req.setVersion("2.0"); req.setOrderNo(StringUtils.genLklOrderNo(8));// 14位年月日时(24小时制)分秒+8位的随机数 req.setOrgCode(orgCode); -// req.setMerInnerNo(shopMchEntry.getLkl_mer_inner_no());// 从进件申请返回的内部商户号 req.setMerCupNo(shopMchEntry.getLkl_mer_cup_no()); // 从进件申请返回的商户号(不要传入内部商户号,传银联商户号才有效) req.setContactMobile(shopMchEntry.getLogin_mobile()); // 商户入驻注册的手机号 // 分账比例为了考虑低价订单的运费占比高,分账比例暂时定70%分账给商户,30%分账给平台 @@ -601,13 +600,6 @@ public class LakalaApiServiceImpl implements LakalaApiService { req.setSplitEntrustFileName(fileName); // TODO 分账结算委托书文件上传到拉卡拉服务器 -// JSONObject fileUploadResp = uploadFile(req.getOrderNo(), "SPLIT_ENTRUST_FILE", StringUtils.getFileExt(fileName), UploadUtil.fileUrlToBase64(shopMchEntry.getContract_download_url())); -// if (fileUploadResp == null || StrUtil.isBlank(fileUploadResp.getStr("attFileId"))) { -// log.error("商家分账授权委托书{}上传失败!", shopMchEntry.getContract_download_url()); -// // return Pair.of(false, I18nUtil._("商家分账授权委托书上传失败!")); -//// throw new ApiException(I18nUtil._("商家分账授权委托书上传失败!")); -// } - String splitEntrustFilePath = shopMchEntry.getLkl_ec_file_path(); //fileUploadResp.getStr("attFileId"); req.setSplitEntrustFilePath(splitEntrustFilePath); //比如:MMS/20250519/165150-39c8bbca513b4cccab1e942999021fd6.pdf; @@ -1617,13 +1609,27 @@ public class LakalaApiServiceImpl implements LakalaApiService { } String merchantNo = shopOrderLkl.getLkl_merchant_no(); - Integer paymentAmount = shopOrderLkl.getTotal_amt(); + // 分账金额 = 应付总金额-运费 + Integer totalAmt = shopOrderLkl.getTotal_amt(); + totalAmt = CheckUtil.isEmpty(totalAmt) ? 0 : totalAmt; Integer shoppingFee = shopOrderLkl.getShopping_fee(); + shoppingFee = CheckUtil.isEmpty(shoppingFee) ? 0 : shoppingFee; + // 商家分账比例 BigDecimal splitRatioMch = shopOrderLkl.getSplit_ratio(); // 金额合法性校验 - if (paymentAmount <= 0 || (shoppingFee != null && paymentAmount <= shoppingFee)) { - String errorMsg = String.format("店铺[%s]订单金额异常或运费过高,跳过分账", shopOrderLkl.getStore_id()); +// if (paymentAmount <= 0 || (shoppingFee != null && paymentAmount <= shoppingFee)) { +// String errorMsg = String.format("店铺[%s]订单金额异常或运费过高,跳过分账", shopOrderLkl.getStore_id()); +// log.error(errorMsg); +// errorMessages.append(errorMsg).append("; "); +// lklOrderSeparateService.updateRemark(lklOrderSeparateExist.getId(), errorMsg); +// continue; +// } + + // 分账总金额,单位(分) + Integer splitAmount = totalAmt - shoppingFee; + if (splitAmount <= 0) { + String errorMsg = String.format("店铺[%s]订单分账金额异常,跳过分账", shopOrderLkl.getStore_id()); log.error(errorMsg); errorMessages.append(errorMsg).append("; "); lklOrderSeparateService.updateRemark(lklOrderSeparateExist.getId(), errorMsg); @@ -1642,11 +1648,12 @@ public class LakalaApiServiceImpl implements LakalaApiService { continue; } - // 判断是否可以分账(商家比例非100%) - boolean canSplit = splitRatioMch != null && splitRatioMch.compareTo(new BigDecimal("100")) < 0; + // 判断是否可以分账(商家比例不超过100%) + boolean canSplit = splitRatioMch != null && splitRatioMch.compareTo(new BigDecimal("100")) <= 0; if (!canSplit) { - String errorMsg = String.format("店铺[%s]分账比例为0,仅扣除运费", shopOrderLkl.getStore_id()); + String errorMsg = String.format("店铺[%s]分账比例异常,无法分账", shopOrderLkl.getStore_id()); log.error(errorMsg); + continue; } // 构建分账请求对象 @@ -1655,7 +1662,7 @@ public class LakalaApiServiceImpl implements LakalaApiService { request.setLogNo(shopOrderLkl.getLkl_log_no()); request.setLogDate(shopOrderLkl.getLkl_log_date()); request.setOutSeparateNo(orderId); - request.setTotalAmt(paymentAmount.toString()); + request.setTotalAmt(splitAmount.toString()); request.setLklOrgNo(orgCode); request.setCalType("0"); request.setNotifyUrl(projectDomain + "/api/mobile/shop/lakala/sacs/separateNotify"); @@ -1663,25 +1670,24 @@ public class LakalaApiServiceImpl implements LakalaApiService { // 构建分账接收方列表 List recvDatas = new ArrayList<>(); - // 1. 先处理运费分账(如果有运费) - if (shoppingFee != null && shoppingFee > 0) { - V3SacsSeparateRecvDatas receiver = new V3SacsSeparateRecvDatas(); - receiver.setRecvNo(platform.getReceiver_no()); - receiver.setSeparateValue(shoppingFee.toString()); - recvDatas.add(receiver); - } + // 1. 先处理运费分账(如果有运费) == update 2025-08-22 运费不分账了,走合单拆分,直接打给商家 +// if (shoppingFee != null && shoppingFee > 0) { +// V3SacsSeparateRecvDatas receiver = new V3SacsSeparateRecvDatas(); +// receiver.setRecvNo(platform.getReceiver_no()); +// receiver.setSeparateValue(shoppingFee.toString()); +// recvDatas.add(receiver); +// } Integer totalSeparateValue = 0;// 平台方和代理商总计分账金额 // 2. 再处理剩余金额的分账(如果可以分账) if (canSplit) { // 计算实际可分账金额(扣除运费后) - Integer splitAmount = paymentAmount - shoppingFee; +// Integer splitAmount = totalAmt - shoppingFee; // 计算平台+代理商的总比例 BigDecimal splitRatioNoMch = new BigDecimal("100").subtract(splitRatioMch); - if (!CollectionUtils.isEmpty(distributors) && splitRatioNoMch.compareTo(BigDecimal.ONE) > 0) { - // 平台+代理商分账模式 + if (!CollectionUtils.isEmpty(distributors) && splitRatioNoMch.compareTo(BigDecimal.ONE) > 0) { // 平台+代理商分账模式 // 平台收取1%手续费 BigDecimal platformValue = CommonUtil.DecimalRoundHalfDown(new BigDecimal(splitAmount).multiply(new BigDecimal("0.01"))); if (platformValue.compareTo(BigDecimal.ZERO) > 0) { 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 71433bd8..60c56677 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 @@ -155,7 +155,6 @@ public class ShopOrderLklServiceImpl extends BaseServiceImpl