优化进件流程

This commit is contained in:
Jack 2025-09-03 01:40:32 +08:00
parent 9f3101fca7
commit 0cde19efd7
5 changed files with 87 additions and 86 deletions

View File

@ -92,4 +92,6 @@ public class CommonConstant {
public static final String CONF_KEY_SAME_CITY_ORDER_EXPIRE_SECONDS = "sameCityOrderExpireSeconds";
public static final String SPLIT_ = "diffCityOrderExpireSeconds";
}

View File

@ -14,6 +14,8 @@ import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.math.BigDecimal;
/**
* <p>
* 店铺分类表 前端控制器
@ -85,6 +87,18 @@ public class ShopBaseStoreCategoryAdminController {
@ApiOperation(value = "店铺分类表-编辑", notes = "店铺分类表-编辑")
@RequestMapping(value = "/edit", method = RequestMethod.POST)
public CommonResult edit(ShopBaseStoreCategory shopBaseStoreCategory) {
if (shopBaseStoreCategory.getSplit_ratio() == null) {
shopBaseStoreCategory.setSplit_ratio(new BigDecimal("94"));
}
if (shopBaseStoreCategory.getSplit_ratio().compareTo(new BigDecimal("94")) < 0) {
return CommonResult.failed(I18nUtil._("分成比例不能小于94"));
}
if (shopBaseStoreCategory.getSplit_ratio().compareTo(new BigDecimal("100")) > 0) {
return CommonResult.failed(I18nUtil._("分成比例不能大于100"));
}
return CommonResult.success(shopBaseStoreCategoryService.saveOrUpdate(shopBaseStoreCategory));
}

View File

@ -312,7 +312,7 @@ public class EsignContractServiceImpl extends BaseServiceImpl<EsignContractMappe
// 1电子合同给商家申请分账功能使用务必检查是否申请过申请过忽略
Pair<Boolean, String> retPair = lakalaApiService.innerApplyLedgerMer(esignContract.getMch_mobile());
if (!retPair.getFirst()) {
log.error("商家申请分账功能失败{}", retPair.getSecond());
log.error("商家申请分账业务异常{}", retPair.getSecond());
}
// 更新商家的hasEsigned状态=1

View File

@ -10,6 +10,7 @@ package com.suisung.mall.shop.lakala.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONArray;
@ -449,7 +450,6 @@ 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.sub(shopMchEntry.getSales_info(), 0, 22));
@ -477,12 +477,18 @@ public class LakalaApiServiceImpl implements LakalaApiService {
ecParams.put("D9", signDate);
ecParams.put("D11", signDate);
ecParams.put("D12", signDate);
Boolean hasAgent = false; // 有无分账代理商
if (hasAgent) {
ecParams.put("E1", platformName + "和代理商");
ecParams.put("E2", "小发同城平台商户合作协议");
ecParams.put("E2", "《平台商户入驻服务框架协议》和《小发同城服务费结算》");
} else {
ecParams.put("E1", platformName);
ecParams.put("E2", "平台商户入驻服务框架协议");
}
ecParams.put("E3", "1");
ecParams.put("E4", splitLowestRatio);
// ecParams.put("E5", platformName);
// ecParams.put("E6", splitLowestRatio);
ecParams.put("E4", NumberUtil.toStr(shopMchEntry.getSplit_ratio(), splitLowestRatio));
ecParams.put("E7", signDate);
ecParams.put("E8", shopMchEntry.getAccount_holder_name());
@ -617,7 +623,7 @@ public class LakalaApiServiceImpl implements LakalaApiService {
//3. 发送请求
String responseStr = LKLSDK.httpPost(req);
if (StrUtil.isBlank(responseStr)) {
return Pair.of(false, I18nUtil._("无返回值,申请开通分账失败"));
return Pair.of(false, I18nUtil._("申请拉卡拉分账业务无返回值"));
}
log.debug("商户分账业务申请响应数据:{}", responseStr);
@ -625,7 +631,7 @@ public class LakalaApiServiceImpl implements LakalaApiService {
// 成功返回示例{'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._("无返回值,申请开通分账失败"));
return Pair.of(false, I18nUtil._("申请拉卡拉分账业务返回值异常"));
}
Object applyId = lakalaRespJSON.getByPath("respData.applyId");
@ -659,14 +665,13 @@ public class LakalaApiServiceImpl implements LakalaApiService {
// JSON 对象的键名转换为下划线命名
LklLedgerMember lklLedgerMemberNew = JSONUtil.toBean(StringUtils.convertCamelToSnake(paramsJSON.toString()), LklLedgerMember.class);
if (!lklLedgerMemberService.addOrUpdateByMerCupNo(lklLedgerMemberNew)) {
return Pair.of(false, I18nUtil._("商户分账业务材料新增失败,待审核中"));
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._("商家申请开通分账出错!"));
// throw new ApiException(I18nUtil._("商家申请开通分账出错!"), e);
log.error("申请拉卡拉分账业务出错:", e);
return Pair.of(false, I18nUtil._("申请拉卡拉分账业务出错!"));
}
}
@ -1373,13 +1378,8 @@ public class LakalaApiServiceImpl implements LakalaApiService {
log.debug("##### 商家绑定接收方回调参数:{} ####", paramsJSON);
if (paramsJSON == null || StrUtil.isBlank(paramsJSON.getStr("applyId"))) {
// https://o.lakala.com/#/home/document/detail?id=386 返回的数据结果有歧义需处理
paramsJSON = paramsJSON.getJSONObject("respData");
if (paramsJSON == null || StrUtil.isBlank(paramsJSON.getStr("applyId"))) {
log.error("商家绑定分账接收方异步通知参数转化失败");
return JSONUtil.createObj().put("code", "FAIL").put("message", "参数转换失败");
}
log.error("商家绑定分账接收方通知数据有误");
return JSONUtil.createObj().put("code", "FAIL").put("message", "商家绑定分账接收方通知数据有误!");
}
// 3. 提取核心参数
@ -1423,16 +1423,10 @@ public class LakalaApiServiceImpl implements LakalaApiService {
LklLedgerMerReceiverBind lklLedgerMerReceiverBind = lklLedgerMerReceiverBindService.getPlatformByApplyId(applyId);
if (lklLedgerMerReceiverBind != null) {
// shopMchEntryService.updateMerchEntryApprovalByMchId(
// lklLedgerMerReceiverBind.getMch_id(), CommonConstant.MCH_APPR_STA_PASS, "商家绑定分账接收方成功"
// );
// 7. 成功后更新商户绑定状态为已绑定
shopMchEntryService.updateMulStatus(lklLedgerMerReceiverBind.getMch_id(), "", merCupNo, 0, 0, 0, 0, 0, 1, CommonConstant.MCH_APPR_STA_PASS);
}
// 8. 检查商户绑定状态是否完成 更改总的审核状态
shopMchEntryService.checkMerchEntryFinished("", merCupNo);

View File

@ -345,6 +345,11 @@ public class LklTkServiceImpl {
return Pair.of(false, "商家入驻信息不存在");
}
if (!CommonConstant.Enable.equals(shopMchEntry.getHas_ec_signed())
|| StrUtil.isBlank(shopMchEntry.getContract_download_url())) {
return Pair.of(false, "商家先签署合同,再来进件!");
}
JSONObject reqJsonBody = new JSONObject();
reqJsonBody.put("userNo", userNo);
reqJsonBody.put("busiCode", "WECHAT_PAY");// WECHAT_PAY:专业化扫码;B2B_SYT:B2B收银台;
@ -448,7 +453,7 @@ public class LklTkServiceImpl {
JSONObject bizContent = new JSONObject();
bizContent.put("activityId", activityId);
bizContent.put("termNum", "1");
bizContent.put("mcc", "12015"); // 超市的 code
bizContent.put("mcc", "12015"); // 超市的 MCC code
bizContent.put("fees", new JSONArray() {{
put(new JSONObject() {
{
@ -522,34 +527,30 @@ public class LklTkServiceImpl {
|| response.get("retCode") == null
|| !"000000".equals(response.getStr("retCode"))) {
String errMsg = response.getStr("retMsg") == null ? "拉卡拉发生未知错误" : response.getStr("retMsg");
shopMchEntryService.updateMerchEntryApprovalByMchId(shopMchEntry.getId(), CommonConstant.MCH_APPR_STA_LKL_NOPASS, "进件失败:" + errMsg);
return Pair.of(false, "提交进件失败:" + errMsg);
String errMsg = response.getStr("retMsg") == null ? "提交拉卡拉进件,出现未知错误" : response.getStr("retMsg");
shopMchEntryService.updateMerchEntryApprovalByMchId(shopMchEntry.getId(), CommonConstant.MCH_APPR_STA_LKL_NOPASS, "提交拉卡拉进件失败:" + errMsg);
return Pair.of(false, "提交拉卡拉进件失败:" + errMsg);
}
// {"merchantNo": "100132349","status": "WAIT_AUDI","state": "1"}
JSONObject rawData = response.getJSONObject("rawData"); // 进件这个接口比较特殊安装常规返回数据
JSONObject rawData = response.getJSONObject("rawData"); // 进件这个接口比较特殊按照常规返回数据
String lklMerInnerNo = rawData.getStr("merchantNo"); //拉卡拉内部商户号
// 表中的内部外部商户号暂时都传同一个内部商户号以便异步通知更改记录
Boolean success = shopMchEntryService.updateMerchEntryLklMerCupNo(mchId, CommonConstant.Disable2, lklMerInnerNo, lklMerInnerNo, reqJsonBody.toString(), rawData.toString());
if (!success) {
shopMchEntryService.updateMerchEntryApprovalByMchId(shopMchEntry.getId(), CommonConstant.MCH_APPR_STA_LKL_NOPASS, "进件成功,但更新商户号失败!");
return Pair.of(false, "提交进件成功,但更新商户号失败!");
}
} catch (Exception e) {
logger.error("拉卡拉进件异常:{}", e.getMessage());
shopMchEntryService.updateMerchEntryApprovalByMchId(shopMchEntry.getId(), CommonConstant.MCH_APPR_STA_LKL_NOPASS, "进件失败:" + e.getMessage());
return Pair.of(false, "提交进件失败:" + e.getMessage());
return Pair.of(false, "提交拉卡拉进件失败:" + e.getMessage());
}
shopMchEntryService.updateMerchEntryApprovalByMchId(shopMchEntry.getId(), CommonConstant.MCH_APPR_STA_LKL_PADDING, "商户进件:提交进件成功,请等待审核!");
return Pair.of(true, "提交进件成功,请等待审核!");
shopMchEntryService.updateMerchEntryApprovalByMchId(shopMchEntry.getId(), CommonConstant.MCH_APPR_STA_LKL_PADDING, "提交拉卡拉进件成功,正进一步审核!");
return Pair.of(true, "提交拉卡拉进件成功,正进一步审核!");
}
/**
@ -596,7 +597,7 @@ public class LklTkServiceImpl {
String merInnerNo = dataJSON.getStr("customerNo"); //拉卡拉内部商户号
String termNos = dataJSON.getStr("termNos"); //拉卡拉分配的业务终端号
// 合并参数校验减少嵌套
// 合并参数校验
if (dataJSON.isEmpty() ||
StrUtil.isBlank(auditStatus) ||
StrUtil.isBlank(merCupNo) ||
@ -611,11 +612,13 @@ public class LklTkServiceImpl {
return new JSONObject().put("code", "500").put("message", merInnerNo + "内部商户号入驻信息不存在");
}
Long mchId = shopMchEntry.getId();
// 校验审核状态
if (!"SUCCESS".equals(auditStatus) && !"REVIEW_PASS".equals(auditStatus)) {
logger.debug("返回的审核状态:{}", auditStatus);
shopMchEntryService.updateMerchEntryApprovalByMchId(shopMchEntry.getId(), CommonConstant.MCH_APPR_STA_LKL_NOPASS, "进件失败:" + dataJSON.getStr("remark"));
shopMchEntryService.updateMerchEntryApprovalByMchId(mchId, CommonConstant.MCH_APPR_STA_LKL_NOPASS, "进件失败:" + dataJSON.getStr("remark"));
return new JSONObject().set("code", "FAIL").set("message", "返回审核状态有误");
}
@ -626,10 +629,12 @@ public class LklTkServiceImpl {
merInnerNo, merCupNo, termNos, CommonConstant.Enable, null, data);
if (!success) {
shopMchEntryService.updateMerchEntryApprovalByMchId(shopMchEntry.getId(), CommonConstant.MCH_APPR_STA_LKL_NOPASS, "进件时更新商户号失败");
shopMchEntryService.updateMerchEntryApprovalByMchId(mchId, CommonConstant.MCH_APPR_STA_LKL_NOPASS, "进件时更新商户号失败");
return new JSONObject().set("code", "500").set("message", "更新商户号失败");
}
logger.info("商家进件已成功,下一步申请拉卡拉分账业务,再创建分账接收方!");
// 备注RMK 采用拉卡拉的入网电子合同签署流程暂停e签宝的电子合同生成流程
// logger.debug("###开始异步执行生成电子合同模版和填充模版数据,并生该商家和平台方签署的未盖章合同文件###");
// // 生成电子合同模版和填充模版数据并生该商家和平台方签署的未盖章合同文件
@ -644,53 +649,39 @@ public class LklTkServiceImpl {
// logger.error("###商家发起电子签名失败:{}###", resPair.getSecond());
// }
// 给商家申请分账功能使用务必检查是否申请过申请过忽略
if (success && StrUtil.isNotBlank(shopMchEntry.getContract_download_url())) {
// TODO 新建一个正式的已审核通过的店铺 新建之前判断是否已经新建过了
ShopMchEntry shopEntry = shopMchEntryService.getShopMerchEntryByMerCupNo(merCupNo);
if (shopEntry != null && !CommonConstant.Enable.equals(shopEntry.getStore_status())) {
Long mchId = shopEntry.getId();
// 新建一个正式的已审核通过的店铺不要抛异常使用补偿机制可以独立初始化店铺
// 重要包含了更改 merchEntryInfo 的状态 TODO 用法人小微个人的手机号注册商家账号作为店铺的管理员
// 重要包含了更改 merchEntryInfo 的状态 使用法人小微个人的手机号注册商家账号作为店铺的管理员
Pair<Integer, String> retPair = shopStoreBaseService.covMerchEntryInfo2StoreInfo(mchId, false);
if (retPair.getFirst() <= 0) {
shopMchEntryService.updateMerchEntryApprovalByMchId(shopMchEntry.getId(), null, "进件时初始化店铺失败");
shopMchEntryService.updateMerchEntryApprovalByMchId(shopMchEntry.getId(), null, "创建并初始化店铺失败");
logger.error("初始化店铺失败: mchId={}, reason={}", mchId, retPair.getSecond());
} else {
logger.debug("初始化店铺成功mchId={}", mchId);
}
logger.info("初始化店铺成功mchId={}", mchId);
}
// 1电子合同给商家申请分账业务务必检查是否申请过申请过忽略
Pair<Boolean, String> retPair = lakalaApiService.innerApplyLedgerMer(merCupNo);
// 2新增一个接收方记录起码要一个平台方代理商根据入驻信息新增
Boolean genSuccess = lklLedgerReceiverService.innerApplyLedgerReceiver(shopMchEntry.getId(), merCupNo, shopMchEntry.getDistributor_id());
// 统一处理分账申请结果
if (retPair.getFirst() && genSuccess) {
shopMchEntryService.updateMerchEntryApprovalByMchId(shopMchEntry.getId(), CommonConstant.MCH_APPR_STA_LKL_PADDING, "已向拉卡拉提交分账业务申请");
return new JSONObject().put("code", "200").put("message", "处理成功");
}
if (!retPair.getFirst()) {
String message = "商家申请分账功能失败:" + retPair.getSecond();
logger.error(message);
// 重要给商家申请分账业务务必检查是否申请过申请过忽略
Pair<Boolean, String> applyRetPair = lakalaApiService.innerApplyLedgerMer(merCupNo);
if (!applyRetPair.getFirst()) {
String message = "商家申请分账业务异常:" + applyRetPair.getSecond();
shopMchEntryService.updateMerchEntryApprovalByMchId(shopMchEntry.getId(), null, message);
logger.error(message);
return new JSONObject().set("code", "500").set("message", message);
}
logger.info("申请分账业务已成功,等待拉卡拉审核,准备创建分账接收方!");
// 2新增一个接收方记录起码要一个平台方代理商根据入驻信息新增
Boolean genSuccess = lklLedgerReceiverService.innerApplyLedgerReceiver(shopMchEntry.getId(), merCupNo, shopMchEntry.getDistributor_id());
if (!genSuccess) {
logger.error("申请分账接收方失败");
shopMchEntryService.updateMerchEntryApprovalByMchId(shopMchEntry.getId(), null, "申请分账接收方失败");
return new JSONObject().set("code", "500").set("message", "申请分账接收方失败");
}
logger.error("申请分账业务已成功,等待拉卡拉审核,但创建分账接收方失败了");
shopMchEntryService.updateMerchEntryApprovalByMchId(shopMchEntry.getId(), null, "申请分账业务已成功,等待拉卡拉审核,但创建分账接收方失败了");
return new JSONObject().set("code", "500").set("message", "创建分账接收方失败");
}
shopMchEntryService.updateMerchEntryApprovalByMchId(shopMchEntry.getId(), CommonConstant.MCH_APPR_STA_LKL_NOPASS, "进件回调处理失败");
return new JSONObject().set("code", "500").set("message", "进件回调处理失败");
shopMchEntryService.updateMerchEntryApprovalByMchId(shopMchEntry.getId(), CommonConstant.MCH_APPR_STA_LKL_PADDING, "申请分账业务、创建分账接收方均已成功,等待拉卡拉审核开通分账业务");
return new JSONObject().put("code", "200").put("message", "处理成功");
}
/**