This commit is contained in:
xuhaihui 2025-09-05 09:36:43 +08:00
parent 03b685da79
commit 73de89564e
1 changed files with 715 additions and 0 deletions

View File

@ -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<Long, List<DynamicObject>> applyBillId_outBill = new HashMap();
Set<Long> 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<DynamicObject> 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<DynamicObject> 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<DynamicObject> 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<DynamicObject> outBillList) {
Map<Long, Integer> 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<Long, DynamicObject> applyEntryId_entry = this.getApplyEntryId_entryByApplyBillEntry(applyBill);
Map<Long, BigDecimal> applyBillEntryId_totalQty = this.getApplyEntryId_totalQtyMapByMergeOutBillEntry(outBillList);
Map<Long, String> 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<Long, DynamicObject> getApplyEntryId_entryByApplyBillEntry(DynamicObject applyBill) {
Map<Long, DynamicObject> 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<Long, BigDecimal> getApplyEntryId_totalQtyMapByMergeOutBillEntry(List<DynamicObject> outBillList) {
Map<Long, BigDecimal> 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<Long, String> getApplyEntryId_outBillNameMap(List<DynamicObject> outBillList) {
Map<Long, String> 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<DynamicObject> outBillList) {
Map<Long, BigDecimal> 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<DynamicObject> outBillList) {
Map<Long, BigDecimal> 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<Long, List<DynamicObject>> applyBillId_outBill = new HashMap();
Set<Long> 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<DynamicObject> 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<Long, List<DynamicObject>> applyBillId_outBill = new HashMap();
Set<Long> 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<DynamicObject> 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<Long> poundIds = new HashSet();
Arrays.stream(dataEntities).filter((dataEntity) -> {
return dataEntity.getBoolean("poundout");
}).forEach((dataEntity) -> {
DynamicObjectCollection entryEntity = dataEntity.getDynamicObjectCollection("entryentity");
if (!CollectionUtils.isEmpty(entryEntity)) {
Set<Long> 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);
}
}
}
}
}