feat:处理合同明细信息中已下单数量,未下单数量,已发运数量,未发运数量 错误数据
This commit is contained in:
parent
b2c412e4d8
commit
35f2c7a4c0
118
src/main/java/com/yem/wm/es/salesorder/task/FixOrderQtyTask.java
Normal file
118
src/main/java/com/yem/wm/es/salesorder/task/FixOrderQtyTask.java
Normal 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);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user