From 003e1b8d868e21583eaa85ee5d6b7e622cdc2040 Mon Sep 17 00:00:00 2001 From: Jack <46790855@qq.com> Date: Fri, 20 Jun 2025 16:54:24 +0800 Subject: [PATCH] =?UTF-8?q?=E5=95=86=E5=AE=B6=E5=85=A5=E9=A9=BB=EF=BC=8C?= =?UTF-8?q?=E6=96=B9=E6=B3=95=E4=BC=98=E5=8C=96=EF=BC=8C=20fix=20bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mall/common/utils/DateTimeUtils.java | 113 +++++++++++++++++- .../mall/common/utils/StringUtils.java | 2 +- .../controller/mobile/LakalaController.java | 4 +- .../lakala/service/impl/LklTkServiceImpl.java | 8 ++ .../service/impl/ShopMchEntryServiceImpl.java | 98 +++++++++++++-- 5 files changed, 209 insertions(+), 16 deletions(-) diff --git a/mall-common/src/main/java/com/suisung/mall/common/utils/DateTimeUtils.java b/mall-common/src/main/java/com/suisung/mall/common/utils/DateTimeUtils.java index a8c6ffab..3c725754 100644 --- a/mall-common/src/main/java/com/suisung/mall/common/utils/DateTimeUtils.java +++ b/mall-common/src/main/java/com/suisung/mall/common/utils/DateTimeUtils.java @@ -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(无效日期) + } } diff --git a/mall-common/src/main/java/com/suisung/mall/common/utils/StringUtils.java b/mall-common/src/main/java/com/suisung/mall/common/utils/StringUtils.java index 31fa3e85..5fe683bb 100644 --- a/mall-common/src/main/java/com/suisung/mall/common/utils/StringUtils.java +++ b/mall-common/src/main/java/com/suisung/mall/common/utils/StringUtils.java @@ -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) { diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/controller/mobile/LakalaController.java b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/controller/mobile/LakalaController.java index 555b3a42..3935e8f8 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/controller/mobile/LakalaController.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/controller/mobile/LakalaController.java @@ -53,8 +53,8 @@ public class LakalaController extends BaseControllerImpl { // return ""; List tags = new ArrayList<>(); - tags.add("纯净水"); - tags.add("放心"); +// tags.add("纯净水"); +// tags.add("放心"); return libraryProductService.matchLibraryProducts(paramsJSON.getStr("barcode"), paramsJSON.getStr("productName"), tags); } 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 e64e38e5..738c7f5c 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 @@ -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()); } diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopMchEntryServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopMchEntryServiceImpl.java index b2ecc50c..af85b5ce 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopMchEntryServiceImpl.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopMchEntryServiceImpl.java @@ -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