2312流程生产订单同步自定义项-张鑫0412
This commit is contained in:
		
							parent
							
								
									e8a05d8fc5
								
							
						
					
					
						commit
						0890860fd4
					
				|  | @ -0,0 +1,114 @@ | |||
| // | ||||
| // Source code recreated from a .class file by IntelliJ IDEA | ||||
| // (powered by FernFlower decompiler) | ||||
| // | ||||
| 
 | ||||
| package nc.bs.mmpac.pickm.bp; | ||||
| 
 | ||||
| import nc.bs.mmpac.pickm.bp.rule.PickmFillInfoFormMORule; | ||||
| import nc.bs.mmpac.pickm.plugin.PickmPluginPoint; | ||||
| import nc.bs.mmpac.pickm.rule.PickmCheckItemMaterialPermissionRule; | ||||
| import nc.bs.mmpac.pickm.rule.PickmCheckMaterialPermissionRule; | ||||
| import nc.bs.mmpac.pickm.rule.PickmCheckSameStockRule; | ||||
| import nc.bs.mmpac.pickm.rule.PickmCreateSubItemRule; | ||||
| import nc.bs.mmpac.pickm.rule.PickmCreateSubMoForInsertRule; | ||||
| import nc.bs.mmpac.pickm.rule.PickmItemSortByRtForInsertRule; | ||||
| import nc.bs.mmpac.pickm.rule.PickmMakeDateRule; | ||||
| import nc.bs.mmpac.pickm.rule.PickmSaveRule; | ||||
| import nc.bs.mmpac.pickm.rule.SNMaterialNotBackFlushRule; | ||||
| import nc.bs.mmpac.pickm.rule.ic.PickmATPCheckRule; | ||||
| import nc.bs.mmpac.pickm.rule.ic.PickmAutoReserveRule; | ||||
| import nc.bs.mmpac.pickm.rule.ic.PickmSetReplaceSrcAndRowNoAfterInsertRule; | ||||
| import nc.bs.mmpac.pickm.rule.realsub.PickmRewritePLOWhenInsertRule; | ||||
| import nc.bs.pubapp.pub.rule.FieldLengthCheckRule; | ||||
| import nc.bs.pubapp.pub.rule.FillInsertDataRule; | ||||
| import nc.bs.pubapp.pub.rule.OrgDisabledCheckRule; | ||||
| import nc.impl.pubapp.bd.userdef.UserDefSaveRule; | ||||
| import nc.impl.pubapp.pattern.data.bill.template.InsertBPTemplate; | ||||
| import nc.impl.pubapp.pattern.data.bill.tool.BillTransferTool; | ||||
| import nc.impl.pubapp.pattern.rule.IRule; | ||||
| import nc.impl.pubapp.pattern.rule.processer.AroundProcesser; | ||||
| import nc.util.mmf.busi.rule.MMBillCodeCheckAndTrantypeRule; | ||||
| import nc.util.mmf.busi.rule.MMCreateBillcodeAndTrantypecodeRule; | ||||
| import nc.util.mmf.framework.base.MMValueCheck; | ||||
| import nc.vo.mmpac.pickm.entity.AggPickmVO; | ||||
| import nc.vo.mmpac.pickm.entity.PickmHeadVO; | ||||
| import nc.vo.mmpac.pickm.entity.PickmItemVO; | ||||
| 
 | ||||
| public class PickmInsertForMoBP { | ||||
| 
 | ||||
|     public PickmInsertForMoBP() { | ||||
|     } | ||||
| 
 | ||||
|     public AggPickmVO[] insertForMo(AggPickmVO[] vos) { | ||||
|         if (MMValueCheck.isEmpty(vos)) { | ||||
|             return null; | ||||
|         } else { | ||||
|             BillTransferTool<AggPickmVO> transferTool = new BillTransferTool(vos); | ||||
|             AggPickmVO[] mergedVOs = (AggPickmVO[]) transferTool.getClientFullInfoBill(); | ||||
|             InsertBPTemplate<AggPickmVO> bp = new InsertBPTemplate(PickmPluginPoint.SAVE); | ||||
|             this.addBeforeRule(bp.getAroundProcesser()); | ||||
|             this.addAfterRule(bp.getAroundProcesser()); | ||||
|             AggPickmVO[] retvos = (AggPickmVO[]) bp.insert(mergedVOs); | ||||
|             return retvos; | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * @deprecated | ||||
|      */ | ||||
|     @Deprecated | ||||
|     protected PickmCreateSubItemRule getPickmCreateSubItemRule(boolean isBg) { | ||||
|         return null; | ||||
|     } | ||||
| 
 | ||||
|     private void addAfterRule(AroundProcesser<AggPickmVO> processor) { | ||||
|         IRule<AggPickmVO> setReplaceSrcRule = new PickmSetReplaceSrcAndRowNoAfterInsertRule(true); | ||||
|         processor.addAfterRule(setReplaceSrcRule); | ||||
|         IRule<AggPickmVO> billCodeRule = new MMBillCodeCheckAndTrantypeRule("55A3", "vbillcode", "pk_group", "pk_org", | ||||
|                 "vbusitype"); | ||||
|         processor.addAfterRule(billCodeRule); | ||||
|         IRule<AggPickmVO> atpCheckRule = new PickmATPCheckRule(false, (AggPickmVO[]) null); | ||||
|         processor.addAfterRule(atpCheckRule); | ||||
|         IRule<AggPickmVO> pickmAutoReserveRule = new PickmAutoReserveRule(); | ||||
|         processor.addAfterRule(pickmAutoReserveRule); | ||||
|         IRule<AggPickmVO> pickmRewritePLOWhenInsertRule = new PickmRewritePLOWhenInsertRule(); | ||||
|         processor.addAfterRule(pickmRewritePLOWhenInsertRule); | ||||
|         IRule<AggPickmVO> pickmCreateSubMoRule = new PickmCreateSubMoForInsertRule(); | ||||
|         processor.addAfterRule(pickmCreateSubMoRule); | ||||
|     } | ||||
| 
 | ||||
|     private void addBeforeRule(AroundProcesser<AggPickmVO> processor) { | ||||
|         IRule<AggPickmVO> orgRule = new OrgDisabledCheckRule("pk_org", "FACTORYTYPE000000000"); | ||||
|         processor.addBeforeRule(orgRule); | ||||
|         IRule<AggPickmVO> fillDataRule = new FillInsertDataRule(); | ||||
|         processor.addBeforeRule(fillDataRule); | ||||
|         IRule<AggPickmVO> getMakeDateRule = new PickmMakeDateRule(); | ||||
|         processor.addBeforeRule(getMakeDateRule); | ||||
|         IRule<AggPickmVO> billcodeRule = new MMCreateBillcodeAndTrantypecodeRule("55A3", "vbillcode", "pk_group", | ||||
|                 "pk_org", "vbusitype"); | ||||
|         processor.addBeforeRule(billcodeRule); | ||||
|         IRule<AggPickmVO> createSubItemRule = new PickmCreateSubItemRule(true); | ||||
|         processor.addBeforeRule(createSubItemRule); | ||||
|         IRule<AggPickmVO> sortItemRule = new PickmItemSortByRtForInsertRule(); | ||||
|         processor.addBeforeRule(sortItemRule); | ||||
|         IRule<AggPickmVO> lengthCheckRule = new FieldLengthCheckRule(); | ||||
|         processor.addBeforeRule(lengthCheckRule); | ||||
|         IRule<AggPickmVO> sameRule = new PickmCheckSameStockRule(); | ||||
|         processor.addBeforeRule(sameRule); | ||||
|         IRule<AggPickmVO> marperRule = new PickmCheckMaterialPermissionRule(); | ||||
|         processor.addBeforeRule(marperRule); | ||||
|         IRule<AggPickmVO> bmarperRule = new PickmCheckItemMaterialPermissionRule(); | ||||
|         processor.addBeforeRule(bmarperRule); | ||||
|         IRule<AggPickmVO> pickmSaveRule = new PickmSaveRule(); | ||||
|         processor.addBeforeRule(pickmSaveRule); | ||||
|         IRule<AggPickmVO> snMaterialCheckRule = new SNMaterialNotBackFlushRule(); | ||||
|         processor.addBeforeRule(snMaterialCheckRule); | ||||
|         IRule<AggPickmVO> atpCheckRule = new PickmATPCheckRule(true, (AggPickmVO[]) null); | ||||
|         processor.addBeforeRule(atpCheckRule); | ||||
|         IRule<AggPickmVO> userDefSaveRule = new UserDefSaveRule(new String[]{"vdef", "vbdef"}, | ||||
|                 new Class[]{PickmHeadVO.class, PickmItemVO.class}); | ||||
|         processor.addBeforeRule(userDefSaveRule); | ||||
|         processor.addBeforeRule(new PickmFillInfoFormMORule()); | ||||
|     } | ||||
| } | ||||
|  | @ -26,86 +26,83 @@ import nc.vo.so.m30.entity.SaleOrderBVO; | |||
| import nc.bs.mmpac.pmo.pac0002.bp.PMORowPutBP; | ||||
| import nccloud.web.mmpac.pmo.action.PmoCardPutAction; | ||||
| 
 | ||||
| 
 | ||||
| public class putBeforeCheckRule implements IRule<PMOAggVO> { | ||||
| 
 | ||||
|     private static IUifService service = (IUifService) NCLocator.getInstance() | ||||
|             .lookup(IUifService.class.getName()); | ||||
| 	private static IUifService service = (IUifService) NCLocator.getInstance().lookup(IUifService.class.getName()); | ||||
| 
 | ||||
|     @Override | ||||
|     public void process(PMOAggVO[] vos) { | ||||
|         try { | ||||
|             // TODO Auto-generated method stub | ||||
|             List<SaleOrderBVO> list = new ArrayList<SaleOrderBVO>(); | ||||
|             for (PMOAggVO vo : vos) { | ||||
|                 //判断是否是需要控制的业务单元 | ||||
|                 PMOHeadVO pmoHeadVO = vo.getParentVO(); | ||||
|                 String pkstockorgStr = getPk_stockorg(pmoHeadVO.getPk_org()); | ||||
|                 if (pkstockorgStr == null || pkstockorgStr.equals("")) { | ||||
|                     return; | ||||
|                 } | ||||
|                 PMOItemVO[] iSuperVOs = vo.getChildrenVO(); | ||||
|                 for (int i = 0; i < iSuperVOs.length; i++) { | ||||
|                     PMOItemVO itemvo = iSuperVOs[i]; | ||||
|                     //判断是否类型是否为30 | ||||
|                     if (itemvo.getVsrctype() == null || !itemvo.getVsrctype().equals("30")) { | ||||
|                         return; | ||||
|                     } | ||||
|                     Map<String, Object> valMap = getVbdef6(itemvo.getVsrcbid()); | ||||
|                     //销售发票表头pk_billtypecode=30-Cxx-12 | ||||
|                     if (valMap.get("pk_billtypecode").equals("30-Cxx-12")||valMap.get("pk_billtypecode").equals("30-Cxx-02")||valMap.get("pk_billtypecode").equals("30-Cxx-08")||valMap.get("pk_billtypecode").equals("30-Cxx-13")) { | ||||
|                         return; | ||||
|                     } | ||||
|                     //历史数据不考虑 | ||||
|                     String storedDateStr = (String) valMap.get("creationtime"); | ||||
|                     String targetDateStr = "2024-12-31 00:00:00"; | ||||
|                     DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); | ||||
|                     LocalDateTime storedDate = LocalDateTime.parse(storedDateStr, formatter); | ||||
|                     LocalDateTime targetDate = LocalDateTime.parse(targetDateStr, formatter); | ||||
|                     if (storedDate.isBefore(targetDate)) { | ||||
|                         return; | ||||
|                     } | ||||
|                     String vdef4Str = itemvo.getVdef4();//齐套率 | ||||
|                     String vdef4 = (vdef4Str != null) ? vdef4Str.toString() : ""; | ||||
|                     double vdef4qty = (vdef4.isEmpty()) ? 0 : Double.parseDouble(vdef4);//齐套率 | ||||
|                     String vdef10Str = itemvo.getVdef10();//齐套率标准 | ||||
|                     String vdef10 = (vdef10Str != null) ? vdef10Str.toString() : ""; | ||||
|                     double vdef10qty = (vdef10.isEmpty()) ? 0 : Double.parseDouble(vdef10);//齐套率标准 | ||||
|                     if (vdef4qty < vdef10qty) { | ||||
|                         throw new BusinessException( | ||||
|                                 "齐套率" + vdef4qty + "小于齐套率标准'" + vdef10qty + "',无法保存!"); | ||||
|                     } | ||||
| 	@Override | ||||
| 	public void process(PMOAggVO[] vos) { | ||||
| 		try { | ||||
| 			// TODO Auto-generated method stub | ||||
| 			List<SaleOrderBVO> list = new ArrayList<SaleOrderBVO>(); | ||||
| 			for (PMOAggVO vo : vos) { | ||||
| 				// 判断是否是需要控制的业务单元 | ||||
| 				PMOHeadVO pmoHeadVO = vo.getParentVO(); | ||||
| 				String pkstockorgStr = getPk_stockorg(pmoHeadVO.getPk_org()); | ||||
| 				if (pkstockorgStr == null || pkstockorgStr.equals("")) { | ||||
| 					return; | ||||
| 				} | ||||
| 				PMOItemVO[] iSuperVOs = vo.getChildrenVO(); | ||||
| 				for (int i = 0; i < iSuperVOs.length; i++) { | ||||
| 					PMOItemVO itemvo = iSuperVOs[i]; | ||||
| 					// 判断是否类型是否为30 | ||||
| 					if (itemvo.getVsrctype() == null || !itemvo.getVsrctype().equals("30")) { | ||||
| 						return; | ||||
| 					} | ||||
| 					Map<String, Object> valMap = getVbdef6(itemvo.getVsrcbid()); | ||||
| 					// 销售发票表头pk_billtypecode=30-Cxx-12 | ||||
| 					if (valMap.get("pk_billtypecode").equals("30-Cxx-12") | ||||
| 							|| valMap.get("pk_billtypecode").equals("30-Cxx-02") | ||||
| 							|| valMap.get("pk_billtypecode").equals("30-Cxx-08") | ||||
| 							|| valMap.get("pk_billtypecode").equals("30-Cxx-13")) { | ||||
| 						return; | ||||
| 					} | ||||
| 					// 历史数据不考虑 | ||||
| 					String storedDateStr = (String) valMap.get("creationtime"); | ||||
| 					String targetDateStr = "2024-12-31 00:00:00"; | ||||
| 					DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); | ||||
| 					LocalDateTime storedDate = LocalDateTime.parse(storedDateStr, formatter); | ||||
| 					LocalDateTime targetDate = LocalDateTime.parse(targetDateStr, formatter); | ||||
| 					if (storedDate.isBefore(targetDate)) { | ||||
| 						return; | ||||
| 					} | ||||
| 					String vdef4Str = itemvo.getVdef4();// 齐套率 | ||||
| 					String vdef4 = (vdef4Str != null) ? vdef4Str.toString() : ""; | ||||
| 					double vdef4qty = (vdef4.isEmpty()) ? 0 : Double.parseDouble(vdef4);// 齐套率 | ||||
| 					String vdef10Str = itemvo.getVdef10();// 齐套率标准 | ||||
| 					String vdef10 = (vdef10Str != null) ? vdef10Str.toString() : ""; | ||||
| 					double vdef10qty = (vdef10.isEmpty()) ? 0 : Double.parseDouble(vdef10);// 齐套率标准 | ||||
| 					if (vdef4qty < vdef10qty) { | ||||
| 						throw new BusinessException("齐套率" + vdef4qty + "小于齐套率标准'" + vdef10qty + "',无法保存!"); | ||||
| 					} | ||||
| 
 | ||||
|                 } | ||||
|             } | ||||
|         } catch (BusinessException e) { | ||||
|             throw new RuntimeException(e); | ||||
|         } | ||||
|     } | ||||
| 				} | ||||
| 			} | ||||
| 		} catch (BusinessException e) { | ||||
| 			throw new RuntimeException(e); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
|     private Map<String, Object> getVbdef6(String vsrcbidStr) throws BusinessException { | ||||
|         IUAPQueryBS queryBS = NCLocator.getInstance().lookup(IUAPQueryBS.class); | ||||
|         String sql = " SELECT bt.pk_billtypecode,s.creationtime,b.vbdef12,d.nastnum FROM so_saleorder_b b\n" | ||||
|                 + "INNER JOIN so_saleorder s ON s.csaleorderid = b.csaleorderid\n" | ||||
|                 + "left join (select mm_mo.Vsrcbid,sum(nastnum) as nastnum \n" | ||||
|                 + "from mm_mo\n" | ||||
|                 + "where mm_mo.dr=0\n" | ||||
|                 + "group by mm_mo.Vsrcbid) d on b.csaleorderbid=d.Vsrcbid\n" | ||||
|                 + "INNER JOIN bd_billtype bt on bt.pk_billtypeid=s.ctrantypeid\n" | ||||
|                 + "where b.csaleorderbid='" + vsrcbidStr + "' "; | ||||
|         Map<String, Object> valList = (Map<String, Object>) queryBS.executeQuery(sql, new MapProcessor()); | ||||
|         return valList; | ||||
|     } | ||||
| 	private Map<String, Object> getVbdef6(String vsrcbidStr) throws BusinessException { | ||||
| 		IUAPQueryBS queryBS = NCLocator.getInstance().lookup(IUAPQueryBS.class); | ||||
| 		String sql = " SELECT bt.pk_billtypecode,s.creationtime,b.vbdef12,d.nastnum FROM so_saleorder_b b\n" | ||||
| 				+ "INNER JOIN so_saleorder s ON s.csaleorderid = b.csaleorderid\n" | ||||
| 				+ "left join (select mm_mo.Vsrcbid,sum(nastnum) as nastnum \n" + "from mm_mo\n" + "where mm_mo.dr=0\n" | ||||
| 				+ "group by mm_mo.Vsrcbid) d on b.csaleorderbid=d.Vsrcbid\n" | ||||
| 				+ "INNER JOIN bd_billtype bt on bt.pk_billtypeid=s.ctrantypeid\n" + "where b.csaleorderbid='" | ||||
| 				+ vsrcbidStr + "' "; | ||||
| 		Map<String, Object> valList = (Map<String, Object>) queryBS.executeQuery(sql, new MapProcessor()); | ||||
| 		return valList; | ||||
| 	} | ||||
| 
 | ||||
|     private String getPk_stockorg(String pk_stockorg) throws BusinessException { | ||||
|         String sql = | ||||
|                 " select pk_stockorg from org_stockorg where code in ('C018','C029','C033','C039','C020','C019') and pk_stockorg='" | ||||
|                         + pk_stockorg + "' "; | ||||
|         String saleorderPK = (String) getQueryService().executeQuery(sql, new ColumnProcessor()); | ||||
|         return saleorderPK; | ||||
|     } | ||||
| 	private String getPk_stockorg(String pk_stockorg) throws BusinessException { | ||||
| 		String sql = " select pk_stockorg from org_stockorg where code in ('C018','C029','C033','C039','C020','C019') and pk_stockorg='" | ||||
| 				+ pk_stockorg + "' "; | ||||
| 		String saleorderPK = (String) getQueryService().executeQuery(sql, new ColumnProcessor()); | ||||
| 		return saleorderPK; | ||||
| 	} | ||||
| 
 | ||||
|     public IUAPQueryBS getQueryService() { | ||||
|         return NCLocator.getInstance().lookup(IUAPQueryBS.class); | ||||
|     } | ||||
| 	public IUAPQueryBS getQueryService() { | ||||
| 		return NCLocator.getInstance().lookup(IUAPQueryBS.class); | ||||
| 	} | ||||
| } | ||||
|  |  | |||
|  | @ -17,99 +17,95 @@ import nc.vo.pub.BusinessException; | |||
| import nc.vo.so.m30.entity.SaleOrderBVO; | ||||
| 
 | ||||
| /** | ||||
|  * 流程生成订单保存时验证销售订单累计排产状态,并验收首付款比例 | ||||
|  * zhangxinah 适配2312 | ||||
|  * 流程生成订单保存时验证销售订单累计排产状态,并验收首付款比例 zhangxinah 适配2312 | ||||
|  */ | ||||
| public class saveBeforeCheckRule implements IRule<PMOAggVO> { | ||||
| 
 | ||||
|     @Override | ||||
|     public void process(PMOAggVO[] vos) { | ||||
|         // TODO Auto-generated method stub | ||||
|         try { | ||||
|             List<SaleOrderBVO> list = new ArrayList<SaleOrderBVO>(); | ||||
|             for (PMOAggVO vo : vos) { | ||||
|                 //判断是否是需要控制的业务单元 | ||||
|                 PMOHeadVO pmoHeadVO = vo.getParentVO(); | ||||
|                 String pkstockorgStr = getPk_stockorg(pmoHeadVO.getPk_org()); | ||||
|                 if (pkstockorgStr == null || pkstockorgStr.equals("")) { | ||||
|                     return; | ||||
|                 } | ||||
|                 PMOItemVO[] iSuperVOs = vo.getChildrenVO(); | ||||
|                 for (int i = 0; i < iSuperVOs.length; i++) { | ||||
|                     PMOItemVO itemvo = iSuperVOs[i]; | ||||
|                     //判断是否类型是否为30 | ||||
|                     if (itemvo.getVsrctype() == null || !itemvo.getVsrctype().equals("30")) { | ||||
|                         return; | ||||
|                     } | ||||
| 	@Override | ||||
| 	public void process(PMOAggVO[] vos) { | ||||
| 		// TODO Auto-generated method stub | ||||
| 		try { | ||||
| 			List<SaleOrderBVO> list = new ArrayList<SaleOrderBVO>(); | ||||
| 			for (PMOAggVO vo : vos) { | ||||
| 				// 判断是否是需要控制的业务单元 | ||||
| 				PMOHeadVO pmoHeadVO = vo.getParentVO(); | ||||
| 				String pkstockorgStr = getPk_stockorg(pmoHeadVO.getPk_org()); | ||||
| 				if (pkstockorgStr == null || pkstockorgStr.equals("")) { | ||||
| 					return; | ||||
| 				} | ||||
| 				PMOItemVO[] iSuperVOs = vo.getChildrenVO(); | ||||
| 				for (int i = 0; i < iSuperVOs.length; i++) { | ||||
| 					PMOItemVO itemvo = iSuperVOs[i]; | ||||
| 					// 判断是否类型是否为30 | ||||
| 					if (itemvo.getVsrctype() == null || !itemvo.getVsrctype().equals("30")) { | ||||
| 						return; | ||||
| 					} | ||||
| 
 | ||||
|                     Map<String, Object> valMap = getVbdef6(itemvo.getVsrcbid()); | ||||
|                     if (valMap == null || valMap.isEmpty()) { | ||||
|                         throw new BusinessException("无法关联到销售订单,无法保存!"); | ||||
|                     } | ||||
|                     //销售发票表头pk_billtypecode=30-Cxx-12 | ||||
|                     if (valMap.get("pk_billtypecode").equals("30-Cxx-12")||valMap.get("pk_billtypecode").equals("30-Cxx-02")||valMap.get("pk_billtypecode").equals("30-Cxx-08")||valMap.get("pk_billtypecode").equals("30-Cxx-13")) { | ||||
|                         return; | ||||
|                     } | ||||
|                     //历史数据不考虑 | ||||
|                     String storedDateStr = (String) valMap.get("creationtime"); | ||||
|                     String targetDateStr = "2024-12-27 00:00:00"; | ||||
|                     DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); | ||||
|                     LocalDateTime storedDate = LocalDateTime.parse(storedDateStr, formatter); | ||||
|                     LocalDateTime targetDate = LocalDateTime.parse(targetDateStr, formatter); | ||||
|                     if (storedDate.isBefore(targetDate)) { | ||||
|                         return; | ||||
|                     } | ||||
|                     if (valMap.get("vbdef12") == null) { | ||||
|                         throw new BusinessException( | ||||
|                                 "生产订单明细" + (i + 1) + ",累计排产申请数量为0,无法保存!"); | ||||
|                     } else { | ||||
|                         try { | ||||
|                             double sQty = Double.parseDouble((String) valMap.get("vbdef12"));//累计排产申请数量 | ||||
|                             Object ntotaloutnumsObj = valMap.get("nastnum"); | ||||
|                             String ntotaloutnums = (ntotaloutnumsObj != null) ? ntotaloutnumsObj.toString() : ""; | ||||
|                             double ntotaloutnum = | ||||
|                                     (ntotaloutnums.isEmpty()) ? 0 : Double.parseDouble(ntotaloutnums);//累计生产数量 | ||||
|                             double bdnum = itemvo.getNastnum().getDouble(); | ||||
|                             if (sQty < (ntotaloutnum + bdnum)) { | ||||
|                                 throw new BusinessException( | ||||
|                                         "生产订单明细" + (i + 1) + ",累计生产数量'" + (ntotaloutnum + bdnum) | ||||
|                                                 + "'大于销售订单累计排产申请数量'" + sQty + "',无法保存!"); | ||||
|                             } | ||||
|                         } catch (NumberFormatException e) { | ||||
|                             throw new BusinessException("累计排产申请数量转化数值失败" + e); | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         } catch (BusinessException e) { | ||||
|             throw new RuntimeException(e); | ||||
|         } | ||||
|     } | ||||
| 					Map<String, Object> valMap = getVbdef6(itemvo.getVsrcbid()); | ||||
| 					if (valMap == null || valMap.isEmpty()) { | ||||
| 						throw new BusinessException("无法关联到销售订单,无法保存!"); | ||||
| 					} | ||||
| 					// 销售发票表头pk_billtypecode=30-Cxx-12 | ||||
| 					if (valMap.get("pk_billtypecode").equals("30-Cxx-12") | ||||
| 							|| valMap.get("pk_billtypecode").equals("30-Cxx-02") | ||||
| 							|| valMap.get("pk_billtypecode").equals("30-Cxx-08") | ||||
| 							|| valMap.get("pk_billtypecode").equals("30-Cxx-13")) { | ||||
| 						return; | ||||
| 					} | ||||
| 					// 历史数据不考虑 | ||||
| 					String storedDateStr = (String) valMap.get("creationtime"); | ||||
| 					String targetDateStr = "2024-12-27 00:00:00"; | ||||
| 					DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); | ||||
| 					LocalDateTime storedDate = LocalDateTime.parse(storedDateStr, formatter); | ||||
| 					LocalDateTime targetDate = LocalDateTime.parse(targetDateStr, formatter); | ||||
| 					if (storedDate.isBefore(targetDate)) { | ||||
| 						return; | ||||
| 					} | ||||
| 					if (valMap.get("vbdef12") == null) { | ||||
| 						throw new BusinessException("生产订单明细" + (i + 1) + ",累计排产申请数量为0,无法保存!"); | ||||
| 					} else { | ||||
| 						try { | ||||
| 							double sQty = Double.parseDouble((String) valMap.get("vbdef12"));// 累计排产申请数量 | ||||
| 							Object ntotaloutnumsObj = valMap.get("nastnum"); | ||||
| 							String ntotaloutnums = (ntotaloutnumsObj != null) ? ntotaloutnumsObj.toString() : ""; | ||||
| 							double ntotaloutnum = (ntotaloutnums.isEmpty()) ? 0 : Double.parseDouble(ntotaloutnums);// 累计生产数量 | ||||
| 							double bdnum = itemvo.getNastnum().getDouble(); | ||||
| 							if (sQty < (ntotaloutnum + bdnum)) { | ||||
| 								throw new BusinessException("生产订单明细" + (i + 1) + ",累计生产数量'" + (ntotaloutnum + bdnum) | ||||
| 										+ "'大于销售订单累计排产申请数量'" + sQty + "',无法保存!"); | ||||
| 							} | ||||
| 						} catch (NumberFormatException e) { | ||||
| 							throw new BusinessException("累计排产申请数量转化数值失败" + e); | ||||
| 						} | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} catch (BusinessException e) { | ||||
| 			throw new RuntimeException(e); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
|     private Map<String, Object> getVbdef6(String vsrcbidStr) throws BusinessException { | ||||
|         IUAPQueryBS queryBS = NCLocator.getInstance().lookup(IUAPQueryBS.class); | ||||
|         String sql = " SELECT bt.pk_billtypecode,s.creationtime,b.vbdef12,d.nastnum FROM so_saleorder_b b\n" | ||||
|                 + "INNER JOIN so_saleorder s ON s.csaleorderid = b.csaleorderid\n" | ||||
|                 + "left join (select mm_mo.Vsrcbid,sum(nastnum) as nastnum \n" | ||||
|                 + "from mm_mo\n" | ||||
|                 + "where mm_mo.dr=0\n" | ||||
|                 + "group by mm_mo.Vsrcbid) d on b.csaleorderbid=d.Vsrcbid\n" | ||||
|                 + "INNER JOIN bd_billtype bt on bt.pk_billtypeid=s.ctrantypeid\n" | ||||
|                 + "where b.csaleorderbid='" + vsrcbidStr + "' "; | ||||
|         Map<String, Object> valList = (Map<String, Object>) queryBS.executeQuery(sql, new MapProcessor()); | ||||
|         return valList; | ||||
|     } | ||||
| 	private Map<String, Object> getVbdef6(String vsrcbidStr) throws BusinessException { | ||||
| 		IUAPQueryBS queryBS = NCLocator.getInstance().lookup(IUAPQueryBS.class); | ||||
| 		String sql = " SELECT bt.pk_billtypecode,s.creationtime,b.vbdef12,d.nastnum FROM so_saleorder_b b\n" | ||||
| 				+ "INNER JOIN so_saleorder s ON s.csaleorderid = b.csaleorderid\n" | ||||
| 				+ "left join (select mm_mo.Vsrcbid,sum(nastnum) as nastnum \n" + "from mm_mo\n" + "where mm_mo.dr=0\n" | ||||
| 				+ "group by mm_mo.Vsrcbid) d on b.csaleorderbid=d.Vsrcbid\n" | ||||
| 				+ "INNER JOIN bd_billtype bt on bt.pk_billtypeid=s.ctrantypeid\n" + "where b.csaleorderbid='" | ||||
| 				+ vsrcbidStr + "' "; | ||||
| 		Map<String, Object> valList = (Map<String, Object>) queryBS.executeQuery(sql, new MapProcessor()); | ||||
| 		return valList; | ||||
| 	} | ||||
| 
 | ||||
|     private String getPk_stockorg(String pk_stockorg) throws BusinessException { | ||||
|         String sql = | ||||
|                 " select pk_stockorg from org_stockorg where code in ('C018','C029','C033','C039','C020','C019') and pk_stockorg='" | ||||
|                         + pk_stockorg + "' "; | ||||
|         String saleorderPK = (String) getQueryService().executeQuery(sql, new ColumnProcessor()); | ||||
|         return saleorderPK; | ||||
|     } | ||||
| 	private String getPk_stockorg(String pk_stockorg) throws BusinessException { | ||||
| 		String sql = " select pk_stockorg from org_stockorg where code in ('C018','C029','C033','C039','C020','C019') and pk_stockorg='" | ||||
| 				+ pk_stockorg + "' "; | ||||
| 		String saleorderPK = (String) getQueryService().executeQuery(sql, new ColumnProcessor()); | ||||
| 		return saleorderPK; | ||||
| 	} | ||||
| 
 | ||||
|     public IUAPQueryBS getQueryService() { | ||||
|         return NCLocator.getInstance().lookup(IUAPQueryBS.class); | ||||
|     } | ||||
| 	public IUAPQueryBS getQueryService() { | ||||
| 		return NCLocator.getInstance().lookup(IUAPQueryBS.class); | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
|  |  | |||
|  | @ -36,131 +36,136 @@ import java.util.HashMap; | |||
| import java.util.Map; | ||||
| 
 | ||||
| public class WrInsertBP { | ||||
|     private boolean isOnlyInsert = false; | ||||
| 	private boolean isOnlyInsert = false; | ||||
| 
 | ||||
|     public WrInsertBP() { | ||||
|     } | ||||
| 	public WrInsertBP() { | ||||
| 	} | ||||
| 
 | ||||
|     public AggWrVO[] insert(AggWrVO[] vos) { | ||||
|         GCInsertBPTemplate<AggWrVO> bp = new GCInsertBPTemplate(WrPluginPoint.INSERT); | ||||
|         AroundProcesser<AggWrVO> processor = bp.getAroundProcesser(); | ||||
|         Map<String, String> vbatchsMap = new HashMap(); | ||||
|         this.addBeforeRule(processor, vos, vbatchsMap); | ||||
|         this.addAfterRule(processor, vbatchsMap); | ||||
|         return (AggWrVO[])bp.insert(vos); | ||||
|     } | ||||
| 	public AggWrVO[] insert(AggWrVO[] vos) { | ||||
| 		GCInsertBPTemplate<AggWrVO> bp = new GCInsertBPTemplate(WrPluginPoint.INSERT); | ||||
| 		AroundProcesser<AggWrVO> processor = bp.getAroundProcesser(); | ||||
| 		Map<String, String> vbatchsMap = new HashMap(); | ||||
| 		this.addBeforeRule(processor, vos, vbatchsMap); | ||||
| 		this.addAfterRule(processor, vbatchsMap); | ||||
| 		return (AggWrVO[]) bp.insert(vos); | ||||
| 	} | ||||
| 
 | ||||
|     private void addBeforeRule(AroundProcesser<AggWrVO> processer, AggWrVO[] vos, Map<String, String> vbatchsMap) { | ||||
|         IRule<AggWrVO> wrNullRule = new WrNullRule(); | ||||
|         processer.addBeforeRule(wrNullRule); | ||||
|         IRule<AggWrVO> mmatoMaterialCheckRule = new MMATOMaterialCheckRule((String)null, "cbmaterialvid", "cbffileid"); | ||||
|         processer.addBeforeRule(mmatoMaterialCheckRule); | ||||
|         IRule<AggWrVO> orgRule = new OrgDisabledCheckRule("pk_org", "FACTORYTYPE000000000"); | ||||
|         processer.addBeforeRule(orgRule); | ||||
|         IRule<AggWrVO> checkDefRule = new UserDefSaveRule(new String[]{"vdef", "vbdef", "vgdef", "vpdef"}, new Class[]{WrVO.class, WrItemVO.class, WrQualityVO.class, WrPickVO.class}); | ||||
|         processer.addBeforeRule(checkDefRule); | ||||
|         MarAssistantSaveRule<AggWrVO> marRule = new MarAssistantSaveRule(); | ||||
|         processer.addBeforeRule(marRule); | ||||
|         IRule<AggWrVO> fillInsertDataRule = new WrFillInsertDataRule(); | ||||
|         processer.addBeforeRule(fillInsertDataRule); | ||||
|         IRule<AggWrVO> autoMaterialAssignRule = new MMAutoMaterialAssignRule((String)null, "cbmaterialvid", new String[]{"pk_org"}, (String[])null); | ||||
|         processer.addBeforeFinalRule(autoMaterialAssignRule); | ||||
|         IRule<AggWrVO> orgPermissionRule = new WrCheckMaterialPermissionRule(); | ||||
|         processer.addBeforeRule(orgPermissionRule); | ||||
|         IRule<AggWrVO> moCloseRule = new WrCheckMoIsCloseRule(); | ||||
|         processer.addBeforeRule(moCloseRule); | ||||
|         processer.addBeforeRule(new MMCheckMaterialVirtualRule(WrItemVO.class)); | ||||
|         IRule<AggWrVO> wrSetDefaultValueWhenInsertRule = new WrSetDefaultValueWhenInsertRule(); | ||||
|         processer.addBeforeRule(wrSetDefaultValueWhenInsertRule); | ||||
|         IRule<AggWrVO> wrSetItemDefaultValueRule = new WrSetItemDefaultValueRule(); | ||||
|         processer.addBeforeRule(wrSetItemDefaultValueRule); | ||||
|         IRule<AggWrVO> billcodeRule = new MMCreateBillcodeAndTrantypecodeRule("55A4", "vbillcode", "pk_group", "pk_org", "vtrantypecode"); | ||||
|         processer.addBeforeRule(billcodeRule); | ||||
|         IRule<AggWrVO> wrHeadNotNullRule = new WrHeadNotNullRule(); | ||||
|         processer.addBeforeRule(wrHeadNotNullRule); | ||||
|         IRule<AggWrVO> wrBatchCodeRule = new WrCreateBatchCodeRule(); | ||||
|         processer.addBeforeRule(wrBatchCodeRule); | ||||
|         IRule<AggWrVO> wrClearNullProductBodyRule = new WrClearNullBodyRule(); | ||||
|         processer.addBeforeRule(wrClearNullProductBodyRule); | ||||
|         processer.addBeforeRule(new WrRowNoRule()); | ||||
|         IRule<AggWrVO> wrQualityFilterRule = new WrQualityFilterRule(); | ||||
|         processer.addBeforeRule(wrQualityFilterRule); | ||||
|         IRule<AggWrVO> wrPickFilterRule = new WrPickFilterRule(); | ||||
|         processer.addBeforeRule(wrPickFilterRule); | ||||
|         IRule<AggWrVO> wrOutputNotNullRule = new WrOutputNotNullRule(); | ||||
|         processer.addBeforeRule(wrOutputNotNullRule); | ||||
|         IRule<AggWrVO> wrNoneMainProductBomCheckRule = new WrNoneMainProductBomCheckRule(); | ||||
|         processer.addBeforeRule(wrNoneMainProductBomCheckRule); | ||||
|         IRule<AggWrVO> wrConsumeNotNullRule = new WrPickNotNullRule(); | ||||
|         processer.addBeforeRule(wrConsumeNotNullRule); | ||||
|         IRule<AggWrVO> lengthCheckRule = new FieldLengthCheckRule(); | ||||
|         processer.addBeforeRule(lengthCheckRule); | ||||
|         IRule<AggWrVO> wrInsertAndDelInStockBatchCodeBeforeRule = new WrInsertAndDelInStockBatchCodeBeforeRule(vbatchsMap); | ||||
|         processer.addBeforeRule(wrInsertAndDelInStockBatchCodeBeforeRule); | ||||
|         WrSetQualityVODefaultValueRule wrSetQualityVODefaultValueRule = new WrSetQualityVODefaultValueRule(); | ||||
|         processer.addBeforeRule(wrSetQualityVODefaultValueRule); | ||||
|         processer.addBeforeRule(new WrSerialNoCheckCodeRepeat()); | ||||
|         WrSerialNoAutoCreateBeforeRule wrAutoCreateSnBeforeRule = new WrSerialNoAutoCreateBeforeRule(); | ||||
|         processer.addBeforeRule(wrAutoCreateSnBeforeRule); | ||||
|         WrSerialNoCheckRule wrSnCheckRule = new WrSerialNoCheckRule(); | ||||
|         processer.addBeforeRule(wrSnCheckRule); | ||||
|         WrSnSynToQualtiyRule synToQRule = new WrSnSynToQualtiyRule(); | ||||
|         processer.addBeforeRule(synToQRule); | ||||
|         WrMoSerialNoMarkIRule mosnMarkRule = new WrMoSerialNoMarkIRule(); | ||||
|         processer.addBeforeRule(mosnMarkRule); | ||||
|         IRule<AggWrVO> wrCreateBatProdRule = new WrCreateBatProdRule(); | ||||
|         processer.addBeforeRule(wrCreateBatProdRule); | ||||
|         processer.addBeforeRule(new WrCheckTranstypeCodeRule()); | ||||
|     } | ||||
| 	private void addBeforeRule(AroundProcesser<AggWrVO> processer, AggWrVO[] vos, Map<String, String> vbatchsMap) { | ||||
| 		IRule<AggWrVO> wrNullRule = new WrNullRule(); | ||||
| 		processer.addBeforeRule(wrNullRule); | ||||
| 		IRule<AggWrVO> mmatoMaterialCheckRule = new MMATOMaterialCheckRule((String) null, "cbmaterialvid", "cbffileid"); | ||||
| 		processer.addBeforeRule(mmatoMaterialCheckRule); | ||||
| 		IRule<AggWrVO> orgRule = new OrgDisabledCheckRule("pk_org", "FACTORYTYPE000000000"); | ||||
| 		processer.addBeforeRule(orgRule); | ||||
| 		IRule<AggWrVO> checkDefRule = new UserDefSaveRule(new String[] { "vdef", "vbdef", "vgdef", "vpdef" }, | ||||
| 				new Class[] { WrVO.class, WrItemVO.class, WrQualityVO.class, WrPickVO.class }); | ||||
| 		processer.addBeforeRule(checkDefRule); | ||||
| 		MarAssistantSaveRule<AggWrVO> marRule = new MarAssistantSaveRule(); | ||||
| 		processer.addBeforeRule(marRule); | ||||
| 		IRule<AggWrVO> fillInsertDataRule = new WrFillInsertDataRule(); | ||||
| 		processer.addBeforeRule(fillInsertDataRule); | ||||
| 		IRule<AggWrVO> autoMaterialAssignRule = new MMAutoMaterialAssignRule((String) null, "cbmaterialvid", | ||||
| 				new String[] { "pk_org" }, (String[]) null); | ||||
| 		processer.addBeforeFinalRule(autoMaterialAssignRule); | ||||
| 		IRule<AggWrVO> orgPermissionRule = new WrCheckMaterialPermissionRule(); | ||||
| 		processer.addBeforeRule(orgPermissionRule); | ||||
| 		IRule<AggWrVO> moCloseRule = new WrCheckMoIsCloseRule(); | ||||
| 		processer.addBeforeRule(moCloseRule); | ||||
| 		processer.addBeforeRule(new MMCheckMaterialVirtualRule(WrItemVO.class)); | ||||
| 		IRule<AggWrVO> wrSetDefaultValueWhenInsertRule = new WrSetDefaultValueWhenInsertRule(); | ||||
| 		processer.addBeforeRule(wrSetDefaultValueWhenInsertRule); | ||||
| 		IRule<AggWrVO> wrSetItemDefaultValueRule = new WrSetItemDefaultValueRule(); | ||||
| 		processer.addBeforeRule(wrSetItemDefaultValueRule); | ||||
| 		IRule<AggWrVO> billcodeRule = new MMCreateBillcodeAndTrantypecodeRule("55A4", "vbillcode", "pk_group", "pk_org", | ||||
| 				"vtrantypecode"); | ||||
| 		processer.addBeforeRule(billcodeRule); | ||||
| 		IRule<AggWrVO> wrHeadNotNullRule = new WrHeadNotNullRule(); | ||||
| 		processer.addBeforeRule(wrHeadNotNullRule); | ||||
| 		IRule<AggWrVO> wrBatchCodeRule = new WrCreateBatchCodeRule(); | ||||
| 		processer.addBeforeRule(wrBatchCodeRule); | ||||
| 		IRule<AggWrVO> wrClearNullProductBodyRule = new WrClearNullBodyRule(); | ||||
| 		processer.addBeforeRule(wrClearNullProductBodyRule); | ||||
| 		processer.addBeforeRule(new WrRowNoRule()); | ||||
| 		IRule<AggWrVO> wrQualityFilterRule = new WrQualityFilterRule(); | ||||
| 		processer.addBeforeRule(wrQualityFilterRule); | ||||
| 		IRule<AggWrVO> wrPickFilterRule = new WrPickFilterRule(); | ||||
| 		processer.addBeforeRule(wrPickFilterRule); | ||||
| 		IRule<AggWrVO> wrOutputNotNullRule = new WrOutputNotNullRule(); | ||||
| 		processer.addBeforeRule(wrOutputNotNullRule); | ||||
| 		IRule<AggWrVO> wrNoneMainProductBomCheckRule = new WrNoneMainProductBomCheckRule(); | ||||
| 		processer.addBeforeRule(wrNoneMainProductBomCheckRule); | ||||
| 		IRule<AggWrVO> wrConsumeNotNullRule = new WrPickNotNullRule(); | ||||
| 		processer.addBeforeRule(wrConsumeNotNullRule); | ||||
| 		IRule<AggWrVO> lengthCheckRule = new FieldLengthCheckRule(); | ||||
| 		processer.addBeforeRule(lengthCheckRule); | ||||
| 		IRule<AggWrVO> wrInsertAndDelInStockBatchCodeBeforeRule = new WrInsertAndDelInStockBatchCodeBeforeRule( | ||||
| 				vbatchsMap); | ||||
| 		processer.addBeforeRule(wrInsertAndDelInStockBatchCodeBeforeRule); | ||||
| 		WrSetQualityVODefaultValueRule wrSetQualityVODefaultValueRule = new WrSetQualityVODefaultValueRule(); | ||||
| 		processer.addBeforeRule(wrSetQualityVODefaultValueRule); | ||||
| 		processer.addBeforeRule(new WrSerialNoCheckCodeRepeat()); | ||||
| 		WrSerialNoAutoCreateBeforeRule wrAutoCreateSnBeforeRule = new WrSerialNoAutoCreateBeforeRule(); | ||||
| 		processer.addBeforeRule(wrAutoCreateSnBeforeRule); | ||||
| 		WrSerialNoCheckRule wrSnCheckRule = new WrSerialNoCheckRule(); | ||||
| 		processer.addBeforeRule(wrSnCheckRule); | ||||
| 		WrSnSynToQualtiyRule synToQRule = new WrSnSynToQualtiyRule(); | ||||
| 		processer.addBeforeRule(synToQRule); | ||||
| 		WrMoSerialNoMarkIRule mosnMarkRule = new WrMoSerialNoMarkIRule(); | ||||
| 		processer.addBeforeRule(mosnMarkRule); | ||||
| 		IRule<AggWrVO> wrCreateBatProdRule = new WrCreateBatProdRule(); | ||||
| 		processer.addBeforeRule(wrCreateBatProdRule); | ||||
| 		processer.addBeforeRule(new WrCheckTranstypeCodeRule()); | ||||
| 	} | ||||
| 
 | ||||
|     private void addAfterRule(AroundProcesser<AggWrVO> processor, Map<String, String> vbatchsMap) { | ||||
|         IRule<AggWrVO> rule = new MMBillCodeCheckAndTrantypeRule("55A4", "vbillcode", "pk_group", "pk_org", "vtrantypecode"); | ||||
|         processor.addAfterRule(rule); | ||||
|         IRule<AggWrVO> wrCreateInStockBatchCodeAfterRule = new WrInsertInStockBatchCodeAfterRule(vbatchsMap); | ||||
|         processor.addAfterRule(wrCreateInStockBatchCodeAfterRule); | ||||
|         processor.addAfterRule(new WrInsertRewriteWrNumForPutPlanRule()); | ||||
|         IRule<AggWrVO> wrMORewriteRule = new WrMORewriteRule(2); | ||||
|         processor.addAfterRule(wrMORewriteRule); | ||||
|         IRule<AggWrVO> moDiscadNumRewriteRule = new MoDiscadNumRewriteRule(2); | ||||
|         processor.addAfterRule(moDiscadNumRewriteRule); | ||||
|         IRule<AggWrVO> snSaveRule = new WrSerialNoSaveRule(); | ||||
|         processor.addAfterRule(snSaveRule); | ||||
|         /** ͬ²½Ð޸ı¸Áϼƻ®Íê³É */ | ||||
|         IRule<AggWrVO> pickMFinishRule = new PickMFinishRule(); | ||||
|         processor.addAfterRule(pickMFinishRule); | ||||
|         /** ******************** */ | ||||
| 	private void addAfterRule(AroundProcesser<AggWrVO> processor, Map<String, String> vbatchsMap) { | ||||
| 		IRule<AggWrVO> rule = new MMBillCodeCheckAndTrantypeRule("55A4", "vbillcode", "pk_group", "pk_org", | ||||
| 				"vtrantypecode"); | ||||
| 		processor.addAfterRule(rule); | ||||
| 		IRule<AggWrVO> wrCreateInStockBatchCodeAfterRule = new WrInsertInStockBatchCodeAfterRule(vbatchsMap); | ||||
| 		processor.addAfterRule(wrCreateInStockBatchCodeAfterRule); | ||||
| 		processor.addAfterRule(new WrInsertRewriteWrNumForPutPlanRule()); | ||||
| 		IRule<AggWrVO> wrMORewriteRule = new WrMORewriteRule(2); | ||||
| 		processor.addAfterRule(wrMORewriteRule); | ||||
| 		IRule<AggWrVO> moDiscadNumRewriteRule = new MoDiscadNumRewriteRule(2); | ||||
| 		processor.addAfterRule(moDiscadNumRewriteRule); | ||||
| 		IRule<AggWrVO> snSaveRule = new WrSerialNoSaveRule(); | ||||
| 		processor.addAfterRule(snSaveRule); | ||||
| 		/** ͬ²½Ð޸ı¸Áϼƻ®Íê³É */ | ||||
| 		IRule<AggWrVO> pickMFinishRule = new PickMFinishRule(); | ||||
| 		processor.addAfterRule(pickMFinishRule); | ||||
| 		/** ******************** */ | ||||
| 
 | ||||
|         if (!this.isOnlyInsert) { | ||||
|             processor.addAfterRule(new WrIsSaveAndApproveRule()); | ||||
|         } | ||||
| 		if (!this.isOnlyInsert) { | ||||
| 			processor.addAfterRule(new WrIsSaveAndApproveRule()); | ||||
| 		} | ||||
| 
 | ||||
|         processor.addAfterRule(new WrAuditAndApplyCheckRule()); | ||||
|         processor.addAfterRule(new WrAuditAndProdInRule()); | ||||
|     } | ||||
| 		processor.addAfterRule(new WrAuditAndApplyCheckRule()); | ||||
| 		processor.addAfterRule(new WrAuditAndProdInRule()); | ||||
| 	} | ||||
| 
 | ||||
|     /** @deprecated */ | ||||
|     @Deprecated | ||||
|     protected IRule<AggWrVO> getMoRewriteRule() { | ||||
|         return null; | ||||
|     } | ||||
| 	/** @deprecated */ | ||||
| 	@Deprecated | ||||
| 	protected IRule<AggWrVO> getMoRewriteRule() { | ||||
| 		return null; | ||||
| 	} | ||||
| 
 | ||||
|     /** @deprecated */ | ||||
|     @Deprecated | ||||
|     protected IRule<AggWrVO> getMoDiscadNumRewriteRule() { | ||||
|         return null; | ||||
|     } | ||||
| 	/** @deprecated */ | ||||
| 	@Deprecated | ||||
| 	protected IRule<AggWrVO> getMoDiscadNumRewriteRule() { | ||||
| 		return null; | ||||
| 	} | ||||
| 
 | ||||
|     /** @deprecated */ | ||||
|     @Deprecated | ||||
|     protected IRule<AggWrVO> getAuditRule() { | ||||
|         return null; | ||||
|     } | ||||
| 	/** @deprecated */ | ||||
| 	@Deprecated | ||||
| 	protected IRule<AggWrVO> getAuditRule() { | ||||
| 		return null; | ||||
| 	} | ||||
| 
 | ||||
|     public boolean isOnlyInsert() { | ||||
|         return this.isOnlyInsert; | ||||
|     } | ||||
| 	public boolean isOnlyInsert() { | ||||
| 		return this.isOnlyInsert; | ||||
| 	} | ||||
| 
 | ||||
|     public void setOnlyInsert(boolean isOnlyInsert) { | ||||
|         this.isOnlyInsert = isOnlyInsert; | ||||
|     } | ||||
| 	public void setOnlyInsert(boolean isOnlyInsert) { | ||||
| 		this.isOnlyInsert = isOnlyInsert; | ||||
| 	} | ||||
| } | ||||
|  |  | |||
|  | @ -0,0 +1,70 @@ | |||
| package nc.bs.mmpac.wr.rule; | ||||
| 
 | ||||
| import nc.impl.pubapp.pattern.rule.IRule; | ||||
| import nc.util.mmf.framework.base.MMArrayUtil; | ||||
| import nc.util.mmf.framework.base.MMValueCheck; | ||||
| import nc.util.mmpac.wr.WrCheckRuleUtil; | ||||
| import nc.vo.mmpac.wr.entity.AggWrVO; | ||||
| import nc.vo.mmpac.wr.entity.WrItemVO; | ||||
| import nc.vo.mmpac.wr.entity.WrVO; | ||||
| import nc.vo.mmpac.wr.enumeration.WrProdModeEnum; | ||||
| import nc.vo.pub.VOStatus; | ||||
| import nc.vo.pubapp.AppContext; | ||||
| 
 | ||||
| /** | ||||
|  * 生产报告新增时,设置默认值规则 | ||||
|  *  | ||||
|  * @since 6.1 | ||||
|  * @author zhoudi | ||||
|  */ | ||||
| public class WrSetDefaultValueWhenInsertRule implements IRule<AggWrVO> { | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void process(AggWrVO[] vos) { | ||||
| 
 | ||||
| 		if (MMValueCheck.isEmpty(vos)) { | ||||
| 			return; | ||||
| 		} | ||||
| 
 | ||||
| 		WrVO headVO; | ||||
| 
 | ||||
| 		for (AggWrVO aggVO : vos) { | ||||
| 
 | ||||
| 			headVO = (WrVO) aggVO.getParent(); | ||||
| 
 | ||||
| 			if (MMValueCheck.isEmpty(headVO)) { | ||||
| 				continue; | ||||
| 			} | ||||
| 
 | ||||
| 			// 新增状态 | ||||
| 			headVO.setStatus(VOStatus.NEW); | ||||
| 
 | ||||
| 			// 制单人、制单时间 | ||||
| 			headVO.setBillmaker(AppContext.getInstance().getPkUser()); | ||||
| 			if (headVO.getDmakedate() == null) { | ||||
| 				headVO.setDmakedate(AppContext.getInstance().getBusiDate()); | ||||
| 			} | ||||
| 
 | ||||
| 			if (!WrProdModeEnum.FLOW.equalsValue(vos[0].getParentVO().getFprodmode())) { | ||||
| 				continue; | ||||
| 			} | ||||
| 			WrItemVO[] wrItemVOs = (WrItemVO[]) aggVO.getChildren(WrItemVO.class); | ||||
| 			if (MMArrayUtil.isEmpty(wrItemVOs)) { | ||||
| 				continue; | ||||
| 			} | ||||
| 			// 生产部门等,表体字段均相等,则同步表体字段到表头 | ||||
| 			for (String[] headitemKey : this.headKeyToitemKey) { | ||||
| 				if (WrCheckRuleUtil.isItemKeyValueAllSame(wrItemVOs, headitemKey[1])) { | ||||
| 					headVO.setAttributeValue(headitemKey[0], wrItemVOs[0].getAttributeValue(headitemKey[1])); | ||||
| 				} | ||||
| 			} | ||||
| 			if (MMValueCheck.isEmpty(headVO.getCdeptvid()) && MMValueCheck.isNotEmpty(headVO.getCdeptid())) { | ||||
| 				headVO.setCdeptid(null); | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	private String[][] headKeyToitemKey = { { WrVO.CDEPTID, WrItemVO.CBDEPTID }, { WrVO.CDEPTVID, WrItemVO.CBDEPTVID }, | ||||
| 			{ WrVO.CWKID, WrItemVO.CBWKID }, { WrVO.CTEAMID, WrItemVO.CBTEAMID }, { WrVO.CSHIFTID, WrItemVO.CBSHIFTID }, | ||||
| 			{ WrVO.CWORKMANID, WrItemVO.CBWORKMANID } }; | ||||
| } | ||||
|  | @ -18,89 +18,78 @@ import nc.vo.pub.BusinessException; | |||
| 
 | ||||
| import java.util.ArrayList; | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| public class PickMFinishRule | ||||
|         extends Object | ||||
|         implements IRule<AggWrVO> | ||||
| { | ||||
|     public void process(AggWrVO[] vos) { | ||||
|         if (MMValueCheck.isEmpty(vos)) { | ||||
|             return; | ||||
|         } | ||||
|         /** | ||||
|          *  业务逻辑: | ||||
|          *			1.根据生产报告子表中生产订单行查看生产订单明细表 | ||||
|          *			2.查看生产订单明细行的状态是否为完工(2) | ||||
|          *			3.若为完工状态,则根据生成报告子表中生产订单行查询备料计划 | ||||
|          *			4.修改备料计划为完成状态(3) | ||||
|          */ | ||||
|         for(int i = 0; i < vos.length; i++) { | ||||
|             AggWrVO vo = vos[i]; | ||||
|             WrItemVO[] items =  vo.getChildrenVO(); | ||||
|             //循环生产报告子表 | ||||
|             for(int j = 0; j < items.length; j++) { | ||||
|                 WrItemVO item = items[j]; | ||||
|                 String cbmobid = item.getCbmobid(); | ||||
|                 String[] keys = {cbmobid}; | ||||
|                 //生产订单行查询 | ||||
|                 PMOItemVO[] pmoItemvos = (new PMOItemVOQueryBP()).getPMOItemVOsByids(keys); | ||||
|                 //查看生产订单行状态是否为完工(2) | ||||
|                 if(pmoItemvos.length > 0) { | ||||
|                     PMOItemVO pmoItem = pmoItemvos[0]; | ||||
|                     int fitemStatus = pmoItem.getFitemstatus(); | ||||
|                     if(fitemStatus != 2) { | ||||
|                         continue; | ||||
|                     } | ||||
|                     //根据生产订单行查询备料计划 | ||||
| public class PickMFinishRule extends Object implements IRule<AggWrVO> { | ||||
| 	public void process(AggWrVO[] vos) { | ||||
| 		if (MMValueCheck.isEmpty(vos)) { | ||||
| 			return; | ||||
| 		} | ||||
| 		/** | ||||
| 		 * 业务逻辑: 1.根据生产报告子表中生产订单行查看生产订单明细表 2.查看生产订单明细行的状态是否为完工(2) | ||||
| 		 * 3.若为完工状态,则根据生成报告子表中生产订单行查询备料计划 4.修改备料计划为完成状态(3) | ||||
| 		 */ | ||||
| 		for (int i = 0; i < vos.length; i++) { | ||||
| 			AggWrVO vo = vos[i]; | ||||
| 			WrItemVO[] items = vo.getChildrenVO(); | ||||
| 			// 循环生产报告子表 | ||||
| 			for (int j = 0; j < items.length; j++) { | ||||
| 				WrItemVO item = items[j]; | ||||
| 				String cbmobid = item.getCbmobid(); | ||||
| 				String[] keys = { cbmobid }; | ||||
| 				// 生产订单行查询 | ||||
| 				PMOItemVO[] pmoItemvos = (new PMOItemVOQueryBP()).getPMOItemVOsByids(keys); | ||||
| 				// 查看生产订单行状态是否为完工(2) | ||||
| 				if (pmoItemvos.length > 0) { | ||||
| 					PMOItemVO pmoItem = pmoItemvos[0]; | ||||
| 					int fitemStatus = pmoItem.getFitemstatus(); | ||||
| 					if (fitemStatus != 2) { | ||||
| 						continue; | ||||
| 					} | ||||
| 					// 根据生产订单行查询备料计划 | ||||
| //         		BillQuery<AggPickmVO> query = new BillQuery<AggPickmVO>(AggPickmVO.class); | ||||
| //         		AggPickmVO[] aggVOs = (AggPickmVO[])query.query(keys); | ||||
| 
 | ||||
|                     String whereSql = "nvl(mm_pickm.dr,0) = 0 and mm_pickm.vsourcemorowid = '" + cbmobid + "'"; | ||||
|                     IMDPersistenceQueryService aggvoQueryService = NCLocator.getInstance().lookup(IMDPersistenceQueryService.class); | ||||
|                     // 根据主键查询得到aggvo | ||||
|                     try { | ||||
|                         @SuppressWarnings("unchecked") | ||||
|                         ArrayList<AggPickmVO> aggVOs = (ArrayList<AggPickmVO>)aggvoQueryService.queryBillOfVOByCond(AggPickmVO.class, whereSql, true, false); | ||||
|                         if(aggVOs.size() <= 0) { | ||||
|                             continue; | ||||
|                         } | ||||
|                         //数组转换 | ||||
|                         AggPickmVO[] aggVOsArr = new AggPickmVO[aggVOs.size()]; | ||||
|                         boolean flag = false; | ||||
|                         for(int z=0; z<aggVOs.size(); z++) { | ||||
|                             AggPickmVO aggPickmVO = aggVOs.get(z); | ||||
|                             PickmHeadVO pickmHeadVO = aggPickmVO.getParentVO(); | ||||
|                             Integer fbillstatus = pickmHeadVO.getFbillstatus(); | ||||
|                             if(fbillstatus != 2){ | ||||
|                                 aggVOsArr[z] =aggVOs.get(z); | ||||
|                                 flag = true; | ||||
|                             } | ||||
| 					String whereSql = "nvl(mm_pickm.dr,0) = 0 and mm_pickm.vsourcemorowid = '" + cbmobid + "'"; | ||||
| 					IMDPersistenceQueryService aggvoQueryService = NCLocator.getInstance() | ||||
| 							.lookup(IMDPersistenceQueryService.class); | ||||
| 					// 根据主键查询得到aggvo | ||||
| 					try { | ||||
| 						@SuppressWarnings("unchecked") | ||||
| 						ArrayList<AggPickmVO> aggVOs = (ArrayList<AggPickmVO>) aggvoQueryService | ||||
| 								.queryBillOfVOByCond(AggPickmVO.class, whereSql, true, false); | ||||
| 						if (aggVOs.size() <= 0) { | ||||
| 							continue; | ||||
| 						} | ||||
| 						// 数组转换 | ||||
| 						AggPickmVO[] aggVOsArr = new AggPickmVO[aggVOs.size()]; | ||||
| 						boolean flag = false; | ||||
| 						for (int z = 0; z < aggVOs.size(); z++) { | ||||
| 							AggPickmVO aggPickmVO = aggVOs.get(z); | ||||
| 							PickmHeadVO pickmHeadVO = aggPickmVO.getParentVO(); | ||||
| 							Integer fbillstatus = pickmHeadVO.getFbillstatus(); | ||||
| 							if (fbillstatus != 2) { | ||||
| 								aggVOsArr[z] = aggVOs.get(z); | ||||
| 								flag = true; | ||||
| 							} | ||||
| 
 | ||||
|                         } | ||||
|                         if(flag){ | ||||
|                             //备料计划完工 | ||||
|                             IPickmMaintainService ipickmMaintainService = NCLocator.getInstance().lookup(IPickmMaintainService.class); | ||||
|                             ipickmMaintainService.finishPickm(aggVOsArr); | ||||
|                         } | ||||
|                     }catch(BusinessException e) { | ||||
|                         // TODO Auto-generated catch block | ||||
|                         e.printStackTrace(); | ||||
|                     } | ||||
| 						} | ||||
| 						if (flag) { | ||||
| 							// 备料计划完工 | ||||
| 							IPickmMaintainService ipickmMaintainService = NCLocator.getInstance() | ||||
| 									.lookup(IPickmMaintainService.class); | ||||
| 							ipickmMaintainService.finishPickm(aggVOsArr); | ||||
| 						} | ||||
| 					} catch (BusinessException e) { | ||||
| 						// TODO Auto-generated catch block | ||||
| 						e.printStackTrace(); | ||||
| 					} | ||||
| 
 | ||||
|                 } | ||||
| 				} | ||||
| 
 | ||||
|             } | ||||
|         } | ||||
|         AggWrChangeVO[] aggChangeVOs = WrBusiVOToChangeVO.changeOnlySerialNoVO(vos); | ||||
| 			} | ||||
| 		} | ||||
| 		AggWrChangeVO[] aggChangeVOs = WrBusiVOToChangeVO.changeOnlySerialNoVO(vos); | ||||
| 
 | ||||
|         WrSerialNoDocInsertControl inSertControl = new WrSerialNoDocInsertControl(); | ||||
|         inSertControl.process(aggChangeVOs); | ||||
|     } | ||||
| 		WrSerialNoDocInsertControl inSertControl = new WrSerialNoDocInsertControl(); | ||||
| 		inSertControl.process(aggChangeVOs); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
|  | @ -0,0 +1,32 @@ | |||
| package nc.bs.pub.action; | ||||
| 
 | ||||
| import nc.bs.mmpac.pmo.pac0002.bp.PMOCommitBP; | ||||
| import nc.bs.mmpac.pmo.pac0002.flowbiz.PMOCommitFlowCheckRule; | ||||
| import nc.bs.mmpac.pmo.pac0002.pluginpoint.PMOPluginPoint; | ||||
| import nc.bs.pubapp.pf.action.AbstractPfAction; | ||||
| import nc.impl.pubapp.pattern.rule.processer.CompareAroundProcesser; | ||||
| import nc.vo.mmpac.pmo.pac0002.entity.PMOAggVO; | ||||
| import nc.bs.mmpac.pmo.pac0002.bp.rule.saveBeforeCheckRule; | ||||
| 
 | ||||
| public class N_55A2_SAVE extends AbstractPfAction<PMOAggVO> { | ||||
| 	protected CompareAroundProcesser<PMOAggVO> getCompareAroundProcesserWithRules(Object userObj) { | ||||
| 		CompareAroundProcesser<PMOAggVO> processer = new CompareAroundProcesser<PMOAggVO>(PMOPluginPoint.COMMIT); | ||||
| 
 | ||||
| 		addBeforeRule(processer); | ||||
| 
 | ||||
| 		addAfterRule(processer); | ||||
| 		return processer; | ||||
| 	} | ||||
| 
 | ||||
| 	private void addBeforeRule(CompareAroundProcesser<PMOAggVO> processer) { | ||||
| 		processer.addBeforeFinalRule(new PMOCommitFlowCheckRule()); | ||||
| 		processer.addBeforeRule(new saveBeforeCheckRule()); | ||||
| 	} | ||||
| 
 | ||||
| 	private void addAfterRule(CompareAroundProcesser<PMOAggVO> processer) { | ||||
| 	} | ||||
| 
 | ||||
| 	protected PMOAggVO[] processBP(Object userObj, PMOAggVO[] clientFullVOs, PMOAggVO[] originBills) { | ||||
| 		return (new PMOCommitBP()).commit(clientFullVOs, originBills); | ||||
| 	} | ||||
| } | ||||
|  | @ -21,10 +21,8 @@ import nc.vo.pub.BusinessException; | |||
| import nc.vo.pubapp.pattern.exception.ExceptionUtils; | ||||
| import nc.pubitf.mmpac.pickm.pub.IPickmPubQueryService; | ||||
| 
 | ||||
| 
 | ||||
| /** | ||||
|  * 适配2312MPR运算时把合同编号合同销售订单号标前项目号带到计划订单 | ||||
|  * zhangxinah | ||||
|  * 巠饜2312MPR堍呾奀參磁肮晤瘍磁肮种忮隆等瘍梓ゴ砐醴瘍湍善數赫隆等 zhangxinah | ||||
|  */ | ||||
| 
 | ||||
| public class PloProdDeptRule extends Object implements IRule<AggregatedPoVO> { | ||||
|  | @ -32,7 +30,7 @@ public class PloProdDeptRule extends Object implements IRule<AggregatedPoVO> { | |||
| 		if (null == vos) { | ||||
| 			return; | ||||
| 		} | ||||
| 		 | ||||
| 
 | ||||
| 		ArrayList<String> vsrcbidList = new ArrayList<>(); | ||||
| 		Map<String, List<String>> map = new HashMap<String, List<String>>(); | ||||
| 		for (AggregatedPoVO agg : vos) { | ||||
|  | @ -55,8 +53,8 @@ public class PloProdDeptRule extends Object implements IRule<AggregatedPoVO> { | |||
| 					vids.add(vid); | ||||
| 				} | ||||
| 			} | ||||
| 			String vsrcbid = plo.getVsrcbid();// 来源单据表体主键 | ||||
| 			int fdemandbill = plo.getFdemandbill();// 需求来源 | ||||
| 			String vsrcbid = plo.getVsrcbid();// 懂埭等擂桶极翋瑩 | ||||
| 			int fdemandbill = plo.getFdemandbill();// 剒А懂埭 | ||||
| 			if (PoSourceEnum.COMPUT == posource && fdemandbill == 1) { | ||||
| 				vsrcbidList.add(vsrcbid); | ||||
| 			} | ||||
|  | @ -72,23 +70,23 @@ public class PloProdDeptRule extends Object implements IRule<AggregatedPoVO> { | |||
| 			pickmVOMap.getClass(); | ||||
| 			for (AggregatedPoVO agg : vos) { | ||||
| 				PoVO plo = agg.getParentVO(); | ||||
| 				String vsrcbid = plo.getVsrcbid();// 来源单据表体主键 | ||||
| 				String vsrcbid = plo.getVsrcbid();// 懂埭等擂桶极翋瑩 | ||||
| 				AggPickmVO aggPickmVOData = pickmVOMap.get(vsrcbid); | ||||
| 				if (aggPickmVOData != null) { | ||||
| 					PickmItemVO[] children = (PickmItemVO[]) aggPickmVOData.getChildren(PickmItemVO.class); | ||||
| 					String vbdef5 = "";// 合同编号 | ||||
| 					String vbdef6 = "";// 合同销售订单号 | ||||
| 					String vbdef7 = "";// 标前项目号 | ||||
| 					String vbdef5 = "";// 磁肮晤瘍 | ||||
| 					String vbdef6 = "";// 磁肮种忮隆等瘍 | ||||
| 					String vbdef7 = "";// 梓ゴ砐醴瘍 | ||||
| 					for (PickmItemVO pickmItemVO : children) { | ||||
| 						if (pickmItemVO.getCpickm_bid().equals(vsrcbid)) { | ||||
| 							vbdef5 = pickmItemVO.getVbdef5();// 合同编号 | ||||
| 							vbdef6 = pickmItemVO.getVbdef6();// 合同销售订单号 | ||||
| 							vbdef7 = pickmItemVO.getVbdef7();// 标前项目号 | ||||
| 							vbdef5 = pickmItemVO.getVbdef5();// 磁肮晤瘍 | ||||
| 							vbdef6 = pickmItemVO.getVbdef6();// 磁肮种忮隆等瘍 | ||||
| 							vbdef7 = pickmItemVO.getVbdef7();// 梓ゴ砐醴瘍 | ||||
| 						} | ||||
| 					} | ||||
| 					plo.setVdef2(vbdef5);// 合同编号 | ||||
| 					plo.setVdef3(vbdef6);// 合同销售订单号 | ||||
| 					plo.setVdef4(vbdef7);// 标前项目号 | ||||
| 					plo.setVdef2(vbdef5);// 磁肮晤瘍 | ||||
| 					plo.setVdef3(vbdef6);// 磁肮种忮隆等瘍 | ||||
| 					plo.setVdef4(vbdef7);// 梓ゴ砐醴瘍 | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
|  |  | |||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
		Loading…
	
		Reference in New Issue