商家入驻,方法优化, fix bug

This commit is contained in:
Jack 2025-06-20 16:54:24 +08:00
parent 83792e4222
commit 003e1b8d86
5 changed files with 209 additions and 16 deletions

View File

@ -4,9 +4,13 @@ import lombok.extern.slf4j.Slf4j;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.DateTimeException;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
import java.time.temporal.ChronoField;
import java.util.Calendar;
import java.util.Date;
@ -23,7 +27,6 @@ public class DateTimeUtils {
return zonedDateTime.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME);
}
public static Date parseDate(String dateString, String pattern) {
SimpleDateFormat format = new SimpleDateFormat(pattern);
try {
@ -37,4 +40,112 @@ public class DateTimeUtils {
return calendar.getTime();
}
}
/**
* 将多种日期格式转换为 yyyy-MM-dd
* 支持格式
* - yyyy.MM.dd / yyyy/MM/dd / yyyy年MM月dd日
* - yyyy.M.d / yyyy/M/d / yyyy年M月d日
* - yy.MM.dd / yy.M.d
* 特殊值空值"长期""永久" 转9999-12-31
*/
public static String convertLklDate(String dateStr) {
String DEFAULT_FUTURE_DATE = "9999-12-31";
if (dateStr == null || dateStr.trim().isEmpty()) {
return DEFAULT_FUTURE_DATE;
}
dateStr = dateStr.trim();
// 处理特殊值
if ("长期".equals(dateStr) || "永久".equals(dateStr)) {
return DEFAULT_FUTURE_DATE;
}
int length = dateStr.length();
// 快速判断格式并解析
try {
// 中文格式yyyy年MM月dd日 yyyy年M月d日
if (dateStr.contains("")) {
if (length >= 10) {
return LocalDate.parse(dateStr,
DateTimeFormatter.ofPattern("yyyy年MM月dd日")).toString();
} else {
return LocalDate.parse(dateStr,
new DateTimeFormatterBuilder()
.appendPattern("yyyy'年'M'月'd'日'")
.parseDefaulting(ChronoField.MONTH_OF_YEAR, 1)
.parseDefaulting(ChronoField.DAY_OF_MONTH, 1)
.toFormatter()).toString();
}
}
// 检查分隔符
char separator = ' ';
if (dateStr.contains(".")) {
separator = '.';
} else if (dateStr.contains("/")) {
separator = '/';
} else {
return DEFAULT_FUTURE_DATE; // 无效格式
}
// 判断年份位数
boolean isFourDigitYear = length >= 4 &&
Character.isDigit(dateStr.charAt(0)) &&
Character.isDigit(dateStr.charAt(1)) &&
Character.isDigit(dateStr.charAt(2)) &&
Character.isDigit(dateStr.charAt(3));
// 4位年份格式
if (isFourDigitYear) {
if (length >= 10) {
return LocalDate.parse(dateStr,
DateTimeFormatter.ofPattern("yyyy" + separator + "MM" + separator + "dd")).toString();
} else {
return LocalDate.parse(dateStr,
new DateTimeFormatterBuilder()
.appendPattern("yyyy" + separator + "M" + separator + "d")
.parseDefaulting(ChronoField.MONTH_OF_YEAR, 1)
.parseDefaulting(ChronoField.DAY_OF_MONTH, 1)
.toFormatter()).toString();
}
}
// 2位年份格式
else {
if (length >= 8) {
return LocalDate.parse(dateStr,
new DateTimeFormatterBuilder()
.appendValueReduced(ChronoField.YEAR, 2, 2, 2000)
.appendPattern("." + "MM" + "." + "dd")
.toFormatter()).toString();
} else {
return LocalDate.parse(dateStr,
new DateTimeFormatterBuilder()
.appendValueReduced(ChronoField.YEAR, 2, 2, 2000)
.appendPattern(separator + "M" + separator + "d")
.parseDefaulting(ChronoField.MONTH_OF_YEAR, 1)
.parseDefaulting(ChronoField.DAY_OF_MONTH, 1)
.toFormatter()).toString();
}
}
} catch (DateTimeException e) {
// 解析失败返回默认值
return DEFAULT_FUTURE_DATE;
}
}
public static void main(String[] args) {
System.out.println(convertLklDate("2025.01.02")); // 2025-01-02
System.out.println(convertLklDate("2025/1/2")); // 2025-01-02
System.out.println(convertLklDate("2025年1月2日")); // 2025-01-02
System.out.println(convertLklDate("25.1.2")); // 2025-01-02
System.out.println(convertLklDate("25.01.02")); // 2025-01-02
System.out.println(convertLklDate("长期")); // 9999-12-31
System.out.println(convertLklDate(null)); // 9999-12-31
System.out.println(convertLklDate("2025.2.30")); // 9999-12-31无效日期
}
}

View File

@ -63,7 +63,7 @@ public final class StringUtils extends org.apache.commons.lang3.StringUtils {
public static void main(String[] args) {
// System.out.println(removeProvinceCityDistrict("广西壮族自治区贵港市桂平市西山镇新安街粤桂花城1102号"));
System.out.println(verifyBusinessLicense("99365484C3GKUAU964"));
System.out.println(validateIDCard("45088119970105771X"));
}
public static String encode(String str) {

View File

@ -53,8 +53,8 @@ public class LakalaController extends BaseControllerImpl {
// return "";
List<String> tags = new ArrayList<>();
tags.add("纯净水");
tags.add("放心");
// tags.add("纯净水");
// tags.add("放心");
return libraryProductService.matchLibraryProducts(paramsJSON.getStr("barcode"), paramsJSON.getStr("productName"), tags);
}

View File

@ -516,6 +516,9 @@ public class LklTkServiceImpl {
logger.debug("进件返回结果:{}", respBody);
if (response.getStatusCode() != HttpStatus.OK && ObjectUtil.isNotEmpty(respBody)) {
String errMsg = respBody.getStr("message") == null ? "未知错误" : respBody.getStr("message");
shopMchEntryService.updateMerchEntryApprovalByMchId(shopMchEntry.getId(), "", CommonConstant.MCH_APPR_STA_LKL_NOPASS, "进件失败:" + errMsg);
return Pair.of(false, "进件失败:" + errMsg);
}
@ -524,11 +527,16 @@ public class LklTkServiceImpl {
// 表中的内部外部商户号暂时都传同一个内部商户号以便异步通知更改记录
Boolean success = shopMchEntryService.updateMerchEntryLklMerCupNo(mchMobile, CommonConstant.Disable2, lklMerInnerNo, lklMerInnerNo, formData.toString(), respBody.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());
}

View File

@ -21,6 +21,7 @@ import com.suisung.mall.common.api.CommonResult;
import com.suisung.mall.common.constant.CommonConstant;
import com.suisung.mall.common.modules.store.ShopMchEntry;
import com.suisung.mall.common.utils.BankUtil;
import com.suisung.mall.common.utils.DateTimeUtils;
import com.suisung.mall.common.utils.StringUtils;
import com.suisung.mall.common.utils.phone.PhoneNumberUtils;
import com.suisung.mall.core.web.service.impl.BaseServiceImpl;
@ -249,7 +250,6 @@ public class ShopMchEntryServiceImpl extends BaseServiceImpl<ShopMchEntryMapper,
return CommonResult.failed("店铺名已被使用!");
}
// 营业执照经营范围内容
if (ObjectUtil.isEmpty(record.getSales_info())) {
record.setSales_info(record.getBiz_license_content());
@ -262,6 +262,10 @@ public class ShopMchEntryServiceImpl extends BaseServiceImpl<ShopMchEntryMapper,
record.setApproval_status(CommonConstant.MCH_APPR_STA_PADDING);
record.setApproval_remark("您的申请入驻平台材料已提交,待审中,请耐心等待!");
record.setStatus(CommonConstant.Enable);
// 转换拉卡拉的日期格式 yyyy-MM-dd
record = convLklDateFormat(record);
if (!add(record)) {
return CommonResult.failed("入驻信息提交失败!");
}
@ -321,7 +325,7 @@ public class ShopMchEntryServiceImpl extends BaseServiceImpl<ShopMchEntryMapper,
Boolean isQy = true;
// 检查企业法人或个人的营业执照或身份证
if (ObjectUtil.isNotEmpty(oldRecord.getEntity_type()) && oldRecord.getEntity_type().equals(2)) {
if (ObjectUtil.isNotEmpty(oldRecord.getEntity_type()) && !oldRecord.getEntity_type().equals(CommonConstant.MCH_ENTITY_TYPE_QY)) {
// 个人
// if (StrUtil.isBlank(record.getIndividual_id_number()) || StrUtil.isBlank(record.getIndividual_id_images()) || StrUtil.isBlank(record.getIndividual_id_images2())) {
// return CommonResult.failed("缺少个人身份证信息!");
@ -385,8 +389,12 @@ public class ShopMchEntryServiceImpl extends BaseServiceImpl<ShopMchEntryMapper,
record.setApproval_invalid_col("[]"); // 清除历史审核无效字段
record.setUpdated_by(userId);
record.setUpdated_at(new Date());
record.setStatus(CommonConstant.Enable);
record.setSigned_status(CommonConstant.CONTRACT_SIGN_STA_ING); // 重置合同签署状态
// 重置审核状态合同等相关字段
record = resetAuditColumns(record);
// 转换拉卡拉的日期格式 yyyy-MM-dd
record = convLklDateFormat(record);
if (!updateById(record)) {
return CommonResult.failed("重新申请入驻提交失败!");
}
@ -404,6 +412,61 @@ public class ShopMchEntryServiceImpl extends BaseServiceImpl<ShopMchEntryMapper,
return CommonResult.success();
}
/**
* 驳回或重新申请入驻时重置入驻申请的合同信息
*
* @param record
* @return
*/
private ShopMchEntry resetAuditColumns(ShopMchEntry record) {
if (record == null) {
return null;
}
record.setStatus(CommonConstant.Enable);
record.setSigned_status(CommonConstant.CONTRACT_SIGN_STA_ING); // 重置合同签署状态
record.setApproval_status(CommonConstant.MCH_APPR_STA_PADDING);
record.setApproval_remark("");
record.setLkl_ec_file_path("");
record.setLkl_ec_name("");
record.setLkl_ec_no("");
record.setLkl_ec_result_url("");
record.setApproval_invalid_col("[]");
record.setHas_ec_signed(CommonConstant.Disable2);
return record;
}
/**
* 转换拉卡拉的日期格式 yyyy-MM-dd
*
* @param record
* @return
*/
private ShopMchEntry convLklDateFormat(ShopMchEntry record) {
if (record == null) {
return null;
}
if (CommonConstant.MCH_ENTITY_TYPE_QY.equals(record.getEntity_type())) {
if (StrUtil.isNotBlank(record.getBiz_license_period_begin())) {
record.setBiz_license_period_begin(DateTimeUtils.convertLklDate(record.getBiz_license_period_begin()));
}
record.setBiz_license_period_end(DateTimeUtils.convertLklDate(record.getBiz_license_period_end()));
if (StrUtil.isNotBlank(record.getLegal_person_id_period_begin())) {
record.setLegal_person_id_period_begin(DateTimeUtils.convertLklDate(record.getLegal_person_id_period_begin()));
}
record.setLegal_person_id_period_end(DateTimeUtils.convertLklDate(record.getLegal_person_id_period_end()));
} else {
if (StrUtil.isNotBlank(record.getIndividual_id_period_begin())) {
record.setIndividual_id_period_begin(DateTimeUtils.convertLklDate(record.getIndividual_id_period_begin()));
}
record.setIndividual_id_period_end(DateTimeUtils.convertLklDate(record.getIndividual_id_period_end()));
}
return record;
}
/**
* 商家入驻申请列表
*
@ -573,6 +636,12 @@ public class ShopMchEntryServiceImpl extends BaseServiceImpl<ShopMchEntryMapper,
approvalInvalidCol = "[]";
}
// 如果是驳回状态直接返回成功消息
if (approvalStatus.equals(CommonConstant.MCH_APPR_STA_NOPASS)) {
// 重置审核状态合同等相关字段
record = resetAuditColumns(record);
}
// 自动计算商家分成比例
BigDecimal splitRatio = shopBaseStoreCategoryService.getStoreCategoryRatio(record.getBiz_category());
@ -580,16 +649,21 @@ public class ShopMchEntryServiceImpl extends BaseServiceImpl<ShopMchEntryMapper,
splitRatio = new BigDecimal("100");
}
// 构建更新参数
updateWrapper
.set("approval_status", approvalStatus)
.set("approval_remark", approvalRemark)
.set("split_ratio", splitRatio)
.set("approval_invalid_col", approvalInvalidCol)
.set("updated_by", userId);
record.setApproval_status(approvalStatus);
record.setApproval_remark(approvalRemark);
record.setSplit_ratio(splitRatio);
record.setUpdated_by(userId);
// // 构建更新参数
// updateWrapper
// .set("approval_status", approvalStatus)
// .set("approval_remark", approvalRemark)
// .set("split_ratio", splitRatio)
// .set("approval_invalid_col", approvalInvalidCol)
// .set("updated_by", userId);
// 执行更新操作
if (!update(updateWrapper)) {
if (!updateById(record)) {
log.error("系统处理审批出错请联系管理员当前记录ID: {}", id);
return CommonResult.failed("系统处理审批出错,请联系管理员!");
}