bip销售发票红冲接口
This commit is contained in:
		
							parent
							
								
									9d6588268f
								
							
						
					
					
						commit
						bed6eaacd8
					
				|  | @ -0,0 +1,162 @@ | |||
| /*     */ package nc.bs.so.m32.maintain; | ||||
| /*     */ | ||||
| /*     */ import nc.bs.so.m32.maintain.rule.insert.AutoUniteInvoiceRule; | ||||
| /*     */ import nc.bs.so.m32.maintain.rule.insert.CheckBillCodeRule; | ||||
| /*     */ import nc.bs.so.m32.maintain.rule.insert.CheckBillValityRule; | ||||
| /*     */ import nc.bs.so.m32.maintain.rule.insert.CheckOppValityRule; | ||||
| /*     */ import nc.bs.so.m32.maintain.rule.insert.FillNewDefaultRule; | ||||
| /*     */ import nc.bs.so.m32.maintain.rule.insert.OppOffsetRule; | ||||
| /*     */ import nc.bs.so.m32.maintain.rule.insert.RewriteBillInsertRule; | ||||
| /*     */ import nc.bs.so.m32.maintain.rule.insert.SaleInvoiceCheckNumAndMnyRule; | ||||
| /*     */ import nc.bs.so.m32.maintain.rule.insert.SaleInvoiceCompensateForInsertRule; | ||||
| /*     */ import nc.bs.so.m32.maintain.rule.insert.SaleInvoiceSyncRPBillRuleForInsert; | ||||
| /*     */ import nc.bs.so.m32.maintain.rule.insert.UpdateOppInsertRule; | ||||
| /*     */ import nc.bs.so.m32.plugin.BP32PlugInPoint; | ||||
| /*     */ import nc.bs.so.pub.rule.FillBillTailInfoRuleForIns; | ||||
| /*     */ import nc.impl.pubapp.bd.userdef.UserDefSaveRule; | ||||
| /*     */ import nc.impl.pubapp.pattern.data.bill.BillInsert; | ||||
| /*     */ import nc.impl.pubapp.pattern.rule.IRule; | ||||
| /*     */ import nc.impl.pubapp.pattern.rule.processer.AroundProcesser; | ||||
| /*     */ import nc.vo.ml.NCLangRes4VoTransl; | ||||
| /*     */ import nc.vo.pubapp.pattern.log.TimeLog; | ||||
| /*     */ import nc.vo.pubapp.util.SetAddAuditInfoRule; | ||||
| /*     */ import nc.vo.scmpub.res.billtype.SOBillType; | ||||
| /*     */ import nc.vo.scmpub.rule.FinanceOrgEnableCheckRule; | ||||
| /*     */ import nc.vo.so.m32.entity.SaleInvoiceVO; | ||||
| /*     */ | ||||
| /*     */ | ||||
| /*     */ | ||||
| /*     */ | ||||
| /*     */ | ||||
| /*     */ | ||||
| /*     */ | ||||
| /*     */ | ||||
| /*     */ | ||||
| /*     */ | ||||
| /*     */ | ||||
| /*     */ | ||||
| /*     */ | ||||
| /*     */ | ||||
| /*     */ public class InsertSaleInvoiceBP | ||||
|         /*     */ { | ||||
|     /*     */   public SaleInvoiceVO[] insert(SaleInvoiceVO[] bills) { | ||||
|         /*  43 */     AroundProcesser<SaleInvoiceVO> processer = new AroundProcesser<SaleInvoiceVO>(BP32PlugInPoint.InsertAction); | ||||
|         /*     */ | ||||
|         /*     */ | ||||
|         /*     */ | ||||
|         /*  47 */     addBeforeRule(processer); | ||||
|         /*     */ | ||||
|         /*     */ | ||||
|         /*  50 */     addAfterRule(processer); | ||||
|         /*     */ | ||||
|         /*  52 */     TimeLog.logStart(); | ||||
|         /*  53 */     processer.before(bills); | ||||
|         /*     */ | ||||
|         /*     */ | ||||
|         /*  56 */     TimeLog.info(NCLangRes4VoTransl.getNCLangRes().getStrByID("4006008_0", "04006008-0023")); | ||||
|         /*     */ | ||||
|         /*  58 */     TimeLog.logStart(); | ||||
|         /*  59 */     BillInsert<SaleInvoiceVO> bo = new BillInsert<SaleInvoiceVO>(); | ||||
|         /*  60 */     SaleInvoiceVO[] vos = (SaleInvoiceVO[])bo.insert(bills); | ||||
|         /*     */ | ||||
|         /*  62 */     TimeLog.info(NCLangRes4VoTransl.getNCLangRes().getStrByID("4006008_0", "04006008-0024")); | ||||
|         /*     */ | ||||
|         /*  64 */     TimeLog.logStart(); | ||||
|         /*  65 */     processer.after(vos); | ||||
|         /*     */ | ||||
|         /*  67 */     TimeLog.info(NCLangRes4VoTransl.getNCLangRes().getStrByID("4006008_0", "04006008-0025")); | ||||
|         /*  68 */     return vos; | ||||
|         /*     */   } | ||||
|     /*     */ | ||||
|     /*     */ | ||||
|     /*     */ | ||||
|     /*     */ | ||||
|     /*     */ | ||||
|     /*     */ | ||||
|     /*     */ | ||||
|     /*     */ | ||||
|     /*     */ | ||||
|     /*     */ | ||||
|     /*     */ | ||||
|     /*     */ | ||||
|     /*     */ | ||||
|     /*     */   private void addAfterRule(AroundProcesser<SaleInvoiceVO> processer) { | ||||
|         /*  84 */     IRule<SaleInvoiceVO> rule = new CheckBillCodeRule(); | ||||
|         /*  85 */     processer.addAfterRule(rule); | ||||
|         /*     */ | ||||
|         /*  87 */     rule = new UpdateOppInsertRule(); | ||||
|         /*  88 */     processer.addAfterRule(rule); | ||||
|         /*     */ | ||||
|         /*  90 */     rule = new RewriteBillInsertRule(); | ||||
|         /*  91 */     processer.addAfterRule(rule); | ||||
|         /*     */ | ||||
|         /*     */ | ||||
|         /*  94 */     rule = new OppOffsetRule(); | ||||
|         /*  95 */     processer.addAfterRule(rule); | ||||
|         /*     */ | ||||
|         /*     */ | ||||
|         /*  98 */     SaleInvoiceSyncRPBillRuleForInsert saleInvoiceSyncRPBillRuleForInsert = new SaleInvoiceSyncRPBillRuleForInsert(SOBillType.Invoice.getCode()); | ||||
|         /*  99 */     processer.addAfterRule(saleInvoiceSyncRPBillRuleForInsert); | ||||
|         /*     */ | ||||
|         /*     */ | ||||
|         /* 102 */     SaleInvoiceCompensateForInsertRule saleInvoiceCompensateForInsertRule = new SaleInvoiceCompensateForInsertRule(); | ||||
|         /* 103 */     processer.addAfterRule(saleInvoiceCompensateForInsertRule); | ||||
|         /*     */   } | ||||
|     /*     */ | ||||
|     /*     */ | ||||
|     /*     */ | ||||
|     /*     */ | ||||
|     /*     */ | ||||
|     /*     */ | ||||
|     /*     */ | ||||
|     /*     */ | ||||
|     /*     */ | ||||
|     /*     */ | ||||
|     /*     */ | ||||
|     /*     */ | ||||
|     /*     */ | ||||
|     /*     */   private void addBeforeRule(AroundProcesser<SaleInvoiceVO> processer) { | ||||
|         /* 119 */     FinanceOrgEnableCheckRule financeOrgEnableCheckRule = new FinanceOrgEnableCheckRule(); | ||||
|         /* 120 */     processer.addBeforeRule(financeOrgEnableCheckRule); | ||||
|         /*     */ | ||||
|         /*     */ | ||||
|         /* 123 */     FillBillTailInfoRuleForIns fillBillTailInfoRuleForIns = new FillBillTailInfoRuleForIns(); | ||||
|         /* 124 */     processer.addBeforeRule(fillBillTailInfoRuleForIns); | ||||
|         /*     */ | ||||
|         /*     */ | ||||
|         /* 127 */     SetAddAuditInfoRule setAddAuditInfoRule = new SetAddAuditInfoRule(); | ||||
|         /* 128 */     processer.addBeforeRule(setAddAuditInfoRule); | ||||
|         /*     */ | ||||
|         /*     */ | ||||
|         /* 131 */     FillNewDefaultRule fillNewDefaultRule = new FillNewDefaultRule(); | ||||
|         /* 132 */     processer.addBeforeRule(fillNewDefaultRule); | ||||
|         /*     */ | ||||
|         /*     */ | ||||
|         /* 135 */     CheckBillValityRule checkBillValityRule = new CheckBillValityRule(); | ||||
|         /* 136 */     processer.addBeforeRule(checkBillValityRule); | ||||
|         /*     */ | ||||
|         /*     */ | ||||
|         /* 139 */     SaleInvoiceCheckNumAndMnyRule saleInvoiceCheckNumAndMnyRule = new SaleInvoiceCheckNumAndMnyRule(); | ||||
|         /* 140 */     processer.addBeforeRule(saleInvoiceCheckNumAndMnyRule); | ||||
|         /*     */ | ||||
|         /*     */ | ||||
|         /* 143 */     CheckOppValityRule checkOppValityRule = new CheckOppValityRule(); | ||||
|         /* 144 */     processer.addBeforeRule(checkOppValityRule); | ||||
|         /*     */ | ||||
|         /*     */ | ||||
|         /* 147 */     AutoUniteInvoiceRule autoUniteInvoiceRule = new AutoUniteInvoiceRule(); | ||||
|         /* 148 */     processer.addBeforeRule(autoUniteInvoiceRule); | ||||
|         /*     */ | ||||
|         /*     */ | ||||
|         /* 151 */     UserDefSaveRule userDefSaveRule = new UserDefSaveRule(new Class[] { nc.vo.so.m32.entity.SaleInvoiceHVO.class, nc.vo.so.m32.entity.SaleInvoiceBVO.class }); | ||||
|         /*     */ | ||||
|         /*     */ | ||||
|         /* 154 */     processer.addBeforeRule(userDefSaveRule); | ||||
|         /*     */   } | ||||
|     /*     */ } | ||||
| 
 | ||||
| 
 | ||||
| /* Location:              E:\project\yonyou\tk_gjb\YonBIP2312\modules\so\META-INF\lib\so_saleinvoice.jar!/nc/bs/so/m32/maintain/InsertSaleInvoiceBP.class | ||||
|  * Java compiler version: 17 (61.0) | ||||
|  * JD-Core Version:       1.0.7 | ||||
|  */ | ||||
|  | @ -0,0 +1,89 @@ | |||
| // | ||||
| // Source code recreated from a .class file by IntelliJ IDEA | ||||
| // (powered by FernFlower decompiler) | ||||
| // | ||||
| 
 | ||||
| package nc.bs.so.m32.maintain; | ||||
| 
 | ||||
| import nc.bs.scmpub.ssc.rule.SyncRPBillRuleForUpdate; | ||||
| import nc.bs.so.m32.maintain.rule.insert.CheckBillCodeRule; | ||||
| import nc.bs.so.m32.maintain.rule.insert.CheckBillValityRule; | ||||
| import nc.bs.so.m32.maintain.rule.insert.SaleInvoiceCheckNumAndMnyRule; | ||||
| import nc.bs.so.m32.maintain.rule.update.CheckBillState; | ||||
| import nc.bs.so.m32.maintain.rule.update.CheckCanUpdateWhenAuditing; | ||||
| import nc.bs.so.m32.maintain.rule.update.CheckOppValityUpdateRule; | ||||
| import nc.bs.so.m32.maintain.rule.update.FillUpdateDefaultRule; | ||||
| import nc.bs.so.m32.maintain.rule.update.RewriteBillCreditRule; | ||||
| import nc.bs.so.m32.maintain.rule.update.RewriteBillUpdateRule; | ||||
| import nc.bs.so.m32.maintain.rule.update.UpdateOppUpdateRule; | ||||
| import nc.bs.so.m32.plugin.BP32PlugInPoint; | ||||
| import nc.bs.so.pub.rule.CheckApproverRule; | ||||
| import nc.impl.pubapp.pattern.data.bill.BillUpdate; | ||||
| import nc.impl.pubapp.pattern.rule.ICompareRule; | ||||
| import nc.impl.pubapp.pattern.rule.IRule; | ||||
| import nc.impl.pubapp.pattern.rule.processer.CompareAroundProcesser; | ||||
| import nc.vo.ml.NCLangRes4VoTransl; | ||||
| import nc.vo.pubapp.pattern.log.TimeLog; | ||||
| import nc.vo.pubapp.util.SetUpdateAuditInfoRule; | ||||
| import nc.vo.scmpub.res.billtype.SOBillType; | ||||
| import nc.vo.so.m32.entity.SaleInvoiceVO; | ||||
| 
 | ||||
| public class UpdateSaleInvoiceBP { | ||||
|     public UpdateSaleInvoiceBP() { | ||||
|     } | ||||
| 
 | ||||
|     public SaleInvoiceVO[] update(SaleInvoiceVO[] bills, SaleInvoiceVO[] originBills) { | ||||
|         CompareAroundProcesser<SaleInvoiceVO> processer = new CompareAroundProcesser(BP32PlugInPoint.UpdateAction); | ||||
| 
 | ||||
|         for(SaleInvoiceVO bill : bills) { | ||||
|             bill.getParentVO().setStatus(1); | ||||
|         } | ||||
| 
 | ||||
|         this.addBeforeRule(processer); | ||||
|         this.addAfterRule(processer); | ||||
|         TimeLog.logStart(); | ||||
|         processer.before(bills, originBills); | ||||
|         TimeLog.info(NCLangRes4VoTransl.getNCLangRes().getStrByID("4006008_0", "04006008-0026")); | ||||
|         TimeLog.logStart(); | ||||
|         BillUpdate<SaleInvoiceVO> bo = new BillUpdate(); | ||||
|         SaleInvoiceVO[] vos = (SaleInvoiceVO[])bo.update(bills, originBills); | ||||
|         TimeLog.info(NCLangRes4VoTransl.getNCLangRes().getStrByID("4006008_0", "04006008-0027")); | ||||
|         TimeLog.logStart(); | ||||
|         processer.after(bills, originBills); | ||||
|         TimeLog.info(NCLangRes4VoTransl.getNCLangRes().getStrByID("4006008_0", "04006008-0028")); | ||||
|         return vos; | ||||
|     } | ||||
| 
 | ||||
|     private void addAfterRule(CompareAroundProcesser<SaleInvoiceVO> processer) { | ||||
|         IRule<SaleInvoiceVO> rule = new CheckBillCodeRule(); | ||||
|         processer.addAfterRule(rule); | ||||
|         ICompareRule<SaleInvoiceVO> rewriteRule = new RewriteBillCreditRule(); | ||||
|         processer.addAfterRule(rewriteRule); | ||||
|         ICompareRule<SaleInvoiceVO> var5 = new UpdateOppUpdateRule(); | ||||
|         processer.addAfterRule(var5); | ||||
|         ICompareRule<SaleInvoiceVO> var6 = new RewriteBillUpdateRule(); | ||||
|         processer.addAfterRule(var6); | ||||
|         IRule<SaleInvoiceVO> var4 = new SyncRPBillRuleForUpdate(SOBillType.Invoice.getCode()); | ||||
|         processer.addAfterRule(var4); | ||||
|     } | ||||
| 
 | ||||
|     private void addBeforeRule(CompareAroundProcesser<SaleInvoiceVO> processer) { | ||||
|         IRule<SaleInvoiceVO> rule = null; | ||||
|         IRule<SaleInvoiceVO> var4 = new CheckCanUpdateWhenAuditing(); | ||||
|         processer.addBeforeRule(var4); | ||||
|         IRule<SaleInvoiceVO> var5 = new CheckApproverRule(); | ||||
|         processer.addBeforeRule(var5); | ||||
|         ICompareRule<SaleInvoiceVO> fillRule = new FillUpdateDefaultRule(); | ||||
|         processer.addBeforeRule(fillRule); | ||||
|         IRule<SaleInvoiceVO> var6 = new CheckBillValityRule(); | ||||
|         processer.addBeforeRule(var6); | ||||
|         IRule<SaleInvoiceVO> var7 = new SaleInvoiceCheckNumAndMnyRule(); | ||||
|         processer.addBeforeRule(var7); | ||||
|         IRule<SaleInvoiceVO> var8 = new CheckOppValityUpdateRule(); | ||||
|         processer.addBeforeRule(var8); | ||||
|         IRule<SaleInvoiceVO> var9 = new CheckBillState(); | ||||
|         processer.addBeforeRule(var9); | ||||
|         IRule<SaleInvoiceVO> var10 = new SetUpdateAuditInfoRule(); | ||||
|         processer.addBeforeRule(var10); | ||||
|     } | ||||
| } | ||||
|  | @ -0,0 +1,196 @@ | |||
| /*     */ package nc.bs.so.m32.maintain.rule.insert; | ||||
| /*     */ | ||||
| /*     */ import java.util.ArrayList; | ||||
| /*     */ import java.util.HashMap; | ||||
| /*     */ import java.util.List; | ||||
| /*     */ import java.util.Map; | ||||
| /*     */ import nc.impl.pubapp.pattern.data.bill.BillQuery; | ||||
| /*     */ import nc.impl.pubapp.pattern.data.vo.VOQuery; | ||||
| /*     */ import nc.impl.pubapp.pattern.database.DataAccessUtils; | ||||
| /*     */ import nc.impl.pubapp.pattern.database.IDExQueryBuilder; | ||||
| /*     */ import nc.impl.pubapp.pattern.rule.IRule; | ||||
| /*     */ import nc.vo.ml.NCLangRes4VoTransl; | ||||
| /*     */ import nc.vo.pub.lang.UFDouble; | ||||
| /*     */ import nc.vo.pubapp.pattern.data.IRowSet; | ||||
| /*     */ import nc.vo.pubapp.pattern.exception.ExceptionUtils; | ||||
| /*     */ import nc.vo.pubapp.pattern.pub.MathTool; | ||||
| /*     */ import nc.vo.so.m32.entity.SaleInvoiceBVO; | ||||
| /*     */ import nc.vo.so.m32.entity.SaleInvoiceHVO; | ||||
| /*     */ import nc.vo.so.m32.entity.SaleInvoiceVO; | ||||
| /*     */ import nc.vo.so.m32.enumeration.OpposeFlag; | ||||
| /*     */ import nc.vo.so.m32.util.OpposeConvertUtil; | ||||
| /*     */ import nc.vo.so.pub.SOTable; | ||||
| /*     */ | ||||
| /*     */ | ||||
| /*     */ | ||||
| /*     */ | ||||
| /*     */ | ||||
| /*     */ | ||||
| /*     */ | ||||
| /*     */ | ||||
| /*     */ | ||||
| /*     */ | ||||
| /*     */ | ||||
| /*     */ | ||||
| /*     */ public class CheckOppValityRule | ||||
|         /*     */   extends Object | ||||
|         /*     */   implements IRule<SaleInvoiceVO> | ||||
|         /*     */ { | ||||
|     /*     */   public void process(SaleInvoiceVO[] vos) { | ||||
|         /*  40 */     List<String> aloppsrcid = new ArrayList<String>(); | ||||
|         /*  41 */     List<String> aloppsrcbid = new ArrayList<String>(); | ||||
|         /*     */ | ||||
|         /*  43 */     List<String> vopposesrccode = new ArrayList<String>(); | ||||
|         /*  44 */     Map<String, UFDouble[]> map = new HashMap<String, UFDouble[]>(); | ||||
|         /*     */ | ||||
|         /*  46 */     Map<String, UFDouble> bidMap = new HashMap<String, UFDouble>(); | ||||
|         /*     */ | ||||
|         /*  48 */     Map<String, UFDouble> taxMap = new HashMap<String, UFDouble>(); | ||||
|         /*     */ | ||||
|         /*  50 */     Map<String, UFDouble> opposeBidMap = new HashMap<String, UFDouble>(); | ||||
|         /*     */ | ||||
|         /*  52 */     Map<String, UFDouble> opposeTaxMap = new HashMap<String, UFDouble>(); | ||||
|         /*  53 */     for (SaleInvoiceVO voInvoice : vos) { | ||||
|             /*  54 */       if (OpposeFlag.GENERAL.equalsValue(voInvoice.getParentVO() | ||||
| /*  55 */           .getFopposeflag())) { | ||||
|                 /*     */ | ||||
|                 /*  57 */         vopposesrccode.add(voInvoice.getParentVO().getVopposesrccode()); | ||||
|                 /*  58 */         aloppsrcid.add(voInvoice.getParentVO().getCopposesrcid()); | ||||
|                 /*  59 */         for (SaleInvoiceBVO bvo : voInvoice.getChildrenVO()) { | ||||
|                     /*  60 */           aloppsrcbid.add(bvo.getCopposesrcbid()); | ||||
|                     /*  61 */           UFDouble num = (bvo.getNnum() == null) ? UFDouble.ZERO_DBL : bvo.getNnum(); | ||||
|                     /*  62 */           UFDouble mny = (bvo.getNorigtaxmny() == null) ? UFDouble.ZERO_DBL : bvo.getNorigtaxmny(); | ||||
|                     /*  63 */           map.put(bvo.getCopposesrcbid(), new UFDouble[] { num, mny }); | ||||
|                     /*     */ | ||||
|                     /*  65 */           bidMap.put(bvo.getCopposesrcbid(), bvo.getNorigmny()); | ||||
|                     /*     */ | ||||
|                     /*  67 */           taxMap.put(bvo.getCopposesrcbid(), bvo.getNtax()); | ||||
|                     /*     */         } | ||||
|                 /*     */       } | ||||
|             /*     */     } | ||||
|         /*     */ | ||||
|         /*  72 */     if (aloppsrcid.size() > 0) { | ||||
|             /*  73 */       String[] opposeHids = queryOpposeSaleInVoiceID((String[])vopposesrccode.toArray(new String[0])); | ||||
|             /*  74 */       SaleInvoiceVO[] opposeVOs = querySaleInvoiceVO(opposeHids); | ||||
|             /*  75 */       if (opposeVOs != null && opposeVOs.length > 0) { | ||||
|                 /*  76 */         for (SaleInvoiceVO vo : opposeVOs) { | ||||
|                     /*  77 */           for (SaleInvoiceBVO bvo : vo.getChildrenVO()) { | ||||
|                         /*  78 */             if (!opposeBidMap.isEmpty() && opposeBidMap.containsKey(bvo.getCopposesrcbid())) { | ||||
|                             /*  79 */               opposeBidMap.put(bvo.getCopposesrcbid(), | ||||
|                                     /*  80 */                   MathTool.add((UFDouble)opposeBidMap.get(bvo.getCopposesrcbid()), bvo.getNorigmny())); | ||||
|                             /*  81 */               opposeTaxMap.put(bvo.getCopposesrcbid(), | ||||
|                                     /*  82 */                   MathTool.add((UFDouble)opposeTaxMap.get(bvo.getCopposesrcbid()), bvo.getNtax())); | ||||
|                             /*     */             } else { | ||||
|                             /*  84 */               opposeBidMap.put(bvo.getCopposesrcbid(), bvo.getNorigmny()); | ||||
|                             /*  85 */               opposeTaxMap.put(bvo.getCopposesrcbid(), bvo.getNtax()); | ||||
|                             /*     */             } | ||||
|                         /*     */           } | ||||
|                     /*     */         } | ||||
|                 /*     */       } | ||||
|             /*  90 */       String[] hids = (String[])aloppsrcid.toArray(new String[0]); | ||||
|             /*  91 */       String[] selKeys = { "fstatusflag", "fopposeflag", "bsubunitflag" }; | ||||
|             /*     */ | ||||
|             /*     */ | ||||
|             /*     */ | ||||
|             /*     */ | ||||
|             /*  96 */       VOQuery<SaleInvoiceHVO> querysrv = new VOQuery<SaleInvoiceHVO>(SaleInvoiceHVO.class, selKeys); | ||||
|             /*     */ | ||||
|             /*  98 */       VOQuery<SaleInvoiceBVO> querysrvb = new VOQuery<SaleInvoiceBVO>(SaleInvoiceBVO.class, new String[] { "norigmny", "csaleinvoicebid", "nnum", "norigtaxmny", "ntotalopposenum", "ntotalopposemny", "ntax", "crowno" }); | ||||
|             /*     */ | ||||
|             /* 100 */       SaleInvoiceHVO[] voHeads = (SaleInvoiceHVO[])querysrv.query(hids); | ||||
|             /* 101 */       for (SaleInvoiceHVO head : voHeads) { | ||||
|                 /* 102 */         OpposeConvertUtil.getInstance().checkOpposeVality(head); | ||||
|                 /*     */       } | ||||
|             /* 104 */       SaleInvoiceBVO[] bvos = (SaleInvoiceBVO[])querysrvb.query((String[])aloppsrcbid.toArray(new String[0])); | ||||
|             /* 105 */       for (SaleInvoiceBVO bvo : bvos) { | ||||
|                 /*     */ | ||||
|                 /*     */ | ||||
|                 /*     */ | ||||
|                 /*     */ | ||||
|                 /*     */ | ||||
|                 /*     */ | ||||
|                 /*     */ | ||||
|                 /*     */ | ||||
|                 /*     */ | ||||
|                 /*     */ | ||||
|                 /*     */ | ||||
|                 /*     */ | ||||
|                 /*     */ | ||||
|                 /*     */ | ||||
|                 /*     */ | ||||
|                 /*     */ | ||||
|                 /*     */ | ||||
|                 /*     */ | ||||
|                 /*     */ | ||||
|                 /*     */ | ||||
|                 /*     */ | ||||
|                 /*     */ | ||||
|                 /*     */ | ||||
|                 /* 129 */         if (map.containsKey(bvo.getCsaleinvoicebid())) { | ||||
|                     /* 130 */           if (map.get(bvo.getCsaleinvoicebid())[0].multiply(bvo.getNnum()).compareTo(UFDouble.ZERO_DBL) > 0) { | ||||
|                         /*     */ | ||||
|                         /* 132 */             ExceptionUtils.wrappBusinessException(NCLangRes4VoTransl.getNCLangRes() | ||||
| /* 133 */                 .getStrByID("4006008_0", "04006008-0227")); | ||||
|                         /* 134 */           } else if (map.get(bvo.getCsaleinvoicebid())[1].multiply(bvo.getNorigtaxmny()).compareTo(UFDouble.ZERO_DBL) > 0) { | ||||
|                         /*     */ | ||||
|                         /* 136 */             ExceptionUtils.wrappBusinessException(NCLangRes4VoTransl.getNCLangRes() | ||||
| /* 137 */                 .getStrByID("4006008_0", "04006008-0228")); | ||||
|                         /*     */           } | ||||
|                     /* 139 */           UFDouble ntotalopposenum = (bvo.getNtotalopposenum() == null) ? UFDouble.ZERO_DBL : bvo.getNtotalopposenum(); | ||||
|                     /* 140 */           UFDouble ntotalopposemny = (bvo.getNtotalopposemny() == null) ? UFDouble.ZERO_DBL : bvo.getNtotalopposemny(); | ||||
|                     /* 141 */           if (map.get(bvo.getCsaleinvoicebid())[0].abs().compareTo(bvo.getNnum().abs().sub(ntotalopposenum.abs())) > 0) { | ||||
|                         /*     */ | ||||
|                         /* 143 */             ExceptionUtils.wrappBusinessException(NCLangRes4VoTransl.getNCLangRes() | ||||
| /* 144 */                 .getStrByID("4006008_0", "04006008-0229")); | ||||
|                         /* 145 */           } else if (map.get(bvo.getCsaleinvoicebid())[1].abs().compareTo(bvo.getNorigtaxmny().abs().sub(ntotalopposemny.abs())) > 0) { | ||||
|                         /*     */ | ||||
|                         /* 147 */             ExceptionUtils.wrappBusinessException(NCLangRes4VoTransl.getNCLangRes() | ||||
| /* 148 */                 .getStrByID("4006008_0", "04006008-0230")); | ||||
|                         /*     */           } | ||||
|                     /*     */         } | ||||
|                 /*     */       } | ||||
|             /*     */     } | ||||
|         /*     */   } | ||||
|     /*     */ | ||||
|     /*     */ | ||||
|     /*     */ | ||||
|     /*     */ | ||||
|     /*     */ | ||||
|     /*     */   private String[] queryOpposeSaleInVoiceID(String[] vopposesrccode) { | ||||
|         /* 160 */     if (vopposesrccode == null || vopposesrccode.length == 0) { | ||||
|             /* 161 */       return null; | ||||
|             /*     */     } | ||||
|         /* 163 */     StringBuilder sql = new StringBuilder("select csaleinvoiceid from so_saleinvoice"); | ||||
|         /* 164 */     sql.append(" where so_saleinvoice.dr = 0 and "); | ||||
|         /* 165 */     IDExQueryBuilder idqb = new IDExQueryBuilder(SOTable.TMP_SO_ID1.getName()); | ||||
|         /* 166 */     String where = idqb.buildSQL("vopposesrccode", vopposesrccode); | ||||
|         /* 167 */     sql.append(where); | ||||
|         /* 168 */     DataAccessUtils utils = new DataAccessUtils(); | ||||
|         /* 169 */     IRowSet rowset = utils.query(sql.toString()); | ||||
|         /* 170 */     return rowset.toOneDimensionStringArray(); | ||||
|         /*     */   } | ||||
|     /*     */ | ||||
|     /*     */ | ||||
|     /*     */ | ||||
|     /*     */ | ||||
|     /*     */ | ||||
|     /*     */ | ||||
|     /*     */ | ||||
|     /*     */ | ||||
|     /*     */ | ||||
|     /*     */   public SaleInvoiceVO[] querySaleInvoiceVO(String[] hids) { | ||||
|         /* 182 */     if (hids == null || hids.length == 0) { | ||||
|             /* 183 */       return null; | ||||
|             /*     */     } | ||||
|         /*     */ | ||||
|         /* 186 */     BillQuery<SaleInvoiceVO> query = new BillQuery<SaleInvoiceVO>(SaleInvoiceVO.class); | ||||
|         /*     */ | ||||
|         /* 188 */     return (SaleInvoiceVO[])query.query(hids); | ||||
|         /*     */   } | ||||
|     /*     */ } | ||||
| 
 | ||||
| 
 | ||||
| /* Location:              E:\project\yonyou\tk_gjb\YonBIP2312\modules\so\META-INF\lib\so_saleinvoice.jar!/nc/bs/so/m32/maintain/rule/insert/CheckOppValityRule.class | ||||
|  * Java compiler version: 17 (61.0) | ||||
|  * JD-Core Version:       1.0.7 | ||||
|  */ | ||||
|  | @ -0,0 +1,109 @@ | |||
| /*    */ package nc.bs.so.m32.maintain.rule.insert; | ||||
| /*    */ | ||||
| /*    */ import java.util.HashMap; | ||||
| /*    */ import java.util.Map; | ||||
| /*    */ import nc.bs.framework.common.NCLocator; | ||||
| /*    */ import nc.impl.pubapp.pattern.rule.IRule; | ||||
| /*    */ import nc.pubitf.so.m35.so.m32.IArsubToSaleInvoice; | ||||
| /*    */ import nc.vo.pub.BusinessException; | ||||
| /*    */ import nc.vo.pub.lang.UFDouble; | ||||
| /*    */ import nc.vo.pubapp.pattern.exception.ExceptionUtils; | ||||
| /*    */ import nc.vo.scmpub.res.billtype.SOBillType; | ||||
| /*    */ import nc.vo.so.m32.entity.SaleInvoiceBVO; | ||||
| /*    */ import nc.vo.so.m32.entity.SaleInvoiceHVO; | ||||
| /*    */ import nc.vo.so.m32.entity.SaleInvoiceVO; | ||||
| /*    */ import nc.vo.so.m32.enumeration.OpposeFlag; | ||||
| /*    */ import nc.vo.so.m35.entity.ArsubInterfaceVO; | ||||
| /*    */ import nc.vo.so.m35.paravo.OffsetParaVO; | ||||
| /*    */ import nc.vo.so.pub.util.SOMathUtil; | ||||
| /*    */ | ||||
| /*    */ | ||||
| /*    */ | ||||
| /*    */ | ||||
| /*    */ | ||||
| /*    */ | ||||
| /*    */ | ||||
| /*    */ | ||||
| /*    */ | ||||
| /*    */ | ||||
| /*    */ | ||||
| /*    */ | ||||
| /*    */ public class OppOffsetRule | ||||
|         /*    */   extends Object | ||||
|         /*    */   implements IRule<SaleInvoiceVO> | ||||
|         /*    */ { | ||||
|     /*    */   public void process(SaleInvoiceVO[] vos) { | ||||
|         /* 36 */     Map<String, ArsubInterfaceVO> itfvos = new HashMap<String, ArsubInterfaceVO>(); | ||||
|         /*    */ | ||||
|         /*    */ | ||||
|         /* 39 */     Map<String, UFDouble> offsetmnymap = new HashMap<String, UFDouble>(); | ||||
|         /* 40 */     Map<String, OffsetParaVO> offsetparavos = new HashMap<String, OffsetParaVO>(); | ||||
|         /*    */ | ||||
|         /* 42 */     prepareParas(vos, itfvos, offsetparavos, offsetmnymap); | ||||
|         /*    */ | ||||
|         /* 44 */     if (itfvos.size() == 0) { | ||||
|             /*    */       return; | ||||
|             /*    */     } | ||||
|         /*    */ | ||||
|         /* 48 */     IArsubToSaleInvoice srv = (IArsubToSaleInvoice)NCLocator.getInstance().lookup(IArsubToSaleInvoice.class); | ||||
|         /*    */     try { | ||||
|             /* 50 */       srv.processOffsetWithOpp(itfvos, offsetparavos, offsetmnymap); | ||||
|             /*    */     } | ||||
|         /* 52 */     catch (BusinessException e) { | ||||
|             /* 53 */       ExceptionUtils.wrappException(e); | ||||
|             /*    */     } | ||||
|         /*    */   } | ||||
|     /*    */ | ||||
|     /*    */ | ||||
|     /*    */ | ||||
|     /*    */ | ||||
|     /*    */ | ||||
|     /*    */   private void prepareParas(SaleInvoiceVO[] vos, Map<String, ArsubInterfaceVO> itfvos, Map<String, OffsetParaVO> offsetparavos, Map<String, UFDouble> offsetmnymap) { | ||||
|         /* 62 */     for (SaleInvoiceVO vo : vos) { | ||||
|             /*    */ | ||||
|             /* 64 */       SaleInvoiceHVO hvo = vo.getParentVO(); | ||||
|             /* 65 */       SaleInvoiceBVO[] bvos = vo.getChildrenVO(); | ||||
|             /* 66 */       if (OpposeFlag.GENERAL.equalsValue(hvo.getFopposeflag())) | ||||
|                 /*    */       { | ||||
|                 /*    */ | ||||
|                 /*    */ | ||||
|                 /* 70 */         if (null != hvo.getBsubunitflag() && hvo | ||||
| /* 71 */           .getBsubunitflag().booleanValue()) | ||||
|                     /*    */         { | ||||
|                     /*    */ | ||||
|                     /* 74 */           for (SaleInvoiceBVO bvo : bvos) { | ||||
|                         /*    */ | ||||
|                         /* 76 */             if (!SOMathUtil.isZero(bvo.getNorigsubmny())) { | ||||
|                             /*    */ | ||||
|                             /*    */ | ||||
|                             /* 79 */               String bid = bvo.getCsaleinvoicebid(); | ||||
|                             /* 80 */               offsetmnymap.put(bid, bvo.getNorigsubmny()); | ||||
|                             /*    */ | ||||
|                             /* 82 */               ArsubInterfaceVO itfvo = new ArsubInterfaceVO(); | ||||
|                             /* 83 */               itfvo.setCsalebillid(bvo.getCsaleinvoiceid()); | ||||
|                             /* 84 */               itfvo.setVbillcode(hvo.getVbillcode()); | ||||
|                             /* 85 */               itfvo.setVbilltype(SOBillType.Invoice.getCode()); | ||||
|                             /* 86 */               itfvos.put(bid, itfvo); | ||||
|                             /*    */ | ||||
|                             /* 88 */               OffsetParaVO paravo = new OffsetParaVO(); | ||||
|                             /* 89 */               paravo.setCorigcurrencyid(hvo.getCorigcurrencyid()); | ||||
|                             /* 90 */               paravo.setInvoicecusts(hvo.getCinvoicecustid()); | ||||
|                             /* 91 */               paravo.setOrdercusts(bvo.getCordercustid()); | ||||
|                             /* 92 */               paravo.setOrdertrantype(bvo.getVfirsttrantype()); | ||||
|                             /* 93 */               paravo.setProdline(bvo.getCprodlineid()); | ||||
|                             /* 94 */               paravo.setSaleorg(bvo.getPk_org()); | ||||
|                             /* 95 */               paravo.setSettleorg(bvo.getPk_org()); | ||||
|                             /* 96 */               offsetparavos.put(bvo.getCsaleinvoicebid(), paravo); | ||||
|                             /*    */             } | ||||
|                         /*    */           } | ||||
|                     /*    */         } | ||||
|                 /*    */       } | ||||
|             /*    */     } | ||||
|         /*    */   } | ||||
|     /*    */ } | ||||
| 
 | ||||
| 
 | ||||
| /* Location:              E:\project\yonyou\tk_gjb\YonBIP2312\modules\so\META-INF\lib\so_saleinvoice.jar!/nc/bs/so/m32/maintain/rule/insert/OppOffsetRule.class | ||||
|  * Java compiler version: 17 (61.0) | ||||
|  * JD-Core Version:       1.0.7 | ||||
|  */ | ||||
|  | @ -0,0 +1,54 @@ | |||
| /*    */ package nc.bs.so.m32.maintain.rule.insert; | ||||
| /*    */ | ||||
| /*    */ import java.util.ArrayList; | ||||
| /*    */ import java.util.List; | ||||
| /*    */ import nc.impl.pubapp.pattern.rule.IRule; | ||||
| /*    */ import nc.pubitf.so.m32.so.m32.RewritePara32For32Opp; | ||||
| /*    */ import nc.vo.pubapp.pattern.pub.MathTool; | ||||
| /*    */ import nc.vo.pubapp.pattern.pub.PubAppTool; | ||||
| /*    */ import nc.vo.so.m32.entity.SaleInvoiceBVO; | ||||
| /*    */ import nc.vo.so.m32.entity.SaleInvoiceVO; | ||||
| /*    */ import nc.vo.so.m32.enumeration.OpposeFlag; | ||||
| /*    */ import nc.vo.so.m32.util.RemoteFormSOUtil; | ||||
| /*    */ | ||||
| /*    */ | ||||
| /*    */ | ||||
| /*    */ | ||||
| /*    */ | ||||
| /*    */ | ||||
| /*    */ | ||||
| /*    */ | ||||
| /*    */ | ||||
| /*    */ | ||||
| /*    */ | ||||
| /*    */ | ||||
| /*    */ public class UpdateOppInsertRule | ||||
|         /*    */   extends Object | ||||
|         /*    */   implements IRule<SaleInvoiceVO> | ||||
|         /*    */ { | ||||
|     /*    */   public void process(SaleInvoiceVO[] vos) { | ||||
|         /* 30 */     List<RewritePara32For32Opp> paraList = new ArrayList<RewritePara32For32Opp>(); | ||||
|         /* 31 */     for (SaleInvoiceVO vo : vos) { | ||||
|             /* 32 */       if (vo.getParentVO().getFopposeflag().intValue() == OpposeFlag.GENERAL.toIntValue()) { | ||||
|                 /*    */ | ||||
|                 /*    */ | ||||
|                 /* 35 */         SaleInvoiceBVO[] bvos = vo.getChildrenVO(); | ||||
|                 /* 36 */         for (SaleInvoiceBVO bvo : bvos) { | ||||
|                     /* 37 */           if (!PubAppTool.isNull(bvo.getCopposesrcbid())) { | ||||
|                         /* 38 */             RewritePara32For32Opp para = new RewritePara32For32Opp(bvo.getCopposesrcbid(), MathTool.oppose(bvo.getNnum()), MathTool.oppose(bvo.getNorigtaxmny())); | ||||
|                         /* 39 */             paraList.add(para); | ||||
|                         /*    */           } | ||||
|                     /*    */         } | ||||
|                 /*    */       } | ||||
|             /* 43 */     }  if (paraList.isEmpty()) { | ||||
|             /*    */       return; | ||||
|             /*    */     } | ||||
|         /* 46 */     RemoteFormSOUtil.rewrite32For32Opp((RewritePara32For32Opp[])paraList.toArray(new RewritePara32For32Opp[0])); | ||||
|         /*    */   } | ||||
|     /*    */ } | ||||
| 
 | ||||
| 
 | ||||
| /* Location:              E:\project\yonyou\tk_gjb\YonBIP2312\modules\so\META-INF\lib\so_saleinvoice.jar!/nc/bs/so/m32/maintain/rule/insert/UpdateOppInsertRule.class | ||||
|  * Java compiler version: 17 (61.0) | ||||
|  * JD-Core Version:       1.0.7 | ||||
|  */ | ||||
|  | @ -0,0 +1,121 @@ | |||
| // | ||||
| // Source code recreated from a .class file by IntelliJ IDEA | ||||
| // (powered by FernFlower decompiler) | ||||
| // | ||||
| 
 | ||||
| package nc.bs.so.m32.maintain.rule.update; | ||||
| 
 | ||||
| import java.util.ArrayList; | ||||
| import java.util.HashMap; | ||||
| import java.util.List; | ||||
| import java.util.Map; | ||||
| import nc.impl.pubapp.pattern.data.bill.BillQuery; | ||||
| import nc.impl.pubapp.pattern.data.vo.VOQuery; | ||||
| import nc.impl.pubapp.pattern.database.DataAccessUtils; | ||||
| import nc.impl.pubapp.pattern.database.IDExQueryBuilder; | ||||
| import nc.impl.pubapp.pattern.rule.IRule; | ||||
| import nc.vo.ml.NCLangRes4VoTransl; | ||||
| import nc.vo.pub.lang.UFDouble; | ||||
| import nc.vo.pubapp.pattern.data.IRowSet; | ||||
| import nc.vo.pubapp.pattern.exception.ExceptionUtils; | ||||
| import nc.vo.pubapp.pattern.pub.MathTool; | ||||
| import nc.vo.scmpub.util.CollectionUtils; | ||||
| import nc.vo.so.m32.entity.SaleInvoiceBVO; | ||||
| import nc.vo.so.m32.entity.SaleInvoiceVO; | ||||
| import nc.vo.so.m32.enumeration.OpposeFlag; | ||||
| import nc.vo.so.pub.SOTable; | ||||
| 
 | ||||
| public class CheckOppValityUpdateRule implements IRule<SaleInvoiceVO> { | ||||
|     public CheckOppValityUpdateRule() { | ||||
|     } | ||||
| 
 | ||||
|     public void process(SaleInvoiceVO[] vos) { | ||||
|         List<String> aloppsrcbid = new ArrayList(); | ||||
|         List<String> vopposesrccode = new ArrayList(); | ||||
|         Map<String, UFDouble[]> map = new HashMap(); | ||||
|         Map<String, UFDouble> bidMap = new HashMap(); | ||||
|         Map<String, UFDouble> taxMap = new HashMap(); | ||||
|         Map<String, UFDouble> opposeBidMap = new HashMap(); | ||||
|         Map<String, UFDouble> opposeTaxMap = new HashMap(); | ||||
| 
 | ||||
|         for(SaleInvoiceVO voInvoice : vos) { | ||||
|             if (OpposeFlag.GENERAL.equalsValue(voInvoice.getParentVO().getFopposeflag())) { | ||||
|                 vopposesrccode.add(voInvoice.getParentVO().getVopposesrccode()); | ||||
| 
 | ||||
|                 for(SaleInvoiceBVO bvo : voInvoice.getChildrenVO()) { | ||||
|                     aloppsrcbid.add(bvo.getCopposesrcbid()); | ||||
|                     UFDouble num = bvo.getNnum() == null ? UFDouble.ZERO_DBL : bvo.getNnum(); | ||||
|                     UFDouble mny = bvo.getNorigtaxmny() == null ? UFDouble.ZERO_DBL : bvo.getNorigtaxmny(); | ||||
|                     map.put(bvo.getCopposesrcbid(), new UFDouble[]{num, mny}); | ||||
|                     bidMap.put(bvo.getCopposesrcbid(), bvo.getNorigmny()); | ||||
|                     taxMap.put(bvo.getCopposesrcbid(), bvo.getNtax()); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         if (!aloppsrcbid.isEmpty()) { | ||||
|             String[] opposeHids = this.queryOpposeSaleInVoiceID((String[])vopposesrccode.toArray(new String[0])); | ||||
|             List<String> list = new ArrayList(); | ||||
|             CollectionUtils.addArrayToList(list, opposeHids); | ||||
|             if (list.contains(vos[0].getParentVO().getCsaleinvoiceid())) { | ||||
|                 list.remove(vos[0].getParentVO().getCsaleinvoiceid()); | ||||
|             } | ||||
| 
 | ||||
|             opposeHids = (String[])list.toArray(new String[0]); | ||||
|             SaleInvoiceVO[] opposeVOs = this.querySaleInvoiceVO(opposeHids); | ||||
|             if (opposeVOs != null && opposeVOs.length > 0) { | ||||
|                 for(SaleInvoiceVO vo : opposeVOs) { | ||||
|                     for(SaleInvoiceBVO bvo : vo.getChildrenVO()) { | ||||
|                         if (!opposeBidMap.isEmpty() && opposeBidMap.containsKey(bvo.getCopposesrcbid())) { | ||||
|                             opposeBidMap.put(bvo.getCopposesrcbid(), MathTool.add((UFDouble)opposeBidMap.get(bvo.getCopposesrcbid()), bvo.getNorigmny())); | ||||
|                             opposeTaxMap.put(bvo.getCopposesrcbid(), MathTool.add((UFDouble)opposeTaxMap.get(bvo.getCopposesrcbid()), bvo.getNtax())); | ||||
|                         } else { | ||||
|                             opposeBidMap.put(bvo.getCopposesrcbid(), bvo.getNorigmny()); | ||||
|                             opposeTaxMap.put(bvo.getCopposesrcbid(), bvo.getNtax()); | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
| 
 | ||||
|             VOQuery<SaleInvoiceBVO> querysrvb = new VOQuery(SaleInvoiceBVO.class, new String[]{"norigmny", "csaleinvoicebid", "nnum", "norigtaxmny", "ntotalopposenum", "ntotalopposemny", "ntax", "crowno"}); | ||||
|             SaleInvoiceBVO[] bvos = (SaleInvoiceBVO[])querysrvb.query((String[])aloppsrcbid.toArray(new String[0])); | ||||
| 
 | ||||
|             for(SaleInvoiceBVO bvo : bvos) { | ||||
|                 if (map.containsKey(bvo.getCsaleinvoicebid())) { | ||||
|                     if (((UFDouble[])map.get(bvo.getCsaleinvoicebid()))[0].multiply(bvo.getNnum()).compareTo(UFDouble.ZERO_DBL) > 0) { | ||||
|                         ExceptionUtils.wrappBusinessException(NCLangRes4VoTransl.getNCLangRes().getStrByID("4006008_0", "04006008-0227")); | ||||
|                     } else if (((UFDouble[])map.get(bvo.getCsaleinvoicebid()))[1].multiply(bvo.getNorigtaxmny()).compareTo(UFDouble.ZERO_DBL) > 0) { | ||||
|                         ExceptionUtils.wrappBusinessException(NCLangRes4VoTransl.getNCLangRes().getStrByID("4006008_0", "04006008-0228")); | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|     } | ||||
| 
 | ||||
|     private String[] queryOpposeSaleInVoiceID(String[] vopposesrccode) { | ||||
|         if (vopposesrccode != null && vopposesrccode.length != 0) { | ||||
|             StringBuilder sql = new StringBuilder("select csaleinvoiceid from so_saleinvoice"); | ||||
|             sql.append(" where so_saleinvoice.dr = 0 and "); | ||||
|             IDExQueryBuilder idqb = new IDExQueryBuilder(SOTable.TMP_SO_ID1.getName()); | ||||
|             String where = idqb.buildSQL("vopposesrccode", vopposesrccode); | ||||
|             sql.append(where); | ||||
|             DataAccessUtils utils = new DataAccessUtils(); | ||||
|             IRowSet rowset = utils.query(sql.toString()); | ||||
|             String[] cbillid = rowset.toOneDimensionStringArray(); | ||||
|             return cbillid; | ||||
|         } else { | ||||
|             return null; | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     public SaleInvoiceVO[] querySaleInvoiceVO(String[] hids) { | ||||
|         if (hids != null && hids.length != 0) { | ||||
|             BillQuery<SaleInvoiceVO> query = new BillQuery(SaleInvoiceVO.class); | ||||
|             SaleInvoiceVO[] bills = (SaleInvoiceVO[])query.query(hids); | ||||
|             return bills; | ||||
|         } else { | ||||
|             return null; | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | @ -0,0 +1,325 @@ | |||
| package nc.vo.so.m32.saleinvoice.operator; | ||||
| 
 | ||||
| import cn.hutool.core.bean.BeanUtil; | ||||
| import cn.hutool.core.bean.copier.CopyOptions; | ||||
| 
 | ||||
| import com.alibaba.fastjson.JSON; | ||||
| import com.alibaba.fastjson.JSONObject; | ||||
| 
 | ||||
| import nc.bs.framework.common.NCLocator; | ||||
| import nc.bs.framework.core.util.ObjectCreator; | ||||
| import nc.bs.ia.audit.pub.CloneUtil; | ||||
| import nc.bs.logging.Logger; | ||||
| import nc.bs.pub.common.PfServiceScmUtil; | ||||
| import nc.bs.trade.business.HYSuperDMO; | ||||
| import nc.itf.uap.IUAPQueryBS; | ||||
| import nc.pubitf.so.m32.api.ISaleinvoiceQueryAPI; | ||||
| import nc.vo.pub.BusinessException; | ||||
| import nc.vo.pub.lang.UFBoolean; | ||||
| import nc.vo.pub.lang.UFDate; | ||||
| import nc.vo.pub.lang.UFDouble; | ||||
| import nc.vo.scmpub.res.billtype.SOBillType; | ||||
| import nc.vo.so.m32.entity.SaleInvoiceBVO; | ||||
| import nc.vo.so.m32.entity.SaleInvoiceHVO; | ||||
| import nc.vo.so.m32.entity.SaleInvoiceVO; | ||||
| import nc.vo.sscivm.ivsale.IVApplicationAggVO; | ||||
| import nc.vo.sscivm.ivsale.IVApplicationBodyVO; | ||||
| import nc.vo.sscivm.ivsale.IVApplicationHeadVO; | ||||
| import nccloud.api.baseapp.exchange.convert.IExchangeForService; | ||||
| import nccloud.api.baseapp.exchange.convert.OpenApiConvertDataObject; | ||||
| import nccloud.api.baseapp.exchange.convert.OpenApiConvertDataResult; | ||||
| import nccloud.api.rest.utils.ResultMessageUtil; | ||||
| 
 | ||||
| import nccloud.framework.service.ServiceLocator; | ||||
| import nccloud.itf.sscivm.ivsale.service.IVApplicationService; | ||||
| import nccloud.ws.rest.resource.AbstractNCCRestResource; | ||||
| import org.json.JSONString; | ||||
| import uap.mw.trans.TransactionFactory; | ||||
| 
 | ||||
| import javax.ws.rs.Consumes; | ||||
| import javax.ws.rs.POST; | ||||
| import javax.ws.rs.Path; | ||||
| import javax.ws.rs.Produces; | ||||
| import java.util.ArrayList; | ||||
| import java.util.List; | ||||
| import java.util.Map; | ||||
| 
 | ||||
| 
 | ||||
| @Path("so/saleinvoice/operator") | ||||
| public class billSaveAction extends AbstractNCCRestResource { | ||||
| 
 | ||||
|     public static String fplxStr = "";//开票申请发票类型 | ||||
| 
 | ||||
|     public billSaveAction() { | ||||
| 
 | ||||
|     } | ||||
| 
 | ||||
|     public OpenApiConvertDataResult changeToExchangeData(OpenApiConvertDataObject openApiConvertDataObject) | ||||
|             throws Exception { | ||||
|         return getPFxxEJBService().changeToExchangeData(openApiConvertDataObject); | ||||
|     } | ||||
| 
 | ||||
|     public static IExchangeForService getPFxxEJBService() { | ||||
|         IExchangeForService exchangeForService = (IExchangeForService) ObjectCreator.newInstance("ufesbexpress", | ||||
|                 "nccloud.pubimpl.pfxx.convert.ExchangeForServiceImpl"); | ||||
|         return exchangeForService; | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public String getModule() { | ||||
|         return "so"; | ||||
|     } | ||||
| 
 | ||||
|     @POST | ||||
|     @Path("/billSaveRp") | ||||
|     @Consumes({"application/json"}) | ||||
|     @Produces({"application/json"}) | ||||
|     public JSONString billSaveRp(JSONString json) throws Exception { | ||||
|         /** | ||||
|          * 销售发票红冲: | ||||
|          *  1.根据bip传参中的销售发票主表id查询erp的销售发票VO | ||||
|          *  2.根据查询的销售发票VO生成红冲的销售发票 | ||||
|          */ | ||||
|         JSONObject jobject = JSONObject.parseObject(json.toJSONString()); | ||||
|         if (jobject == null) { | ||||
|             return ResultMessageUtil.exceptionToJSON(new NullPointerException("JSONString:null")); | ||||
|         } | ||||
|         JSONObject bject = jobject.getJSONObject("billhead"); | ||||
|         if (bject == null) { | ||||
|             return ResultMessageUtil.exceptionToJSON(new NullPointerException("billhead:null")); | ||||
|         } | ||||
|         String csaleinvoiceid = bject.getString("csaleinvoiceid"); //销售发票id | ||||
|         //根据销售发票主实体id查询销售发票 | ||||
|         String[] ids = {csaleinvoiceid}; | ||||
|         SaleInvoiceVO[] saleInvoiceVOs = NCLocator.getInstance().lookup(ISaleinvoiceQueryAPI.class) | ||||
|                 .queryVOByIDs(ids); | ||||
|         if(saleInvoiceVOs.length <= 0){ | ||||
|             return ResultMessageUtil.exceptionToJSON(new NullPointerException("未查询到Erp对应的销售发票")); | ||||
|         } | ||||
|         try{ | ||||
|             //手动开启事务 | ||||
|             TransactionFactory.getTMProxy().begin(3,0); | ||||
|             //调用函数根据原销售发票组装新红冲发票 | ||||
|             SaleInvoiceVO saleInvoiceRedRushVO = makeNewRedRushSaleInvoice(saleInvoiceVOs[0],bject); | ||||
|             //生成红冲发票 | ||||
|             SaleInvoiceVO[] returnSaleInvoiceVO = (SaleInvoiceVO[])PfServiceScmUtil.processBatch("WRITE", SOBillType.Invoice.getCode(), new SaleInvoiceVO[] { saleInvoiceRedRushVO }, null, null); | ||||
|             if(returnSaleInvoiceVO !=null && returnSaleInvoiceVO.length > 0) { | ||||
|                 //生成红冲发票成功后,执行开票申请红冲逻辑 | ||||
|                 /** | ||||
|                  * 开票申请红冲逻辑: | ||||
|                  *  1.根据销售发票号查询下游开票申请 | ||||
|                  *  2.根据原开票申请生成新红冲 | ||||
|                  */ | ||||
|                 String vBillcode = saleInvoiceVOs[0].getParentVO().getVbillcode(); | ||||
|                 HYSuperDMO dmo = new HYSuperDMO(); | ||||
|                 //开票申请单主表 | ||||
|                 IVApplicationHeadVO[] iVApplicationHeadVO=(IVApplicationHeadVO[]) dmo.queryByWhereClause(IVApplicationHeadVO.class, "src_billno='"+vBillcode+"' and dr=0 "); | ||||
|                 String pk_ivapplication = iVApplicationHeadVO[0].getPk_ivapplication(); //开票申请id | ||||
|                 //开票申请单子表 | ||||
|                 IVApplicationBodyVO[] iVApplicationBodyVOs=(IVApplicationBodyVO[]) dmo.queryByWhereClause(IVApplicationBodyVO.class, "pk_ivapplication='"+pk_ivapplication+"' and dr=0 "); | ||||
|                 //调用函数封装开票申请红冲VO | ||||
|                 IVApplicationAggVO iVApplicationAggVO = makeNewRedRushIVApplicationAggVO(iVApplicationHeadVO[0],iVApplicationBodyVOs,bject); | ||||
|                 //生成红冲的开票申请 | ||||
| //                IVApplicationService ivApplicationServiceservice = (IVApplicationService) ServiceLocator.find(IVApplicationService.class); | ||||
| //                IVApplicationAggVO returnIVApplicationAggVO = ivApplicationServiceservice.save(iVApplicationAggVO); | ||||
|                 Object returnIVApplicationAggVO = PfServiceScmUtil.processBatch("SAVE", "SSCIVA", new IVApplicationAggVO[] { iVApplicationAggVO }, null, null); | ||||
|                 if(returnIVApplicationAggVO != null ) { | ||||
|                     //正常结束 | ||||
|                     TransactionFactory.getTMProxy().end(null); | ||||
|                     return ResultMessageUtil.toJSON(null, "接口调用成功"); | ||||
|                 }else{ | ||||
|                     Exception e = new Exception("接口调用失败"); | ||||
|                     return ResultMessageUtil.exceptionToJSON(e); | ||||
|                 } | ||||
|             }else{ | ||||
|                 Exception e = new Exception("接口调用失败"); | ||||
|                 return ResultMessageUtil.exceptionToJSON(e); | ||||
|             } | ||||
|         }catch (BusinessException e) { | ||||
|             //异常回滚 | ||||
|             TransactionFactory.getTMProxy().end(e); | ||||
|             Logger.error("writeBack Error: ",e); | ||||
|             return ResultMessageUtil.exceptionToJSON(e); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * 构造红冲发票VO | ||||
|      * @param originalSaleInvoiceVO | ||||
|      * @param bject | ||||
|      * @return | ||||
|      * @throws Exception | ||||
|      */ | ||||
|     public static SaleInvoiceVO makeNewRedRushSaleInvoice(SaleInvoiceVO originalSaleInvoiceVO,JSONObject bject) throws Exception { | ||||
|         try { | ||||
|             SaleInvoiceVO saleInvoiceVO = new SaleInvoiceVO(); | ||||
|             SaleInvoiceHVO saleInvoiceHVO = originalSaleInvoiceVO.getParentVO(); //主实体 | ||||
|             SaleInvoiceBVO[] saleInvoiceBVOs = originalSaleInvoiceVO.getChildrenVO(); //子实体 | ||||
|             SaleInvoiceHVO newSaleInvoiceHVO = new SaleInvoiceHVO(); //新主实体 | ||||
| 
 | ||||
|             //子实体属性赋值 | ||||
|             UFDouble sumNum = new UFDouble(); //合计数量 | ||||
|             UFDouble sumNtax = new UFDouble(); //合计税额 | ||||
|             UFDouble sumNcaltaxmny = new UFDouble(); //合计计税金额 | ||||
|             UFDouble sumNorigmny = new UFDouble(); //合计无税金额 | ||||
|             UFDouble sumNorigtaxmny = new UFDouble(); //合计价税合计 | ||||
|             int i = 0; | ||||
|             com.alibaba.fastjson.JSONArray paramsSaleInvoiceBVOsJSA = (com.alibaba.fastjson.JSONArray)bject.get("SaleInvoiceBVOs"); //参数子实体数组 | ||||
|             List<JSONObject> paramsSaleInvoiceBVOs = paramsSaleInvoiceBVOsJSA.toJavaList(JSONObject.class); | ||||
|             SaleInvoiceBVO[] newSaleInvoiceBVOs = new SaleInvoiceBVO[paramsSaleInvoiceBVOs.size()]; //新子实体 | ||||
|             for(SaleInvoiceBVO saleInvoiceBVO : saleInvoiceBVOs){ | ||||
|                 String csaleinvoicebid = saleInvoiceBVO.getCsaleinvoicebid(); //子表id | ||||
|                 //筛选参数红冲的子表集合 | ||||
|                 List<JSONObject> newParamsSaleInvoiceBVOs = paramsSaleInvoiceBVOs.stream().filter(item->{ | ||||
|                     String parCsaleinvoicebid = item.getString("csaleinvoicebid")+""; | ||||
|                     return csaleinvoicebid.equals(parCsaleinvoicebid); | ||||
|                 }).toList(); | ||||
|                 if(newParamsSaleInvoiceBVOs.size()<=0){ | ||||
|                     continue; | ||||
|                 } | ||||
|                 JSONObject paramSaleInvoiceBVO = newParamsSaleInvoiceBVOs.get(0); //参数子表 | ||||
|                 SaleInvoiceBVO newSaleInvoiceBVO = new SaleInvoiceBVO(); | ||||
| //                BeanUtil.copyProperties(saleInvoiceBVO,newSaleInvoiceBVO); | ||||
|                 //克隆取值原子表销售发票 | ||||
|                 newSaleInvoiceBVO = (SaleInvoiceBVO)CloneUtil.depthClone(saleInvoiceBVO); | ||||
|                 //赋值之后修改子实体红冲时字段 | ||||
|                 newSaleInvoiceBVO.setCsaleinvoicebid(null); //发票子实体id | ||||
|                 newSaleInvoiceBVO.setDbilldate(newSaleInvoiceHVO.getDbilldate()); //开票日期 | ||||
|                 newSaleInvoiceBVO.setNastnum(new UFDouble(paramSaleInvoiceBVO.getString("nastnum"))); //数量 | ||||
|                 newSaleInvoiceBVO.setNnum(new UFDouble(paramSaleInvoiceBVO.getString("nnum"))); //主数量 | ||||
|                 newSaleInvoiceBVO.setNtax(new UFDouble(paramSaleInvoiceBVO.getString("ntax"))); //税额 | ||||
|                 newSaleInvoiceBVO.setNmny(new UFDouble(paramSaleInvoiceBVO.getString("nmny"))); //本币无税金额 | ||||
|                 newSaleInvoiceBVO.setNtaxmny(new UFDouble(paramSaleInvoiceBVO.getString("ntaxmny"))); //本币价税合计 | ||||
|                 newSaleInvoiceBVO.setNcaltaxmny(new UFDouble(paramSaleInvoiceBVO.getString("ncaltaxmny"))); //计税金额 | ||||
|                 newSaleInvoiceBVO.setNorigmny(new UFDouble(paramSaleInvoiceBVO.getString("norigmny"))); //无税金额 | ||||
|                 newSaleInvoiceBVO.setNorigtaxmny(new UFDouble(paramSaleInvoiceBVO.getString("norigtaxmny"))); //价税合计 | ||||
|                 newSaleInvoiceBVO.setCopposesrcbid(paramSaleInvoiceBVO.getString("csaleinvoicebid")); //对冲来源子表id | ||||
|                 newSaleInvoiceBVO.setNqtunitnum(null); //报价数量 | ||||
|                 newSaleInvoiceBVO.setCsaleinvoiceid(null); //发票关联主表id | ||||
|                 newSaleInvoiceBVO.setNtotalcostnum(null); //累计成本结算数量 | ||||
|                 newSaleInvoiceBVO.setNtotalincomemny(null); //累计确认应收金额 | ||||
|                 newSaleInvoiceBVO.setNtotalincomenum(null); //累计确认应收数量 | ||||
|                 newSaleInvoiceBVO.setVchangerate("1.00/1.00"); //换算率 | ||||
|                 newSaleInvoiceBVOs[i++] = newSaleInvoiceBVO; | ||||
|                 sumNum = sumNum.add(new UFDouble(paramSaleInvoiceBVO.getString("nnum"))); | ||||
|                 sumNtax = sumNtax.add(new UFDouble(paramSaleInvoiceBVO.getString("ntax"))); | ||||
|                 sumNcaltaxmny = sumNcaltaxmny.add(new UFDouble(paramSaleInvoiceBVO.getString("ncaltaxmny"))); | ||||
|                 sumNorigmny = sumNorigmny.add(new UFDouble(paramSaleInvoiceBVO.getString("norigmny"))); | ||||
|                 sumNorigtaxmny = sumNorigtaxmny.add(new UFDouble(paramSaleInvoiceBVO.getString("norigtaxmny"))); | ||||
|             } | ||||
| 
 | ||||
|             //克隆取值原子表销售发票 | ||||
|             newSaleInvoiceHVO = (SaleInvoiceHVO)CloneUtil.depthClone(saleInvoiceHVO); | ||||
|             //赋值之后修改主实体红冲时字段 | ||||
|             newSaleInvoiceHVO.setCsaleinvoiceid(null);  //发票主实体id | ||||
|             newSaleInvoiceHVO.setVbillcode(null);  //发票号 | ||||
|             newSaleInvoiceHVO.setDbilldate(new UFDate());  //开票日期 | ||||
|             newSaleInvoiceHVO.setDmakedate(new UFDate());  //制单日期 | ||||
|             newSaleInvoiceHVO.setBsubunitflag(UFBoolean.TRUE);  //冲抵标记 | ||||
|             newSaleInvoiceHVO.setFopposeflag(2);  //对冲标记 (2:对冲生成) | ||||
|             newSaleInvoiceHVO.setFstatusflag(1);  //单据状态 (1:自由态) | ||||
|             newSaleInvoiceHVO.setNtotalastnum(null);  //总数量 | ||||
|             newSaleInvoiceHVO.setNtotalorigsubmny(null);  //冲抵金额 | ||||
|             newSaleInvoiceHVO.setNtotalorigmny(null);  //价税合计 | ||||
|             newSaleInvoiceHVO.setVopposesrccode(saleInvoiceHVO.getVbillcode());  //对冲来源发票号 | ||||
|             newSaleInvoiceHVO.setCopposesrcid(saleInvoiceHVO.getCsaleinvoiceid());  //对冲来源发票id | ||||
|             newSaleInvoiceHVO.setApprover(null);  //审批人 | ||||
|             newSaleInvoiceHVO.setTaudittime(null);  //审批日期 | ||||
| 
 | ||||
|             //组装VO | ||||
|             saleInvoiceVO.setParentVO(newSaleInvoiceHVO); | ||||
|             saleInvoiceVO.setChildrenVO(newSaleInvoiceBVOs); | ||||
|             return saleInvoiceVO; | ||||
|         } catch (Exception e) { | ||||
|             throw new BusinessException(e.getMessage()); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * 构造红冲开票申请VO | ||||
|      * @param ivApplicationHeadVO | ||||
|      * @param ivApplicationBodyVOS | ||||
|      * @param bject | ||||
|      * @return | ||||
|      * @throws Exception | ||||
|      */ | ||||
|     public static IVApplicationAggVO makeNewRedRushIVApplicationAggVO(IVApplicationHeadVO ivApplicationHeadVO,IVApplicationBodyVO[] ivApplicationBodyVOS, JSONObject bject) throws Exception { | ||||
|         try { | ||||
|             IVApplicationAggVO ivApplicationAggVO = new IVApplicationAggVO(); | ||||
|             IVApplicationHeadVO newivApplicationHeadVO = new IVApplicationHeadVO(); //新主实体 | ||||
| 
 | ||||
|             //主实体属性赋值 | ||||
| //            BeanUtil.copyProperties(ivApplicationHeadVO,newivApplicationHeadVO, CopyOptions.create().setIgnoreNullValue(true)); | ||||
|             //克隆取值原子表开票申请 | ||||
|             newivApplicationHeadVO = (IVApplicationHeadVO)CloneUtil.depthClone(ivApplicationHeadVO); | ||||
|             //根据参数判断是否为部分红冲 | ||||
|             boolean isPartHCFlag = false; | ||||
|             UFDouble paramNtotalorigmny = new UFDouble(bject.getString("ntotalorigmny")); //参数价税合计(主表红冲金额) | ||||
|             UFDouble ntotalorigmny = ivApplicationHeadVO.getJshj(); //原开票申请主表价税合计 | ||||
|             //红冲金额与开票申请源价税合计比较如果和值大于零,则为部分红冲 | ||||
|             if(ntotalorigmny.add(paramNtotalorigmny).compareTo(UFDouble.ZERO_DBL) > 0){ | ||||
|                 isPartHCFlag = true; | ||||
|             } | ||||
|             UFDouble sumXmsl = new UFDouble(); //合计数量 | ||||
|             UFDouble sumXmje = new UFDouble(); //合计金额 | ||||
|             UFDouble sumXmjshj = new UFDouble(); //合计价税合计 | ||||
|             UFDouble sumBchcje = new UFDouble(); //合计本次红冲金额 | ||||
|             //子实体属性赋值 | ||||
|             int i = 0; | ||||
|             com.alibaba.fastjson.JSONArray paramsSaleInvoiceBVOsJSA = (com.alibaba.fastjson.JSONArray)bject.get("SaleInvoiceBVOs"); //参数子实体数组 | ||||
|             List<JSONObject> paramsSaleInvoiceBVOs = paramsSaleInvoiceBVOsJSA.toJavaList(JSONObject.class); | ||||
|             IVApplicationBodyVO[] newivApplicationBodyVOS = new IVApplicationBodyVO[paramsSaleInvoiceBVOs.size()]; //新子实体 | ||||
|             for(IVApplicationBodyVO ivApplicationBodyVO : ivApplicationBodyVOS){ | ||||
|                 String src_pkdetail = ivApplicationBodyVO.getSrc_pkdetail(); //来源单据行id | ||||
|                 //筛选参数红冲的子表集合 | ||||
|                 List<JSONObject> newParamsSaleInvoiceBVOs = paramsSaleInvoiceBVOs.stream().filter(item->{ | ||||
|                     String parCsaleinvoicebid = item.getString("csaleinvoicebid")+""; | ||||
|                     return src_pkdetail.equals(parCsaleinvoicebid); | ||||
|                 }).toList(); | ||||
|                 if(newParamsSaleInvoiceBVOs.size()<=0){ | ||||
|                     continue; | ||||
|                 } | ||||
|                 JSONObject paramSaleInvoiceBVO = newParamsSaleInvoiceBVOs.get(0); //参数子表 | ||||
|                 IVApplicationBodyVO newivApplicationBodyVO = new IVApplicationBodyVO(); | ||||
| //                BeanUtil.copyProperties(ivApplicationBodyVO,newivApplicationBodyVO, CopyOptions.create().setIgnoreNullValue(true)); | ||||
|                 //克隆取值原子表开票申请 | ||||
|                 newivApplicationBodyVO = (IVApplicationBodyVO)CloneUtil.depthClone(ivApplicationBodyVO); | ||||
|                 //赋值之后修改子实体红冲时字段 | ||||
|                 newivApplicationBodyVO.setPk_ivappdetail(null); //开票申请子实体id | ||||
|                 newivApplicationBodyVO.setBillno(null); //开票申请子实体单据号 | ||||
|                 newivApplicationBodyVO.setXmsl(new UFDouble(paramSaleInvoiceBVO.getString("nnum"))); //数量 | ||||
|                 newivApplicationBodyVO.setXmje(new UFDouble(paramSaleInvoiceBVO.getString("norigmny"))); //金额 | ||||
|                 newivApplicationBodyVO.setXmjshj(new UFDouble(paramSaleInvoiceBVO.getString("norigtaxmny"))); //价税合计 | ||||
|                 newivApplicationBodyVO.setBchcje(new UFDouble(paramSaleInvoiceBVO.getString("norigtaxmny"))); //本次红冲金额 = 本次参数红冲金额 | ||||
|                 newivApplicationBodyVOS[i++] = newivApplicationBodyVO; | ||||
|                 sumXmsl = sumXmsl.add(new UFDouble(paramSaleInvoiceBVO.getString("nnum"))); | ||||
|                 sumXmje = sumXmje.add(new UFDouble(paramSaleInvoiceBVO.getString("norigmny"))); | ||||
|                 sumXmjshj = sumXmjshj.add(new UFDouble(paramSaleInvoiceBVO.getString("norigtaxmny"))); | ||||
|                 sumBchcje = sumBchcje.add(new UFDouble(paramSaleInvoiceBVO.getString("norigtaxmny"))); | ||||
|             } | ||||
|             //赋值之后修改主实体红冲时字段 | ||||
|             newivApplicationHeadVO.setPk_ivapplication(null);  //开票申请单主实体id | ||||
|             newivApplicationHeadVO.setBillno(null);  //单据号 | ||||
|             newivApplicationHeadVO.setJshj(sumXmjshj);  //价税合计 | ||||
|             newivApplicationHeadVO.setHjje(sumXmje);  //合计金额 | ||||
|             newivApplicationHeadVO.setHjse(ivApplicationHeadVO.getHjse().multiply(new UFDouble(-1)));  //合计税额 | ||||
|             newivApplicationHeadVO.setBchcje(sumBchcje);  //本次红冲金额 | ||||
|             newivApplicationHeadVO.setHzfp(UFBoolean.TRUE);  //红字发票 | ||||
|             newivApplicationHeadVO.setSrc_billtype(ivApplicationHeadVO.getSrc_billtype());  //来源单据类型 | ||||
|             newivApplicationHeadVO.setSrc_tradetype(ivApplicationHeadVO.getSrc_tradetype());  //来源交易类型 | ||||
|             newivApplicationHeadVO.setSrc_billno(ivApplicationHeadVO.getSrc_billno());  //来源单据编号 | ||||
| 
 | ||||
|             //组装VO | ||||
|             ivApplicationAggVO.setParentVO(newivApplicationHeadVO); | ||||
|             ivApplicationAggVO.setChildrenVO(newivApplicationBodyVOS); | ||||
|             return ivApplicationAggVO; | ||||
|         } catch (Exception e) { | ||||
|             throw new BusinessException(e.getMessage()); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     public IUAPQueryBS getQueryService() { | ||||
|         return NCLocator.getInstance().lookup(IUAPQueryBS.class); | ||||
|     } | ||||
| 
 | ||||
| } | ||||
|  | @ -0,0 +1,148 @@ | |||
| // | ||||
| // Source code recreated from a .class file by IntelliJ IDEA | ||||
| // (powered by FernFlower decompiler) | ||||
| // | ||||
| 
 | ||||
| package nc.vo.so.m32.util; | ||||
| 
 | ||||
| import java.util.ArrayList; | ||||
| import java.util.List; | ||||
| import nc.bs.framework.common.NCLocator; | ||||
| import nc.pubitf.so.m33.so.m32.ISquare33For32Rush; | ||||
| import nc.vo.ml.NCLangRes4VoTransl; | ||||
| import nc.vo.pub.lang.UFBoolean; | ||||
| import nc.vo.pub.lang.UFDate; | ||||
| import nc.vo.pub.lang.UFDouble; | ||||
| import nc.vo.pubapp.pattern.data.ValueUtils; | ||||
| import nc.vo.pubapp.pattern.exception.ExceptionUtils; | ||||
| import nc.vo.pubapp.pattern.pub.MathTool; | ||||
| import nc.vo.so.m32.entity.SaleInvoiceBVO; | ||||
| import nc.vo.so.m32.entity.SaleInvoiceHVO; | ||||
| import nc.vo.so.m32.entity.SaleInvoiceVO; | ||||
| import nc.vo.so.m32.enumeration.OpposeFlag; | ||||
| import nc.vo.so.pub.enumeration.BillStatus; | ||||
| import nc.vo.trade.checkrule.VOChecker; | ||||
| 
 | ||||
| public class OpposeConvertUtil { | ||||
|     private static OpposeConvertUtil instance = new OpposeConvertUtil(); | ||||
| 
 | ||||
|     private OpposeConvertUtil() { | ||||
|     } | ||||
| 
 | ||||
|     public static OpposeConvertUtil getInstance() { | ||||
|         return instance; | ||||
|     } | ||||
| 
 | ||||
|     public void checkOpposeVality(SaleInvoiceHVO voHead) { | ||||
|         if (!BillStatus.AUDIT.equalsValue(voHead.getFstatusflag())) { | ||||
|             ExceptionUtils.wrappBusinessException(NCLangRes4VoTransl.getNCLangRes().getStrByID("4006008_0", "04006008-0067")); | ||||
|         } | ||||
| 
 | ||||
|         if (!OpposeFlag.NORMAL.equalsValue(voHead.getFopposeflag()) && !OpposeFlag.PARTFINSH.equalsValue(voHead.getFopposeflag())) { | ||||
|             ExceptionUtils.wrappBusinessException(NCLangRes4VoTransl.getNCLangRes().getStrByID("4006008_0", "04006008-0224")); | ||||
|         } | ||||
| 
 | ||||
|     } | ||||
| 
 | ||||
|     public SaleInvoiceVO convertToOpposeVO(SaleInvoiceVO voInvoice, String userid, UFDate busidate) { | ||||
|         this.checkOpposeVality(voInvoice.getParentVO()); | ||||
|         UFBoolean isFirst = UFBoolean.TRUE; | ||||
| 
 | ||||
|         if(voInvoice.getParentVO().getFopposeflag() == null ? false : voInvoice.getParentVO().getFopposeflag().toString().equals("3")){ | ||||
| //        if (OpposeFlag.PARTFINSH.equalsValue()) { | ||||
|             isFirst = UFBoolean.FALSE; | ||||
|         } | ||||
| 
 | ||||
|         SaleInvoiceHVO oppHead = this.convertToOpposeHVO(voInvoice.getParentVO(), userid, busidate); | ||||
|         SaleInvoiceBVO[] oppBodys = this.convertToOpposeBVO(voInvoice, busidate, isFirst); | ||||
|         SaleInvoiceVO oppInvoice = new SaleInvoiceVO(); | ||||
|         oppInvoice.setParentVO(oppHead); | ||||
|         oppInvoice.setChildrenVO(oppBodys); | ||||
|         VOVatCalculator calcultor = new VOVatCalculator(oppInvoice); | ||||
|         calcultor.calVatAll(); | ||||
|         return oppInvoice; | ||||
|     } | ||||
| 
 | ||||
|     private SaleInvoiceBVO[] convertToOpposeBVO(SaleInvoiceVO voInvoice, UFDate busidate, UFBoolean isFirst) { | ||||
|         String[] clearKeys = new String[]{"csaleinvoicebid", "csaleinvoiceid", "nshouldoutnum", "ntotaloutnum", "ntotalincomenum", "ntotalincomemny", "ntotalcostnum", "ntotalpaymny", "ntotalopposemny", "ntotalopposenum", "csumid"}; | ||||
|         String[] oppKeys = new String[]{"nnum", "nastnum", "nqtunitnum", "ntax", "ntaxmny", "nmny", "ncaltaxmny", "ndiscount", "norigtaxmny", "norigmny", "norigdiscount", "nglobalmny", "nglobaltaxmny", "ngroupmny", "ngrouptaxmny", "norigsubmny"}; | ||||
|         SaleInvoiceBVO[] childrenVO = voInvoice.getChildrenVO(); | ||||
|         int ilen = childrenVO.length; | ||||
|         List<SaleInvoiceBVO> oppbodys = new ArrayList(); | ||||
| 
 | ||||
|         for(int i = 0; i < ilen; ++i) { | ||||
|             SaleInvoiceBVO oppbody = (SaleInvoiceBVO)childrenVO[i].clone(); | ||||
|             oppbody.setDbilldate(busidate); | ||||
|             oppbody.setCopposesrcbid(oppbody.getCsaleinvoicebid()); | ||||
| 
 | ||||
|             for(String key : clearKeys) { | ||||
|                 oppbody.setAttributeValue(key, (Object)null); | ||||
|             } | ||||
| 
 | ||||
|             if (isFirst.booleanValue()) { | ||||
|                 for(String key : oppKeys) { | ||||
|                     UFDouble value = ValueUtils.getUFDouble(oppbody.getAttributeValue(key)); | ||||
|                     UFDouble oppvalue = null; | ||||
|                     if (!VOChecker.isEmpty(value)) { | ||||
|                         oppvalue = MathTool.oppose(value); | ||||
|                     } | ||||
| 
 | ||||
|                     oppbody.setAttributeValue(key, oppvalue); | ||||
|                 } | ||||
|             } else { | ||||
|                 UFDouble nnum = childrenVO[i].getNtotalopposenum() == null ? UFDouble.ZERO_DBL : childrenVO[i].getNtotalopposenum(); | ||||
|                 UFDouble mny = childrenVO[i].getNtotalopposemny() == null ? UFDouble.ZERO_DBL : childrenVO[i].getNtotalopposemny(); | ||||
|                 if (nnum.compareTo(oppbody.getNnum()) == 0 && mny.compareTo(oppbody.getNorigtaxmny()) == 0) { | ||||
|                     continue; | ||||
|                 } | ||||
| 
 | ||||
|                 ISquare33For32Rush srv = (ISquare33For32Rush)NCLocator.getInstance().lookup(ISquare33For32Rush.class); | ||||
|                 UFDouble[] sums = srv.querySumNum(childrenVO[i].getCsaleinvoicebid(), oppKeys); | ||||
|                 int index = 0; | ||||
| 
 | ||||
|                 for(String oppKey : oppKeys) { | ||||
|                     oppbody.setAttributeValue(oppKey, MathTool.oppose(sums[index++])); | ||||
|                 } | ||||
| 
 | ||||
|                 if (oppbody.getNorigtaxmny() == null || oppbody.getNorigtaxmny().compareTo(UFDouble.ZERO_DBL) == 0) { | ||||
|                     continue; | ||||
|                 } | ||||
| 
 | ||||
|                 if (oppbody.getNqtunitnum().compareTo(UFDouble.ZERO_DBL) != 0 && oppbody.getNnum().compareTo(UFDouble.ZERO_DBL) != 0) { | ||||
|                     oppbody.setNqtorigtaxnetprc(oppbody.getNorigtaxmny().div(oppbody.getNqtunitnum())); | ||||
|                     oppbody.setNqtorignetprice(oppbody.getNorigmny().div(oppbody.getNqtunitnum())); | ||||
|                     oppbody.setNorigtaxnetprice(oppbody.getNorigtaxmny().div(oppbody.getNnum())); | ||||
|                     oppbody.setNorignetprice(oppbody.getNorigmny().div(oppbody.getNnum())); | ||||
|                     oppbody.setNqttaxnetprice(oppbody.getNtaxmny().div(oppbody.getNqtunitnum())); | ||||
|                     oppbody.setNqtnetprice(oppbody.getNmny().div(oppbody.getNqtunitnum())); | ||||
|                     oppbody.setNtaxnetprice(oppbody.getNtaxmny().div(oppbody.getNnum())); | ||||
|                     oppbody.setNnetprice(oppbody.getNmny().div(oppbody.getNnum())); | ||||
|                 } | ||||
|             } | ||||
| 
 | ||||
|             oppbodys.add(oppbody); | ||||
|         } | ||||
| 
 | ||||
|         return (SaleInvoiceBVO[])oppbodys.toArray(new SaleInvoiceBVO[0]); | ||||
|     } | ||||
| 
 | ||||
|     private SaleInvoiceHVO convertToOpposeHVO(SaleInvoiceHVO voHead, String userid, UFDate busidate) { | ||||
|         SaleInvoiceHVO oppHead = (SaleInvoiceHVO)voHead.clone(); | ||||
|         oppHead.setBtogoldtaxflag(UFBoolean.FALSE); | ||||
|         oppHead.setDbilldate(busidate); | ||||
|         oppHead.setCreator(userid); | ||||
|         oppHead.setBillmaker(userid); | ||||
|         oppHead.setIprintcount(0); | ||||
|         oppHead.setFstatusflag((Integer)BillStatus.FREE.value()); | ||||
|         oppHead.setFopposeflag((Integer)OpposeFlag.GENERAL.value()); | ||||
|         oppHead.setCopposesrcid(voHead.getCsaleinvoiceid()); | ||||
|         oppHead.setVopposesrccode(voHead.getVbillcode()); | ||||
|         String[] clearKeys = new String[]{"vbillcode", "csaleinvoiceid", "tgoldtaxtime", "modifier", "modifiedtime", "approver", "taudittime", "vgoldtaxcode", "ntotalastnum", "ntotalorigmny", "ntotalorigsubmny", "ntotaltaxsubmny", "openbillflag", "bsalecooppur"}; | ||||
| 
 | ||||
|         for(String key : clearKeys) { | ||||
|             oppHead.setAttributeValue(key, (Object)null); | ||||
|         } | ||||
| 
 | ||||
|         return oppHead; | ||||
|     } | ||||
| } | ||||
		Loading…
	
		Reference in New Issue