From bed6eaacd8fdeab24d8d087b3a822812cae8b928 Mon Sep 17 00:00:00 2001 From: lj Date: Thu, 13 Mar 2025 18:39:39 +0800 Subject: [PATCH] =?UTF-8?q?bip=E9=94=80=E5=94=AE=E5=8F=91=E7=A5=A8?= =?UTF-8?q?=E7=BA=A2=E5=86=B2=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../so/m32/maintain/InsertSaleInvoiceBP.java | 162 +++++++++ .../so/m32/maintain/UpdateSaleInvoiceBP.java | 89 +++++ .../rule/insert/CheckOppValityRule.java | 196 +++++++++++ .../maintain/rule/insert/OppOffsetRule.java | 109 ++++++ .../rule/insert/UpdateOppInsertRule.java | 54 +++ .../rule/update/CheckOppValityUpdateRule.java | 121 +++++++ .../saleinvoice/operator/billSaveAction.java | 325 ++++++++++++++++++ .../nc/vo/so/m32/util/OpposeConvertUtil.java | 148 ++++++++ 8 files changed, 1204 insertions(+) create mode 100644 so/src/private/nc/bs/so/m32/maintain/InsertSaleInvoiceBP.java create mode 100644 so/src/private/nc/bs/so/m32/maintain/UpdateSaleInvoiceBP.java create mode 100644 so/src/private/nc/bs/so/m32/maintain/rule/insert/CheckOppValityRule.java create mode 100644 so/src/private/nc/bs/so/m32/maintain/rule/insert/OppOffsetRule.java create mode 100644 so/src/private/nc/bs/so/m32/maintain/rule/insert/UpdateOppInsertRule.java create mode 100644 so/src/private/nc/bs/so/m32/maintain/rule/update/CheckOppValityUpdateRule.java create mode 100644 so/src/public/nc/vo/so/m32/saleinvoice/operator/billSaveAction.java create mode 100644 so/src/public/nc/vo/so/m32/util/OpposeConvertUtil.java diff --git a/so/src/private/nc/bs/so/m32/maintain/InsertSaleInvoiceBP.java b/so/src/private/nc/bs/so/m32/maintain/InsertSaleInvoiceBP.java new file mode 100644 index 0000000..468d0de --- /dev/null +++ b/so/src/private/nc/bs/so/m32/maintain/InsertSaleInvoiceBP.java @@ -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 processer = new AroundProcesser(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 bo = new BillInsert(); + /* 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 processer) { + /* 84 */ IRule 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 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 + */ \ No newline at end of file diff --git a/so/src/private/nc/bs/so/m32/maintain/UpdateSaleInvoiceBP.java b/so/src/private/nc/bs/so/m32/maintain/UpdateSaleInvoiceBP.java new file mode 100644 index 0000000..4221251 --- /dev/null +++ b/so/src/private/nc/bs/so/m32/maintain/UpdateSaleInvoiceBP.java @@ -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 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 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 processer) { + IRule rule = new CheckBillCodeRule(); + processer.addAfterRule(rule); + ICompareRule rewriteRule = new RewriteBillCreditRule(); + processer.addAfterRule(rewriteRule); + ICompareRule var5 = new UpdateOppUpdateRule(); + processer.addAfterRule(var5); + ICompareRule var6 = new RewriteBillUpdateRule(); + processer.addAfterRule(var6); + IRule var4 = new SyncRPBillRuleForUpdate(SOBillType.Invoice.getCode()); + processer.addAfterRule(var4); + } + + private void addBeforeRule(CompareAroundProcesser processer) { + IRule rule = null; + IRule var4 = new CheckCanUpdateWhenAuditing(); + processer.addBeforeRule(var4); + IRule var5 = new CheckApproverRule(); + processer.addBeforeRule(var5); + ICompareRule fillRule = new FillUpdateDefaultRule(); + processer.addBeforeRule(fillRule); + IRule var6 = new CheckBillValityRule(); + processer.addBeforeRule(var6); + IRule var7 = new SaleInvoiceCheckNumAndMnyRule(); + processer.addBeforeRule(var7); + IRule var8 = new CheckOppValityUpdateRule(); + processer.addBeforeRule(var8); + IRule var9 = new CheckBillState(); + processer.addBeforeRule(var9); + IRule var10 = new SetUpdateAuditInfoRule(); + processer.addBeforeRule(var10); + } +} diff --git a/so/src/private/nc/bs/so/m32/maintain/rule/insert/CheckOppValityRule.java b/so/src/private/nc/bs/so/m32/maintain/rule/insert/CheckOppValityRule.java new file mode 100644 index 0000000..1e62ad2 --- /dev/null +++ b/so/src/private/nc/bs/so/m32/maintain/rule/insert/CheckOppValityRule.java @@ -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 + /* */ { + /* */ public void process(SaleInvoiceVO[] vos) { + /* 40 */ List aloppsrcid = new ArrayList(); + /* 41 */ List aloppsrcbid = new ArrayList(); + /* */ + /* 43 */ List vopposesrccode = new ArrayList(); + /* 44 */ Map map = new HashMap(); + /* */ + /* 46 */ Map bidMap = new HashMap(); + /* */ + /* 48 */ Map taxMap = new HashMap(); + /* */ + /* 50 */ Map opposeBidMap = new HashMap(); + /* */ + /* 52 */ Map opposeTaxMap = new HashMap(); + /* 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 querysrv = new VOQuery(SaleInvoiceHVO.class, selKeys); + /* */ + /* 98 */ VOQuery querysrvb = new VOQuery(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 query = new BillQuery(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 + */ \ No newline at end of file diff --git a/so/src/private/nc/bs/so/m32/maintain/rule/insert/OppOffsetRule.java b/so/src/private/nc/bs/so/m32/maintain/rule/insert/OppOffsetRule.java new file mode 100644 index 0000000..b318efb --- /dev/null +++ b/so/src/private/nc/bs/so/m32/maintain/rule/insert/OppOffsetRule.java @@ -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 + /* */ { + /* */ public void process(SaleInvoiceVO[] vos) { + /* 36 */ Map itfvos = new HashMap(); + /* */ + /* */ + /* 39 */ Map offsetmnymap = new HashMap(); + /* 40 */ Map offsetparavos = new HashMap(); + /* */ + /* 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 itfvos, Map offsetparavos, Map 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 + */ \ No newline at end of file diff --git a/so/src/private/nc/bs/so/m32/maintain/rule/insert/UpdateOppInsertRule.java b/so/src/private/nc/bs/so/m32/maintain/rule/insert/UpdateOppInsertRule.java new file mode 100644 index 0000000..d90b619 --- /dev/null +++ b/so/src/private/nc/bs/so/m32/maintain/rule/insert/UpdateOppInsertRule.java @@ -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 + /* */ { + /* */ public void process(SaleInvoiceVO[] vos) { + /* 30 */ List paraList = new ArrayList(); + /* 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 + */ \ No newline at end of file diff --git a/so/src/private/nc/bs/so/m32/maintain/rule/update/CheckOppValityUpdateRule.java b/so/src/private/nc/bs/so/m32/maintain/rule/update/CheckOppValityUpdateRule.java new file mode 100644 index 0000000..dbe9efe --- /dev/null +++ b/so/src/private/nc/bs/so/m32/maintain/rule/update/CheckOppValityUpdateRule.java @@ -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 { + public CheckOppValityUpdateRule() { + } + + public void process(SaleInvoiceVO[] vos) { + List aloppsrcbid = new ArrayList(); + List vopposesrccode = new ArrayList(); + Map map = new HashMap(); + Map bidMap = new HashMap(); + Map taxMap = new HashMap(); + Map opposeBidMap = new HashMap(); + Map 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 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 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 query = new BillQuery(SaleInvoiceVO.class); + SaleInvoiceVO[] bills = (SaleInvoiceVO[])query.query(hids); + return bills; + } else { + return null; + } + } +} diff --git a/so/src/public/nc/vo/so/m32/saleinvoice/operator/billSaveAction.java b/so/src/public/nc/vo/so/m32/saleinvoice/operator/billSaveAction.java new file mode 100644 index 0000000..d563fcc --- /dev/null +++ b/so/src/public/nc/vo/so/m32/saleinvoice/operator/billSaveAction.java @@ -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 paramsSaleInvoiceBVOs = paramsSaleInvoiceBVOsJSA.toJavaList(JSONObject.class); + SaleInvoiceBVO[] newSaleInvoiceBVOs = new SaleInvoiceBVO[paramsSaleInvoiceBVOs.size()]; //新子实体 + for(SaleInvoiceBVO saleInvoiceBVO : saleInvoiceBVOs){ + String csaleinvoicebid = saleInvoiceBVO.getCsaleinvoicebid(); //子表id + //筛选参数红冲的子表集合 + List 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 paramsSaleInvoiceBVOs = paramsSaleInvoiceBVOsJSA.toJavaList(JSONObject.class); + IVApplicationBodyVO[] newivApplicationBodyVOS = new IVApplicationBodyVO[paramsSaleInvoiceBVOs.size()]; //新子实体 + for(IVApplicationBodyVO ivApplicationBodyVO : ivApplicationBodyVOS){ + String src_pkdetail = ivApplicationBodyVO.getSrc_pkdetail(); //来源单据行id + //筛选参数红冲的子表集合 + List 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); + } + +} \ No newline at end of file diff --git a/so/src/public/nc/vo/so/m32/util/OpposeConvertUtil.java b/so/src/public/nc/vo/so/m32/util/OpposeConvertUtil.java new file mode 100644 index 0000000..2e8cbc5 --- /dev/null +++ b/so/src/public/nc/vo/so/m32/util/OpposeConvertUtil.java @@ -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 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; + } +}