自动化立体仓库 - WMS系统
zyh
22 小时以前 3bf6f972604761c9ac59a2cb9ea01eeacaec2189
src/main/java/com/zy/asrs/task/AGVTaskReportScheduler.java
@@ -1,14 +1,19 @@
package com.zy.asrs.task;
import com.alibaba.excel.util.StringUtils;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.Cools;
import com.core.exception.CoolException;
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.mes.MesReturn;
import com.zy.asrs.mapper.CanFinMapper;
import com.zy.asrs.service.OrderPakoutService;
import com.zy.asrs.service.TaskService;
import com.zy.asrs.service.WrkDetlService;
import com.zy.asrs.service.WrkMastService;
import com.zy.asrs.service.impl.BasDevpServiceImpl;
import com.zy.asrs.service.impl.RcsServiceImpl;
import com.zy.asrs.task.core.ReturnT;
import com.zy.asrs.task.handler.AGVTaskReportHandler;
import org.slf4j.Logger;
@@ -39,12 +44,21 @@
    private BasDevpServiceImpl basDevpService;
    @Autowired
    private OrderPakoutService orderPakoutService;
    @Autowired
    private CanFinMapper canFinMapper;
    @Value("${mes.url}")
    private String MES_URL;
    /**
     * 满板和空板出库任务,出到输送线后创建AGV搬运任务
     */
    @Scheduled(cron = "0/3 * * * * ? ")
    private void createAGVTask() {
        try {
            Thread.sleep(50);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
        if (!switchErpReportOld) {
            return;
        }
@@ -71,27 +85,25 @@
                // 保存工作档
                Task task = new Task();
                Date date = new Date();
                String TaskNo = wrkMast.getWrkNo() + "aa" + date.getTime();
                String TaskNo = wrkMast.getUserNo();
                String taskType = "AGV";
                List<WrkDetl> wrkDetls = wrkDetlService.selectByWrkNo(wrkMast.getWrkNo());
                if (wrkMast.getIoType()!=110){
                    if (wrkDetls != null && !Cools.isEmpty(wrkDetls.get(0).getOrderNo())){
                        TaskNo = wrkDetls.get(0).getOrderNo();
                        taskType = "KB-AGV";
                if (wrkMast.getIoType()==110){
                    if (TaskNo == null){
                        TaskNo = 55555 + "aa" + date.getTime();
                    }
                    taskType = "ZX-AGV-08-1";
                }else{
                    if (wrkDetls != null && !Cools.isEmpty(wrkDetls.get(0).getOrderNo())){
                        OrderPakout orderPakout = orderPakoutService.selectByNo(wrkDetls.get(0).getOrderNo());
                        TaskNo = wrkDetls.get(0).getOrderNo();
                        if (orderPakout.getDocType()==11){
                            taskType = "PP-AGV";
                        }else if (orderPakout.getDocType()==12){
                            taskType = "ZP-AGV";
                        }
                    }
                }
                task.setWrkNo(wrkMast.getWrkNo())
@@ -116,6 +128,24 @@
                if (!taskService.insert(task)) {
                    throw new CoolException("保存工作档失败");
                } else {
                    if (!wrkMast.getBarcode().isEmpty() && !wrkMast.getMemo().isEmpty()) {
                        JSONObject map = new JSONObject();
                        map.put("orderNo", TaskNo);
                        map.put("barCode", wrkMast.getBarcode());
                        map.put("staNo", wrkMast.getStaNo());
                        log.info("本次出库托盘:{}, 目标站{}", wrkMast.getBarcode(), wrkMast.getMemo());
                        String url = "ReceiveFinishedPalletCode";
                        String URL = MES_URL + url;
                        String response = RcsServiceImpl.sendPost(URL, JSONObject.toJSONString(map));
                        if (!StringUtils.isEmpty(response) && response.contains("Success")){
                            MesReturn mesReturn = JSONObject.parseObject(response, MesReturn.class);
                            if("1".equals(mesReturn.getSuccess())) {
                                log.info("上报完成 ==> 本次出库托盘:{}, 目标站{}", wrkMast.getBarcode(), wrkMast.getMemo());
                            }else {
                                log.error("上报失败 ==> 本次出库托盘:{}, 目标站{}", wrkMast.getBarcode(), wrkMast.getMemo());
                            }
                        }
                    }
                    wrkMast.setWrkSts(31L);//31.AGV搬运任务创建成功
                    wrkMast.setModiTime(date);
                    wrkMastService.updateById(wrkMast);
@@ -127,8 +157,13 @@
    /**
     * AGV 任务下发接口,定时给AGV下发任务
     */
    @Scheduled(cron = "0/3 * * * * ? ")
    @Scheduled(cron = "0/5 * * * * ? ")
    private void execute() {
        try {
            Thread.sleep(50);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
        if (!switchErpReportOld) {
            return;
        }
@@ -136,6 +171,50 @@
        List<Task> wrkSts = taskService.selectList(new EntityWrapper<Task>().eq("wrk_sts", 301).orderBy("appe_time"));
        if (wrkSts != null && !wrkSts.isEmpty()) {
            for (Task task : wrkSts) {
                if (task.getStaNo().equals("307") && !task.getTaskType().equals("AGV补空料架")){
                    //筛选全部还未完成的出库任务
                    List<OrderPakout> orderPakouts = orderPakoutService.selectList(new EntityWrapper<OrderPakout>()
                            .in("settle", 1, 2)     // 1表示还未开始,2表示正在执行
                            .eq("doc_type", 12)
                            .orderBy("order_time", true));
                    if (!orderPakouts.isEmpty()) {
                        //获取第一条入库单
                        OrderPakout orderPakout = orderPakouts.get(0);
                        // 如果第一条还未开始的出库任务时间早于第一条未完成的入库任务时间,跳过,不执行
                        if (orderPakout.getCreateTime().getTime() < task.getWrkDate().getTime()){
                            continue;
                        }
                    }
                }
//                List<CanFin> canFinList = canFinMapper.selectList(new EntityWrapper<CanFin>()
//                        .orderBy("apply_time", true)
//                );
//                if (!canFinList.isEmpty()) {
//                    CanFin firstCanFin = canFinList.get(0);
//                    // 检查 InNo 是否为空
//                    if (firstCanFin.getInNo() != null) {
//                        // 检查当前任务是否与转序任务相关
//                        if (task.getStaNo().equals("307")){
//                            List<WrkMast> wrkMasts1 = wrkMastService.selectList(new EntityWrapper<WrkMast>()
//                                    .in("io_type", 1, 10));
//                            BasDevp basDevp = basDevpService.checkSiteStatus(Integer.parseInt(task.getStaNo()));
//                            if (basDevp.getWrkNo() != 0 || !wrkMasts1.isEmpty()){
//                                continue;
//                            }
//                        }
//                    }
//                    if (firstCanFin.getOutNo() != null){
//                        if (!task.getSourceStaNo().equals("307")){
//                            if (!task.getTaskType().equals("AGV补空料架")){
//                                continue;
//                            }
//                        }
//                    }
//                }
                //查询是否有正在作业的源站和目标站有一样的agv搬运任务
                //如果有则跳过本次agv搬运任务下发
                Task task1 = taskService.selectOne(new EntityWrapper<Task>()