diff --git a/mall-common/src/main/java/com/suisung/mall/common/constant/CommonConstant.java b/mall-common/src/main/java/com/suisung/mall/common/constant/CommonConstant.java
index 0e123214..b4f6a8ef 100644
--- a/mall-common/src/main/java/com/suisung/mall/common/constant/CommonConstant.java
+++ b/mall-common/src/main/java/com/suisung/mall/common/constant/CommonConstant.java
@@ -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";
+
}
diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/base/controller/admin/ShopBaseStoreCategoryAdminController.java b/mall-shop/src/main/java/com/suisung/mall/shop/base/controller/admin/ShopBaseStoreCategoryAdminController.java
index 3663ee43..20b91987 100644
--- a/mall-shop/src/main/java/com/suisung/mall/shop/base/controller/admin/ShopBaseStoreCategoryAdminController.java
+++ b/mall-shop/src/main/java/com/suisung/mall/shop/base/controller/admin/ShopBaseStoreCategoryAdminController.java
@@ -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;
+
/**
*
* 店铺分类表 前端控制器
@@ -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));
}
diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/esign/service/impl/EsignContractServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/esign/service/impl/EsignContractServiceImpl.java
index d5b5db6a..cf9204d9 100644
--- a/mall-shop/src/main/java/com/suisung/mall/shop/esign/service/impl/EsignContractServiceImpl.java
+++ b/mall-shop/src/main/java/com/suisung/mall/shop/esign/service/impl/EsignContractServiceImpl.java
@@ -312,7 +312,7 @@ public class EsignContractServiceImpl extends BaseServiceImpl retPair = lakalaApiService.innerApplyLedgerMer(esignContract.getMch_mobile());
if (!retPair.getFirst()) {
- log.error("商家申请分账功能失败:{}", retPair.getSecond());
+ log.error("商家申请分账业务异常:{}", retPair.getSecond());
}
// 更新商家的hasEsigned状态=1
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 ad87592e..95a380da 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
@@ -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);
- ecParams.put("E1", platformName + "和代理商");
- ecParams.put("E2", "小发同城平台商户合作协议");
+
+ Boolean hasAgent = false; // 有无分账代理商?
+ if (hasAgent) {
+ ecParams.put("E1", platformName + "和代理商");
+ 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);
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 92d6dde7..c2ad05a5 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
@@ -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 用法人、小微个人的手机号注册商家账号,作为店铺的管理员
- Pair retPair = shopStoreBaseService.covMerchEntryInfo2StoreInfo(mchId, false);
- if (retPair.getFirst() <= 0) {
- shopMchEntryService.updateMerchEntryApprovalByMchId(shopMchEntry.getId(), null, "进件时初始化店铺失败");
- logger.error("初始化店铺失败: mchId={}, reason={}", mchId, retPair.getSecond());
- }
-
- logger.info("初始化店铺成功!mchId={}", mchId);
- }
-
- // 1、(电子合同)给商家申请分账业务;务必检查是否申请过?申请过忽略
- Pair 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);
- shopMchEntryService.updateMerchEntryApprovalByMchId(shopMchEntry.getId(), null, message);
- return new JSONObject().set("code", "500").set("message", message);
- }
-
- if (!genSuccess) {
- logger.error("申请分账接收方失败");
- shopMchEntryService.updateMerchEntryApprovalByMchId(shopMchEntry.getId(), null, "申请分账接收方失败");
- return new JSONObject().set("code", "500").set("message", "申请分账接收方失败");
- }
+ // 新建一个正式的已审核通过的店铺,不要抛异常,使用补偿机制,可以独立初始化店铺
+ // 重要:包含了更改 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);
}
- shopMchEntryService.updateMerchEntryApprovalByMchId(shopMchEntry.getId(), CommonConstant.MCH_APPR_STA_LKL_NOPASS, "进件回调处理失败");
- return new JSONObject().set("code", "500").set("message", "进件回调处理失败");
+
+ // 重要:给商家申请分账业务;务必检查是否申请过?申请过忽略
+ Pair 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", "创建分账接收方失败");
+ }
+
+ shopMchEntryService.updateMerchEntryApprovalByMchId(shopMchEntry.getId(), CommonConstant.MCH_APPR_STA_LKL_PADDING, "申请分账业务、创建分账接收方均已成功,等待拉卡拉审核开通分账业务");
+ return new JSONObject().put("code", "200").put("message", "处理成功");
}
/**