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); // 数据处理,转发server for (MatPreparationOrder order : orders) { mesReportService.callMaterial(order); } return CommonResponse.ok(); } 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); } 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; } } rsf-server/src/main/java/com/vincent/rsf/server/api/controller/mes/MesController.java
New file @@ -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()); } } } 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", "正常领料备料单"), 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; }