采购订单修订审批推送锐制
This commit is contained in:
		
							parent
							
								
									386047337c
								
							
						
					
					
						commit
						558067ddda
					
				| 
						 | 
					@ -0,0 +1,985 @@
 | 
				
			||||||
 | 
					package nc.impl.pu.m21.action;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.ArrayList;
 | 
				
			||||||
 | 
					import java.util.HashMap;
 | 
				
			||||||
 | 
					import java.util.List;
 | 
				
			||||||
 | 
					import java.util.Map;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import nc.bs.pu.m21.action.rule.approve.AfterApprovingSynchronizeRuleRZ;
 | 
				
			||||||
 | 
					import nc.bs.pu.m21.maintain.OrderReviseUpdateBP;
 | 
				
			||||||
 | 
					import nc.bs.pu.m21.maintain.rule.save.SaveTransferMsgRule;
 | 
				
			||||||
 | 
					import nc.bs.pu.m21.plugin.OrderPluginPoint;
 | 
				
			||||||
 | 
					import nc.bs.scmpub.rule.VOSagaFrozenValidateRule;
 | 
				
			||||||
 | 
					import nc.impl.pu.m21.action.rule.approve.ApproveM21AndRewriteCTPayPlan;
 | 
				
			||||||
 | 
					import nc.impl.pu.m21.action.rule.approve.FilterOrderByStatusRule;
 | 
				
			||||||
 | 
					import nc.impl.pu.m21.action.rule.approve.OrderPriceMaintainRule;
 | 
				
			||||||
 | 
					import nc.impl.pu.m21.action.rule.revise.ArrivalOpenCheckRule;
 | 
				
			||||||
 | 
					import nc.impl.pu.m21.action.rule.revise.BrefwhenreturnCheckRule;
 | 
				
			||||||
 | 
					import nc.impl.pu.m21.action.rule.revise.CheckBfinalcloseRule;
 | 
				
			||||||
 | 
					import nc.impl.pu.m21.action.rule.revise.CheckOverPay;
 | 
				
			||||||
 | 
					import nc.impl.pu.m21.action.rule.revise.InvoiceOpenCkeckRule;
 | 
				
			||||||
 | 
					import nc.impl.pu.m21.action.rule.revise.ItemChangeCheckRule;
 | 
				
			||||||
 | 
					import nc.impl.pu.m21.action.rule.revise.ItemRule;
 | 
				
			||||||
 | 
					import nc.impl.pu.m21.action.rule.revise.ModifyStatusOnWayRule;
 | 
				
			||||||
 | 
					import nc.impl.pu.m21.action.rule.revise.ModifySupplyRule;
 | 
				
			||||||
 | 
					import nc.impl.pu.m21.action.rule.revise.NnumCheckRule;
 | 
				
			||||||
 | 
					import nc.impl.pu.m21.action.rule.revise.OneContractCheckRule;
 | 
				
			||||||
 | 
					import nc.impl.pu.m21.action.rule.revise.OpenCheckRule;
 | 
				
			||||||
 | 
					import nc.impl.pu.m21.action.rule.revise.OrderPayPlanVOReviseRule;
 | 
				
			||||||
 | 
					import nc.impl.pu.m21.action.rule.revise.ReviseBudgetCtrlRule;
 | 
				
			||||||
 | 
					import nc.impl.pu.m21.action.rule.revise.ReviseNumCheckRule;
 | 
				
			||||||
 | 
					import nc.impl.pubapp.pattern.data.bill.tool.BillConcurrentTool;
 | 
				
			||||||
 | 
					import nc.impl.pubapp.pattern.database.DataAccessUtils;
 | 
				
			||||||
 | 
					import nc.impl.pubapp.pattern.rule.processer.CompareAroundProcesser;
 | 
				
			||||||
 | 
					import nc.itf.pu.reference.ic.ATPServices;
 | 
				
			||||||
 | 
					import nc.vo.pu.m21.context.OrderContext;
 | 
				
			||||||
 | 
					import nc.vo.pu.m21.entity.OrderFeeVO;
 | 
				
			||||||
 | 
					import nc.vo.pu.m21.entity.OrderHeaderVO;
 | 
				
			||||||
 | 
					import nc.vo.pu.m21.entity.OrderItemVO;
 | 
				
			||||||
 | 
					import nc.vo.pu.m21.entity.OrderMatFeeVO;
 | 
				
			||||||
 | 
					import nc.vo.pu.m21.entity.OrderVO;
 | 
				
			||||||
 | 
					import nc.vo.pu.m21.enumeration.EnumActive;
 | 
				
			||||||
 | 
					import nc.vo.pu.m21.enumeration.EnumRevise;
 | 
				
			||||||
 | 
					import nc.vo.pu.m21.utils.ExtBillHasGrandsonDataUtils;
 | 
				
			||||||
 | 
					import nc.vo.pu.pub.constant.PUEntity;
 | 
				
			||||||
 | 
					import nc.vo.pu.pub.enumeration.POEnumBillStatus;
 | 
				
			||||||
 | 
					import nc.vo.pu.pub.rule.ApprovingEditCheckRule;
 | 
				
			||||||
 | 
					import nc.vo.pu.pub.rule.ApprovingEditSendMsgRule;
 | 
				
			||||||
 | 
					import nc.vo.pu.pub.util.BillQuery;
 | 
				
			||||||
 | 
					import nc.vo.pu.pub.util.BillUpdate;
 | 
				
			||||||
 | 
					import nc.vo.pub.BusinessException;
 | 
				
			||||||
 | 
					import nc.vo.pub.JavaType;
 | 
				
			||||||
 | 
					import nc.vo.pub.VOStatus;
 | 
				
			||||||
 | 
					import nc.vo.pub.lang.UFBoolean;
 | 
				
			||||||
 | 
					import nc.vo.pub.lang.UFDate;
 | 
				
			||||||
 | 
					import nc.vo.pub.lang.UFDateTime;
 | 
				
			||||||
 | 
					import nc.vo.pub.lang.UFDouble;
 | 
				
			||||||
 | 
					import nc.vo.pubapp.AppContext;
 | 
				
			||||||
 | 
					import nc.vo.pubapp.pattern.exception.ExceptionUtils;
 | 
				
			||||||
 | 
					import nc.vo.pubapp.pattern.tool.performance.DeepCloneTool;
 | 
				
			||||||
 | 
					import nc.vo.scmpub.res.billtype.POBillType;
 | 
				
			||||||
 | 
					import nc.vo.scmpub.util.ArrayUtil;
 | 
				
			||||||
 | 
					import nc.vo.scmpub.util.TimeUtils;
 | 
				
			||||||
 | 
					import nccloud.commons.lang.ArrayUtils;
 | 
				
			||||||
 | 
					import nccloud.pubimpl.pu.mobile.service.order.MobAfterReviseForPoOrderImpl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class OrderReviseApproveAction {
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 采购订单修订,审批通过后的交换主键执行更新的操作
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public OrderVO[] approve(OrderVO[] orderVos, OrderContext ctx) {
 | 
				
			||||||
 | 
					        if (ArrayUtils.isEmpty(orderVos)) {
 | 
				
			||||||
 | 
					            return null;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        // 取到client端vo
 | 
				
			||||||
 | 
					//		OrderVO[] cliVOs = orderVos;
 | 
				
			||||||
 | 
					//    BillTransferTool<OrderVO> tool = new BillTransferTool<OrderVO>(orderVos);
 | 
				
			||||||
 | 
					        ExtBillHasGrandsonDataUtils<OrderVO> tool = new ExtBillHasGrandsonDataUtils<OrderVO>(orderVos);
 | 
				
			||||||
 | 
					        DeepCloneTool clone = new DeepCloneTool();
 | 
				
			||||||
 | 
					        //    BillTransferTool<OrderVO> tool = new BillTransferTool<OrderVO>(orderVos);
 | 
				
			||||||
 | 
					        OrderVO[] cliVOs = (OrderVO[])clone.deepClone(orderVos);;
 | 
				
			||||||
 | 
					        String approver = cliVOs[0].getHVO().getApprover();
 | 
				
			||||||
 | 
					        UFDate taudittime =cliVOs[0].getHVO().getTaudittime();
 | 
				
			||||||
 | 
					        Integer forderstatus = cliVOs[0].getHVO().getForderstatus();
 | 
				
			||||||
 | 
					        OrderVO[] voOrginal = tool.getOriginBills();
 | 
				
			||||||
 | 
					        // 通过pk_src查询出原始vo
 | 
				
			||||||
 | 
					        OrderVO[] oldOrgVos = this.queryOldVosByNewVos(cliVOs);
 | 
				
			||||||
 | 
					        if (ArrayUtils.isEmpty(oldOrgVos)) {
 | 
				
			||||||
 | 
					            return null;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        String creator = oldOrgVos[0].getHVO().getCreator(); // 创建人
 | 
				
			||||||
 | 
					        UFDateTime creationtime =oldOrgVos[0].getHVO().getCreationtime(); // 创建时间
 | 
				
			||||||
 | 
					        // 可用量更新前处理
 | 
				
			||||||
 | 
					        this.atpBeforeUpdate(oldOrgVos);
 | 
				
			||||||
 | 
					        // 先查询原始版本vos,对vos加锁,再查询一遍,这时能保证完全锁住vos,获得的数据库vos是正确的
 | 
				
			||||||
 | 
					        BillConcurrentTool utilBill = new BillConcurrentTool();
 | 
				
			||||||
 | 
					        utilBill.lockBill(oldOrgVos);
 | 
				
			||||||
 | 
					        oldOrgVos = this.queryOldVosByNewVos(cliVOs);
 | 
				
			||||||
 | 
					        //获取原始版本的付款协议直接给最新版本使用
 | 
				
			||||||
 | 
					//		OrderPaymentVO[] paymentItem = oldOrgVos[0].getPaymentVO();
 | 
				
			||||||
 | 
					        cliVOs = this.setWriteBackNums(cliVOs, oldOrgVos);
 | 
				
			||||||
 | 
					//		cliVOs = new BillUpdate<OrderVO>().update(cliVOs, voOrginal);
 | 
				
			||||||
 | 
					        // 提交时补充孙表
 | 
				
			||||||
 | 
					//		new FeeDetailVOUtils().setOrderMatFeeVO(cliVOs);
 | 
				
			||||||
 | 
					//		new FeeDetailVOUtils().setOrderMatFeeVO(oldOrgVos);
 | 
				
			||||||
 | 
					//		new FeeDetailVOUtils().setOrderMatFeeVO(voOrginal);
 | 
				
			||||||
 | 
					        try{
 | 
				
			||||||
 | 
					            cliVOs = (OrderVO[])new BillUpdate().update(cliVOs,voOrginal,OrderHeaderVO.PK_ORDER);
 | 
				
			||||||
 | 
					        }catch (BusinessException e){
 | 
				
			||||||
 | 
					            ExceptionUtils.wrappException(e);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        Map<String, String> hmap = new HashMap<String, String>();
 | 
				
			||||||
 | 
					        Map<String, String> bmap = new HashMap<String, String>();
 | 
				
			||||||
 | 
					        OrderVO[] CliVOClone = new OrderVO[cliVOs.length];
 | 
				
			||||||
 | 
					        for (int i = 0; i < CliVOClone.length; i++) {
 | 
				
			||||||
 | 
					            CliVOClone[i] = (OrderVO) cliVOs[i].clone();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        OrderVO[] OrgVoClone = new OrderVO[oldOrgVos.length];
 | 
				
			||||||
 | 
					        for (int i = 0; i < OrgVoClone.length; i++) {
 | 
				
			||||||
 | 
					            OrgVoClone[i] = (OrderVO) oldOrgVos[i].clone();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        this.changePK(cliVOs,oldOrgVos, hmap,bmap);
 | 
				
			||||||
 | 
					        OrderVO[] hisVOs =this.queryNewVosByOldVos(cliVOs);
 | 
				
			||||||
 | 
					        OrderVO[] lastestVOs =this.queryNewVosByOldVos(oldOrgVos);
 | 
				
			||||||
 | 
					//		// 提交时补充孙表
 | 
				
			||||||
 | 
					//		new FeeDetailVOUtils().setOrderMatFeeVO(lastestVOs);
 | 
				
			||||||
 | 
					//		// 提交时补充孙表
 | 
				
			||||||
 | 
					//		new FeeDetailVOUtils().setOrderMatFeeVO(hisVOs);
 | 
				
			||||||
 | 
					        OrgVoClone[0].getHVO().setForderstatus(lastestVOs[0].getHVO().getForderstatus());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // 交换cliVOs主键
 | 
				
			||||||
 | 
					        OrderVO[] newCliVO = this.changeClientVoWithPK(oldOrgVos, lastestVOs, hmap,
 | 
				
			||||||
 | 
					                bmap,forderstatus,approver,taudittime,creator,creationtime);
 | 
				
			||||||
 | 
					        // 交换oldOrgVos主键 此方法返回变量无用,先注掉
 | 
				
			||||||
 | 
					        OrderVO[] newOrgVos = this.changeoldOrgVosWithPK(hisVOs, cliVOs, hmap,
 | 
				
			||||||
 | 
					                bmap);
 | 
				
			||||||
 | 
					        // 更新OrgVO
 | 
				
			||||||
 | 
					//		this.updateOrgVO(newOrgVos, CliVOClone);
 | 
				
			||||||
 | 
					        // 更新clientVO
 | 
				
			||||||
 | 
					        OrderVO[] retVOs = this.updateClientVO(newCliVO, OrgVoClone, ctx);
 | 
				
			||||||
 | 
					        return retVOs;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 方法功能描述:可用量更新前处理。后续会更新主键导致可用量数据不正确,在此提前处理
 | 
				
			||||||
 | 
					     * <p>
 | 
				
			||||||
 | 
					     * <b>参数说明</b>
 | 
				
			||||||
 | 
					     * <p>
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @since 6.0
 | 
				
			||||||
 | 
					     * @author wuxla
 | 
				
			||||||
 | 
					     * @time 2010-7-2 下午01:24:05
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    private void atpBeforeUpdate(OrderVO[] vos) {
 | 
				
			||||||
 | 
					        ATPServices.modifyATPBefore(POBillType.Order.getCode(), vos);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private void changePK(OrderVO[] cliVOs,OrderVO[] oldOrgVos, Map<String, String> hmap, Map<String, String> bmap) {
 | 
				
			||||||
 | 
					        DataAccessUtils d = new DataAccessUtils();
 | 
				
			||||||
 | 
					        List<List<Object>> datas = new ArrayList<List<Object>>();
 | 
				
			||||||
 | 
					        List<List<Object>> srcdatas = new ArrayList<List<Object>>();
 | 
				
			||||||
 | 
					        List<List<Object>> bdatas = new ArrayList<List<Object>>();
 | 
				
			||||||
 | 
					        List<List<Object>> srcbdatas = new ArrayList<List<Object>>();
 | 
				
			||||||
 | 
					        Map<String,String> newkeyhmap = new HashMap<String,String>();
 | 
				
			||||||
 | 
					        Map<String,String> newkeybmap = new HashMap<String,String>();
 | 
				
			||||||
 | 
					        // 费用项
 | 
				
			||||||
 | 
					        List<List<Object>> feeBdatas = new ArrayList<List<Object>>();
 | 
				
			||||||
 | 
					        List<List<Object>> feesrcBdatas = new ArrayList<List<Object>>();
 | 
				
			||||||
 | 
					        // 费用明细
 | 
				
			||||||
 | 
					        List<List<Object>> feeDetailBdatas = new ArrayList<List<Object>>();
 | 
				
			||||||
 | 
					        List<List<Object>> feeDetailsrcBdatas = new ArrayList<List<Object>>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        //简单记录 原始订单 表头主键 A-~ ,修订订单 表头主键B-A
 | 
				
			||||||
 | 
					        //过程如下 三步
 | 
				
			||||||
 | 
					        //A-~,	B-A
 | 
				
			||||||
 | 
					        //A-~,	C-A
 | 
				
			||||||
 | 
					        //B-A,	C-A
 | 
				
			||||||
 | 
					        //B-A,	A-A
 | 
				
			||||||
 | 
					        //第一步 B-A,C-A
 | 
				
			||||||
 | 
					        for (int i = 0; i < cliVOs.length; i++) {
 | 
				
			||||||
 | 
					            // 头
 | 
				
			||||||
 | 
					            OrderHeaderVO voHead = cliVOs[i].getHVO();
 | 
				
			||||||
 | 
					            String pk_srcorder = voHead.getPk_Srcorder();// 获取原始版本表头pk
 | 
				
			||||||
 | 
					            String newhpk ="1ZH" + pk_srcorder.substring(3);
 | 
				
			||||||
 | 
					            hmap.put(pk_srcorder, voHead.getPk_order());
 | 
				
			||||||
 | 
					            newkeyhmap.put(pk_srcorder, newhpk);
 | 
				
			||||||
 | 
					            datas = this.getForeignAddParam(datas, newhpk, voHead.getPk_order());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // 体
 | 
				
			||||||
 | 
					            OrderItemVO[] voBody = cliVOs[i].getBVO();
 | 
				
			||||||
 | 
					            for (OrderItemVO body : voBody) {
 | 
				
			||||||
 | 
					                if (body.getPk_srcorder_b() != null) {
 | 
				
			||||||
 | 
					                    bmap.put(body.getPk_srcorder_b(), body.getPk_order_b());
 | 
				
			||||||
 | 
					//					body.setPk_order_b(body.getPk_srcorder_b());// 将原始版本pk赋值给表体主键,这里需要注意,可能存在修订增行的场景,导致pk_srcorder_b为空,所以这里需要判断一下
 | 
				
			||||||
 | 
					                    String newbpk = "1ZH" + body.getPk_srcorder_b().substring(3);
 | 
				
			||||||
 | 
					                    newkeybmap.put(body.getPk_srcorder_b(), newbpk);
 | 
				
			||||||
 | 
					                    bdatas = this.getForeignAddParam(bdatas, newbpk, body.getPk_order_b());
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                // 物料行对应费用明细
 | 
				
			||||||
 | 
					                OrderMatFeeVO[] matFeeVOs = body.getGrandSonVOS();
 | 
				
			||||||
 | 
					                if(!ArrayUtil.isEmpty(matFeeVOs)){
 | 
				
			||||||
 | 
					                    for (OrderMatFeeVO matFee : matFeeVOs) {
 | 
				
			||||||
 | 
					                        if (matFee.getPk_srcorder_bf() != null) {
 | 
				
			||||||
 | 
					                            bmap.put(matFee.getPk_srcorder_bf(), matFee.getPk_order_bf());
 | 
				
			||||||
 | 
					//					body.setPk_order_b(body.getPk_srcorder_b());// 将原始版本pk赋值给表体主键,这里需要注意,可能存在修订增行的场景,导致pk_srcorder_b为空,所以这里需要判断一下
 | 
				
			||||||
 | 
					                            String newbpk = "1ZH" + matFee.getPk_order_bf().substring(3);
 | 
				
			||||||
 | 
					                            newkeybmap.put(matFee.getPk_srcorder_bf(), newbpk);
 | 
				
			||||||
 | 
					                            feeDetailBdatas = this.getForeignAddParam(feeDetailBdatas, newbpk, matFee.getPk_order_bf());
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            // 费用项
 | 
				
			||||||
 | 
					            OrderFeeVO[] feeVos = cliVOs[i].getOrderFeeVO();
 | 
				
			||||||
 | 
					            if(!ArrayUtil.isEmpty(feeVos)){
 | 
				
			||||||
 | 
					                for (OrderFeeVO fee : feeVos) {
 | 
				
			||||||
 | 
					                    if (fee.getPk_srcorder_f() != null) {
 | 
				
			||||||
 | 
					                        bmap.put(fee.getPk_srcorder_f(), fee.getPk_order_f());
 | 
				
			||||||
 | 
					//					body.setPk_order_b(body.getPk_srcorder_b());// 将原始版本pk赋值给表体主键,这里需要注意,可能存在修订增行的场景,导致pk_srcorder_b为空,所以这里需要判断一下
 | 
				
			||||||
 | 
					                        String newbpk = "1ZH" + fee.getPk_srcorder_f().substring(3);
 | 
				
			||||||
 | 
					                        newkeybmap.put(fee.getPk_srcorder_f(), newbpk);
 | 
				
			||||||
 | 
					                        feeBdatas = this.getForeignAddParam(feeBdatas, newbpk, fee.getPk_order_f());
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        d.update(this.getSql(PUEntity.M21_H_TABLE, OrderHeaderVO.PK_ORDER),
 | 
				
			||||||
 | 
					                new JavaType[] {
 | 
				
			||||||
 | 
					                        JavaType.String, JavaType.String
 | 
				
			||||||
 | 
					                }, datas);
 | 
				
			||||||
 | 
					        d.update(this.getSql(PUEntity.M21_B_TABLE, OrderItemVO.PK_ORDER_B),
 | 
				
			||||||
 | 
					                new JavaType[] {
 | 
				
			||||||
 | 
					                        JavaType.String, JavaType.String
 | 
				
			||||||
 | 
					                }, bdatas);
 | 
				
			||||||
 | 
					        d.update(this.getSql(PUEntity.M21_B_TABLE, OrderHeaderVO.PK_ORDER),
 | 
				
			||||||
 | 
					                new JavaType[] {
 | 
				
			||||||
 | 
					                        JavaType.String, JavaType.String
 | 
				
			||||||
 | 
					                }, datas);
 | 
				
			||||||
 | 
					//		if(feeBdatas.size() != 0){
 | 
				
			||||||
 | 
					        // 费用项
 | 
				
			||||||
 | 
					        d.update(this.getSql(PUEntity.M21_F_TABLE, OrderFeeVO.PK_ORDER_F),
 | 
				
			||||||
 | 
					                new JavaType[] {
 | 
				
			||||||
 | 
					                        JavaType.String, JavaType.String
 | 
				
			||||||
 | 
					                }, feeBdatas);
 | 
				
			||||||
 | 
					        d.update(this.getSql(PUEntity.M21_F_TABLE, OrderHeaderVO.PK_ORDER),
 | 
				
			||||||
 | 
					                new JavaType[] {
 | 
				
			||||||
 | 
					                        JavaType.String, JavaType.String
 | 
				
			||||||
 | 
					                }, datas);
 | 
				
			||||||
 | 
					//		}
 | 
				
			||||||
 | 
					//		if(feeBdatas.size() != 0){
 | 
				
			||||||
 | 
					        // 费用明细
 | 
				
			||||||
 | 
					        d.update(this.getSql(PUEntity.M21_B_F_TABLE, OrderMatFeeVO.PK_ORDER_BF),
 | 
				
			||||||
 | 
					                new JavaType[] {
 | 
				
			||||||
 | 
					                        JavaType.String, JavaType.String
 | 
				
			||||||
 | 
					                }, feeDetailBdatas);
 | 
				
			||||||
 | 
					        d.update(this.getSql(PUEntity.M21_B_F_TABLE, OrderHeaderVO.PK_ORDER),
 | 
				
			||||||
 | 
					                new JavaType[] {
 | 
				
			||||||
 | 
					                        JavaType.String, JavaType.String
 | 
				
			||||||
 | 
					                }, datas);
 | 
				
			||||||
 | 
					        d.update(this.getSql(PUEntity.M21_B_F_TABLE, OrderItemVO.PK_ORDER_B),
 | 
				
			||||||
 | 
					                new JavaType[] {
 | 
				
			||||||
 | 
					                        JavaType.String, JavaType.String
 | 
				
			||||||
 | 
					                }, bdatas);
 | 
				
			||||||
 | 
					//		}
 | 
				
			||||||
 | 
					        //第二步(1)A-~,A-A (2)A-A,B-A  bmap key:A value:B  newkeybmap:key:A value :C
 | 
				
			||||||
 | 
					        List<List<Object>> datas2 = new ArrayList<List<Object>>();
 | 
				
			||||||
 | 
					        List<List<Object>> bdatas2 = new ArrayList<List<Object>>();
 | 
				
			||||||
 | 
					        List<List<Object>> feeDetailBdatas2 = new ArrayList<List<Object>>();
 | 
				
			||||||
 | 
					        List<List<Object>> feeBdatas2 = new ArrayList<List<Object>>();
 | 
				
			||||||
 | 
					        for (int i = 0; i < oldOrgVos.length; i++) {
 | 
				
			||||||
 | 
					            // 头
 | 
				
			||||||
 | 
					            OrderHeaderVO voHead = oldOrgVos[i].getHVO();
 | 
				
			||||||
 | 
					            String pk_order = voHead.getPk_order();
 | 
				
			||||||
 | 
					            if (hmap.containsKey(pk_order)) {
 | 
				
			||||||
 | 
					                srcdatas = this.getForeignAddParam(srcdatas, pk_order, pk_order);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            // 体
 | 
				
			||||||
 | 
					            OrderItemVO[] voBody = oldOrgVos[i].getBVO();
 | 
				
			||||||
 | 
					            for (OrderItemVO body : voBody) {
 | 
				
			||||||
 | 
					                if (body.getPk_order_b() != null) {
 | 
				
			||||||
 | 
					                    if (bmap.containsKey(body.getPk_order_b())) {
 | 
				
			||||||
 | 
					                        srcbdatas= this.getForeignAddParam(srcbdatas, body.getPk_order_b(), body.getPk_order_b());
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                // 费用明细
 | 
				
			||||||
 | 
					                OrderMatFeeVO[] matFeeVOs = body.getGrandSonVOS();
 | 
				
			||||||
 | 
					                if(!ArrayUtil.isEmpty(matFeeVOs)){
 | 
				
			||||||
 | 
					                    for(OrderMatFeeVO matFeeVO : matFeeVOs){
 | 
				
			||||||
 | 
					                        if (matFeeVO.getPk_order_bf() != null) {
 | 
				
			||||||
 | 
					                            if (bmap.containsKey(matFeeVO.getPk_order_bf())) {
 | 
				
			||||||
 | 
					                                feeDetailsrcBdatas= this.getForeignAddParam(feeDetailsrcBdatas, matFeeVO.getPk_order_bf(), matFeeVO.getPk_order_bf());
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            // 费用项
 | 
				
			||||||
 | 
					            OrderFeeVO[] feeVOS = oldOrgVos[i].getOrderFeeVO();
 | 
				
			||||||
 | 
					            if(!ArrayUtil.isEmpty(feeVOS)){
 | 
				
			||||||
 | 
					                for(OrderFeeVO feeVO : feeVOS){
 | 
				
			||||||
 | 
					                    if (feeVO.getPk_order_f() != null) {
 | 
				
			||||||
 | 
					                        if (bmap.containsKey(feeVO.getPk_order_f())) {
 | 
				
			||||||
 | 
					                            feesrcBdatas= this.getForeignAddParam(feesrcBdatas, feeVO.getPk_order_f(), feeVO.getPk_order_f());
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        d.update(this.getSqlForHisVO(PUEntity.M21_H_TABLE, OrderHeaderVO.PK_SRCORDER,OrderHeaderVO.PK_ORDER),
 | 
				
			||||||
 | 
					                new JavaType[] {
 | 
				
			||||||
 | 
					                        JavaType.String, JavaType.String
 | 
				
			||||||
 | 
					                }, srcdatas);
 | 
				
			||||||
 | 
					        d.update(this.getSqlForHisVO(PUEntity.M21_B_TABLE, OrderItemVO.PK_SRCORDER_B,OrderItemVO.PK_ORDER_B),
 | 
				
			||||||
 | 
					                new JavaType[] {
 | 
				
			||||||
 | 
					                        JavaType.String, JavaType.String
 | 
				
			||||||
 | 
					                }, srcbdatas);
 | 
				
			||||||
 | 
					//		if(feesrcBdatas.size() != 0){
 | 
				
			||||||
 | 
					        // 费用项
 | 
				
			||||||
 | 
					        d.update(this.getSqlForHisVO(PUEntity.M21_F_TABLE, OrderFeeVO.PK_SRCORDER_F,OrderFeeVO.PK_ORDER_F),
 | 
				
			||||||
 | 
					                new JavaType[] {
 | 
				
			||||||
 | 
					                        JavaType.String, JavaType.String
 | 
				
			||||||
 | 
					                }, feesrcBdatas);
 | 
				
			||||||
 | 
					//		}
 | 
				
			||||||
 | 
					//		if(feeDetailsrcBdatas.size() != 0){
 | 
				
			||||||
 | 
					        // 费用明细
 | 
				
			||||||
 | 
					        d.update(this.getSqlForHisVO(PUEntity.M21_B_F_TABLE, OrderMatFeeVO.PK_SRCORDER_BF,OrderMatFeeVO.PK_ORDER_BF),
 | 
				
			||||||
 | 
					                new JavaType[] {
 | 
				
			||||||
 | 
					                        JavaType.String, JavaType.String
 | 
				
			||||||
 | 
					                }, feeDetailsrcBdatas);
 | 
				
			||||||
 | 
					//		}
 | 
				
			||||||
 | 
					        // A-A ,B-A
 | 
				
			||||||
 | 
					        for (int i = 0; i < oldOrgVos.length; i++) {
 | 
				
			||||||
 | 
					            // 头
 | 
				
			||||||
 | 
					            OrderHeaderVO voHead = oldOrgVos[i].getHVO();
 | 
				
			||||||
 | 
					            String pk_order = voHead.getPk_order();
 | 
				
			||||||
 | 
					            String pk_src_order = null;
 | 
				
			||||||
 | 
					            if (hmap.containsKey(pk_order)) {
 | 
				
			||||||
 | 
					                pk_src_order = hmap.get(pk_order);
 | 
				
			||||||
 | 
					                datas2 = this.getForeignAddParam(datas2, pk_src_order, pk_order);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            // 体
 | 
				
			||||||
 | 
					            OrderItemVO[] voBody = oldOrgVos[i].getBVO();
 | 
				
			||||||
 | 
					            for (OrderItemVO body : voBody) {
 | 
				
			||||||
 | 
					                if (body.getPk_order_b() != null) {
 | 
				
			||||||
 | 
					                    if (bmap.containsKey(body.getPk_order_b())) {
 | 
				
			||||||
 | 
					                        String pk_src_order_b = bmap.get(body.getPk_order_b());
 | 
				
			||||||
 | 
					                        bdatas2 = this.getForeignAddParam(bdatas2, pk_src_order_b, body.getPk_order_b());
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                // 费用明细
 | 
				
			||||||
 | 
					                OrderMatFeeVO[] matFeeVOs = body.getGrandSonVOS();
 | 
				
			||||||
 | 
					                if(!ArrayUtil.isEmpty(matFeeVOs)) {
 | 
				
			||||||
 | 
					                    for(OrderMatFeeVO matFeeVO : matFeeVOs){
 | 
				
			||||||
 | 
					                        if (matFeeVO.getPk_order_bf() != null) {
 | 
				
			||||||
 | 
					                            if (bmap.containsKey(matFeeVO.getPk_order_bf())) {
 | 
				
			||||||
 | 
					                                String pk_src_order_bf = bmap.get(matFeeVO.getPk_order_bf());
 | 
				
			||||||
 | 
					                                feeDetailBdatas2 = this.getForeignAddParam(feeDetailBdatas2, pk_src_order_bf, matFeeVO.getPk_order_bf());
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            // 费用项
 | 
				
			||||||
 | 
					            OrderFeeVO[] feeVOS = oldOrgVos[i].getOrderFeeVO();
 | 
				
			||||||
 | 
					            if(!ArrayUtil.isEmpty(feeVOS)) {
 | 
				
			||||||
 | 
					                for(OrderFeeVO fee : feeVOS){
 | 
				
			||||||
 | 
					                    if (fee.getPk_order_f() != null) {
 | 
				
			||||||
 | 
					                        if (bmap.containsKey(fee.getPk_order_f())) {
 | 
				
			||||||
 | 
					                            String pk_src_order_bf = bmap.get(fee.getPk_order_f());
 | 
				
			||||||
 | 
					                            feeBdatas2 = this.getForeignAddParam(feeBdatas2, pk_src_order_bf, fee.getPk_order_f());
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        d.update(this.getSqlForHisVO(PUEntity.M21_H_TABLE, OrderHeaderVO.PK_ORDER,OrderHeaderVO.PK_ORDER),
 | 
				
			||||||
 | 
					                new JavaType[] {
 | 
				
			||||||
 | 
					                        JavaType.String, JavaType.String
 | 
				
			||||||
 | 
					                }, datas2);
 | 
				
			||||||
 | 
					        d.update(this.getSqlForHisVO(PUEntity.M21_B_TABLE, OrderItemVO.PK_ORDER_B,OrderItemVO.PK_ORDER_B),
 | 
				
			||||||
 | 
					                new JavaType[] {
 | 
				
			||||||
 | 
					                        JavaType.String, JavaType.String
 | 
				
			||||||
 | 
					                }, bdatas2);
 | 
				
			||||||
 | 
					        d.update(this.getSqlForHisVO(PUEntity.M21_B_TABLE, OrderHeaderVO.PK_ORDER,OrderHeaderVO.PK_ORDER),
 | 
				
			||||||
 | 
					                new JavaType[] {
 | 
				
			||||||
 | 
					                        JavaType.String, JavaType.String
 | 
				
			||||||
 | 
					                }, datas2);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//		if(feeBdatas2.size() != 0){
 | 
				
			||||||
 | 
					        // 费用项
 | 
				
			||||||
 | 
					        d.update(this.getSqlForHisVO(PUEntity.M21_F_TABLE, OrderFeeVO.PK_ORDER_F,OrderFeeVO.PK_ORDER_F),
 | 
				
			||||||
 | 
					                new JavaType[] {
 | 
				
			||||||
 | 
					                        JavaType.String, JavaType.String
 | 
				
			||||||
 | 
					                }, feeBdatas2);
 | 
				
			||||||
 | 
					        d.update(this.getSqlForHisVO(PUEntity.M21_F_TABLE, OrderHeaderVO.PK_ORDER,OrderHeaderVO.PK_ORDER),
 | 
				
			||||||
 | 
					                new JavaType[] {
 | 
				
			||||||
 | 
					                        JavaType.String, JavaType.String
 | 
				
			||||||
 | 
					                }, datas2);
 | 
				
			||||||
 | 
					//		}
 | 
				
			||||||
 | 
					//		if(feeDetailBdatas2.size() != 0){
 | 
				
			||||||
 | 
					        // 费用明细
 | 
				
			||||||
 | 
					        d.update(this.getSqlForHisVO(PUEntity.M21_B_F_TABLE, OrderMatFeeVO.PK_ORDER_BF,OrderMatFeeVO.PK_ORDER_BF),
 | 
				
			||||||
 | 
					                new JavaType[] {
 | 
				
			||||||
 | 
					                        JavaType.String, JavaType.String
 | 
				
			||||||
 | 
					                }, feeDetailBdatas2);
 | 
				
			||||||
 | 
					        d.update(this.getSqlForHisVO(PUEntity.M21_B_F_TABLE, OrderHeaderVO.PK_ORDER,OrderHeaderVO.PK_ORDER),
 | 
				
			||||||
 | 
					                new JavaType[] {
 | 
				
			||||||
 | 
					                        JavaType.String, JavaType.String
 | 
				
			||||||
 | 
					                }, datas2);
 | 
				
			||||||
 | 
					        d.update(this.getSqlForHisVO(PUEntity.M21_B_F_TABLE, OrderItemVO.PK_ORDER_B,OrderItemVO.PK_ORDER_B),
 | 
				
			||||||
 | 
					                new JavaType[] {
 | 
				
			||||||
 | 
					                        JavaType.String, JavaType.String
 | 
				
			||||||
 | 
					                }, bdatas2);
 | 
				
			||||||
 | 
					//		}
 | 
				
			||||||
 | 
					        //第三步C-A,A-A
 | 
				
			||||||
 | 
					        List<List<Object>> datas3 = new ArrayList<List<Object>>();
 | 
				
			||||||
 | 
					        List<List<Object>> bdatas3 = new ArrayList<List<Object>>();
 | 
				
			||||||
 | 
					        List<List<Object>> feeDetailBdatas3 = new ArrayList<List<Object>>();
 | 
				
			||||||
 | 
					        List<List<Object>> feeBdatas3 = new ArrayList<List<Object>>();
 | 
				
			||||||
 | 
					        for (int i = 0; i < cliVOs.length; i++) {
 | 
				
			||||||
 | 
					            // 头
 | 
				
			||||||
 | 
					            OrderHeaderVO voHead = cliVOs[i].getHVO();
 | 
				
			||||||
 | 
					            String pk_srcorder = voHead.getPk_Srcorder();// 获取原始版本表头pk
 | 
				
			||||||
 | 
					            String needchangedhkey = newkeyhmap.get(pk_srcorder);
 | 
				
			||||||
 | 
					            datas3 = this.getForeignAddParam(datas3, pk_srcorder, needchangedhkey);
 | 
				
			||||||
 | 
					            // 体
 | 
				
			||||||
 | 
					            OrderItemVO[] voBody = cliVOs[i].getBVO();
 | 
				
			||||||
 | 
					            for (OrderItemVO body : voBody) {
 | 
				
			||||||
 | 
					                if (body.getPk_srcorder_b() != null) {
 | 
				
			||||||
 | 
					                    bmap.put(body.getPk_srcorder_b(), body.getPk_order_b());
 | 
				
			||||||
 | 
					//					body.setPk_order_b(body.getPk_srcorder_b());// 将原始版本pk赋值给表体主键,这里需要注意,可能存在修订增行的场景,导致pk_srcorder_b为空,所以这里需要判断一下
 | 
				
			||||||
 | 
					                    String needchangedbkey = newkeybmap.get(body.getPk_srcorder_b());
 | 
				
			||||||
 | 
					                    bdatas3 = this.getForeignAddParam(bdatas3, body.getPk_srcorder_b(), needchangedbkey);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                // 费用明细
 | 
				
			||||||
 | 
					                OrderMatFeeVO[] matFeeVOS = body.getGrandSonVOS();
 | 
				
			||||||
 | 
					                if(!ArrayUtil.isEmpty(matFeeVOS)){
 | 
				
			||||||
 | 
					                    for(OrderMatFeeVO matFee : matFeeVOS){
 | 
				
			||||||
 | 
					                        if (matFee.getPk_srcorder_bf() != null) {
 | 
				
			||||||
 | 
					                            bmap.put(matFee.getPk_srcorder_bf(), matFee.getPk_order_bf());
 | 
				
			||||||
 | 
					//					body.setPk_order_b(body.getPk_srcorder_b());// 将原始版本pk赋值给表体主键,这里需要注意,可能存在修订增行的场景,导致pk_srcorder_b为空,所以这里需要判断一下
 | 
				
			||||||
 | 
					                            String needchangedbfeekey = newkeybmap.get(matFee.getPk_srcorder_bf());
 | 
				
			||||||
 | 
					                            feeDetailBdatas3 = this.getForeignAddParam(feeDetailBdatas3, matFee.getPk_srcorder_bf(), needchangedbfeekey);
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            // 费用项
 | 
				
			||||||
 | 
					            OrderFeeVO[] feeVOS = cliVOs[i].getOrderFeeVO();
 | 
				
			||||||
 | 
					            if(!ArrayUtil.isEmpty(feeVOS)){
 | 
				
			||||||
 | 
					                for(OrderFeeVO fee : feeVOS){
 | 
				
			||||||
 | 
					                    if (fee.getPk_srcorder_f() != null) {
 | 
				
			||||||
 | 
					                        bmap.put(fee.getPk_srcorder_f(), fee.getPk_order_f());
 | 
				
			||||||
 | 
					//					body.setPk_order_b(body.getPk_srcorder_b());// 将原始版本pk赋值给表体主键,这里需要注意,可能存在修订增行的场景,导致pk_srcorder_b为空,所以这里需要判断一下
 | 
				
			||||||
 | 
					                        String needchangedbfeedetailkey = newkeybmap.get(fee.getPk_srcorder_f());
 | 
				
			||||||
 | 
					                        feeBdatas3 = this.getForeignAddParam(feeBdatas3, fee.getPk_srcorder_f(), needchangedbfeedetailkey);
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        d.update(this.getSql(PUEntity.M21_H_TABLE, OrderHeaderVO.PK_ORDER),
 | 
				
			||||||
 | 
					                new JavaType[] {
 | 
				
			||||||
 | 
					                        JavaType.String, JavaType.String
 | 
				
			||||||
 | 
					                }, datas3);
 | 
				
			||||||
 | 
					        d.update(this.getSql(PUEntity.M21_B_TABLE, OrderItemVO.PK_ORDER_B),
 | 
				
			||||||
 | 
					                new JavaType[] {
 | 
				
			||||||
 | 
					                        JavaType.String, JavaType.String
 | 
				
			||||||
 | 
					                }, bdatas3);
 | 
				
			||||||
 | 
					        d.update(this.getSql(PUEntity.M21_B_TABLE, OrderHeaderVO.PK_ORDER),
 | 
				
			||||||
 | 
					                new JavaType[] {
 | 
				
			||||||
 | 
					                        JavaType.String, JavaType.String
 | 
				
			||||||
 | 
					                }, datas3);
 | 
				
			||||||
 | 
					//		if(feeBdatas3.size() != 0){
 | 
				
			||||||
 | 
					        // 费用项
 | 
				
			||||||
 | 
					        d.update(this.getSql(PUEntity.M21_F_TABLE, OrderFeeVO.PK_ORDER_F),
 | 
				
			||||||
 | 
					                new JavaType[] {
 | 
				
			||||||
 | 
					                        JavaType.String, JavaType.String
 | 
				
			||||||
 | 
					                }, feeBdatas3);
 | 
				
			||||||
 | 
					        d.update(this.getSql(PUEntity.M21_F_TABLE, OrderHeaderVO.PK_ORDER),
 | 
				
			||||||
 | 
					                new JavaType[] {
 | 
				
			||||||
 | 
					                        JavaType.String, JavaType.String
 | 
				
			||||||
 | 
					                }, datas3);
 | 
				
			||||||
 | 
					//		}
 | 
				
			||||||
 | 
					//		if(feeDetailBdatas3.size() != 0){
 | 
				
			||||||
 | 
					        // 费用明细
 | 
				
			||||||
 | 
					        d.update(this.getSql(PUEntity.M21_B_F_TABLE, OrderMatFeeVO.PK_ORDER_BF),
 | 
				
			||||||
 | 
					                new JavaType[] {
 | 
				
			||||||
 | 
					                        JavaType.String, JavaType.String
 | 
				
			||||||
 | 
					                }, feeDetailBdatas3);
 | 
				
			||||||
 | 
					        d.update(this.getSql(PUEntity.M21_B_F_TABLE, OrderHeaderVO.PK_ORDER),
 | 
				
			||||||
 | 
					                new JavaType[] {
 | 
				
			||||||
 | 
					                        JavaType.String, JavaType.String
 | 
				
			||||||
 | 
					                }, datas3);
 | 
				
			||||||
 | 
					        d.update(this.getSql(PUEntity.M21_B_F_TABLE, OrderItemVO.PK_ORDER_B),
 | 
				
			||||||
 | 
					                new JavaType[] {
 | 
				
			||||||
 | 
					                        JavaType.String, JavaType.String
 | 
				
			||||||
 | 
					                }, bdatas3);
 | 
				
			||||||
 | 
					//		}
 | 
				
			||||||
 | 
					//    return cliVOs;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 更新OrgVO
 | 
				
			||||||
 | 
					     * @param newOrgVos
 | 
				
			||||||
 | 
					     * @param cliVOs
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    private OrderVO[]  updateOrgVO(OrderVO[] newOrgVos, OrderVO[] cliVOs) {
 | 
				
			||||||
 | 
					        OrderVO[] retVOs = null;
 | 
				
			||||||
 | 
					        try{
 | 
				
			||||||
 | 
					            retVOs = (OrderVO[])new BillUpdate().update(newOrgVos,cliVOs,OrderHeaderVO.PK_ORDER);
 | 
				
			||||||
 | 
					        }catch (BusinessException e){
 | 
				
			||||||
 | 
					            ExceptionUtils.wrappException(e);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        return retVOs;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 更新clientVO
 | 
				
			||||||
 | 
					     * @param newCliVO
 | 
				
			||||||
 | 
					     * @param oldOrgVos
 | 
				
			||||||
 | 
					     * @param ctx
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    private OrderVO[] updateClientVO(OrderVO[] newCliVO, OrderVO[] oldOrgVos,
 | 
				
			||||||
 | 
					                                     OrderContext ctx) {
 | 
				
			||||||
 | 
					        if (ArrayUtils.isEmpty(newCliVO)) {
 | 
				
			||||||
 | 
					            return null;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        // 特殊处理
 | 
				
			||||||
 | 
					        // 前台差异处理时,因为界面没有付款计划,所以将其设置为删除
 | 
				
			||||||
 | 
					        // 设置成不变
 | 
				
			||||||
 | 
					//		this.setPayPlanStatus(newCliVO);
 | 
				
			||||||
 | 
					        // 规则
 | 
				
			||||||
 | 
					        CompareAroundProcesser<OrderVO> processer = new CompareAroundProcesser<OrderVO>(
 | 
				
			||||||
 | 
					                OrderPluginPoint.REVISE);
 | 
				
			||||||
 | 
					        this.addBeforeRule(processer);
 | 
				
			||||||
 | 
					        this.addAfterRule(processer, ctx);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // 执行最新版的采购订单保存
 | 
				
			||||||
 | 
					        processer.before(newCliVO, oldOrgVos);
 | 
				
			||||||
 | 
					        OrderVO[] retVOs = new OrderReviseUpdateBP(ctx).update(newCliVO, oldOrgVos);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        processer.after(retVOs, oldOrgVos);
 | 
				
			||||||
 | 
					        return retVOs;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//	private void setPayPlanStatus(OrderVO[] voSaved) {
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//		for (OrderVO vo : voSaved) {
 | 
				
			||||||
 | 
					//			ISuperVO[] vos = vo.getChildren(PayPlanVO.class);
 | 
				
			||||||
 | 
					//			if (ArrayUtils.isEmpty(vos)) {
 | 
				
			||||||
 | 
					//				continue;
 | 
				
			||||||
 | 
					//			}
 | 
				
			||||||
 | 
					//			PayPlanVO[] payplanVOs = ArrayUtil.convertArrayType(vos);
 | 
				
			||||||
 | 
					//			for (PayPlanVO payplanVO : payplanVOs) {
 | 
				
			||||||
 | 
					//				payplanVO.setStatus(VOStatus.UNCHANGED);
 | 
				
			||||||
 | 
					//			}
 | 
				
			||||||
 | 
					//		}
 | 
				
			||||||
 | 
					//	}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 方法功能描述:保存前规则
 | 
				
			||||||
 | 
					     * <p>
 | 
				
			||||||
 | 
					     * <b>参数说明</b>
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param processer
 | 
				
			||||||
 | 
					     *          <p>
 | 
				
			||||||
 | 
					     * @since 6.0
 | 
				
			||||||
 | 
					     * @author wuxla
 | 
				
			||||||
 | 
					     * @time 2010-3-26 下午06:41:24
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    private void addBeforeRule(CompareAroundProcesser<OrderVO> processer) {
 | 
				
			||||||
 | 
					        // 冻结状态校验 add by CONGKE for NCCNATIVE 2019-11-21
 | 
				
			||||||
 | 
					        processer.addBeforeRule(new VOSagaFrozenValidateRule<OrderVO>(true));
 | 
				
			||||||
 | 
					        //新增加一个前规则,用来判断订单是否最终关闭,如果已经最终关闭,不允许修订add by zhanghrh 2021.9.22
 | 
				
			||||||
 | 
					        processer.addBeforeRule(new CheckBfinalcloseRule());
 | 
				
			||||||
 | 
					        // 参数合法性检查
 | 
				
			||||||
 | 
					        processer.addBeforeRule(new ItemRule());
 | 
				
			||||||
 | 
					        processer.addBeforeRule(new NnumCheckRule());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // 表头退货(库)基于原订单补货检查,有后续单据不允许修改退货/库基于原订单补货字段
 | 
				
			||||||
 | 
					        processer.addBeforeRule(new BrefwhenreturnCheckRule());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // 表体不能改变项检查有后续单据,表体批次号、需求部门、项目、收货仓库、收货地址、赠品不能修改
 | 
				
			||||||
 | 
					        processer.addBeforeRule(new ItemChangeCheckRule());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // 合同检查,修订前单据来自同一个合同,则不能将订单改为来自多个合同的订单
 | 
				
			||||||
 | 
					        processer.addBeforeRule(new OneContractCheckRule());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // 支持审批中修改(修订)的单据,检查是否应该由当前审批人修改(修订)
 | 
				
			||||||
 | 
					        processer.addBeforeFinalRule(
 | 
				
			||||||
 | 
					                new ApprovingEditCheckRule<OrderVO>(POBillType.Order));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // 支持审批中修改(修订)的单据,后台向所有已经处理过审批任务的人发送消息
 | 
				
			||||||
 | 
					        processer.addBeforeFinalRule(new ApprovingEditSendMsgRule<OrderVO>());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // 移动端修订数量合法性检查 add by hanxqm 2019年6月22日 16点06分
 | 
				
			||||||
 | 
					        //processer.addBeforeFinalRule(new MobBeforeReviseForPoOrderImpl());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // 校验修订后金额是否超过累计付款金额
 | 
				
			||||||
 | 
					        processer.addBeforeFinalRule(new CheckOverPay());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 方法功能描述:保存后规则
 | 
				
			||||||
 | 
					     * <p>
 | 
				
			||||||
 | 
					     * <b>参数说明</b>
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param processer
 | 
				
			||||||
 | 
					     *          <p>
 | 
				
			||||||
 | 
					     * @since 6.0
 | 
				
			||||||
 | 
					     * @author wuxla
 | 
				
			||||||
 | 
					     * @time 2010-3-26 下午06:41:30
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    private void addAfterRule(CompareAroundProcesser<OrderVO> processer,
 | 
				
			||||||
 | 
					                              OrderContext ctx) {
 | 
				
			||||||
 | 
					        // 修订数量合法性检查,修订后的数量与原数量同正负,且不能小于后续数量
 | 
				
			||||||
 | 
					        processer.addAfterRule(
 | 
				
			||||||
 | 
					                new ReviseNumCheckRule(ctx.getReviseToleranceConfirm().booleanValue()));
 | 
				
			||||||
 | 
					        // 只处理审批后的数据(因审批中修订会有未审批通过的数据过来)
 | 
				
			||||||
 | 
					        processer.addAfterRule(
 | 
				
			||||||
 | 
					                new FilterOrderByStatusRule(POEnumBillStatus.APPROVE.toInt()));
 | 
				
			||||||
 | 
					        processer.addAfterRule(new ModifySupplyRule());
 | 
				
			||||||
 | 
					        processer.addAfterRule(new ReviseBudgetCtrlRule());
 | 
				
			||||||
 | 
					        // 修改在途状态表中数据
 | 
				
			||||||
 | 
					        processer.addAfterRule(new ModifyStatusOnWayRule());
 | 
				
			||||||
 | 
					        // 更新价格表
 | 
				
			||||||
 | 
					        processer.addAfterRule(new OrderPriceMaintainRule());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // ncm add by zhangllb 20170519 采购订单修订时更新订单付款计划
 | 
				
			||||||
 | 
					        // processer.addAfterRule(new OrderPayPlanReviseRule());
 | 
				
			||||||
 | 
					        // 采购订单修订更新采购订单付款计划 add by yinliangc 20220312
 | 
				
			||||||
 | 
					        processer.addAfterRule(new OrderPayPlanVOReviseRule());
 | 
				
			||||||
 | 
					        // 移动端向供应商发送通知消息 zhaofengt 2019/7/30
 | 
				
			||||||
 | 
					        processer.addAfterRule(new MobAfterReviseForPoOrderImpl());
 | 
				
			||||||
 | 
					        // 判断是否自动到货打开
 | 
				
			||||||
 | 
					        processer.addAfterRule(new ArrivalOpenCheckRule());
 | 
				
			||||||
 | 
					        // 判断是否自动入库打开
 | 
				
			||||||
 | 
					        processer.addAfterRule(new OpenCheckRule());
 | 
				
			||||||
 | 
					        // 判断是否自动开票打开
 | 
				
			||||||
 | 
					        processer.addAfterRule(new InvoiceOpenCkeckRule());
 | 
				
			||||||
 | 
					        // 采购订单修订审批回写采购合同付款计划
 | 
				
			||||||
 | 
					        processer.addAfterFinalRule(new ApproveM21AndRewriteCTPayPlan());
 | 
				
			||||||
 | 
					        // 调用内部交易信息
 | 
				
			||||||
 | 
					        processer.addAfterRule(new SaveTransferMsgRule());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // 采购订单审批后同步到锐制系统
 | 
				
			||||||
 | 
					        processer.addAfterFinalRule(new AfterApprovingSynchronizeRuleRZ());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 得到交换主键最新oldOrgVos
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param oldOrgVos
 | 
				
			||||||
 | 
					     * @return
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    private OrderVO[] changeoldOrgVosWithPK(OrderVO[] oldOrgVos, OrderVO[] cliVOs,
 | 
				
			||||||
 | 
					                                            Map<String, String> hmap, Map<String, String> bmap) {
 | 
				
			||||||
 | 
					        UFDate correctdate = TimeUtils.getsrvBaseDate();
 | 
				
			||||||
 | 
					        OrderVO[] cloneVos = new OrderVO[oldOrgVos.length];
 | 
				
			||||||
 | 
					        // 交换oldOrgVos的pk
 | 
				
			||||||
 | 
					        for (int i = 0; i < oldOrgVos.length; i++) {
 | 
				
			||||||
 | 
					            cloneVos[i] = (OrderVO) oldOrgVos[i].clone();
 | 
				
			||||||
 | 
					            // 头
 | 
				
			||||||
 | 
					            OrderHeaderVO voHead = oldOrgVos[i].getHVO();
 | 
				
			||||||
 | 
					            voHead.setStatus(VOStatus.UPDATED);
 | 
				
			||||||
 | 
					            voHead.setBislatest(UFBoolean.FALSE);
 | 
				
			||||||
 | 
					            voHead.setBisReviseLatest(UFBoolean.FALSE);
 | 
				
			||||||
 | 
					            voHead.setRevisionStatus(Integer.valueOf(EnumRevise.REVISE.toIntValue()));
 | 
				
			||||||
 | 
					            // 体
 | 
				
			||||||
 | 
					            OrderItemVO[] voItems = oldOrgVos[i].getBVO();
 | 
				
			||||||
 | 
					            for (int j = 0; j < voItems.length; ++j) {
 | 
				
			||||||
 | 
					                //设置修订人员和日期
 | 
				
			||||||
 | 
					                voItems[j].setDcorrectdate(correctdate);
 | 
				
			||||||
 | 
					                voItems[j].setChandler(cliVOs[i].getHVO().getCrevisepsn());
 | 
				
			||||||
 | 
					                //设置历史数据
 | 
				
			||||||
 | 
					                voItems[j].setFisactive((Integer) EnumActive.REVISEHISTORY.value());
 | 
				
			||||||
 | 
					                voItems[j].setStatus(VOStatus.UPDATED);
 | 
				
			||||||
 | 
					                // 费用明细
 | 
				
			||||||
 | 
					                OrderMatFeeVO[] matFeeVO = voItems[j].getGrandSonVOS();
 | 
				
			||||||
 | 
					                if(!ArrayUtil.isEmpty(matFeeVO)){
 | 
				
			||||||
 | 
					                    for(OrderMatFeeVO matFee : matFeeVO){
 | 
				
			||||||
 | 
					                        matFee.setStatus(VOStatus.UPDATED);
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            // 费用项
 | 
				
			||||||
 | 
					            OrderFeeVO[] feeVO = oldOrgVos[i].getOrderFeeVO();
 | 
				
			||||||
 | 
					            if(!ArrayUtil.isEmpty(feeVO)){
 | 
				
			||||||
 | 
					                for(OrderFeeVO fee : feeVO){
 | 
				
			||||||
 | 
					                    fee.setStatus(VOStatus.UPDATED);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            /*
 | 
				
			||||||
 | 
					             * add by wandl 清空付款协议,付款计划主键,修订含有付款协议的订单会报违反唯一约束!
 | 
				
			||||||
 | 
					             */
 | 
				
			||||||
 | 
					//			OrderPaymentVO[] paymentItem = newOrgVos[i].getPaymentVO();
 | 
				
			||||||
 | 
					//			for (OrderPaymentVO payment : paymentItem) {
 | 
				
			||||||
 | 
					////				payment.setPk_payment(null);
 | 
				
			||||||
 | 
					//				payment.setStatus(VOStatus.DELETED);
 | 
				
			||||||
 | 
					//			}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//			PayPlanVO[] payplanItem = (PayPlanVO[])newOrgVos[i].getChildren(PayPlanVO.class);
 | 
				
			||||||
 | 
					//			for (PayPlanVO payplan : payplanItem) {
 | 
				
			||||||
 | 
					////				payplan.setPk_order_payplan(null);
 | 
				
			||||||
 | 
					//				payplan.setStatus(VOStatus.DELETED);
 | 
				
			||||||
 | 
					//			}
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        OrderVO[] retVO  =this.updateOrgVO(oldOrgVos, cloneVos);
 | 
				
			||||||
 | 
					        /**
 | 
				
			||||||
 | 
					         * 注意付款协议表体
 | 
				
			||||||
 | 
					         */
 | 
				
			||||||
 | 
					        return retVO;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 得到交换主键最新cliVOs
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param cliVOs
 | 
				
			||||||
 | 
					     * @param forderstatus
 | 
				
			||||||
 | 
					     * @param taudittime
 | 
				
			||||||
 | 
					     * @param approver
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    private OrderVO[] changeClientVoWithPK(OrderVO[] oldOrgVos, OrderVO[] cliVOs,
 | 
				
			||||||
 | 
					                                           Map<String, String> hmap, Map<String, String> bmap, Integer forderstatus,
 | 
				
			||||||
 | 
					                                           String approver, UFDate taudittime, String creator,UFDateTime creationtime) {
 | 
				
			||||||
 | 
					        OrderVO[] cloneVos =new OrderVO[cliVOs.length];
 | 
				
			||||||
 | 
					        // 交换newCliVO的pk
 | 
				
			||||||
 | 
					        for (int i = 0; i < cliVOs.length; i++) {
 | 
				
			||||||
 | 
					            cloneVos[i] = (OrderVO) cliVOs[i].clone();
 | 
				
			||||||
 | 
					            // 头
 | 
				
			||||||
 | 
					            OrderHeaderVO voHead = cliVOs[i].getHVO();
 | 
				
			||||||
 | 
					            voHead.setStatus(VOStatus.UPDATED);
 | 
				
			||||||
 | 
					            voHead.setForderstatus(forderstatus);
 | 
				
			||||||
 | 
					            voHead.setApprover(approver);
 | 
				
			||||||
 | 
					            voHead.setTaudittime(taudittime);
 | 
				
			||||||
 | 
					            voHead.setCreator(creator);
 | 
				
			||||||
 | 
					            voHead.setCreationtime(creationtime);
 | 
				
			||||||
 | 
					            voHead.setModifier(AppContext.getInstance().getPkUser());
 | 
				
			||||||
 | 
					            voHead.setModifiedtime(AppContext.getInstance().getServerTime());
 | 
				
			||||||
 | 
					//			String pk_srcorder = voHead.getPk_Srcorder();// 获取原始版本表头pk
 | 
				
			||||||
 | 
					//			hmap.put(pk_srcorder, voHead.getPk_order());
 | 
				
			||||||
 | 
					//			voHead.setPk_order(pk_srcorder);// 将原始版本pk赋值给表头主键
 | 
				
			||||||
 | 
					            voHead.setBislatest(UFBoolean.TRUE);// 设置为最新版本
 | 
				
			||||||
 | 
					            voHead.setBisReviseLatest(UFBoolean.TRUE);//设置修订可见最新版本
 | 
				
			||||||
 | 
					            voHead.setRevisionStatus(Integer.valueOf(EnumRevise.SIMPLE.toIntValue()));// 将修订状态置为普通,避免在采购订单维护节点收回的单据,还会走采购订单修订的审批流
 | 
				
			||||||
 | 
					            // 体
 | 
				
			||||||
 | 
					            OrderItemVO[] voBody = cliVOs[i].getBVO();
 | 
				
			||||||
 | 
					            for (OrderItemVO body : voBody) {
 | 
				
			||||||
 | 
					//				body.setPk_order(pk_srcorder);// 将表体存放的表头主键也替换为原始版本pk
 | 
				
			||||||
 | 
					                body.setStatus(VOStatus.UPDATED);
 | 
				
			||||||
 | 
					                // 费用明细
 | 
				
			||||||
 | 
					                OrderMatFeeVO[] matFeeVO = body.getGrandSonVOS();
 | 
				
			||||||
 | 
					                if(!ArrayUtil.isEmpty(matFeeVO)){
 | 
				
			||||||
 | 
					                    for(OrderMatFeeVO matFee : matFeeVO){
 | 
				
			||||||
 | 
					                        matFee.setStatus(VOStatus.UPDATED);
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            // 费用项
 | 
				
			||||||
 | 
					            OrderFeeVO[] feeVO = cliVOs[i].getOrderFeeVO();
 | 
				
			||||||
 | 
					            if(!ArrayUtil.isEmpty(feeVO)){
 | 
				
			||||||
 | 
					                for(OrderFeeVO fee : feeVO){
 | 
				
			||||||
 | 
					                    fee.setStatus(VOStatus.UPDATED);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            /*
 | 
				
			||||||
 | 
					             * clintVO在修订保存的时候清空了付款协议,和付款计划。在这补回来
 | 
				
			||||||
 | 
					             */
 | 
				
			||||||
 | 
					            //付款协议
 | 
				
			||||||
 | 
					//			OrderPaymentVO[] paymentItemcliVOs = newCliVO[i].getPaymentVO();
 | 
				
			||||||
 | 
					//			OrderPaymentVO[] paymentItemOrgVos = oldOrgVos[i].getPaymentVO();
 | 
				
			||||||
 | 
					//			for (int j = 0; j < paymentItemcliVOs.length; j++) {
 | 
				
			||||||
 | 
					//				paymentItemcliVOs[j]
 | 
				
			||||||
 | 
					//						.setPk_payment(paymentItemOrgVos[j].getPk_payment());
 | 
				
			||||||
 | 
					//				paymentItemcliVOs[j].setStatus(VOStatus.UPDATED);
 | 
				
			||||||
 | 
					//			}
 | 
				
			||||||
 | 
					            //付款计划
 | 
				
			||||||
 | 
					//			PayPlanVO[] payplanItemcliVOs = (PayPlanVO[]) newCliVO[i].getChildren(PayPlanVO.class);
 | 
				
			||||||
 | 
					//			PayPlanVO[] payplanItemOrgVos = (PayPlanVO[]) oldOrgVos[i].getChildren(PayPlanVO.class);
 | 
				
			||||||
 | 
					//			for(int k =0 ; k<payplanItemcliVOs.length; k++) {
 | 
				
			||||||
 | 
					//				payplanItemcliVOs[k].setPk_order_payplan(payplanItemOrgVos[k].getPk_order_payplan());
 | 
				
			||||||
 | 
					//				payplanItemcliVOs[k].setStatus(VOStatus.UPDATED);
 | 
				
			||||||
 | 
					//			}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        OrderVO[] retVO = this.updateOrgVO(cliVOs, cloneVos);
 | 
				
			||||||
 | 
					        /**
 | 
				
			||||||
 | 
					         * 注意付款协议表体
 | 
				
			||||||
 | 
					         */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return retVO;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 根据新版本VO数组查询原始版本VO数组
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param newVos
 | 
				
			||||||
 | 
					     * @since dev1.0
 | 
				
			||||||
 | 
					     * @author zhanghrh
 | 
				
			||||||
 | 
					     * @time 2021-6-9 下午04:39:00
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    private OrderVO[] queryOldVosByNewVos(OrderVO[] newVos) {
 | 
				
			||||||
 | 
					        String[] ids = new String[newVos.length];
 | 
				
			||||||
 | 
					        for (int i = 0; i < newVos.length; i++) {
 | 
				
			||||||
 | 
					            ids[i] = newVos[i].getHVO().getPk_Srcorder();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        OrderVO[] hisVos = new BillQuery<OrderVO>(OrderVO.class).query(ids);
 | 
				
			||||||
 | 
					        return hisVos;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 根据新版本VO数组查询原始版本VO数组
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param newVos
 | 
				
			||||||
 | 
					     * @since dev1.0
 | 
				
			||||||
 | 
					     * @author zhanghrh
 | 
				
			||||||
 | 
					     * @time 2021-6-9 下午04:39:00
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    private OrderVO[] queryNewVosByOldVos(OrderVO[] newVos) {
 | 
				
			||||||
 | 
					        String[] ids = new String[newVos.length];
 | 
				
			||||||
 | 
					        for (int i = 0; i < newVos.length; i++) {
 | 
				
			||||||
 | 
					            ids[i] = newVos[i].getHVO().getPk_order();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        OrderVO[] hisVos = new BillQuery<OrderVO>(OrderVO.class).query(ids);
 | 
				
			||||||
 | 
					        return hisVos;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 记录初始VO上所有下游回写订单的字段
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param newVos
 | 
				
			||||||
 | 
					     * @since dev1.0
 | 
				
			||||||
 | 
					     * @author zhanghrh
 | 
				
			||||||
 | 
					     * @time 2021-6-9 下午04:39:00
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    private OrderVO[] setWriteBackNums(OrderVO[] newVos,OrderVO[] oldVos) {
 | 
				
			||||||
 | 
					        Map<String,UFDouble[]> hmap = new HashMap<String,UFDouble[]>();
 | 
				
			||||||
 | 
					        Map<String,UFDouble[]> bmap = new HashMap<String,UFDouble[]>();
 | 
				
			||||||
 | 
					        Map<String,String[]> hmapString = new HashMap<String,String[]>();
 | 
				
			||||||
 | 
					        Map<String,String[]> bmapString = new HashMap<String,String[]>();
 | 
				
			||||||
 | 
					        Map<String,UFDate[]> bmapUFDate = new HashMap<String,UFDate[]>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        //遍历原始VO记录累计回写字段
 | 
				
			||||||
 | 
					        for(OrderVO oldVo: oldVos) {
 | 
				
			||||||
 | 
					            UFDouble[] hfiles = new UFDouble[3];
 | 
				
			||||||
 | 
					            String[] hfilesString  =new String[1];
 | 
				
			||||||
 | 
					            OrderHeaderVO hvo =oldVo.getHVO();
 | 
				
			||||||
 | 
					            //UFDouble类型
 | 
				
			||||||
 | 
					            hfiles[0]=hvo.getNaccpayreqmny();//累计付款申请金额
 | 
				
			||||||
 | 
					            hfiles[1]=hvo.getNaccpaymny();//累计付款金额
 | 
				
			||||||
 | 
					            hfiles[2]=hvo.getNinvoicemny();//累计开票金额
 | 
				
			||||||
 | 
					            hmap.put(hvo.getPk_order(), hfiles);
 | 
				
			||||||
 | 
					            //String类型
 | 
				
			||||||
 | 
					            hfilesString[0] = hvo.getVcoopordercode();//对方订单号
 | 
				
			||||||
 | 
					            hmapString.put(hvo.getPk_order(), hfilesString);
 | 
				
			||||||
 | 
					            OrderItemVO bvos[] = oldVo.getBVO();
 | 
				
			||||||
 | 
					            for(OrderItemVO bvo: bvos) {
 | 
				
			||||||
 | 
					                UFDouble[] bfiles = new UFDouble[17];
 | 
				
			||||||
 | 
					                String[] bfilesString  =new String[2];
 | 
				
			||||||
 | 
					                UFDate[] bfilesUFDate  =new UFDate[2];
 | 
				
			||||||
 | 
					                //UFDouble类型
 | 
				
			||||||
 | 
					                bfiles[0] = bvo.getNacccancelinvmny();//累计已核销开票金额
 | 
				
			||||||
 | 
					                bfiles[1] = bvo.getNaccumarrvnum();//累计到货主数量
 | 
				
			||||||
 | 
					                bfiles[2] = bvo.getNaccumdevnum();//累计运输主数量
 | 
				
			||||||
 | 
					                bfiles[3] = bvo.getNaccuminvoicemny();//累计本币开票金额
 | 
				
			||||||
 | 
					                bfiles[4] = bvo.getNaccuminvoicenum();//累计开票主数量
 | 
				
			||||||
 | 
					                bfiles[5] = bvo.getNaccumpickupnum();//累计拣货主数量
 | 
				
			||||||
 | 
					                bfiles[6] = bvo.getNaccumrpnum();//累计到货计划主数量
 | 
				
			||||||
 | 
					                bfiles[7] = bvo.getNaccumstorenum();//累计入库主数量
 | 
				
			||||||
 | 
					                bfiles[8] = bvo.getNaccumwastnum();//累计途耗主数量
 | 
				
			||||||
 | 
					                bfiles[9] = bvo.getNbackarrvnum();//累计退货主数量
 | 
				
			||||||
 | 
					                bfiles[10] = bvo.getNbackstorenum();//累计退库主数量
 | 
				
			||||||
 | 
					                bfiles[11] = bvo.getNfeemny();//费用累计开票金额
 | 
				
			||||||
 | 
					                bfiles[12] = bvo.getNconfirmnum();//确认数量
 | 
				
			||||||
 | 
					                bfiles[13] = bvo.getNsuprsnum();//被预留数量
 | 
				
			||||||
 | 
					                bfiles[14] = bvo.getNsendplannum();//送货计划数量
 | 
				
			||||||
 | 
					                bfiles[15] = bvo.getNaccpaymny();//累计付款金额
 | 
				
			||||||
 | 
					                bfiles[16] = bvo.getNaccpayreqmny();//累计付款申请金额
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                bmap.put(bvo.getPk_order_b(), bfiles);
 | 
				
			||||||
 | 
					                //String类型
 | 
				
			||||||
 | 
					                bfilesString[0] = bvo.getVvendorordercode();//对方订单号
 | 
				
			||||||
 | 
					                bfilesString[1] = bvo.getVvendororderrow();//对方订单行号
 | 
				
			||||||
 | 
					//				bfilesString[2] = bvo.getPk_schedule();//排程计划
 | 
				
			||||||
 | 
					//				bfilesString[3] = bvo.getPk_schedule_b();//排程计划明细
 | 
				
			||||||
 | 
					                bmapString.put(bvo.getPk_order_b(), bfilesString);
 | 
				
			||||||
 | 
					                //UFDate类型
 | 
				
			||||||
 | 
					                bfilesUFDate[0] = bvo.getDconfirmdate();//确认日期
 | 
				
			||||||
 | 
					                bfilesUFDate[1] = bvo.getDcorrectdate();//修正日期
 | 
				
			||||||
 | 
					                bmapUFDate.put(bvo.getPk_order_b(), bfilesUFDate);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        //遍历前端传来的VO,把累计回写字段按pk_src=pk 设置到前端VO中
 | 
				
			||||||
 | 
					        for(OrderVO newVo :newVos) {
 | 
				
			||||||
 | 
					            OrderHeaderVO newHVO =newVo.getHVO();
 | 
				
			||||||
 | 
					            String pk_src_order = newHVO.getPk_Srcorder();
 | 
				
			||||||
 | 
					            if(hmap.containsKey(pk_src_order)) {
 | 
				
			||||||
 | 
					                newHVO.setStatus(VOStatus.UPDATED);
 | 
				
			||||||
 | 
					                //UFDouble类型
 | 
				
			||||||
 | 
					                newHVO.setNaccpayreqmny(hmap.get(pk_src_order)[0]);//累计付款申请金额
 | 
				
			||||||
 | 
					                newHVO.setNaccpaymny(hmap.get(pk_src_order)[1]);//累计付款金额
 | 
				
			||||||
 | 
					                newHVO.setNinvoicemny(hmap.get(pk_src_order)[2]);//累计开票金额
 | 
				
			||||||
 | 
					                //String类型
 | 
				
			||||||
 | 
					                newHVO.setVcoopordercode(hmapString.get(pk_src_order)[0]);//对方订单号
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            OrderItemVO newBVOs[] = newVo.getBVO();
 | 
				
			||||||
 | 
					            for(OrderItemVO newBVO : newBVOs) {
 | 
				
			||||||
 | 
					                String pk_src_order_b = newBVO.getPk_srcorder_b();
 | 
				
			||||||
 | 
					                if(bmap.containsKey(pk_src_order_b)) {
 | 
				
			||||||
 | 
					                    newBVO.setStatus(VOStatus.UPDATED);
 | 
				
			||||||
 | 
					                    //UFDouble类型
 | 
				
			||||||
 | 
					                    newBVO.setNacccancelinvmny(bmap.get(pk_src_order_b)[0]);//累计已核销开票金额
 | 
				
			||||||
 | 
					                    newBVO.setNaccumarrvnum(bmap.get(pk_src_order_b)[1]);//累计到货主数量
 | 
				
			||||||
 | 
					                    newBVO.setNaccumdevnum(bmap.get(pk_src_order_b)[2]);//累计运输主数量
 | 
				
			||||||
 | 
					                    newBVO.setNaccuminvoicemny(bmap.get(pk_src_order_b)[3]);//累计本币开票金额
 | 
				
			||||||
 | 
					                    newBVO.setNaccuminvoicenum(bmap.get(pk_src_order_b)[4]);//累计开票主数量
 | 
				
			||||||
 | 
					                    newBVO.setNaccumpickupnum(bmap.get(pk_src_order_b)[5]);//累计拣货主数量
 | 
				
			||||||
 | 
					                    newBVO.setNaccumrpnum(bmap.get(pk_src_order_b)[6]);//累计到货计划主数量
 | 
				
			||||||
 | 
					                    newBVO.setNaccumstorenum(bmap.get(pk_src_order_b)[7]);//累计入库主数量
 | 
				
			||||||
 | 
					                    newBVO.setNaccumwastnum(bmap.get(pk_src_order_b)[8]);//累计途耗主数量
 | 
				
			||||||
 | 
					                    newBVO.setNbackarrvnum(bmap.get(pk_src_order_b)[9]);//累计退货主数量
 | 
				
			||||||
 | 
					                    newBVO.setNbackstorenum(bmap.get(pk_src_order_b)[10]);//累计退库主数量
 | 
				
			||||||
 | 
					                    newBVO.setNfeemny(bmap.get(pk_src_order_b)[11]);//费用累计开票金额
 | 
				
			||||||
 | 
					                    newBVO.setNconfirmnum(bmap.get(pk_src_order_b)[12]);//确认数量
 | 
				
			||||||
 | 
					                    newBVO.setNsuprsnum(bmap.get(pk_src_order_b)[13]);//被预留数量
 | 
				
			||||||
 | 
					                    newBVO.setNsendplannum(bmap.get(pk_src_order_b)[14]);//送货计划数量
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    newBVO.setNaccpaymny(bmap.get(pk_src_order_b)[15]);//累计付款金额
 | 
				
			||||||
 | 
					                    newBVO.setNaccpayreqmny(bmap.get(pk_src_order_b)[16]);//累计付款申请金额
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    //String类型
 | 
				
			||||||
 | 
					                    newBVO.setVvendorordercode(bmapString.get(pk_src_order_b)[0]);//对方订单号
 | 
				
			||||||
 | 
					                    newBVO.setVvendororderrow(bmapString.get(pk_src_order_b)[1]);//对方订单行号
 | 
				
			||||||
 | 
					                    //UFDate类型
 | 
				
			||||||
 | 
					                    newBVO.setDconfirmdate(bmapUFDate.get(pk_src_order_b)[0]);//确认日期
 | 
				
			||||||
 | 
					                    newBVO.setDcorrectdate(bmapUFDate.get(pk_src_order_b)[1]);//修正日期
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        return newVos;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private String getSql(String tableName, String fieldName) {
 | 
				
			||||||
 | 
					        StringBuilder builder = new StringBuilder();
 | 
				
			||||||
 | 
					        builder.append("update ");
 | 
				
			||||||
 | 
					        builder.append(tableName);
 | 
				
			||||||
 | 
					        builder.append(" set ");
 | 
				
			||||||
 | 
					        builder.append(fieldName);
 | 
				
			||||||
 | 
					        builder.append(" = ?  where ");
 | 
				
			||||||
 | 
					        builder.append(fieldName);
 | 
				
			||||||
 | 
					        builder.append(" = ? ");
 | 
				
			||||||
 | 
					        return builder.toString();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private String getSqlForHisVO(String tableName, String fieldName, String fieldName2) {
 | 
				
			||||||
 | 
					        StringBuilder builder = new StringBuilder();
 | 
				
			||||||
 | 
					        builder.append("update ");
 | 
				
			||||||
 | 
					        builder.append(tableName);
 | 
				
			||||||
 | 
					        builder.append(" set ");
 | 
				
			||||||
 | 
					        builder.append(fieldName);
 | 
				
			||||||
 | 
					        builder.append(" = ?  where ");
 | 
				
			||||||
 | 
					        builder.append(fieldName2);
 | 
				
			||||||
 | 
					        builder.append(" = ? ");
 | 
				
			||||||
 | 
					//    builder.append(" and  ");
 | 
				
			||||||
 | 
					//    builder.append(fieldName2+"=" + "");
 | 
				
			||||||
 | 
					        return builder.toString();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private List<List<Object>> getForeignAddParam(List<List<Object>> datas,
 | 
				
			||||||
 | 
					                                                  String pk_ct_pu, String pk_origct) {
 | 
				
			||||||
 | 
					        List<Object> list = new ArrayList<Object>();
 | 
				
			||||||
 | 
					        list.add(pk_ct_pu);
 | 
				
			||||||
 | 
					        list.add(pk_origct);
 | 
				
			||||||
 | 
					        datas.add(list);
 | 
				
			||||||
 | 
					        return datas;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Loading…
	
		Reference in New Issue