diff --git a/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/LakalaPayServiceImpl.java b/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/LakalaPayServiceImpl.java index a7e1c528..b553420a 100644 --- a/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/LakalaPayServiceImpl.java +++ b/mall-pay/src/main/java/com/suisung/mall/pay/service/impl/LakalaPayServiceImpl.java @@ -103,7 +103,7 @@ public class LakalaPayServiceImpl implements LakalaPayService { return true; } - protected boolean isProd() { + protected boolean isProdProject() { return "prod".equalsIgnoreCase(profile); } @@ -432,7 +432,7 @@ public class LakalaPayServiceImpl implements LakalaPayService { String splitEntrustFilePath = fileUploadResp.getStr("attFileId"); req.setSplitEntrustFilePath(splitEntrustFilePath); //比如:G1/M00/06/64/CrFdEmBQc-aAGc_XAAAiIbS3WIE960.pdf; - if (isProd()) { + if (isProdProject()) { projectDomain = projectDomain + "/api"; } // 给拉卡拉通知的回调地址 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 39b82604..71e68954 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 @@ -33,8 +33,8 @@ public class LakalaController extends BaseControllerImpl { @ApiOperation(value = "测试案例", notes = "测试案例") @RequestMapping(value = "/testcase", method = RequestMethod.POST) public Object testcase(@RequestBody JSONObject paramsJSON) { -// return lakalaPayService.applyLedgerMerEc(paramsJSON.getStr("mchMobile")); - return lakalaPayService.LedgerMerEcDownload(975790666910121984L); + return lakalaPayService.applyLedgerMerEc(paramsJSON.getStr("mchMobile")); +// return lakalaPayService.LedgerMerEcDownload(975790666910121984L); } @ApiOperation(value = "本地文件转base64", notes = "本地文件转base64") 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 0eb47c58..49a2da64 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 @@ -30,8 +30,6 @@ import com.suisung.mall.common.modules.lakala.LklLedgerReceiver; import com.suisung.mall.common.modules.store.ShopMchEntry; import com.suisung.mall.common.modules.store.ShopStoreBase; import com.suisung.mall.common.utils.*; -import com.suisung.mall.shop.esign.service.EsignContractFillingFileService; -import com.suisung.mall.shop.esign.service.EsignContractService; import com.suisung.mall.shop.lakala.service.*; import com.suisung.mall.shop.lakala.utils.LakalaUtil; import com.suisung.mall.shop.page.service.OssService; @@ -91,6 +89,8 @@ public class LakalaApiServiceImpl implements LakalaApiService { private String projectDomain; @Value("${spring.profiles.active}") private String profile; + @Value("${lakala.is_prod}") + private Boolean isLklProd; @Value("#{accountBaseConfigService.getConfig('tengxun_default_dir')}") private String TENGXUN_DEFAULT_DIR; @@ -112,14 +112,14 @@ public class LakalaApiServiceImpl implements LakalaApiService { @Resource private ShopMchEntryService shopMchEntryService; - @Lazy - @Resource - private - EsignContractService esignContractService; - - @Lazy - @Resource - private EsignContractFillingFileService esignContractFillingFileService; +// @Lazy +// @Resource +// private +// EsignContractService esignContractService; +// +// @Lazy +// @Resource +// private EsignContractFillingFileService esignContractFillingFileService; @Lazy @@ -151,10 +151,10 @@ public class LakalaApiServiceImpl implements LakalaApiService { return true; } - protected boolean isProd() { - return false; + protected boolean isProdProject() { +// return false; // 正式发布时再启用 - //return "prod".equalsIgnoreCase(profile); + return "prod".equalsIgnoreCase(profile); } @Override @@ -487,7 +487,7 @@ public class LakalaApiServiceImpl implements LakalaApiService { // 获取商家信息 ShopMchEntry shopMchEntry = shopMchEntryService.getShopMerchEntryByCondition(mchMobile, ""); if (shopMchEntry == null) { - return Pair.of(false, I18nUtil._("无法查找商家相关信息!")); + return Pair.of(false, I18nUtil._("缺少商家相关信息!")); } LklLedgerEc lklLedgerEc = lklLedgerEcService.getByMchMobile(mchMobile, "", CommonConstant.Enable); @@ -521,12 +521,14 @@ public class LakalaApiServiceImpl implements LakalaApiService { reqData.put("acct_name", shopMchEntry.getAccount_holder_name()); reqData.put("remark", "申请入网电子合同"); + // 正式上线的时候,调整 api 地址 String domain = projectDomain; - if (isProd()) { + if (isProdProject()) { domain += "/api"; } + // 给拉卡拉通知的回调地址 TODO 生产环境一定去掉 api - String retUrl = domain + "/api/mobile/shop/lakala/ec/applyNotify"; + String retUrl = domain + "/mobile/shop/lakala/ec/applyNotify"; reqData.put("ret_url", retUrl); LocalDate today = LocalDate.now(); // 获取当前日期 @@ -534,7 +536,7 @@ public class LakalaApiServiceImpl implements LakalaApiService { String platformName = "桂平发发网络有限公司"; String ratioNum = "0.6"; - if (isProd()) { + if (isLklProd) { ratioNum = "0.25"; } JSONObject ecParams = new JSONObject(); @@ -542,7 +544,7 @@ public class LakalaApiServiceImpl implements LakalaApiService { ecParams.put("A30", ratioNum); // 测试环境微信费率0.6 ecParams.put("A96", "1"); ecParams.put("A97", "是"); - ecParams.put("A100", "否"); + ecParams.put("A100", "是"); ecParams.put("A101", "中国境内"); ecParams.put("A102", platformName); ecParams.put("A103", "小发同城"); @@ -554,14 +556,22 @@ public class LakalaApiServiceImpl implements LakalaApiService { ecParams.put("A109", today.getDayOfMonth()); ecParams.put("B1", today.getYear()); ecParams.put("B3", "是"); + ecParams.put("B4", "是"); ecParams.put("B2", today.getMonthValue()); ecParams.put("B8", isQy ? shopMchEntry.getBiz_license_company() : shopMchEntry.getAccount_holder_name()); - ecParams.put("B9", StrUtil.subSufByLength(shopMchEntry.getSales_info(), 22)); + ecParams.put("B9", StrUtil.sub(shopMchEntry.getSales_info(), 0, 22)); ecParams.put("B10", isQy ? shopMchEntry.getBiz_license_company() : shopMchEntry.getAccount_holder_name()); ecParams.put("B14", isQy ? shopMchEntry.getBiz_license_number() : ""); ecParams.put("B16", isQy ? "是" : "否"); ecParams.put("B19", shopMchEntry.getOpenning_bank_code()); ecParams.put("B20", shopMchEntry.getAccount_number()); + + ecParams.put("B24", isQy ? shopMchEntry.getLegal_person_name() : shopMchEntry.getIndividual_id_name()); + ecParams.put("B25", isQy ? shopMchEntry.getLegal_person_id_number() : shopMchEntry.getIndividual_id_number()); + ecParams.put("B26", isQy ? shopMchEntry.getLegal_person_mobile() : shopMchEntry.getLogin_mobile()); + ecParams.put("B27", shopMchEntry.getContact_name()); + ecParams.put("B28", shopMchEntry.getEmail()); + ecParams.put("B31", shopMchEntry.getStore_name()); ecParams.put("B32", shopMchEntry.getContact_name()); ecParams.put("B33", shopMchEntry.getStore_address()); @@ -590,9 +600,8 @@ public class LakalaApiServiceImpl implements LakalaApiService { reqBody.put("version", "3.0"); reqBody.put("req_data", reqData); - - String reqUrl = serverUrl + "/sit/api/v3/mms/open_api/ec/apply"; - if (isProd()) { + String reqUrl = serverUrl + "/api/v3/mms/open_api/ec/apply"; + if (isLklProd) { reqUrl = serverUrl + "/api/v3/mms/open_api/ec/apply"; } @@ -602,20 +611,26 @@ public class LakalaApiServiceImpl implements LakalaApiService { JSONObject header = new JSONObject(); header.put("Authorization", authorization); + String errMsg = ""; ResponseEntity response = RestTemplateHttpUtil.sendPostBodyBackEntity(reqUrl, header, reqBody, JSONObject.class); if (ObjectUtil.isEmpty(response) || response.getStatusCode() != HttpStatus.OK) { - return Pair.of(false, "商家入网申请电子合同:请求失败"); + errMsg = "商家入网申请电子合同失败:请求失败"; + shopMchEntryService.updateMerchEntryApprovalByMchId(shopMchEntry.getId(), "", CommonConstant.MCH_APPR_STA_NOPASS, errMsg); + return Pair.of(false, errMsg); } JSONObject respBody = response.getBody(); if (ObjectUtil.isNotEmpty(respBody) && !lklSuccessCode.equals(respBody.getStr("code"))) { - String errMsg = StrUtil.isBlank(respBody.getStr("msg")) ? "返回状态有误" : respBody.getStr("msg"); - return Pair.of(false, "商家入网申请电子合同失败:" + errMsg); + errMsg = "商家入网申请电子合同失败:" + (StrUtil.isBlank(respBody.getStr("msg")) ? "返回状态有误" : respBody.getStr("msg")); + shopMchEntryService.updateMerchEntryApprovalByMchId(shopMchEntry.getId(), "", CommonConstant.MCH_APPR_STA_NOPASS, errMsg); + return Pair.of(false, errMsg); } JSONObject respData = respBody.getJSONObject("resp_data"); if (respBody.getJSONObject("resp_data") == null) { - return Pair.of(false, "商家入网申请电子合同失败:返回数据有误"); + errMsg = "商家入网申请电子合同失败:返回数据有误"; + shopMchEntryService.updateMerchEntryApprovalByMchId(shopMchEntry.getId(), "", CommonConstant.MCH_APPR_STA_NOPASS, errMsg); + return Pair.of(false, errMsg); } // 商家入网申请电子合同处理数据 @@ -630,96 +645,15 @@ public class LakalaApiServiceImpl implements LakalaApiService { record.setResp_body(respBody.toString()); Boolean success = lklLedgerEcService.saveOrUpdateByMchId(record); if (!success) { - return Pair.of(false, "商家入网申请电子合同失败:本地数据保存失败"); + errMsg = "商家入网申请电子合同失败:数据保存失败"; + shopMchEntryService.updateMerchEntryApprovalByMchId(shopMchEntry.getId(), "", CommonConstant.MCH_APPR_STA_NOPASS, errMsg); + return Pair.of(false, errMsg); } return Pair.of(true, "商家入网申请电子合同成功"); } - /** - * 商户分账业务开通申请 - * - * @param paramsJSON - * @return - */ - @Override - public CommonResult applyLedgerMer(JSONObject paramsJSON) { - log.info("商户分账业务开通申请开始"); - - // TODO 判断是否已经申请过? - // 1. 配置初始化 - initLKLSDK(); - - //2. 装配数据 - V2MmsOpenApiLedgerApplyLedgerMerRequest req = new V2MmsOpenApiLedgerApplyLedgerMerRequest(); - req.setVersion("2.0"); - req.setOrderNo(StringUtils.genLklOrderNo(8));// 14位年月日时(24小时制)分秒+8位的随机数 - req.setOrgCode(orgCode); - req.setMerInnerNo(paramsJSON.getStr("merInnerNo"));// 从进件申请返回的商户号 - req.setMerCupNo(paramsJSON.getStr("merCupNo")); // 从进件申请返回的商户号 - req.setContactMobile(paramsJSON.getStr("contactMobile")); // 商户入驻注册的手机号 - // 分账比例为了考虑低价订单的运费占比高,分账比例暂时定70%分账给商户,30%分账给平台 - // new BigDecimal(paramsJSON.getStr("splitLowestRatio")) - req.setSplitLowestRatio(new BigDecimal(ratio)); - String fileName = paramsJSON.getStr("splitEntrustFileName"); - req.setSplitEntrustFileName(fileName); - - // 分账结算委托书文件上传到拉卡拉服务器 - JSONObject fileUploadResp = uploadFile(req.getOrderNo(), "SPLIT_ENTRUST_FILE", StringUtils.getFileExt(fileName), UploadUtil.fileUrlToBase64(paramsJSON.getStr("splitEntrustFile"))); - if (fileUploadResp == null || StrUtil.isBlank(fileUploadResp.getStr("attFileId"))) { - throw new ApiException(I18nUtil._("分账结算委托书上传失败!")); - } - - String splitEntrustFilePath = fileUploadResp.getStr("attFileId"); - req.setSplitEntrustFilePath(splitEntrustFilePath); //比如:G1/M00/06/64/CrFdEmBQc-aAGc_XAAAiIbS3WIE960.pdf; - - String domain = projectDomain; - if (isProd()) { - domain += "/api"; - } - // 给拉卡拉通知的回调地址 - String retUrl = domain + "/mobile/shop/lakala/ledger/applyLedgerMerNotify"; - req.setRetUrl(retUrl); - - paramsJSON.set("orderNo", req.getOrderNo()); - paramsJSON.set("version", "2.0"); - paramsJSON.set("ret_url", retUrl); - paramsJSON.set("org_code", orgCode); - paramsJSON.set("split_entrust_file_path", splitEntrustFilePath); - - 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) { - return CommonResult.failed(I18nUtil._("申请开通分账失败!")); - } - - if (!lakalaRespJSON.getStr("retCode").equals(lklSuccessCode)) { - return CommonResult.failed(lakalaRespJSON.getStr("retMsg")); - } - - paramsJSON.set("apply_id", lakalaRespJSON.getByPath("respData.applyId")); - paramsJSON.set("remark", lakalaRespJSON.getStr("retMsg")); - paramsJSON.set("audit_status_text", paramsJSON.get("remark")); - - paramsJSON.set("mch_id", paramsJSON.get("mchId")); - - // 新增数据 - // 将 JSON 对象的键名转换为下划线命名 - LklLedgerMember lklLedgerMember = JSONUtil.toBean(StringUtils.convertCamelToSnake(paramsJSON.toString()), LklLedgerMember.class); - lklLedgerMemberService.saveOrUpdateByMerCupNo(lklLedgerMember); - - return CommonResult.success(null, "提交成功,待审核中!"); - } catch (SDKException e) { - log.error("申请开通分账出错:", e); - throw new ApiException(I18nUtil._("商家申请开通分账出错!"), e); - } - } - @Override public Pair innerApplyLedgerMer(String merCupNo) { log.debug("商户分账业务开通申请开始"); @@ -758,7 +692,7 @@ public class LakalaApiServiceImpl implements LakalaApiService { 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._("小发同城分账授权委托书上传失败!")); @@ -768,7 +702,7 @@ public class LakalaApiServiceImpl implements LakalaApiService { req.setSplitEntrustFilePath(splitEntrustFilePath); //比如:G1/M00/06/64/CrFdEmBQc-aAGc_XAAAiIbS3WIE960.pdf; String domain = projectDomain; - if (isProd()) { + if (isProdProject()) { domain += "/api"; } // 给拉卡拉通知的回调地址 @@ -792,7 +726,6 @@ public class LakalaApiServiceImpl implements LakalaApiService { paramsJSON.put("split_entrust_file_name", req.getSplitEntrustFileName()); paramsJSON.put("split_entrust_file_path", splitEntrustFilePath); - try { //3. 发送请求 String responseStr = LKLSDK.httpPost(req); @@ -834,16 +767,18 @@ public class LakalaApiServiceImpl implements LakalaApiService { */ @Override public JSONObject applyLedgerMerEcNotify(HttpServletRequest request) { - log.info("商户入网电子合同申请回调通知开始"); + log.debug("商户入网电子合同申请回调通知开始"); // 验签 String authorization = request.getHeader("Authorization"); String requestBody = LakalaUtil.getBody(request); - log.info("商户入网电子合同申请回调返回参数:{}", requestBody); + log.debug("商户入网电子合同申请回调返回request body参数:{}", requestBody); + log.debug("商户入网电子合同申请回调返回authorization参数:{}", authorization); + String errMsg = "商户入网电子合同申请回调:"; boolean checkSuccess = LakalaUtil.verify(authorization, requestBody, lklNotifyCerPath); if (!checkSuccess) { - log.info("商户入网电子合同申请回调:验签失败"); + log.error(errMsg + "验签失败"); return JSONUtil.createObj().set("retCode", "OP90002").set("retMsg", "验签失败!"); } @@ -858,21 +793,21 @@ public class LakalaApiServiceImpl implements LakalaApiService { String ecNo = paramsJSON.getStr("ecNo"); String ecStatus = paramsJSON.getStr("ecStatus"); // COMPLETED if (ecStatus == null || !ecStatus.equals("COMPLETED")) { - log.info("商户入网电子合同申请状态尚未签署完成!"); - respData.put("retMsg", "入网电子合同尚未签署完成!"); + log.debug("商户入网电子合同申请状态尚未签署完成!"); + respData.put("retMsg", "入网电子合同尚未签署,请稍候!"); return respData; } if (ecApplyId == null || StrUtil.isBlank(ecNo)) { - log.info("商户入网电子合同申请回调:ecApplyId 为空"); + log.error("商户入网电子合同申请回调:ecApplyId 为空"); respData.put("retMsg", "ecApplyId 返回空值!"); return respData; } LklLedgerEc lklLedgerEc = lklLedgerEcService.getByApplyId(ecApplyId, "", CommonConstant.Enable); if (lklLedgerEc == null) { - log.info("商户入网电子合同申请回调:未找到对应的入网电子合同记录"); - respData.put("retMsg", "未找到对应的入网电子合同记录!"); + log.error("商户入网电子合同申请回调:找不到对应入网lklLedgerEc电子合同记录"); + respData.put("retMsg", "找不到对应入网电子合同记录!"); return respData; } @@ -896,20 +831,23 @@ public class LakalaApiServiceImpl implements LakalaApiService { // 更新本地数据状态和合同编号、合同名字 Boolean success = lklLedgerEcService.updateByApplyId(updRecord); if (success) { - respData.put("retCode", lklSuccessCode); - respData.put("retMsg", "操作成功!"); - log.info("商户入网电子合同申请回调:处理成功"); - - // 更新商家入驻表的合同编号,和签署地址 + // 更新商家入驻表的合同编号,和签署地址,更改状态 shopMchEntryService.updateMerchEntryLklEcNo(lklLedgerEc.getMch_id(), ecNo, paramsJSON.getStr("ecName"), lklLedgerEc.getResult_url(), ecFileUrl); // TODO 商家电子合同签署完毕后,收到异步通知,触发拉卡拉商家进件(重要环节) // 下一步,等待拉卡拉系统审核,和人工审核,收到异步通知之后,触发1、e签宝的电子合同签署,2、新增分账接收方 Pair resultPair = lklTkService.registrationMerchant(lklLedgerEc.getMch_mobile(), ""); if (!resultPair.getFirst()) { - log.error("###商户入网电子合同签署通知回调:拉卡拉商家进件失败:", resultPair.getSecond()); - // return CommonResult.failed(resultPair.getSecond()); + errMsg += resultPair.getSecond(); + log.error(errMsg); + shopMchEntryService.updateMerchEntryApprovalByMchId(lklLedgerEc.getMch_id(), "", CommonConstant.MCH_APPR_STA_NOPASS, errMsg); + respData.put("retMsg", errMsg); + return respData; } + + respData.put("retCode", lklSuccessCode); + respData.put("retMsg", "操作成功!"); + log.info("商户入网电子合同申请回调:处理成功"); } } @@ -939,8 +877,8 @@ public class LakalaApiServiceImpl implements LakalaApiService { reqBody.put("version", "1.0"); reqBody.put("req_data", reqData); - String reqUrl = serverUrl + "/sit/api/v3/mms/open_api/ec/download"; - if (isProd()) { + String reqUrl = serverUrl + "/api/v3/mms/open_api/ec/download"; + if (isLklProd) { reqUrl = serverUrl + "/api/v3/mms/open_api/ec/download"; } @@ -990,6 +928,7 @@ public class LakalaApiServiceImpl implements LakalaApiService { .concat(lklLedgerEc.getMch_mobile()).concat("/") .concat("signed").concat("/") .concat(ecApplyId.toString()).concat(".pdf"); + log.debug("拉卡拉电子合同保存地址:{}", cosFileName); // 上传到cos服务器 String cosFileUrl = ossService.uploadObject4OSS(file, cosFileName); @@ -1000,6 +939,94 @@ public class LakalaApiServiceImpl implements LakalaApiService { return cosFileUrl; } + /** + * 商户分账业务开通申请 + * + * @param paramsJSON + * @return + */ + @Override + public CommonResult applyLedgerMer(JSONObject paramsJSON) { + log.debug("商户分账业务开通申请1开始"); + + // TODO 判断是否已经申请过? + // 1. 配置初始化 + initLKLSDK(); + + //2. 装配数据 + V2MmsOpenApiLedgerApplyLedgerMerRequest req = new V2MmsOpenApiLedgerApplyLedgerMerRequest(); + req.setVersion("2.0"); + req.setOrderNo(StringUtils.genLklOrderNo(8));// 14位年月日时(24小时制)分秒+8位的随机数 + req.setOrgCode(orgCode); + req.setMerInnerNo(paramsJSON.getStr("merInnerNo"));// 从进件申请返回的商户号 + req.setMerCupNo(paramsJSON.getStr("merCupNo")); // 从进件申请返回的商户号 + req.setContactMobile(paramsJSON.getStr("contactMobile")); // 商户入驻注册的手机号 + // 分账比例为了考虑低价订单的运费占比高,分账比例暂时定70%分账给商户,30%分账给平台 + // new BigDecimal(paramsJSON.getStr("splitLowestRatio")) + req.setSplitLowestRatio(new BigDecimal(ratio)); + String fileName = paramsJSON.getStr("splitEntrustFileName"); + req.setSplitEntrustFileName(fileName); + + // 分账结算委托书文件上传到拉卡拉服务器 + JSONObject fileUploadResp = uploadFile(req.getOrderNo(), "SPLIT_ENTRUST_FILE", StringUtils.getFileExt(fileName), UploadUtil.fileUrlToBase64(paramsJSON.getStr("splitEntrustFile"))); + if (fileUploadResp == null || StrUtil.isBlank(fileUploadResp.getStr("attFileId"))) { + throw new ApiException(I18nUtil._("分账结算委托书上传失败!")); + } + + String splitEntrustFilePath = fileUploadResp.getStr("attFileId"); + req.setSplitEntrustFilePath(splitEntrustFilePath); //比如:G1/M00/06/64/CrFdEmBQc-aAGc_XAAAiIbS3WIE960.pdf; + + // 正式上线的时候,调整 api 地址 + String domain = projectDomain; + if (isProdProject()) { + domain += "/api"; + } + // 给拉卡拉通知的回调地址 + String retUrl = domain + "/mobile/shop/lakala/ledger/applyLedgerMerNotify"; + req.setRetUrl(retUrl); + + paramsJSON.set("orderNo", req.getOrderNo()); + paramsJSON.set("version", "2.0"); + paramsJSON.set("ret_url", retUrl); + paramsJSON.set("org_code", orgCode); + paramsJSON.set("split_entrust_file_path", splitEntrustFilePath); + + String errMsg = "商户分账业务开通申请:"; + + 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) { + return CommonResult.failed(I18nUtil._("申请开通分账失败!")); + } + + if (!lakalaRespJSON.getStr("retCode").equals(lklSuccessCode)) { + return CommonResult.failed(lakalaRespJSON.getStr("retMsg")); + } + + paramsJSON.set("apply_id", lakalaRespJSON.getByPath("respData.applyId")); + paramsJSON.set("remark", lakalaRespJSON.getStr("retMsg")); + paramsJSON.set("audit_status_text", paramsJSON.get("remark")); + + paramsJSON.set("mch_id", paramsJSON.get("mchId")); + + // 新增数据 + // 将 JSON 对象的键名转换为下划线命名 + LklLedgerMember lklLedgerMember = JSONUtil.toBean(StringUtils.convertCamelToSnake(paramsJSON.toString()), LklLedgerMember.class); + lklLedgerMemberService.saveOrUpdateByMerCupNo(lklLedgerMember); + + return CommonResult.success(null, "提交成功,待审核中!"); + } catch (SDKException e) { + errMsg += e.getMessage(); + log.error(errMsg); + shopMchEntryService.updateMerchEntryApprovalByMchId(paramsJSON.getLong("mchId"), paramsJSON.getStr("mchMobile"), CommonConstant.MCH_APPR_STA_NOPASS, errMsg); + throw new ApiException(I18nUtil._("商家申请开通分账出错!"), e); + } + } + /** * 商户分账业务开通申请回调 * 参考:https://o.lakala.com/#/home/document/detail?id=379 @@ -1009,37 +1036,50 @@ public class LakalaApiServiceImpl implements LakalaApiService { */ @Override public JSONObject applyLedgerMerNotify(HttpServletRequest request) { - log.info("商户分账申请业务异步通知开始"); + log.debug("商户分账申请业务异步回调通知开始"); // 验签 String authorization = request.getHeader("Authorization"); String requestBody = LakalaUtil.getBody(request); - log.info("商户分账申请业务回调返回参数:{}", requestBody); + log.debug("商户分账申请业务异步回调返回request body参数:{}", requestBody); + log.debug("商户分账申请业务异步回调返回authorization参数:{}", authorization); boolean checkSuccess = LakalaUtil.verify(authorization, requestBody, lklNotifyCerPath); if (!checkSuccess) { - log.info("商户分账申请业务回调:验签失败"); - return JSONUtil.createObj().set("retCode", "OP90002").set("retMsg", "验签失败!"); + log.error("商户分账申请业务回调:验签失败"); + return JSONUtil.createObj().put("retCode", "OP90002").put("retMsg", "验签失败!"); } JSONObject paramsJSON = JSONUtil.parseObj(requestBody); + String errMsg = "商户分账申请业务回调:"; JSONObject respData = new JSONObject(); respData.put("retCode", "OP90003"); respData.put("retMsg", "响应处理失败!"); if (paramsJSON != null) { String applyId = paramsJSON.getStr("applyId"); - if (StrUtil.isBlank(applyId)) { - log.info("商户分账申请业务回调:applyId为空"); - respData.put("retMsg", "applyId为空!"); + String auditStatus = paramsJSON.getStr("auditStatus"); + if (StrUtil.isBlank(applyId) || StrUtil.isBlank(auditStatus)) { + errMsg += "缺少返回必要参数"; + log.error(errMsg + ":applyId={}, auditStatus={}", applyId, auditStatus); + + respData.put("retMsg", errMsg); return respData; } - if (lklLedgerMemberService.getByApplyId(applyId, CommonConstant.Enable) != null) { + //auditStatus:1:通过,2拒绝 + if (!auditStatus.equals("1")) { + respData.put("retMsg", "商户分账申请被驳回!"); + return respData; + } + + LklLedgerMember lklLedgerMember = lklLedgerMemberService.getByApplyId(applyId, CommonConstant.Enable); + if (lklLedgerMember != null) { respData.put("retCode", lklSuccessCode); - respData.put("retMsg", "操作成功!"); - log.info("商户分账申请业务回调:已处理成功,不需再重新处理"); + respData.put("retMsg", "商户分账申请已处理成功!"); + log.debug("商户分账申请业务回调:已处理成功,不需再重新处理"); + return respData; } // 更改本地分账记录状态数据 @@ -1055,24 +1095,27 @@ public class LakalaApiServiceImpl implements LakalaApiService { ); if (success) { - respData.put("retCode", lklSuccessCode); - respData.put("retMsg", "操作成功!"); - log.info("商户分账申请业务回调:处理成功"); - // 重要注:商户分账申请业务成功后,同时也会新增接收方,这时系统绑定接收方(平台方和代理商),绑定之前,要判断是否已经绑定过了? JSONObject bindParamsJSON = new JSONObject(); bindParamsJSON.put("merInnerNo", paramsJSON.getStr("merInnerNo")); bindParamsJSON.put("merCupNo", merCupNo); Pair bindResult = innerApplyLedgerMerReceiverBind(bindParamsJSON); - if (bindResult.getFirst()) { - log.info("商户分账申请业务回调:", bindResult.getSecond()); - } else { - log.error("商户分账申请业务回调:", bindResult.getSecond()); + if (!bindResult.getFirst()) { + errMsg += bindResult.getSecond(); + log.error("商户{}预绑定接收方出错:{}", merCupNo, bindResult.getSecond()); + + shopMchEntryService.updateMerchEntryApprovalByMchId(lklLedgerMember.getMch_id(), "", CommonConstant.MCH_APPR_STA_NOPASS, errMsg); + respData.put("retMsg", "操作成功!"); + return respData; } - // 更新商家的hasApplySplit状态=1 - lklLedgerMemberService.updateMulStatus(merCupNo, "", 0, 1, 0, 0); + // 更新商家的hasApplySplit状态=1;has_esigned=1 + lklLedgerMemberService.updateMulStatus(merCupNo, "", 1, 1, 0, 0); + respData.put("retCode", lklSuccessCode); + respData.put("retMsg", "操作成功!"); + log.debug("商户分账申请业务回调:处理成功"); + return respData; } } @@ -1231,8 +1274,9 @@ public class LakalaApiServiceImpl implements LakalaApiService { String splitEntrustFileBase64 = UploadUtil.fileUrlToBase64(paramsJSON.getStr("entrustFile")); // 这个是 url 地址,不是 base64 字节码 req.setEntrustFileName(fileName); + // 正式上线的时候,调整 api 地址 String domain = projectDomain; - if (isProd()) { + if (isProdProject()) { domain += "/api"; } // 给拉卡拉通知的回调地址 @@ -1263,7 +1307,11 @@ public class LakalaApiServiceImpl implements LakalaApiService { String responseStr = LKLSDK.httpPost(req); JSONObject lakalaRespJSON = JSONUtil.parseObj(responseStr); - if (lakalaRespJSON == null || !lakalaRespJSON.getStr("retCode").equals(lklSuccessCode)) { + if (lakalaRespJSON == null) { + throw new ApiException(I18nUtil._(lakalaRespJSON.getStr("retMsg"))); + } + + if (!lakalaRespJSON.getStr("retCode").equals(lklSuccessCode)) { throw new ApiException(I18nUtil._(lakalaRespJSON.getStr("retMsg"))); } @@ -1275,7 +1323,6 @@ public class LakalaApiServiceImpl implements LakalaApiService { LklLedgerMerReceiverBind lklLedgerMerReceiverBind = JSONUtil.toBean(StringUtils.convertCamelToSnake(paramsJSON.toString()), LklLedgerMerReceiverBind.class); lklLedgerMerReceiverBindService.saveOrUpdateByMerCupNoReceiverNo(lklLedgerMerReceiverBind); - return CommonResult.success(lklLedgerMerReceiverBind, "提交成功,待审核中!"); } catch (SDKException e) { log.error("分账绑定关系申请失败:", e); @@ -1342,7 +1389,7 @@ public class LakalaApiServiceImpl implements LakalaApiService { req.setEntrustFileName(entrustFileName); String domain = projectDomain; - if (isProd()) { + if (isProdProject()) { domain += "/api"; } // 给拉卡拉通知的回调地址 @@ -1415,15 +1462,16 @@ public class LakalaApiServiceImpl implements LakalaApiService { */ @Override public JSONObject applyLedgerMerReceiverBindNotify(HttpServletRequest request) { - log.debug("分账绑定关系申请业务异步通知开始"); + log.debug("分账商家绑定接收方异步回调通知开始"); // 验签 String authorization = request.getHeader("Authorization"); String requestBody = LakalaUtil.getBody(request); - log.debug("分账绑定关系申请业务回调返回参数:{}", requestBody); + log.debug("分账商家绑定接收方异步回调返回request body参数:{}", requestBody); + log.debug("分账商家绑定接收方异步回调返回authorization参数:{}", authorization); boolean checkSuccess = LakalaUtil.verify(authorization, requestBody, lklNotifyCerPath); if (!checkSuccess) { - return JSONUtil.createObj().set("retCode", "OP90002").set("retMsg", "验签失败!"); + return JSONUtil.createObj().put("retCode", "OP90002").put("retMsg", "验签失败!"); } JSONObject paramsJSON = JSONUtil.parseObj(requestBody); @@ -1433,7 +1481,23 @@ public class LakalaApiServiceImpl implements LakalaApiService { if (paramsJSON != null) { String merCupNo = paramsJSON.getStr("merCupNo"); - Boolean success = lklLedgerMerReceiverBindService.updateAuditResult(paramsJSON.getStr("applyId"), + String applyId = paramsJSON.getStr("applyId"); + String auditStatus = paramsJSON.getStr("auditStatus"); + if (StrUtil.isBlank(merCupNo) || StrUtil.isBlank(applyId) || StrUtil.isBlank(auditStatus)) { + String errMsg = "缺少返回必要参数"; + log.error(errMsg + ":applyId={}, applyId={}, auditStatus={}", merCupNo, applyId, auditStatus); + + respData.put("retMsg", errMsg); + return respData; + } + + //auditStatus:1:通过,2拒绝 + if (!auditStatus.equals("1")) { + respData.put("retMsg", "绑定接收方被驳回!"); + return respData; + } + + Boolean success = lklLedgerMerReceiverBindService.updateAuditResult(applyId, paramsJSON.getStr("merInnerNo"), merCupNo, paramsJSON.getStr("receiverNo"), @@ -1443,8 +1507,6 @@ public class LakalaApiServiceImpl implements LakalaApiService { paramsJSON.getStr("auditStatusText"), paramsJSON.getStr("remark")); if (success) { - respData.put("retCode", lklSuccessCode); - // 更改商家的状态 has_bind_receiver 状态=1 lklLedgerMemberService.updateMulStatus(merCupNo, "", 0, 0, 0, 1); @@ -1455,16 +1517,19 @@ public class LakalaApiServiceImpl implements LakalaApiService { String mchMobile = shopEntry.getLogin_mobile(); Pair retPair = shopStoreBaseService.merchEntryInfo2StoreInfo(mchMobile); if (retPair.getFirst() > 0) { + // 2025-05-17暂停e签宝电子合同生成流程 // 更改合同记录表的店铺id - esignContractService.updateContractStoreId(mchMobile, retPair.getFirst()); + // esignContractService.updateContractStoreId(mchMobile, retPair.getFirst()); // 填充合同模版表的店铺Id - esignContractFillingFileService.updateContractFillingStoreId(mchMobile, retPair.getFirst()); + // esignContractFillingFileService.updateContractFillingStoreId(mchMobile, retPair.getFirst()); // 店铺创建状态已完成 shopMchEntryService.updateMerchEntryStoreStatus(mchMobile, CommonConstant.Enable); } } + respData.put("retCode", lklSuccessCode); respData.put("retMsg", "操作成功!"); + return respData; } } diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LklLedgerMemberServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LklLedgerMemberServiceImpl.java index b944cf6b..31a0a538 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LklLedgerMemberServiceImpl.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LklLedgerMemberServiceImpl.java @@ -146,7 +146,7 @@ public class LklLedgerMemberServiceImpl extends BaseServiceImpl updateWrapper = new UpdateWrapper<>(); if (StrUtil.isNotBlank(mchMobile)) { - updateWrapper.eq("mch_mobile", mchMobile); + updateWrapper.eq("contact_mobile", mchMobile); } if (StrUtil.isNotBlank(merCupNo)) { updateWrapper.eq("mer_cup_no", merCupNo); 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 59720908..d25d9868 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,6 +194,8 @@ public class LklLedgerReceiverServiceImpl extends BaseServiceImpl updResponse = RestTemplateHttpUtil.sendPostBodyBackEntity(buildLklTkUrl(updUrlPath), header, requestBody, JSONObject.class); + ResponseEntity updResponse = RestTemplateHttpUtil.sendPostBodyBackEntity(buildLklTkUrl(urlPath), header, requestBody, JSONObject.class); if (ObjectUtil.isEmpty(updResponse) || updResponse.getStatusCode() != HttpStatus.OK || ObjectUtil.isEmpty(updResponse.getBody())) { @@ -221,13 +230,20 @@ public class LklTkServiceImpl { JSONObject header = new JSONObject(); header.put("Authorization", authorization); - String ocrUrlPath = isProd() ? "/registration/ocr/result" : "/sit/htkregistration/ocr/result"; + JSONObject ocrRequestBody = new JSONObject(); ocrRequestBody.put("batchNo", batchNo); ocrRequestBody.put("imgType", imgType); logger.info("ocr请求参数:{}", ocrRequestBody); + + String urlPath = "/sit/htkregistration/ocr/result"; + if (isLklProd) { + // 生产环境启用 + urlPath = "/registration/ocr/result"; + } + try { - ResponseEntity ocrResponse = RestTemplateHttpUtil.sendPostBodyBackEntity(buildLklTkUrl(ocrUrlPath), header, ocrRequestBody, JSONObject.class); + ResponseEntity ocrResponse = RestTemplateHttpUtil.sendPostBodyBackEntity(buildLklTkUrl(urlPath), header, ocrRequestBody, JSONObject.class); if (ObjectUtil.isEmpty(ocrResponse) || ocrResponse.getStatusCode() != HttpStatus.OK || ObjectUtil.isEmpty(ocrResponse.getBody())) { @@ -264,7 +280,14 @@ public class LklTkServiceImpl { formData.put("client_id", clientId); formData.put("client_secret", clientSecret); - String response = RestTemplateHttpUtil.sendPostFormData(buildLklTkUrl("/sit/htkauth/oauth/token"), null, formData, String.class); + String urlPath = "/sit/htkauth/oauth/token"; + if (isLklProd) { + // 生产环境启用 + urlPath = "/auth/oauth/token"; + } + + + String response = RestTemplateHttpUtil.sendPostFormData(buildLklTkUrl(urlPath), null, formData, String.class); if (ObjectUtil.isEmpty(response)) { return ""; } @@ -298,7 +321,7 @@ public class LklTkServiceImpl { header.put("Authorization", getLklTkAuthorization()); // 获取商家入驻信息,组成请求参数 - ShopMchEntry shopMchEntry = shopMchEntryService.getShopMerchEntryByCondition(mchMobile, bizLicenseNumber, CommonConstant.MCH_APPR_STA_PASS, CommonConstant.MCH_APPR_STA_LKL_PADDING); + ShopMchEntry shopMchEntry = shopMchEntryService.getShopMerchEntryByCondition(mchMobile, bizLicenseNumber); if (ObjectUtil.isEmpty(shopMchEntry)) { return Pair.of(false, "商家入驻信息不存在"); } @@ -401,7 +424,6 @@ public class LklTkServiceImpl { } } - // 费率和设备、活动 JSONObject bizContent = new JSONObject(); bizContent.put("activityId", 687); @@ -465,7 +487,14 @@ public class LklTkServiceImpl { formData.put("attchments", attachments); // 附件文件相关结束 - String urlPath = isProd() ? "/registration/merchant" : "/sit/htkregistration/merchant"; + String urlPath = "/sit/htkregistration/merchant"; + if (isLklProd) { + // 生产环境启用 + urlPath = "/registration/merchant"; + } + + +// String urlPath = isProd() ? "/registration/merchant" : "/sit/htkregistration/merchant"; try { logger.info("进件请求参数:{}", JSONUtil.toJsonStr(formData)); @@ -497,7 +526,7 @@ public class LklTkServiceImpl { } /** - * 拉卡拉进件异步通知 + * (重要)拉卡拉进件异步通知 * * @param request * @return @@ -533,10 +562,15 @@ public class LklTkServiceImpl { // 逻辑处理 JSONObject dataJSON = JSONUtil.parseObj(data); - if (dataJSON.isEmpty() || StrUtil.isBlank(dataJSON.getStr("externalCustomerNo"))) { + if (dataJSON.isEmpty() || StrUtil.isBlank(dataJSON.getStr("externalCustomerNo")) || StrUtil.isBlank(dataJSON.getStr("status"))) { return new JSONObject().set("code", "500").set("message", "参数解析出错"); } + String auditStatus = dataJSON.getStr("status"); + if (!"SUCCESS".equals(auditStatus) && !"REVIEW_PASS".equals(auditStatus)) { + return new JSONObject().set("code", "500").set("message", "返回审核状态有误"); + } + // 给商家入驻表增加拉卡拉的商户号和拉卡拉返回的数据 String merCupNo = dataJSON.getStr("externalCustomerNo"); //拉卡拉外部商户号 String merInnerNo = dataJSON.getStr("customerNo"); //拉卡拉内部商户号 @@ -551,24 +585,40 @@ public class LklTkServiceImpl { return new JSONObject().set("code", "500").set("message", "更新商户号失败"); } - logger.debug("###开始异步执行生成电子合同模版和填充模版数据,并生该商家和平台方签署的未盖章合同文件###"); - // 生成电子合同模版和填充模版数据,并生该商家和平台方签署的未盖章合同文件 - Boolean genSuccess = esignContractFillingFileService.fillDocTemplate(shopMchEntry.getLogin_mobile(), ""); - if (!genSuccess) { - logger.error("###商家入驻电子合同生成失败###"); + // 备注:RMK 采用拉卡拉的入网电子合同签署流程,暂停e签宝的电子合同生成流程 +// logger.debug("###开始异步执行生成电子合同模版和填充模版数据,并生该商家和平台方签署的未盖章合同文件###"); +// // 生成电子合同模版和填充模版数据,并生该商家和平台方签署的未盖章合同文件 +// Boolean genSuccess = esignContractFillingFileService.fillDocTemplate(shopMchEntry.getLogin_mobile(), ""); +// if (!genSuccess) { +// logger.error("###商家入驻电子合同生成失败###"); +// } +// +// // 1、发起E签宝合同签署;签署完成之后,生成分账盖章协议书,下一步才能申请分账功能权限; +// Pair resPair = esignContractService.innerSignFlowCreateByFile(shopMchEntry.getLogin_mobile()); +// if (!resPair.getFirst()) { +// logger.error("###商家发起电子签名失败:{}###", resPair.getSecond()); +// } + + // 给商家申请分账功能使用;务必检查是否申请过?申请过忽略 + if (success && StrUtil.isNotBlank(shopMchEntry.getContract_download_url())) { + + // 1、(电子合同)给商家申请分账功能使用;务必检查是否申请过?申请过忽略 + // 下一步等待拉卡拉审核通过,再绑定接收方和商家的关系 + Pair retPair = lakalaApiService.innerApplyLedgerMer(shopMchEntry.getLkl_mer_cup_no()); + if (!retPair.getFirst()) { + logger.error("商家申请分账功能失败:{}", retPair.getSecond()); + } + + // 更新商家的hasEsigned状态=1 +// lklLedgerMemberService.updateMulStatus("", shopMchEntry.getLogin_mobile(), 1, 0, 0, 0); + + // 2:新增一个接收方记录,起码要一个平台方,代理商根据入驻信息新增 + Boolean genSuccess = lklLedgerReceiverService.innerApplyLedgerReceiver(merCupNo, shopMchEntry.getDistributor_id()); + if (!genSuccess) { + logger.error("申请分账接收方失败"); + } } - // 1、发起E签宝合同签署;签署完成之后,生成分账盖章协议书,下一步才能申请分账功能权限; - Pair resPair = esignContractService.innerSignFlowCreateByFile(shopMchEntry.getLogin_mobile()); - if (!resPair.getFirst()) { - logger.error("###商家发起电子签名失败:{}###", resPair.getSecond()); - } - - // 2:新增一个接收方记录,起码要一个平台方,代理商根据入驻信息新增 - genSuccess = lklLedgerReceiverService.innerApplyLedgerReceiver(merCupNo, shopMchEntry.getDistributor_id()); - if (!genSuccess) { - logger.error("###申请分账接收方失败###"); - } return new JSONObject().set("code", "200").set("message", "成功"); } @@ -603,9 +653,6 @@ public class LklTkServiceImpl { countryName = areaNames[2]; } - String urlPath = isProd() ? "/registration/organization" : "/sit/htkregistration/organization"; - urlPath = isBankArea ? urlPath + "/bank" : urlPath; // 银行地区 - String authorization = getLklTkAuthorization(); if (StrUtil.isBlank(authorization)) { logger.error("获取拉卡拉token失败"); @@ -615,6 +662,13 @@ public class LklTkServiceImpl { JSONObject header = new JSONObject(); header.put("Authorization", getLklTkAuthorization()); + String urlPath = "/sit/htkregistration/organization"; + if (isLklProd) { + // 生产环境启用 + urlPath = "/registration/organization"; + } + urlPath = isBankArea ? urlPath + "/bank" : urlPath; // 银行地区 + // 省份列表 ResponseEntity response = RestTemplateHttpUtil.sendGetWithHeader(buildLklTkUrl(urlPath + "/1"), header, JSONArray.class); @@ -702,7 +756,6 @@ public class LklTkServiceImpl { JSONObject header = new JSONObject(); header.put("Authorization", getLklTkAuthorization()); - String updUrlPath = isProd() ? "/registration/file/base/upload" : "/sit/htkregistration/file/base/upload"; String fileBase64 = UploadUtil.fileUrlToBase64(fileUrl); if (StrUtil.isBlank(fileBase64)) { logger.error("文件转换失败"); @@ -716,8 +769,14 @@ public class LklTkServiceImpl { requestBody.put("sourcechnl", "0"); // 来源: 0:PC,1:安卓,2:IOS requestBody.put("isOcr", "true"); + String urlPath = "/sit/htkregistration/file/base/upload"; + if (isLklProd) { + // 生产环境启用 + urlPath = "/registration/file/base/upload"; + } + try { - ResponseEntity updResponse = RestTemplateHttpUtil.sendPostBodyBackEntity(buildLklTkUrl(updUrlPath), header, requestBody, JSONObject.class); + ResponseEntity updResponse = RestTemplateHttpUtil.sendPostBodyBackEntity(buildLklTkUrl(urlPath), header, requestBody, JSONObject.class); if (ObjectUtil.isEmpty(updResponse) || updResponse.getStatusCode() != HttpStatus.OK) { logger.error("上传文件返回值有误"); 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 6a46aa13..16c64804 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 @@ -190,5 +190,15 @@ public interface ShopMchEntryService { */ Boolean updateMerchEntryLklEcNo(Long id, String lklEcNo, String lklEcName, String lklEcResultUrl, String ecDownloadUrl); + /** + * 更新商家入驻申请的审批状态和审批备注 + * + * @param mchId 商家入驻申请 ID,mchId和mchMobile至少必填一个 + * @param mchMobile 商家注册的手机号 mchId和mchMobile至少必填一个 + * @param approvalStatus 入驻商家的审批状态:1-已通过;2-未通过;3-待审核;4-未申请过;5-已提交拉卡拉审核; + * @param approvalRemark 审批备注 + * @return + */ + Boolean updateMerchEntryApprovalByMchId(Long mchId, String mchMobile, Integer approvalStatus, String approvalRemark); } \ No newline at end of file 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 0def9e67..9458464f 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 @@ -828,6 +828,7 @@ public class ShopMchEntryServiceImpl extends BaseServiceImpl updateWrapper = new UpdateWrapper<>(); + if (ObjectUtil.isNotEmpty(mchId)) { + updateWrapper.eq("id", mchId); + } + if (StrUtil.isNotBlank(mchMobile)) { + updateWrapper.eq("login_mobile", mchMobile); + } + + if (ObjectUtil.isNotEmpty(approvalStatus)) { + updateWrapper.set("approval_status", approvalStatus); + } + + if (StrUtil.isNotBlank(approvalRemark)) { + updateWrapper.set("approval_remark", approvalRemark); + } return update(updateWrapper); } diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStoreBaseServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStoreBaseServiceImpl.java index 0a4fe6df..84310272 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStoreBaseServiceImpl.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStoreBaseServiceImpl.java @@ -3008,7 +3008,7 @@ public class ShopStoreBaseServiceImpl extends BaseServiceImpl