diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisTmsSiteBatchServiceImpl.java b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisTmsSiteBatchServiceImpl.java index 902b73f4d..2cfb1a918 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisTmsSiteBatchServiceImpl.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisTmsSiteBatchServiceImpl.java @@ -11,6 +11,7 @@ package com.xdadan.erp.emis.service.impl; import java.math.BigDecimal; +import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; import java.util.ArrayList; @@ -444,6 +445,36 @@ public class EmisTmsSiteBatchServiceImpl extends EmisBaseService implements IEmi if (CollectionUtil.isEmpty(filterList)) { throw new EmisBizError(EmisBizErrorType.FAIL, emisWaybill.getBillCode() + "组批次起始网点、下一网点、供应商与规则不匹配"); } + // 过滤有效期内的规则 + Date etd = oldSiteBatch.getEtd(); + if (etd != null) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + List validRanges = filterList.stream().map(i -> { + Date startDate = i.getStartDate(); + Date endDate = i.getEndDate(); + if (startDate == null || endDate == null) { + return null; + } + return sdf.format(startDate) + "~" + sdf.format(endDate); + }).filter(StringUtils::isNotBlank).distinct().collect(Collectors.toList()); + filterList = filterList.stream() + .filter(i -> { + Date startDate = i.getStartDate(); + Date endDate = i.getEndDate(); + if (startDate == null || endDate == null) { + return false; + } + // 判断etd是否在有效期内:startDate <= etd < endDate + return !etd.before(startDate) && etd.before(endDate); + }) + .collect(Collectors.toList()); + if (CollectionUtil.isEmpty(filterList)) { + String rangeMsg = CollectionUtil.isEmpty(validRanges) ? "暂无可用时间范围" + : String.join(",", validRanges); + throw new EmisBizError(EmisBizErrorType.FAIL, + emisWaybill.getBillCode() + "组批次发出时间不在规则有效期内(规则时间范围:" + rangeMsg + "),请选择正确的时间或联系it处理"); + } + } return list; }