From 73de89564edfac50f66524b873505511d78b8e20 Mon Sep 17 00:00:00 2001 From: xuhaihui <2098865055@qq.com> Date: Fri, 5 Sep 2025 09:36:43 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A0=87=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plugin/operate/MaterialOutBillOpExt.java | 715 ++++++++++++++++++ 1 file changed, 715 insertions(+) create mode 100644 code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/operate/MaterialOutBillOpExt.java diff --git a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/operate/MaterialOutBillOpExt.java b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/operate/MaterialOutBillOpExt.java new file mode 100644 index 0000000..f7ac007 --- /dev/null +++ b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/operate/MaterialOutBillOpExt.java @@ -0,0 +1,715 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by FernFlower decompiler) +// + +package zcgj.zcdev.zcdev.pr.plugin.operate; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Date; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; +import kd.bos.dataentity.entity.DynamicObject; +import kd.bos.dataentity.entity.DynamicObjectCollection; +import kd.bos.dataentity.resource.ResManager; +import kd.bos.dataentity.utils.ArrayUtils; +import kd.bos.dataentity.utils.StringUtils; +import kd.bos.entity.plugin.AbstractOperationServicePlugIn; +import kd.bos.entity.plugin.AddValidatorsEventArgs; +import kd.bos.entity.plugin.PreparePropertysEventArgs; +import kd.bos.entity.plugin.args.BeforeOperationArgs; +import kd.bos.entity.plugin.args.BeginOperationTransactionArgs; +import kd.bos.entity.plugin.args.EndOperationTransactionArgs; +import kd.bos.entity.validate.ErrorLevel; +import kd.bos.entity.validate.ValidationErrorInfo; +import kd.bos.exception.KDBizException; +import kd.bos.orm.query.QFilter; +import kd.bos.servicehelper.BusinessDataServiceHelper; +import kd.bos.servicehelper.operation.SaveServiceHelper; +import kd.ec.basedata.business.model.ecma.MaterialOutBillConstant; +import kd.ec.basedata.business.model.ecma.PoundConstant; +import kd.ec.basedata.common.utils.CurrencyHelper; +import kd.ec.material.common.utils.MaterialInventoryUtils; +import kd.ec.material.opplugin.validator.InvAdjustBillExistValidator; +import kd.ec.material.opplugin.validator.MaterialOutBillValidator; +import org.apache.commons.collections4.CollectionUtils; + +public class MaterialOutBillOpExt extends AbstractOperationServicePlugIn { + public MaterialOutBillOpExt() { + } + + public void onPreparePropertys(PreparePropertysEventArgs e) { + e.getFieldKeys().add(MaterialOutBillConstant.ID_ENTITY_PK); + e.getFieldKeys().add("billname"); + e.getFieldKeys().add("billno"); + e.getFieldKeys().add("transtype"); + e.getFieldKeys().add("project"); + e.getFieldKeys().add("warehouse"); + e.getFieldKeys().add("labour"); + e.getFieldKeys().add("reqpersonname"); + e.getFieldKeys().add("requestperson"); + e.getFieldKeys().add("entryentity"); + e.getFieldKeys().add("amount"); + e.getFieldKeys().add("lot"); + e.getFieldKeys().add("material"); + e.getFieldKeys().add("measureunit"); + e.getFieldKeys().add("modelnum"); + e.getFieldKeys().add("price"); + e.getFieldKeys().add("qty"); + e.getFieldKeys().add("amount"); + e.getFieldKeys().add("ismulticurrency"); + e.getFieldKeys().add("exchangerate"); + e.getFieldKeys().add("currency"); + e.getFieldKeys().add("stdcurrency"); + e.getFieldKeys().add("exratetable"); + e.getFieldKeys().add("exchangedate"); + e.getFieldKeys().add("unitproject"); + e.getFieldKeys().add("contract"); + e.getFieldKeys().add("costtype"); + e.getFieldKeys().add("applybill"); + e.getFieldKeys().add("applyentryid"); + e.getFieldKeys().add("poundout"); + e.getFieldKeys().add("poundid"); + e.getFieldKeys().add("unitprojectpro"); + } + + public void onAddValidators(AddValidatorsEventArgs e) { + super.onAddValidators(e); + e.addValidator(new MaterialOutBillValidator()); + e.addValidator(new InvAdjustBillExistValidator()); + } + + public void beforeExecuteOperationTransaction(BeforeOperationArgs e) { + super.beforeExecuteOperationTransaction(e); + String operationKey = e.getOperationKey(); + DynamicObject[] dataEntities = e.getDataEntities(); + switch (operationKey) { + case "unaudit": + default: + } + } + + public void endOperationTransaction(EndOperationTransactionArgs e) { + super.endOperationTransaction(e); + String operationKey = e.getOperationKey(); + DynamicObject[] dataEntities = e.getDataEntities(); + int i; + DynamicObject obj; + String orgId; + DynamicObject warehouse; + String warehouseId; + DynamicObject projectobj; + String projectId; + DynamicObjectCollection entryCol; + DynamicObject transType; + String type; + boolean ismulticurrency; + BigDecimal exchangerate; + DynamicObject stdCurrency; + DynamicObject orgCurrency; + DynamicObject currency; + DynamicObject exratetable; + Date exchangedate; + BigDecimal rate; + switch (operationKey) { + case "audit": + for(i = 0; i < dataEntities.length; ++i) { + obj = dataEntities[i]; + orgId = obj.getDynamicObject("org").getString("id"); + warehouse = obj.getDynamicObject("warehouse"); + warehouseId = warehouse.getString("id"); + projectobj = warehouse.getDynamicObject("project"); + projectId = projectobj == null ? "0" : projectobj.getString("id"); + entryCol = obj.getDynamicObjectCollection("entryentity"); + transType = obj.getDynamicObject("transtype"); + type = transType.getString("type"); + ismulticurrency = obj.getBoolean("ismulticurrency"); + exchangerate = BigDecimal.ONE; + if (ismulticurrency) { + stdCurrency = obj.getDynamicObject("stdcurrency"); + orgCurrency = CurrencyHelper.getCurrency(Long.valueOf(orgId)); + if (orgCurrency.getPkValue().equals(stdCurrency.getPkValue())) { + exchangerate = obj.getBigDecimal("exchangerate"); + } else { + currency = obj.getDynamicObject("currency"); + exratetable = obj.getDynamicObject("exratetable"); + exchangedate = obj.getDate("exchangedate"); + if (currency != null && exratetable != null && exchangedate != null) { + rate = CurrencyHelper.getExChangeRate(currency.getLong("id"), orgCurrency.getLong("id"), exratetable.getLong("id"), exchangedate); + if (rate != null) { + exchangerate = rate; + } + } + } + } + + if ("INCREASE".equals(type)) { + MaterialInventoryUtils.matBalanceUpdate(orgId, projectId, warehouseId, (DynamicObject[])entryCol.toArray(new DynamicObject[entryCol.size()]), true, exchangerate); + } else if ("REDUCE".equals(type)) { + MaterialInventoryUtils.matBalanceLockAndUpdate(orgId, projectId, warehouseId, (DynamicObject[])entryCol.toArray(new DynamicObject[entryCol.size()]), false, exchangerate, false); + } + } + + return; + case "unaudit": + for(i = 0; i < dataEntities.length; ++i) { + obj = dataEntities[i]; + orgId = obj.getDynamicObject("org").getString("id"); + warehouse = obj.getDynamicObject("warehouse"); + warehouseId = warehouse.getString("id"); + projectobj = warehouse.getDynamicObject("project"); + projectId = projectobj == null ? "0" : projectobj.getString("id"); + entryCol = obj.getDynamicObjectCollection("entryentity"); + transType = obj.getDynamicObject("transtype"); + type = transType.getString("type"); + ismulticurrency = obj.getBoolean("ismulticurrency"); + exchangerate = BigDecimal.ONE; + if (ismulticurrency) { + stdCurrency = obj.getDynamicObject("stdcurrency"); + orgCurrency = CurrencyHelper.getCurrency(Long.valueOf(orgId)); + if (orgCurrency.getPkValue().equals(stdCurrency.getPkValue())) { + exchangerate = obj.getBigDecimal("exchangerate"); + } else { + currency = obj.getDynamicObject("currency"); + exratetable = obj.getDynamicObject("exratetable"); + exchangedate = obj.getDate("exchangedate"); + if (currency != null && exratetable != null && exchangedate != null) { + rate = CurrencyHelper.getExChangeRate(currency.getLong("id"), orgCurrency.getLong("id"), exratetable.getLong("id"), exchangedate); + if (rate != null) { + exchangerate = rate; + } + } + } + } + + if ("INCREASE".equals(type)) { + MaterialInventoryUtils.matBalanceUpdate(orgId, projectId, warehouseId, (DynamicObject[])entryCol.toArray(new DynamicObject[entryCol.size()]), false, exchangerate); + } else if ("REDUCE".equals(type)) { + MaterialInventoryUtils.matBalanceUpdate(orgId, projectId, warehouseId, (DynamicObject[])entryCol.toArray(new DynamicObject[entryCol.size()]), true, exchangerate); + } + } + } + + } + + public void beginOperationTransaction(BeginOperationTransactionArgs e) { + super.beginOperationTransaction(e); + String operationKey = e.getOperationKey(); + DynamicObject[] dataEntities = e.getDataEntities(); + ArrayList succObjs; + int i; + DynamicObject obj; +// String projectId;//注释掉系统标准代码 + String projectId; + String requestPersonName; + String team; + String orgId; + DynamicObject warehouse; + String warehouseId; + DynamicObject projectobj; + DynamicObjectCollection entryCol; + DynamicObject transType; + String type; + switch (operationKey) { + case "submit": + this.checkApplyQtyAndRestQty(dataEntities); + this.rewritePoundBills(dataEntities, false); + succObjs = new ArrayList(); + + for(i = 0; i < dataEntities.length; ++i) { + obj = dataEntities[i]; + orgId = obj.getDynamicObject("org").getString("id"); + warehouse = obj.getDynamicObject("warehouse"); + warehouseId = warehouse.getString("id"); + projectobj = warehouse.getDynamicObject("project"); + projectId = projectobj == null ? "0" : projectobj.getString("id"); + String billNumber = obj.getString("billno"); + QFilter qFilter = new QFilter("billno", "=", billNumber); + qFilter.and(new QFilter("matbilltype", "=", "materialout")); + qFilter.and(new QFilter("billstatus", "in", new String[]{"B", "C"})); + DynamicObject[] materialOutBills = BusinessDataServiceHelper.load("ecma_materialoutbill", "billno,matbilltype", new QFilter[]{qFilter}); + if (materialOutBills != null && materialOutBills.length > 0) { + projectId = String.format(ResManager.loadKDString("单据编码%s重复,请重新输入单据编码!", "MaterialOutBillOp_0", "ec-ecma-opplugin", new Object[0]), billNumber); + throw new KDBizException(projectId); + } + + DynamicObject labour = obj.getDynamicObject("labour"); + DynamicObject contract = obj.getDynamicObject("contract"); + String costType = obj.getString("costtype"); + if (StringUtils.equals(costType, "b") && labour == null) { + throw new KDBizException(String.format(ResManager.loadKDString("%s:请填写“劳务班组”。", "MaterialOutBillOp_1", "ec-ecma-opplugin", new Object[0]), billNumber)); + } + + if (StringUtils.equals(costType, "b") && contract == null) { + throw new KDBizException(String.format(ResManager.loadKDString("%s:请填写“合同编号”。", "MaterialOutBillOp_2", "ec-ecma-opplugin", new Object[0]), billNumber)); + } + + DynamicObject requestPersonF7 = obj.getDynamicObject("requestperson"); + requestPersonName = obj.getString("reqpersonname"); + if (labour == null) { + if (requestPersonF7 == null) { + team = String.format(ResManager.loadKDString("%s:请填写“领料人”", "MaterialOutBillOp_3", "ec-ecma-opplugin", new Object[0]), billNumber); + throw new KDBizException(team); + } + } else { + team = labour.getString("team"); + String errMsg; + if ("01".equals(team)) { + if (requestPersonF7 == null) { + errMsg = String.format(ResManager.loadKDString("%s:请填写“领料人”", "MaterialOutBillOp_3", "ec-ecma-opplugin", new Object[0]), billNumber); + throw new KDBizException(errMsg); + } + } else if ("02".equals(team) && (requestPersonName == null || "".equals(requestPersonName))) { + errMsg = String.format(ResManager.loadKDString("%s:请填写“领料人”", "MaterialOutBillOp_3", "ec-ecma-opplugin", new Object[0]), billNumber); + throw new KDBizException(errMsg); + } + } + +/* DynamicObjectCollection entryCol = obj.getDynamicObjectCollection("entryentity"); + DynamicObject transType = obj.getDynamicObject("transtype"); + String type = transType.getString("type");*///注释掉系统标准代码 + entryCol = obj.getDynamicObjectCollection("entryentity");//二开修改 + transType = obj.getDynamicObject("transtype");//二开修改 + type = transType.getString("type");//二开修改 + if ("REDUCE".equals(type)) { + String msg1 = MaterialInventoryUtils.checkMatAsOut(orgId, projectId, warehouseId, (DynamicObject[])entryCol.toArray(new DynamicObject[entryCol.size()])); + if (!"success".equals(msg1)) { + throw new KDBizException(msg1); + } + + String msg2 = MaterialInventoryUtils.matBalanceLocked(orgId, projectId, warehouseId, (DynamicObject[])entryCol.toArray(new DynamicObject[entryCol.size()]), true); + if (!"success".equals(msg2)) { + throw new KDBizException(msg2); + } + } + + succObjs.add(obj); + } + + e.setDataEntities((DynamicObject[])succObjs.toArray(new DynamicObject[succObjs.size()])); + break; + case "unsubmit": + succObjs = new ArrayList(); + this.rewritePoundBills(dataEntities, true); + + for(i = 0; i < dataEntities.length; ++i) { + obj = dataEntities[i]; + orgId = obj.getDynamicObject("org").getString("id"); + warehouse = obj.getDynamicObject("warehouse"); + warehouseId = warehouse.getString("id"); + projectobj = warehouse.getDynamicObject("project"); + projectId = projectobj == null ? "0" : projectobj.getString("id"); + entryCol = obj.getDynamicObjectCollection("entryentity"); + transType = obj.getDynamicObject("transtype"); + type = transType.getString("type"); + if ("REDUCE".equals(type)) { + projectId = MaterialInventoryUtils.matBalanceLocked(orgId, projectId, warehouseId, (DynamicObject[])entryCol.toArray(new DynamicObject[entryCol.size()]), false); + if (!"success".equals(projectId)) { + throw new KDBizException(projectId); + } + } + + succObjs.add(obj); + } + + e.setDataEntities((DynamicObject[])succObjs.toArray(new DynamicObject[succObjs.size()])); + break; + case "audit": + succObjs = new ArrayList(); + + for(i = 0; i < dataEntities.length; ++i) { + obj = dataEntities[i]; + orgId = obj.getDynamicObject("org").getString("id"); + warehouse = obj.getDynamicObject("warehouse"); + warehouseId = warehouse.getString("id"); + projectobj = warehouse.getDynamicObject("project"); + projectId = projectobj == null ? "0" : projectobj.getString("id"); + entryCol = obj.getDynamicObjectCollection("entryentity"); + transType = obj.getDynamicObject("transtype"); + type = transType.getString("type"); + if ("REDUCE".equals(type)) { + projectId = MaterialInventoryUtils.checkInventoryQty(orgId, projectId, warehouseId, (DynamicObject[])entryCol.toArray(new DynamicObject[entryCol.size()])); + if (!"success".equals(projectId)) { + throw new KDBizException(projectId); + } + } + + succObjs.add(obj); + } + + this.auditWriteBack(dataEntities); + e.setDataEntities((DynamicObject[])succObjs.toArray(new DynamicObject[succObjs.size()])); + break; + case "unaudit": + succObjs = new ArrayList(); + this.rewritePoundBills(dataEntities, true); + + for(i = 0; i < dataEntities.length; ++i) { + obj = dataEntities[i]; + Object[] objects = obj.getDynamicObjectCollection("entryentity").stream().map((entry) -> { + return entry.getPkValue(); + }).toArray(); + QFilter entryIdFilter = new QFilter("entryentity.materialentryid", "in", objects); + DynamicObject[] maincostEntry = BusinessDataServiceHelper.load("ecco_mainmatcost", "id,billno,entryentity,entryentity.materialentryid", new QFilter[]{entryIdFilter}); + if (maincostEntry.length > 0) { + String errMsg = String.format(ResManager.loadKDString("单据名称:%1$s,单据编号:%2$s的分录已被主要材料分摊单分录引用,无法反审核!", "MaterialOutBillOp_4", "ec-ecma-opplugin", new Object[0]), obj.getString("billname"), obj.getString("billno")); + throw new KDBizException(errMsg); + } + + DynamicObject[] sporadicEntry = BusinessDataServiceHelper.load("ecco_sporadicmatcost", "id,billno,entryentity,entryentity.materialentryid", new QFilter[]{entryIdFilter}); + if (sporadicEntry.length > 0) { + projectId = String.format(ResManager.loadKDString("单据名称:%1$s,单据编号:%2$s的分录已被零星材料分摊单分录引用,无法反审核!", "MaterialOutBillOp_5", "ec-ecma-opplugin", new Object[0]), obj.getString("billname"), obj.getString("billno")); + throw new KDBizException(projectId); + } + + projectId = obj.getDynamicObject("org").getString("id"); +/* DynamicObject warehouse = obj.getDynamicObject("warehouse"); + String warehouseId = warehouse.getString("id"); + DynamicObject projectobj = warehouse.getDynamicObject("project");*///注释掉系统标准代码 + warehouse = obj.getDynamicObject("warehouse");//二开修改 + warehouseId = warehouse.getString("id");//二开修改 + projectobj = warehouse.getDynamicObject("project");//二开修改 + projectId = projectobj == null ? "0" : projectobj.getString("id"); +/* DynamicObjectCollection entryCol = obj.getDynamicObjectCollection("entryentity"); + DynamicObject transType = obj.getDynamicObject("transtype"); + String type = transType.getString("type"); */ //注释掉系统标准代码 + entryCol = obj.getDynamicObjectCollection("entryentity");//二开修改 + transType = obj.getDynamicObject("transtype");//二开修改 + type = transType.getString("type");//二开修改 + if ("INCREASE".equals(type)) { + requestPersonName = MaterialInventoryUtils.checkMatAsOut(projectId, projectId, warehouseId, (DynamicObject[])entryCol.toArray(new DynamicObject[entryCol.size()])); + if (!"success".equals(requestPersonName)) { + team = String.format(ResManager.loadKDString("反审核失败,反审核后%s负库存!", "MaterialOutBillOp_6", "ec-ecma-opplugin", new Object[0]), requestPersonName.substring(0, requestPersonName.length() - 3)); + throw new KDBizException(team); + } + } + + succObjs.add(obj); + } + + this.unAuditWriteBack(dataEntities); + e.setDataEntities((DynamicObject[])succObjs.toArray(new DynamicObject[succObjs.size()])); + } + + } + + private void addErrMessage(DynamicObject obj, String errMsg, int dataIndex) { + Object pkId = obj.getPkValue(); + int rowIndex = 0; + ErrorLevel errorLevel = ErrorLevel.FatalError; + ValidationErrorInfo errInfo = new ValidationErrorInfo("", pkId, dataIndex, rowIndex, "Error ", ResManager.loadKDString("库存检查", "MaterialOutBillOp_7", "ec-ecma-opplugin", new Object[0]), errMsg, errorLevel); + this.operationResult.addErrorInfo(errInfo); + } + + private void checkApplyQtyAndRestQty(DynamicObject[] dataEntities) { + Map> applyBillId_outBill = new HashMap(); + Set applyBillIdSet = new HashSet(); + DynamicObject[] var4 = dataEntities; + int var5 = dataEntities.length; + + for(int var6 = 0; var6 < var5; ++var6) { + DynamicObject item = var4[var6]; + DynamicObject applyBill = item.getDynamicObject("applybill"); + if (applyBill != null) { + Long applyBillId = (Long)applyBill.getPkValue(); + applyBillIdSet.add(applyBillId); + List outBillList = (List)applyBillId_outBill.get(applyBillId); + if (outBillList == null) { + outBillList = new ArrayList(); + } + + ((List)outBillList).add(item); + applyBillId_outBill.put(applyBillId, outBillList); + } + } + + QFilter idFilter = new QFilter("id", "in", applyBillIdSet); + DynamicObject[] applyBillArr = BusinessDataServiceHelper.load("ecma_materialapplybill", "billno,billname,entryentity,entryentity.listingid,entryentity.material,entryentity.restqty", new QFilter[]{idFilter}); + QFilter applyFilter = new QFilter("applybill", "in", applyBillIdSet); + QFilter statusFilter = new QFilter("billstatus", "=", "B"); + DynamicObject[] outBillArr = BusinessDataServiceHelper.load("ecma_materialoutbill", "billno,billname,applybill,entryentity,entryentity.applyentryid,entryentity.qty", new QFilter[]{applyFilter, statusFilter}); + DynamicObject[] var21 = outBillArr; + int var23 = outBillArr.length; + + int var11; + DynamicObject applyBill; + for(var11 = 0; var11 < var23; ++var11) { + DynamicObject item = var21[var11]; + applyBill = item.getDynamicObject("applybill"); + if (applyBill != null) { + Long applyBillId = (Long)applyBill.getPkValue(); + applyBillIdSet.add(applyBillId); + List outBillList = (List)applyBillId_outBill.get(applyBillId); + outBillList.add(item); + applyBillId_outBill.put(applyBillId, outBillList); + } + } + + StringBuffer tipsStringBuffer = new StringBuffer(); + DynamicObject[] var24 = applyBillArr; + var11 = applyBillArr.length; + + for(int var26 = 0; var26 < var11; ++var26) { + applyBill = var24[var26]; + List outBillList = (List)applyBillId_outBill.get(applyBill.getPkValue()); + String tip = this.compareApplyBillEntryAndSomeOutBillEntry(applyBill, outBillList); + tipsStringBuffer.append(tip); + } + + String tips = tipsStringBuffer.toString(); + if (StringUtils.isNotEmpty(tips)) { + throw new KDBizException(tips); + } + } + + private String compareApplyBillEntryAndSomeOutBillEntry(DynamicObject applyBill, List outBillList) { + Map applyEntryScaleMap = new HashMap(); + Iterator var4 = applyBill.getDynamicObjectCollection("entryentity").iterator(); + + while(var4.hasNext()) { + DynamicObject dy = (DynamicObject)var4.next(); + applyEntryScaleMap.put(dy.getLong("id"), dy.getDynamicObject("material").getDynamicObject("measureunit").getInt("precision")); + } + + Map applyEntryId_entry = this.getApplyEntryId_entryByApplyBillEntry(applyBill); + Map applyBillEntryId_totalQty = this.getApplyEntryId_totalQtyMapByMergeOutBillEntry(outBillList); + Map applyEntryId_outBillString = this.getApplyEntryId_outBillNameMap(outBillList); + String applyBillString = "【" + applyBill.getString("billno") + " " + applyBill.getString("billname") + "】"; + StringBuffer tipsStringBuffer = new StringBuffer(); + Iterator var9 = applyBillEntryId_totalQty.keySet().iterator(); + + while(var9.hasNext()) { + Long key = (Long)var9.next(); + BigDecimal totalQty = (BigDecimal)applyBillEntryId_totalQty.get(key); + Integer scale = (Integer)applyEntryScaleMap.get(key); + DynamicObject entry = (DynamicObject)applyEntryId_entry.get(key); + if (entry != null) { + BigDecimal restQty = entry.getBigDecimal("restqty"); + String materialNameString = ((DynamicObject)applyEntryId_entry.get(key)).getDynamicObject("material").getString("name"); + if (totalQty.compareTo(restQty) > 0) { + String outBillString = (String)applyEntryId_outBillString.get(key); + if (restQty.compareTo(BigDecimal.ZERO) == 0) { + restQty = BigDecimal.ZERO; + } + + String tip = String.format(ResManager.loadKDString("领料申请单%1$s中物料 %2$s 在对应的出库单%3$s数量之和超过领料申请单剩余数量,数量之和为%4$s,领料申请单剩余数量为%5$s;\n", "MaterialOutBillOp_8", "ec-ecma-opplugin", new Object[0]), applyBillString, materialNameString, outBillString, totalQty.setScale(scale), restQty.setScale(scale)); + tipsStringBuffer.append(tip); + } + } + } + + return tipsStringBuffer.toString(); + } + + private Map getApplyEntryId_entryByApplyBillEntry(DynamicObject applyBill) { + Map applyEntryId_restQty = new HashMap(); + DynamicObjectCollection entries = applyBill.getDynamicObjectCollection("entryentity"); + Iterator var4 = entries.iterator(); + + while(var4.hasNext()) { + DynamicObject item = (DynamicObject)var4.next(); + Long id = (Long)item.getPkValue(); + applyEntryId_restQty.put(id, item); + } + + return applyEntryId_restQty; + } + + private Map getApplyEntryId_totalQtyMapByMergeOutBillEntry(List outBillList) { + Map applyBillEntryId_totalQty = new HashMap(); + Iterator var3 = outBillList.iterator(); + + while(var3.hasNext()) { + DynamicObject outBill = (DynamicObject)var3.next(); + DynamicObjectCollection entries = outBill.getDynamicObjectCollection("entryentity"); + Iterator var6 = entries.iterator(); + + while(var6.hasNext()) { + DynamicObject item = (DynamicObject)var6.next(); + Long applyBillEntryId = item.getLong("applyentryid"); + BigDecimal qty = item.getBigDecimal("qty"); + BigDecimal totalQty = (BigDecimal)applyBillEntryId_totalQty.getOrDefault(applyBillEntryId, BigDecimal.ZERO); + totalQty = totalQty.add(qty); + applyBillEntryId_totalQty.put(applyBillEntryId, totalQty); + } + } + + return applyBillEntryId_totalQty; + } + + private Map getApplyEntryId_outBillNameMap(List outBillList) { + Map applyBillEntryId_outBillName = new HashMap(); + Iterator var3 = outBillList.iterator(); + + while(var3.hasNext()) { + DynamicObject outBill = (DynamicObject)var3.next(); + String billNo = outBill.getString("billno"); + String billName = outBill.getString("billname"); + DynamicObjectCollection entries = outBill.getDynamicObjectCollection("entryentity"); + Iterator var8 = entries.iterator(); + + while(var8.hasNext()) { + DynamicObject item = (DynamicObject)var8.next(); + Long applyBillEntryId = item.getLong("applyentryid"); + String billString = (String)applyBillEntryId_outBillName.getOrDefault(applyBillEntryId, "") + "【" + billNo + " " + billName + "】"; + applyBillEntryId_outBillName.put(applyBillEntryId, billString); + } + } + + return applyBillEntryId_outBillName; + } + + private void auditWriteBackForApplyBill(DynamicObject applyBill, List outBillList) { + Map applyBillEntryId_totalQty = this.getApplyEntryId_totalQtyMapByMergeOutBillEntry(outBillList); + DynamicObjectCollection entries = applyBill.getDynamicObjectCollection("entryentity"); + Boolean flag = true; + Iterator var6 = entries.iterator(); + + while(var6.hasNext()) { + DynamicObject item = (DynamicObject)var6.next(); + BigDecimal restQty = item.getBigDecimal("restqty"); + BigDecimal totalQty = (BigDecimal)applyBillEntryId_totalQty.getOrDefault(item.getPkValue(), BigDecimal.ZERO); + BigDecimal realOutQty = item.getBigDecimal("realoutqty"); + if (totalQty.compareTo(BigDecimal.ZERO) != 0) { + realOutQty = realOutQty.add(totalQty); + restQty = restQty.subtract(totalQty); + item.set("realoutqty", realOutQty); + item.set("restqty", restQty); + if (restQty.compareTo(BigDecimal.ZERO) != 0) { + flag = false; + } + } + } + + if (flag) { + applyBill.set("materialout", 1); + } + + } + + private void unAuditWriteBackForApplyBill(DynamicObject applyBill, List outBillList) { + Map applyBillEntryId_totalQty = this.getApplyEntryId_totalQtyMapByMergeOutBillEntry(outBillList); + DynamicObjectCollection entries = applyBill.getDynamicObjectCollection("entryentity"); + Iterator var5 = entries.iterator(); + + while(var5.hasNext()) { + DynamicObject item = (DynamicObject)var5.next(); + BigDecimal restQty = item.getBigDecimal("restqty"); + BigDecimal totalQty = (BigDecimal)applyBillEntryId_totalQty.getOrDefault(item.getPkValue(), BigDecimal.ZERO); + BigDecimal realOutQty = item.getBigDecimal("realoutqty"); + if (totalQty.compareTo(BigDecimal.ZERO) != 0) { + realOutQty = realOutQty.subtract(totalQty); + restQty = restQty.add(totalQty); + item.set("realoutqty", realOutQty); + item.set("restqty", restQty); + } + } + + applyBill.set("materialout", 0); + } + + private void auditWriteBack(DynamicObject[] dataEntities) { + Map> applyBillId_outBill = new HashMap(); + Set applyBillIdSet = new HashSet(); + DynamicObject[] var4 = dataEntities; + int var5 = dataEntities.length; + + for(int var6 = 0; var6 < var5; ++var6) { + DynamicObject item = var4[var6]; + DynamicObject applyBill = item.getDynamicObject("applybill"); + if (applyBill != null) { + Long applyBillId = (Long)applyBill.getPkValue(); + applyBillIdSet.add(applyBillId); + List outBillList = (List)applyBillId_outBill.get(applyBillId); + if (outBillList == null) { + outBillList = new ArrayList(); + } + + ((List)outBillList).add(item); + applyBillId_outBill.put(applyBillId, outBillList); + } + } + + QFilter idFilter = new QFilter("id", "in", applyBillIdSet); + DynamicObject[] applyBillArr = BusinessDataServiceHelper.load("ecma_materialapplybill", "billno,billname,materialout,entryentity,entryentity.listingid,entryentity.material,entryentity.restqty,entryentity.realoutqty", new QFilter[]{idFilter}); + DynamicObject[] var13 = applyBillArr; + int var14 = applyBillArr.length; + + for(int var15 = 0; var15 < var14; ++var15) { + DynamicObject item = var13[var15]; + this.auditWriteBackForApplyBill(item, (List)applyBillId_outBill.get(item.getPkValue())); + } + + SaveServiceHelper.save(applyBillArr); + } + + private void unAuditWriteBack(DynamicObject[] dataEntities) { + Map> applyBillId_outBill = new HashMap(); + Set applyBillIdSet = new HashSet(); + DynamicObject[] var4 = dataEntities; + int var5 = dataEntities.length; + + for(int var6 = 0; var6 < var5; ++var6) { + DynamicObject item = var4[var6]; + DynamicObject applyBill = item.getDynamicObject("applybill"); + if (applyBill != null) { + Long applyBillId = (Long)applyBill.getPkValue(); + applyBillIdSet.add(applyBillId); + List outBillList = (List)applyBillId_outBill.get(applyBillId); + if (outBillList == null) { + outBillList = new ArrayList(); + } + + ((List)outBillList).add(item); + applyBillId_outBill.put(applyBillId, outBillList); + } + } + + QFilter idFilter = new QFilter("id", "in", applyBillIdSet); + DynamicObject[] applyBillArr = BusinessDataServiceHelper.load("ecma_materialapplybill", "billno,billname,materialout,entryentity,entryentity.listingid,entryentity.material,entryentity.restqty,entryentity.realoutqty", new QFilter[]{idFilter}); + DynamicObject[] var13 = applyBillArr; + int var14 = applyBillArr.length; + + for(int var15 = 0; var15 < var14; ++var15) { + DynamicObject item = var13[var15]; + this.unAuditWriteBackForApplyBill(item, (List)applyBillId_outBill.get(item.getPkValue())); + } + + SaveServiceHelper.save(applyBillArr); + } + + protected void rewritePoundBills(DynamicObject[] dataEntities, boolean revoke) { + if (!ArrayUtils.isEmpty(dataEntities)) { + Set poundIds = new HashSet(); + Arrays.stream(dataEntities).filter((dataEntity) -> { + return dataEntity.getBoolean("poundout"); + }).forEach((dataEntity) -> { + DynamicObjectCollection entryEntity = dataEntity.getDynamicObjectCollection("entryentity"); + if (!CollectionUtils.isEmpty(entryEntity)) { + Set entryPoundIds = (Set)entryEntity.stream().map((dynamicObject) -> { + return dynamicObject.getLong("poundid"); + }).collect(Collectors.toSet()); + poundIds.addAll(entryPoundIds); + } + }); + if (!CollectionUtils.isEmpty(poundIds)) { + QFilter poundPkIdFilter = new QFilter(PoundConstant.ID_ENTITY_PK, "in", poundIds); + DynamicObject[] poundEntities = BusinessDataServiceHelper.load("ecma_poundbill", "depotstatus,opt_type", new QFilter[]{poundPkIdFilter}); + if (!ArrayUtils.isEmpty(poundEntities)) { + Arrays.stream(poundEntities).forEach((poundEntity) -> { + poundEntity.set("depotstatus", !revoke); + poundEntity.set("opt_type", "0"); + }); + SaveServiceHelper.save(poundEntities); + } + } + } + } +}