入驻审核状态调整,bug 修复

This commit is contained in:
Jack 2025-05-11 22:37:35 +08:00
parent 764ebfbc48
commit 2d2b0364f0
7 changed files with 96 additions and 46 deletions

View File

@ -45,11 +45,12 @@ public class CommonConstant {
public static final Integer PRODUCT_DATA_SOURCE_USER = 1;
public static final Integer PRODUCT_DATA_SOURCE_SX = 2;
// 入驻商家的审批状态1-已通过2-未通过3-待审核4-未申请
// 入驻商家的审批状态1-已通过2-未通过3-待审核4-未申请5-已提交拉卡拉审核
public static final Integer MCH_APPR_STA_PASS = 1;
public static final Integer MCH_APPR_STA_NOPASS = 2;
public static final Integer MCH_APPR_STA_PADDING = 3;
public static final Integer MCH_APPR_STA_NONE = 4;
public static final Integer MCH_APPR_STA_LKL_PADDING = 5;
// 入驻商家主体类型企业或个人1-企业2-个人
public static final Integer MCH_ENTITY_TYPE_QY = 1;

View File

@ -81,16 +81,11 @@ public class ShopMchEntry implements Serializable {
@ApiModelProperty(value = "邮箱")
private String email;
@ApiModelProperty(value = "入驻商家店铺所在的省")
private String province_id;
@ApiModelProperty(value = "入驻商家店铺所在的市")
private String city_id;
@ApiModelProperty(value = "店铺地区编号省份code/城市code/区code")
private String store_district;
@ApiModelProperty(value = "入驻商家店铺所在的县区")
private String county_id;
@ApiModelProperty(value = "店铺地区 省份/城市/乡县")
@ApiModelProperty(value = "店铺地区名称,省份/城市/区")
private String store_area;
@ApiModelProperty(value = "入驻商家店铺的详细地址")
@ -177,10 +172,10 @@ public class ShopMchEntry implements Serializable {
@ApiModelProperty(value = "结算账户银行卡图片")
private String bank_image;
@ApiModelProperty(value = "结算账号省市区code 省code/市code/区code必填项")
@ApiModelProperty(value = "结算账号省市区编号 省code/市code/区code必填项")
private String bank_district;
@ApiModelProperty(value = "结算银行地区,格式: 省份/城市/乡县")
@ApiModelProperty(value = "结算银行地区名称,格式: 省份/城市/区")
private String bank_area;
@ApiModelProperty(value = "结算账号类型57-对公 58-对私")

View File

@ -47,7 +47,7 @@ public class LklTkController extends BaseControllerImpl {
@ApiOperation(value = "拉卡拉进件申请", notes = "拉卡拉进件申请")
@RequestMapping(value = "/registrationMerchant", method = {RequestMethod.POST, RequestMethod.GET})
public CommonResult registrationMerchant(@RequestBody JSONObject paramsJSON) {
Pair<Boolean, String> resp = lklTkService.registrationMerchant(paramsJSON.getStr("mchMobile"));
Pair<Boolean, String> resp = lklTkService.registrationMerchant(paramsJSON.getStr("mchMobile"), paramsJSON.getStr("bizLicenseNumber"));
if (resp.getFirst()) {
return CommonResult.success(null, resp.getSecond());
}

View File

@ -218,7 +218,7 @@ public class LklLedgerReceiverServiceImpl extends BaseServiceImpl<LklLedgerRecei
}
// 更新多个状态
lklLedgerMemberService.updateMulStatus(merCupNo, 0, 0, 1, 0);
lklLedgerMemberService.updateMulStatus(merCupNo, "", 0, 0, 1, 0);
success += 1;
}

View File

@ -23,6 +23,7 @@ import com.suisung.mall.common.utils.RestTemplateHttpUtil;
import com.suisung.mall.common.utils.StringUtils;
import com.suisung.mall.common.utils.UploadUtil;
import com.suisung.mall.core.web.service.RedisService;
import com.suisung.mall.shop.esign.service.EsignContractFillingFileService;
import com.suisung.mall.shop.esign.service.EsignContractService;
import com.suisung.mall.shop.lakala.service.LklLedgerReceiverService;
import com.suisung.mall.shop.lakala.utils.LakalaUtil;
@ -90,6 +91,10 @@ public class LklTkServiceImpl {
@Resource
private EsignContractService esignContractService;
@Lazy
@Resource
private EsignContractFillingFileService esignContractFillingFileService;
@Lazy
@Resource
private OssServiceImpl ossService;
@ -322,7 +327,7 @@ public class LklTkServiceImpl {
* @param mchMobile 商家手机号
* @return
*/
public Pair<Boolean, String> registrationMerchant(String mchMobile) {
public Pair<Boolean, String> registrationMerchant(String mchMobile, String bizLicenseNumber) {
String authorization = getLklTkAuthorization();
if (StrUtil.isBlank(authorization)) {
return Pair.of(false, "获取拉卡拉token失败");
@ -332,7 +337,7 @@ public class LklTkServiceImpl {
header.put("Authorization", getLklTkAuthorization());
// 获取商家入驻信息组成请求参数
ShopMchEntry shopMchEntry = shopMchEntryService.getShopMerchEntryByCondition(mchMobile, null, CommonConstant.MCH_APPR_STA_PASS);
ShopMchEntry shopMchEntry = shopMchEntryService.getShopMerchEntryByCondition(mchMobile, bizLicenseNumber, CommonConstant.MCH_APPR_STA_LKL_PADDING);
if (ObjectUtil.isEmpty(shopMchEntry)) {
return Pair.of(false, "商家入驻信息不存在");
}
@ -420,7 +425,7 @@ public class LklTkServiceImpl {
JSONObject bizContent = new JSONObject();
bizContent.put("activityId", 687);
bizContent.put("termNum", "1");
bizContent.put("mcc", "12015"); // 超市的 code
bizContent.put("mcc", "5311"); // 超市的 code
bizContent.put("fees", new JSONArray() {{
put(new JSONObject() {{
put("feeCode", "WECHAT");
@ -493,6 +498,7 @@ public class LklTkServiceImpl {
if (!success) {
return Pair.of(false, "提交进件成功,但更新商户号失败!");
}
} catch (Exception e) {
logger.error("拉卡拉进件异常:{}", e.getMessage());
return Pair.of(false, "进件失败:" + e.getMessage());
@ -553,11 +559,24 @@ public class LklTkServiceImpl {
return new JSONObject().set("code", "500").set("message", "更新商户号失败");
}
logger.debug("###开始异步执行生成电子合同模版和填充模版数据,并生该商家和平台方签署的未盖章合同文件###");
// 生成电子合同模版和填充模版数据并生该商家和平台方签署的未盖章合同文件
Boolean genSuccess = esignContractFillingFileService.fillDocTemplate(shopMchEntry.getLogin_mobile(), "");
if (!genSuccess) {
logger.error("###商家入驻电子合同生成失败###");
}
// 1发起E签宝合同签署签署完成之后生成分账盖章协议书下一步才能申请分账功能权限
esignContractService.innerSignFlowCreateByFile(shopMchEntry.getLogin_mobile());
Pair<Boolean, String> resPair = esignContractService.innerSignFlowCreateByFile(shopMchEntry.getLogin_mobile());
if (!resPair.getFirst()) {
logger.error("###商家发起电子签名失败:{}###", resPair.getSecond());
}
// 2新增一个接收方记录起码要一个平台方代理商根据入驻信息新增
lklLedgerReceiverService.innerApplyLedgerReceiver(merCupNo, shopMchEntry.getDistributor_id());
genSuccess = lklLedgerReceiverService.innerApplyLedgerReceiver(merCupNo, shopMchEntry.getDistributor_id());
if (!genSuccess) {
logger.error("###申请分账接收方失败###");
}
return new JSONObject().set("code", "200").set("message", "成功");
}

View File

@ -30,6 +30,7 @@ import com.suisung.mall.shop.components.TaskService;
import com.suisung.mall.shop.esign.service.EsignContractFillingFileService;
import com.suisung.mall.shop.esign.service.EsignContractService;
import com.suisung.mall.shop.esign.service.EsignPlatformInfoService;
import com.suisung.mall.shop.lakala.service.impl.LklTkServiceImpl;
import com.suisung.mall.shop.message.service.ShopMessageTemplateService;
import com.suisung.mall.shop.store.mapper.ShopMchEntryMapper;
import com.suisung.mall.shop.store.service.ShopMchEntryService;
@ -76,6 +77,10 @@ public class ShopMchEntryServiceImpl extends BaseServiceImpl<ShopMchEntryMapper,
@Resource
private ShopBaseStoreCategoryService shopBaseStoreCategoryService;
@Lazy
@Resource
private LklTkServiceImpl lklTkService;
@Autowired
private TaskService taskService;
@ -129,7 +134,7 @@ public class ShopMchEntryServiceImpl extends BaseServiceImpl<ShopMchEntryMapper,
ShopMchEntry record = JSONUtil.toBean(shopMerchEntryJSON, ShopMchEntry.class);
if (record == null || StrUtil.isBlank(record.getLogin_mobile())) {
log.error("###商家入驻参数转换失败###");
log.error("###商家入驻参数转换失败###{}", shopMerchEntryJSON);
return CommonResult.failed("参数转换失败,请联系管理员!");
}
@ -147,6 +152,11 @@ public class ShopMchEntryServiceImpl extends BaseServiceImpl<ShopMchEntryMapper,
return CommonResult.failed("请填写联系人!");
}
if (StrUtil.isBlank(record.getStore_area()) || StrUtil.isBlank(record.getBank_area())) {
return CommonResult.failed("请指定店铺或银行的省市区!");
}
// 校验身份证手机号格式
if (StrUtil.isNotBlank(record.getLegal_person_id_number()) && !StringUtils.validateIDCard(record.getLegal_person_id_number())) {
return CommonResult.failed("法人身份证号码有误!");
@ -192,7 +202,11 @@ public class ShopMchEntryServiceImpl extends BaseServiceImpl<ShopMchEntryMapper,
}
if (!BankUtil.isValidZHBankAccount(record.getAccount_number())) {
return CommonResult.failed("收款账号(银行卡号)格式有误!");
return CommonResult.failed("银行卡号格式有误!");
}
if (StrUtil.isBlank(record.getOpenning_bank_code()) || StrUtil.isBlank(record.getClearing_bank_code())) {
return CommonResult.failed("请填写银行开户行号或结算行号!");
}
if (StrUtil.isNotBlank(record.getStore_name()) && shopStoreBaseService.isExistsByStoreName(record.getStore_name())) {
@ -440,7 +454,7 @@ public class ShopMchEntryServiceImpl extends BaseServiceImpl<ShopMchEntryMapper,
* 商家入驻审批
*
* @param id
* @param approvalStatus 入驻商家的审批状态1-已通过2-未通过3-待审核4-未申请
* @param approvalStatus 入驻商家的审批状态1-已通过2-未通过3-待审核4-未申请5-已提交拉卡拉审核
* @param approvalRemark 审批备注
* @param approvalInvalidCol 审批无效字段
* @return
@ -460,7 +474,7 @@ public class ShopMchEntryServiceImpl extends BaseServiceImpl<ShopMchEntryMapper,
return CommonResult.failed("缺少必要参数!");
}
if (!approvalStatus.equals(CommonConstant.Enable) && !approvalStatus.equals(CommonConstant.Disable2)) {
if (!approvalStatus.equals(CommonConstant.MCH_APPR_STA_LKL_PADDING) && !approvalStatus.equals(CommonConstant.MCH_APPR_STA_NOPASS)) {
return CommonResult.failed("审批状态有误!");
}
@ -471,15 +485,18 @@ public class ShopMchEntryServiceImpl extends BaseServiceImpl<ShopMchEntryMapper,
// TODO 已经审核通过的不能再审核了
UpdateWrapper<ShopMchEntry> updateWrapper = new UpdateWrapper<>();
if (approvalStatus.equals(CommonConstant.Enable) && StrUtil.isBlank(approvalRemark)) {
if (approvalStatus.equals(CommonConstant.MCH_APPR_STA_LKL_PADDING) && StrUtil.isBlank(approvalRemark)) {
// 审核通过
approvalRemark = "审核通过,后续将向您发起签署电子合同流程。";
approvalRemark = "初步审核通过,等待进一步审核。";//"审核通过,后续将向您发起签署电子合同流程。";
updateWrapper.set("signed_status", CommonConstant.CONTRACT_SIGN_STA_ING);
} else if (approvalStatus.equals(CommonConstant.Disable2) && StrUtil.isBlank(approvalRemark)) {
updateWrapper.set("approval_status", CommonConstant.MCH_APPR_STA_LKL_PADDING); // 进入拉卡拉审核中
log.info("准备提交给拉卡拉进件审核。");
} else if (approvalStatus.equals(CommonConstant.MCH_APPR_STA_NOPASS) && StrUtil.isBlank(approvalRemark)) {
approvalRemark = "审核未通过,请继续完善入驻资料信息。";
}
// 自动计算商家分成比例
// 重要备注自动计算商家分成比例
record.setSplit_ratio(shopBaseStoreCategoryService.getStoreCategoryRatio(record.getBiz_category()));
updateWrapper.eq("id", id)
@ -496,21 +513,26 @@ public class ShopMchEntryServiceImpl extends BaseServiceImpl<ShopMchEntryMapper,
return CommonResult.failed("系统处理审批出错,请联系管理员!");
}
// TODO 审核通过后去拉卡拉进件即时发送短信给商家通知准备去签电子合同
if (approvalStatus.equals(CommonConstant.Enable)) {
// 多线程执行电子合同生成和填充
taskService.executeTask(() -> {
log.debug("###开始异步执行生成电子合同模版和填充模版数据,并生该商家和平台方签署的未盖章合同文件###");
// 生成电子合同模版和填充模版数据并生该商家和平台方签署的未盖章合同文件
Boolean genSuccess = esignContractFillingFileService.fillDocTemplate(record.getLogin_mobile(), "");
if (!genSuccess) {
log.error("###商家入驻电子合同生成失败###");
}
// 发短信通知商家入驻申请已通过审核
});
// TODO 审核通过后触发去拉卡拉进件,系统审核
Pair<Boolean, String> resultPair = lklTkService.registrationMerchant(record.getLogin_mobile(), record.getBiz_license_number());
if (!resultPair.getFirst()) {
return CommonResult.failed(resultPair.getSecond());
}
// if (approvalStatus.equals(CommonConstant.Enable)) {
// // 多线程执行电子合同生成和填充
// taskService.executeTask(() -> {
// log.debug("###开始异步执行生成电子合同模版和填充模版数据,并生该商家和平台方签署的未盖章合同文件###");
// // 生成电子合同模版和填充模版数据并生该商家和平台方签署的未盖章合同文件
// Boolean genSuccess = esignContractFillingFileService.fillDocTemplate(record.getLogin_mobile(), "");
// if (!genSuccess) {
// log.error("###商家入驻电子合同生成失败###");
// }
//
// // 发短信通知商家入驻申请已通过审核
// });
// }
return CommonResult.success();
}
@ -631,7 +653,7 @@ public class ShopMchEntryServiceImpl extends BaseServiceImpl<ShopMchEntryMapper,
queryWrapper.eq("biz_license_number", bizLicenseNumber);
}
if (ObjectUtil.isEmpty(approvalStatus)) {
if (ObjectUtil.isNotEmpty(approvalStatus)) {
queryWrapper.eq("approval_status", approvalStatus);
}
@ -759,12 +781,16 @@ public class ShopMchEntryServiceImpl extends BaseServiceImpl<ShopMchEntryMapper,
updateWrapper.set("lkl_audit_status", lklAuditStatus);
}
// 商家入驻审核正式通过
updateWrapper.set("approval_status", CommonConstant.MCH_APPR_STA_PASS);
if (StrUtil.isNotBlank(lklMerCupNo)) {
updateWrapper.set("lkl_mer_cup_no", lklMerCupNo);
}
if (StrUtil.isNotBlank(lklTkRegResp)) {
updateWrapper.set("lkl_tk_reg_resp", lklTkRegResp);
}
return update(updateWrapper);
}

View File

@ -31,7 +31,10 @@ import com.suisung.mall.common.feignService.PayService;
import com.suisung.mall.common.modules.account.AccountUserBase;
import com.suisung.mall.common.modules.account.AccountUserInfo;
import com.suisung.mall.common.modules.account.AccountUserSns;
import com.suisung.mall.common.modules.base.*;
import com.suisung.mall.common.modules.base.ShopBaseProductTag;
import com.suisung.mall.common.modules.base.ShopBaseStoreCategory;
import com.suisung.mall.common.modules.base.ShopBaseStoreGrade;
import com.suisung.mall.common.modules.base.ShopPageModule;
import com.suisung.mall.common.modules.distribution.ShopDistributionPlantformUser;
import com.suisung.mall.common.modules.invoicing.InvoicingCustomerLevel;
import com.suisung.mall.common.modules.invoicing.InvoicingWarehouseBase;
@ -3026,13 +3029,19 @@ public class ShopStoreBaseServiceImpl extends BaseServiceImpl<ShopStoreBaseMappe
shopStoreBase.setStore_category_id(shopMchEntry.getBiz_category()); // 重要店铺分类id对应 shop_base_store_category 表的分类
shopStoreBase.setSplit_ratio(shopMchEntry.getSplit_ratio()); // 分账比例
String storeFacadeImage = shopMchEntry.getFront_facade_image();
shopStoreBase.setStore_logo(storeFacadeImage); // 临时使用门面照片做logo
String storeLogoImage = shopMchEntry.getStore_logo();
if (StrUtil.isBlank(storeLogoImage)) {
storeLogoImage = storeFacadeImage;
}
shopStoreBase.setStore_logo(storeLogoImage); // 临时使用门面照片做logo
// 省市区记录有序列表
List<ShopBaseDistrict> districtList = shopBaseDistrictService.getFullDistrictByDistrictCode(shopMchEntry.getCounty_id());
shopStoreBase.setStore_district_id(shopBaseDistrictService.joinDistrict(districtList, 1, true, "/"));
shopStoreBase.setStore_area(shopBaseDistrictService.joinDistrict(districtList, 2, true, "/"));
// List<ShopBaseDistrict> districtList = shopBaseDistrictService.getFullDistrictByDistrictCode(shopMchEntry.getCounty_id());
//shopStoreBase.setStore_district_id(shopBaseDistrictService.joinDistrict(districtList, 1, true, "/"));
// shopStoreBase.setStore_area(shopBaseDistrictService.joinDistrict(districtList, 2, true, "/"));
shopStoreBase.setStore_district_id(shopMchEntry.getStore_district());
shopStoreBase.setStore_area(shopMchEntry.getStore_area());
shopStoreBase.setStore_address(shopMchEntry.getStore_address());
shopStoreBase.setStore_longitude(shopMchEntry.getStore_longitude());
shopStoreBase.setStore_latitude(shopMchEntry.getStore_latitude());