From 2fe0bc97894ef3ff3ff411c818ee4ddf9e8111d7 Mon Sep 17 00:00:00 2001 From: zzs Date: Sat, 22 Feb 2025 18:07:52 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E5=A4=84=E7=90=86=E5=90=88=E5=90=8C?= =?UTF-8?q?=E6=98=8E=E7=BB=86=E4=BF=A1=E6=81=AF=E4=B8=AD=E5=B7=B2=E4=B8=8B?= =?UTF-8?q?=E5=8D=95=E6=95=B0=E9=87=8F=EF=BC=8C=E6=9C=AA=E4=B8=8B=E5=8D=95?= =?UTF-8?q?=E6=95=B0=E9=87=8F=EF=BC=8C=E5=B7=B2=E5=8F=91=E8=BF=90=E6=95=B0?= =?UTF-8?q?=E9=87=8F=EF=BC=8C=E6=9C=AA=E5=8F=91=E8=BF=90=E6=95=B0=E9=87=8F?= =?UTF-8?q?=20=E9=94=99=E8=AF=AF=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../es/salesorder/task/FixOrderQtyTask.java | 118 ++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100644 src/main/java/com/yem/wm/es/salesorder/task/FixOrderQtyTask.java 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); + } +}