From 42dc03453db01a1a559824f12c9f5e639646a7c1 Mon Sep 17 00:00:00 2001 From: Jack <46790855@qq.com> Date: Sun, 18 May 2025 16:47:25 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9B=9E=E5=BD=92=E6=B5=8B=E8=AF=95=EF=BC=8C?= =?UTF-8?q?=E4=BF=AE=E5=A4=8Dbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/LakalaApiServiceImpl.java | 102 ++++++++++-------- .../impl/LklLedgerReceiverServiceImpl.java | 22 ++-- .../lakala/service/impl/LklTkServiceImpl.java | 26 +++-- .../store/service/ShopMchEntryService.java | 3 +- .../service/impl/ShopMchEntryServiceImpl.java | 13 ++- 5 files changed, 94 insertions(+), 72 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 6edbdc51..16610002 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 @@ -662,7 +662,7 @@ public class LakalaApiServiceImpl implements LakalaApiService { */ @Override public Pair innerApplyLedgerMer(String merCupNo) { - log.debug("商户分账业务开通申请开始"); + log.debug("商户分账业务申请开始"); if (StringUtils.isBlank(merCupNo)) { return Pair.of(false, I18nUtil._("商户号不能为空!")); @@ -676,7 +676,7 @@ public class LakalaApiServiceImpl implements LakalaApiService { // 判断是否已经申请过? LklLedgerMember lklLedgerMember = lklLedgerMemberService.getByMerCupNo(merCupNo); - if (lklLedgerMember != null) { + if (lklLedgerMember != null && lklLedgerMember.getAudit_status() == 1) { return Pair.of(true, I18nUtil._("商家已经申请过了!")); } @@ -688,20 +688,21 @@ 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.setMerInnerNo(shopMchEntry.getLkl_mer_inner_no());// 从进件申请返回的内部商户号 req.setMerCupNo(shopMchEntry.getLkl_mer_cup_no()); // 从进件申请返回的商户号 req.setContactMobile(shopMchEntry.getLogin_mobile()); // 商户入驻注册的手机号 // 分账比例为了考虑低价订单的运费占比高,分账比例暂时定70%分账给商户,30%分账给平台 - // new BigDecimal(paramsJSON.getStr("splitLowestRatio")) req.setSplitLowestRatio(new BigDecimal(splitLowestRatio)); req.setEleContractNo(shopMchEntry.getLkl_ec_no()); - String fileName = "小发同城分账授权委托书.pdf";//paramsJSON.getStr("splitEntrustFileName"); + String fileName = "商家分账授权委托书.pdf";//paramsJSON.getStr("splitEntrustFileName"); 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"))) { - throw new ApiException(I18nUtil._("小发同城分账授权委托书上传失败!")); + log.error("商家分账授权委托书{}上传失败!", shopMchEntry.getContract_download_url()); + // return Pair.of(false, I18nUtil._("商家分账授权委托书上传失败!")); +// throw new ApiException(I18nUtil._("商家分账授权委托书上传失败!")); } String splitEntrustFilePath = fileUploadResp.getStr("attFileId"); @@ -715,38 +716,45 @@ public class LakalaApiServiceImpl implements LakalaApiService { String retUrl = domain + "/mobile/shop/lakala/ledger/applyLedgerMerNotify"; req.setRetUrl(retUrl); - JSONObject paramsJSON = new JSONObject(); - paramsJSON.put("orderNo", req.getOrderNo()); - paramsJSON.put("org_code", orgCode); - paramsJSON.put("version", "2.0"); - paramsJSON.put("ret_url", retUrl); - paramsJSON.put("mer_inner_no", req.getMerInnerNo()); - paramsJSON.put("mer_cup_no", req.getMerCupNo()); - paramsJSON.put("contact_mobile", shopMchEntry.getLogin_mobile()); - paramsJSON.put("split_lowest_ratio", req.getSplitLowestRatio()); - paramsJSON.put("split_range", "MARK"); - paramsJSON.put("split_launch_mode", "MANUAL"); - paramsJSON.put("settle_type", "01"); - paramsJSON.put("split_rule_source", "TR"); - paramsJSON.put("ele_contract_no", ""); - paramsJSON.put("split_entrust_file_name", req.getSplitEntrustFileName()); - paramsJSON.put("split_entrust_file_path", splitEntrustFilePath); + log.debug("商户分账业务申请请求参数:{}", JSONUtil.toJsonStr(req)); + try { //3. 发送请求 String responseStr = LKLSDK.httpPost(req); - - // 成功返回示例:{'retCode':'000000','retMsg':'申请已受理,请等待审核结果','respData':{'version':'1.0','orderNo':'KFPT20230223181025407788734','orgCode':'1','applyId':681201215598657536}} - JSONObject lakalaRespJSON = JSONUtil.parseObj(responseStr); - if (StrUtil.isBlank(responseStr) || lakalaRespJSON == null) { + if (StrUtil.isBlank(responseStr)) { return Pair.of(false, I18nUtil._("无返回值,申请开通分账失败!")); } - if (!lakalaRespJSON.getStr("retCode").equals(lklSuccessCode)) { + // 成功返回示例:{'retCode':'000000','retMsg':'申请已受理,请等待审核结果','respData':{'version':'1.0','orderNo':'KFPT20230223181025407788734','orgCode':'1','applyId':681201215598657536}} + JSONObject lakalaRespJSON = JSONUtil.parseObj(responseStr); + if (lakalaRespJSON == null) { + return Pair.of(false, I18nUtil._("无返回值,申请开通分账失败!")); + } + String applyId = lakalaRespJSON.getStr("applyId"); + + if (!lakalaRespJSON.getStr("retCode").equals(lklSuccessCode) || StrUtil.isBlank(applyId)) { return Pair.of(false, lakalaRespJSON.getStr("retMsg")); } - paramsJSON.set("apply_id", lakalaRespJSON.getByPath("respData.applyId")); + JSONObject paramsJSON = new JSONObject(); + paramsJSON.put("orderNo", req.getOrderNo()); + paramsJSON.put("org_code", orgCode); + paramsJSON.put("version", "2.0"); + paramsJSON.put("ret_url", retUrl); + paramsJSON.put("mer_inner_no", req.getMerInnerNo()); + paramsJSON.put("mer_cup_no", shopMchEntry.getLkl_mer_cup_no()); + paramsJSON.put("contact_mobile", shopMchEntry.getLogin_mobile()); + paramsJSON.put("split_lowest_ratio", req.getSplitLowestRatio()); + paramsJSON.put("split_range", "MARK"); + paramsJSON.put("split_launch_mode", "MANUAL"); + paramsJSON.put("settle_type", "01"); + paramsJSON.put("split_rule_source", "TR"); + paramsJSON.put("ele_contract_no", req.getEleContractNo()); + paramsJSON.put("split_entrust_file_name", req.getSplitEntrustFileName()); + paramsJSON.put("split_entrust_file_path", splitEntrustFilePath); + + paramsJSON.set("apply_id", applyId); paramsJSON.set("remark", lakalaRespJSON.getStr("retMsg")); paramsJSON.set("audit_status_text", paramsJSON.get("remark")); paramsJSON.set("mch_id", shopMchEntry.getId()); @@ -754,9 +762,11 @@ public class LakalaApiServiceImpl implements LakalaApiService { // 新增数据 // 将 JSON 对象的键名转换为下划线命名 LklLedgerMember lklLedgerMemberNew = JSONUtil.toBean(StringUtils.convertCamelToSnake(paramsJSON.toString()), LklLedgerMember.class); - lklLedgerMemberService.saveOrUpdateByMerCupNo(lklLedgerMemberNew); + if (!lklLedgerMemberService.saveOrUpdateByMerCupNo(lklLedgerMemberNew)) { + return Pair.of(false, I18nUtil._("商户分账业务材料新增失败,待审核中!")); + } - return Pair.of(true, I18nUtil._("提交成功,待审核中!")); + return Pair.of(true, I18nUtil._("商户分账业务申请提交成功,待审核中!")); } catch (SDKException e) { log.error("申请开通分账出错:", e); return Pair.of(false, I18nUtil._("商家申请开通分账出错!")); @@ -786,7 +796,7 @@ public class LakalaApiServiceImpl implements LakalaApiService { boolean checkSuccess = LakalaUtil.verify(authorization, requestBody, lklNotifyCerPath); if (!checkSuccess) { log.error(errMsg + "验签失败"); - return JSONUtil.createObj().set("code", "OP90002").set("retMsg", "验签失败!"); + return JSONUtil.createObj().set("code", "FAIL").set("retMsg", "验签失败!"); } JSONObject paramsJSON = JSONUtil.parseObj(requestBody); @@ -847,13 +857,15 @@ public class LakalaApiServiceImpl implements LakalaApiService { Pair resultPair = lklTkService.registrationMerchant(lklLedgerEc.getMch_mobile(), ""); if (!resultPair.getFirst()) { errMsg += resultPair.getSecond(); -// log.error(errMsg); + log.error(errMsg); shopMchEntryService.updateMerchEntryApprovalByMchId(lklLedgerEc.getMch_id(), "", CommonConstant.MCH_APPR_STA_NOPASS, errMsg); -// respData.put("message", errMsg); + // respData.put("message", errMsg); + // return respData; throw new ApiException(errMsg); -// return respData; } + shopMchEntryService.updateMerchEntryApprovalByMchId(lklLedgerEc.getMch_id(), "", CommonConstant.MCH_APPR_STA_LKL_PADDING, errMsg); + respData.put("code", "SUCCESS"); respData.put("message", "操作成功!"); log.info("商户入网电子合同申请回调:处理成功"); @@ -1171,13 +1183,11 @@ public class LakalaApiServiceImpl implements LakalaApiService { req.setReceiverName(paramsJSON.getStr("receiverName")); req.setContactMobile(mchMobile); - req.setLicenseNo(paramsJSON.getStr("licenseNo")); req.setLicenseName(paramsJSON.getStr("licenseName")); req.setLegalPersonName(paramsJSON.getStr("legalPersonName")); req.setLegalPersonCertificateType(paramsJSON.getStr("legalPersonCertificateType")); req.setLegalPersonCertificateNo(paramsJSON.getStr("legalPersonCertificateNo")); - req.setAcctNo(paramsJSON.getStr("acctNo")); req.setAcctName(paramsJSON.getStr("acctName")); req.setAcctTypeCode(paramsJSON.getStr("acctTypeCode")); @@ -1222,11 +1232,14 @@ public class LakalaApiServiceImpl implements LakalaApiService { String responseStr = LKLSDK.httpPost(req); JSONObject lakalaRespJSON = JSONUtil.parseObj(responseStr); if (StrUtil.isBlank(responseStr) || lakalaRespJSON == null) { - throw new ApiException(I18nUtil._("创建分账接收方无响应!")); + return CommonResult.failed(I18nUtil._("创建分账接收方无响应!")); +// throw new ApiException(I18nUtil._("创建分账接收方无响应!")); } + if (!lakalaRespJSON.getStr("retCode").equals(lklSuccessCode)) { - throw new ApiException(I18nUtil._(lakalaRespJSON.getStr("retMsg"))); + return CommonResult.failed(I18nUtil._(lakalaRespJSON.getStr("retMsg"))); + // throw new ApiException(I18nUtil._(lakalaRespJSON.getStr("retMsg"))); } paramsJSON.set("receiver_no", lakalaRespJSON.getByPath("respData.receiverNo")); @@ -1240,17 +1253,14 @@ public class LakalaApiServiceImpl implements LakalaApiService { // 新增或修改本地数据 Boolean success = lklLedgerReceiverService.saveOrUpdateByReceiverNo(lklLedgerReceiver); if (!success) { - log.error("接收方创建成功,但更新本地数据 lklLedgerReceiverService.saveOrUpdateByReceiverNo 失败!"); + log.error("接收方创建成功,但更新本地数据失败!"); + return CommonResult.failed(I18nUtil._("接收方创建成功,但更新本地数据失败!")); } - // 更新商家的has_receiver状态=1 - lklLedgerMemberService.updateMulStatus("", mchMobile, 0, 0, 1, 0); - - return CommonResult.success(lklLedgerReceiver, "创建接收方成功!"); - } catch (SDKException e) { - log.error("接收方创建失败:", e); - throw new ApiException(I18nUtil._("创建接收方失败!"), e); + } catch (Exception e) { + log.error("接收方创建失败:{}", e); + throw new ApiException(I18nUtil._("创建接收方失败:{}"), e); } } diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LklLedgerReceiverServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LklLedgerReceiverServiceImpl.java index d25d9868..d18f39f1 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LklLedgerReceiverServiceImpl.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LklLedgerReceiverServiceImpl.java @@ -194,7 +194,7 @@ public class LklLedgerReceiverServiceImpl extends BaseServiceImpl 0; + boolean success = successCnt > 0; + if (success) { + // 更新多个状态 + lklLedgerMemberService.updateMulStatus(merCupNo, "", 0, 0, 1, 0); + } + + return success; } /** diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LklTkServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LklTkServiceImpl.java index 4414aea6..f303e458 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LklTkServiceImpl.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LklTkServiceImpl.java @@ -18,7 +18,6 @@ import com.suisung.mall.common.api.CommonResult; import com.suisung.mall.common.api.ResultCode; import com.suisung.mall.common.constant.CommonConstant; import com.suisung.mall.common.domain.UserDto; -import com.suisung.mall.common.exception.ApiException; import com.suisung.mall.common.modules.store.ShopMchEntry; import com.suisung.mall.common.utils.RestTemplateHttpUtil; import com.suisung.mall.common.utils.StringUtils; @@ -574,6 +573,8 @@ public class LklTkServiceImpl { return new JSONObject().set("code", "FAIL").set("message", "返回审核状态有误"); } + // RMK 拉卡拉进价提交成功,边处理周边的数据,边等待审核异步通知 + // 给商家入驻表增加拉卡拉的商户号和拉卡拉返回的数据 String merCupNo = dataJSON.getStr("externalCustomerNo"); //拉卡拉外部商户号 String merInnerNo = dataJSON.getStr("customerNo"); //拉卡拉内部商户号 @@ -583,10 +584,10 @@ public class LklTkServiceImpl { return new JSONObject().put("code", "FAIL").put("message", "内部商户号:" + merInnerNo + " 入驻信息不存在"); } - Boolean success = shopMchEntryService.updateMerchEntryLklAuditStatusByLklMerCupNo(merInnerNo, merCupNo, CommonConstant.Enable, data); + Boolean success = shopMchEntryService.updateMerchEntryLklAuditStatusByLklMerCupNo(merInnerNo, merCupNo, CommonConstant.Enable, null, data); if (!success) { -// return new JSONObject().set("code", "FAIL").set("message", "更新商户号失败"); - throw new ApiException("更新商户号失败"); + return new JSONObject().set("code", "FAIL").set("message", "更新商户号失败"); +// throw new ApiException("更新商户号失败"); } // 备注:RMK 采用拉卡拉的入网电子合同签署流程,暂停e签宝的电子合同生成流程 @@ -608,27 +609,30 @@ public class LklTkServiceImpl { // 1、(电子合同)给商家申请分账功能使用;务必检查是否申请过?申请过忽略 // 下一步等待拉卡拉审核通过,再绑定接收方和商家的关系 - Pair retPair = lakalaApiService.innerApplyLedgerMer(shopMchEntry.getLkl_mer_cup_no()); + Pair retPair = lakalaApiService.innerApplyLedgerMer(merCupNo); if (!retPair.getFirst()) { String message = "商家申请分账功能失败:" + retPair.getSecond(); logger.error(message); - throw new ApiException(message); + return new JSONObject().set("code", "FAIL").set("message", message); +// throw new ApiException(message); } - // 更新商家的hasEsigned状态=1 -// lklLedgerMemberService.updateMulStatus("", shopMchEntry.getLogin_mobile(), 1, 0, 0, 0); - // 2:新增一个接收方记录,起码要一个平台方,代理商根据入驻信息新增 Boolean genSuccess = lklLedgerReceiverService.innerApplyLedgerReceiver(merCupNo, shopMchEntry.getDistributor_id()); if (!genSuccess) { logger.error("申请分账接收方失败"); - throw new ApiException("申请分账接收方失败"); + return new JSONObject().set("code", "FAIL").set("message", "申请分账接收方失败"); +// throw new ApiException("申请分账接收方失败"); } + // 更新商家的hasEsigned状态=1 +// lklLedgerMemberService.updateMulStatus("", shopMchEntry.getLogin_mobile(), 1, 0, 0, 0); + return new JSONObject().put("code", "SUCCESS").put("message", "处理成功"); } - throw new ApiException("进件回调处理失败"); + return new JSONObject().set("code", "FAIL").set("message", "进件回调处理失败"); +// throw new ApiException("进件回调处理失败"); } /** diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/store/service/ShopMchEntryService.java b/mall-shop/src/main/java/com/suisung/mall/shop/store/service/ShopMchEntryService.java index 16c64804..800bfe32 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/store/service/ShopMchEntryService.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/store/service/ShopMchEntryService.java @@ -163,10 +163,11 @@ public interface ShopMchEntryService { * @param lklMerCupNo 拉卡拉银联商户号 * @param lklInnerMerNo 拉卡拉内部商户号 * @param lklAuditStatus 拉卡拉审核状态 + * @param approvalStatus 审批状态 * @param lklTkRegResp 进件返回的数据 * @return */ - Boolean updateMerchEntryLklAuditStatusByLklMerCupNo(String lklMerCupNo, String lklInnerMerNo, Integer lklAuditStatus, String lklTkRegResp); + Boolean updateMerchEntryLklAuditStatusByLklMerCupNo(String lklMerCupNo, String lklInnerMerNo, Integer lklAuditStatus, Integer approvalStatus, String lklTkRegResp); /** 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 9458464f..17a0a73f 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 @@ -807,21 +807,24 @@ public class ShopMchEntryServiceImpl extends BaseServiceImpl updateWrapper = new UpdateWrapper<>(); updateWrapper.eq("lkl_mer_inner_no", lklInnerMerNo); + + if (StrUtil.isNotBlank(lklMerCupNo)) { + updateWrapper.set("lkl_mer_cup_no", lklMerCupNo); + } + if (ObjectUtil.isNotEmpty(lklAuditStatus)) { updateWrapper.set("lkl_tk_audit_status", lklAuditStatus); } - // 商家入驻审核正式通过 - updateWrapper.set("approval_status", CommonConstant.MCH_APPR_STA_PASS); - if (StrUtil.isNotBlank(lklMerCupNo)) { - updateWrapper.set("lkl_mer_cup_no", lklMerCupNo); + if (ObjectUtil.isNotEmpty(approvalStatus)) { + updateWrapper.set("approval_status", approvalStatus); } if (StrUtil.isNotBlank(lklTkRegNotifyReq)) {