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