1
2 天以前 db06b944e7886832d20b8e3ae62b2cb70bcba30f
asrs-schedule/src/main/java/com/vincent/rsf/schedule/schedules/AsnOrderLogSchedule.java
@@ -5,10 +5,8 @@
import com.vincent.rsf.framework.common.Cools;
import com.vincent.rsf.framework.common.R;
import com.vincent.rsf.framework.exception.CoolException;
import com.vincent.rsf.schedule.api.controller.erp.params.ReportDataParam;
import com.vincent.rsf.schedule.api.controller.erp.params.ReportParams;
import com.alibaba.fastjson.JSONObject;
import com.vincent.rsf.schedule.api.service.ReportMsgService;
import com.vincent.rsf.schedule.common.utils.FieldsUtils;
import com.vincent.rsf.schedule.manager.entity.*;
import com.vincent.rsf.schedule.manager.enums.*;
import com.vincent.rsf.schedule.manager.service.*;
@@ -63,7 +61,7 @@
     * @description 删除已完成订单加入Log表
     * @time 2025/3/19 19:09
     */
//    @Scheduled(cron = "0/35 * * * * ?  ")
    @Scheduled(cron = "0/1 * * * * ?  ")
    @Transactional(rollbackFor = Exception.class)
    public void InStockToLog() {
        List<WkOrder> wkOrders = asnOrderService.list(new LambdaQueryWrapper<WkOrder>()
@@ -110,86 +108,82 @@
    /**
     * @author Ryan
     * @date 2025/10/28
     * @description: 上传已完成订单至ERP平台
     * @description: 定时触发rsf-open-api上报ERP
     * @version 1.0
     */
    @Scheduled(cron = "0/30 * * * * ?  ")
    public void reportToErp() {
        try {
            reportMsgService.triggerErpReport();
        } catch (Exception e) {
            log.error("触发ERP上报失败", e);
        }
    }
    /**
     * @author Ryan
     * @date 2025/10/28
     * @description: 上传已完成订单至ERP平台(新链路,Order格式)
     * @version 1.0
     */
    public void reportOrders(WkOrder order) {
            ReportParams params = new ReportParams();
            List<WkOrderItem> orderItems = asnOrderItemService.list(new LambdaQueryWrapper<WkOrderItem>().eq(WkOrderItem::getOrderId, order.getId()));
            if (orderItems.isEmpty()) {
                throw new CoolException("订据明细不存在!!");
            }
            List<ReportDataParam> reportData = new ArrayList<>();
            orderItems.forEach(orderItem -> {
                ReportDataParam param = new ReportDataParam();
                User user = userService.getById(order.getUpdateBy());
                String nickName = null;
                if (!Objects.isNull(user)) {
                    nickName = user.getNickname();
            // 构建Order格式的JSON数据,与下发/add接口字段保持一致
            JSONObject orderData = new JSONObject(true);
            // 幂等键:orderNo + reportOnce 确保每次上报唯一
            int seq = order.getReportOnce() == null ? 0 : order.getReportOnce();
            orderData.put("eventId", order.getCode() + "_REPORT_" + seq);
            orderData.put("orderNo", order.getCode());
            orderData.put("poCode", order.getPoCode());
            orderData.put("type", order.getType());
            orderData.put("wkType", order.getWkType());
            orderData.put("createTime", order.getCreateTime() != null ? order.getCreateTime().getTime() / 1000 : null);
            orderData.put("memo", order.getMemo());
            User user = userService.getById(order.getUpdateBy());
            String nickName = null;
            if (!Objects.isNull(user)) {
                nickName = user.getNickname();
            }
            orderData.put("editUser", nickName);
            orderData.put("editDate", order.getUpdateTime() != null ? order.getUpdateTime().getTime() / 1000 : null);
            // 构建明细列表,字段与OrderItem一致
            List<JSONObject> items = new ArrayList<>();
            for (WkOrderItem orderItem : orderItems) {
                JSONObject item = new JSONObject(true);
                item.put("lineId", orderItem.getPlatItemId());
                item.put("planNo", orderItem.getPlatWorkCode());
                item.put("matNr", orderItem.getMatnrCode());
                item.put("makTx", orderItem.getMaktx());
                item.put("anfme", orderItem.getAnfme());
                item.put("batch", orderItem.getBatch());
                item.put("unit", orderItem.getStockUnit());
                item.put("spec", orderItem.getSpec());
                item.put("model", orderItem.getModel());
                item.put("memo", orderItem.getMemo());
                // 完成数量:入库用qty,出库用workQty
                if (order.getType().equals(OrderType.ORDER_IN.type)) {
                    item.put("doneQty", orderItem.getQty());
                } else {
                    item.put("doneQty", orderItem.getWorkQty());
                }
                items.add(item);
            }
            orderData.put("orderItems", items);
                Map<String, String> fields = FieldsUtils.getFields(orderItem.getFieldsIndex());
                //设置通用参数
                param.setWMSNO(order.getCode())
                        .setPONO(order.getPoCode())
                        .setOrderNO(order.getPoCode())
                        .setOrderDate(order.getCreateTime())
                        .setItemCode(orderItem.getMatnrCode())
                        .setEditUser(nickName)
                        .setEditDate(order.getUpdateTime())
//                        .setGoodsNO(fields.get("crushNo"))
                        .setMemoDtl(order.getMemo());
                if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_DONE_IN.type)) {
                    //采购入库单
                    params.setOrderType("PO_Instock").setAction("Update");
                    //获取指定查询字段CrushNo 票号
                    param.setInQty(orderItem.getQty());
                } else if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_PURCHASE_RETURN.type)) {
                    //采购退货
                    params.setOrderType("PR_Outstock").setAction("Update");
                    param.setOutQty(orderItem.getQty());
                } else if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_PROD.type)) {
                    //生产入库单
//                params.setOrderType("WO_Outstock").setAction("Update");
                } else if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_PURCHASE.type)) {
                    //生产退料
                    params.setOrderType("WR_Instock").setAction("Update");
                    param.setInQty(orderItem.getQty());
                } else if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_RETURN_ORDER.type)) {
                    //生产领料
                    params.setOrderType("WO_Outstock").setAction("Update");
                    param.setOutQty(orderItem.getQty());
                } else if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_PROD_ADDITION.type)) {
                    //生产补料
                    params.setOrderType("WR_Instock_BL").setAction("Update");
                    param.setOutQty(orderItem.getQty());
                } else if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_FIX_OUT.type)) {
                    params.setOrderType("WO_Outstock_WR").setAction("Update");
                    param.setOutQty(orderItem.getQty());
                } else if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_OTHER_IN.type)) {
                    //其它入库单/手动入库单
                    params.setOrderType("In_Instock").setAction("Update");
                    param.setInQty(orderItem.getQty());
                } else if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_OTHER.type)) {
                    //其它出库单/手动出库单
                    params.setOrderType("Io_Outstock").setAction("Update");
                    param.setOutQty(orderItem.getQty());
                }
                reportData.add(param);
            });
            params.setData(reportData);
            try {
                R reported = reportMsgService.uploadReportOrders(params);
                if (reported.get("code").equals("200")) {
                R reported = reportMsgService.uploadReportOrdersNew(orderData);
                if (reported.get("code").equals(200)) {
                    order.setNtyStatus(OrderReportStatus.ORDER_REPORT_STATUS_ALL.val);
                    asnOrderService.updateById(order);
                }
            } catch (Exception e) {
                log.error("<UNK>", e);
                log.error("上报订单失败", e);
            }
    }