diff --git a/lc123/cloud/app/plugin/form/pm/PuroderBillShareRefundPlugin.java b/lc123/cloud/app/plugin/form/pm/PuroderBillShareRefundPlugin.java index 2d98aa0..06aed86 100644 --- a/lc123/cloud/app/plugin/form/pm/PuroderBillShareRefundPlugin.java +++ b/lc123/cloud/app/plugin/form/pm/PuroderBillShareRefundPlugin.java @@ -1,23 +1,32 @@ package tqq9.lc123.cloud.app.plugin.form.pm; import com.google.gson.Gson; +import kd.bos.algo.DataSet; import kd.bos.bill.AbstractBillPlugIn; import kd.bos.dataentity.OperateOption; import kd.bos.dataentity.entity.DynamicObject; import kd.bos.dataentity.entity.DynamicObjectCollection; import kd.bos.dataentity.utils.StringUtils; +import kd.bos.db.DB; +import kd.bos.db.DBRoute; import kd.bos.entity.datamodel.IDataModel; import kd.bos.entity.datamodel.events.AfterDeleteRowEventArgs; import kd.bos.entity.datamodel.events.ChangeData; import kd.bos.entity.datamodel.events.PropertyChangedArgs; +import kd.bos.form.control.EntryGrid; +import kd.bos.form.control.events.BeforeItemClickEvent; +import kd.bos.form.control.events.ItemClickEvent; import kd.bos.form.events.BeforeDoOperationEventArgs; import kd.bos.form.operate.FormOperate; import kd.bos.logging.Log; import kd.bos.logging.LogFactory; +import kd.bos.orm.ORM; import kd.bos.orm.query.QCP; import kd.bos.orm.query.QFilter; import kd.bos.servicehelper.BusinessDataServiceHelper; +import kd.bos.servicehelper.QueryServiceHelper; import kd.bos.servicehelper.operation.OperationServiceHelper; +import kd.bos.servicehelper.operation.SaveServiceHelper; import tqq9.lc123.cloud.app.eip.iscb.LCLogService; import tqq9.lc123.cloud.app.eip.iscb.impl.LCLogServiceImpl; import tqq9.lc123.cloud.app.plugin.utils.HttpRequestUtils; @@ -25,10 +34,7 @@ import tqq9.lc123.cloud.app.plugin.utils.HttpRequestUtils; import java.io.IOException; import java.math.BigDecimal; import java.math.RoundingMode; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; /** * 采购订单 @@ -51,22 +57,11 @@ public class PuroderBillShareRefundPlugin extends AbstractBillPlugIn { FLXT_TOKEN = token != null ? token.getString("name") : null; } - -// @Override -// public void afterAddRow(AfterAddRowEventArgs e) { -// super.afterAddRow(e); -// if (StringUtils.equals(e.getEntryProp().getName(), ENTRYENTITY)) { -// BigDecimal tqq9_discountamount = (BigDecimal) this.getModel().getValue("tqq9_discountamount"); -// if (tqq9_discountamount.compareTo(BigDecimal.ZERO) > 0) { -// RowDataEntity[] rowDataEntities = e.getRowDataEntities(); -// for (RowDataEntity rowDataEntity : rowDataEntities) { -// int rowIndex = rowDataEntity.getRowIndex(); -// this.getModel().setValue("discounttype", "C", rowIndex); -// } -// } -// -// } -// } + @Override + public void registerListener(EventObject e) { + super.registerListener(e); + this.addItemClickListeners("tbmainentry"); + } @Override public void afterDeleteRow(AfterDeleteRowEventArgs e) { @@ -181,7 +176,7 @@ public class PuroderBillShareRefundPlugin extends AbstractBillPlugIn { @Override public void propertyChanged(PropertyChangedArgs e) { - super.propertyChanged(e); +// super.propertyChanged(e); String name = e.getProperty().getName(); DynamicObject dataEntity = this.getModel().getDataEntity(true); if ("tqq9_hsxfsyje".equals(name)) { @@ -518,15 +513,265 @@ public class PuroderBillShareRefundPlugin extends AbstractBillPlugIn { FormOperate formOperate = (FormOperate)args.getSource(); if ( StringUtils.equals("save", formOperate.getOperateKey())) { DynamicObject dataEntity = this.getModel().getDataEntity(true); + BigDecimal totalallamount = dataEntity.getBigDecimal("totalallamount"); BigDecimal tqq9_payamount = dataEntity.getBigDecimal("tqq9_payamount"); - if (tqq9_payamount.compareTo(BigDecimal.ZERO) == 0) { + if (totalallamount.compareTo(BigDecimal.ZERO) == 0) { DynamicObjectCollection purbillentry_pay = dataEntity.getDynamicObjectCollection("purbillentry_pay"); DynamicObjectCollection billentry = dataEntity.getDynamicObjectCollection("billentry"); for (DynamicObject dynamicObject : billentry) { dynamicObject.set("ispresent",true); } purbillentry_pay.clear(); -// SaveServiceHelper.save(new DynamicObject[]{dataEntity}); + } + if (tqq9_payamount.compareTo(BigDecimal.ZERO) == 0) { + DynamicObjectCollection purbillentry_pay = dataEntity.getDynamicObjectCollection("purbillentry_pay"); + purbillentry_pay.clear(); + } + } + } + + /** + * 校验选择列 + * @param evt + */ + @Override + public void beforeItemClick(BeforeItemClickEvent evt) { + super.beforeItemClick(evt); + String itemKey = evt.getItemKey(); + if (StringUtils.equals("tqq9_choosereturn",itemKey)) { + EntryGrid billentry = this .getControl("billentry"); + int [] selectRows = billentry .getSelectRows(); + if (selectRows==null||selectRows.length==0) { + evt.setCancel(true); + this.getView().showErrorNotification("请选择物料明细执行该操作"); + } + DynamicObject dataEntity = this.getModel().getDataEntity(true); + String billno = dataEntity.getString("billno");//采购订单号 + DynamicObject[] 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.tqq9_cs," + + "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,billentry.taxrate,billentry.srcbillnumber,billentry.tqq9_inwarebillentryid,billentry.invtype", new QFilter[]{new QFilter("billentry.mainbillnumber", QCP.equals, billno).and("billstatus", QCP.equals, "C")}); + if(im_purinblil==null||im_purinblil.length==0){ + evt.setCancel(true); + this.getView().showErrorNotification("所选物料明细没有入库记录"); + } + } + } + + /** + * 根据选择列带出入库单分录 + * @param evt + */ + @Override + public void itemClick(ItemClickEvent evt) { + super.itemClick(evt); + String itemKey = evt.getItemKey(); + if (StringUtils.equals("tqq9_choosereturn",itemKey)) { + EntryGrid entry = this .getControl("billentry"); + int [] selectRows = entry .getSelectRows(); + HashSet ids=new HashSet(); + StringBuilder inWaresId = new StringBuilder(); + BigDecimal zero = BigDecimal.ZERO; + DynamicObject dataEntity = this.getModel().getDataEntity(true); + DynamicObjectCollection tqq9_entryentity = dataEntity.getDynamicObjectCollection("tqq9_entryentity"); + tqq9_entryentity.clear(); + String billno = dataEntity.getString("billno");//采购订单号 + //查询订单相关入库单 + + DynamicObject[] im_purinblil = BusinessDataServiceHelper.load("im_purinbill", "id,name,billno,bookdate,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.tqq9_cs," + + "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,billentry.taxrate,billentry.srcbillnumber,billentry.tqq9_inwarebillentryid,billentry.invtype,billentry.tqq9_cksx," + + "billentry.invstatus", new QFilter[]{new QFilter("billentry.mainbillnumber", QCP.equals, billno).and("billstatus", QCP.equals, "C")}); + //采购退货申请单 + DynamicObject[] pm_purrefundapplybill = BusinessDataServiceHelper.load("pm_purrefundapplybill", "id,name,billno,billentry.material,billentry.qty,billentry.returnqty,billentry.tqq9_inwarebillentryid,tqq9_sourcebillno", new QFilter[]{new QFilter("billentry.mainbillnumber", QCP.equals, billno).and("tqq9_sourcebillno", QCP.equals,"")}); + //过滤选择列信息 + if (selectRows!=null&&selectRows.length>0) { + DynamicObjectCollection billentry1 = dataEntity.getDynamicObjectCollection("billentry"); + for (int selectRow : selectRows) { + DynamicObject dynamicObject = billentry1.get(selectRow); + //分录id + String id = dynamicObject.getString("id"); + ids.add(id); + } + + } + if (im_purinblil != null) { + HashMap> map = new HashMap<>(); + for (DynamicObject dynamicObject : im_purinblil) { + DynamicObjectCollection billentry = dynamicObject.getDynamicObjectCollection("billentry"); + + String purinBillno = dynamicObject.getString("billno");//入库单单号 + Date bookdate = dynamicObject.getDate("bookdate");//记账日期 + for (DynamicObject object : billentry) { + String mainbillentryid = object.getString("mainbillentryid");//核心单据行id + if (!ids.contains(mainbillentryid)) { + continue; + } + 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"))}); + DynamicObject baseunit = masterid.getDynamicObject("baseunit");//计量单位 + DynamicObject tqq9_registration = object.getDynamicObject("tqq9_registration");//注册证 + String tqq9_cs = object.getString("tqq9_cs");//生产厂商 + String tqq9_licenseno = object.getString("tqq9_licenseno");//许可证 + DynamicObject tqq9_cksx = object.getDynamicObject("tqq9_cksx");//仓库属性 + DynamicObject warehouse = object.getDynamicObject("warehouse");//入库仓库 + BigDecimal qty = object.getBigDecimal("qty");//数量 + String lotnumber = object.getString("lotnumber");//批号 + DynamicObject bd_lot = BusinessDataServiceHelper.loadSingle("bd_lot", new QFilter[]{new QFilter("number", QCP.equals, lotnumber)}); + DynamicObject tqq9_goods = object.getDynamicObject("tqq9_goods");//商品 + Date producedate = object.getDate("producedate");//生产日期 + Date expirydate = object.getDate("expirydate");//失效日期 + String tqq9_inwarebillentryid = object.getString("id");//入库单分录id + inWaresId.append(",").append(tqq9_inwarebillentryid); + DynamicObject invtype = object.getDynamicObject("invtype");//入库库存类型 + DynamicObject invstatus = object.getDynamicObject("invstatus");//入库库存状态 + if (qty.compareTo(BigDecimal.ZERO) > 0) { + DynamicObject dynamicObject1 = tqq9_entryentity.addNew(); + dynamicObject1.set("tqq9_rkno", purinBillno);//入库单单号 + dynamicObject1.set("tqq9_rkck", warehouse);//入库仓库 + dynamicObject1.set("tqq9_sp", tqq9_goods);//商品 + dynamicObject1.set("tqq9_materielbm", masterid);//物料编码 + dynamicObject1.set("tqq9_wlmc", masterid.getString("name"));//物料名称 + dynamicObject1.set("tqq9_jldw", baseunit);//计量单位 + dynamicObject1.set("tqq9_rkqty", qty);//入库数量 +// dynamicObject1.set("tqq9_pckyamount", qty);//批次可用量 + dynamicObject1.set("tqq9_rkdate", bookdate);//入库日期 + dynamicObject1.set("tqq9_lot", bd_lot);//批号主档 + dynamicObject1.set("tqq9_lotnumber", bd_lot.getString("number"));//批号 + dynamicObject1.set("tqq9_prodate", producedate);//生产日期 + dynamicObject1.set("tqq9_enddate", expirydate);//失效日期 + dynamicObject1.set("tqq9_zcz", tqq9_registration);//注册证号 + dynamicObject1.set("tqq9_scs", tqq9_cs);//生产商 + dynamicObject1.set("tqq9_xkz", tqq9_licenseno);//许可证号 + dynamicObject1.set("tqq9_cksx1", tqq9_cksx);//仓库属性 + dynamicObject1.set("tqq9_kczt", invstatus);//入库库存状态 + dynamicObject1.set("tqq9_kclx", invtype);//入库库存类型 + dynamicObject1.set("tqq9_entryid", tqq9_inwarebillentryid);//分录id + } else { + if (map.containsKey(tqq9_inwarebillentryid)) { + ArrayList entry_qty = map.get(tqq9_inwarebillentryid); + entry_qty.add(qty); + map.put(tqq9_inwarebillentryid, entry_qty); + }else{ + ArrayList objects = new ArrayList<>(); + objects.add(qty); + map.put(tqq9_inwarebillentryid, objects); + } + } + } + } + for (Map.Entry> entrySet : map.entrySet()) { + String id = entrySet.getKey(); + ArrayList qtylist = entrySet.getValue(); + ListIterator iterator = tqq9_entryentity.listIterator(); + while (iterator.hasNext()) { + DynamicObject dynamicObject1 = iterator.next(); + String inwarebillentryid = dynamicObject1.getString("tqq9_entryid"); + if (com.alibaba.nacos.common.utils.StringUtils.equals(inwarebillentryid, id)) { + BigDecimal qty2 = dynamicObject1.getBigDecimal("tqq9_rkqty"); + BigDecimal add = qty2; + + for (BigDecimal bigDecimal : qtylist) { + add=add.add(bigDecimal); + } + if (add.compareTo(BigDecimal.ZERO) > 0) { + dynamicObject1.set("tqq9_rkqty", add); + } else { + iterator.remove(); + } + } + } + } + //采购退货申请锁定数量扣减 + if (pm_purrefundapplybill != null) { + for (DynamicObject dynamicObject : pm_purrefundapplybill) { + DynamicObjectCollection billentry = dynamicObject.getDynamicObjectCollection("billentry"); + for (DynamicObject object : billentry) { + BigDecimal returnqty = object.getBigDecimal("returnqty"); + BigDecimal qty = object.getBigDecimal("qty"); + BigDecimal subtract = qty.subtract(returnqty); + if (subtract.compareTo(zero) > 0) { + String id = object.getString("tqq9_inwarebillentryid"); + ListIterator iterator = tqq9_entryentity.listIterator(); + while (iterator.hasNext()) { + DynamicObject dynamicObject1 = iterator.next(); + String inwarebillentryid = dynamicObject1.getString("tqq9_entryid"); + if (com.alibaba.nacos.common.utils.StringUtils.equals(inwarebillentryid, id)) { + BigDecimal qty1 = dynamicObject1.getBigDecimal("tqq9_rkqty"); + BigDecimal subtract1 = qty1.subtract(subtract); + if (subtract1.compareTo(BigDecimal.ZERO) > 0) { + dynamicObject1.set("tqq9_rkqty", subtract1); + } else { + iterator.remove(); + } + } + } + } + } + } + } + //物料 + DataSet materialpurchaseinfoDataSet = QueryServiceHelper.queryDataSet(this.getClass().getName(), + "bd_materialinventoryinfo", + "id as materialinventoryinfo,masterid as material ", + new QFilter[]{}, + null); + //采购入库sql + String purInSql="/*dialect*/select fentryid id,fwarehouseid warehouse,fk_tqq9_goods goods,fmaterialid inventoryinfo,flotnumber lot,fproducedate producedate,fexpirydate expirydate,\n" + + "fk_tqq9_registration registration,fk_tqq9_cksx tqq9_cksx,finvstatusid invstatus,finvtypeid invtype from t_im_purinbillentry where fentryid in("+inWaresId.substring(1)+")"; + logger.info("PuroderBillShareRefundPlugin-采购入库sql"+purInSql); + //即时库存余额表 + String realBalanceSql="/*dialect*/select fid realbalanceId,fwarehouseid warehouse,fk_tqq9_goods goods,fmaterialid material,flotnum lot,fproducedate producedate,fexpirydate expirydate,\n" + + "fk_tqq9_registration registration,fk_tqq9_cksx tqq9_cksx,finvstatusid invstatus,finvtypeid invtype,COALESCE(fqty,0) qty from t_im_inv_realbalance "; + logger.info("PuroderBillShareRefundPlugin-即时库存余额表sql"+realBalanceSql); + //预留记录 + String reserveRecordSql="/*dialect*/select f_bal_id realbalanceId,sum(COALESCE(f_qty,0)) s_qty from t_msmod_reserverecord group by f_bal_id"; + logger.info("PuroderBillShareRefundPlugin-预留记录sql"+reserveRecordSql); + DataSet purInDataSet = DB.queryDataSet(this.getClass().getName(), DBRoute.of("scm"), purInSql); + DataSet realBalanceDataSet = DB.queryDataSet(this.getClass().getName(), DBRoute.of("scm"), realBalanceSql); + DataSet reserveRecordDataSet = DB.queryDataSet(this.getClass().getName(), DBRoute.of("scm"), reserveRecordSql); + purInDataSet=purInDataSet.leftJoin(materialpurchaseinfoDataSet).on("inventoryinfo","materialinventoryinfo").select("id","warehouse","goods","material","lot","producedate","expirydate","registration" + ,"tqq9_cksx","invstatus","invtype").finish() + .leftJoin(realBalanceDataSet).on("warehouse","warehouse").on("goods","goods").on("material","material").on("lot","lot").on("producedate","producedate") + .on("expirydate","expirydate").on("registration","registration").on("tqq9_cksx","tqq9_cksx").on("invstatus","invstatus").on("invtype","invtype") + .select("id","realbalanceId","warehouse","goods","material","lot","producedate","expirydate","registration" + ,"tqq9_cksx","invstatus","invtype","qty").finish() + .leftJoin(reserveRecordDataSet).on("realbalanceId","realbalanceId").select("id","realbalanceId","warehouse","goods","material","lot","producedate","expirydate","registration" + ,"tqq9_cksx","invstatus","invtype","qty","(CASE WHEN qty IS NULL THEN 0 ELSE qty END) - (CASE WHEN s_qty IS NULL THEN 0 ELSE s_qty END) AS totalQty").finish(); + DataSet copy = purInDataSet.copy(); + DynamicObjectCollection dynamicObjects = ORM.create().toPlainDynamicObjectCollection(copy); + HashMap qtyMap=new HashMap<>(); + for (DynamicObject dynamicObject : dynamicObjects) { + String id = dynamicObject.getString("id"); + BigDecimal totalQty = dynamicObject.getBigDecimal("totalQty"); + qtyMap.put(id,totalQty); + } + for (DynamicObject dynamicObject : tqq9_entryentity) { + String tqq9_entryid = dynamicObject.getString("tqq9_entryid"); + BigDecimal totalQty = qtyMap.get(tqq9_entryid); + dynamicObject.set("tqq9_pckyamount",totalQty); + } + SaveServiceHelper.save(new DynamicObject[]{dataEntity}); + this.getView().updateView(); } } } diff --git a/lc123/cloud/app/plugin/operate/im/PurOrderPushPurRefundConverPlugin.java b/lc123/cloud/app/plugin/operate/im/PurOrderPushPurRefundConverPlugin.java index dc1367f..d593adf 100644 --- a/lc123/cloud/app/plugin/operate/im/PurOrderPushPurRefundConverPlugin.java +++ b/lc123/cloud/app/plugin/operate/im/PurOrderPushPurRefundConverPlugin.java @@ -39,6 +39,7 @@ public class PurOrderPushPurRefundConverPlugin extends AbstractConvertPlugIn imp DynamicObjectCollection dynamicObjectCollection = dataEntity.getDynamicObjectCollection("billentry"); DynamicObject[] im_purinblil = null; DynamicObject[] pm_purrefundapplybill = null; + DynamicObject pm_purorderbill = null; for (DynamicObject entry : dynamicObjectCollection) { String mainbillnumber = entry.getString("mainbillnumber"); //采购订单 @@ -52,21 +53,43 @@ public class PurOrderPushPurRefundConverPlugin extends AbstractConvertPlugIn imp "billentry.amount,billentry.curamount,billentry.taxamount,billentry.curtaxamount,billentry.tqq9_cs," + "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,billentry.taxrate,billentry.srcbillnumber,billentry.tqq9_inwarebillentryid,billentry.invtype", new QFilter[]{new QFilter("billentry.mainbillnumber", QCP.equals, mainbillnumber).and("billstatus", QCP.equals, "C")}); + "billentry.tqq9_goods,billentry.tqq9_wmsdetailid,billentry.producedate,billentry.expirydate,creator,createtime,modifier,modifytime,billentry.owner,billentry.taxrate,billentry.srcbillnumber,billentry.tqq9_inwarebillentryid,billentry.invtype,billentry.tqq9_cksx", new QFilter[]{new QFilter("billentry.mainbillnumber", QCP.equals, mainbillnumber).and("billstatus", QCP.equals, "C")}); //采购退货申请单 - pm_purrefundapplybill = BusinessDataServiceHelper.load("pm_purrefundapplybill", "id,name,billno,billentry.material,billentry.qty,billentry.returnqty,billentry.tqq9_inwarebillentryid,tqq9_sourcebillno", new QFilter[]{new QFilter("billentry.mainbillnumber", QCP.equals, mainbillnumber).and("tqq9_sourcebillno", QCP.equals,"")}); + pm_purrefundapplybill = BusinessDataServiceHelper.load("pm_purrefundapplybill", "id,name,billno,billentry.material,billentry.qty,billentry.returnqty,billentry.tqq9_inwarebillentryid,tqq9_sourcebillno", new QFilter[]{new QFilter("billentry.mainbillnumber", QCP.equals, mainbillnumber).and("tqq9_sourcebillno", QCP.equals, "")}); + pm_purorderbill = BusinessDataServiceHelper.loadSingle("pm_purorderbill", new QFilter[]{new QFilter("billno", QCP.equals, mainbillnumber)}); } BigDecimal zero = BigDecimal.ZERO; - if(im_purinblil!=null){ + if (im_purinblil != null) { dynamicObjectCollection.clear(); } + DynamicObjectCollection tqq9_entryentity = pm_purorderbill.getDynamicObjectCollection("tqq9_entryentity"); + HashMap pckyMap = new HashMap(); + for (DynamicObject dynamicObject : tqq9_entryentity) { + String tqq9_entryid = dynamicObject.getString("tqq9_entryid"); + BigDecimal tqq9_pckyamount = dynamicObject.getBigDecimal("tqq9_pckyamount"); + pckyMap.put(tqq9_entryid, tqq9_pckyamount); + + } if (im_purinblil != null) { HashMap> map = new HashMap<>(); for (DynamicObject dynamicObject : im_purinblil) { DynamicObjectCollection billentry = dynamicObject.getDynamicObjectCollection("billentry"); String billid = dynamicObject.getString("id"); for (DynamicObject object : billentry) { + BigDecimal qty = object.getBigDecimal("qty");//数量 + String tqq9_inwarebillentryid =""; + if (qty.compareTo(BigDecimal.ZERO) > 0) { + tqq9_inwarebillentryid = object.getString("id");//入库单分录id + }else{ + tqq9_inwarebillentryid = object.getString("tqq9_inwarebillentryid");//入库单分录id + } + BigDecimal tqq9_pckyamount = BigDecimal.ZERO;//批次可用量 + if (pckyMap.containsKey(tqq9_inwarebillentryid) || qty.compareTo(BigDecimal.ZERO) < 0) { + tqq9_pckyamount = pckyMap.get(tqq9_inwarebillentryid); + } else { + continue; + } String billentryid = object.getString("id"); DynamicObject material = object.getDynamicObject("material");//物料库存信息 DynamicObject masterid = material.getDynamicObject("masterid");//物料信息 @@ -94,7 +117,7 @@ public class PurOrderPushPurRefundConverPlugin extends AbstractConvertPlugIn imp String tqq9_licenseno = object.getString("tqq9_licenseno");//许可证 DynamicObject tqq9_brand = masterid.getDynamicObject("tqq9_brand");//品牌 DynamicObject warehouse = object.getDynamicObject("warehouse");//入库仓库 - BigDecimal qty = object.getBigDecimal("qty");//数量 +// BigDecimal qty = object.getBigDecimal("qty");//数量 Boolean ispresent = object.getBoolean("ispresent");//是否赠品 String ownertype = object.getString("ownertype");//货主类型 DynamicObject owner = object.getDynamicObject("owner");//货主 @@ -123,8 +146,8 @@ public class PurOrderPushPurRefundConverPlugin extends AbstractConvertPlugIn imp Date producedate = object.getDate("producedate");//生产日期 Date expirydate = object.getDate("expirydate");//生产日期 String srcbillnumber = object.getString("srcbillnumber");//来源单据编号(收货单) - String tqq9_inwarebillentryid = object.getString("tqq9_inwarebillentryid");//入库单分录id DynamicObject invtype = object.getDynamicObject("invtype");//入库库存类型 + DynamicObject tqq9_cksx = object.getDynamicObject("tqq9_cksx");//仓库属性 if (qty.compareTo(BigDecimal.ZERO) > 0) { @@ -167,6 +190,7 @@ public class PurOrderPushPurRefundConverPlugin extends AbstractConvertPlugIn imp dynamicObject1.set("tqq9_maxqty", qty); dynamicObject1.set("qty", qty); dynamicObject1.set("baseqty", qty); + dynamicObject1.set("tqq9_pckyamount", tqq9_pckyamount); dynamicObject1.set("ispresent", ispresent); dynamicObject1.set("ownertype", ownertype); dynamicObject1.set("owner", owner); @@ -201,12 +225,13 @@ public class PurOrderPushPurRefundConverPlugin extends AbstractConvertPlugIn imp dynamicObject1.set("tqq9_expiredate", expirydate); dynamicObject1.set("tqq9_shbillno", srcbillnumber); dynamicObject1.set("tqq9_basedatafield1", invtype); + dynamicObject1.set("tqq9_assistantfield", tqq9_cksx); } else { if (map.containsKey(tqq9_inwarebillentryid)) { ArrayList entry_qty = map.get(tqq9_inwarebillentryid); entry_qty.add(qty); map.put(tqq9_inwarebillentryid, entry_qty); - }else{ + } else { ArrayList objects = new ArrayList<>(); objects.add(qty); map.put(tqq9_inwarebillentryid, objects); @@ -226,7 +251,7 @@ public class PurOrderPushPurRefundConverPlugin extends AbstractConvertPlugIn imp BigDecimal add = qty2; for (BigDecimal bigDecimal : qtylist) { - add=add.add(bigDecimal); + add = add.add(bigDecimal); } if (add.compareTo(BigDecimal.ZERO) > 0) { dynamicObject1.set("tqq9_inwarebillentryqty", add);