修改分账流程,运费由第三商户代收。
This commit is contained in:
parent
fc72297f2a
commit
69e97f1b28
@ -591,7 +591,6 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
|||||||
req.setVersion("2.0");
|
req.setVersion("2.0");
|
||||||
req.setOrderNo(StringUtils.genLklOrderNo(8));// 14位年月日时(24小时制)分秒+8位的随机数
|
req.setOrderNo(StringUtils.genLklOrderNo(8));// 14位年月日时(24小时制)分秒+8位的随机数
|
||||||
req.setOrgCode(orgCode);
|
req.setOrgCode(orgCode);
|
||||||
// req.setMerInnerNo(shopMchEntry.getLkl_mer_inner_no());// 从进件申请返回的内部商户号
|
|
||||||
req.setMerCupNo(shopMchEntry.getLkl_mer_cup_no()); // 从进件申请返回的商户号(不要传入内部商户号,传银联商户号才有效)
|
req.setMerCupNo(shopMchEntry.getLkl_mer_cup_no()); // 从进件申请返回的商户号(不要传入内部商户号,传银联商户号才有效)
|
||||||
req.setContactMobile(shopMchEntry.getLogin_mobile()); // 商户入驻注册的手机号
|
req.setContactMobile(shopMchEntry.getLogin_mobile()); // 商户入驻注册的手机号
|
||||||
// 分账比例为了考虑低价订单的运费占比高,分账比例暂时定70%分账给商户,30%分账给平台
|
// 分账比例为了考虑低价订单的运费占比高,分账比例暂时定70%分账给商户,30%分账给平台
|
||||||
@ -601,13 +600,6 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
|||||||
req.setSplitEntrustFileName(fileName);
|
req.setSplitEntrustFileName(fileName);
|
||||||
|
|
||||||
// TODO 分账结算委托书文件上传到拉卡拉服务器
|
// 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");
|
String splitEntrustFilePath = shopMchEntry.getLkl_ec_file_path(); //fileUploadResp.getStr("attFileId");
|
||||||
req.setSplitEntrustFilePath(splitEntrustFilePath); //比如:MMS/20250519/165150-39c8bbca513b4cccab1e942999021fd6.pdf;
|
req.setSplitEntrustFilePath(splitEntrustFilePath); //比如:MMS/20250519/165150-39c8bbca513b4cccab1e942999021fd6.pdf;
|
||||||
|
|
||||||
@ -1617,13 +1609,27 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
String merchantNo = shopOrderLkl.getLkl_merchant_no();
|
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();
|
Integer shoppingFee = shopOrderLkl.getShopping_fee();
|
||||||
|
shoppingFee = CheckUtil.isEmpty(shoppingFee) ? 0 : shoppingFee;
|
||||||
|
// 商家分账比例
|
||||||
BigDecimal splitRatioMch = shopOrderLkl.getSplit_ratio();
|
BigDecimal splitRatioMch = shopOrderLkl.getSplit_ratio();
|
||||||
|
|
||||||
// 金额合法性校验
|
// 金额合法性校验
|
||||||
if (paymentAmount <= 0 || (shoppingFee != null && paymentAmount <= shoppingFee)) {
|
// if (paymentAmount <= 0 || (shoppingFee != null && paymentAmount <= shoppingFee)) {
|
||||||
String errorMsg = String.format("店铺[%s]订单金额异常或运费过高,跳过分账", shopOrderLkl.getStore_id());
|
// 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);
|
log.error(errorMsg);
|
||||||
errorMessages.append(errorMsg).append("; ");
|
errorMessages.append(errorMsg).append("; ");
|
||||||
lklOrderSeparateService.updateRemark(lklOrderSeparateExist.getId(), errorMsg);
|
lklOrderSeparateService.updateRemark(lklOrderSeparateExist.getId(), errorMsg);
|
||||||
@ -1642,11 +1648,12 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 判断是否可以分账(商家比例非100%)
|
// 判断是否可以分账(商家比例不超过100%)
|
||||||
boolean canSplit = splitRatioMch != null && splitRatioMch.compareTo(new BigDecimal("100")) < 0;
|
boolean canSplit = splitRatioMch != null && splitRatioMch.compareTo(new BigDecimal("100")) <= 0;
|
||||||
if (!canSplit) {
|
if (!canSplit) {
|
||||||
String errorMsg = String.format("店铺[%s]分账比例为0,仅扣除运费", shopOrderLkl.getStore_id());
|
String errorMsg = String.format("店铺[%s]分账比例异常,无法分账", shopOrderLkl.getStore_id());
|
||||||
log.error(errorMsg);
|
log.error(errorMsg);
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 构建分账请求对象
|
// 构建分账请求对象
|
||||||
@ -1655,7 +1662,7 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
|||||||
request.setLogNo(shopOrderLkl.getLkl_log_no());
|
request.setLogNo(shopOrderLkl.getLkl_log_no());
|
||||||
request.setLogDate(shopOrderLkl.getLkl_log_date());
|
request.setLogDate(shopOrderLkl.getLkl_log_date());
|
||||||
request.setOutSeparateNo(orderId);
|
request.setOutSeparateNo(orderId);
|
||||||
request.setTotalAmt(paymentAmount.toString());
|
request.setTotalAmt(splitAmount.toString());
|
||||||
request.setLklOrgNo(orgCode);
|
request.setLklOrgNo(orgCode);
|
||||||
request.setCalType("0");
|
request.setCalType("0");
|
||||||
request.setNotifyUrl(projectDomain + "/api/mobile/shop/lakala/sacs/separateNotify");
|
request.setNotifyUrl(projectDomain + "/api/mobile/shop/lakala/sacs/separateNotify");
|
||||||
@ -1663,25 +1670,24 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
|||||||
// 构建分账接收方列表
|
// 构建分账接收方列表
|
||||||
List<V3SacsSeparateRecvDatas> recvDatas = new ArrayList<>();
|
List<V3SacsSeparateRecvDatas> recvDatas = new ArrayList<>();
|
||||||
|
|
||||||
// 1. 先处理运费分账(如果有运费)
|
// 1. 先处理运费分账(如果有运费) == update 2025-08-22 运费不分账了,走合单拆分,直接打给商家
|
||||||
if (shoppingFee != null && shoppingFee > 0) {
|
// if (shoppingFee != null && shoppingFee > 0) {
|
||||||
V3SacsSeparateRecvDatas receiver = new V3SacsSeparateRecvDatas();
|
// V3SacsSeparateRecvDatas receiver = new V3SacsSeparateRecvDatas();
|
||||||
receiver.setRecvNo(platform.getReceiver_no());
|
// receiver.setRecvNo(platform.getReceiver_no());
|
||||||
receiver.setSeparateValue(shoppingFee.toString());
|
// receiver.setSeparateValue(shoppingFee.toString());
|
||||||
recvDatas.add(receiver);
|
// recvDatas.add(receiver);
|
||||||
}
|
// }
|
||||||
|
|
||||||
Integer totalSeparateValue = 0;// 平台方和代理商总计分账金额
|
Integer totalSeparateValue = 0;// 平台方和代理商总计分账金额
|
||||||
// 2. 再处理剩余金额的分账(如果可以分账)
|
// 2. 再处理剩余金额的分账(如果可以分账)
|
||||||
if (canSplit) {
|
if (canSplit) {
|
||||||
|
|
||||||
// 计算实际可分账金额(扣除运费后)
|
// 计算实际可分账金额(扣除运费后)
|
||||||
Integer splitAmount = paymentAmount - shoppingFee;
|
// Integer splitAmount = totalAmt - shoppingFee;
|
||||||
// 计算平台+代理商的总比例
|
// 计算平台+代理商的总比例
|
||||||
BigDecimal splitRatioNoMch = new BigDecimal("100").subtract(splitRatioMch);
|
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%手续费
|
// 平台收取1%手续费
|
||||||
BigDecimal platformValue = CommonUtil.DecimalRoundHalfDown(new BigDecimal(splitAmount).multiply(new BigDecimal("0.01")));
|
BigDecimal platformValue = CommonUtil.DecimalRoundHalfDown(new BigDecimal(splitAmount).multiply(new BigDecimal("0.01")));
|
||||||
if (platformValue.compareTo(BigDecimal.ZERO) > 0) {
|
if (platformValue.compareTo(BigDecimal.ZERO) > 0) {
|
||||||
|
|||||||
@ -155,7 +155,6 @@ public class ShopOrderLklServiceImpl extends BaseServiceImpl<ShopOrderLklMapper,
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
ShopOrderLkl record = new ShopOrderLkl();
|
ShopOrderLkl record = new ShopOrderLkl();
|
||||||
record.setOrder_id(orderId);
|
record.setOrder_id(orderId);
|
||||||
|
|
||||||
@ -167,7 +166,7 @@ public class ShopOrderLklServiceImpl extends BaseServiceImpl<ShopOrderLklMapper,
|
|||||||
log.error("订单{}金额无效: {}", orderId, amount);
|
log.error("订单{}金额无效: {}", orderId, amount);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
record.setTotal_amt(amount);
|
record.setTotal_amt(amount); // 应支付总金额
|
||||||
|
|
||||||
record.setAccount_type(reqDataJson.getStr("accountType"));
|
record.setAccount_type(reqDataJson.getStr("accountType"));
|
||||||
record.setTrans_type(reqDataJson.getStr("transType"));
|
record.setTrans_type(reqDataJson.getStr("transType"));
|
||||||
|
|||||||
@ -175,9 +175,9 @@ lakala:
|
|||||||
client_id: gpff
|
client_id: gpff
|
||||||
client_secret: uRjvaJkWS1A0VsAv
|
client_secret: uRjvaJkWS1A0VsAv
|
||||||
user_no: 22874827
|
user_no: 22874827
|
||||||
split_lowest_ratio: 70.00
|
split_lowest_ratio: 94.00
|
||||||
activity_id: 208
|
activity_id: 208
|
||||||
wx_fee: 0.25 # 微信手续费 2.5/1000
|
wx_fee: 0.25 # 微信手续费 千分之2.5
|
||||||
api_pub_key_path: payKey/lakala/prod/tk_api_public_key.txt
|
api_pub_key_path: payKey/lakala/prod/tk_api_public_key.txt
|
||||||
api_pri_key_path: payKey/lakala/prod/tk_api_private_key.txt
|
api_pri_key_path: payKey/lakala/prod/tk_api_private_key.txt
|
||||||
notify_pub_key_path: payKey/lakala/prod/tk_notify_public_key.txt
|
notify_pub_key_path: payKey/lakala/prod/tk_notify_public_key.txt
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user