diff --git a/src/main/java/com/yem/wm/es/salesorder/task/FixOrderQtyTask.java b/src/main/java/com/yem/wm/es/salesorder/task/FixOrderQtyTask.java new file mode 100644 index 00000000..96143b6c --- /dev/null +++ b/src/main/java/com/yem/wm/es/salesorder/task/FixOrderQtyTask.java @@ -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 map) throws KDException { + log.info(String.valueOf(System.currentTimeMillis())); + DynamicObject[] salesOrder = BusinessDataServiceHelper.load("yem_es_salesorder", "id", null); + Set set = new HashSet<>(); + for (DynamicObject object : salesOrder) { + set.add(object.getLong("id")); + } + salesOrder = BusinessDataServiceHelper.load(set.toArray(), BusinessDataServiceHelper.newDynamicObject("yem_es_salesorder").getDynamicObjectType()); + Map 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 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 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 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); + } +}