销售订单客户与收款单客户不一致取消校验
This commit is contained in:
		
							parent
							
								
									eb6e775cbc
								
							
						
					
					
						commit
						3560f064b2
					
				|  | @ -0,0 +1,377 @@ | |||
| // | ||||
| // Source code recreated from a .class file by IntelliJ IDEA | ||||
| // (powered by FernFlower decompiler) | ||||
| // | ||||
| 
 | ||||
| package nc.bs.arap.actions; | ||||
| 
 | ||||
| import java.util.ArrayList; | ||||
| import java.util.HashMap; | ||||
| import java.util.List; | ||||
| import java.util.Map; | ||||
| import java.util.Objects; | ||||
| import nc.bs.arap.bill.ArapBillPubUtil; | ||||
| import nc.bs.arap.billact.IValidatorFactory; | ||||
| import nc.bs.arap.billact.UpdateBatchBSAction; | ||||
| import nc.bs.arap.busireg.ArapBillUpdateChecker; | ||||
| import nc.bs.arap.busireg.BillUpdateChecker; | ||||
| import nc.bs.arap.util.ArapBillVOUtils; | ||||
| import nc.bs.arap.util.ArapBusiLogUtils; | ||||
| import nc.bs.arap.util.ArapVOUtils; | ||||
| import nc.bs.arap.util.BillAccountCalendarUtils; | ||||
| import nc.bs.arap.util.BillDateUtils; | ||||
| import nc.bs.arap.util.BillStatusUtils; | ||||
| import nc.bs.arap.util.BillTermUtils; | ||||
| import nc.bs.arap.validator.CrossRuleCheckValidator; | ||||
| import nc.bs.arap.validator.ValidatorFactory; | ||||
| import nc.bs.businessevent.BdUpdateEvent; | ||||
| import nc.bs.businessevent.BusinessEvent; | ||||
| import nc.bs.businessevent.EventDispatcher; | ||||
| import nc.bs.framework.common.InvocationInfoProxy; | ||||
| import nc.bs.framework.common.NCLocator; | ||||
| import nc.impl.pubapp.env.BSContext; | ||||
| import nc.itf.imag.lightbus.IImagPubService; | ||||
| import nc.md.MDBaseQueryFacade; | ||||
| import nc.md.model.IAttribute; | ||||
| import nc.md.model.IBean; | ||||
| import nc.pubitf.para.SysInitQuery; | ||||
| import nc.vo.arap.basebill.BaseAggVO; | ||||
| import nc.vo.arap.basebill.BaseBillVO; | ||||
| import nc.vo.arap.basebill.BaseItemVO; | ||||
| import nc.vo.arap.pub.ArapConstant; | ||||
| import nc.vo.arap.pub.BillEnumCollection.BillSatus; | ||||
| import nc.vo.arap.pub.BillEnumCollection.FromSystem; | ||||
| import nc.vo.arap.utils.ARAPModuleEnableUtil; | ||||
| import nc.vo.arap.utils.StringUtil; | ||||
| import nc.vo.ml.NCLangRes4VoTransl; | ||||
| import nc.vo.pub.AggregatedValueObject; | ||||
| import nc.vo.pub.BusinessException; | ||||
| import nc.vo.pub.CircularlyAccessibleValueObject; | ||||
| import nc.vo.pub.lang.UFBoolean; | ||||
| 
 | ||||
| public abstract class BillUpdateBatchBSAction extends UpdateBatchBSAction { | ||||
|     protected static int TEMP_2_TEMP = 0; | ||||
|     protected static int TEMP_2_SAVE = 1; | ||||
|     protected static int SAVE_2_TEMP = 2; | ||||
|     protected static int SAVE_2_SAVE = 3; | ||||
|     protected Map<String, Integer> childvostatmap; | ||||
| 
 | ||||
|     public BillUpdateBatchBSAction() { | ||||
|         this.validatorCode.add(77); | ||||
|         this.validatorCode.add(84); | ||||
|         this.validatorCode.add(66); | ||||
|         this.validatorCode.add(15); | ||||
|         this.validatorCode.add(8); | ||||
|         this.validatorCode.add(44); | ||||
|         this.validatorCode.add(39); | ||||
|         this.validatorCode.add(26); | ||||
|         this.validatorCode.add(49); | ||||
|         this.validatorCode.add(78); | ||||
|         this.validatorCode.add(79); | ||||
|         this.validatorCode.add(81); | ||||
|         this.childvostatmap = null; | ||||
|     } | ||||
| 
 | ||||
|     protected IValidatorFactory getValidatorFactory() { | ||||
|         ValidatorFactory vf = new ValidatorFactory(); | ||||
|         return vf; | ||||
|     } | ||||
| 
 | ||||
|     protected void doAfterFireEvent(AggregatedValueObject[] bills, AggregatedValueObject[] orginBills) throws BusinessException { | ||||
|         int updateType = this.getUpdateType(bills, orginBills); | ||||
|         if (updateType == TEMP_2_SAVE) { | ||||
|             EventDispatcher.fireEvent(new BusinessEvent((String)this.tmpMap.get("beanid"), "1002", bills)); | ||||
|         } else if (updateType == SAVE_2_TEMP) { | ||||
|             EventDispatcher.fireEvent(new BusinessEvent((String)this.tmpMap.get("beanid"), "1006", orginBills)); | ||||
|         } else if (updateType == SAVE_2_SAVE) { | ||||
|             this.afterEventSave2Save(bills, orginBills); | ||||
|         } | ||||
| 
 | ||||
|     } | ||||
| 
 | ||||
|     protected void afterEventSave2Save(AggregatedValueObject[] bills, AggregatedValueObject[] orginBills) throws BusinessException { | ||||
|         EventDispatcher.fireEvent(new BdUpdateEvent((String)this.tmpMap.get("beanid"), "1004", orginBills, bills)); | ||||
|     } | ||||
| 
 | ||||
|     protected void doBeforeFireEvent(AggregatedValueObject[] bills, AggregatedValueObject[] orginBills) throws BusinessException { | ||||
|         int updateType = this.getUpdateType(bills, orginBills); | ||||
|         ArapConstant constant = new ArapConstant(); | ||||
|         BSContext.getInstance().setSession(ArapConstant.ARAP_TBB_ACTIONNAME, constant.ARAP_NTB_EDIT_KEY); | ||||
|         if (bills != null && bills.length > 0 && ((BaseAggVO)bills[0]).isAlarmPassed()) { | ||||
|             BSContext.getInstance().setSession(ArapConstant.ARAP_TBB_FLAG, ArapConstant.ARAP_TBB_NOCHECK); | ||||
|         } | ||||
| 
 | ||||
|         if (updateType == TEMP_2_SAVE) { | ||||
|             EventDispatcher.fireEvent(new BusinessEvent((String)this.tmpMap.get("beanid"), "1005", orginBills)); | ||||
|             EventDispatcher.fireEvent(new BusinessEvent((String)this.tmpMap.get("beanid"), "1006", orginBills)); | ||||
|             EventDispatcher.fireEvent(new BusinessEvent((String)this.tmpMap.get("beanid"), "1001", bills)); | ||||
|         } else if (updateType == SAVE_2_TEMP) { | ||||
|             EventDispatcher.fireEvent(new BusinessEvent((String)this.tmpMap.get("beanid"), "1005", bills)); | ||||
|         } else if (updateType == SAVE_2_SAVE) { | ||||
|             this.beforeEventSave2Save(bills, orginBills); | ||||
|         } | ||||
| 
 | ||||
|     } | ||||
| 
 | ||||
|     protected void beforeEventSave2Save(AggregatedValueObject[] bills, AggregatedValueObject[] orginBills) throws BusinessException { | ||||
|         EventDispatcher.fireEvent(new BdUpdateEvent((String)this.tmpMap.get("beanid"), "1003", orginBills, bills)); | ||||
|     } | ||||
| 
 | ||||
|     public int getUpdateType(AggregatedValueObject[] bills, AggregatedValueObject[] orginBills) { | ||||
|         int oldStatus = ((BaseBillVO)orginBills[0].getParentVO()).getBillstatus(); | ||||
|         int newStatus = ((BaseBillVO)bills[0].getParentVO()).getBillstatus(); | ||||
|         if (oldStatus != BillSatus.TEMPEORARY.VALUE && oldStatus != BillSatus.UNCOMFIRM.VALUE) { | ||||
|             return newStatus != BillSatus.TEMPEORARY.VALUE && newStatus != BillSatus.UNCOMFIRM.VALUE ? SAVE_2_SAVE : SAVE_2_TEMP; | ||||
|         } else { | ||||
|             return newStatus != BillSatus.TEMPEORARY.VALUE && newStatus != BillSatus.UNCOMFIRM.VALUE ? TEMP_2_SAVE : TEMP_2_TEMP; | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     protected void doAfterUpdate(AggregatedValueObject[] bills, AggregatedValueObject[] orginBills) throws BusinessException { | ||||
|         BillTermUtils.dealBillTerm(bills, this.childvostatmap, orginBills); | ||||
|         BillTermUtils.retBodyTermVOS(bills); | ||||
|         ArapBusiLogUtils.insertSmartBusiLogs(ArapConstant.ARAP_ACTION_EDIT, (BaseAggVO)bills[0], (BaseAggVO)orginBills[0], ArapConstant.SYS_NAME); | ||||
| 
 | ||||
|         for(AggregatedValueObject bill : bills) { | ||||
|             if (bill.getParentVO().getAttributeValue("coordflag") != null && "1".equals(bill.getParentVO().getAttributeValue("coordflag").toString()) && ARAPModuleEnableUtil.isImagEnabled(InvocationInfoProxy.getInstance().getGroupId())) { | ||||
|                 IImagPubService imagService = (IImagPubService)NCLocator.getInstance().lookup(IImagPubService.class); | ||||
|                 imagService.updateBillNo(bill.getParentVO().getPrimaryKey(), (String)bill.getParentVO().getAttributeValue("billno")); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|     } | ||||
| 
 | ||||
|     protected void doBeforeUpdate(AggregatedValueObject[] bills, AggregatedValueObject[] orginBills) throws BusinessException { | ||||
|         ArapBillPubUtil.fillTradeTypeInfo(bills); | ||||
| 
 | ||||
|         for(AggregatedValueObject bill : bills) { | ||||
|             ArapBillPubUtil.processMoneyOnlySum(bill); | ||||
|         } | ||||
| 
 | ||||
|         ArapBillVOUtils.prepareDefaultInfo(bills, true); | ||||
|         BillDateUtils.setBillDateByNow(bills); | ||||
|         int updateType = this.getUpdateType(bills, orginBills); | ||||
| 
 | ||||
|         for(AggregatedValueObject bill : bills) { | ||||
|             bill.getParentVO().setStatus(1); | ||||
|         } | ||||
| 
 | ||||
|         if (updateType == TEMP_2_SAVE || updateType == SAVE_2_SAVE) { | ||||
|             for(AggregatedValueObject bill : bills) { | ||||
|                 for(CircularlyAccessibleValueObject item : bill.getChildrenVO()) { | ||||
|                     if (item.getStatus() != 2 && item.getStatus() != 3) { | ||||
|                         item.setStatus(1); | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         if (updateType == TEMP_2_SAVE || updateType == SAVE_2_SAVE) { | ||||
|             BillAccountCalendarUtils.setAccperiodYearMonth(bills); | ||||
|         } | ||||
| 
 | ||||
|         this.checkIsCorrdBillMoneyControl(bills, orginBills); | ||||
|         this.checkOtherSystemBill(bills, orginBills); | ||||
|         (new CrossRuleCheckValidator()).validate(bills); | ||||
|     } | ||||
| 
 | ||||
|     protected void checkOtherSystemBill(AggregatedValueObject[] bills, AggregatedValueObject[] orginBills) throws BusinessException { | ||||
|         ArapBillUpdateChecker defaultCheck = new ArapBillUpdateChecker(); | ||||
| 
 | ||||
|         try { | ||||
|             int i = 0; | ||||
| 
 | ||||
|             for(AggregatedValueObject newbill : bills) { | ||||
|                 BaseAggVO bill = (BaseAggVO)newbill; | ||||
|                 BaseAggVO oriBill = (BaseAggVO)orginBills[i++]; | ||||
|                 BaseItemVO[] vosOld = (BaseItemVO[])oriBill.getChildrenVO(); | ||||
|                 String top_billtype = vosOld[0].getTop_billtype(); | ||||
|                 List<BillUpdateChecker> executeCheckers = new ArrayList(); | ||||
|                 executeCheckers.add(defaultCheck); | ||||
|                 Map<String, List<BaseItemVO>> rowsChangeMap = this.getBillRowsChangeMap(bill, oriBill); | ||||
|                 List<BaseItemVO> addlines = (List)rowsChangeMap.get("bodyAddvos"); | ||||
|                 List<BaseItemVO> deletelines = (List)rowsChangeMap.get("bodyDeletevos"); | ||||
|                 Map<String, Map<String, Object[]>> bodyfieldchange = this.getBodyFieldValueChangeMap(bill, oriBill); | ||||
|                 Map<String, Object[]> headfieldchange = this.getHeadFieldValueChangeMap(bill, oriBill); | ||||
| 
 | ||||
|                 for(BillUpdateChecker billUpdateChecker : executeCheckers) { | ||||
|                     if (!billUpdateChecker.canUpdateBillWithoutCtrl(bill)) { | ||||
|                         if (!addlines.isEmpty()) { | ||||
|                             String errmsg = billUpdateChecker.canAddLine(top_billtype, addlines); | ||||
|                             if (!StringUtil.isEmpty(errmsg)) { | ||||
|                                 throw new BusinessException(errmsg); | ||||
|                             } | ||||
|                         } | ||||
| 
 | ||||
|                         if (!deletelines.isEmpty()) { | ||||
|                             String errmsg = billUpdateChecker.canDeleteLine(top_billtype, deletelines); | ||||
|                             if (!StringUtil.isEmpty(errmsg)) { | ||||
|                                 throw new BusinessException(errmsg); | ||||
|                             } | ||||
|                         } | ||||
| 
 | ||||
|                         if (!bodyfieldchange.isEmpty()) { | ||||
|                             String errmsg = billUpdateChecker.canUpdateBodyFieldValue(bodyfieldchange, bill, oriBill); | ||||
|                             if (!StringUtil.isEmpty(errmsg)) { | ||||
|                                 throw new BusinessException(errmsg); | ||||
|                             } | ||||
|                         } | ||||
| 
 | ||||
|                         if (!headfieldchange.isEmpty()) { | ||||
|                             String errmsg = billUpdateChecker.canUpdateHeadFieldValue(headfieldchange, bill, oriBill); | ||||
|                             if (!StringUtil.isEmpty(errmsg)) { | ||||
|                                 throw new BusinessException(errmsg); | ||||
|                             } | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
| 
 | ||||
|         } catch (BusinessException e) { | ||||
|             throw new BusinessException(e.getMessage(), e); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     private Map<String, Object[]> getHeadFieldValueChangeMap(BaseAggVO bill, BaseAggVO oriBill) throws BusinessException { | ||||
|         Map<String, Object[]> headfieldchange = new HashMap(); | ||||
|         BaseBillVO pvo = (BaseBillVO)bill.getParentVO(); | ||||
|         BaseBillVO pvoold = (BaseBillVO)oriBill.getParentVO(); | ||||
|         IBean bean = MDBaseQueryFacade.getInstance().getBeanByFullClassName(pvo.getClass().getName()); | ||||
| 
 | ||||
|         for(IAttribute attr : bean.getAttributesOfModel()) { | ||||
|             if (!attr.isCalculation()) { | ||||
|                 String fieldcode = attr.getName(); | ||||
|                 if (!BaseBillVO.UPDATEIGNORE_LIST.contains(fieldcode)) { | ||||
|                     Object value = pvo.getAttributeValue(fieldcode); | ||||
|                     Object oldvalue = pvoold.getAttributeValue(fieldcode); | ||||
|                     if (!this.simpEquals(value, oldvalue)) { | ||||
|                         headfieldchange.put(fieldcode, new Object[]{value, oldvalue}); | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         return headfieldchange; | ||||
|     } | ||||
| 
 | ||||
|     private Map<String, Map<String, Object[]>> getBodyFieldValueChangeMap(BaseAggVO bill, BaseAggVO oriBill) throws BusinessException { | ||||
|         Map<String, Map<String, Object[]>> map = new HashMap(); | ||||
|         BaseItemVO[] vosNew = (BaseItemVO[])bill.getChildrenVO(); | ||||
|         BaseItemVO[] vosOld = (BaseItemVO[])oriBill.getChildrenVO(); | ||||
|         Map<String, BaseItemVO> mapOld = new HashMap(); | ||||
| 
 | ||||
|         for(BaseItemVO vo : vosOld) { | ||||
|             mapOld.put(vo.getPrimaryKey(), vo); | ||||
|         } | ||||
| 
 | ||||
|         IBean bean = MDBaseQueryFacade.getInstance().getBeanByFullClassName(vosNew[0].getClass().getName()); | ||||
|         List<IAttribute> attrs = bean.getAttributesOfModel(); | ||||
| 
 | ||||
|         for(BaseItemVO itemvo : vosNew) { | ||||
|             if (itemvo.getPrimaryKey() != null) { | ||||
|                 Map<String, Object[]> bodyfieldchange = new HashMap(); | ||||
|                 map.put(itemvo.getPrimaryKey(), bodyfieldchange); | ||||
|                 BaseItemVO itemvoOld = (BaseItemVO)mapOld.get(itemvo.getPrimaryKey()); | ||||
| 
 | ||||
|                 for(IAttribute attr : attrs) { | ||||
|                     if (!attr.isCalculation()) { | ||||
|                         String fieldcode = attr.getName(); | ||||
|                         Object oldvalue = itemvoOld.getAttributeValue(fieldcode); | ||||
|                         Object value = itemvo.getAttributeValue(fieldcode); | ||||
|                         if (!this.simpEquals(value, oldvalue)) { | ||||
|                             bodyfieldchange.put(fieldcode, new Object[]{value, oldvalue}); | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         return map; | ||||
|     } | ||||
| 
 | ||||
|     private Map<String, List<BaseItemVO>> getBillRowsChangeMap(AggregatedValueObject bill, AggregatedValueObject orginBill) throws BusinessException { | ||||
|         Map<String, List<BaseItemVO>> map = new HashMap(); | ||||
|         List<BaseItemVO> addlist = new ArrayList(); | ||||
|         List<BaseItemVO> deletelist = new ArrayList(); | ||||
|         map.put("bodyAddvos", addlist); | ||||
|         map.put("bodyDeletevos", deletelist); | ||||
|         BaseItemVO[] vosOld = (BaseItemVO[])orginBill.getChildrenVO(); | ||||
|         Map<String, BaseItemVO> mapOld = new HashMap(); | ||||
|         BaseItemVO[] vosNew = (BaseItemVO[])bill.getChildrenVO(); | ||||
| 
 | ||||
|         for(BaseItemVO vo : vosOld) { | ||||
|             mapOld.put(vo.getPrimaryKey(), vo); | ||||
|         } | ||||
| 
 | ||||
|         for(BaseItemVO vo : vosNew) { | ||||
|             if (vo.getPrimaryKey() == null) { | ||||
|                 addlist.add(vo); | ||||
|             } else { | ||||
|                 mapOld.remove(vo.getPrimaryKey()); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         if (mapOld.size() > 0) { | ||||
|             for(Map.Entry<String, BaseItemVO> deletentry : mapOld.entrySet()) { | ||||
|                 deletelist.add((BaseItemVO)deletentry.getValue()); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         return map; | ||||
|     } | ||||
| 
 | ||||
|     private boolean simpEquals(Object s1, Object s2) { | ||||
|         if (s1 == null && s2 == null) { | ||||
|             return true; | ||||
|         } else { | ||||
|             return s1 != null && s2 != null ? s1.equals(s2) : false; | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     protected void checkIsCorrdBillMoneyControl(AggregatedValueObject[] bills, AggregatedValueObject[] orginBills) throws BusinessException { | ||||
|         try { | ||||
|             int i = 0; | ||||
| 
 | ||||
|             for(AggregatedValueObject bill : bills) { | ||||
|                 AggregatedValueObject oriBill = orginBills[i++]; | ||||
|                 BaseBillVO billVO = (BaseBillVO)bill.getParentVO(); | ||||
|                 BaseBillVO billOriVO = (BaseBillVO)oriBill.getParentVO(); | ||||
|                 if (billVO.getSrc_syscode() == FromSystem.XTDJ.VALUE && this.isCorrdBillMoneyControl(billVO)) { | ||||
|                     if (!billVO.getMoney().equals(billOriVO.getMoney())) { | ||||
|                         throw new BusinessException(NCLangRes4VoTransl.getNCLangRes().getStrByID("2006pub_0", "02006pub-0434")); | ||||
|                     } | ||||
| 
 | ||||
|                     CircularlyAccessibleValueObject[] childrenVO = bill.getChildrenVO(); | ||||
|                     CircularlyAccessibleValueObject[] orichildrenVO = oriBill.getChildrenVO(); | ||||
| 
 | ||||
|                     for(int j = 0; j < Math.min(childrenVO.length, orichildrenVO.length); ++j) { | ||||
|                         if (!Objects.equals(childrenVO[j].getAttributeValue("pk_currtype"), orichildrenVO[j].getAttributeValue("pk_currtype"))) { | ||||
|                             throw new BusinessException(NCLangRes4VoTransl.getNCLangRes().getStrByID("2006arappub0316_0", "02006arappub0316-0029")); | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
| 
 | ||||
|         } catch (BusinessException e) { | ||||
|             throw new BusinessException(e.getMessage(), e); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     private boolean isCorrdBillMoneyControl(BaseBillVO headVO) throws BusinessException { | ||||
|         UFBoolean flag = UFBoolean.FALSE; | ||||
|         boolean exp = headVO.getSyscode() == FromSystem.AR.VALUE || ArapBillPubUtil.isARSysBilltype(headVO.getPk_billtype()); | ||||
|         flag = SysInitQuery.getParaBoolean(headVO.getPk_org(), exp ? "AR18" : "AP18"); | ||||
|         return flag.booleanValue(); | ||||
|     } | ||||
| 
 | ||||
|     protected AggregatedValueObject[] doUpdate(AggregatedValueObject[] bills, AggregatedValueObject[] orginBills) throws BusinessException { | ||||
|         this.childvostatmap = BillStatusUtils.enUpdateVOStauts(bills, orginBills); | ||||
|         this.beforeUpdateDefValue(bills, orginBills); | ||||
|         ArapVOUtils.resetMoneyBal(bills); | ||||
|         return super.doUpdate(bills, orginBills); | ||||
|     } | ||||
| 
 | ||||
|     protected void beforeUpdateDefValue(AggregatedValueObject[] bills, AggregatedValueObject[] orginBills) { | ||||
|         BillStatusUtils.enCUDVODefVals(bills, true, orginBills); | ||||
|     } | ||||
| } | ||||
		Loading…
	
		Reference in New Issue