请购单推送采购订单增加最终需求数量校验
This commit is contained in:
		
							parent
							
								
									f8c0b93110
								
							
						
					
					
						commit
						9ab4bf8bdc
					
				|  | @ -0,0 +1,269 @@ | |||
| // | ||||
| // Source code recreated from a .class file by IntelliJ IDEA | ||||
| // (powered by FernFlower decompiler) | ||||
| // | ||||
| 
 | ||||
| package nccloud.web.pu.poorder.transfer.action; | ||||
| 
 | ||||
| import java.util.ArrayList; | ||||
| import java.util.HashMap; | ||||
| import java.util.HashSet; | ||||
| import java.util.Iterator; | ||||
| import java.util.LinkedHashMap; | ||||
| import java.util.List; | ||||
| import java.util.Map; | ||||
| import java.util.Set; | ||||
| import nc.itf.scmpub.reference.uap.bd.supplier.SupplierPubService; | ||||
| import nc.itf.uap.pf.IPfExchangeService; | ||||
| import nc.vo.ml.NCLangRes4VoTransl; | ||||
| import nc.vo.pu.m20.entity.PraybillHeaderVO; | ||||
| import nc.vo.pu.m20.entity.PraybillItemVO; | ||||
| import nc.vo.pu.m20.entity.PraybillVO; | ||||
| import nc.vo.pu.m21.entity.OrderItemVO; | ||||
| import nc.vo.pu.m21.entity.OrderVO; | ||||
| import nc.vo.pub.BusinessException; | ||||
| import nc.vo.pub.CircularlyAccessibleValueObject; | ||||
| import nc.vo.pub.compiler.PfParameterVO; | ||||
| import nc.vo.pub.lang.UFDate; | ||||
| import nc.vo.pub.lang.UFDateTime; | ||||
| import nc.vo.pubapp.pattern.exception.ExceptionUtils; | ||||
| import nc.vo.pubapp.pattern.model.entity.bill.AbstractBill; | ||||
| import nc.vo.scmpub.res.billtype.POBillType; | ||||
| import nc.vo.scmpub.util.TransferSortUtil; | ||||
| import nccloud.dto.pu.poorder.entity.PkTsVODTO; | ||||
| import nccloud.dto.pu.poorder.entity.TransferData; | ||||
| import nccloud.dto.pu.poorder.entity.TransferInfo; | ||||
| import nccloud.framework.core.json.IJson; | ||||
| import nccloud.framework.service.ServiceLocator; | ||||
| import nccloud.framework.web.json.JsonFactory; | ||||
| import nccloud.framework.web.processor.template.BillGridConvertProcessor; | ||||
| import nccloud.framework.web.ui.pattern.billgrid.BillGrid; | ||||
| import nccloud.pubitf.pu.poorder.transfer.service.ITransferVOQueryService; | ||||
| 
 | ||||
| public class Transfer20To21Action extends AbstractTransferAction { | ||||
|     protected static final int BEGININDEX = 0; | ||||
|     protected static final int ENDINDEX = 20; | ||||
| 
 | ||||
|     public Transfer20To21Action() { | ||||
|     } | ||||
| 
 | ||||
|     public AbstractBill[] getDestAbstractBill(TransferInfo transferInfo, String read) throws Exception { | ||||
|         PraybillVO[] sorceVOs = this.getAggVO(read); | ||||
|         for (PraybillVO vo : sorceVOs) { | ||||
|             for (PraybillItemVO itemVO:vo.getBVO()){ | ||||
|                 if(null!=itemVO.getAttributeValue("vbdef33") && itemVO.getNastnum().compareTo(itemVO.getAttributeValue("vbdef33"))<0){ | ||||
|                     throw new BusinessException("采购数量大于最终需求数量不能生成采购订单!"); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|         IPfExchangeService service = (IPfExchangeService)ServiceLocator.find(IPfExchangeService.class); | ||||
|         OrderVO[] vos = (OrderVO[])service.runChangeDataAry(POBillType.PrayBill.getCode(), POBillType.Order.getCode(), sorceVOs, (PfParameterVO)null); | ||||
|         vos = (OrderVO[])(new TransferSortUtil("vsourcerowno", "vsourcecode")).sort(vos); | ||||
|         if (vos != null && vos.length > 0) { | ||||
|             for(OrderVO orderVO : vos) { | ||||
|                 UFDate dbilldate = orderVO.getHVO().getDbilldate(); | ||||
|                 OrderItemVO[] bvos = orderVO.getBVO(); | ||||
| 
 | ||||
|                 for(OrderItemVO bvo : bvos) { | ||||
|                     UFDate dplanarrvdate = bvo.getDplanarrvdate(); | ||||
|                     if (dbilldate != null && (null == dplanarrvdate || dbilldate.compareTo(dplanarrvdate) > 0)) { | ||||
|                         bvo.setDplanarrvdate(dbilldate); | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         return vos; | ||||
|     } | ||||
| 
 | ||||
|     public Boolean isNeedRelateCT() { | ||||
|         return Boolean.TRUE; | ||||
|     } | ||||
| 
 | ||||
|     private PraybillVO[] getAggVOByBillGrid(String read) { | ||||
|         IJson json = JsonFactory.create(); | ||||
|         BillGrid[] billGrids = (BillGrid[])json.fromJson(read, BillGrid[].class); | ||||
|         BillGridConvertProcessor processor = new BillGridConvertProcessor(); | ||||
|         List<PraybillVO> list = new ArrayList(); | ||||
| 
 | ||||
|         for(BillGrid billGrid : billGrids) { | ||||
|             PraybillVO vos = (PraybillVO)processor.fromBillCard(billGrid, "pk_praybill_b"); | ||||
|             list.add(vos); | ||||
|         } | ||||
| 
 | ||||
|         return (PraybillVO[])list.toArray(new PraybillVO[0]); | ||||
|     } | ||||
| 
 | ||||
|     private PraybillVO[] getAggVO(String read) { | ||||
|         IJson json = JsonFactory.create(); | ||||
|         TransferInfo queryInfo = (TransferInfo)json.fromJson(read, TransferInfo.class); | ||||
|         PraybillVO[] aggctvos = null; | ||||
|         Map<String, UFDateTime> idTsHeadMap = this.getIdTsIndex(queryInfo, "pk_praybill"); | ||||
|         Map<String, UFDateTime> idTsIndex = this.getIdTsIndex(queryInfo, "pk_praybill_b"); | ||||
|         Map<String, Map<String, Object>> idUserObjectIndex = this.getBodyIdUserObjectIndex(queryInfo); | ||||
|         if (idTsHeadMap.size() == 0) { | ||||
|             return aggctvos; | ||||
|         } else { | ||||
|             String[] hpks = new String[idTsHeadMap.size()]; | ||||
|             String[] bpks = null; | ||||
|             hpks = (String[])idTsHeadMap.keySet().toArray(hpks); | ||||
|             if (idTsIndex != null && idTsIndex.size() > 0) { | ||||
|                 bpks = new String[idTsIndex.size()]; | ||||
|                 bpks = (String[])idTsIndex.keySet().toArray(bpks); | ||||
|             } | ||||
| 
 | ||||
|             ITransferVOQueryService query = (ITransferVOQueryService)ServiceLocator.find(ITransferVOQueryService.class); | ||||
|             PraybillHeaderVO[] hvos = (PraybillHeaderVO[])query.query(hpks, PraybillHeaderVO.class); | ||||
|             PraybillItemVO[] bvos = (PraybillItemVO[])query.query(bpks, PraybillItemVO.class); | ||||
|             this.tsCheck(idTsHeadMap, hvos); | ||||
|             if (hvos == null) { | ||||
|                 return aggctvos; | ||||
|             } else { | ||||
|                 aggctvos = this.getAggCtPuVOS(hvos, bvos, idTsHeadMap, idTsIndex, idUserObjectIndex); | ||||
|                 return aggctvos; | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     private void tsCheck(Map<String, UFDateTime> idTsHeadMap, PraybillHeaderVO[] hvos) { | ||||
|         Map<String, UFDateTime> hvoHeadTsMap = new HashMap(); | ||||
| 
 | ||||
|         for(PraybillHeaderVO hvo : hvos) { | ||||
|             hvoHeadTsMap.put(hvo.getPk_praybill(), hvo.getTs()); | ||||
|         } | ||||
| 
 | ||||
|         for(Map.Entry<String, UFDateTime> item : idTsHeadMap.entrySet()) { | ||||
|             if (item.getValue() == null || hvoHeadTsMap.get(item.getKey()) == null || !((UFDateTime)item.getValue()).equals(hvoHeadTsMap.get(item.getKey()))) { | ||||
|                 ExceptionUtils.wrappBusinessException(NCLangRes4VoTransl.getNCLangRes().getStrByID("4004100_0", "04004100-0048")); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|     } | ||||
| 
 | ||||
|     private Map<String, UFDateTime> getIdTsIndex(TransferInfo queryInfo, String attrcode) { | ||||
|         Map<String, UFDateTime> idTsIndex = new LinkedHashMap(); | ||||
|         TransferData[] tData = queryInfo.getData(); | ||||
|         if (tData != null && tData.length > 0) { | ||||
|             for(TransferData element : tData) { | ||||
|                 if ("pk_praybill".equalsIgnoreCase(attrcode)) { | ||||
|                     PkTsVODTO head = element.getHead(); | ||||
|                     if (head != null) { | ||||
|                         idTsIndex.put(head.getPk(), head.getTs()); | ||||
|                     } | ||||
|                 } else { | ||||
|                     PkTsVODTO[] bodys = element.getBodys(); | ||||
|                     if (bodys != null) { | ||||
|                         for(PkTsVODTO body : bodys) { | ||||
|                             String pk = body.getPk(); | ||||
|                             pk = pk.length() > 20 ? pk.substring(0, 20) : pk; | ||||
|                             idTsIndex.put(pk, body.getTs()); | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         return idTsIndex; | ||||
|     } | ||||
| 
 | ||||
|     private Map<String, Map<String, Object>> getBodyIdUserObjectIndex(TransferInfo queryInfo) { | ||||
|         Map<String, Map<String, Object>> idTsIndex = new HashMap(); | ||||
|         TransferData[] tData = queryInfo.getData(); | ||||
|         if (tData != null && tData.length > 0) { | ||||
|             for(TransferData element : tData) { | ||||
|                 PkTsVODTO[] bodys = element.getBodys(); | ||||
|                 if (bodys != null) { | ||||
|                     for(PkTsVODTO body : bodys) { | ||||
|                         Map<String, Object> userObject = body.getUserObject(); | ||||
|                         Map<String, Object> var14 = userObject != null ? userObject : new HashMap(); | ||||
|                         idTsIndex.put(body.getPk(), var14); | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         return idTsIndex; | ||||
|     } | ||||
| 
 | ||||
|     private PraybillVO[] getAggCtPuVOS(PraybillHeaderVO[] hvos, PraybillItemVO[] bvos, Map<String, UFDateTime> idTsHeadMap, Map<String, UFDateTime> idTsIndex, Map<String, Map<String, Object>> idUserObjectIndex) { | ||||
|         Set<String> supplieroidList = new HashSet(); | ||||
|         Iterator<Map.Entry<String, Map<String, Object>>> iterator1 = idUserObjectIndex.entrySet().iterator(); | ||||
|         if (idUserObjectIndex != null && idUserObjectIndex.size() > 0) { | ||||
|             while(iterator1.hasNext()) { | ||||
|                 Map.Entry<String, Map<String, Object>> next = (Map.Entry)iterator1.next(); | ||||
|                 Map<String, Object> object = (Map)next.getValue(); | ||||
|                 String pk_suggestsupplier = String.valueOf(object.get("pk_suggestsupplier")); | ||||
|                 if (pk_suggestsupplier != null) { | ||||
|                     supplieroidList.add(pk_suggestsupplier); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         Map<String, String> vidsByOids = SupplierPubService.querySupplierVidsByOids((String[])supplieroidList.toArray(new String[supplieroidList.size()])); | ||||
|         PraybillVO[] aggvos = new PraybillVO[hvos.length]; | ||||
| 
 | ||||
|         for(int n = 0; n < aggvos.length; ++n) { | ||||
|             hvos[n].setTs((UFDateTime)idTsHeadMap.get(hvos[n].getPk_praybill())); | ||||
|             PraybillVO aggvo = new PraybillVO(); | ||||
|             aggvo.setParentVO(hvos[n]); | ||||
|             String pk_praybill = hvos[n].getPk_praybill(); | ||||
|             List<PraybillItemVO> lbvo = new ArrayList(); | ||||
|             if (bvos != null) { | ||||
|                 for(PraybillItemVO bvo : bvos) { | ||||
|                     String pk_praybill_b = bvo.getPk_praybill_b(); | ||||
|                     bvo.setTs((UFDateTime)idTsIndex.get(pk_praybill_b)); | ||||
|                     Iterator<Map.Entry<String, Map<String, Object>>> iterator = idUserObjectIndex.entrySet().iterator(); | ||||
|                     if (idUserObjectIndex != null && idUserObjectIndex.size() > 0) { | ||||
|                         while(iterator.hasNext()) { | ||||
|                             Map.Entry<String, Map<String, Object>> next = (Map.Entry)iterator.next(); | ||||
|                             if (((String)next.getKey()).startsWith(pk_praybill_b)) { | ||||
|                                 Map<String, Object> object = (Map)next.getValue(); | ||||
|                                 PraybillItemVO clone = (PraybillItemVO)bvo.clone(); | ||||
|                                 this.moifyBodyItem(lbvo, clone, object, pk_praybill); | ||||
|                             } | ||||
|                         } | ||||
|                     } else { | ||||
|                         Map<String, Object> hashMap = new HashMap(); | ||||
|                         this.moifyBodyItem(lbvo, bvo, hashMap, pk_praybill); | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
| 
 | ||||
|             if (lbvo != null) { | ||||
|                 PraybillItemVO[] arr = new PraybillItemVO[lbvo.size()]; | ||||
|                 aggvo.setChildrenVO((CircularlyAccessibleValueObject[])lbvo.toArray(arr)); | ||||
| 
 | ||||
|                 for(PraybillItemVO bvo : aggvo.getBVO()) { | ||||
|                     bvo.setPk_suggestsupplier_v(vidsByOids.get(bvo.getPk_suggestsupplier()) == null ? bvo.getPk_suggestsupplier() : (String)vidsByOids.get(bvo.getPk_suggestsupplier())); | ||||
|                 } | ||||
|             } | ||||
| 
 | ||||
|             aggvos[n] = aggvo; | ||||
|         } | ||||
| 
 | ||||
|         return aggvos; | ||||
|     } | ||||
| 
 | ||||
|     private void moifyBodyItem(List<PraybillItemVO> lbvo, PraybillItemVO bvo, Map<String, Object> map, String pk_praybill) { | ||||
|         Map<String, Object> var8 = map != null ? map : new HashMap(); | ||||
|         String nnum = String.valueOf(((Map)var8).get("nnum")); | ||||
|         String nastnum = String.valueOf(((Map)var8).get("nastnum")); | ||||
|         String pk_suggestsupplier = String.valueOf(((Map)var8).get("pk_suggestsupplier")); | ||||
|         if (nnum != null && !"null".equals(nnum) && !"".equals(nnum)) { | ||||
|             bvo.setAttributeValue("nnum", ((Map)var8).get("nnum")); | ||||
|         } | ||||
| 
 | ||||
|         if (nastnum != null && !"null".equals(nastnum) && !"".equals(nastnum)) { | ||||
|             bvo.setAttributeValue("nastnum", ((Map)var8).get("nastnum")); | ||||
|         } | ||||
| 
 | ||||
|         if (pk_suggestsupplier != null && !"null".equals(pk_suggestsupplier) && !"".equals(pk_suggestsupplier)) { | ||||
|             bvo.setPk_suggestsupplier(pk_suggestsupplier); | ||||
|         } | ||||
| 
 | ||||
|         if (bvo.getPk_praybill().equalsIgnoreCase(pk_praybill)) { | ||||
|             lbvo.add(bvo); | ||||
|         } | ||||
| 
 | ||||
|     } | ||||
| } | ||||
		Loading…
	
		Reference in New Issue