This commit is contained in:
parent
03b685da79
commit
73de89564e
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue