入驻分账比例,如果有值,去掉自动计算。

This commit is contained in:
Jack 2025-09-22 23:35:09 +08:00
parent 802595efbb
commit ec654a3539
2 changed files with 88 additions and 36 deletions

View File

@ -332,8 +332,8 @@ public class LklTkServiceImpl {
// 参数校验
if (ObjectUtil.isEmpty(mchId)) {
logger.warn("商户进件失败:入驻商户Id不能为空");
return Pair.of(false, "入驻商户Id不能为空");
logger.warn("商户进件失败:入驻编号不能为空");
return Pair.of(false, "入驻编号不能为空");
}
String authorization = getLklTkAuthorization();

View File

@ -122,57 +122,68 @@ public class ShopMchEntryServiceImpl extends BaseServiceImpl<ShopMchEntryMapper,
/**
* 商家申请入驻商城平台
*
* @param shopMerchEntryJSON
* @return
* @param shopMerchEntryJSON 商户入驻信息JSON对象
* @return 申请结果
*/
@Override
public CommonResult shopMerchEntryApply(JSONObject shopMerchEntryJSON) {
log.debug("开始处理商家入驻申请");
// 检查是否已登录
Integer userId = 0;
UserDto user = getCurrentUser();
if (user == null || user.getId() == null) {
log.warn("用户未登录,无法申请入驻");
return CommonResult.failed("请先登录!");
}
userId = user.getId();
// 参数校验流程
if (shopMerchEntryJSON == null) {
log.warn("商家入驻申请参数为空");
return CommonResult.failed("缺少必要参数!");
}
ShopMchEntry record = JSONUtil.toBean(shopMerchEntryJSON, ShopMchEntry.class);
if (record == null || StrUtil.isBlank(record.getLogin_mobile())) {
log.error("###商家入驻参数转换失败###{}", shopMerchEntryJSON);
log.error("商家入驻参数转换失败: {}", shopMerchEntryJSON);
return CommonResult.failed("数据转换失败!");
}
String loginMobile = record.getLogin_mobile();
log.debug("处理商家入驻申请,手机号: {}", loginMobile);
if (StrUtil.isBlank(record.getStore_name()) || StrUtil.isBlank(record.getStore_address())
|| StrUtil.isBlank(record.getStore_longitude())
|| StrUtil.isBlank(record.getStore_latitude())) {
log.warn("缺少必要店铺信息,手机号: {}", loginMobile);
return CommonResult.failed("缺少店铺名或详细地址!");
}
if (ObjectUtil.isEmpty(record.getBiz_category())) {
log.warn("未选择经营品类,手机号: {}", loginMobile);
return CommonResult.failed("请选择经营品类!");
}
if (ObjectUtil.isEmpty(record.getContact_name())) {
log.warn("未填写联系人,手机号: {}", loginMobile);
return CommonResult.failed("请填写联系人!");
}
if (StrUtil.isBlank(record.getStore_area()) || StrUtil.isBlank(record.getBank_area())) {
log.warn("未指定省市区信息,手机号: {}", loginMobile);
return CommonResult.failed("请指定店铺或银行的省市区!");
}
if (!PhoneNumberUtils.checkPhoneNumber(loginMobile)) {
log.warn("申请人手机号码格式错误,手机号: {}", loginMobile);
return CommonResult.failed("申请人手机号码有误!");
}
if (CheckUtil.isEmpty(record.getEntity_type())) {
log.warn("未选择入驻主体类型,手机号: {}", loginMobile);
return CommonResult.failed("请选择是企业还是个人");
}
@ -186,19 +197,22 @@ public class ShopMchEntryServiceImpl extends BaseServiceImpl<ShopMchEntryMapper,
// * 根据入驻主体类型企业或个人使用不同的判断条件
// * - 企业通过营业执照号+联系人手机号判断
// * - 个人通过个人身份证号+联系人手机号判断
log.debug("检查商家是否已经申请过入驻,手机号: {}", loginMobile);
Pair<Boolean, String> canDo = canApply(record.getEntity_type(), record.getLegal_person_mobile(), record.getBiz_license_number(), record.getIndividual_id_number());
if (!canDo.getFirst()) {
log.warn("商家入驻申请被拒绝: {},手机号: {}", canDo.getSecond(), loginMobile);
return CommonResult.failed(canDo.getSecond());
}
if (shopStoreBaseService.isExistsByStoreName(record.getStore_name())) {
log.error("生成店铺:店铺名称已存在");
log.error("店铺名称已存在: {}", record.getStore_name());
return CommonResult.failed("店铺名称已存在");
}
Boolean isQy = true;
// 检查企业法人或个人的营业执照或身份证
if (ObjectUtil.isNotEmpty(record.getEntity_type()) && record.getEntity_type().equals(CommonConstant.MCH_ENTITY_TYPE_GR)) {
log.debug("个人入驻信息校验,手机号: {}", loginMobile);
isQy = false; // 个人入驻
// 个人
if (StrUtil.isBlank(record.getIndividual_id_number())
@ -208,10 +222,12 @@ public class ShopMchEntryServiceImpl extends BaseServiceImpl<ShopMchEntryMapper,
|| StrUtil.isBlank(record.getIndividual_id_period_end())
|| StrUtil.isBlank(record.getIndividual_id_images())
|| StrUtil.isBlank(record.getIndividual_id_images2())) {
log.warn("缺少个人身份证信息,手机号: {}", loginMobile);
return CommonResult.failed("缺少个人身份证信息!");
}
if (!StringUtils.validateIDCard(record.getIndividual_id_number())) {
log.warn("个人身份证号码格式错误,号码: {},手机号: {}", record.getIndividual_id_number(), loginMobile);
return CommonResult.failed("个人身份证号码有误!");
}
@ -224,12 +240,15 @@ public class ShopMchEntryServiceImpl extends BaseServiceImpl<ShopMchEntryMapper,
}
} else {
log.debug("企业入驻信息校验,手机号: {}", loginMobile);
// 企业
if (StrUtil.isBlank(record.getBiz_license_number()) || StrUtil.isBlank(record.getBiz_license_image())) {
log.warn("缺少企业营业执照信息,手机号: {}", loginMobile);
return CommonResult.failed("缺少企业营业执照信息!");
}
if (!StringUtils.verifyBusinessLicense(record.getBiz_license_number())) {
log.warn("营业执照号码格式错误,号码: {},手机号: {}", record.getBiz_license_number(), loginMobile);
return CommonResult.failed("营业执照号码有误!");
}
@ -240,18 +259,22 @@ public class ShopMchEntryServiceImpl extends BaseServiceImpl<ShopMchEntryMapper,
|| StrUtil.isBlank(record.getLegal_person_id_period_end())
|| StrUtil.isBlank(record.getLegal_person_id_images())
|| StrUtil.isBlank(record.getLegal_person_id_images2())) {
log.warn("缺少法人身份证信息,手机号: {}", loginMobile);
return CommonResult.failed("缺少法人身份证信息!");
}
if (!StringUtils.validateIDCard(record.getLegal_person_id_number())) {
log.warn("法人身份证号码格式错误,号码: {},手机号: {}", record.getLegal_person_id_number(), loginMobile);
return CommonResult.failed("法人身份证号码有误!");
}
if (!PhoneNumberUtils.checkPhoneNumber(record.getLegal_person_mobile())) {
log.warn("法人手机号码格式错误,号码: {},手机号: {}", record.getLegal_person_mobile(), loginMobile);
return CommonResult.failed("法人手机号码有误!");
}
if (StrUtil.contains(record.getLegal_person_id_period_end(), "长期")) {
if (StrUtil.contains(record.getLegal_person_id_period_end(), "长期")
|| StrUtil.contains(record.getLegal_person_id_period_end(), "永久")) {
record.setLegal_person_id_period_end("9999-12-31");
}
@ -262,14 +285,17 @@ public class ShopMchEntryServiceImpl extends BaseServiceImpl<ShopMchEntryMapper,
// 检查银行账号
if (StrUtil.isBlank(record.getBank_name()) || StrUtil.isBlank(record.getAccount_number()) || StrUtil.isBlank(record.getAccount_holder_name())) {
log.warn("缺少银行账号信息,手机号: {}", loginMobile);
return CommonResult.failed("缺少银行账号信息!");
}
if (!BankUtil.validateBankCard(record.getAccount_number(), "CN", isQy)) {
log.warn("银行卡号格式错误,卡号: {},手机号: {}", record.getAccount_number(), loginMobile);
return CommonResult.failed("银行卡号格式有误!");
}
if (StrUtil.isBlank(record.getOpenning_bank_code())) {
log.warn("未填写结算账户清算行号,手机号: {}", loginMobile);
return CommonResult.failed("请填写结算账户清算⾏号!");
}
@ -278,6 +304,7 @@ public class ShopMchEntryServiceImpl extends BaseServiceImpl<ShopMchEntryMapper,
record.setClearing_bank_code(record.getOpenning_bank_code());
if (StrUtil.isNotBlank(record.getStore_name()) && shopStoreBaseService.isExistsByStoreName(record.getStore_name())) {
log.warn("店铺名称已被使用: {},手机号: {}", record.getStore_name(), loginMobile);
return CommonResult.failed("店铺名已被使用!");
}
@ -297,12 +324,15 @@ public class ShopMchEntryServiceImpl extends BaseServiceImpl<ShopMchEntryMapper,
// 转换拉卡拉的日期格式 yyyy-MM-dd
record = convLklDateFormat(record);
log.debug("保存商家入驻申请信息,手机号: {}", loginMobile);
if (!add(record)) {
log.error("入驻信息提交失败,手机号: {}", loginMobile);
return CommonResult.failed("入驻信息提交失败!");
}
// 给平台管理员发短信通知有商家入驻尊敬的管理员商家 ${name}提交了入驻我们平台的申请请及时对相关资质材料予以审核以便推进后续流程
// 获取平台方的手机号码发送短信通知
log.debug("发送入驻通知短信给平台管理员");
Pair<String, String> mobileAndLicenseNumber = esignPlatformInfoService.getEsignPlatformMobileAndLicenseNumber();
if (mobileAndLicenseNumber != null) {
Map<String, Object> tmplArgs = new HashMap<>(1);
@ -311,6 +341,7 @@ public class ShopMchEntryServiceImpl extends BaseServiceImpl<ShopMchEntryMapper,
shopMessageTemplateService.aliyunSmsSend(mobileAndLicenseNumber.getFirst(), "SMS_486545331", tmplArgs);//SMS_479760276
}
log.info("商家入驻申请提交成功recordId: {},手机号: {}", record.getId(), loginMobile);
return CommonResult.success();
}
@ -674,41 +705,49 @@ public class ShopMchEntryServiceImpl extends BaseServiceImpl<ShopMchEntryMapper,
* 平台更新商户入驻信息
*
* @param record 商户入驻记录
* @return
* @return 更新结果
*/
@Override
public CommonResult updateMerchEntry(ShopMchEntry record) {
log.debug("开始更新商户入驻信息recordId={}", record != null ? record.getId() : null);
if (record == null || record.getId() == null || record.getId() <= 0) {
log.warn("更新商户入驻信息参数校验失败record is null or id is invalid");
return CommonResult.failed("缺少必要参数!");
}
// 固定用户ID模拟管理员
Integer userId = 0;
// UserDto user = getCurrentUser();
// if (!user.isAdmin()) {
// return CommonResult.failed(ResultCode.FORBIDDEN);
// }
// userId = user.getId();
UserDto user = getCurrentUser();
if (user == null) {
log.warn("用户未登录,无法更新商户入驻信息");
return CommonResult.failed("用户未登录!");
}
if (!user.isAdmin()) {
log.warn("用户无权限更新商户入驻信息userId={}", user.getId());
return CommonResult.failed(ResultCode.FORBIDDEN);
}
userId = user.getId();
record.setUpdated_by(userId);
record.setUpdated_at(new Date());
if (record.getSettlement_method() != null
|| record.getSettlement_method() < 0
|| record.getSettlement_method() > 1) {
record.setSettlement_method(0);
}
record.setSettlement_method(1); //结算交割天数结算类型:0-秒到1-次日结算(分账必须次日结算)
// 检查全部非空字段的格式
log.debug("开始校验商户入驻信息字段格式");
Pair<Boolean, String> checkResult = checkMchEntryInfo(record, false, true);
if (!checkResult.getFirst()) {
log.warn("商户入驻信息字段格式校验失败,错误信息: {}", checkResult.getSecond());
return CommonResult.failed(checkResult.getSecond());
}
if (!updateById(record)) {
log.error("更新商户入驻信息失败recordId={}", record.getId());
return CommonResult.failed("更新商户入驻信息失败!");
}
log.info("商户入驻信息更新成功recordId={}", record.getId());
return CommonResult.success();
}
@ -834,43 +873,53 @@ public class ShopMchEntryServiceImpl extends BaseServiceImpl<ShopMchEntryMapper,
/**
* 商家入驻审批
*
* @param mchId
* @param mchId 商户ID
* @param approvalStatus 入驻审批状态1-已通过2-未通过3-待审核4-未申请过5-已提交拉卡拉审核21-拉卡拉审核未通过
* @param approvalRemark 审批备注
* @param approvalInvalidCol 审批无效字段
* @return
* @return 审批结果
*/
@Override
public CommonResult shopMerchEntryApproval(Long mchId, Integer approvalStatus, String approvalRemark, String approvalInvalidCol) {
log.debug("开始处理商家入驻审批mchId={}, approvalStatus={}", mchId, approvalStatus);
// 固定用户ID模拟管理员
Integer userId = 0;
UserDto user = getCurrentUser();
if (!user.isAdmin()) {
if (user == null || !user.isAdmin()) {
log.warn("用户无权限进行商家入驻审批操作userId={}", user.getId());
return CommonResult.failed(ResultCode.FORBIDDEN);
}
userId = user.getId();
// 参数校验流程
if (ObjectUtil.isEmpty(mchId) || ObjectUtil.isEmpty(approvalStatus)) {
log.warn("商家入驻审批参数校验失败,缺少必要参数 mchId={} 或 approvalStatus={}", mchId, approvalStatus);
return CommonResult.failed("缺少必要参数!");
}
// 审核状态有效性校验
if (!approvalStatus.equals(CommonConstant.MCH_APPR_STA_LKL_PADDING) && !approvalStatus.equals(CommonConstant.MCH_APPR_STA_NOPASS)) {
log.warn("商家入驻审批状态参数不合法approvalStatus={}", approvalStatus);
return CommonResult.failed("审批状态有误!");
}
// 查询入驻记录
ShopMchEntry record = get(mchId);
if (record == null) {
log.warn("商家入驻记录不存在mchId={}", mchId);
return CommonResult.failed("商家入驻记录不存在!");
}
// 自动计算商家分成比例
BigDecimal splitRatio = shopBaseStoreCategoryService.getStoreCategoryRatio(record.getBiz_category());
if (splitRatio == null || splitRatio.compareTo(BigDecimal.ZERO) <= 0) {
splitRatio = new BigDecimal(100);
BigDecimal splitRatio = record.getSplit_ratio();
if (splitRatio == null || BigDecimal.ZERO.compareTo(splitRatio) >= 0
|| record.getSplit_ratio().compareTo(new BigDecimal(100)) >= 0) {
// 自动计算商家分成比例
splitRatio = shopBaseStoreCategoryService.getStoreCategoryRatio(record.getBiz_category());
if (splitRatio == null || splitRatio.compareTo(BigDecimal.ZERO) <= 0) {
splitRatio = new BigDecimal(94);
}
}
// 如果是驳回状态直接返回成功消息
@ -895,17 +944,12 @@ public class ShopMchEntryServiceImpl extends BaseServiceImpl<ShopMchEntryMapper,
record.setApproval_status(approvalStatus);
record.setApproval_remark(approvalRemark);
record.setApproval_invalid_col(approvalInvalidCol);
record.setSplit_ratio(splitRatio);
record.setUpdated_by(userId);
record.setSettlement_method(1); // 结算类型0-秒到不分账1-次日结算需要分账
record.setSplit_ratio(splitRatio);
// 转换拉卡拉的日期格式 yyyy-MM-dd
record = convLklDateFormat(record);
// if (record.getSettlement_method() == null
// || record.getSettlement_method() < 0
// || record.getSettlement_method() > 1) {
record.setSettlement_method(1); // 结算类型0-秒到不分账1-次日结算需要分账
// }
// 执行更新操作
if (!updateById(record)) {
@ -915,6 +959,7 @@ public class ShopMchEntryServiceImpl extends BaseServiceImpl<ShopMchEntryMapper,
// 如果是驳回状态直接返回成功消息
if (approvalStatus.equals(CommonConstant.MCH_APPR_STA_NOPASS)) {
log.info("商家入驻审批驳回成功mchId={}", mchId);
return CommonResult.success(null, "驳回成功!");
}
@ -923,6 +968,7 @@ public class ShopMchEntryServiceImpl extends BaseServiceImpl<ShopMchEntryMapper,
// 平台人工审核通过后触发去拉卡拉商家入网电子合同签署
// 下一步商家入网电子合同签署完毕后收到异步通知触发拉卡拉商家进件重要环节
try {
log.debug("开始调用拉卡拉电子合同签署申请mchId={}", mchId);
Pair<Boolean, String> resultPair = lakalaApiService.applyLedgerMerEc(mchId);
if (!resultPair.getFirst()) {
log.warn("拉卡拉电子合同签署申请失败: {}", resultPair.getSecond());
@ -935,6 +981,7 @@ public class ShopMchEntryServiceImpl extends BaseServiceImpl<ShopMchEntryMapper,
return CommonResult.failed("系统处理审批出错,请联系管理员!");
}
log.info("商家入驻平台初步审批处理完成mchId={}", mchId);
// E签宝暂时停止使用
// if (approvalStatus.equals(CommonConstant.Enable)) {
@ -959,6 +1006,7 @@ public class ShopMchEntryServiceImpl extends BaseServiceImpl<ShopMchEntryMapper,
return CommonResult.success();
}
/**
* 检查商家是否能申请入驻
* 根据入驻主体类型企业或个人使用不同的判断条件
@ -1752,10 +1800,14 @@ public class ShopMchEntryServiceImpl extends BaseServiceImpl<ShopMchEntryMapper,
approvalRemark = "合同签署完成,商家信息正在提交审核,请耐心等待";
} else if (CommonConstant.Enable.equals(hasApplyMerchant)) {
approvalRemark = "商家资质审核通过,系统正在提交分账业务申请,请耐心等待";
} else if (CommonConstant.Enable.equals(hasApplySplit)) {
approvalRemark = "提交分账业务申请已通过,系统正在申请分账接收方事宜";
} else if (CommonConstant.Enable.equals(hasApplyReceiver)) {
approvalRemark = "分账接收方申请成功,系统正在处理接收方绑定";
if (CommonConstant.Enable.equals(hasApplySplit)) {
approvalRemark = "分账接收方申请成功,系统正在处理接收方绑定事宜";
} else {
approvalRemark = "分账接收方申请成功,系统正在处理分账业务申请事宜";
}
} else if (CommonConstant.Enable.equals(hasApplySplit)) {
approvalRemark = "提交分账业务申请已通过,系统正在处理接收方绑定事宜";
} else if (CommonConstant.Enable.equals(hasBindReceiver)) {
approvalRemark = "分账接收方绑定成功,系统准备创建初始化店铺";
} else if (CommonConstant.Enable.equals(storeStatus)) {