自动化立体仓库 - WMS系统
pang.jiabao
2024-10-19 9e540bc4c5659835f29c0791d5bd21f1558ce115
出库到底出库口呼叫agv接货
1个文件已修改
3个文件已添加
195 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/entity/WrkMast.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/AgvScheduler.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/handler/AgvHandler.java 138 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/constant/AgvApiConstant.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/WrkMast.java
@@ -204,7 +204,7 @@
    @TableField("exp_time")
    private Double expTime;
    @ApiModelProperty(value= "")
    @ApiModelProperty(value= "出库呼叫agv接货,0默认,1呼叫成功")
    @TableField("ref_wrkno")
    private Double refWrkno;
src/main/java/com/zy/asrs/task/AgvScheduler.java
New file
@@ -0,0 +1,41 @@
package com.zy.asrs.task;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.zy.asrs.entity.BasDevp;
import com.zy.asrs.service.BasDevpService;
import com.zy.asrs.task.handler.AgvHandler;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.List;
/**
 * @author pang.jiabao
 * @description AGV相关定时任务
 * @createDate 2024/10/19 9:30
 */
@Component
public class AgvScheduler {
    @Resource
    private BasDevpService basDevpService;
    @Resource
    private AgvHandler agvHandller;
    // 出库呼叫agv接货
    // 223或123有出库的任务则呼叫agv接货
    @Scheduled(cron = "0/3 * * * * ? ")
    private void outboundCallAgvScheduler() {
        // 获取两个站点有物,有工作号
        List<BasDevp> basDevps = basDevpService.selectList(new EntityWrapper<BasDevp>().in("dev_no", 223, 123).eq("loading", "Y").ne("wrk_no", 0));
        for (BasDevp basDevp : basDevps) {
            agvHandller.outboundCallAgvHandller(basDevp.getWrkNo());
        }
    }
}
src/main/java/com/zy/asrs/task/handler/AgvHandler.java
New file
@@ -0,0 +1,138 @@
package com.zy.asrs.task.handler;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.Cools;
import com.zy.asrs.entity.Order;
import com.zy.asrs.entity.WrkDetl;
import com.zy.asrs.entity.WrkMast;
import com.zy.asrs.service.ApiLogService;
import com.zy.asrs.service.OrderService;
import com.zy.asrs.service.WrkDetlService;
import com.zy.asrs.service.WrkMastService;
import com.zy.common.constant.AgvApiConstant;
import com.zy.common.utils.HttpHandler;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * @author pang.jiabao
 * @description AGV相关定时任务处理
 * @createDate 2024/10/19 10:05
 */
@Slf4j
@Service
public class AgvHandler {
    @Resource
    private WrkMastService wrkMastService;
    @Resource
    private WrkDetlService wrkDetlService;
    @Resource
    private ApiLogService apiLogService;
    @Resource
    private OrderService orderService;
    /**
     * 出库呼叫agv接货
     */
    public void outboundCallAgvHandller(Integer wrkNo) {
        WrkMast wrkMast = wrkMastService.selectById(wrkNo);
        if (wrkMast == null) {
            log.error("出库呼叫agv接货,{}工作号没有找到工作档", wrkNo);
            return;
        }
        // 已经呼叫过agv接货则跳过 WrkMast表中ref_wrkno变量用做标识 0未呼叫,1呼叫成功
        if (wrkMast.getIoType() != 101 && wrkMast.getIoType() != 103 || wrkMast.getRefWrkno() == 1) {
            return;
        }
        // 工作明细
        List<WrkDetl> wrkDetls = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkNo));
        // 调用结果
        boolean success = false;
        // 构造请求头
        Map<String, Object> headers = new HashMap<>();
        headers.put("Content-Type", "application/json;charset=UTF-8");
        // 构造请求体
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("trayCode", wrkMast.getBarcode()); // 托盘条码
        jsonObject.put("taskId", wrkMast.getWrkNo()); // 任务id
        // 保存一个订单明细的单据编号
        String orderNo = "";
        JSONArray jsonArray = new JSONArray();
        for (WrkDetl wrkDetl : wrkDetls) {
            JSONObject jsonObject1 = new JSONObject();
            jsonObject1.put("num", wrkDetl.getAnfme()); // 数量
            jsonObject1.put("itemId", wrkDetl.getMatnr()); // 物料ID
            jsonObject1.put("itemCode", wrkDetl.getModel()); // 物料Code
            orderNo = wrkDetl.getOrderNo();
            jsonArray.add(jsonObject1);
        }
        jsonObject.put("basicList", jsonArray); // 物料列表
        Order order = orderService.selectOne(new EntityWrapper<Order>().eq("order_no", orderNo));
        if (order != null) {
            jsonObject.put("erpCode", orderNo); // 工单号
            jsonObject.put("outBoundtype", order.getDocType$()); // 入出库单据类型
        }
        String body = jsonObject.toString();
        String response = "";
        try {
            response = new HttpHandler.Builder()
                    .setUri(AgvApiConstant.AGV_IP_PORT)
                    .setPath(AgvApiConstant.OUTBOUND_CALL_AGV_PATH)
                    .setHeaders(headers)
                    .setJson(body)
                    .build()
                    .doPost();
            if (!Cools.isEmpty(response)) {
                JSONObject jsonObject1 = JSONObject.parseObject(response);
                if ((Integer) jsonObject1.get("code") == 200) {
                    success = true;
                    wrkMast.setRefWrkno(1.0);
                    wrkMastService.updateById(wrkMast);
                } else {
                    log.error("出库呼叫agv接货接口异常接口失败!!!url:{};request:{};response:{}", AgvApiConstant.AGV_IP_PORT + AgvApiConstant.OUTBOUND_CALL_AGV_PATH, body, response);
                }
            } else {
                log.error("出库呼叫agv接货接口异常接口异常!!!url:{};request:{};response:{}", AgvApiConstant.AGV_IP_PORT + AgvApiConstant.OUTBOUND_CALL_AGV_PATH, body, response);
            }
        } catch (Exception e) {
            log.error("出库呼叫agv接货接口异常:{}", e.getMessage());
        } finally {
            try {
                // 保存接口日志
                apiLogService.save(
                        "出库呼叫agv接货",
                        AgvApiConstant.AGV_IP_PORT + AgvApiConstant.OUTBOUND_CALL_AGV_PATH,
                        null,
                        "127.0.0.1",
                        jsonObject.toJSONString(),
                        response,
                        success
                );
            } catch (Exception e) {
                log.error("出库呼叫agv接货接口日志异常", e);
            }
        }
    }
}
src/main/java/com/zy/common/constant/AgvApiConstant.java
New file
@@ -0,0 +1,14 @@
package com.zy.common.constant;
/**
 * @author pang.jiabao
 * @description AGV相关对接地址
 * @createDate 2024/10/19 10:27
 */
public class AgvApiConstant {
    public static final String AGV_IP_PORT = "http://192.168.99.130:80";
    public static final String OUTBOUND_CALL_AGV_PATH = "/wms/api/addOutBoundType";
}