单据日期增加校验
This commit is contained in:
parent
69392ee61c
commit
485f13a907
|
@ -0,0 +1,104 @@
|
||||||
|
package nc.impl.bd.material.baseinfo;
|
||||||
|
|
||||||
|
import nc.bs.businessevent.IBusinessEvent;
|
||||||
|
import nc.bs.businessevent.IBusinessListener;
|
||||||
|
import nc.bs.businessevent.bd.BDCommonEvent;
|
||||||
|
import nc.bs.ic.general.businessevent.ICGeneralCommonEvent;
|
||||||
|
import nc.vo.ic.m45.entity.PurchaseInBodyVO;
|
||||||
|
import nc.vo.ic.m45.entity.PurchaseInHeadVO;
|
||||||
|
import nc.vo.ic.m45.entity.PurchaseInVO;
|
||||||
|
import nc.vo.ic.m4c.entity.SaleOutVO;
|
||||||
|
import nc.vo.ic.m4d.entity.MaterialOutVO;
|
||||||
|
import nc.vo.pub.AggregatedValueObject;
|
||||||
|
import nc.vo.pub.BusinessException;
|
||||||
|
import nc.vo.pub.lang.UFDate;
|
||||||
|
|
||||||
|
import java.util.Calendar;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
public class BillDateCheckListener implements IBusinessListener {
|
||||||
|
|
||||||
|
public void doAction(IBusinessEvent event) throws BusinessException {
|
||||||
|
ICGeneralCommonEvent.ICGeneralCommonUserObj obj = (ICGeneralCommonEvent.ICGeneralCommonUserObj)event.getUserObject();
|
||||||
|
AggregatedValueObject[] newBillVOs = (AggregatedValueObject[])obj.getNewObjects();
|
||||||
|
if (newBillVOs == null) {
|
||||||
|
newBillVOs = (AggregatedValueObject[])obj.getOldObjects();
|
||||||
|
}
|
||||||
|
// AggregatedValueObject[] oldBillVOs = (AggregatedValueObject[])obj.getOldObjects();
|
||||||
|
//检查日期是否符合 每月24日后在系统做单据的时候,对未改系统日期到次月1日制单的情况,增加提示来提醒更改单据日期,否则无法保存,更改的日期不能超过当月24日后10天。
|
||||||
|
// "1001".equals(event.getEventType())
|
||||||
|
for(int i = 0; i < newBillVOs.length; ++i) {
|
||||||
|
Object newObj = newBillVOs[i];
|
||||||
|
if (newObj instanceof PurchaseInVO) {
|
||||||
|
PurchaseInVO newVO = (PurchaseInVO)newObj;
|
||||||
|
UFDate billDate = newVO.getHead().getDbilldate();
|
||||||
|
|
||||||
|
Date currentDate = new Date();
|
||||||
|
Date billDateObj = billDate.toDate();
|
||||||
|
if (!this.validateBillDate(billDateObj,currentDate)) {
|
||||||
|
throw new BusinessException("当前日期已过当月24号,必须在下月制单且单据日期必须超过当月24号后10天");
|
||||||
|
}
|
||||||
|
}else if(newObj instanceof SaleOutVO){
|
||||||
|
SaleOutVO newVO = (SaleOutVO)newObj;
|
||||||
|
UFDate billDate = newVO.getHead().getDbilldate();
|
||||||
|
|
||||||
|
// Date currentDate = new Date(2025,6,25);
|
||||||
|
Date currentDate = new Date();
|
||||||
|
Date billDateObj = billDate.toDate();
|
||||||
|
|
||||||
|
if (!this.validateBillDate(billDateObj,currentDate)) {
|
||||||
|
throw new BusinessException("当前日期已过当月24号,必须在下月制单且单据日期必须超过当月24号后10天");
|
||||||
|
}
|
||||||
|
|
||||||
|
}else if(newObj instanceof MaterialOutVO){
|
||||||
|
MaterialOutVO newVO = (MaterialOutVO)newObj;
|
||||||
|
UFDate billDate = newVO.getHead().getDbilldate();
|
||||||
|
|
||||||
|
Date currentDate = new Date();
|
||||||
|
Date billDateObj = billDate.toDate();
|
||||||
|
if (!this.validateBillDate(billDateObj,currentDate)) {
|
||||||
|
throw new BusinessException("当前日期已过当月24号,必须在下月制单且单据日期必须超过当月24号后10天");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public boolean validateBillDate(Date billDateObj, Date currentDate) {
|
||||||
|
Calendar currentCal = Calendar.getInstance();
|
||||||
|
currentCal.setTime(currentDate);
|
||||||
|
|
||||||
|
Calendar billCal = Calendar.getInstance();
|
||||||
|
billCal.setTime(billDateObj);
|
||||||
|
|
||||||
|
// 获取当前日期的月份和日
|
||||||
|
int currentDay = currentCal.get(Calendar.DAY_OF_MONTH);
|
||||||
|
int currentMonth = currentCal.get(Calendar.MONTH);
|
||||||
|
int currentYear = currentCal.get(Calendar.YEAR);
|
||||||
|
|
||||||
|
// 只有当当前日期是25号到月底时才需要校验
|
||||||
|
if (currentDay >= 15) {
|
||||||
|
// 1. 计算本月24号+10天的最大允许日期
|
||||||
|
Calendar maxDateCal = Calendar.getInstance();
|
||||||
|
maxDateCal.set(currentYear, currentMonth, 24); // 本月24号
|
||||||
|
maxDateCal.add(Calendar.DATE, 10); // 24号+10天
|
||||||
|
|
||||||
|
// 2. 计算下个月1号的最小允许日期
|
||||||
|
Calendar minDateCal = Calendar.getInstance();
|
||||||
|
minDateCal.set(currentYear, currentMonth, 1); // 本月1号
|
||||||
|
minDateCal.add(Calendar.MONTH, 1); // 下个月1号
|
||||||
|
|
||||||
|
// 3. 检查单据日期是否在下个月范围内
|
||||||
|
boolean isNextMonth = billCal.get(Calendar.MONTH) == minDateCal.get(Calendar.MONTH) &&
|
||||||
|
billCal.get(Calendar.YEAR) == minDateCal.get(Calendar.YEAR);
|
||||||
|
|
||||||
|
// 4. 检查单据日期是否在允许范围内(下个月1号 至 本月24号+10天)
|
||||||
|
if (!isNextMonth || billCal.after(maxDateCal) || billCal.before(minDateCal)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue