From 4247e5f6cff5d71cfa3598d5304f349e72a70b59 Mon Sep 17 00:00:00 2001 From: Jack <46790855@qq.com> Date: Wed, 3 Sep 2025 17:34:16 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E8=BF=9B=E4=BB=B6=E6=B5=81?= =?UTF-8?q?=E7=A8=8B,=20=E8=A1=A5=E5=81=BF=E6=9C=BA=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../account/controller/LoginController.java | 4 +- .../admin/AccountUserBaseController.java | 15 +-- .../service/AccountUserBaseService.java | 2 +- .../impl/AccountUserBaseServiceImpl.java | 20 ++- .../impl/EsignContractServiceImpl.java | 22 +-- .../controller/mobile/LakalaController.java | 12 +- .../controller/mobile/LklTkController.java | 4 +- .../service/impl/LakalaApiServiceImpl.java | 36 +++-- .../impl/LklLedgerReceiverServiceImpl.java | 2 +- .../lakala/service/impl/LklTkServiceImpl.java | 81 +++++------ .../store/service/ShopMchEntryService.java | 10 +- .../service/impl/ShopMchEntryServiceImpl.java | 126 +++++++++--------- 12 files changed, 168 insertions(+), 166 deletions(-) diff --git a/mall-account/src/main/java/com/suisung/mall/account/controller/LoginController.java b/mall-account/src/main/java/com/suisung/mall/account/controller/LoginController.java index 709175bc..f733edca 100644 --- a/mall-account/src/main/java/com/suisung/mall/account/controller/LoginController.java +++ b/mall-account/src/main/java/com/suisung/mall/account/controller/LoginController.java @@ -143,7 +143,7 @@ public class LoginController extends BaseControllerImpl { user_account = CommonConstant.IDD_ZH_CN + user_account; if (PhoneNumberUtils.isValidNumber(user_account)) { //尝试手机号绑定登录 - result = accountUserBaseService.doMobileBindLogin(user_account, user_password); + result = accountUserBaseService.doMobileBindLoginByPwd(user_account, user_password); } } @@ -174,7 +174,7 @@ public class LoginController extends BaseControllerImpl { user_account = CommonConstant.IDD_ZH_CN + user_account; if (PhoneNumberUtils.isValidNumber(user_account)) { //尝试手机号绑定登录 - result = accountUserBaseService.doMobileBindLogin(user_account, user_password); + result = accountUserBaseService.doMobileBindLoginByPwd(user_account, user_password); } } diff --git a/mall-account/src/main/java/com/suisung/mall/account/controller/admin/AccountUserBaseController.java b/mall-account/src/main/java/com/suisung/mall/account/controller/admin/AccountUserBaseController.java index 9425b717..cd3ba870 100644 --- a/mall-account/src/main/java/com/suisung/mall/account/controller/admin/AccountUserBaseController.java +++ b/mall-account/src/main/java/com/suisung/mall/account/controller/admin/AccountUserBaseController.java @@ -163,14 +163,14 @@ public class AccountUserBaseController extends BaseControllerImpl { //验证码错误 throw new ApiException(ResultCode.VERIFYCODE_FAILED); } - // ccountUserBaseService.login 里重复代码,为了兼容商家版登录 + // accountUserBaseService.login 里重复代码,为了兼容商家版登录 Map params = new HashMap<>(); - // 商家手机账号登录 + String userMobile = PhoneNumberUtils.convZhPhoneNumber(user_account); Boolean isMobileAccount = Validator.isNumber(user_account) && PhoneNumberUtils.isValidNumber(userMobile); - if (isMobileAccount) { + if (isMobileAccount) {// 商家手机账号登录 AccountUserBindConnect bind_row = accountUserBindConnectService.getBindByBindId(user_account, BindCode.MOBILE, CommonConstant.USER_TYPE_MCH); if (bind_row != null) { AccountUserBase accountUserBase = accountUserBaseService.get(bind_row.getUser_id()); @@ -184,12 +184,6 @@ public class AccountUserBaseController extends BaseControllerImpl { return CommonResult.failed("账号或密码错误!"); } -// log.info("bind:{}", bind_row); -// log.info("pwd:{}", "b3d1339eb3948463522cd115094856a5"); -// log.info("salt:{}", accountUserBase.getUser_salt()); -// log.info("npwd:{}, eq?:{}", user_password_entry, user_password_entry.equals("b3d1339eb3948463522cd115094856a5")); - - // 手机注册的商家账号 params.put("client_id", AuthConstant.MCH_CLIENT_ID); params.put("client_secret", AuthConstant.AUTHORITY_MOBILE_SECRET); @@ -220,13 +214,12 @@ public class AccountUserBaseController extends BaseControllerImpl { // 随机数图形验证码,有效期一分钟 params.put("verify_code", verifyCode); - CommonResult result = accountUserBaseService.login(params); //user_account判断是否手机号 if (result.getStatus() != 200 && isMobileAccount) { //尝试手机号绑定登录 - result = accountUserBaseService.doMobileBindLogin(userMobile, user_password); + result = accountUserBaseService.doMobileBindLoginByPwd(userMobile, user_password); } return result; diff --git a/mall-account/src/main/java/com/suisung/mall/account/service/AccountUserBaseService.java b/mall-account/src/main/java/com/suisung/mall/account/service/AccountUserBaseService.java index f33e83fa..596db891 100644 --- a/mall-account/src/main/java/com/suisung/mall/account/service/AccountUserBaseService.java +++ b/mall-account/src/main/java/com/suisung/mall/account/service/AccountUserBaseService.java @@ -157,7 +157,7 @@ public interface AccountUserBaseService extends IBaseService { Map doAppConnectLogin(String bind_name, String code); - CommonResult doMobileBindLogin(String user_mobile, String verify_code); + CommonResult doMobileBindLoginByPwd(String user_mobile, String verify_code); /** * 用户来源 diff --git a/mall-account/src/main/java/com/suisung/mall/account/service/impl/AccountUserBaseServiceImpl.java b/mall-account/src/main/java/com/suisung/mall/account/service/impl/AccountUserBaseServiceImpl.java index 5fe3f5e1..95a0e1c3 100644 --- a/mall-account/src/main/java/com/suisung/mall/account/service/impl/AccountUserBaseServiceImpl.java +++ b/mall-account/src/main/java/com/suisung/mall/account/service/impl/AccountUserBaseServiceImpl.java @@ -220,13 +220,14 @@ public class AccountUserBaseServiceImpl extends BaseServiceImpl params2 = new HashMap<>(); -// params2.put("user_mobile", params.get("user_mobile")); -// data.put("merch_approval_status", shopService.shopMerchEntryApprovalStatus(params2)); + String userMobile = params.get("user_mobile"); + + // 登录成功之后,异步检查并修复商户店铺信息 + asyncTaskService.checkAndFixMchStoreInfo(PhoneNumberUtils.cleanPhoneNumber(userMobile)); + + data.put("is_merch", CommonConstant.Enable); + data.put("user_mobile", userMobile); } // 个推消息推送设备与用户绑定 @@ -2943,7 +2944,7 @@ public class AccountUserBaseServiceImpl extends BaseServiceImpl(new JSONObject().put("code", 400).put("msg", "缺少必要参数").toString(), HttpStatus.INTERNAL_SERVER_ERROR); + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(new JSONObject().put("code", 400).put("msg", "缺少必要参数").toString()); } if (!reqAppId.equals(appId)) { - return new ResponseEntity<>(new JSONObject().put("code", 400).put("msg", "appId 有误").toString(), HttpStatus.INTERNAL_SERVER_ERROR); + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(new JSONObject().put("code", 400).put("msg", "appId 有误").toString()); } //按照规则进行加密 @@ -275,7 +275,7 @@ public class EsignContractServiceImpl extends BaseServiceImpl>>>>>" + mySignature); log.debug("header里面的签名值:---------->>>>>>" + signture); if (!mySignature.equals(signture)) { - return new ResponseEntity<>(new JSONObject().put("code", 400).put("msg", "签名校验失败").toString(), HttpStatus.INTERNAL_SERVER_ERROR); + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(new JSONObject().put("code", 400).put("msg", "签名校验失败").toString()); } // 处理业务逻辑 @@ -284,19 +284,19 @@ public class EsignContractServiceImpl extends BaseServiceImpl(new JSONObject().put("code", 400).put("msg", "返回数据有误").toString(), HttpStatus.INTERNAL_SERVER_ERROR); + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(new JSONObject().put("code", 400).put("msg", "返回数据有误").toString()); } // 获取合同签署记录 EsignContract esignContract = baseMapper.selectOne(new QueryWrapper().eq("sign_flow_id", signFlowId)); if (esignContract == null) { - return new ResponseEntity<>(new JSONObject().put("code", 400).put("msg", "获取不到合同记录").toString(), HttpStatus.INTERNAL_SERVER_ERROR); + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(new JSONObject().put("code", 400).put("msg", "获取不到合同记录").toString()); } log.debug("签署流程结束通知:action >>> {}", action); if (CommonConstant.CONTRACT_SIGN_STA_FINISH.equals(esignContract.getSign_flow_status()) && StrUtil.isNotEmpty(esignContract.getLocal_contract_url())) { // 已经签署完毕,不用在更改状态 - return new ResponseEntity<>(new JSONObject().put("code", 200).put("msg", "success").toString(), HttpStatus.OK); + return ResponseEntity.ok(new JSONObject().put("code", 200).put("msg", "success").toString()); } // 获取正式盖章合同文件,上传到 oss 服务器,更状态,保存数据 @@ -315,10 +315,10 @@ public class EsignContractServiceImpl extends BaseServiceImpl(new JSONObject().put("code", 200).put("msg", "success").toString(), HttpStatus.OK); + return ResponseEntity.ok(new JSONObject().put("code", 200).put("msg", "success").toString()); } } else if (action.equals("SIGN_MISSON_COMPLETE") && ObjectUtil.isNotEmpty(signResult)) {// 签署方-签署结果(含拒签)通知 Integer signFlowStatus = null; @@ -330,13 +330,13 @@ public class EsignContractServiceImpl extends BaseServiceImpl(new JSONObject().put("code", 200).put("msg", "success").toString(), HttpStatus.OK); + return ResponseEntity.ok(new JSONObject().put("code", 200).put("msg", "success").toString()); } } else { log.debug("签署流程未完成,不做处理"); } - return new ResponseEntity<>(new JSONObject().put("code", 400).put("msg", "未更新数据!").toString(), HttpStatus.INTERNAL_SERVER_ERROR); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(new JSONObject().put("code", 400).put("msg", "未更新数据!").toString()); } /** 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 bf8a55ed..825119f5 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 @@ -136,10 +136,10 @@ public class LakalaController extends BaseControllerImpl { public ResponseEntity ecApplyNotify(HttpServletRequest request) { JSONObject resp = lakalaPayService.applyLedgerMerEcNotify(request); if (resp != null && "SUCCESS".equals(resp.get("code"))) { - return new ResponseEntity<>(resp, HttpStatus.OK); + return ResponseEntity.ok(resp); } - return new ResponseEntity<>(resp, HttpStatus.INTERNAL_SERVER_ERROR); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(resp); } @ApiOperation(value = "商户分账业务开通申请", notes = "商户分账业务开通申请") @@ -153,10 +153,10 @@ public class LakalaController extends BaseControllerImpl { public ResponseEntity ledgerApplyLedgerMerNotify(HttpServletRequest request) { JSONObject resp = lakalaPayService.applyLedgerMerNotify(request); if (resp != null && "SUCCESS".equals(resp.get("code"))) { - return new ResponseEntity<>(resp, HttpStatus.OK); + return ResponseEntity.ok(resp); } - return new ResponseEntity<>(resp, HttpStatus.INTERNAL_SERVER_ERROR); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(resp); } @ApiOperation(value = "分账接收方创建申请", notes = "分账接收方创建申请") @@ -177,9 +177,9 @@ public class LakalaController extends BaseControllerImpl { public ResponseEntity applyBindNotify(HttpServletRequest request) { JSONObject resp = lakalaPayService.applyLedgerMerReceiverBindNotify(request); if (resp != null && "SUCCESS".equals(resp.get("code"))) { - return new ResponseEntity<>(resp, HttpStatus.OK); + return ResponseEntity.ok(resp); } - return new ResponseEntity<>(resp, HttpStatus.INTERNAL_SERVER_ERROR); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(resp); } } diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/controller/mobile/LklTkController.java b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/controller/mobile/LklTkController.java index f0192c58..c9c0dea5 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/controller/mobile/LklTkController.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/controller/mobile/LklTkController.java @@ -72,10 +72,10 @@ public class LklTkController extends BaseControllerImpl { public ResponseEntity registrationMerchantNotify(HttpServletRequest request) { JSONObject resp = lklTkService.registrationMerchantNotify(request); if (resp != null && resp.get("code").equals("200")) { - return new ResponseEntity<>(resp, HttpStatus.OK); + return ResponseEntity.ok(resp); } - return new ResponseEntity<>(resp, HttpStatus.INTERNAL_SERVER_ERROR); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(resp); } @ApiOperation(value = "上传文件", notes = "上传文件") 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 95a380da..f338158c 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 @@ -1030,7 +1030,7 @@ public class LakalaApiServiceImpl implements LakalaApiService { } // 更新商家分账申请状态为已申请(hasApplySplit=1) - shopMchEntryService.updateMulStatus(lklLedgerMember.getMch_id(), "", merCupNo, 0, 0, 0, 1, 0, 0, CommonConstant.MCH_APPR_STA_LKL_PADDING); + shopMchEntryService.updateMulStatus(lklLedgerMember.getMch_id(), merCupNo, 0, 0, 0, 1, 0, 0, CommonConstant.MCH_APPR_STA_LKL_PADDING); shopMchEntryService.updateMerchEntryApprovalByMchId(lklLedgerMember.getMch_id(), null, "商户分账业务申请已审核通过"); log.debug("商户分账业务申请异步回调:处理成功,applyId={}", applyId); @@ -1180,7 +1180,7 @@ public class LakalaApiServiceImpl implements LakalaApiService { } // 更新商户分账状态 - shopMchEntryService.updateMulStatus(mchId, "", "", 0, 0, 0, 0, 1, 0, CommonConstant.MCH_APPR_STA_LKL_PADDING); + shopMchEntryService.updateMulStatus(mchId, "", 0, 0, 0, 0, 1, 0, CommonConstant.MCH_APPR_STA_LKL_PADDING); return CommonResult.success(receiver, "创建接收方成功!"); } catch (Exception e) { @@ -1339,7 +1339,7 @@ public class LakalaApiServiceImpl implements LakalaApiService { if (successCount == 0) { if (lklLedgerMember != null) { shopMchEntryService.updateMerchEntryApprovalByMchId( - lklLedgerMember.getMch_id(), CommonConstant.MCH_APPR_STA_NOPASS, "商家绑定分账接收方失败:" + lklLedgerMember.getMch_id(), CommonConstant.MCH_APPR_STA_NOPASS, "商家绑定分账接收方失败" ); } return Pair.of(false, "商家绑定分账接收方失败"); @@ -1359,7 +1359,7 @@ public class LakalaApiServiceImpl implements LakalaApiService { * @param request HTTP请求对象 * @return 返回处理结果JSON,包含code和message字段 */ - @Transactional +// @Transactional @Override public JSONObject applyLedgerMerReceiverBindNotify(HttpServletRequest request) { log.debug("商家绑定分账接收方异步通知回调开始"); @@ -1387,6 +1387,11 @@ public class LakalaApiServiceImpl implements LakalaApiService { String applyId = paramsJSON.getStr("applyId"); String auditStatus = paramsJSON.getStr("auditStatus"); + LklLedgerMerReceiverBind lklLedgerMerReceiverBind = lklLedgerMerReceiverBindService.getPlatformByApplyId(applyId); + if (lklLedgerMerReceiverBind == null || CheckUtil.isEmpty(lklLedgerMerReceiverBind.getMch_id())) { + return JSONUtil.createObj().put("code", "FAIL").put("message", "无法获取到绑定记录!"); + } + // 4. 参数校验(防止空值) if (org.apache.commons.lang3.StringUtils.isAnyBlank(merCupNo, applyId, auditStatus)) { String errorMsg = String.format("关键参数缺失:merCupNo=%s, applyId=%s, auditStatus=%s", merCupNo, applyId, auditStatus); @@ -1421,17 +1426,28 @@ public class LakalaApiServiceImpl implements LakalaApiService { return JSONUtil.createObj().put("code", "FAIL").put("message", "更新状态失败"); } - LklLedgerMerReceiverBind lklLedgerMerReceiverBind = lklLedgerMerReceiverBindService.getPlatformByApplyId(applyId); - if (lklLedgerMerReceiverBind != null) { - // 7. 成功后更新商户绑定状态为已绑定 - shopMchEntryService.updateMulStatus(lklLedgerMerReceiverBind.getMch_id(), "", merCupNo, 0, 0, 0, 0, 0, 1, CommonConstant.MCH_APPR_STA_PASS); + + Long mchId = lklLedgerMerReceiverBind.getMch_id(); + + // 7. 成功后更新商户绑定状态为已绑定 + shopMchEntryService.updateMulStatus(mchId, merCupNo, 0, 0, 0, 0, 0, 1, CommonConstant.MCH_APPR_STA_PASS); + + // 创建店铺,并初始化 + // 新建一个正式的已审核通过的店铺,不要抛异常,使用补偿机制,可以独立初始化店铺 + // 重要:包含了更改 merchEntryInfo 的状态, 使用法人、小微个人的手机号注册商家账号,作为店铺的管理员 + Pair retPair = shopStoreBaseService.covMerchEntryInfo2StoreInfo(mchId, false); + if (retPair.getFirst() <= 0) { + shopMchEntryService.updateMerchEntryApprovalByMchId(mchId, null, "创建并初始化店铺失败:" + retPair.getSecond()); + log.error("进件成功,但初始化店铺失败: mchId={}, reason={}", mchId, retPair.getSecond()); + } else { + log.debug("进件成功,创建并初始化店铺成功!mchId={}", mchId); } // 8. 检查商户绑定状态是否完成, 更改总的审核状态 - shopMchEntryService.checkMerchEntryFinished("", merCupNo); + shopMchEntryService.checkMerchEntryFinished(mchId); // 9. 日志记录并返回成功响应 - log.debug("商家绑定分账接收方异步通知处理完成,merCupNo:{}", merCupNo); + log.debug("商家绑定分账接收方异步通知处理完成,mchId:{} merCupNo:{}", mchId, merCupNo); return JSONUtil.createObj().put("code", "SUCCESS").put("message", "分账接收方绑定成功"); } catch (Exception 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 5e9e253f..8633e3a2 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 @@ -245,7 +245,7 @@ public class LklLedgerReceiverServiceImpl extends BaseServiceImpl 0; if (success) { // 更新多个状态 - shopMchEntryService.updateMulStatus(mchId, "", merCupNo, 0, 0, 0, 0, 1, 0, CommonConstant.MCH_APPR_STA_LKL_PADDING); + shopMchEntryService.updateMulStatus(mchId, merCupNo, 0, 0, 0, 0, 1, 0, CommonConstant.MCH_APPR_STA_LKL_PADDING); } 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 c2ad05a5..09a628ae 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 @@ -22,6 +22,7 @@ import com.suisung.mall.common.modules.store.ShopMchEntry; import com.suisung.mall.common.pojo.to.AddressParseResultTO; import com.suisung.mall.common.service.impl.CommonService; import com.suisung.mall.common.utils.AddressUtil; +import com.suisung.mall.common.utils.CheckUtil; import com.suisung.mall.common.utils.RestTemplateHttpUtil; import com.suisung.mall.common.utils.UploadUtil; import com.suisung.mall.core.web.service.RedisService; @@ -40,7 +41,6 @@ import org.springframework.data.util.Pair; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; @@ -350,6 +350,16 @@ public class LklTkServiceImpl { return Pair.of(false, "商家先签署合同,再来进件!"); } + // 判断是否已经进件过?进件过,执行下一步操作(进件异步通知的相关操作) + + //密集操作:进件审核通过之后,要下一步流程操作:申请分账业务、创建分账接收方 + if (CommonConstant.Enable.equals(shopMchEntry.getHas_apply_mer()) && CheckUtil.isNotEmpty(shopMchEntry.getDistributor_id()) + && StrUtil.isAllNotBlank(shopMchEntry.getLkl_mer_cup_no(), shopMchEntry.getLkl_term_no())) { + // 已经进件过了,执行下一步操作 + registrationMerchantAfterHook(mchId, shopMchEntry.getLkl_mer_cup_no(), shopMchEntry.getDistributor_id()); + return Pair.of(true, "请勿重复提交,拉卡拉已进件成功了,准备提交分账业务申请!"); + } + JSONObject reqJsonBody = new JSONObject(); reqJsonBody.put("userNo", userNo); reqJsonBody.put("busiCode", "WECHAT_PAY");// WECHAT_PAY:专业化扫码;B2B_SYT:B2B收银台; @@ -559,7 +569,7 @@ public class LklTkServiceImpl { * @param request * @return */ - @Transactional +// @Transactional public JSONObject registrationMerchantNotify(HttpServletRequest request) { logger.debug("拉卡拉进件异步通知开始"); @@ -633,57 +643,48 @@ public class LklTkServiceImpl { return new JSONObject().set("code", "500").set("message", "更新商户号失败"); } + + shopMchEntryService.updateMerchEntryApprovalByMchId(shopMchEntry.getId(), CommonConstant.MCH_APPR_STA_LKL_PADDING, + "进件、申请分账业务、创建分账接收方均已成功,等待拉卡拉审核分账业务请求!"); + + //密集操作:进件审核通过之后,要下一步流程操作:申请分账业务、创建分账接收方 + registrationMerchantAfterHook(mchId, merCupNo, shopMchEntry.getDistributor_id()); + + return new JSONObject().set("code", "200").set("message", "处理成功"); + } + + /** + * 进件审核通过之后,要下一步流程操作:申请分账业务、创建分账接收方 + * + * @param mchId + * @param merCupNo + * @param distributorId + */ + private void registrationMerchantAfterHook(Long mchId, String merCupNo, Long distributorId) { logger.info("商家进件已成功,下一步申请拉卡拉分账业务,再创建分账接收方!"); - // 备注: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()); -// } - - - // 新建一个正式的已审核通过的店铺,不要抛异常,使用补偿机制,可以独立初始化店铺 - // 重要:包含了更改 merchEntryInfo 的状态, 使用法人、小微个人的手机号注册商家账号,作为店铺的管理员 - Pair retPair = shopStoreBaseService.covMerchEntryInfo2StoreInfo(mchId, false); - if (retPair.getFirst() <= 0) { - shopMchEntryService.updateMerchEntryApprovalByMchId(shopMchEntry.getId(), null, "创建并初始化店铺失败"); - logger.error("初始化店铺失败: mchId={}, reason={}", mchId, retPair.getSecond()); - } else { - logger.debug("初始化店铺成功!mchId={}", mchId); - } - - // 重要:给商家申请分账业务;务必检查是否申请过?申请过忽略 Pair applyRetPair = lakalaApiService.innerApplyLedgerMer(merCupNo); if (!applyRetPair.getFirst()) { - String message = "商家申请分账业务异常:" + applyRetPair.getSecond(); - shopMchEntryService.updateMerchEntryApprovalByMchId(shopMchEntry.getId(), null, message); + String message = "提交分账业务申请异常:" + applyRetPair.getSecond(); + shopMchEntryService.updateMerchEntryApprovalByMchId(mchId, null, message); logger.error(message); - return new JSONObject().set("code", "500").set("message", message); + } else { + logger.info("申请分账业务已成功,等待拉卡拉审核,准备创建分账接收方!"); } - logger.info("申请分账业务已成功,等待拉卡拉审核,准备创建分账接收方!"); - // 2:新增一个接收方记录,起码要一个平台方,代理商根据入驻信息新增 - Boolean genSuccess = lklLedgerReceiverService.innerApplyLedgerReceiver(shopMchEntry.getId(), merCupNo, shopMchEntry.getDistributor_id()); + Boolean genSuccess = lklLedgerReceiverService.innerApplyLedgerReceiver(mchId, merCupNo, distributorId); if (!genSuccess) { - logger.error("申请分账业务已成功,等待拉卡拉审核,但创建分账接收方失败了"); - shopMchEntryService.updateMerchEntryApprovalByMchId(shopMchEntry.getId(), null, "申请分账业务已成功,等待拉卡拉审核,但创建分账接收方失败了"); - return new JSONObject().set("code", "500").set("message", "创建分账接收方失败"); + logger.error("进件、申请分账业务成功已成功,等待拉卡拉审核分账业务请求,但创建分账接收方失败了,请管理员补偿流程"); + shopMchEntryService.updateMerchEntryApprovalByMchId(mchId, null, + "进件、申请分账业务成功已成功,等待拉卡拉审核分账业务请求,但创建分账接收方失败了,请管理员补偿流程"); + } else { + logger.info("创建分账接收方成功!"); } - - shopMchEntryService.updateMerchEntryApprovalByMchId(shopMchEntry.getId(), CommonConstant.MCH_APPR_STA_LKL_PADDING, "申请分账业务、创建分账接收方均已成功,等待拉卡拉审核开通分账业务"); - return new JSONObject().put("code", "200").put("message", "处理成功"); } + /** * 获取拉卡拉店铺的(或银行的)省市区编码 * 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 a34bb96d..5832aee4 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 @@ -253,7 +253,6 @@ public interface ShopMchEntryService { * 根据商户号或商家手机号修改商户入驻信息多个状态 * * @param mchId 商户入驻自增Id - * @param merchantMobile 商家手机号 * @param merchantCupNo 商户号 * @param hasEcSigned 是否已签署电子合同 * @param hasApplyMerchant 是否已申请商户进件 @@ -264,7 +263,7 @@ public interface ShopMchEntryService { * @param approvalStatus 审批状态 * @return 更新结果,true为成功,false为失败 */ - Boolean updateMulStatus(Long mchId, String merchantMobile, String merchantCupNo, Integer hasEcSigned, Integer hasApplyMerchant, Integer storeStatus, + Boolean updateMulStatus(Long mchId, String merchantCupNo, Integer hasEcSigned, Integer hasApplyMerchant, Integer storeStatus, Integer hasApplySplit, Integer hasApplyReceiver, Integer hasBindReceiver, Integer approvalStatus); /** @@ -286,13 +285,12 @@ public interface ShopMchEntryService { Boolean updateMerchEntryEcResultUrlByMchId(Long mchId, String lklEcResultUrl); /** - * 根据商户手机号和商户号检查商家入驻整个流程是否全部完成 + * 根据商家入驻Id 检查商家入驻整个流程是否全部完成 * - * @param merchantMobile 商家手机号 - * @param merchantCupNo 商户号 + * @param mchId 商家入驻Id * @return */ - Boolean checkMerchEntryFinished(String merchantMobile, String merchantCupNo); + Boolean checkMerchEntryFinished(Long mchId); /** * 检查更新商户入驻店铺初始化状态 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 89051844..1e974e43 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 @@ -73,13 +73,6 @@ public class ShopMchEntryServiceImpl extends BaseServiceImpl retPair = shopStoreBaseService.covMerchEntryInfo2StoreInfo(mchId, false); + if (retPair.getFirst() <= 0) { + updateMerchEntryApprovalByMchId(mchId, null, "创建并初始化店铺失败:" + retPair.getSecond()); + log.error("进件成功,但初始化店铺失败: mchId={}, reason={}", mchId, retPair.getSecond()); + } else { + log.debug("进件成功,创建并初始化店铺成功!mchId={}", mchId); + } + + // 8. 检查商户绑定状态是否完成, 更改总的审核状态 + checkMerchEntryFinished(mchId); + } catch (Exception e) { log.error("更新商户签约状态异常, recordId:{}, error:{}", record != null ? record.getId() : "null", @@ -755,10 +762,11 @@ public class ShopMchEntryServiceImpl extends BaseServiceImpl updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("id", mchId).eq("status", CommonConstant.Enable) + .ne("approval_status", CommonConstant.MCH_APPR_STA_PASS); + updateWrapper.set("approval_status", CommonConstant.MCH_APPR_STA_PASS); + updateWrapper.set("approval_remark", "恭喜您,入驻流程已全部完成!"); + boolean updateResult = update(updateWrapper); // 更新商户入驻信息 if (!updateResult) { - log.error("更新商户入驻信息状态失败, merchantId={}", merchantEntry.getId()); + log.error("更新商户入驻信息状态失败, mchId={}", mchId); + return false; } return true; // 返回 true,表示入驻流程已全部完成 } catch (Exception e) { // 5. 捕获异常并记录错误日志 - log.error("检查商户入驻流程完成状态时发生异常, merchantMobile={}, merchantCupNo={}", merchantMobile, merchantCupNo, e); + log.error("检查商户入驻流程状态异常, mchId={}", mchId, e); return false; // 发生异常时返回 false } } @@ -1700,7 +1708,6 @@ public class ShopMchEntryServiceImpl extends BaseServiceImpl updateWrapper = new UpdateWrapper<>(); // 3. 设置查询条件:优先 mchId -// if (CheckUtil.isEmpty(mchId)) { -// updateWrapper.eq("id", mchId); -// } - Optional.ofNullable(mchId) .filter(CheckUtil::isNotEmpty) .ifPresent(id -> updateWrapper.eq("id", id)); - Optional.ofNullable(merchantMobile) - .filter(StrUtil::isNotBlank) - .ifPresent(mobile -> updateWrapper.eq("login_mobile", mobile)); - Optional.ofNullable(merchantCupNo) .filter(StrUtil::isNotBlank) .ifPresent(cupNo -> updateWrapper.eq("lkl_mer_cup_no", cupNo)); String approvalRemark = ""; - if (hasEcSigned.equals(CommonConstant.Enable)) { + if (CommonConstant.Enable.equals(hasEcSigned)) { approvalRemark = "合同签署完成,商家信息正在提交审核,请耐心等待"; - } else if (hasApplyMerchant.equals(CommonConstant.Enable)) { - approvalRemark = "商家资质审核通过,系统正在初始化店铺,请稍后操作"; - } else if (storeStatus.equals(CommonConstant.Enable)) { - approvalRemark = "店铺创建成功,系统正在处理分账业务申请"; - } else if (hasApplySplit.equals(CommonConstant.Enable)) { - approvalRemark = "分账业务申请已通过,系统正在处理接收方申请"; - } else if (hasApplyReceiver.equals(CommonConstant.Enable)) { + } else if (CommonConstant.Enable.equals(hasApplyMerchant)) { + approvalRemark = "商家资质审核通过,系统正在提交分账业务申请,请耐心等待"; + } else if (CommonConstant.Enable.equals(hasApplySplit)) { + approvalRemark = "提交分账业务申请已通过,系统正在申请分账接收方事宜"; + } else if (CommonConstant.Enable.equals(hasApplyReceiver)) { approvalRemark = "分账接收方申请成功,系统正在处理接收方绑定"; - } else if (hasBindReceiver.equals(CommonConstant.Enable)) { - approvalRemark = "分账接收方绑定成功,入驻流程即将完成"; + } else if (CommonConstant.Enable.equals(hasBindReceiver)) { + approvalRemark = "分账接收方绑定成功,系统准备创建初始化店铺"; + } else if (CommonConstant.Enable.equals(storeStatus)) { + approvalRemark = "店铺创建并初始化成功,入驻流程即将全部完成"; + } else { + approvalRemark = "入驻资料正在审核中,请耐心等待"; } - if (StrUtil.isNotBlank(approvalRemark)) { - updateWrapper.set("approval_remark", approvalRemark); - } + updateWrapper.set("approval_remark", approvalRemark); // 4. 构建需要更新的字段和值的映射关系 Map updateFieldMap = new LinkedHashMap<>(); @@ -1770,21 +1769,17 @@ public class ShopMchEntryServiceImpl extends BaseServiceImpl entry.getValue() != null && entry.getValue() > 0) .forEach(entry -> updateWrapper.set(entry.getKey(), entry.getValue())); - // 6. 执行更新操作并返回结果 return update(updateWrapper); } catch (Exception e) { // 7. 异常处理:记录异常信息,避免程序中断 log.error("更新商户入驻信息多个状态失败", e); - // 可以选择抛出异常,让 Spring 事务管理器进行回滚 - // throw new RuntimeException("更新商户多个状态失败", e); return false; // 发生异常时返回 false } } @@ -1810,7 +1805,8 @@ public class ShopMchEntryServiceImpl extends BaseServiceImpl updateWrapper = new UpdateWrapper<>(); updateWrapper.set("store_status", CommonConstant.Enable); updateWrapper.eq("id", shopMchEntryId);