lbq
9 小时以前 41cf0200e1b45c24fb521815465b83a5898dd501
增加备料模拟
4个文件已修改
1个文件已添加
283 ■■■■■ 已修改文件
rsf-open-api/src/main/java/com/vincent/rsf/openApi/controller/phyz/MESController.java 31 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/phyz/MesReportService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/phyz/impl/MesReportServiceImpl.java 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/api/controller/mes/MesController.java 147 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/OrderWorkType.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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;
    }