From fed80fd269bcf3e254e3dee11d677864c087f306 Mon Sep 17 00:00:00 2001 From: lj Date: Thu, 20 Feb 2025 09:13:03 +0800 Subject: [PATCH] =?UTF-8?q?=E9=94=80=E5=94=AE=E8=AE=A2=E5=8D=95=E4=BF=9D?= =?UTF-8?q?=E5=AD=98=E6=97=B6=E5=9B=9E=E5=86=99=E5=94=AE=E4=BB=B7=20+=20?= =?UTF-8?q?=E5=BC=80=E7=A5=A8=E4=BA=91=E5=9B=9E=E5=86=99=E9=94=80=E5=94=AE?= =?UTF-8?q?=E5=8F=91=E7=A5=A8=E7=BA=A7=E4=B8=8B=E6=B8=B8=E5=8D=95=E6=8D=AE?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bs/so/m30/maintain/InsertSaleOrderBP.java | 223 +++++++++++++++++ .../bs/so/m30/maintain/UpdateSaleOrderBP.java | 229 ++++++++++++++++++ .../insert/WritebackMaterialPriceRule.java | 59 +++++ .../nc/bs/uapbd/task/InvoiceTaskPlugin.java | 212 ++++++++++++++++ 4 files changed, 723 insertions(+) create mode 100644 so/src/private/nc/bs/so/m30/maintain/InsertSaleOrderBP.java create mode 100644 so/src/private/nc/bs/so/m30/maintain/UpdateSaleOrderBP.java create mode 100644 so/src/private/nc/bs/so/m30/maintain/rule/insert/WritebackMaterialPriceRule.java create mode 100644 uapbd/src/private/nc/bs/uapbd/task/InvoiceTaskPlugin.java diff --git a/so/src/private/nc/bs/so/m30/maintain/InsertSaleOrderBP.java b/so/src/private/nc/bs/so/m30/maintain/InsertSaleOrderBP.java new file mode 100644 index 0000000..e7c46cd --- /dev/null +++ b/so/src/private/nc/bs/so/m30/maintain/InsertSaleOrderBP.java @@ -0,0 +1,223 @@ +/* */ package nc.bs.so.m30.maintain; +/* */ +/* */ import nc.bs.scmpub.rule.CrossRuleValidateRule; + import nc.bs.so.m30.maintain.rule.insert.JudgeMaterialPriceInsertRule; +/* */ import nc.bs.so.m30.maintain.rule.insert.RewriteBillInsertRule; +/* */ import nc.bs.so.m30.maintain.rule.insert.RewritePromotePriceInsertRule; +/* */ import nc.bs.so.m30.maintain.rule.insert.WritebackMaterialPriceRule; +import nc.bs.so.m30.plugin.BP30PlugInPoint; +/* */ import nc.bs.so.m30.rule.atp.SaleOrderVOATPAfterRule; +/* */ import nc.bs.so.m30.rule.atp.SaleOrderVOATPBeforeRule; +/* */ import nc.bs.so.m30.rule.billcode.AddNewBillCodeRule; +/* */ import nc.bs.so.m30.rule.billcode.CheckUniqueBillCodeRule; +/* */ import nc.bs.so.m30.rule.businessinfo.SaveTransferMsgRule; +/* */ import nc.bs.so.m30.rule.credit.RenovateARByHidsBeginRule; +/* */ import nc.bs.so.m30.rule.credit.RenovateARByHidsEndRule; +/* */ import nc.bs.so.m30.rule.feature.FeatureSelectSaveRule; +/* */ import nc.bs.so.m30.rule.m35.ArsubOffsetBeforeSaveRule; +/* */ import nc.bs.so.m30.rule.m35.LrgCashMarCheckRule; +/* */ import nc.bs.so.m30.rule.maintaincheck.CheckDateRule; +/* */ import nc.bs.so.m30.rule.maintaincheck.CheckLrgTotalMoney; +/* */ import nc.bs.so.m30.rule.maintaincheck.CheckNumPriceMnyRule; +/* */ import nc.bs.so.m30.rule.maintaincheck.CheckSaveBillRule; +/* */ import nc.bs.so.m30.rule.maintaincheck.CheckSettleOrgRepeat; +/* */ import nc.bs.so.m30.rule.maintainprocess.FillupFretexchangeRule; +/* */ import nc.bs.so.m30.rule.maintainprocess.FillupRedundanceDataRule; +/* */ import nc.bs.so.m30.rule.maintainprocess.InsertSoBalanceWhenAddNewRule; +/* */ import nc.bs.so.m30.rule.maintainprocess.SourceToSaleOrderMsgRule; +/* */ import nc.bs.so.m30.rule.maintainprocess.ThisGatheringRule; +/* */ import nc.bs.so.m30.rule.reserve.AutoReserveRule; +/* */ import nc.bs.so.m30.rule.rewrite.price.RewritePriceFormRule; +/* */ 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.itf.scmpub.reference.uap.group.SysInitGroupQuery; +/* */ import nc.vo.credit.engrossmaintain.pub.action.M30EngrossAction; +/* */ import nc.vo.pubapp.pattern.log.TimeLog; +/* */ import nc.vo.pubapp.util.SetAddAuditInfoRule; +/* */ import nc.vo.scmpub.rule.SaleOrgEnableCheckRule; +/* */ import nc.vo.so.m30.entity.SaleOrderBVO; +/* */ import nc.vo.so.m30.entity.SaleOrderHVO; +/* */ import nc.vo.so.m30.entity.SaleOrderVO; +/* */ import nccloud.bs.so.mobile.saleorder.operation.rule.MobAfterSaveMessageRule; +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ public class InsertSaleOrderBP { + /* */ public SaleOrderVO[] insert(SaleOrderVO[] bills) { + /* 56 */ AroundProcesser processer = new AroundProcesser(BP30PlugInPoint.InsertBP); + /* */ + /* */ + /* */ + /* 60 */ TimeLog.logStart(); + /* 61 */ this.addBeforeRule(processer); + /* 62 */ processer.before(bills); + /* 63 */ TimeLog.info("调用新增保存前BP插入点"); + /* */ + /* 65 */ TimeLog.logStart(); + /* 66 */ BillInsert bo = new BillInsert(); + /* 67 */ SaleOrderVO[] vos = (SaleOrderVO[])bo.insert(bills); + /* 68 */ TimeLog.info("保存单据到数据库"); + /* */ + /* */ + /* 71 */ TimeLog.logStart(); + /* 72 */ this.addAfterRule(processer); + /* 73 */ processer.after(vos); + /* 74 */ TimeLog.info("调用新增保存后BP插入点"); + /* */ + /* 76 */ return vos; + /* */ } + /* */ + /* */ private void addAfterRule(AroundProcesser processer) { + /* 80 */ IRule rule = null; + /* */ + /* */ + /* 83 */ rule = new InsertSoBalanceWhenAddNewRule(); + /* 84 */ processer.addAfterRule(rule); + /* */ + /* */ + /* 87 */ rule = new RenovateARByHidsEndRule(M30EngrossAction.M30Insert); + /* 88 */ processer.addAfterRule(rule); + /* */ + /* */ + /* 91 */ rule = new ThisGatheringRule(); + /* 92 */ processer.addAfterRule(rule); + /* */ + /* */ + /* 95 */ rule = new CheckUniqueBillCodeRule(); + /* 96 */ processer.addAfterRule(rule); + /* */ + /* */ + /* */ + /* */ + /* */ + /* 102 */ rule = new RewriteBillInsertRule(); + /* 103 */ processer.addAfterRule(rule); + /* */ + /* */ + /* 106 */ rule = new SaveTransferMsgRule(); + /* 107 */ processer.addAfterRule(rule); + /* */ + /* */ + /* 110 */ rule = new RewritePriceFormRule(); + /* 111 */ processer.addAfterRule(rule); + /* */ + /* */ + /* 114 */ rule = new SourceToSaleOrderMsgRule(); + /* 115 */ processer.addAfterRule(rule); + + rule = new WritebackMaterialPriceRule(); + processer.addAfterRule(rule); + /* */ + /* 117 */ boolean icEnable = SysInitGroupQuery.isICEnabled(); + /* 118 */ if (icEnable) { + /* */ + /* 120 */ rule = new SaleOrderVOATPAfterRule(); + /* 121 */ processer.addAfterRule(rule); + /* */ + /* 123 */ rule = new AutoReserveRule(); + /* 124 */ processer.addAfterRule(rule); + /* */ + /* */ + /* */ } + /* */ + /* 129 */ if (SysInitGroupQuery.isPRICEEnabled()) { + /* 130 */ rule = new RewritePromotePriceInsertRule(); + /* 131 */ processer.addAfterRule(rule); + /* */ + /* */ + /* */ } + /* */ + /* 136 */ processer.addAfterRule(new MobAfterSaveMessageRule()); + /* 137 */ } + /* */ + /* */ + /* */ + /* */ private void addBeforeRule(AroundProcesser processer) { + /* 142 */ IRule rule = new SaleOrgEnableCheckRule(); + /* 143 */ processer.addBeforeRule(rule); + /* */ + /* */ + /* 146 */ rule = new FillupRedundanceDataRule(); + /* 147 */ processer.addBeforeRule(rule); + /* */ + /* */ + /* 150 */ rule = new FillupFretexchangeRule(); + /* 151 */ processer.addBeforeRule(rule); + /* */ + /* */ + /* 154 */ rule = new AddNewBillCodeRule(); + /* 155 */ processer.addBeforeRule(rule); + /* */ + /* */ + /* 158 */ rule = new CheckNumPriceMnyRule(); + /* 159 */ processer.addBeforeRule(rule); + /* */ + /* 161 */ rule = new CheckSettleOrgRepeat(); + /* 162 */ processer.addBeforeRule(rule); + /* */ + /* 164 */ rule = new CheckDateRule(); + /* 165 */ processer.addBeforeRule(rule); + /* */ + /* 167 */ rule = new CheckSaveBillRule(); + /* 168 */ processer.addBeforeRule(rule); + /* */ + /* */ + /* 171 */ rule = new FillBillTailInfoRuleForIns(); + /* 172 */ processer.addBeforeRule(rule); + /* */ + /* */ + /* 175 */ rule = new SetAddAuditInfoRule(); + /* 176 */ processer.addBeforeRule(rule); + /* */ + /* */ + /* 179 */ rule = new RenovateARByHidsBeginRule(M30EngrossAction.M30Insert); + /* 180 */ processer.addBeforeRule(rule); + /* */ + /* 182 */ boolean icEnable = SysInitGroupQuery.isICEnabled(); + /* 183 */ if (icEnable) { + /* */ + /* 185 */ rule = new SaleOrderVOATPBeforeRule(); + /* 186 */ processer.addBeforeRule(rule); + /* */ + /* */ } + /* */ + /* 190 */ rule = new LrgCashMarCheckRule(); + /* 191 */ processer.addBeforeRule(rule); + /* */ + /* */ + /* 194 */ rule = new ArsubOffsetBeforeSaveRule(); + /* 195 */ processer.addBeforeRule(rule); + /* */ + /* */ + /* 198 */ rule = new CheckLrgTotalMoney(); + /* 199 */ processer.addBeforeRule(rule); + /* */ + /* */ + /* 202 */ rule = new FeatureSelectSaveRule(); + /* 203 */ processer.addBeforeRule(rule); + /* */ + /* */ + /* 206 */ rule = new UserDefSaveRule(new Class[]{SaleOrderHVO.class, SaleOrderBVO.class}); + /* */ + /* */ + /* 209 */ processer.addBeforeRule(rule); + /* */ + /* */ + /* 212 */ rule = new CrossRuleValidateRule(); + /* 213 */ processer.addBeforeRule(rule); + + rule = new JudgeMaterialPriceInsertRule(); + processer.addBeforeRule(rule); + /* 214 */ } + /* */ } diff --git a/so/src/private/nc/bs/so/m30/maintain/UpdateSaleOrderBP.java b/so/src/private/nc/bs/so/m30/maintain/UpdateSaleOrderBP.java new file mode 100644 index 0000000..9142a64 --- /dev/null +++ b/so/src/private/nc/bs/so/m30/maintain/UpdateSaleOrderBP.java @@ -0,0 +1,229 @@ +/* */ package nc.bs.so.m30.maintain; +/* */ +/* */ import nc.bs.scmpub.rule.CrossRuleValidateRule; +/* */ import nc.bs.scmpub.rule.VOSagaFrozenValidateRule; +import nc.bs.so.m30.maintain.rule.insert.JudgeMaterialPriceInsertRule; +/* */ import nc.bs.so.m30.maintain.rule.insert.WritebackMaterialPriceRule; +import nc.bs.so.m30.maintain.rule.update.RewriteBillUpdateRule; +/* */ import nc.bs.so.m30.maintain.rule.update.RewritePromotePriceUpdateRule; +/* */ import nc.bs.so.m30.plugin.BP30PlugInPoint; +/* */ import nc.bs.so.m30.rule.atp.SaleOrderVOATPAfterRule; +/* */ import nc.bs.so.m30.rule.atp.SaleOrderVOATPBeforeRule; +/* */ import nc.bs.so.m30.rule.billcode.CheckUniqueBillCodeRule; +/* */ import nc.bs.so.m30.rule.billcode.UpdateBillCodeRule; +/* */ import nc.bs.so.m30.rule.businessinfo.SaveTransferMsgRule; +/* */ import nc.bs.so.m30.rule.credit.RenovateARByHidsBeginRule; +/* */ import nc.bs.so.m30.rule.credit.RenovateARByHidsEndRule; +/* */ import nc.bs.so.m30.rule.feature.ClearMffileSRCRule; +/* */ import nc.bs.so.m30.rule.feature.FeatureSelectSaveRule; +/* */ import nc.bs.so.m30.rule.feature.RestMffileSRCRule; +/* */ import nc.bs.so.m30.rule.m35.ArsubOffsetBeforeSaveRule; +/* */ import nc.bs.so.m30.rule.m35.LrgCashMarCheckRule; +/* */ import nc.bs.so.m30.rule.maintaincheck.CheckCanUpdateWhenAuditing; +/* */ import nc.bs.so.m30.rule.maintaincheck.CheckDateRule; +/* */ import nc.bs.so.m30.rule.maintaincheck.CheckLrgTotalMoney; +/* */ import nc.bs.so.m30.rule.maintaincheck.CheckNumPriceMnyRule; +/* */ import nc.bs.so.m30.rule.maintaincheck.CheckSaveBillRule; +/* */ import nc.bs.so.m30.rule.maintaincheck.CheckSettleOrgRepeat; +/* */ import nc.bs.so.m30.rule.maintainprocess.FillupFretexchangeRule; +/* */ import nc.bs.so.m30.rule.maintainprocess.FillupRedundanceDataRule; +/* */ import nc.bs.so.m30.rule.maintainprocess.ThisGatheringRule; +/* */ import nc.bs.so.m30.rule.maintainprocess.UpdateSoBalanceWhenUpdateM30HeadRule; +/* */ import nc.bs.so.m30.rule.maintainprocess.UpdateSoBalanceWhenUpdateRule; +/* */ import nc.bs.so.m30.rule.reserve.AutoReserveRule; +/* */ import nc.bs.so.m30.rule.reserve.ReserveUpdateRule; +/* */ import nc.bs.so.m30.rule.rewrite.price.RewritePriceFormRule; +/* */ 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.itf.scmpub.reference.uap.group.SysInitGroupQuery; +/* */ import nc.vo.credit.engrossmaintain.pub.action.M30EngrossAction; +/* */ import nc.vo.pubapp.pattern.log.TimeLog; +/* */ import nc.vo.pubapp.util.SetUpdateAuditInfoRule; +/* */ import nc.vo.so.m30.entity.SaleOrderVO; +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ public class UpdateSaleOrderBP { +/* */ public SaleOrderVO[] update(SaleOrderVO[] bills, SaleOrderVO[] originBills) { +/* 53 */ CompareAroundProcesser processer = new CompareAroundProcesser(BP30PlugInPoint.UpdateBP); +/* */ +/* */ +/* */ +/* 57 */ TimeLog.logStart(); +/* 58 */ this.addBeforeRule(processer); +/* 59 */ processer.before(bills, originBills); +/* */ +/* 61 */ TimeLog.info("???????????BP?????"); +/* */ +/* 63 */ TimeLog.logStart(); +/* 64 */ BillUpdate bo = new BillUpdate(); +/* 65 */ SaleOrderVO[] vos = (SaleOrderVO[])bo.update(bills, originBills); +/* */ +/* 67 */ TimeLog.info("????????????????"); +/* */ +/* */ +/* 70 */ TimeLog.logStart(); +/* 71 */ this.addAfterRule(processer); +/* 72 */ processer.after(vos, originBills); +/* */ +/* 74 */ TimeLog.info("???????????BP?????"); +/* */ +/* 76 */ return vos; +/* */ } +/* */ +/* */ private void addAfterRule(CompareAroundProcesser processer) { +/* 80 */ IRule rule = null; +/* */ +/* */ +/* 83 */ rule = new UpdateSoBalanceWhenUpdateRule(); +/* 84 */ processer.addAfterRule(rule); +/* */ +/* */ +/* 87 */ rule = new RenovateARByHidsEndRule(M30EngrossAction.M30Edit); +/* 88 */ processer.addAfterRule(rule); +/* */ +/* */ +/* 91 */ rule = new ThisGatheringRule(); +/* 92 */ processer.addAfterRule(rule); +/* */ +/* */ +/* 95 */ rule = new CheckUniqueBillCodeRule(); +/* 96 */ processer.addAfterRule(rule); +/* */ +/* */ +/* 99 */ ICompareRule compareRule = new RewriteBillUpdateRule(); +/* 100 */ processer.addAfterRule(compareRule); +/* */ +/* */ +/* 103 */ rule = new SaveTransferMsgRule(); +/* 104 */ processer.addAfterRule(rule); +/* */ +/* */ +/* 107 */ rule = new RewritePriceFormRule(); +/* 108 */ processer.addAfterRule(rule); +/* */ +/* */ +/* 111 */ rule = new UpdateSoBalanceWhenUpdateM30HeadRule(); +/* 112 */ processer.addAfterRule(rule); + + rule = new WritebackMaterialPriceRule(); + processer.addAfterRule(rule); +/* */ +/* 114 */ boolean icEnable = SysInitGroupQuery.isICEnabled(); +/* 115 */ if (icEnable) { +/* */ +/* 117 */ rule = new SaleOrderVOATPAfterRule(); +/* 118 */ processer.addAfterRule(rule); +/* */ +/* 120 */ rule = new ReserveUpdateRule(); +/* 121 */ processer.addAfterRule(rule); +/* */ +/* 123 */ rule = new AutoReserveRule(); +/* 124 */ processer.addAfterRule(rule); +/* */ +/* */ } +/* */ +/* 128 */ if (SysInitGroupQuery.isPRICEEnabled()) { +/* 129 */ compareRule = new RewritePromotePriceUpdateRule(); +/* 130 */ processer.addAfterRule(compareRule); +/* */ +/* */ } +/* */ +/* 134 */ compareRule = new RestMffileSRCRule(); +/* 135 */ processer.addAfterRule(compareRule); +/* 136 */ } +/* */ +/* */ private void addBeforeRule(CompareAroundProcesser processer) { +/* 139 */ IRule rule = null; +/* */ +/* */ +/* 142 */ rule = new VOSagaFrozenValidateRule(); +/* 143 */ processer.addBeforeRule(rule); +/* */ +/* */ +/* 146 */ rule = new CheckCanUpdateWhenAuditing(); +/* 147 */ processer.addBeforeRule(rule); +/* */ +/* */ +/* */ +/* 151 */ rule = new CheckApproverRule(); +/* 152 */ processer.addBeforeRule(rule); +/* */ +/* */ +/* */ +/* */ +/* 157 */ rule = new FillupRedundanceDataRule(); +/* 158 */ processer.addBeforeRule(rule); +/* */ +/* */ +/* 161 */ rule = new FillupFretexchangeRule(); +/* 162 */ processer.addBeforeRule(rule); +/* */ +/* */ +/* 165 */ rule = new SetUpdateAuditInfoRule(); +/* 166 */ processer.addBeforeRule(rule); +/* */ +/* */ +/* 169 */ ICompareRule compareRule = new UpdateBillCodeRule(); +/* 170 */ processer.addBeforeRule(compareRule); +/* */ +/* */ +/* 173 */ rule = new CheckNumPriceMnyRule(); +/* 174 */ processer.addBeforeRule(rule); +/* */ +/* 176 */ rule = new CheckSettleOrgRepeat(); +/* 177 */ processer.addBeforeRule(rule); +/* */ +/* 179 */ rule = new CheckDateRule(); +/* 180 */ processer.addBeforeRule(rule); +/* */ +/* */ +/* 183 */ rule = new CheckSaveBillRule(); +/* 184 */ processer.addBeforeRule(rule); +/* */ +/* */ +/* 187 */ rule = new RenovateARByHidsBeginRule(M30EngrossAction.M30Edit); +/* 188 */ processer.addBeforeRule(rule); +/* */ +/* 190 */ boolean icEnable = SysInitGroupQuery.isICEnabled(); +/* 191 */ if (icEnable) { +/* */ +/* 193 */ rule = new SaleOrderVOATPBeforeRule(); +/* 194 */ processer.addBeforeRule(rule); +/* */ +/* */ } +/* */ +/* 198 */ rule = new LrgCashMarCheckRule(); +/* 199 */ processer.addBeforeRule(rule); +/* */ +/* */ +/* 202 */ rule = new ArsubOffsetBeforeSaveRule(); +/* 203 */ processer.addBeforeRule(rule); +/* */ +/* */ +/* 206 */ rule = new CheckLrgTotalMoney(); +/* 207 */ processer.addBeforeRule(rule); +/* */ +/* */ +/* 210 */ rule = new FeatureSelectSaveRule(); +/* 211 */ processer.addBeforeRule(rule); +/* */ +/* */ +/* 214 */ rule = new CrossRuleValidateRule(); +/* 215 */ processer.addBeforeRule(rule); +/* */ +/* */ +/* 218 */ compareRule = new ClearMffileSRCRule(); +/* 219 */ processer.addBeforeRule(compareRule); +/* */ + rule = new JudgeMaterialPriceInsertRule(); + processer.addBeforeRule(rule); +/* 221 */ } +/* */ } diff --git a/so/src/private/nc/bs/so/m30/maintain/rule/insert/WritebackMaterialPriceRule.java b/so/src/private/nc/bs/so/m30/maintain/rule/insert/WritebackMaterialPriceRule.java new file mode 100644 index 0000000..5f1add1 --- /dev/null +++ b/so/src/private/nc/bs/so/m30/maintain/rule/insert/WritebackMaterialPriceRule.java @@ -0,0 +1,59 @@ +package nc.bs.so.m30.maintain.rule.insert; + +import nc.bs.framework.common.NCLocator; +import nc.impl.pubapp.pattern.rule.IRule; +import nc.itf.bd.material.sale.IMaterialSaleService; +import nc.md.persist.framework.IMDPersistenceQueryService; +import nc.vo.bd.material.sale.MaterialSaleVO; +import nc.vo.pub.BusinessException; +import nc.vo.pub.lang.UFDouble; +import nc.vo.so.m30.entity.SaleOrderBVO; +import nc.vo.so.m30.entity.SaleOrderVO; + +import java.util.ArrayList; +import java.util.List; + +public class WritebackMaterialPriceRule implements IRule{ + + + @Override + public void process(SaleOrderVO[] vos) { + // TODO Auto-generated method stub + List list = new ArrayList(); + for (SaleOrderVO vo : vos) { + //根据销售订单子表的物料编码和销售组织查询物料主表 + SaleOrderBVO[] saleOrderitems = vo.getChildrenVO(); + //循环销售订单子表 + for(int i = 0; i < saleOrderitems.length; i++) { + SaleOrderBVO item = saleOrderitems[i]; + //取销售订单子表的物料编码和销售组织 + String cmaterialvid = item.getCmaterialvid(); //物料主键 + String pk_org = item.getPk_org(); //销售组织 + UFDouble nqtorigprice = item.getNqtorigprice(); //无税单价 + String whereSql = "nvl(bd_material.dr,0) = 0 and bd_material.code = '" + cmaterialvid + "' and bd_material.pk_org = '" + pk_org + "'"; +// IMDPersistenceQueryService aggvoQueryService = ServiceLocator.find(IMDPersistenceQueryService.class); + IMDPersistenceQueryService aggvoQueryService = NCLocator.getInstance().lookup(IMDPersistenceQueryService.class); + // 条件查询得到物料MaterialSaleVO + try { + whereSql = "nvl(bd_materialsale.dr,0) = 0 and bd_materialsale.pk_material = '" + cmaterialvid + "' and bd_materialsale.pk_org = '" + pk_org + "'"; + @SuppressWarnings("unchecked") + ArrayList materialSaleVOs = (ArrayList)aggvoQueryService.queryBillOfVOByCond(MaterialSaleVO.class, whereSql, true, false); + if(materialSaleVOs.size() <= 0) { + continue; + } + for(MaterialSaleVO materialSaleVO : materialSaleVOs) { + materialSaleVO.setResaleprice(nqtorigprice); + //实体更新物料销售表 +// IMaterialSaleService iMaterialSaleService = ServiceLocator.find(IMaterialSaleService.class); + IMaterialSaleService iMaterialSaleService = NCLocator.getInstance().lookup(IMaterialSaleService.class); + iMaterialSaleService.updateMaterialSaleVO(materialSaleVO); + } + }catch(BusinessException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + } + } + +} diff --git a/uapbd/src/private/nc/bs/uapbd/task/InvoiceTaskPlugin.java b/uapbd/src/private/nc/bs/uapbd/task/InvoiceTaskPlugin.java new file mode 100644 index 0000000..c5a3099 --- /dev/null +++ b/uapbd/src/private/nc/bs/uapbd/task/InvoiceTaskPlugin.java @@ -0,0 +1,212 @@ +package nc.bs.uapbd.task; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.net.URL; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.Base64; +import java.util.HashMap; +import java.util.Map; +import java.util.TreeMap; + +import javax.crypto.Mac; +import javax.crypto.spec.SecretKeySpec; +import javax.net.ssl.HttpsURLConnection; +import javax.net.ssl.SSLContext; +import javax.net.ssl.TrustManager; + +import org.apache.http.client.config.CookieSpecs; +import org.apache.http.client.config.RequestConfig; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; +import org.apache.http.util.EntityUtils; + +import com.alibaba.fastjson.JSONObject; +import com.google.gson.Gson; +import com.yonyou.cloud.utils.StringUtils; + +import nc.bs.dao.BaseDAO; +import nc.bs.pub.pa.PreAlertObject; +import nc.bs.pub.taskcenter.BgWorkingContext; +import nc.bs.pub.taskcenter.IBackgroundWorkPlugin; +import nc.bs.trade.business.HYSuperDMO; +import nc.bs.uapbd.util.IgnoreSslUtil; +import nc.jdbc.framework.processor.MapListProcessor; +import nc.vo.pub.BusinessException; +import nc.vo.sscivm.ivsale.IVApplicationHeadVO; +import nc.vo.sscivm.ivsale.IVApplogVO; + +import javax.net.ssl.HttpsURLConnection; + +public class InvoiceTaskPlugin implements IBackgroundWorkPlugin{ + + @Override + public PreAlertObject executeTask(BgWorkingContext arg0) throws BusinessException { + // TODO Auto-generated method stub + try { + BaseDAO dao = new BaseDAO(); + String sql = " SELECT sscivm_invoice.pk_invoice,so_saleinvoice.csaleinvoiceid,so_saleinvoice.vbillcode billcode, sscivm_invoice.fphm, " + + "sscivm_invoice.Gmfmc, sscivm_invoice.Jshj, sscivm_invoice.viewurl, sscivm_invoice.billno " + + " FROM sscivm_invoice " + + " left join sscivm_invoice_relation on sscivm_invoice_relation.PK_INVOICE = sscivm_invoice.pk_invoice " + + " left join so_saleinvoice on so_saleinvoice.csaleinvoiceid = sscivm_invoice_relation.billid " + + " left join sscivm_ivapplog on sscivm_ivapplog.fphm = sscivm_invoice.fphm " + + " where " + + " sscivm_invoice_relation.billtype = '32' " + + " and so_saleinvoice.vdef20 <> 'Y' " + + " and sscivm_invoice.dr = 0 " + + " and sscivm_ivapplog.kpzt = 2 "; +// + " so_saleinvoice.vbillcode = 'SI2024070400000738' "; + ArrayList> al = (ArrayList>)dao.executeQuery(sql, new MapListProcessor()); + if(al.size() > 0) { + for(HashMap sscivm_invoice : al) { + Object pk_invoice = sscivm_invoice.get("pk_invoice"); //bip发票主键 + Object csaleinvoiceid = sscivm_invoice.get("csaleinvoiceid"); //销售发票id + Object billcode = sscivm_invoice.get("billcode"); //销售发票编码 + Object billno = sscivm_invoice.get("billno"); //bip单据编码编码 + Object fphm = sscivm_invoice.get("fphm"); + Object Gmfmc = sscivm_invoice.get("Gmfmc"); + Object Jshj = sscivm_invoice.get("Jshj"); + Object viewurl = sscivm_invoice.get("viewurl"); + String ctcode=""; + HYSuperDMO dmo = new HYSuperDMO(); + IVApplogVO[] ivApplogVO=(IVApplogVO[]) dmo.queryByWhereClause(IVApplogVO.class, "fphm='"+fphm+"' and dr=0 "); + if(ivApplogVO!=null&&ivApplogVO.length>0) { + ivApplogVO[0].getLyid();//开票申请单主键 + IVApplicationHeadVO ivApplicationHeadVO =(IVApplicationHeadVO) dmo.queryByPrimaryKey(IVApplicationHeadVO.class, ivApplogVO[0].getLyid()); + ctcode=ivApplicationHeadVO.getDef2();//合同号 + } + Object url = ctcode+"_"+Gmfmc+"_"+fphm+"_"+Jshj + ".pdf"; + /** + * 回写逻辑: + * 1.修改发票关联关系单据编码 + * 2.ERP销售发票回传,根据销售发票id,回写发票号和单据编号 + * 3.根据销售发票id 回写下游应收单表头表体发票号 + * 4.查询销售发票下游单据,如果有将下游单据表体字段【来源单据号】更新成新的发票号 + */ + String updateRecbillAndItemSql = "BEGIN\n" + + "UPDATE sscivm_invoice_relation set billno = '" + billno +"' where pk_invoice = '"+ pk_invoice +"' and billid = '"+ csaleinvoiceid +"';\n" + + "UPDATE so_saleinvoice set vdef20 = 'Y' , vdef13 = '" + fphm + "', vbillcode = '" + billno +" where csaleinvoiceid = '" + csaleinvoiceid + "';\n" + + "MERGE INTO ar_recbill a USING ar_recitem b ON ( a.pk_recbill = b.pk_recbill AND b.top_billid = '" + csaleinvoiceid + "' AND b.top_billtype = '32' ) \n" + + "WHEN MATCHED THEN\n" + + "UPDATE \n" + + "SET a.invoiceno = '" + fphm + "';\n" + + "UPDATE ar_recitem \n" + + "SET invoiceno = '" + fphm + "' \n" + + "WHERE\n" + + "top_billid = '" + csaleinvoiceid + "' \n" + + "AND top_billtype = '32';\n" + + "UPDATE ic_saleout_b \n" + + "SET vsourcebillcode = '"+ billno +"' \n" + + "WHERE\n" + + "csourcetype = '32' \n" + + "AND csourcebillhid = '" + csaleinvoiceid +"';\n" + + "COMMIT;\n" + + "EXCEPTION \n" + + "WHEN OTHERS THEN\n" + + "ROLLBACK;\n" + + "RAISE;\n" + + "END;"; + dao.executeUpdate(updateRecbillAndItemSql); + } + + + } + } catch(Exception e) { + e.printStackTrace(); + } + return null; + } + + + private String doPost(String requestUrl, JSONObject json) throws IOException { + URL u = new URL(requestUrl); + try { + if("https".equalsIgnoreCase(u.getProtocol())){//判定网址是否信任,不信任则调用忽略信任工具类SslUtil + IgnoreSslUtil.ignoreSsl(); + } + HttpsURLConnection connection = (HttpsURLConnection)u.openConnection(); + // 设置请求方法 + connection.setRequestMethod("POST"); + // 设置请求属性 + connection.setRequestProperty("Content-Type", "application/json; charset=UTF-8"); + // 发送POST请求必须设置如下两行 + connection.setDoOutput(true); + connection.setDoInput(true); + byte[] outputInBytes = json.toJSONString().getBytes(StandardCharsets.UTF_8); + // 写入数据到请求体 + OutputStream os = connection.getOutputStream(); + os.write(outputInBytes); + // 获取响应码 + int responseCode = connection.getResponseCode(); + System.out.println("Response Code: " + responseCode); + // 读取响应 + try(BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream()))) { + String response = br.readLine(); + System.out.println("Response: " + response); + } + // 关闭连接 + connection.disconnect(); + } catch(Exception e) { + e.printStackTrace(); + } + return null; + } + + + private String doGet(String requestUrl, Map paramMap) throws IOException { + + StringBuilder param = new StringBuilder("?"); + if (paramMap != null) { + for (Map.Entry entry : paramMap.entrySet()) { + param.append(entry.getKey()); + param.append("="); + param.append(entry.getValue()); + param.append("&"); + } + param.deleteCharAt(param.length() - 1); + } + String url = requestUrl + param; + URL u = new URL(url); + try { + if("https".equalsIgnoreCase(u.getProtocol())){//判定网址是否信任,不信任则调用忽略信任工具类SslUtil + IgnoreSslUtil.ignoreSsl(); + } + HttpsURLConnection connection = (HttpsURLConnection)u.openConnection(); + connection.setRequestMethod("GET"); + connection.setConnectTimeout(5000); + connection.setReadTimeout(5000); + connection.connect(); + StringBuilder response =new StringBuilder(); + int responsecode = connection.getResponseCode(); + if(responsecode == HttpsURLConnection.HTTP_OK) { + InputStream inputstream =connection.getInputStream(); + BufferedReader reader = new BufferedReader(new InputStreamReader(inputstream)); + String line; + + while((line =reader.readLine()) != null) { + response.append(line); + } + reader.close(); + } + connection.disconnect(); + return response.toString(); + } catch(Exception e) { + e.printStackTrace(); + } + + + + return null; + } + +}