diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/service/EmisBaseService.java b/emis-biz/src/main/java/com/xdadan/erp/emis/service/EmisBaseService.java index 9fddaf1bd..86d8479a7 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/service/EmisBaseService.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/service/EmisBaseService.java @@ -33,6 +33,7 @@ package com.xdadan.erp.emis.service; import com.xdadan.erp.system.service.ISysConfigService; import com.xdadan.erp.system.service.ISysNoticeService; import com.xdadan.erp.system.service.ISysUserService; + import jodd.util.StringUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.MapUtils; import org.apache.commons.lang3.StringUtils; @@ -46,6 +47,9 @@ package com.xdadan.erp.emis.service; import java.text.ParseException; import java.text.SimpleDateFormat; import java.time.Instant; + import java.time.LocalDate; + import java.time.ZoneId; + import java.time.format.DateTimeParseException; import java.time.temporal.ChronoUnit; import java.util.*; import java.util.stream.Collectors; @@ -4050,6 +4054,40 @@ public class EmisBaseService { return copy; } + /** + * 检查月结客户首次签约日期,首次签约之前开的不允许修改 + * + * @param emisWaybillOld + * @throws EmisBizError + */ + protected void checkFirstSigningDay(EmisWaybill emisWaybillOld) throws EmisBizError { + if (emisWaybillOld == null || emisWaybillOld.getOrderDate() == null || StringUtil.isBlank(emisWaybillOld.getCustNo())) { + return; + } + + EmisCustomerUser emisCustomerUser = emisCustomerUserMapper + .selectMonthCustomerByMonthlyPayCode(emisWaybillOld.getCustNo()); + if (emisCustomerUser == null || StringUtil.isBlank(emisCustomerUser.getFirstSigningDay())) { + return; + } + + try { + LocalDate firstSigningDate = LocalDate.parse(emisCustomerUser.getFirstSigningDay()); + LocalDate orderDate = emisWaybillOld.getOrderDate().toInstant() + .atZone(ZoneId.systemDefault()) + .toLocalDate(); + + if (orderDate.isBefore(firstSigningDate)) { + throw new EmisBizError(EmisBizErrorType.PARAM_ERROR, + String.format("运单日期(%s)不能早于客户首次签约日期(%s)", + orderDate, firstSigningDate)); + } + } catch (DateTimeParseException e) { + log.error("客户首次签约日期格式错误: {}", emisCustomerUser.getFirstSigningDay(), e); + throw new EmisBizError(EmisBizErrorType.PARAM_ERROR, "客户首次签约日期格式错误"); + } + } + public static void main(String[] args) throws ParseException { // Date startDate = new Date("202"); Date startDate= new SimpleDateFormat("yyyy-MM-dd").parse("2025-05-11");