From eccdb9b4ea37c1b9fd8bdb2b46d7ad39641ed80d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BE=9A=E8=B1=86=E8=B1=86?= <13356128+sunandmoon60@user.noreply.gitee.com> Date: Thu, 30 Oct 2025 15:47:33 +0800 Subject: [PATCH] =?UTF-8?q?1.=E9=80=80=E8=B4=A7=E5=A4=84=E7=90=86=202.?= =?UTF-8?q?=E8=BF=94=E5=88=A9=E8=A7=84=E5=88=99=E5=AE=A1=E6=A0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plugin/form/pm/PurApplyBillPlugin.java | 12 +- .../form/pm/PurRefundApplyBillPlugin.java | 152 ++++++++++--- .../pm/PurorderEntryIntroPaybillPlugin.java | 3 + .../operate/conm/PurconmAuditToFLOp.java | 45 ++++ .../operate/conm/RebateRuleAuditToFlOp.java | 20 ++ .../im/PurOrderPushPurRefundConverPlugin.java | 199 ++++++++++++++++++ .../pm/PurRefundApplySaveOpPlugin.java | 51 +++++ .../operate/sys/RebateRuleOpPlugin.java | 8 +- .../app/plugin/utils/AutoFixLinkUtil.java | 91 ++++++++ 9 files changed, 544 insertions(+), 37 deletions(-) create mode 100644 lc123/cloud/app/plugin/operate/conm/PurconmAuditToFLOp.java create mode 100644 lc123/cloud/app/plugin/operate/conm/RebateRuleAuditToFlOp.java create mode 100644 lc123/cloud/app/plugin/operate/im/PurOrderPushPurRefundConverPlugin.java create mode 100644 lc123/cloud/app/plugin/operate/pm/PurRefundApplySaveOpPlugin.java create mode 100644 lc123/cloud/app/plugin/utils/AutoFixLinkUtil.java diff --git a/lc123/cloud/app/plugin/form/pm/PurApplyBillPlugin.java b/lc123/cloud/app/plugin/form/pm/PurApplyBillPlugin.java index 8642d1e..1511a46 100644 --- a/lc123/cloud/app/plugin/form/pm/PurApplyBillPlugin.java +++ b/lc123/cloud/app/plugin/form/pm/PurApplyBillPlugin.java @@ -115,12 +115,12 @@ public class PurApplyBillPlugin extends AbstractBillPlugIn implements Plugin { } } //收货仓库 -// if (StringUtils.equals("tqq9_rewares_sh", name)) { -// DynamicObject tqq9_rewares_sh = (DynamicObject) model.getValue("tqq9_rewares_sh"); -// EntryFieldRefresher entryFieldRefresher = new EntryFieldRefresher(); -// entryFieldRefresher.updateDynamicObjectByOrg(SH_ORGNUMBER, "warehouse", tqq9_rewares_sh, model); -// view.updateView(); -// } + if (StringUtils.equals("tqq9_rewares_sh", name)) { + DynamicObject tqq9_rewares_sh = (DynamicObject) model.getValue("tqq9_rewares_sh"); + EntryFieldRefresher entryFieldRefresher = new EntryFieldRefresher(); + entryFieldRefresher.updateDynamicObjectByOrg(SH_ORGNUMBER, "warehouse", tqq9_rewares_sh, model); + view.updateView(); + } // //采购数量 if (StringUtils.equals("applyqty", name)) { BigDecimal applyqty = (BigDecimal) model.getValue("applyqty"); diff --git a/lc123/cloud/app/plugin/form/pm/PurRefundApplyBillPlugin.java b/lc123/cloud/app/plugin/form/pm/PurRefundApplyBillPlugin.java index ea6b2ed..d1e2c7e 100644 --- a/lc123/cloud/app/plugin/form/pm/PurRefundApplyBillPlugin.java +++ b/lc123/cloud/app/plugin/form/pm/PurRefundApplyBillPlugin.java @@ -46,8 +46,10 @@ public class PurRefundApplyBillPlugin extends AbstractBillPlugIn implements Befo public void registerListener(EventObject e) { super.registerListener(e); this.addItemClickListeners("tbmain"); - BasedataEdit control = this.getControl("tqq9_ph"); - control.addBeforeF7SelectListener(this); + BasedataEdit tqq9_ph = this.getControl("tqq9_ph"); +// RefBillEdit tqq9_inwarebill = this.getControl("tqq9_inwarebill"); + tqq9_ph.addBeforeF7SelectListener(this); +// tqq9_inwarebill.addBeforeF7SelectListener(this); // this.addClickListeners("tqq9_ydthno"); } @@ -61,9 +63,74 @@ public class PurRefundApplyBillPlugin extends AbstractBillPlugIn implements Befo String billno = ((HashMap) returnData).get("billno").toString(); DynamicObject tqq9_otheroutapply = BusinessDataServiceHelper.loadSingle("tqq9_otheroutapply", new QFilter[]{new QFilter("billno", QCP.equals, billno)}); this.getModel().setValue("tqq9_yythbillno", tqq9_otheroutapply); + SaveServiceHelper.save(new DynamicObject[]{this.getModel().getDataEntity(true)}); + this.getView().updateView(); } - SaveServiceHelper.save(new DynamicObject[]{this.getModel().getDataEntity(true)}); - this.getView().updateView(); +// else if (StringUtils.equals("pm_purrefundapplybill", actionId) && returnData != null) { +// int size = ((ListSelectedRowCollection) returnData).size(); +// if(size>1){ +// this.getView().showErrorNotification("只允许选择一行入库单"); +// return; +// } +// +// ListSelectedRow listSelectedRow = ((ListSelectedRowCollection) returnData).get(0); +// //入库单数据查询 +// DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle(listSelectedRow.toString(), "im_purinbill"); +// String billid = listSelectedRow.getPrimaryKeyValue().toString();//单据id +// String entryid = listSelectedRow.getEntryPrimaryKeyValue().toString();//分录id +// DynamicObjectCollection billentry = dynamicObject.getDynamicObjectCollection("billentry"); +// for (DynamicObject object : billentry) { +// String id = object.getString("id"); +// if (StringUtils.equals(id, entryid)) { +// String wmsentryid = listSelectedRow.getEntryPrimaryKeyValue().toString();//WMS分录id +// BigDecimal qty = object.getBigDecimal("qty");//入库数量 +// DynamicObject warehouse = object.getDynamicObject("warehouse");//入库仓库 +// Date producedate = object.getDate("producedate");//生产日期 +// Date expirydate = object.getDate("expirydate");//到期日期 +// String lotnumber = object.getString("lotnumber");//批号 +// String tqq9_registration = object.getString("tqq9_registration");//注册证 +// String tqq9_licenseno = object.getString("tqq9_licenseno");//许可证 +// String mainbillentryid = object.getString("mainbillentryid"); +// +// //采购退货申请循环找分录 +// DynamicObjectCollection billentry1 = this.getModel().getDataEntity(true).getDynamicObjectCollection("billentry"); +// for (DynamicObject object1 : billentry1) { +// String mainbillentryid1 = object1.getString("mainbillentryid"); +// if (StringUtils.equals(mainbillentryid, mainbillentryid1)) { +// int seq = object1.getInt("seq"); +// this.getModel().setValue("tqq9_inwarebillid", billid, seq-1); +// this.getModel().setValue("tqq9_inwarebillentryid", entryid, seq-1); +// this.getModel().setValue("tqq9_wmsdetailid", wmsentryid, seq-1); +// this.getModel().setValue("tqq9_maxqty", qty, seq-1); +// this.getModel().setValue("tqq9_thck", warehouse, seq-1); +// this.getModel().setValue("tqq9_productdate", producedate, seq-1); +// this.getModel().setValue("tqq9_expiredate", expirydate, seq-1); +// this.getModel().setValue("tqq9_ph", lotnumber, seq-1); +// this.getModel().setValue("tqq9_registration", tqq9_registration, seq-1); +// this.getModel().setValue("tqq9_licenseno", tqq9_licenseno, seq-1); +// this.getView().updateView(); +// } +// +// } +// } +// } +//// if (billentry.size() > rowKey) { +//// DynamicObject dynamicObject1 = billentry.get(rowKey); +////// String billid = listSelectedRow.getPrimaryKeyValue().toString();//单据id +////// String entryid = listSelectedRow.getEntryPrimaryKeyValue().toString();//分录id +//// String wmsentryid = listSelectedRow.getEntryPrimaryKeyValue().toString();//WMS分录id +//// BigDecimal qty = dynamicObject1.getBigDecimal("qty");//入库数量 +//// DynamicObject warehouse = dynamicObject1.getDynamicObject("warehouse");//入库仓库 +//// Date producedate = dynamicObject1.getDate("producedate");//生产日期 +//// Date expirydate = dynamicObject1.getDate("expirydate");//到期日期 +//// String lotnumber = dynamicObject1.getString("lotnumber");//批号 +//// String tqq9_registration = dynamicObject1.getString("tqq9_registration");//注册证 +//// String tqq9_licenseno = dynamicObject1.getString("tqq9_licenseno");//许可证 +//// +//// } +// +// } + } /** @@ -115,28 +182,45 @@ public class PurRefundApplyBillPlugin extends AbstractBillPlugIn implements Befo @Override public void beforeF7Select(BeforeF7SelectEvent beforeF7SelectEvent) { - int index = this.getModel().getEntryCurrentRowIndex("billentry"); - DynamicObjectCollection entryentity = this.getModel().getDataEntity(true).getDynamicObjectCollection("billentry"); - DynamicObject dynamicObject = entryentity.get(index); - DynamicObject material = dynamicObject.getDynamicObject("material");//物料采购信息 - if (material == null) { - beforeF7SelectEvent.setCancel(true); - this.getView().showMessage("请先填物料信息"); - } else { - DynamicObject masterid = material.getDynamicObject("masterid");//物料 - DynamicObject bd_materialinventoryinfo = BusinessDataServiceHelper.loadSingle("bd_materialinventoryinfo", new QFilter[]{new QFilter("masterid", QCP.equals, masterid.getLong("id"))}); - - Boolean enablelot = bd_materialinventoryinfo.getBoolean("enablelot");//是否启用批号管理 - if (enablelot) { - ListShowParameter param = (ListShowParameter) beforeF7SelectEvent.getFormShowParameter(); - QFilter qF1 = new QFilter("material.number", QCP.equals, masterid.getString("number")); - param.getListFilterParameter().getQFilters().add(qF1); - } else { + String name = beforeF7SelectEvent.getProperty().getName(); + if (StringUtils.equals("tqq9_ph", name)) { + int index = this.getModel().getEntryCurrentRowIndex("billentry"); + DynamicObjectCollection entryentity = this.getModel().getDataEntity(true).getDynamicObjectCollection("billentry"); + DynamicObject dynamicObject = entryentity.get(index); + DynamicObject material = dynamicObject.getDynamicObject("material");//物料采购信息 + if (material == null) { beforeF7SelectEvent.setCancel(true); - this.getView().showMessage("该物料未启用批号管理"); - } + this.getView().showMessage("请先填物料信息"); + } else { + DynamicObject masterid = material.getDynamicObject("masterid");//物料 + DynamicObject bd_materialinventoryinfo = BusinessDataServiceHelper.loadSingle("bd_materialinventoryinfo", new QFilter[]{new QFilter("masterid", QCP.equals, masterid.getLong("id"))}); + Boolean enablelot = bd_materialinventoryinfo.getBoolean("enablelot");//是否启用批号管理 + if (enablelot) { + ListShowParameter param = (ListShowParameter) beforeF7SelectEvent.getFormShowParameter(); + QFilter qF1 = new QFilter("material.number", QCP.equals, masterid.getString("number")); + param.getListFilterParameter().getQFilters().add(qF1); + + } else { + beforeF7SelectEvent.setCancel(true); + this.getView().showMessage("该物料未启用批号管理"); + } + } } +// else if (StringUtils.equals("tqq9_inwarebill", name)) { +// int index = this.getModel().getEntryCurrentRowIndex("billentry"); +// Object mainbillnumber = this.getModel().getValue("mainbillnumber", index); +// if (mainbillnumber != null) { +// ListShowParameter param = (ListShowParameter) beforeF7SelectEvent.getFormShowParameter(); +// QFilter qF1 = new QFilter("billentry.mainbillnumber", QCP.equals, mainbillnumber.toString()); +// qF1.and("billstatus", QCP.equals, "C"); +// param.getListFilterParameter().getQFilters().add(qF1); +// param.setCustomParam("ismergerows", false); +// CloseCallBack closeCallBack = new CloseCallBack(this.getPluginName(), "pm_purrefundapplybill"); +// param.setCloseCallBack(closeCallBack); +// +// } +// } } @Override @@ -147,25 +231,33 @@ public class PurRefundApplyBillPlugin extends AbstractBillPlugIn implements Befo ChangeData changeData = e.getChangeSet()[0]; int rowIndex = changeData.getRowIndex(); IDataModel model = this.getModel(); - DynamicObject material = (DynamicObject)model.getValue("material", rowIndex);//物料采购信息 - DynamicObject tqq9_ph = (DynamicObject)model.getValue("tqq9_ph", rowIndex);//批号 - if(material!=null&&tqq9_ph!=null){ + DynamicObject material = (DynamicObject) model.getValue("material", rowIndex);//物料采购信息 + DynamicObject tqq9_ph = (DynamicObject) model.getValue("tqq9_ph", rowIndex);//批号 + if (material != null && tqq9_ph != null) { DynamicObject masterid = material.getDynamicObject("masterid");//物料 - if(masterid!=null){ + if (masterid != null) { String id = masterid.getString("id"); String tqq9_phno = tqq9_ph.getString("number");//批号 - String sql = "/*dialect*/ select sum(fbaseqty) useqty from t_im_inv_realbalance where fmaterialid ='"+id+"' and flotnum ='"+tqq9_phno+"'" ; + String sql = "/*dialect*/ select sum(fbaseqty) useqty from t_im_inv_realbalance where fmaterialid ='" + id + "' and flotnum ='" + tqq9_phno + "'"; DataSet pzDataSet = DB.queryDataSet(this.getClass().getName(), DBRoute.of("scm"), sql); DataSet copy = pzDataSet.copy(); DynamicObjectCollection dynamicObjects = ORM.create().toPlainDynamicObjectCollection(copy); - if(dynamicObjects.size()>0){ + if (dynamicObjects.size() > 0) { BigDecimal useqty = dynamicObjects.get(0).getBigDecimal("useqty"); - model.setValue("tqq9_pckyamount",useqty,rowIndex); + model.setValue("tqq9_pckyamount", useqty, rowIndex); this.getView().updateView(); } } } } +// else if (StringUtils.equals("tqq9_inwarebill", name)) { +// IDataModel model = this.getModel(); +// +// ChangeData changeData = e.getChangeSet()[0]; +// int rowIndex = changeData.getRowIndex(); +// DynamicObject tqq9_inwarebill = (DynamicObject) model.getValue("tqq9_inwarebill", rowIndex);//批号 +// +// } } } \ No newline at end of file diff --git a/lc123/cloud/app/plugin/form/pm/PurorderEntryIntroPaybillPlugin.java b/lc123/cloud/app/plugin/form/pm/PurorderEntryIntroPaybillPlugin.java index 61d413c..e142a8e 100644 --- a/lc123/cloud/app/plugin/form/pm/PurorderEntryIntroPaybillPlugin.java +++ b/lc123/cloud/app/plugin/form/pm/PurorderEntryIntroPaybillPlugin.java @@ -265,6 +265,7 @@ public class PurorderEntryIntroPaybillPlugin extends AbstractBillPlugIn imple model.setValue("tqq9_sfsyxf", "false");//是否使用现返 model.setValue("tqq9_hsxfsysl", taxrate);//含税现返使用税率 model.setValue("tqq9_hsxfsygs", "A");//含税现返使用归属 + } JSONObject material = entry.getJSONObject("tqq9_material");//物料 DynamicObject tqq9_material = BusinessDataServiceHelper.loadSingle(material.getLong("id"), "bd_material");//物料 @@ -290,6 +291,8 @@ public class PurorderEntryIntroPaybillPlugin extends AbstractBillPlugIn imple model.setValue("entryrecdept", org, i);//收货部门 model.setValue("discounttype", "C", i);//折扣方式 model.setValue("tqq9_expectsaletime", tqq9_saledates, i);//预计销售时间(月) + model.setValue("ownertype", "bos_org",i);//货主类型 + model.setValue("owner", org,i);//货主类型 if (StringUtils.equals(org.getString("number"), "SHLC")) { model.setValue("tqq9_zgcgxj", tqq9_material.getBigDecimal("tqq9_maxprice_sh"), i);//最高采购限价 model.setValue("priceandtax", tqq9_material.getBigDecimal("tqq9_maxprice_sh"), i);//含税单价 diff --git a/lc123/cloud/app/plugin/operate/conm/PurconmAuditToFLOp.java b/lc123/cloud/app/plugin/operate/conm/PurconmAuditToFLOp.java new file mode 100644 index 0000000..c0dea6b --- /dev/null +++ b/lc123/cloud/app/plugin/operate/conm/PurconmAuditToFLOp.java @@ -0,0 +1,45 @@ +package tqq9.lc123.cloud.app.plugin.operate.conm; + +import kd.bos.dataentity.OperateOption; +import kd.bos.dataentity.entity.DynamicObject; +import kd.bos.dataentity.entity.DynamicObjectCollection; +import kd.bos.entity.operate.result.OperationResult; +import kd.bos.entity.plugin.AbstractOperationServicePlugIn; +import kd.bos.entity.plugin.PreparePropertysEventArgs; +import kd.bos.entity.plugin.args.AfterOperationArgs; +import kd.bos.logging.Log; +import kd.bos.logging.LogFactory; +import kd.bos.servicehelper.operation.OperationServiceHelper; +import tqq9.lc123.cloud.app.api.utils.Constants; + +/** + * 合同审核审核返利规则 + */ +public class PurconmAuditToFLOp extends AbstractOperationServicePlugIn { + private final static Log logger = LogFactory.getLog(PurconmAuditToFLOp.class); + + @Override + public void onPreparePropertys(PreparePropertysEventArgs e) { + super.onPreparePropertys(e); + e.getFieldKeys().add("tqq9_entryentity.tqq9_pur_rebate"); + } + + @Override + public void afterExecuteOperationTransaction(AfterOperationArgs e) { + super.afterExecuteOperationTransaction(e); + DynamicObject[] dataEntities1 = e.getDataEntities(); + for (DynamicObject dynamicObject : dataEntities1) { + DynamicObjectCollection tqq9_entryentity = dynamicObject.getDynamicObjectCollection("tqq9_entryentity"); + for (DynamicObject object : tqq9_entryentity) { + DynamicObject tqq9_pur_rebate = object.getDynamicObject("tqq9_pur_rebate"); + OperateOption operateOption = OperateOption.create(); + OperationResult auditResult = OperationServiceHelper.executeOperate(Constants.TYPE_AUDIT, "tqq9_pur_rebate", new DynamicObject[]{tqq9_pur_rebate}, operateOption); + } + + + + } + } + + +} \ No newline at end of file diff --git a/lc123/cloud/app/plugin/operate/conm/RebateRuleAuditToFlOp.java b/lc123/cloud/app/plugin/operate/conm/RebateRuleAuditToFlOp.java new file mode 100644 index 0000000..cb824d2 --- /dev/null +++ b/lc123/cloud/app/plugin/operate/conm/RebateRuleAuditToFlOp.java @@ -0,0 +1,20 @@ +package tqq9.lc123.cloud.app.plugin.operate.conm; + +import kd.bos.entity.plugin.AbstractOperationServicePlugIn; +import kd.bos.entity.plugin.args.AfterOperationArgs; +import kd.bos.logging.Log; +import kd.bos.logging.LogFactory; +import kd.sdk.plugin.Plugin; + +/** + * 单据操作插件 + */ +public class RebateRuleAuditToFlOp extends AbstractOperationServicePlugIn implements Plugin { + private final static Log logger = LogFactory.getLog(RebateRuleAuditToFlOp.class); + + @Override + public void afterExecuteOperationTransaction(AfterOperationArgs e) { + super.afterExecuteOperationTransaction(e); + + } +} \ No newline at end of file diff --git a/lc123/cloud/app/plugin/operate/im/PurOrderPushPurRefundConverPlugin.java b/lc123/cloud/app/plugin/operate/im/PurOrderPushPurRefundConverPlugin.java new file mode 100644 index 0000000..d0feddb --- /dev/null +++ b/lc123/cloud/app/plugin/operate/im/PurOrderPushPurRefundConverPlugin.java @@ -0,0 +1,199 @@ +package tqq9.lc123.cloud.app.plugin.operate.im; + +import kd.bos.dataentity.entity.DynamicObject; +import kd.bos.dataentity.entity.DynamicObjectCollection; +import kd.bos.entity.ExtendedDataEntity; +import kd.bos.entity.ExtendedDataEntitySet; +import kd.bos.entity.botp.plugin.AbstractConvertPlugIn; +import kd.bos.entity.botp.plugin.args.AfterConvertEventArgs; +import kd.bos.logging.Log; +import kd.bos.logging.LogFactory; +import kd.bos.orm.query.QCP; +import kd.bos.orm.query.QFilter; +import kd.bos.servicehelper.BusinessDataServiceHelper; +import kd.sdk.plugin.Plugin; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * 单据转换插件 + */ +public class PurOrderPushPurRefundConverPlugin extends AbstractConvertPlugIn implements Plugin { + private final static Log logger = LogFactory.getLog(PurOrderPushPurRefundConverPlugin.class); + private static String PM_PURREFUNDAPPLYBILL = "pm_purrefundapplybill"; + + + /** + * 采购订单下推采购退货申请 + */ + @Override + public void afterConvert(AfterConvertEventArgs e) { + super.afterConvert(e); + ExtendedDataEntitySet targetExtDataEntitySet = e.getTargetExtDataEntitySet(); + ExtendedDataEntity[] extendedDataEntities = targetExtDataEntitySet.FindByEntityKey(PM_PURREFUNDAPPLYBILL); + for (ExtendedDataEntity extendedDataEntity : extendedDataEntities) { + //采购退货申请 + DynamicObject dataEntity = extendedDataEntity.getDataEntity(); + DynamicObjectCollection dynamicObjectCollection = dataEntity.getDynamicObjectCollection("billentry"); + DynamicObject[] im_purinblil = null; + for (DynamicObject entry : dynamicObjectCollection) { + String mainbillnumber = entry.getString("mainbillnumber"); + //采购订单 + im_purinblil = BusinessDataServiceHelper.load("im_purinbill", "id,name,billentry.material,billentry.entryreqorg," + + "billentry.taxrateid,billentry.discounttype,billentry.mainbillentity,billentry.mainbillid,billentry.mainbillnumber,billentry.mainbillentryid," + + "billentry.mainbillentryseq,billentry.entrycreator,billentry.entrycreatetime,billentry.entrymodifier," + + "billentry.entrymodifytime,billentry.linetype,billentry.tqq9_registration,billentry.tqq9_licenseno," + + "billentry.tqq9_brand,billentry.warehouse,billentry.qty,billentry.ispresent," + + "billentry.ownertype,billentry.mversion,billentry.unit2nd,billentry.qtyunit2nd," + + "billentry.auxpty,billentry.discountrate,billentry.price,billentry.priceandtax," + + "billentry.amount,billentry.curamount,billentry.taxamount,billentry.curtaxamount," + + "billentry.discountamount,billentry.amountandtax,billentry.curamountandtax,billentry.returnqty," + + "billentry.returnbaseqty,billentry.tqq9_yyhyflje,billentry.tqq9_yyhwflje,billentry.lotnumber," + + "billentry.tqq9_goods,billentry.tqq9_wmsdetailid,billentry.producedate,billentry.expirydate,creator,createtime,modifier,modifytime,billentry.owner", new QFilter[]{new QFilter("billentry.mainbillnumber", QCP.equals, mainbillnumber).and("billstatus",QCP.equals,"C")}); + + + } + BigDecimal zero = BigDecimal.ZERO; + dynamicObjectCollection.clear(); + if(im_purinblil!=null){ + for (DynamicObject dynamicObject : im_purinblil) { + DynamicObjectCollection billentry = dynamicObject.getDynamicObjectCollection("billentry"); + String billid = dynamicObject.getString("id"); + for (DynamicObject object : billentry) { + String billentryid = object.getString("id"); + DynamicObject material = object.getDynamicObject("material");//物料库存信息 + DynamicObject masterid = material.getDynamicObject("masterid");//物料信息 + //物料采购信息 + DynamicObject bd_materialpurchaseinfo = BusinessDataServiceHelper.loadSingle("bd_materialpurchaseinfo", new QFilter[]{new QFilter("masterid", QCP.equals, masterid.getLong("id"))}); + masterid = BusinessDataServiceHelper.loadSingle("bd_material", new QFilter[]{new QFilter("id", QCP.equals, masterid.getLong("id"))}); + String materialname = bd_materialpurchaseinfo.getString("masterid.name");//物料名称 + DynamicObject baseunit = masterid.getDynamicObject("baseunit");//计量单位 + DynamicObject entryreqorg = object.getDynamicObject("entryreqorg");//需求组织 + DynamicObject taxrateid = object.getDynamicObject("taxrateid");//税率 + String discounttype = object.getString("discounttype");//折扣方式 + String mainbillentity = object.getString("mainbillentity");//核心单据实体 + String mainbillid = object.getString("mainbillid");//核心单据ID + String mainbillnumber = object.getString("mainbillnumber");//核心单据编号 + String mainbillentryid = object.getString("mainbillentryid");//核心单据行ID + String mainbillentryseq = object.getString("mainbillentryseq");//核心单据分录序号 + DynamicObject creator = dynamicObject.getDynamicObject("creator");//创建人 + Date createtime = dynamicObject.getDate("createtime");//创建时间 + DynamicObject modifier = dynamicObject.getDynamicObject("modifier");//修改人 + Date modifytime = dynamicObject.getDate("modifytime");//修改时间 + DynamicObject linetype = object.getDynamicObject("linetype");//行类型 + DynamicObject tqq9_registration = object.getDynamicObject("tqq9_registration");//注册证 + String tqq9_licenseno = object.getString("tqq9_licenseno");//许可证 + DynamicObject tqq9_brand = masterid.getDynamicObject("tqq9_brand");//品牌 + DynamicObject warehouse = object.getDynamicObject("warehouse");//入库仓库 + BigDecimal qty = object.getBigDecimal("qty");//数量 + Boolean ispresent = object.getBoolean("ispresent");//是否赠品 + String ownertype = object.getString("ownertype");//货主类型 + DynamicObject owner = object.getDynamicObject("owner");//货主 + DynamicObject version = object.getDynamicObject("mversion");//物料版本 + DynamicObject unit2nd = object.getDynamicObject("unit2nd");//辅助单位 + BigDecimal qtyunit2nd = object.getBigDecimal("qtyunit2nd");//辅助数量 + Object auxpty = object.get("auxpty");//辅助属性 + BigDecimal discountrate = object.getBigDecimal("discountrate");//单位折扣(率) + BigDecimal price = object.getBigDecimal("price");//单价 + BigDecimal priceandtax = object.getBigDecimal("priceandtax");//含税单价 + BigDecimal amount = object.getBigDecimal("amount");//金额 + BigDecimal curamount = object.getBigDecimal("curamount");//金额(本位币) + BigDecimal taxamount = object.getBigDecimal("taxamount");//税额 + BigDecimal curtaxamount = object.getBigDecimal("curtaxamount");//税额(本位币) + BigDecimal discountamount = object.getBigDecimal("discountamount");//优惠(折扣)金额 + BigDecimal amountandtax = object.getBigDecimal("amountandtax");//折扣后价税合计 + BigDecimal curamountandtax = object.getBigDecimal("curamountandtax");//价税合计(本位币) + BigDecimal returnqty = object.getBigDecimal("returnqty");//退库数量 + BigDecimal returnbaseqty = object.getBigDecimal("returnbaseqty");//退库数量 + BigDecimal tqq9_yyhyflje = object.getBigDecimal("tqq9_yyhyflje");//有优惠有返利含税单价 + BigDecimal tqq9_yyhwflje = object.getBigDecimal("tqq9_yyhwflje");//有优惠无返利含税单价 + String lotnumber = object.getString("lotnumber");//批号 + DynamicObject tqq9_goods = object.getDynamicObject("tqq9_goods");//商品 + String tqq9_wmsdetailid = object.getString("tqq9_wmsdetailid");//WMS分录id + Date producedate = object.getDate("producedate");//生产日期 + Date expirydate = object.getDate("expirydate");//生产日期 + + + DynamicObject dynamicObject1 = dynamicObjectCollection.addNew(); + dynamicObject1.set("material",bd_materialpurchaseinfo); + dynamicObject1.set("materialname",materialname); + dynamicObject1.set("unit",baseunit); + dynamicObject1.set("baseunit",baseunit); + dynamicObject1.set("rowclosestatus","A"); + dynamicObject1.set("rowterminatestatus","A"); + dynamicObject1.set("entryreqorg","A"); + dynamicObject1.set("entryreqorg",entryreqorg); + dynamicObject1.set("entryinvcorg",entryreqorg); + dynamicObject1.set("entrysettleorg",entryreqorg); + dynamicObject1.set("taxrateid",taxrateid); + dynamicObject1.set("discounttype",discounttype); + dynamicObject1.set("entrypayorg",entryreqorg); + dynamicObject1.set("mainbillentity",mainbillentity); + dynamicObject1.set("mainbillid",mainbillid); + dynamicObject1.set("mainbillnumber",mainbillnumber); + dynamicObject1.set("mainbillentryid",mainbillentryid); + dynamicObject1.set("mainbillentryseq",mainbillentryseq); + dynamicObject1.set("srcbillentity",mainbillentity); + dynamicObject1.set("srcbillid",mainbillid); + dynamicObject1.set("srcbillnumber",mainbillnumber); + dynamicObject1.set("srcbillentryid",mainbillentryid); + dynamicObject1.set("srcbillentryseq",mainbillentryseq); + dynamicObject1.set("entrycreator",creator); + dynamicObject1.set("entrycreatetime",createtime); + dynamicObject1.set("entrymodifier",modifier); + dynamicObject1.set("entrymodifytime",modifytime); + dynamicObject1.set("linetype",linetype); + dynamicObject1.set("tqq9_registration",tqq9_registration); + dynamicObject1.set("tqq9_licenseno",tqq9_licenseno); + dynamicObject1.set("tqq9_brand",tqq9_brand); + dynamicObject1.set("tqq9_thck",warehouse); + dynamicObject1.set("tqq9_kclx","ZP"); + dynamicObject1.set("tqq9_maxqty",qty); + dynamicObject1.set("qty",qty); + dynamicObject1.set("baseqty",qty); + dynamicObject1.set("ispresent",ispresent); + dynamicObject1.set("ownertype",ownertype); + dynamicObject1.set("owner",owner); + dynamicObject1.set("materialversion",version); + dynamicObject1.set("auxunit",unit2nd); + dynamicObject1.set("auxqty",qtyunit2nd); + dynamicObject1.set("auxpty",auxpty); + dynamicObject1.set("discountrate",discountrate); + dynamicObject1.set("price",price); + dynamicObject1.set("priceandtax",priceandtax); + dynamicObject1.set("amount",amount); + dynamicObject1.set("curamount",curamount); + dynamicObject1.set("taxamount",taxamount); + dynamicObject1.set("curtaxamount",curtaxamount); + dynamicObject1.set("discountamount",discountamount); + dynamicObject1.set("amountandtax",amountandtax); + dynamicObject1.set("curamountandtax",curamountandtax); + dynamicObject1.set("joinqty",zero); + dynamicObject1.set("joinbaseqty",zero); + dynamicObject1.set("returnqty",returnqty); + dynamicObject1.set("returnbaseqty",returnbaseqty); + dynamicObject1.set("tqq9_yyhyflje",tqq9_yyhyflje); + dynamicObject1.set("tqq9_yyhwflje",tqq9_yyhwflje); + dynamicObject1.set("tqq9_ph",lotnumber); + dynamicObject1.set("tqq9_goods",tqq9_goods); + dynamicObject1.set("tqq9_inwarebill",dynamicObject); + dynamicObject1.set("tqq9_inwarebillid",billid); + dynamicObject1.set("tqq9_inwarebillentryid",billentryid); + dynamicObject1.set("tqq9_inwarebillentryqty",qty); + dynamicObject1.set("tqq9_wmsdetailid",tqq9_wmsdetailid); + dynamicObject1.set("tqq9_productdate",producedate); + dynamicObject1.set("tqq9_expiredate",expirydate); + } + + + } + } + + + } + + } + + +} \ No newline at end of file diff --git a/lc123/cloud/app/plugin/operate/pm/PurRefundApplySaveOpPlugin.java b/lc123/cloud/app/plugin/operate/pm/PurRefundApplySaveOpPlugin.java new file mode 100644 index 0000000..68a0be3 --- /dev/null +++ b/lc123/cloud/app/plugin/operate/pm/PurRefundApplySaveOpPlugin.java @@ -0,0 +1,51 @@ +package tqq9.lc123.cloud.app.plugin.operate.pm; + +import kd.bos.dataentity.entity.DynamicObject; +import kd.bos.dataentity.entity.DynamicObjectCollection; +import kd.bos.entity.plugin.AbstractOperationServicePlugIn; +import kd.bos.entity.plugin.args.BeforeOperationArgs; +import kd.bos.logging.Log; +import kd.bos.logging.LogFactory; +import kd.bos.orm.query.QCP; +import kd.bos.orm.query.QFilter; +import kd.bos.servicehelper.BusinessDataServiceHelper; +import kd.sdk.plugin.Plugin; +import tqq9.lc123.cloud.app.plugin.utils.AutoFixLinkUtil; + +import java.util.stream.Collectors; + +/** + * 采购退货单保存操作插件 + */ + + + +public class PurRefundApplySaveOpPlugin extends AbstractOperationServicePlugIn implements Plugin { + private final static Log logger = LogFactory.getLog(PurRefundApplySaveOpPlugin.class); + private static String PM_PURREFUNDAPPLYBILL = "pm_purrefundapplybill";//采购退货申请单 + private static String PM_PURORDERBILL = "pm_purorderbill";//采购订单 + private static String billentry = "billentry";//分录标识 + + @Override + public void beforeExecuteOperationTransaction(BeforeOperationArgs e) { + super.beforeExecuteOperationTransaction(e); + DynamicObject[] dataEntities1 = e.getDataEntities(); + if(dataEntities1.length>0){ + DynamicObject dynamicObject = dataEntities1[0]; + DynamicObjectCollection billentry1 = dynamicObject.getDynamicObjectCollection("billentry"); + if(billentry1.size()>0){ + DynamicObject dynamicObject1 = billentry1.get(0); + String srcbillnumber = dynamicObject1.getString("srcbillnumber"); + DynamicObject pm_purorderbill = BusinessDataServiceHelper.loadSingle(PM_PURORDERBILL, new QFilter[]{new QFilter("billno", QCP.equals, srcbillnumber)}); + DynamicObjectCollection dynamicObjects = new DynamicObjectCollection(); + dynamicObjects.add(pm_purorderbill); + dynamicObjects.stream().collect(Collectors.toList()) +; AutoFixLinkUtil fixLinkHelp = new AutoFixLinkUtil(); + fixLinkHelp.linkSourceRow(dynamicObject, dynamicObjects.stream().collect(Collectors.toList()), PM_PURREFUNDAPPLYBILL, billentry,"srcbillentryid", + PM_PURORDERBILL, billentry,"","billentry_lk"); + } + + } + + } +} \ No newline at end of file diff --git a/lc123/cloud/app/plugin/operate/sys/RebateRuleOpPlugin.java b/lc123/cloud/app/plugin/operate/sys/RebateRuleOpPlugin.java index 5304eb1..25a953f 100644 --- a/lc123/cloud/app/plugin/operate/sys/RebateRuleOpPlugin.java +++ b/lc123/cloud/app/plugin/operate/sys/RebateRuleOpPlugin.java @@ -15,6 +15,8 @@ import kd.bos.orm.query.QCP; import kd.bos.orm.query.QFilter; import kd.bos.servicehelper.BusinessDataServiceHelper; import kd.sdk.plugin.Plugin; +import tqq9.lc123.cloud.app.eip.iscb.LCLogService; +import tqq9.lc123.cloud.app.eip.iscb.impl.LCLogServiceImpl; import tqq9.lc123.cloud.app.plugin.operate.pm.PurOrderBillRebatePlugin; import tqq9.lc123.cloud.app.plugin.utils.HttpRequestUtils; @@ -268,14 +270,18 @@ public class RebateRuleOpPlugin extends AbstractOperationServicePlugIn implement Gson gson = new Gson(); + LCLogService lcLogService = new LCLogServiceImpl(); try { String bodyString = HttpRequestUtils.postJson(Push_URL, bodyMap.toString(), tokenMap); JSONObject map = gson.fromJson(bodyString, JSONObject.class); Integer data = map.getInteger("data"); if (data == null) { - this.getOperationResult().setMessage("返利规则:" + name + ",审核时创建返利规则失败"); + lcLogService.savelog("创建返利规则",Push_URL,true,false, bodyMap.toString(), bodyString); + }else{ + lcLogService.savelog("创建返利规则",Push_URL,true,true, bodyMap.toString(), bodyString); } } catch (IOException ex) { + lcLogService.savelog("创建返利规则",Push_URL,true,false, bodyMap.toString(), "接口调用报错,无返回值"); throw new RuntimeException(ex); } diff --git a/lc123/cloud/app/plugin/utils/AutoFixLinkUtil.java b/lc123/cloud/app/plugin/utils/AutoFixLinkUtil.java new file mode 100644 index 0000000..371a14a --- /dev/null +++ b/lc123/cloud/app/plugin/utils/AutoFixLinkUtil.java @@ -0,0 +1,91 @@ +package tqq9.lc123.cloud.app.plugin.utils; + +import kd.bos.dataentity.entity.DynamicObject; +import kd.bos.dataentity.entity.DynamicObjectCollection; +import kd.bos.entity.EntityMetadataCache; +import kd.bos.entity.botp.runtime.TableDefine; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 示例:提供方法,自动创建(修复)与源单的关联关系,支持联查反写 + * + * @author rd_johnnyding + */ +public class AutoFixLinkUtil { + + /** + * @param targetBill 目标单据 + * @param srcBills 上游单据 + * @param targetEntityNumber 目标单据标识 + * @param targetEntryKey 目标单据体标识 + * @param targetFieldKey 目标单据体的【上游单据行ID】字段标识 + * @param srcEntityNumber 上游单据标识 + * @param srcEntryKey 上游单据体标识 + * @param srcFieldKey 上游单据体主键字段标识-默认空 + * @param lkEntryKey 目标单中关联配置单据体标识 + */ + public void linkSourceRow(DynamicObject targetBill, List srcBills, + String targetEntityNumber, String targetEntryKey, String targetFieldKey, + String srcEntityNumber, String srcEntryKey, String srcFieldKey, String lkEntryKey) { + + // 循环分析源单行,提取源单行号、源单内码、分录行内码对应关系,放在字典中备用: key = 源单行号; value = [源单内码、分录行内码] + Map srcRowIds = new HashMap<>(); + for (DynamicObject srcBill : srcBills) { + DynamicObjectCollection srcRows = srcBill.getDynamicObjectCollection(srcEntryKey); + for (DynamicObject srcRow : srcRows) { + String shkd_bussysentryno = null; + if (!kd.bos.util.StringUtils.isEmpty(srcFieldKey)) { + shkd_bussysentryno = srcRow.getString(srcFieldKey); + } else { + shkd_bussysentryno = srcRow.getPkValue().toString(); + } + Object[] srcRowId = new Object[]{srcBill.getPkValue(), srcRow.getPkValue()}; + srcRowIds.put(shkd_bussysentryno, srcRowId); + } + } + + + // 获取源单单据体的表格编码:传入源单标识、源单单据体,记录关联关系时,需要用此编码,标识源单及单据体 + TableDefine tableDefine = EntityMetadataCache.loadTableDefine(srcEntityNumber, srcEntryKey); + Long srcTableId = tableDefine.getTableId(); + + // 拼接处关联子实体标识:如果是单据头下的lk子表,固定使用billhead_lk;如果是单据体下的lk子表,用单据体标识+lk +// String lkEntryKey = StringUtils.equals(targetEntityNumber, targetEntryKey) ? "billhead_lk" : targetEntryKey + "_lk"; + + // 当前单据 + TableDefine targetTableDefine = EntityMetadataCache.loadTableDefine(targetEntityNumber, targetEntryKey); + DynamicObjectCollection targetRows = targetBill.getDynamicObjectCollection(targetTableDefine.getEntityKey()); + + for (DynamicObject targetRow : targetRows) { + // 获取下级_lk子实体行 + DynamicObjectCollection linkRows = targetRow.getDynamicObjectCollection(lkEntryKey); + if (!linkRows.isEmpty()) { + continue; + } + linkRows.clear(); + + // 寻找匹配的源单行:提取本行的匹配字段值,和源单行进行比对 + String shkd_bussysentryno = targetRow.getString(targetFieldKey); + if (srcRowIds.containsKey(shkd_bussysentryno)) { + // 找到了匹配的行,创建一条_lk子实体上数据,记录源单内码 + DynamicObject linkRow = new DynamicObject(linkRows.getDynamicObjectType()); + linkRows.add(linkRow); + + // 在lk行中,记录源单分录表格编码、源单内码、源单分录内码 + Object[] srcRowId = srcRowIds.get(shkd_bussysentryno); + linkRow.set(lkEntryKey + "_stableid", srcTableId); // 源单分录表格编码:以此标识源单类型及单据体 + linkRow.set(lkEntryKey + "_sbillid", srcRowId[0]); // 源单内码 + linkRow.set(lkEntryKey + "_sid", srcRowId[1]); // 源单分录行内码 + } + } +// // 至此:目标单分录行上,已经自动填写源单分录行内码;保存时,会自动创建关联关系及反写 +// SaveServiceHelper.save( +// // 目标单主实体编码 +// new DynamicObject[] {targetBill} // 目标单数据包 +// ); // 操作参数,可通过option传入各种自定义参数 + } +} +