Browse Source

早于今天说明物料已过期,必须拦住

master
han\hanst 5 days ago
parent
commit
0225c724e4
  1. 48
      src/main/java/com/gaotao/modules/po/service/impl/PoServiceImpl.java
  2. 3
      src/main/resources/i18n/messages_en_US.properties
  3. 3
      src/main/resources/i18n/messages_zh_CN.properties

48
src/main/java/com/gaotao/modules/po/service/impl/PoServiceImpl.java

@ -322,21 +322,37 @@ public class PoServiceImpl extends ServiceImpl<PoMapper, PurchaseOrder> implemen
handlingUnit.setBatchNo(inData.getBatchNo());
handlingUnit.setLocationId(inData.getLocationNo());
handlingUnit.setWarehouseId(transHeader.getWarehouseId());
// 记下参与计算的基准日,过期时报错要告诉用户是供应商生产日期还是到达日期导致的
String expiryBaseName = null;
Date expiryBaseDate = null;
if (shelfLife==null || shelfLife==0) {
handlingUnit.setExpiredDate(null);
} else if (inData.getManufactureDate() != null) {
// 如果有制造日期,计算失效日期
} else if (inData.getSupplierManufactureDate() != null) {
// 有供应商生产日期时优先用它推算,页面字段同名
expiryBaseName = i18n.text("purchase.po.expiryBaseSupplierManufactureDate");
expiryBaseDate = inData.getSupplierManufactureDate();
java.util.Calendar calendar = java.util.Calendar.getInstance();
calendar.setTime(inData.getManufactureDate());
calendar.setTime(expiryBaseDate);
calendar.add(java.util.Calendar.DAY_OF_YEAR, shelfLife);
handlingUnit.setExpiredDate(calendar.getTime());
} else if (inData.getArrivalDate() != null) {
// 如果制造日期,但有接收日期,尝试用接收日期计算
// 没有供应商生产日期才退回到达日期,避免两套基准日同时参与计算
expiryBaseName = i18n.text("purchase.po.expiryBaseArrivalDate");
expiryBaseDate = inData.getArrivalDate();
java.util.Calendar calendar = java.util.Calendar.getInstance();
calendar.setTime(inData.getArrivalDate());
calendar.setTime(expiryBaseDate);
calendar.add(java.util.Calendar.DAY_OF_YEAR, shelfLife);
handlingUnit.setExpiredDate(calendar.getTime());
}
// 按自然日比较:当天仍可入库,早于今天说明物料已过期,必须拦住,避免过期料进入库存
if (isBeforeToday(handlingUnit.getExpiredDate())) {
String expiredDateText = DateUtils.format(handlingUnit.getExpiredDate(), DateUtils.DATE_PATTERN);
String baseDateText = DateUtils.format(expiryBaseDate, DateUtils.DATE_PATTERN);
log.warn("采购入库失效日期早于当前日期,拒绝入库,poNo={}, partNo={}, baseDateName={}, baseDate={}, shelfLife={}, expiredDate={}",
inData.getPoNo(), inData.getPartNo(), expiryBaseName, baseDateText, shelfLife, expiredDateText);
throw new XJException(i18n.text("purchase.po.expiredDateBeforeToday",
expiryBaseName, baseDateText, shelfLife, expiredDateText));
}
handlingUnit.setWdr(inData.getWdr()!=null?inData.getWdr():"*");
handlingUnit.setStatus("ACTIVE");
handlingUnit.setStatusDb("ACTIVE");
@ -584,6 +600,28 @@ public class PoServiceImpl extends ServiceImpl<PoMapper, PurchaseOrder> implemen
);
}
/**
* 失效日期早于今天则视为已过期。只比较自然日,当天不算过期。
*/
private boolean isBeforeToday(Date expiredDate) {
if (expiredDate == null) {
return false;
}
Calendar expired = Calendar.getInstance();
expired.setTime(expiredDate);
expired.set(Calendar.HOUR_OF_DAY, 0);
expired.set(Calendar.MINUTE, 0);
expired.set(Calendar.SECOND, 0);
expired.set(Calendar.MILLISECOND, 0);
Calendar today = Calendar.getInstance();
today.set(Calendar.HOUR_OF_DAY, 0);
today.set(Calendar.MINUTE, 0);
today.set(Calendar.SECOND, 0);
today.set(Calendar.MILLISECOND, 0);
return expired.before(today);
}
private Date calculateExpiryDate(Date baseDate, Integer shelfLife) {
if (baseDate == null || shelfLife == null || shelfLife <= 0) {
return null;

3
src/main/resources/i18n/messages_en_US.properties

@ -216,6 +216,9 @@ purchase.po.orderNotFound=No matching purchase order was found
purchase.po.orderLineNotFound=No matching purchase order lines were found
purchase.po.getPoListFailedWithDetail=Failed to get PO list: {0}
purchase.po.shelfLifeMissing=Please contact engineering to maintain product shelf life
purchase.po.expiryBaseSupplierManufactureDate=supplier manufacture date
purchase.po.expiryBaseArrivalDate=arrival date
purchase.po.expiredDateBeforeToday=Expiry date {3}, calculated from {0} {1} plus a shelf life of {2} days, is earlier than today and cannot be received
purchase.po.receiptFailedWithDetail=Purchase receipt failed: {0}
purchase.po.labelSaveReturnedFalseWithUnitId=Label save failed (save returned false): {0}
purchase.po.labelSaveValidationFailedWithUnitId=Label save failed (validation check failed): {0}

3
src/main/resources/i18n/messages_zh_CN.properties

@ -216,6 +216,9 @@ purchase.po.orderNotFound=未找到对应的采购订单
purchase.po.orderLineNotFound=未找到对应的采购订单行
purchase.po.getPoListFailedWithDetail=获取PO列表失败: {0}
purchase.po.shelfLifeMissing=请联系工程维护产品有效期!
purchase.po.expiryBaseSupplierManufactureDate=供应商生产日期
purchase.po.expiryBaseArrivalDate=到达日期
purchase.po.expiredDateBeforeToday=根据{0}{1}加有效期{2}天计算出的失效日期{3}早于当前日期,不能入库
purchase.po.receiptFailedWithDetail=采购入库失败: {0}
purchase.po.labelSaveReturnedFalseWithUnitId=标签保存失败(save返回false): {0}
purchase.po.labelSaveValidationFailedWithUnitId=标签保存失败(验证未通过): {0}

Loading…
Cancel
Save