From 41cf0200e1b45c24fb521815465b83a5898dd501 Mon Sep 17 00:00:00 2001
From: lbq <1065079612@qq.com>
Date: 星期五, 30 一月 2026 16:28:06 +0800
Subject: [PATCH] 增加备料模拟

---
 rsf-open-api/src/main/java/com/vincent/rsf/openApi/controller/phyz/MESController.java          |   31 +++--
 rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/phyz/impl/MesReportServiceImpl.java |   86 ++++++++++++++++
 rsf-server/src/main/java/com/vincent/rsf/server/api/controller/mes/MesController.java          |  147 +++++++++++++++++++++++++++++
 rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/phyz/MesReportService.java          |    3 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/OrderWorkType.java               |   16 +++
 5 files changed, 264 insertions(+), 19 deletions(-)

diff --git a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/controller/phyz/MESController.java b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/controller/phyz/MESController.java
index e4ca70b..b8d1c7b 100644
--- a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/controller/phyz/MESController.java
+++ b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/controller/phyz/MESController.java
@@ -38,24 +38,27 @@
         if (Objects.isNull(objParams)) {
             throw new CoolException("鍙傛暟涓嶈兘涓虹┖锛侊紒");
         }
-        // 杩斿洖妯℃嫙鏁版嵁
-        if (SIMULATED_DATA_ENABLE.equals("1")) {
-            JSONArray params = paramsFormat(objParams);
-            List<MatPreparationOrder> orders = JSON.parseArray(params.toJSONString(), MatPreparationOrder.class);
-            JSONArray array = ERPController.map;
-            for (int i = 0; i < ERPController.map.size(); i++) {
-                JSONObject obj = array.getJSONObject(i);
-                obj.put("orderNo", orders.get(0).getOrderNo());
-                obj.put("matNr", orders.get(0).getOrderItems().get(0).getMatNr());
-            }
-            ERPController.map = array;
-
-            return CommonResponse.ok();
-        }
+//        // 杩斿洖妯℃嫙鏁版嵁
+//        if (SIMULATED_DATA_ENABLE.equals("1")) {
+//            JSONArray params = paramsFormat(objParams);
+//            List<MatPreparationOrder> orders = JSON.parseArray(params.toJSONString(), MatPreparationOrder.class);
+//            JSONArray array = ERPController.map;
+//            for (int i = 0; i < ERPController.map.size(); i++) {
+//                JSONObject obj = array.getJSONObject(i);
+//                obj.put("orderNo", orders.get(0).getOrderNo());
+//                obj.put("matNr", orders.get(0).getOrderItems().get(0).getMatNr());
+//            }
+//            ERPController.map = array;
+//
+//            return CommonResponse.ok();
+//        }
 
         JSONArray params = paramsFormat(objParams);
         List<MatPreparationOrder> orders = JSON.parseArray(params.toJSONString(), MatPreparationOrder.class);
         // 鏁版嵁澶勭悊锛岃浆鍙憇erver
+        for (MatPreparationOrder order : orders) {
+            mesReportService.callMaterial(order);
+        }
         return CommonResponse.ok();
     }
 
diff --git a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/phyz/MesReportService.java b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/phyz/MesReportService.java
index 004cb4c..0570426 100644
--- a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/phyz/MesReportService.java
+++ b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/phyz/MesReportService.java
@@ -1,6 +1,7 @@
 package com.vincent.rsf.openApi.service.phyz;
 
 import com.vincent.rsf.openApi.entity.dto.CommonResponse;
+import com.vincent.rsf.openApi.entity.phyz.MatPreparationOrder;
 
 public interface MesReportService {
 
@@ -9,4 +10,6 @@
     CommonResponse syncStationInfo(Object params);
 
     CommonResponse reportTaskExecute(Object params);
+
+    String callMaterial(MatPreparationOrder order);
 }
diff --git a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/phyz/impl/MesReportServiceImpl.java b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/phyz/impl/MesReportServiceImpl.java
index 1a1ec55..4393a85 100644
--- a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/phyz/impl/MesReportServiceImpl.java
+++ b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/phyz/impl/MesReportServiceImpl.java
@@ -26,18 +26,18 @@
 import javax.annotation.PostConstruct;
 import javax.annotation.Resource;
 import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
+import java.lang.reflect.Field;
+import java.util.*;
 
 import org.springframework.http.client.ClientHttpResponse;
-import java.util.Objects;
 
 @Service
 @Slf4j
 public class MesReportServiceImpl implements MesReportService {
 
     private static String MES_REPORT_URL;
+    @Resource
+    private PlatformProperties.WmsApi wmsApi;
 
     @Resource
     private PlatformProperties.MesApi mesApi;
@@ -294,4 +294,82 @@
         }
     }
 
+    public String callMaterial(MatPreparationOrder order) {
+        if (Objects.isNull(order.getOrderNo()) || order.getOrderNo().isEmpty()) {
+            throw new CoolException("璁㈠崟鍙蜂笉鑳戒负绌猴紒锛�");
+        }
+        /**WMS鍩虹閰嶇疆閾炬帴*/
+        String wmsUrl = wmsApi.getHost() + ":" + wmsApi.getPort() + "/rsf-server/mes/callMaterial";
+        HttpHeaders headers = new HttpHeaders();
+        headers.add("Content-Type", "application/json");
+        headers.add("api-version", "v2.0");
+
+//        List<Map<String, Object>> maps = new ArrayList<>();
+//        Map<String, Object> mapParams = new HashMap<>();
+//////        mapParams.put("orderNo", params.getOrderNo());
+//////        mapParams.put("anfme", params.getAnfme());
+//////        mapParams.put("type", params.getType());
+//////        mapParams.put("wkType", params.getWkType());
+//////        mapParams.put("exceStatus", params.getExceStatus());
+//////        mapParams.put("orderItems", params.getOrderItems());
+//////        maps.add(mapParams);
+////
+////        JSONObject params = JSONObject.parseObject(JSON.toJSONString(order));
+////        JSONObject mappedData = ParamsMapUtils.apiMaps("mes", "orderId", params);
+////        mappedData.put("updateBy", "mes");
+////        mapParams = objectToMap(mappedData);
+////        maps.add(mapParams);
+//        log.info("淇敼璁㈠崟淇℃伅鍙婄姸鎬侊細 {}锛� 璇锋眰鍙傛暟锛� {}", wmsUrl, JSONArray.toJSONString(order));
+//        HttpEntity<List<Map<String, Object>>> httpEntity = new HttpEntity<>(maps, headers);
+////        ArrayList<Order> orders = new ArrayList<>();
+////        orders.add(order);
+        HttpEntity httpEntity = new HttpEntity<>(order, headers);
+        // mes/callMaterial
+        ResponseEntity<String> exchange = restTemplate.exchange(wmsUrl, HttpMethod.POST, httpEntity, String.class);//cs
+        log.info("澶囨枡鍗曡繑鍥炵粨鏋滐細 {}", exchange);
+        if (Objects.isNull(exchange.getBody())) {
+            throw new CoolException("鏌ヨ澶辫触锛侊紒");
+        } else {
+            ObjectMapper objectMapper = new ObjectMapper();
+            objectMapper.coercionConfigDefaults().setCoercion(CoercionInputShape.EmptyString, CoercionAction.AsEmpty);
+            try {
+                CommonResponse result = objectMapper.readValue(exchange.getBody(), CommonResponse.class);
+                if (result.getCode() == 200) {
+//                    JSONObject object = JSONObject.parseObject(JSONObject.toJSONString(result.getData()));
+                    return "200";
+                } else {
+                    return result.getMsg();
+//                    throw new CoolException("鏌ヨ澶辫触锛侊紒");
+                }
+            } catch (JsonProcessingException e) {
+                return e.getMessage();
+//                throw new CoolException(e.getMessage());
+            }
+        }
+
+
+//        ErpOpParams erpOpParams = new ErpOpParams();
+//        erpOpParams.set
+//
+//        wmsErpService.updateOrderDetl(ErpOpParams params);
+
+//        CommonResponse updateOrderDetl()
+//
+//        asnOrderService.saveOrderAndItems(params, getLoginUserId());
+    }
+
+    public static Map<String, Object> objectToMap(Object obj) {
+        Map<String, Object> map = new HashMap<>();
+        Field[] fields = obj.getClass().getDeclaredFields();
+        for (Field field : fields) {
+            field.setAccessible(true); // 璁剧疆绉佹湁瀛楁涔熷彲浠ヨ闂�
+            try {
+                map.put(field.getName(), field.get(obj));
+            } catch (IllegalAccessException e) {
+                e.printStackTrace();
+            }
+        }
+        return map;
+    }
+
 }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/mes/MesController.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/mes/MesController.java
new file mode 100644
index 0000000..6f37283
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/mes/MesController.java
@@ -0,0 +1,147 @@
+package com.vincent.rsf.server.api.controller.mes;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.vincent.rsf.framework.common.R;
+import com.vincent.rsf.server.common.annotation.OperationLog;
+import com.vincent.rsf.server.manager.entity.Loc;
+import com.vincent.rsf.server.manager.entity.LocItem;
+import com.vincent.rsf.server.manager.service.LocItemService;
+import com.vincent.rsf.server.manager.service.LocService;
+import com.vincent.rsf.server.manager.service.AsnOrderService;
+import com.vincent.rsf.server.manager.entity.WkOrder;
+import com.vincent.rsf.server.manager.controller.params.AsnOrderAndItemsParams;
+import com.vincent.rsf.server.manager.enums.OrderType;
+import com.vincent.rsf.server.manager.enums.OrderWorkType;
+import com.vincent.rsf.server.system.controller.BaseController;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Map;
+import java.util.Date;
+import org.springframework.web.bind.annotation.RequestBody;
+
+@RestController
+@RequestMapping("/mes")
+@Api(tags = "MES")
+public class MesController extends BaseController {
+
+    @Resource
+    private LocService locService;
+    @Resource
+    private LocItemService locItemService;
+    @Resource
+    private AsnOrderService asnOrderService;
+
+
+    /**
+     * @author Ryan
+     * @date 2025/8/19
+     * @description: 鐗╂枡鍒嗙被鍒楄〃鏌ヨ
+     * @version 1.0
+     */
+    @ApiOperation(value = "妯℃嫙澶囨枡")
+    @OperationLog("妯℃嫙澶囨枡")
+    @PostMapping("/callMaterial")
+    public R callMaterial(@RequestBody JSONObject params) {
+        try {
+            WkOrder order = new WkOrder();
+            String orderNo = params.getString("orderNo");
+            order.setCode(orderNo).setPoCode(orderNo).setType(OrderType.ORDER_OUT.type)
+//                    .setWkType(OrderWorkType.ORDER_WORK_TYPE_MATERIAL_PREPARATION.type)
+                    .setCreateBy(getLoginUserId())
+                    .setUpdateBy(getLoginUserId());
+            if (params.getInteger("prepareType") == 1) {
+                order.setWkType(OrderWorkType.ORDER_WORK_TYPE_NORMAL_MATERIAL_PREPARATION.type);
+            } else {
+                order.setWkType(OrderWorkType.ORDER_WORK_TYPE_FEED_IN_MATERIAL_PREPARATION.type);
+            }
+
+            JSONArray jsonArray = params.getJSONArray("orderItems");
+            List<Map<String, Object>> items = new java.util.ArrayList<>();
+            for (int i = 0; i < jsonArray.size(); i++) {
+                JSONObject item = jsonArray.getJSONObject(i);
+                Map<String, Object> map = new java.util.HashMap<>();
+                String matnrCode = item.getString("matNr");
+                if (matnrCode == null) {
+                    matnrCode = item.getString("matNr");
+                }
+                map.put("matnrCode", matnrCode);
+                Double qty = item.getDouble("anfme");
+                if (qty == null) {
+                    qty = item.getDouble("anfme");
+                }
+                map.put("anfme", qty);
+//                map.put("unit", item.getString("unit"));
+//                map.put("splrCode", item.getString("splrCode"));
+//                map.put("splrName", item.getString("splrName"));
+//                map.put("splrBatch", item.getString("splrBatch"));
+//                map.put("platItemId", item.getString("platItemId"));
+                items.add(map);
+            }
+
+            AsnOrderAndItemsParams dto = new AsnOrderAndItemsParams();
+            dto.setOrders(order);
+            dto.setItems(items);
+            R result = asnOrderService.saveOrderAndItems(dto, getLoginUserId());
+            if (!result.get("code").equals(200)) {
+                return result;
+            }
+
+            Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getUseStatus, "O").eq(Loc::getAreaId, 22).last("limit 1"));
+            if (loc == null) {
+                return R.error("娌℃湁鍙敤搴撲綅");
+            }
+            String palletId = "AA" + String.format("%06d", (int) (Math.random() * 1000000));
+
+            for (int i = 0; i < jsonArray.size(); i++) {
+                JSONObject item = jsonArray.getJSONObject(i);
+                loc.setBarcode(palletId);
+                loc.setUseStatus("F");
+                locService.updateById(loc);
+
+                LocItem locItem = new LocItem();
+                String matnrCode = item.getString("matNr");
+                if (matnrCode == null) {
+                    matnrCode = item.getString("matNr");
+                }
+                Double qty = item.getDouble("anfme");
+                if (qty == null) {
+                    qty = item.getDouble("anfme");
+                }
+                locItem.setLocId(loc.getId())
+                        .setLocCode(loc.getCode())
+                        .setOrderId(order.getId())
+                        .setType(OrderType.ORDER_OUT.type)
+//                        .setWkType(Short.parseShort(OrderWorkType.ORDER_WORK_TYPE_MATERIAL_PREPARATION.type))
+//                        .setMatnrId(item.getLong("matnrId"))
+                        .setMatnrCode(matnrCode)
+//                        .setMaktx(item.getString("maktx"))
+                        .setQty(qty)
+                        .setAnfme(qty)
+//                        .setUnit(item.getString("unit"))
+                        .setBarcode(palletId)
+                        .setStatus(1)
+                        .setDeleted(0)
+                        .setCreateTime(new Date());
+                if (params.getInteger("prepareType") == 1) {
+                    locItem.setWkType(Short.parseShort(OrderWorkType.ORDER_WORK_TYPE_NORMAL_MATERIAL_PREPARATION.type));
+                } else {
+                    locItem.setWkType(Short.parseShort(OrderWorkType.ORDER_WORK_TYPE_FEED_IN_MATERIAL_PREPARATION.type));
+                }
+                locItemService.save(locItem);
+            }
+
+            return R.ok().add(order.getId());
+        } catch (Exception e) {
+            return R.error("澶囨枡澶勭悊寮傚父: " + e.getMessage());
+        }
+    }
+
+}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/OrderWorkType.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/OrderWorkType.java
index 6ca257a..26e5641 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/OrderWorkType.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/OrderWorkType.java
@@ -25,7 +25,9 @@
     ORDER_WORK_TYPE_STOCK_CHECK("16", "鐩樼偣鍑哄簱"),
     ORDER_WORK_TYPE_STOCK_TERANSFER("17", "璋冩嫈鍑哄簱鍗�"),
     ORDER_WORK_TYPE_STOCK_UP("23", "澶囪揣鍑哄簱鍗�"),
-    ORDER_WORK_TYPE_OTHER("14", "鍏跺畠鍑哄簱鍗�");
+    ORDER_WORK_TYPE_OTHER("14", "鍏跺畠鍑哄簱鍗�"),
+    ORDER_WORK_TYPE_NORMAL_MATERIAL_PREPARATION("21", "姝e父棰嗘枡澶囨枡鍗�"),
+    ORDER_WORK_TYPE_FEED_IN_MATERIAL_PREPARATION("22", "鐢熶骇琛ユ枡澶囨枡鍗�");
 
 
     OrderWorkType(String type, String desc) {
@@ -67,6 +69,10 @@
             return OrderWorkType.ORDER_WORK_TYPE_STOCK_REVISE.type;
         }else if (desc.equals(OrderWorkType.ORDER_WORK_TYPE_STOCK_UP.desc)) {
             return OrderWorkType.ORDER_WORK_TYPE_STOCK_UP.type;
+        } else if (desc.equals(OrderWorkType.ORDER_WORK_TYPE_NORMAL_MATERIAL_PREPARATION.desc)) {
+            return OrderWorkType.ORDER_WORK_TYPE_NORMAL_MATERIAL_PREPARATION.type;
+        } else if (desc.equals(OrderWorkType.ORDER_WORK_TYPE_FEED_IN_MATERIAL_PREPARATION.desc)) {
+            return OrderWorkType.ORDER_WORK_TYPE_NORMAL_MATERIAL_PREPARATION.type;
         }
         return null;
     }
@@ -108,6 +114,10 @@
             return OrderType.ORDER_REVISE.type;
         }else if (desc.equals(OrderWorkType.ORDER_WORK_TYPE_STOCK_UP.desc)) {
             return OrderWorkType.ORDER_WORK_TYPE_STOCK_UP.type;
+        } else if (desc.equals(OrderWorkType.ORDER_WORK_TYPE_NORMAL_MATERIAL_PREPARATION.desc)) {
+            return OrderType.ORDER_OUT.type;
+        } else if (desc.equals(OrderWorkType.ORDER_WORK_TYPE_FEED_IN_MATERIAL_PREPARATION.desc)) {
+            return OrderType.ORDER_OUT.type;
         }
         return null;
     }
@@ -143,6 +153,10 @@
             return OrderWorkType.ORDER_WORK_TYPE_STOCK_REVISE.desc;
         }else if (type.equals(OrderWorkType.ORDER_WORK_TYPE_STOCK_UP.type)) {
             return OrderWorkType.ORDER_WORK_TYPE_STOCK_UP.desc;
+        } else if (type.equals(OrderWorkType.ORDER_WORK_TYPE_NORMAL_MATERIAL_PREPARATION.type)) {
+            return OrderWorkType.ORDER_WORK_TYPE_NORMAL_MATERIAL_PREPARATION.desc;
+        } else if (type.equals(OrderWorkType.ORDER_WORK_TYPE_FEED_IN_MATERIAL_PREPARATION.type)) {
+            return OrderWorkType.ORDER_WORK_TYPE_FEED_IN_MATERIAL_PREPARATION.desc;
         }
         return null;
     }

--
Gitblit v1.9.1