分账接口开发
This commit is contained in:
parent
dd80552720
commit
f73a82cdd6
@ -140,6 +140,8 @@ public class CommonUtil {
|
||||
|
||||
/**
|
||||
* Double 四舍五入,不保留小数点
|
||||
* 2.5=3
|
||||
* 2.3=2
|
||||
*
|
||||
* @param d
|
||||
* @return
|
||||
@ -150,6 +152,8 @@ public class CommonUtil {
|
||||
|
||||
/**
|
||||
* Decimal 四舍五入,不保留小数点
|
||||
* 2.5=3
|
||||
* 2.3=2
|
||||
*
|
||||
* @param d
|
||||
* @return
|
||||
@ -158,6 +162,18 @@ public class CommonUtil {
|
||||
return d.setScale(0, RoundingMode.HALF_UP);
|
||||
}
|
||||
|
||||
/**
|
||||
* Decimal 不四舍五入,不保留小数点
|
||||
* 2.5 = 2
|
||||
* 2.2 = 2
|
||||
*
|
||||
* @param d
|
||||
* @return
|
||||
*/
|
||||
public static BigDecimal DecimalRoundHalfDown(BigDecimal d) {
|
||||
return d.setScale(0, RoundingMode.HALF_DOWN);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 根据上一个订单状态和当前状态,获取订单状态变化备注
|
||||
|
||||
@ -12,6 +12,7 @@ import cn.hutool.json.JSONObject;
|
||||
import com.suisung.mall.common.api.CommonResult;
|
||||
import com.suisung.mall.common.service.impl.BaseControllerImpl;
|
||||
import com.suisung.mall.shop.lakala.service.LakalaApiService;
|
||||
import com.suisung.mall.shop.message.service.ShopMessageTemplateService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.http.HttpStatus;
|
||||
@ -23,6 +24,8 @@ import org.springframework.web.multipart.MultipartFile;
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.io.IOException;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
@Api(tags = "拉卡拉相关接口 - 前端控制器")
|
||||
@RestController
|
||||
@ -32,11 +35,20 @@ public class LakalaController extends BaseControllerImpl {
|
||||
@Resource
|
||||
private LakalaApiService lakalaPayService;
|
||||
|
||||
@Resource
|
||||
private ShopMessageTemplateService shopMessageTemplateService;
|
||||
|
||||
@ApiOperation(value = "测试案例", notes = "测试案例")
|
||||
@RequestMapping(value = "/testcase", method = RequestMethod.POST)
|
||||
public Object testcase(@RequestBody JSONObject paramsJSON) {
|
||||
return lakalaPayService.applyLedgerMerEc(paramsJSON.getStr("mchMobile"));
|
||||
// return lakalaPayService.applyLedgerMerEc(paramsJSON.getStr("mchMobile"));
|
||||
// return lakalaPayService.LedgerMerEcDownload(975790666910121984L);
|
||||
|
||||
Map<String, Object> tmplArgs = new HashMap<>(1);
|
||||
tmplArgs.put("name", "桂平市厚德贸易有限公司"); // 商家公司名称
|
||||
// 所有店铺管理员的发送邮件, 提醒商家:您有一笔新的订单 ${order_id},请及时处理。
|
||||
shopMessageTemplateService.aliyunSmsSend("17777525395", "SMS_486545331", tmplArgs);//SMS_479760276
|
||||
return CommonResult.success();
|
||||
}
|
||||
|
||||
@ApiOperation(value = "本地文件转base64", notes = "本地文件转base64")
|
||||
@ -103,4 +115,16 @@ public class LakalaController extends BaseControllerImpl {
|
||||
|
||||
return new ResponseEntity<>(resp, HttpStatus.INTERNAL_SERVER_ERROR);
|
||||
}
|
||||
|
||||
// https://mall.gpxscs.cn/api/mobile/shop/lakala/sacs/separateNotify
|
||||
@ApiOperation(value = "订单分账异步回调通知", notes = "订单分账异步回调通知")
|
||||
@RequestMapping(value = "/sacs/separateNotify", method = RequestMethod.POST)
|
||||
public ResponseEntity<JSONObject> sacsSeparateNotify(HttpServletRequest request) {
|
||||
JSONObject resp = lakalaPayService.sacsSeparateNotify(request);
|
||||
if (resp != null && "SUCCESS".equals(resp.get("code"))) {
|
||||
return new ResponseEntity<>(resp, HttpStatus.OK);
|
||||
}
|
||||
|
||||
return new ResponseEntity<>(resp, HttpStatus.INTERNAL_SERVER_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
@ -209,4 +209,13 @@ public interface LakalaApiService {
|
||||
* @return
|
||||
*/
|
||||
Pair<Boolean, String> innerDoOrderSeparate(String orderId);
|
||||
|
||||
/**
|
||||
* 分账结果通知
|
||||
* 参考:https://o.lakala.com/#/home/document/detail?id=393
|
||||
*
|
||||
* @param request
|
||||
* @return
|
||||
*/
|
||||
JSONObject sacsSeparateNotify(HttpServletRequest request);
|
||||
}
|
||||
|
||||
@ -40,7 +40,24 @@ public interface LklLedgerMerReceiverBindService extends IBaseService<LklLedgerM
|
||||
* @param isPlatform
|
||||
* @return
|
||||
*/
|
||||
List<LklLedgerMerReceiverBind> selectByMerCupNo(String merCupNo, Boolean isPlatform);
|
||||
List<LklLedgerMerReceiverBind> selectListByMerCupNo(String merCupNo, Boolean isPlatform);
|
||||
|
||||
|
||||
/**
|
||||
* 根据商户编号查询一条平台绑定记录
|
||||
*
|
||||
* @param merCupNo
|
||||
* @return
|
||||
*/
|
||||
LklLedgerMerReceiverBind getPlatformByMerCupNo(String merCupNo);
|
||||
|
||||
/**
|
||||
* 根据商户编号查询一条代理商绑定记录
|
||||
*
|
||||
* @param merCupNo
|
||||
* @return
|
||||
*/
|
||||
List<LklLedgerMerReceiverBind> selectDistributorByMerCupNo(String merCupNo);
|
||||
|
||||
/**
|
||||
* 更新审核结果
|
||||
|
||||
@ -0,0 +1,23 @@
|
||||
/*
|
||||
* Copyright (c) 2025. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
||||
* Morbi non lorem porttitor neque feugiat blandit. Ut vitae ipsum eget quam lacinia accumsan.
|
||||
* Etiam sed turpis ac ipsum condimentum fringilla. Maecenas magna.
|
||||
* Proin dapibus sapien vel ante. Aliquam erat volutpat. Pellentesque sagittis ligula eget metus.
|
||||
* Vestibulum commodo. Ut rhoncus gravida arcu.
|
||||
*/
|
||||
|
||||
package com.suisung.mall.shop.lakala.service;
|
||||
|
||||
import com.suisung.mall.common.modules.lakala.LklOrderSeparate;
|
||||
import com.suisung.mall.core.web.service.IBaseService;
|
||||
|
||||
public interface LklOrderSeparateService extends IBaseService<LklOrderSeparate> {
|
||||
|
||||
/**
|
||||
* 新增或更新记录
|
||||
*
|
||||
* @param record
|
||||
* @return
|
||||
*/
|
||||
Boolean addOrUpdateByReceiverNo(LklOrderSeparate record);
|
||||
}
|
||||
@ -26,10 +26,7 @@ import com.suisung.mall.common.api.CommonResult;
|
||||
import com.suisung.mall.common.constant.CommonConstant;
|
||||
import com.suisung.mall.common.exception.ApiException;
|
||||
import com.suisung.mall.common.feignService.ShopService;
|
||||
import com.suisung.mall.common.modules.lakala.LklLedgerEc;
|
||||
import com.suisung.mall.common.modules.lakala.LklLedgerMember;
|
||||
import com.suisung.mall.common.modules.lakala.LklLedgerMerReceiverBind;
|
||||
import com.suisung.mall.common.modules.lakala.LklLedgerReceiver;
|
||||
import com.suisung.mall.common.modules.lakala.*;
|
||||
import com.suisung.mall.common.modules.order.ShopOrderLkl;
|
||||
import com.suisung.mall.common.modules.store.ShopMchEntry;
|
||||
import com.suisung.mall.common.modules.store.ShopStoreBase;
|
||||
@ -144,6 +141,10 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
||||
@Resource
|
||||
private LklTkServiceImpl lklTkService;
|
||||
|
||||
@Lazy
|
||||
@Resource
|
||||
private LklOrderSeparateService lklOrderSeparateService;
|
||||
|
||||
@Resource
|
||||
private OssService ossService;
|
||||
|
||||
@ -1969,80 +1970,99 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
||||
initLKLSDK();
|
||||
|
||||
// 获取订单信息、店铺信息,商户信息、分账信息
|
||||
List<ShopOrderLkl> orderList = shopOrderLklService.selectByOrderId(orderId, "");
|
||||
if (CollectionUtil.isEmpty(orderList)) {
|
||||
List<ShopOrderLkl> shopOrderLklList = shopOrderLklService.selectByOrderId(orderId, "");
|
||||
if (CollectionUtil.isEmpty(shopOrderLklList)) {
|
||||
return Pair.of(false, "订单不存在");
|
||||
}
|
||||
|
||||
|
||||
for (ShopOrderLkl order : orderList) {
|
||||
String merchantNo = order.getMerchant_no();
|
||||
int successCnt = 0;
|
||||
// 一个订单里包含了多个商家的时候,需要处理
|
||||
for (ShopOrderLkl shopOrderLkl : shopOrderLklList) {
|
||||
String merchantNo = shopOrderLkl.getMerchant_no();
|
||||
|
||||
// 分账总金额
|
||||
Integer paymentAmount = order.getTotal_amt();
|
||||
Integer shoppingFee = order.getShopping_fee();
|
||||
BigDecimal splitRatio = order.getSplit_ratio();
|
||||
if (paymentAmount <= 0 || (shoppingFee != null && paymentAmount - shoppingFee <= 0)) {
|
||||
return Pair.of(false, "订单金额有误");
|
||||
Integer paymentAmount = shopOrderLkl.getTotal_amt();
|
||||
Integer shoppingFee = shopOrderLkl.getShopping_fee();
|
||||
BigDecimal splitRatioMch = shopOrderLkl.getSplit_ratio();
|
||||
// 应付款金额大于零,并且大于运费。
|
||||
if (paymentAmount <= 0
|
||||
|| (shoppingFee != null && paymentAmount - shoppingFee <= 0)) {
|
||||
log.error("店铺{}订单{}金额有误或运费高于分账金额,不会进行分账", shopOrderLkl.getStore_id(), orderId);
|
||||
continue;
|
||||
}
|
||||
|
||||
// 平台和代理商的分成比例
|
||||
BigDecimal splitRatioNoMch = new BigDecimal("100").subtract(shopOrderLkl.getSplit_ratio());
|
||||
LklLedgerMerReceiverBind platform = lklLedgerMerReceiverBindService.getPlatformByMerCupNo(merchantNo);
|
||||
List<LklLedgerMerReceiverBind> distributorList = lklLedgerMerReceiverBindService.selectDistributorByMerCupNo(merchantNo);
|
||||
if (platform == null) {
|
||||
log.error("店铺{}订单{}未绑定平台方,不会进行分账", shopOrderLkl.getStore_id(), orderId);
|
||||
continue;
|
||||
}
|
||||
|
||||
boolean canSplit = true; // 能分账并扣运费
|
||||
if (splitRatioMch == null || splitRatioMch.compareTo(new BigDecimal("100")) >= 0) {
|
||||
log.warn("店铺{}分账比例为0,只扣运费,不会进行分账", shopOrderLkl.getStore_id());
|
||||
canSplit = false; //不分账,只扣运费
|
||||
}
|
||||
|
||||
V3SacsSeparateRequest req = new V3SacsSeparateRequest();
|
||||
req.setMerchantNo(merchantNo);
|
||||
req.setLogNo(orderId);
|
||||
req.setLogDate(order.getLog_date());
|
||||
req.setMerchantNo(merchantNo); // 拉卡拉商户号
|
||||
req.setLogNo(shopOrderLkl.getLog_no());
|
||||
req.setLogDate(shopOrderLkl.getLog_date());
|
||||
req.setOutSeparateNo(StringUtils.genLklOrderNo(18)); // 14+18=32位商户分账指令流水号,每个商户号下唯一,否则会校验失败
|
||||
req.setTotalAmt(order.getTotal_amt().toString());
|
||||
req.setTotalAmt(shopOrderLkl.getTotal_amt().toString());
|
||||
req.setLklOrgNo(orgCode);
|
||||
req.setCalType("0"); // 0- 按照指定金额,1- 按照指定比例。默认 0
|
||||
req.setNotifyUrl(projectDomain + "/api/v1/lkl/order/separate/notify");
|
||||
|
||||
|
||||
List<LklLedgerMerReceiverBind> platformList = lklLedgerMerReceiverBindService.selectByMerCupNo(merchantNo, true);
|
||||
List<LklLedgerMerReceiverBind> distributorList = lklLedgerMerReceiverBindService.selectByMerCupNo(merchantNo, false);
|
||||
if (CollectionUtil.isEmpty(platformList)) {
|
||||
return Pair.of(false, "商户未绑定分账平台方");
|
||||
}
|
||||
|
||||
req.setNotifyUrl(projectDomain + "/api/mobile/shop/lakala/sacs/separateNotify");
|
||||
|
||||
List<V3SacsSeparateRecvDatas> recvDatas = new ArrayList<>();
|
||||
|
||||
|
||||
// 是否有运费
|
||||
// 平台先代扣掉运费
|
||||
if (shoppingFee != null && shoppingFee > 0) {
|
||||
V3SacsSeparateRecvDatas recvData = new V3SacsSeparateRecvDatas();
|
||||
recvData.setRecvNo(platformList.get(0).getReceiver_no());
|
||||
recvData.setRecvNo(platform.getReceiver_no());
|
||||
recvData.setSeparateValue(shoppingFee.toString()); // 分账金额,单位分,分账金额不能大于订单金额,分账金额不能小于0
|
||||
recvDatas.add(recvData);
|
||||
}
|
||||
|
||||
Integer splitAmount = paymentAmount - shoppingFee;
|
||||
if (!CollectionUtils.isEmpty(distributorList)
|
||||
&& (splitRatio != null && splitRatio.compareTo(BigDecimal.ONE) > 0)) {
|
||||
// 平台方分账
|
||||
BigDecimal separateValue = new BigDecimal(splitAmount).multiply(new BigDecimal("0.01")); // 平台收取1%手续费
|
||||
if (separateValue.compareTo(BigDecimal.ZERO) > 0) {
|
||||
V3SacsSeparateRecvDatas recvData = new V3SacsSeparateRecvDatas();
|
||||
recvData.setRecvNo(platformList.get(0).getReceiver_no());
|
||||
recvData.setSeparateValue(separateValue.toString()); // 分账金额,单位分,分账金额不能大于订单金额,分账金额不能小于0
|
||||
recvDatas.add(recvData);
|
||||
}
|
||||
if (canSplit) { //扣完运费后还能能分账
|
||||
|
||||
// 代理方分账, 100-1-splitRatio 1%是平台方的,其余都是代理商的
|
||||
BigDecimal separateValue2 = new BigDecimal(splitAmount).multiply(new BigDecimal(99).subtract(splitRatio).divide(new BigDecimal(100)));
|
||||
if (separateValue.compareTo(BigDecimal.ZERO) > 0) {
|
||||
V3SacsSeparateRecvDatas recvData2 = new V3SacsSeparateRecvDatas();
|
||||
recvData2.setRecvNo(distributorList.get(0).getReceiver_no());
|
||||
recvData2.setSeparateValue(separateValue2.toString()); // 分账金额,单位分,分账金额不能大于订单金额,分账金额不能小于0
|
||||
recvDatas.add(recvData2);
|
||||
}
|
||||
} else {
|
||||
// 仅平台方一方分账
|
||||
BigDecimal separateValue = new BigDecimal(splitAmount).multiply(new BigDecimal(100).subtract(splitRatio).divide(new BigDecimal(100)));
|
||||
if (separateValue.compareTo(BigDecimal.ZERO) > 0) {
|
||||
V3SacsSeparateRecvDatas recvData = new V3SacsSeparateRecvDatas();
|
||||
recvData.setRecvNo(platformList.get(0).getReceiver_no());
|
||||
recvData.setSeparateValue(separateValue.toString()); // 分账金额,单位分,分账金额不能大于订单金额,分账金额不能小于0
|
||||
recvDatas.add(recvData);
|
||||
// 应付款扣除运费后,得出实际分账的金额,单位:分
|
||||
Integer splitAmount = paymentAmount - shoppingFee;
|
||||
if (!CollectionUtils.isEmpty(distributorList)
|
||||
&& (splitRatioMch != null && splitRatioNoMch.compareTo(BigDecimal.ONE) > 0)) { // 有平台和代理商,并且分账比例大于1的情况
|
||||
|
||||
// 平台方分账
|
||||
BigDecimal platformSeparateValue = CommonUtil.DecimalRoundHalfDown(new BigDecimal(splitAmount).multiply(new BigDecimal("0.01"))); // 平台收取1%手续费
|
||||
if (platformSeparateValue.compareTo(BigDecimal.ZERO) > 0) {
|
||||
V3SacsSeparateRecvDatas recvData = new V3SacsSeparateRecvDatas();
|
||||
recvData.setRecvNo(platform.getReceiver_no());
|
||||
recvData.setSeparateValue(platformSeparateValue.toString()); // 分账金额,单位分,分账金额不能大于订单金额,分账金额不能小于0
|
||||
recvDatas.add(recvData);
|
||||
}
|
||||
|
||||
// TODO: 一级以上的代理商以后做处理
|
||||
// 一级代理方分账, 分账比例扣掉1%的平台方费,其余都是代理商的
|
||||
BigDecimal splitRatioDistributor = splitRatioNoMch.subtract(new BigDecimal("1")).divide(new BigDecimal(100));
|
||||
BigDecimal distributorSeparateValue = CommonUtil.DecimalRoundHalfDown(new BigDecimal(splitAmount).multiply(splitRatioDistributor));
|
||||
if (distributorSeparateValue.compareTo(BigDecimal.ZERO) > 0) {
|
||||
V3SacsSeparateRecvDatas recvData2 = new V3SacsSeparateRecvDatas();
|
||||
recvData2.setRecvNo(distributorList.get(0).getReceiver_no());
|
||||
recvData2.setSeparateValue(distributorSeparateValue.toString()); // 分账金额,单位分,分账金额不能大于订单金额,分账金额不能小于0
|
||||
recvDatas.add(recvData2);
|
||||
}
|
||||
} else {
|
||||
// 仅平台方一方分账
|
||||
BigDecimal splitRatioPlatform = CommonUtil.DecimalRoundHalfDown(splitRatioNoMch.divide(new BigDecimal(100)));
|
||||
BigDecimal separateValue = new BigDecimal(splitAmount).multiply(splitRatioPlatform);
|
||||
if (separateValue.compareTo(BigDecimal.ZERO) > 0) {
|
||||
V3SacsSeparateRecvDatas recvData = new V3SacsSeparateRecvDatas();
|
||||
recvData.setRecvNo(platform.getReceiver_no());
|
||||
recvData.setSeparateValue(separateValue.toString()); // 分账金额,单位分,分账金额不能大于订单金额,分账金额不能小于0
|
||||
recvDatas.add(recvData);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -2054,23 +2074,118 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
||||
//3. 发送请求
|
||||
String responseStr = LKLSDK.httpPost(req);
|
||||
if (StrUtil.isBlank(responseStr)) {
|
||||
return Pair.of(false, "服务器无返回值!");
|
||||
log.error("服务器无返回值!");
|
||||
continue;
|
||||
}
|
||||
log.debug("分账执行响应参数:{}", responseStr);
|
||||
|
||||
JSONObject lklRespJSON = JSONUtil.parseObj(responseStr);
|
||||
if (lklRespJSON == null || !lklSacsSuccessCode.equals(lklRespJSON.getStr("code")) || lklRespJSON.get("resp_data") == null) {
|
||||
if (lklRespJSON == null
|
||||
|| !lklSacsSuccessCode.equals(lklRespJSON.getStr("code"))
|
||||
|| lklRespJSON.getJSONObject("resp_data") == null) {
|
||||
log.error("分账返回值有误!");
|
||||
return Pair.of(false, "返回值有误!");
|
||||
continue;
|
||||
}
|
||||
|
||||
return Pair.of(true, "分账成功执行,处理中");
|
||||
JSONObject respData = lklRespJSON.getJSONObject("resp_data");
|
||||
|
||||
// 4. 处理返回结果,等待异步通知
|
||||
LklOrderSeparate record = new LklOrderSeparate();
|
||||
record.setMerchant_no(merchantNo);
|
||||
record.setLog_no(shopOrderLkl.getLog_no());
|
||||
record.setLog_date(shopOrderLkl.getLog_date());
|
||||
record.setOrder_id(shopOrderLkl.getOrder_id());
|
||||
record.setTotal_amt(shopOrderLkl.getTotal_amt().toString());
|
||||
record.setOut_separate_no(req.getOutSeparateNo());// 必填参数
|
||||
record.setNotify_url(req.getNotifyUrl());
|
||||
record.setLkl_org_no(req.getLklOrgNo());
|
||||
record.setRecv_datas(JSONUtil.toJsonStr(req.getRecvDatas()));
|
||||
record.setSeparate_no(respData.getStr("separate_no")); // 必填参数
|
||||
record.setStatus(respData.getStr("status"));
|
||||
|
||||
lklOrderSeparateService.addOrUpdateByReceiverNo(record);
|
||||
|
||||
successCnt++;
|
||||
}
|
||||
|
||||
if (successCnt <= 0) {
|
||||
return Pair.of(false, "分账失败");
|
||||
} else if (successCnt != shopOrderLklList.size()) {
|
||||
return Pair.of(true, "部分订单分账执行成功,处理中");
|
||||
}
|
||||
|
||||
return Pair.of(true, "全部订单分账执行成功,处理中");
|
||||
} catch (SDKException e) {
|
||||
log.error("分账发生错误:", e);
|
||||
return Pair.of(false, "分账发生错误");
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
/**
|
||||
* 分账结果通知
|
||||
* 参考:https://o.lakala.com/#/home/document/detail?id=393
|
||||
*
|
||||
* @param request
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public JSONObject sacsSeparateNotify(HttpServletRequest request) {
|
||||
log.debug("分账结果通知异步回调通知开始");
|
||||
|
||||
// 验签
|
||||
String authorization = request.getHeader("Authorization");
|
||||
String requestBody = LakalaUtil.getBody(request);
|
||||
log.debug("分账结果通知异步回调返回requestbody 参数:{}\n authorization参数:{}\n", requestBody, authorization);
|
||||
|
||||
|
||||
if (!LakalaUtil.verify(authorization, requestBody, lklNotifyCerPath)) {
|
||||
log.error("分账结果通知异步回调:验签失败");
|
||||
return JSONUtil.createObj().put("code", "FAIL").put("message", "验签失败!");
|
||||
}
|
||||
|
||||
JSONObject paramsJSON = JSONUtil.parseObj(requestBody);
|
||||
if (paramsJSON == null) {
|
||||
log.error("分账结果通知异步回调:请求参数为空");
|
||||
return JSONUtil.createObj().put("code", "FAIL").put("message", "请求参数为空");
|
||||
}
|
||||
|
||||
String logNo = paramsJSON.getStr("log_no");
|
||||
String separateNo = paramsJSON.getStr("separate_no");
|
||||
String outSeparateNo = paramsJSON.getStr("out_separate_no");
|
||||
String status = paramsJSON.getStr("status");
|
||||
String finalStatus = paramsJSON.getStr("final_status");
|
||||
|
||||
if (StrUtil.isBlank(outSeparateNo) || StrUtil.isBlank(separateNo) || StrUtil.isBlank(status)) {
|
||||
String errMsg = "分账结果通知异步回调:缺少必要参数(outSeparateNo/separateNo/status)";
|
||||
log.error(errMsg + ":logNo={}, separateNo={}, status={}", outSeparateNo, separateNo, status);
|
||||
return JSONUtil.createObj().put("code", "FAIL").put("message", "返回缺少必要参数");
|
||||
}
|
||||
|
||||
try {
|
||||
|
||||
// 4. 处理返回结果,等待异步通知
|
||||
LklOrderSeparate record = new LklOrderSeparate();
|
||||
record.setLog_no(logNo);
|
||||
record.setSeparate_no(separateNo);
|
||||
record.setOut_separate_no(paramsJSON.getStr("out_separate_no"));
|
||||
record.setStatus(status);
|
||||
record.setFinal_status(finalStatus);
|
||||
record.setCal_type(paramsJSON.getStr("cal_type"));
|
||||
record.setSeparate_type(paramsJSON.getStr("separate_type"));
|
||||
record.setSeparate_date(paramsJSON.getStr("separate_date"));
|
||||
record.setDetail_datas(paramsJSON.getJSONArray("detail_datas").toString());
|
||||
|
||||
Boolean success = lklOrderSeparateService.addOrUpdateByReceiverNo(record);
|
||||
if (!success) {
|
||||
return JSONUtil.createObj().put("code", "FAIL").put("message", "处理数据失败!");
|
||||
}
|
||||
|
||||
log.debug("分账结果通知异步回调:处理成功,separateNo={}", separateNo);
|
||||
return JSONUtil.createObj().put("code", "SUCCESS").put("message", "操作成功!");
|
||||
} catch (Exception e) {
|
||||
log.error("分账结果通知异步回调:处理数据异常", e);
|
||||
return JSONUtil.createObj().put("code", "FAIL").put("message", "处理数据异常");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -73,14 +73,14 @@ public class LklLedgerMerReceiverBindServiceImpl extends BaseServiceImpl<LklLedg
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据商户编号查询多条记录
|
||||
* 根据商户编号查询多条平台或代理商记录
|
||||
*
|
||||
* @param merCupNo
|
||||
* @param isPlatform 是否平台
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public List<LklLedgerMerReceiverBind> selectByMerCupNo(String merCupNo, Boolean isPlatform) {
|
||||
public List<LklLedgerMerReceiverBind> selectListByMerCupNo(String merCupNo, Boolean isPlatform) {
|
||||
if (StrUtil.isBlank(merCupNo)) {
|
||||
return null;
|
||||
}
|
||||
@ -99,6 +99,38 @@ public class LklLedgerMerReceiverBindServiceImpl extends BaseServiceImpl<LklLedg
|
||||
return list(queryWrapper);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据商户编号查询一条平台绑定记录
|
||||
*
|
||||
* @param merCupNo
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public LklLedgerMerReceiverBind getPlatformByMerCupNo(String merCupNo) {
|
||||
List<LklLedgerMerReceiverBind> list = selectListByMerCupNo(merCupNo, true);
|
||||
if (CollectionUtil.isEmpty(list)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return list.get(0);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据商户编号查询一条代理商绑定记录
|
||||
*
|
||||
* @param merCupNo
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public List<LklLedgerMerReceiverBind> selectDistributorByMerCupNo(String merCupNo) {
|
||||
List<LklLedgerMerReceiverBind> list = selectListByMerCupNo(merCupNo, false);
|
||||
if (CollectionUtil.isEmpty(list)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新审核结果
|
||||
*
|
||||
|
||||
@ -0,0 +1,50 @@
|
||||
/*
|
||||
* Copyright (c) 2025. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
||||
* Morbi non lorem porttitor neque feugiat blandit. Ut vitae ipsum eget quam lacinia accumsan.
|
||||
* Etiam sed turpis ac ipsum condimentum fringilla. Maecenas magna.
|
||||
* Proin dapibus sapien vel ante. Aliquam erat volutpat. Pellentesque sagittis ligula eget metus.
|
||||
* Vestibulum commodo. Ut rhoncus gravida arcu.
|
||||
*/
|
||||
|
||||
package com.suisung.mall.shop.lakala.service.impl;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.suisung.mall.common.modules.lakala.LklOrderSeparate;
|
||||
import com.suisung.mall.core.web.service.impl.BaseServiceImpl;
|
||||
import com.suisung.mall.shop.lakala.mapper.LklOrderSeparateMapper;
|
||||
import com.suisung.mall.shop.lakala.service.LklOrderSeparateService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@Slf4j
|
||||
@Service
|
||||
public class LklOrderSeparateServiceImpl extends BaseServiceImpl<LklOrderSeparateMapper, LklOrderSeparate> implements LklOrderSeparateService {
|
||||
|
||||
/**
|
||||
* 新增或更新记录
|
||||
*
|
||||
* @param record
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public Boolean addOrUpdateByReceiverNo(LklOrderSeparate record) {
|
||||
if (record == null || (StrUtil.isBlank(record.getOut_separate_no()) && StrUtil.isBlank(record.getSeparate_no()))) {
|
||||
return false;
|
||||
}
|
||||
|
||||
QueryWrapper<LklOrderSeparate> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("separate_no", record.getSeparate_no()).eq("out_separate_no", record.getOut_separate_no());
|
||||
if (StrUtil.isNotBlank(record.getSeparate_no())) {
|
||||
queryWrapper.eq("log_no", record.getLog_no());
|
||||
}
|
||||
LklOrderSeparate existsRecord = getOne(queryWrapper);
|
||||
if (existsRecord != null && existsRecord.getId() > 0) {
|
||||
// 更新记录
|
||||
record.setId(existsRecord.getId());
|
||||
return updateById(record);
|
||||
}
|
||||
|
||||
return add(record);
|
||||
}
|
||||
}
|
||||
@ -247,7 +247,7 @@ public class ShopMchEntryServiceImpl extends BaseServiceImpl<ShopMchEntryMapper,
|
||||
Map<String, Object> tmplArgs = new HashMap<>(1);
|
||||
tmplArgs.put("name", record.getBiz_license_company()); // 商家公司名称
|
||||
// 所有店铺管理员的发送邮件, 提醒商家:您有一笔新的订单 ${order_id},请及时处理。
|
||||
shopMessageTemplateService.aliyunSmsSend(mobileAndLicenseNumber.getFirst(), "SMS_479760276", tmplArgs);//SMS_475836097
|
||||
shopMessageTemplateService.aliyunSmsSend(mobileAndLicenseNumber.getFirst(), "SMS_486545331", tmplArgs);//SMS_479760276
|
||||
}
|
||||
|
||||
return CommonResult.success();
|
||||
|
||||
Loading…
Reference in New Issue
Block a user