自动化立体仓库 - WMS系统
pang.jiabao
2024-09-12 265881414a15ac8216abb860880bd6872872c42a
mes接口对接
8个文件已修改
242 ■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/MobileController.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/OpenController.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/ReportMesOrderResult.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/OpenService.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/handler/OrderSyncHandler.java 129 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/constant/MesConstant.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/MobileController.java
@@ -563,6 +563,16 @@
        return mobileService.pdckqr(param);
    }
//    @PostMapping("/pdtz/auth")
//    @ManagerAuth(memo = "盘点调整库存")
//    public synchronized R pdtz(@RequestBody PdckqrParam param) {
//        // 根据工作号确认复核
//        if(Cools.isEmpty(param) || Cools.isEmpty(param.getBarcode()) ||  Cools.isEmpty(param.getMaterials())){
//            return R.parse(BaseRes.PARAM);
//        }
//        return mobileService.pdtz(param);
//    }
    @PostMapping("/pdaWarehousingNow")
    @ManagerAuth(memo = "pda组托立即入库")
    public synchronized R pdaWarehousingNow(@RequestBody PdaWarehousingNowParam param) {
src/main/java/com/zy/asrs/controller/OpenController.java
@@ -15,6 +15,7 @@
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
 * Created by vincent on 2022/4/8
@@ -159,6 +160,18 @@
        return R.ok();
    }
    @PostMapping("/xhd")
    @AppAuth(memo = "盘点位请求亮灯")
    public synchronized R requestXhd(@RequestHeader(required = false) String appkey,
                                    @RequestBody Map<String,Object> param,
                                    HttpServletRequest request) {
        auth(appkey, param, request);
        if (Cools.isEmpty(param.get("barcode"))){
            return R.parse("条码错误:" + param.get("barcode"));
        }
        return openService.requestXhd((String) param.get("barcode"));
    }
    /*@PostMapping("/order/matSync/default/v1")
    @AppAuth(memo = "商品信息同步接口")
    public synchronized R syncMatInfo(@RequestHeader(required = false) String appkey,
src/main/java/com/zy/asrs/entity/ReportMesOrderResult.java
@@ -9,11 +9,11 @@
 */
@Data
public class ReportMesOrderResult {
    private String groupNo;
    private Integer qty;
    private String packageNo;
    private Integer status;
    public ReportMesOrderResult(String brand, Integer qty) {
        this.groupNo = brand;
        this.qty = qty;
        this.packageNo = brand;
        this.status = qty;
    }
}
src/main/java/com/zy/asrs/service/OpenService.java
@@ -76,6 +76,11 @@
    R zphjCdwc(ZphjcdwcParam param);
    /**
     * gwcs到达盘点位置传递托盘条码获取亮灯
     */
    R requestXhd(String barcode);
    /**
     * 添加入库单
     */
    void pakinOrderCreate(OpenOrderPakinParam param);
src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
@@ -1210,6 +1210,8 @@
        List<PdckqrParam.Material> materials = param.getMaterials();
        boolean isFullyCancelled = compareAndCheckCancellation(wrkDetls, materials);
        // todo 两箱盘两箱需要确定位置没错
        if (isFullyCancelled) { // 盘点物料确成功,工作档转换 盘点出库->盘点再入库,下发回库命令
            // 保存工作主档历史档
            if (!wrkMastLogService.save(wrkMast.getWrkNo())) {
@@ -1252,11 +1254,19 @@
            return R.ok("盘点确认成功");
        } else { // 物料不一致
            // todo 不一致的处理处理方法待定
            // 不一致的处理处理方法:弹出调整界面
//            重新扫描实物上面的码进行调整
//            实物在库存里面的地方清空,任务所在库存清空
//            将实物和当前托盘位置和库位绑定
//            一个木箱情况直接调整
//            两个木箱出两个 都调整
//            两个木箱出一个 调整一个
//            工作档标记异常->回库
            return R.error("盘点确认异常");
        }
        return R.error("盘点确认异常");
    }
    @Override
@@ -1516,9 +1526,7 @@
        boolean success = false;
        // 获取请求头
        Map<String,Object> headers = new HashMap<>();
        headers.put("digi-type","sync ");
        headers.put("digi-protocol","raw");
        headers.put("digi-datakey"," XCommon.ImportData");
        headers.put("Content-Type","application/json;charset=UTF-8");
        // 构造请求体
        JSONObject jsonObject = new JSONObject();
@@ -1528,22 +1536,23 @@
        String response = "";
        try {
            response = new HttpHandler.Builder()
                    .setUri(MesConstant.MES_IP_PORT)
                    .setPath(MesConstant.MES_DP_URL)
                    .setUri(MesConstant.MES_CC_IP_PORT)
                    .setPath(MesConstant.MES_CC_DP_URL)
                    .setHeaders(headers)
                    .setJson(body)
                    .build()
                    .doPost();
                    .doGet();
            if (!Cools.isEmpty(response)) {
                JSONObject jsonObject1 = JSONObject.parseObject(response);
                int code = (int) jsonObject1.get("code");
                String msg = (String) jsonObject1.get("msg");
                if (code != 200) {
                    throw new CoolException(msg);
                boolean state  = jsonObject1.getBoolean("state");
                String msg = (String) jsonObject1.get("message");
                if (code == 200 && state) {
                    success = true;
                }
                success = true;
                throw new CoolException(msg);
            } else {
                log.error("返修品入库给mes推送待判失败!!!url:{};request:{};response:{}", MesConstant.URL + MesConstant.PAKIN_URL, body, response);
                log.error("返修品入库给mes推送待判失败!!!url:{};request:{};response:{}", MesConstant.MES_CC_IP_PORT + MesConstant.MES_CC_IP_PORT, body, response);
                throw new CoolException("返修品入库给mes推送待判失败");
            }
        } catch (Exception e) {
@@ -1553,7 +1562,7 @@
                // 保存接口日志
                apiLogService.save(
                        "返修品入库给mes推送待判",
                        MesConstant.MES_IP_PORT + MesConstant.MES_DP_URL,
                        MesConstant.MES_CC_IP_PORT + MesConstant.MES_CC_IP_PORT,
                        null,
                        "127.0.0.1",
                        body,
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
@@ -1667,6 +1667,29 @@
        return R.ok(zphjcdwcVos);
    }
    @Override
    public R requestXhd(String barcode) {
        // 库存明细木箱位置集合
        List<LocDetl> locDetls = locDetlMapper.selectList(new EntityWrapper<LocDetl>().eq("zpallet", barcode));
        List<String> collect1 = locDetls.stream().map(LocDetl::getOrigin).distinct().collect(Collectors.toList());
        // 工作明细木箱位置集合
        List<WrkDetl> wrkDetls = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("zpallet", barcode));
        List<String> collect2 = wrkDetls.stream().map(WrkDetl::getOrigin).distinct().collect(Collectors.toList());
        // 0明细异常,1亮左,2亮右,3都亮
        if (collect1.size() == 0 || collect2.size() == 0){
            return R.ok(0);
        } else if((collect1.size() == 1 && collect2.size() == 1) || (collect1.size() == 2 && collect2.size() == 2)) {
            return R.ok(3);
        } else if(collect1.size() == 2 && collect2.size() == 1) {
            return R.ok(collect2.get(0).equals("左") ? 1 : 2);
        } else {
            return R.parse("亮信号灯条码异常:" + barcode);
        }
    }
    /**
     * 创建桁架理货出库的工作档
     */
src/main/java/com/zy/asrs/task/handler/OrderSyncHandler.java
@@ -52,49 +52,94 @@
        // 出库完成上报
        if (docType.getPakout() == 1) {
            List<ReportMesOrderResult> collect = orderDetls.stream().map(orderDetl ->
                    new ReportMesOrderResult(orderDetl.getBrand(), orderDetl.getQty().intValue())).collect(Collectors.toList());
            JSONObject object = new JSONObject();
            object.put("orderNo",order.getOrderNo());
            object.put("orderDetls",collect);
            String body = JSON.toJSONString(object);
            String response = "";
            boolean success = false;
            try {
                response = new HttpHandler.Builder()
                        .setUri(MesConstant.MES_IP_PORT)
                        .setPath(MesConstant.MES_CKSB_URL)
                        .setJson(body)
                        .build()
                        .doPost();
                JSONObject jsonObject = JSON.parseObject(response);
                if (jsonObject.getInteger("code").equals(200)) {
                    success = true;
                    // 修改订单状态 4.完成 ===>> 6.已上报
                    if (!orderService.updateSettle(order.getId(), 6L, null)) {
                        throw new CoolException("服务器内部错误,请联系管理员");
                    }
                } else {
                    log.error("请求MES出库单上报接口失败!!!url:{};request:{};response:{}", MesConstant.MES_IP_PORT+MesConstant.MES_CKSB_URL, JSON.toJSONString(collect), response);
                    throw new CoolException("请求MES出库单上报接口失败");
                }
            } catch (Exception e) {
                log.error("请求MES出库单上报接口异常", e);
//            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
//                return FAIL.setMsg(e.getMessage());
            } finally {
            // 盘点单上报
            if (docType.getDocName().equals("盘点单")) {
                List<ReportMesOrderResult> collect = orderDetls.stream().map(orderDetl ->
                        new ReportMesOrderResult(orderDetl.getBrand(), orderDetl.getQty().intValue())).collect(Collectors.toList());
                JSONObject object = new JSONObject();
                object.put("orderNo",order.getOrderNo());
                object.put("orderDetls",collect);
                String body = JSON.toJSONString(object);
                String response = "";
                boolean success = false;
                try {
                    // 保存接口日志
                    apiLogService.save(
                            "请求MES出库单上报接口",
                            MesConstant.MES_IP_PORT + MesConstant.MES_CKSB_URL,
                            null,
                            "127.0.0.1",
                            JSON.toJSONString(collect),
                            response,
                            success
                    );
                } catch (Exception e) { log.error("", e); }
                    response = new HttpHandler.Builder()
                            .setUri(MesConstant.MES_CC_IP_PORT)
                            .setPath(MesConstant.MES_CC_SB_URL)
                            .setJson(body)
                            .build()
                            .doPost();
                    JSONObject jsonObject = JSON.parseObject(response);
                    if (jsonObject.getInteger("code").equals(200)) {
                        success = true;
                        // 修改订单状态 4.完成 ===>> 6.已上报
                        if (!orderService.updateSettle(order.getId(), 6L, null)) {
                            throw new CoolException("更新订单上报完成失败:" + order);
                        }
                    } else {
                        log.error("请求仓储MES盘点单上报接口失败!!!url:{};request:{};response:{}", MesConstant.MES_CC_IP_PORT+MesConstant.MES_CC_SB_URL, JSON.toJSONString(collect), response);
                    }
                } catch (Exception e) {
                    log.error("请求仓储MES盘点单上报接口异常", e);
                } finally {
                    try {
                        // 保存接口日志
                        apiLogService.save(
                                "请求仓储MES盘点单上报接口",
                                MesConstant.MES_CC_IP_PORT + MesConstant.MES_CC_SB_URL,
                                null,
                                "127.0.0.1",
                                JSON.toJSONString(collect),
                                response,
                                success
                        );
                    } catch (Exception e) { log.error("", e); }
                }
            } else if(docType.getDocName().equals("出库申请单") || docType.getDocName().equals("反修出库单")) { // 返修出库单/出库申请单上报
                List<ReportMesOrderResult> collect = orderDetls.stream().map(orderDetl ->
                        new ReportMesOrderResult(orderDetl.getBrand(), orderDetl.getQty().intValue() == 1 ? 2 : 3)).collect(Collectors.toList());
                JSONObject object = new JSONObject();
                object.put("outboundNumber",order.getOrderNo());
                object.put("outBounds",collect);
                String body = JSON.toJSONString(object);
                String response = "";
                boolean success = false;
                try {
                    response = new HttpHandler.Builder()
                            .setUri(MesConstant.MES_ZL_IP_PORT)
                            .setPath(MesConstant.MES_ZL_SB_URL)
                            .setJson(body)
                            .build()
                            .doPost();
                    JSONObject jsonObject = JSON.parseObject(response);
                    Integer code = jsonObject.getInteger("code");
                    Boolean state = jsonObject.getBoolean("state");
                    if (code == 200 && state) {
                        success = true;
                        // 修改订单状态 4.完成 ===>> 6.已上报
                        if (!orderService.updateSettle(order.getId(), 6L, null)) {
                            throw new CoolException("更新订单上报完成失败:" + order);
                        }
                    } else {
                        log.error("请求质量MES出库单上报接口失败!!!url:{};request:{};response:{}", MesConstant.MES_ZL_IP_PORT+MesConstant.MES_ZL_SB_URL, JSON.toJSONString(collect), response);
                    }
                } catch (Exception e) {
                    log.error("请求质量MES出库单上报接口异常", e);
                } finally {
                    try {
                        // 保存接口日志
                        apiLogService.save(
                                "请求质量MES出库单上报接口",
                                MesConstant.MES_ZL_IP_PORT + MesConstant.MES_ZL_SB_URL,
                                null,
                                "127.0.0.1",
                                JSON.toJSONString(collect),
                                response,
                                success
                        );
                    } catch (Exception e) { log.error("", e); }
                }
            }
        }
        // 入库完成上报
src/main/java/com/zy/common/constant/MesConstant.java
@@ -13,11 +13,20 @@
    public static final String PAKOUT_URL = "wmsFinprd/api/zy/v1/packOut/sendList";
    // MES接口IP地址
    public static final String MES_IP_PORT = "http://192.168.14.249:8008";
    // MES仓储IP地址
    public static final String MES_CC_IP_PORT = "http://172.22.152.3:8156";
    // 给MES推送一楼反修为待判
    public static final String MES_DP_URL = "/api/Task/InventoryTask";
    // 给仓储MES推送一楼反修为待判
    public static final String MES_CC_DP_URL = "/planCutRolling/v1/updateBatchHandleType";
    // 给仓储MES推送盘点出库结果
    public static final String MES_CC_SB_URL = "/planCutRolling/v1/updateBatchHandleType";
    // MES质量IP地址
    public static final String MES_ZL_IP_PORT = "http://172.22.152.3:8157";
    // 给质量MES推送 成品/反修品 出库结果
    public static final String MES_ZL_SB_URL = "/qualityOutboundOrder/v1/confirmReceipt";
    // 给MES推送出库单结果
    public static final String MES_CKSB_URL = "/api/Task/InventoryTask";