自动化立体仓库 - WMS系统
#
pang.jiabao
2024-08-06 2ff79b71d902e733a0cf0d70052ace24fa1c479e
src/main/java/com/zy/asrs/task/handler/GhlnHandler.java
@@ -9,8 +9,6 @@
import com.zy.asrs.entity.WrkMast;
import com.zy.asrs.service.*;
import com.zy.asrs.task.core.ReturnT;
import com.zy.common.constant.MesConstant;
import com.zy.common.constant.OpenApiAddressConstant;
import com.zy.common.utils.HttpHandler;
import lombok.extern.slf4j.Slf4j;
@@ -20,7 +18,9 @@
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
 * @author pang.jiabao
@@ -48,96 +48,6 @@
    @Resource
    private MatService matService;
    /**
     * 出库到达出库目标站时,调用AGV开放出库接口
     */
    public void sendOutboundTaskToAGV() {
        // 获取agv出库站点信息,并判断站点状态
        BasDevp basDevp = basDevpService.selectOne(new EntityWrapper<BasDevp>().eq("dev_no", 305));
        if (basDevp != null && basDevp.getWrkNo() != 0 && basDevp.getOutEnable().equals("Y")) {
            // 判断是出库任务
            WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", basDevp.getWrkNo())
                    .eq("plt_type",0));
            List<WrkDetl> wrkDetls = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", basDevp.getWrkNo()));
            if (wrkMast != null && wrkMast.getIoType() == 101 && !wrkDetls.isEmpty()) {
                // 推送出库信息给agv
                sendTaskToAgv(wrkMast,wrkDetls);
            }
        }
    }
    private void pushStaNoToGwcs(Integer palletizingNo, Integer staNo, Integer workNo) {
    }
    /**
     * 调用AGV出库接口
     * @param wrkMast 工作主档
     * @param wrkDetls 工作档明细
     */
    private void sendTaskToAgv(WrkMast wrkMast, List<WrkDetl> wrkDetls) {
        // 调用结果
        boolean success = false;
        // 构造请求头
        Map<String,Object> headers = new HashMap<>();
        headers.put("Content-Type","application/json;charset=UTF-8");
        WrkDetl wrkDetl = wrkDetls.get(0);
        // 构造请求体
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("TaskNo", wrkMast.getWrkNo()); // 任务号
        jsonObject.put("Address", ""); // 出库口
        jsonObject.put("Model", wrkDetl.getModel()); // 型号
        jsonObject.put("Batch", wrkDetl.getBatch()); // 批次
        jsonObject.put("Dimension", wrkDetl.getSpecs()); // 规格
        jsonObject.put("Weight", wrkDetl.getWeight()); // 重量
        jsonObject.put("ProductionDate", wrkDetl.getManuDate()); // 生产日期
        String body = jsonObject.toJSONString();
        String response = "";
        try {
            response = new HttpHandler.Builder()
                    .setUri(OpenApiAddressConstant.OUT_TO_AGV_IP)
                    .setPath(OpenApiAddressConstant.OUT_TO_AGV_URL)
                    .setHeaders(headers)
                    .setJson(body)
                    .build()
                    .doPost();
            if (!Cools.isEmpty(response)) {
                JSONObject jsonObject1 = JSONObject.parseObject(response);
                if ((Integer) jsonObject1.get("Code") == 200){
                    success = true;
                }
            } else {
                log.error("出库请求agv接口异常接口失败!!!url:{};request:{};response:{}", MesConstant.URL + MesConstant.PAKIN_URL, body, response);
            }
        } catch (Exception e) {
            log.error("出库请求agv接口异常:{}", e.getMessage());
        } finally {
            if (success) {
                wrkMast.setPltType(1); // 是否成功给agv出库接口下发过命令,避免重复请求
                wrkMastService.updateById(wrkMast);
            }
            try {
                // 保存接口日志
                apiLogService.save(
                        "出库请求agv",
                        MesConstant.URL + MesConstant.PAKIN_URL,
                        null,
                        "127.0.0.1",
                        jsonObject.toJSONString(),
                        response,
                        success
                );
            } catch (Exception e) {
                log.error("保存出库请求agv接口日志异常", e);
            }
        }
    }
    /**
     * 调用金蝶同步物料接口,增量同步每小时产生的新物料
@@ -231,4 +141,71 @@
            }
        }
    }
    /**
     * 到达出库口,呼叫agv
     */
    public void OutboundCallAGV() {
        BasDevp basDevp = basDevpService.selectOne(new EntityWrapper<BasDevp>().eq("dev_no", 305));
        if (basDevp.getWrkNo() > 6000 && basDevp.getWrkNo() <= 9000 && basDevp.getLoading().equals("Y") && basDevp.getAutoing().equals("Y")
        &&basDevp.getOutEnable().equals("Y")) { // 出库工作档
            WrkMast wrkMast = wrkMastService.selectById(basDevp.getWrkNo());
            if(wrkMast.getWhsType() == null) {
                WrkDetl wrkDetl = wrkDetlService.selectOne(new EntityWrapper<WrkDetl>().eq("wrk_no", basDevp.getWrkNo()));
                // 调用结果
                boolean success = false;
                // 构造请求头
                Map<String,Object> headers = new HashMap<>();
                headers.put("Content-Type","application/json;charset=UTF-8");
                // 构造请求体
                JSONObject jsonObject = new JSONObject();
                jsonObject.put("matnr", wrkDetl.getMatnr()); // 物料编码
                jsonObject.put("model", wrkDetl.getModel()); // 型号
                jsonObject.put("batch", wrkDetl.getBatch()); // 批次
                jsonObject.put("specs", wrkDetl.getSpecs()); // 膜类型
                jsonObject.put("manuDate", wrkDetl.getManuDate()); // 生产日期
                jsonObject.put("length", wrkDetl.getLength()+""); // 长
                jsonObject.put("weight", wrkDetl.getWeight()+""); // 宽
                jsonObject.put("volume", wrkDetl.getVolume()+""); // 面积
                String body = jsonObject.toString();
                String response = "";
                try {
                    response = new HttpHandler.Builder()
                            .setUri(OpenApiAddressConstant.AGV_IP)
                            .setPath(OpenApiAddressConstant.CALL_AGV_URL)
                            .setHeaders(headers)
                            .setJson(body)
                            .build()
                            .doPost();
                    if (!Cools.isEmpty(response)) {
                        JSONObject jsonObject1 = JSONObject.parseObject(response);
                        if ((Integer) jsonObject1.get("code") == 200){
                            success = true;
                            wrkMast.setWhsType(1);
                            wrkMastService.updateById(wrkMast);
                        }
                    } else {
                        log.error("出库呼叫agv接口异常接口失败!!!url:{};request:{};response:{}", OpenApiAddressConstant.AGV_IP + OpenApiAddressConstant.CALL_AGV_URL, body, response);
                    }
                } catch (Exception e) {
                    log.error("出库呼叫agv接口异常:{}", e.getMessage());
                } finally {
                    try {
                        // 保存接口日志
                        apiLogService.save(
                                "出库请求agv",
                                OpenApiAddressConstant.AGV_IP + OpenApiAddressConstant.CALL_AGV_URL,
                                null,
                                "127.0.0.1",
                                jsonObject.toJSONString(),
                                response,
                                success
                        );
                    } catch (Exception e) {
                        log.error("出库呼叫agv接口日志异常", e);
                    }
                }
            }
        }
    }
}