#
zhou zhou
2 天以前 523365960513f297024a419f94b2b42eccd9456f
rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/AsnOrderPressureSchedules.java
@@ -2,11 +2,11 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.vincent.rsf.framework.exception.CoolException;
import com.vincent.rsf.server.manager.entity.AsnOrderItemLog;
import com.vincent.rsf.server.manager.entity.AsnOrderLog;
import com.vincent.rsf.server.manager.entity.Matnr;
import com.vincent.rsf.server.manager.entity.WkOrder;
import com.vincent.rsf.server.manager.entity.WkOrderItem;
import com.vincent.rsf.server.manager.service.AsnOrderItemService;
import com.vincent.rsf.server.manager.service.AsnOrderService;
import com.vincent.rsf.server.manager.service.AsnOrderItemLogService;
import com.vincent.rsf.server.manager.service.AsnOrderLogService;
import com.vincent.rsf.server.manager.service.MatnrService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
@@ -22,7 +22,9 @@
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicBoolean;
/**
@@ -41,9 +43,9 @@
    private final AtomicBoolean running = new AtomicBoolean(false);
    @Autowired
    private AsnOrderService asnOrderService;
    private AsnOrderLogService asnOrderLogService;
    @Autowired
    private AsnOrderItemService asnOrderItemService;
    private AsnOrderItemLogService asnOrderItemLogService;
    @Autowired
    private MatnrService matnrService;
@@ -87,23 +89,33 @@
            LocalDateTime nowTime = LocalDateTime.now();
            double totalQty = itemCountPerOrder * itemQty;
            List<WkOrder> orders = new ArrayList<>(orderCountPerRun);
            List<AsnOrderLog> orders = new ArrayList<>(orderCountPerRun);
            for (int i = 0; i < orderCountPerRun; i++) {
                orders.add(buildOrder(now, nowTime, totalQty, i));
            }
            if (!asnOrderService.saveBatch(orders, 200)) {
            if (!asnOrderLogService.saveBatch(orders, 200)) {
                throw new CoolException("ASN压测主单插入失败");
            }
            List<WkOrderItem> items = new ArrayList<>(orderCountPerRun * itemCountPerOrder);
            List<AsnOrderLog> persistedOrders = asnOrderLogService.list(new LambdaQueryWrapper<AsnOrderLog>()
                    .in(AsnOrderLog::getCode, extractOrderCodes(orders)));
            Map<String, AsnOrderLog> orderMap = new HashMap<>(persistedOrders.size());
            for (AsnOrderLog order : persistedOrders) {
                orderMap.put(order.getCode(), order);
            }
            List<AsnOrderItemLog> items = new ArrayList<>(orderCountPerRun * itemCountPerOrder);
            for (int orderIndex = 0; orderIndex < orders.size(); orderIndex++) {
                WkOrder order = orders.get(orderIndex);
                AsnOrderLog order = orderMap.get(orders.get(orderIndex).getCode());
                if (order == null) {
                    throw new CoolException("ASN压测主单回查失败");
                }
                for (int itemIndex = 0; itemIndex < itemCountPerOrder; itemIndex++) {
                    Matnr matnr = matnrs.get((orderIndex * itemCountPerOrder + itemIndex) % matnrs.size());
                    items.add(buildOrderItem(order, matnr, now, orderIndex, itemIndex));
                }
            }
            if (!asnOrderItemService.saveBatch(items, 500)) {
            if (!asnOrderItemLogService.saveBatch(items, 500)) {
                throw new CoolException("ASN压测明细插入失败");
            }
@@ -126,89 +138,69 @@
                .last("limit " + needCount));
    }
    private WkOrder buildOrder(Date now, LocalDateTime nowTime, double totalQty, int sequence) {
    private List<String> extractOrderCodes(List<AsnOrderLog> orders) {
        List<String> codes = new ArrayList<>(orders.size());
        for (AsnOrderLog order : orders) {
            codes.add(order.getCode());
        }
        return codes;
    }
    private AsnOrderLog buildOrder(Date now, LocalDateTime nowTime, double totalQty, int sequence) {
        String suffix = String.format("%04d", sequence + 1);
        String code = "erp" + nowTime.format(ORDER_CODE_FORMATTER) + suffix;
        long serialNo = System.currentTimeMillis() * 1000 + sequence;
        return new WkOrder()
                .setCode(code)
                .setPoCode(code)
                .setPoId(serialNo)
                .setType(ORDER_TYPE)
                .setWkType(ORDER_WORK_TYPE)
                .setAnfme(totalQty)
                .setQty(totalQty)
                .setWorkQty(0.0)
                .setCheckType(0)
                .setRleStatus((short) 0)
                .setNtyStatus(0)
                .setExceStatus((short) 4)
                .setStatus(1)
                .setDeleted(0)
                .setTenantId(TENANT_ID)
                .setCreateBy(USER_ID)
                .setCreateTime(now)
                .setUpdateBy(USER_ID)
                .setUpdateTime(now)
                .setMemo(MEMO)
                .setReportOnce(4)
                .setBusinessTime(now)
                .setStationId("1215")
                .setOrderInternalCode(String.valueOf(serialNo))
                .setStockDirect("stockDirect")
                .setCustomerId("custom1")
                .setCustomerName("客户1")
                .setSupplierId("gongys1")
                .setSupplierName("供应商1")
                .setStockOrgId("stockYH")
                .setStockOrgName("浙江银湖箱包有限公司仓库")
                .setPurchaseOrgId("yhcaigou")
                .setPurchaseOrgName("浙江银湖箱包有限公司采购")
                .setPurchaseUserId("caigouyuan1")
                .setPurchaseUserName("采购员1")
                .setPrdOrgId("prdYH")
                .setPrdOrgName("浙江银湖箱包有限公司")
                .setSaleOrgId("sale1")
                .setSaleOrgName("生产组1")
                .setSaleUserId("shengchanyuan1")
                .setSaleUserName("生产员1")
                .setVersion(0);
        AsnOrderLog order = new AsnOrderLog();
        order.setCode(code);
        order.setPoCode(code);
        order.setPoId(serialNo);
        order.setType(ORDER_TYPE);
        order.setWkType(ORDER_WORK_TYPE);
        order.setAnfme(totalQty);
        order.setQty(totalQty);
        order.setRleStatus((short) 0);
        order.setNtyStatus((short) 0);
        order.setExceStatus((short) 4);
        order.setStatus(1);
        order.setDeleted(0);
        order.setTenantId(TENANT_ID);
        order.setCreateBy(USER_ID);
        order.setCreateTime(now);
        order.setUpdateBy(USER_ID);
        order.setUpdateTime(now);
        order.setMemo(MEMO);
        return order;
    }
    private WkOrderItem buildOrderItem(WkOrder order, Matnr matnr, Date now, int orderIndex, int itemIndex) {
    private AsnOrderItemLog buildOrderItem(AsnOrderLog order, Matnr matnr, Date now, int orderIndex, int itemIndex) {
        String stockUnit = StringUtils.firstNonBlank(matnr.getStockUnit(), matnr.getPurUnit(), matnr.getUnit(), matnr.getBaseUnit());
        String purUnit = StringUtils.firstNonBlank(matnr.getPurUnit(), matnr.getUnit(), matnr.getStockUnit(), matnr.getBaseUnit());
        String baseUnit = StringUtils.firstNonBlank(matnr.getBaseUnit(), matnr.getUnit(), matnr.getStockUnit(), matnr.getPurUnit());
        String batchCode = "B" + new SimpleDateFormat("yyyyMMddHHmmss").format(now)
                + String.format("%02d%02d", orderIndex + 1, itemIndex + 1);
        String trackCode = "T" + System.currentTimeMillis() + String.format("%02d%02d", orderIndex + 1, itemIndex + 1);
        return new WkOrderItem()
                .setOrderId(order.getId())
                .setOrderCode(order.getCode())
        return new AsnOrderItemLog()
                .setLogId(order.getId())
                .setAsnId(order.getAsnId())
                .setAsnCode(order.getCode())
                .setPlatItemId("M" + (itemIndex + 1))
                .setPoCode(order.getPoCode())
                .setFieldsIndex(matnr.getFieldsIndex())
                .setMatnrId(matnr.getId())
                .setMatnrCode(matnr.getCode())
                .setMaktx(matnr.getName())
                .setSpec(matnr.getSpec())
                .setModel(matnr.getModel())
                .setAnfme(itemQty)
                .setWorkQty(0.0)
                .setPurQty(itemQty)
                .setQty(itemQty)
                .setStockUnit(stockUnit)
                .setPurUnit(purUnit)
                .setBatch(batchCode)
                .setSplrBatch(batchCode)
                .setSplrCode("gongys1")
                .setSplrName("供应商1")
                .setTrackCode(trackCode)
                .setBarcode(trackCode)
                .setProdTime(new SimpleDateFormat("yyyy-MM-dd").format(now))
                .setNtyStatus(0)
                .setNtyStatus((short) 0)
                .setStatus(1)
                .setDeleted(0)
                .setTenantId(TENANT_ID)
@@ -216,11 +208,6 @@
                .setCreateTime(now)
                .setUpdateBy(USER_ID)
                .setUpdateTime(now)
                .setMemo(MEMO)
                .setBaseUnit(baseUnit)
                .setUseOrgId(matnr.getUseOrgId())
                .setUseOrgName(matnr.getUseOrgName())
                .setErpClsId(matnr.getErpClsId())
                .setPriceUnitId(baseUnit);
                .setMemo(MEMO);
    }
}