diff --git a/mall-common/src/main/java/com/suisung/mall/common/utils/CommonUtil.java b/mall-common/src/main/java/com/suisung/mall/common/utils/CommonUtil.java index 30311956..2fb4341e 100644 --- a/mall-common/src/main/java/com/suisung/mall/common/utils/CommonUtil.java +++ b/mall-common/src/main/java/com/suisung/mall/common/utils/CommonUtil.java @@ -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); + } + /** * 根据上一个订单状态和当前状态,获取订单状态变化备注 diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/controller/mobile/LakalaController.java b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/controller/mobile/LakalaController.java index fc8e70a9..19b4d6dd 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/controller/mobile/LakalaController.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/controller/mobile/LakalaController.java @@ -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 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 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); + } } diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/LakalaApiService.java b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/LakalaApiService.java index 3b015460..9384d1ae 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/LakalaApiService.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/LakalaApiService.java @@ -209,4 +209,13 @@ public interface LakalaApiService { * @return */ Pair innerDoOrderSeparate(String orderId); + + /** + * 分账结果通知 + * 参考:https://o.lakala.com/#/home/document/detail?id=393 + * + * @param request + * @return + */ + JSONObject sacsSeparateNotify(HttpServletRequest request); } diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/LklLedgerMerReceiverBindService.java b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/LklLedgerMerReceiverBindService.java index 59f54b1e..f1a5a965 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/LklLedgerMerReceiverBindService.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/LklLedgerMerReceiverBindService.java @@ -40,7 +40,24 @@ public interface LklLedgerMerReceiverBindService extends IBaseService selectByMerCupNo(String merCupNo, Boolean isPlatform); + List selectListByMerCupNo(String merCupNo, Boolean isPlatform); + + + /** + * 根据商户编号查询一条平台绑定记录 + * + * @param merCupNo + * @return + */ + LklLedgerMerReceiverBind getPlatformByMerCupNo(String merCupNo); + + /** + * 根据商户编号查询一条代理商绑定记录 + * + * @param merCupNo + * @return + */ + List selectDistributorByMerCupNo(String merCupNo); /** * 更新审核结果 diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/LklOrderSeparateService.java b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/LklOrderSeparateService.java new file mode 100644 index 00000000..07ea7bac --- /dev/null +++ b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/LklOrderSeparateService.java @@ -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 { + + /** + * 新增或更新记录 + * + * @param record + * @return + */ + Boolean addOrUpdateByReceiverNo(LklOrderSeparate record); +} 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 d0c4a9cb..318dd1e5 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 @@ -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 orderList = shopOrderLklService.selectByOrderId(orderId, ""); - if (CollectionUtil.isEmpty(orderList)) { + List 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 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 platformList = lklLedgerMerReceiverBindService.selectByMerCupNo(merchantNo, true); - List distributorList = lklLedgerMerReceiverBindService.selectByMerCupNo(merchantNo, false); - if (CollectionUtil.isEmpty(platformList)) { - return Pair.of(false, "商户未绑定分账平台方"); - } - + req.setNotifyUrl(projectDomain + "/api/mobile/shop/lakala/sacs/separateNotify"); List 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", "处理数据异常"); + } } diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LklLedgerMerReceiverBindServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LklLedgerMerReceiverBindServiceImpl.java index ae08d1a5..8c8a31dd 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LklLedgerMerReceiverBindServiceImpl.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LklLedgerMerReceiverBindServiceImpl.java @@ -73,14 +73,14 @@ public class LklLedgerMerReceiverBindServiceImpl extends BaseServiceImpl selectByMerCupNo(String merCupNo, Boolean isPlatform) { + public List selectListByMerCupNo(String merCupNo, Boolean isPlatform) { if (StrUtil.isBlank(merCupNo)) { return null; } @@ -99,6 +99,38 @@ public class LklLedgerMerReceiverBindServiceImpl extends BaseServiceImpl list = selectListByMerCupNo(merCupNo, true); + if (CollectionUtil.isEmpty(list)) { + return null; + } + + return list.get(0); + } + + /** + * 根据商户编号查询一条代理商绑定记录 + * + * @param merCupNo + * @return + */ + @Override + public List selectDistributorByMerCupNo(String merCupNo) { + List list = selectListByMerCupNo(merCupNo, false); + if (CollectionUtil.isEmpty(list)) { + return null; + } + + return list; + } + /** * 更新审核结果 * diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LklOrderSeparateServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LklOrderSeparateServiceImpl.java new file mode 100644 index 00000000..6389e544 --- /dev/null +++ b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LklOrderSeparateServiceImpl.java @@ -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 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 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); + } +} diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopMchEntryServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopMchEntryServiceImpl.java index fd23bdd3..472384b9 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopMchEntryServiceImpl.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopMchEntryServiceImpl.java @@ -247,7 +247,7 @@ public class ShopMchEntryServiceImpl extends BaseServiceImpl 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();