feat:处理合同明细信息中已下单数量,未下单数量,已发运数量,未发运数量 错误数据

This commit is contained in:
zzs 2025-02-22 18:07:52 +08:00
parent b2c412e4d8
commit 35f2c7a4c0

View File

@ -0,0 +1,118 @@
package com.yem.wm.es.salesorder.task;
import com.yem.wm.utils.RptUtil;
import kd.bos.algo.DataSet;
import kd.bos.context.RequestContext;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.exception.KDException;
import kd.bos.logging.Log;
import kd.bos.logging.LogFactory;
import kd.bos.orm.ORM;
import kd.bos.orm.query.QFilter;
import kd.bos.schedule.executor.AbstractTask;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.bos.servicehelper.operation.SaveServiceHelper;
import java.math.BigDecimal;
import java.util.*;
/**
* @Description: 处理合同明细信息中已下单数量未下单数量已发运数量未发运数量 错误数据
* @Date: 2025/2/22 16:39
* @Created: by ZZSLL
*/
public class FixOrderQtyTask extends AbstractTask {
private static final Log log = LogFactory.getLog(FixOrderQtyTask.class);
private final String algoKey = this.getClass().getName();
@Override
public void execute(RequestContext requestContext, Map<String, Object> map) throws KDException {
log.info(String.valueOf(System.currentTimeMillis()));
DynamicObject[] salesOrder = BusinessDataServiceHelper.load("yem_es_salesorder", "id", null);
Set<Long> set = new HashSet<>();
for (DynamicObject object : salesOrder) {
set.add(object.getLong("id"));
}
salesOrder = BusinessDataServiceHelper.load(set.toArray(), BusinessDataServiceHelper.newDynamicObject("yem_es_salesorder").getDynamicObjectType());
Map<Long, BigDecimal> orderQtyCache = new HashMap<>();//商品明细id已下单数量
for (DynamicObject order : salesOrder) {
DynamicObjectCollection shipEntry = order.getDynamicObjectCollection("yem_shippingplan_entry");
for (DynamicObject object : shipEntry) {
DynamicObjectCollection shipEntryDetail = object.getDynamicObjectCollection("yem_plandetail_entry");
for (DynamicObject subObj : shipEntryDetail) {
Long srcentryid = subObj.getLong("yem_srcentryid");
BigDecimal orderedQty = subObj.getBigDecimal("yem_qty2");
if (orderQtyCache.containsKey(srcentryid)) {
BigDecimal qty = orderQtyCache.get(srcentryid);
qty = qty.add(orderedQty);
orderQtyCache.put(srcentryid, qty);
} else {
orderQtyCache.put(srcentryid, orderedQty);
}
}
}
}
List<String> orderFields = new ArrayList<>();
orderFields.add("id order_id");
orderFields.add("billno order_billno");
orderFields.add("yem_es_materialinfo.id order_detail_id");
DataSet orderDataSet = ORM.create().queryDataSet(algoKey, "yem_es_salesorder", String.join(",", orderFields), new QFilter[]{new QFilter("yem_es_materialinfo.id", "in", orderQtyCache.keySet())});
List<String> shipFields = new ArrayList<>();
shipFields.add("id ship_id");
shipFields.add("yem_es_materialinfo.id ship_entry_id");
shipFields.add("yem_es_materialinfo.yem_qty ship_qty");
shipFields.add("yem_es_materialinfo.yem_sourceentryid source_order_entry_id");
DataSet shipDataSet = ORM.create().queryDataSet(algoKey, "yem_shippingdetails", String.join(",", shipFields), new QFilter[]{new QFilter("yem_es_materialinfo.yem_sourceentryid", "in", orderQtyCache.keySet())});
shipDataSet = shipDataSet.groupBy(new String[]{"source_order_entry_id"}).sum("ship_qty", "ship_qty").finish();
shipDataSet = RptUtil.zeroNullNums(shipDataSet);
DataSet dataSet = orderDataSet.leftJoin(shipDataSet)
.on("order_detail_id", "source_order_entry_id")
.select(RptUtil.getDataSetFiledAlias(orderDataSet), RptUtil.getDataSetFiledAlias(shipDataSet))
.finish();
dataSet = RptUtil.zeroNullNums(dataSet);
Map<Long, BigDecimal> shipQtyCache = new HashMap<>();//商品明细id已发运数量
DynamicObjectCollection joinSet = ORM.create().toPlainDynamicObjectCollection(dataSet);
for (DynamicObject o : joinSet) {
Long id = o.getLong("order_detail_id");
BigDecimal shipQty = o.getBigDecimal("ship_qty");
if (shipQtyCache.containsKey(id)) {
BigDecimal qty = shipQtyCache.get(id);
qty = qty.add(shipQty);
shipQtyCache.put(id, qty);
} else {
shipQtyCache.put(id, shipQty);
}
}
for (DynamicObject o : salesOrder) {
DynamicObjectCollection c = o.getDynamicObjectCollection("yem_es_materialinfo");
for (DynamicObject d : c) {
Long id = d.getLong("id");
BigDecimal qty = (BigDecimal) d.get("yem_qty");
if (orderQtyCache.containsKey(id)) {
BigDecimal orderQty = orderQtyCache.get(id);
d.set("yem_orderqty", orderQty);
d.set("yem_unorderqty", qty.subtract(orderQty));
}
if (shipQtyCache.containsKey(id)) {
BigDecimal shipQty = shipQtyCache.get(id);
d.set("yem_shippingqty", shipQty);
d.set("yem_unshippingqty", qty.subtract(shipQty));
}
}
}
log.info("success");
log.info(String.valueOf(System.currentTimeMillis()));
//save
SaveServiceHelper.save(salesOrder);
}
}