bip销售发票红冲接口

This commit is contained in:
lj 2025-03-13 18:39:39 +08:00
parent 9d6588268f
commit bed6eaacd8
8 changed files with 1204 additions and 0 deletions

View File

@ -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
*/

View File

@ -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);
}
}

View File

@ -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
*/

View File

@ -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
*/

View File

@ -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
*/

View File

@ -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;
}
}
}

View File

@ -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);
}
}

View File

@ -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;
}
}