自动化立体仓库 - WMS系统
zyh
23 小时以前 701542ac0a90cf0e3a0a81ec2bb8066b5de68e75
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.BasDevp;
import com.zy.asrs.entity.Task;
import com.zy.asrs.entity.WrkMast;
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;
@@ -32,9 +37,17 @@
    @Value("${hik.switch}")
    private Boolean switchErpReportOld;
    @Autowired
    private WrkDetlService wrkDetlService;
    @Autowired
    private WrkMastService wrkMastService;
    @Autowired
    private BasDevpServiceImpl basDevpService;
    @Autowired
    private OrderPakoutService orderPakoutService;
    @Autowired
    private CanFinMapper canFinMapper;
    @Value("${mes.url}")
    private String MES_URL;
    /**
     * 满板和空板出库任务,出到输送线后创建AGV搬运任务
@@ -67,13 +80,31 @@
                // 保存工作档
                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){
                    taskType = "ZX-AGV-08-1";
                }else{
                    if (wrkDetls != null && !Cools.isEmpty(wrkDetls.get(0).getOrderNo())){
                        TaskNo = wrkDetls.get(0).getOrderNo();
//                        OrderPakout orderPakout = orderPakoutService.selectByNo(wrkDetls.get(0).getOrderNo());
//                        if (orderPakout.getDocType()==11){
//                            taskType = "PP-AGV";
//                        }else if (orderPakout.getDocType()==12){
//                            taskType = "ZP-AGV";
//                        }
                        taskType = "ZP-AGV";
                    }
                }
                task.setWrkNo(wrkMast.getWrkNo())
                        .setTaskNo(TaskNo)
                        .setIoTime(date)
                        .setWrkSts(301L) // 工作状态:301.任务下发
                        .setIoType(ioType) // 入出库状态: 3.站到站  4.站到区域
                        .setTaskType("agv")
                        .setTaskType(taskType)
                        .setIoPri(10D)
                        .setFullPlt("Y") // 满板:Y
                        .setPicking("N") // 拣料
@@ -90,6 +121,24 @@
                if (!taskService.insert(task)) {
                    throw new CoolException("保存工作档失败");
                } else {
                    if (!wrkMast.getBarcode().isEmpty() && !wrkMast.getMemo().isEmpty()) {
                        JSONObject map = new JSONObject();
                        map.put("taskNo", 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);
@@ -101,7 +150,7 @@
    /**
     * AGV 任务下发接口,定时给AGV下发任务
     */
    @Scheduled(cron = "0/3 * * * * ? ")
    @Scheduled(cron = "0/5 * * * * ? ")
    private void execute() {
        if (!switchErpReportOld) {
            return;
@@ -110,6 +159,45 @@
        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.getTaskType().equals("AGV空料架回缓存区") && !task.getTaskType().equals("AGV补空料架")){
                    if((task.getStaNo().equals("402") || task.getStaNo().equals("401")) && task.getTaskType().equals("")){
                        //筛选全部还未完成的出库任务
                        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("401") || task.getStaNo().equals("402")){
//                            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;
//                            }
//
//                        }
//                    }
//                }
                //查询是否有正在作业的源站和目标站有一样的agv搬运任务
                //如果有则跳过本次agv搬运任务下发
                Task task1 = taskService.selectOne(new EntityWrapper<Task>()
@@ -124,6 +212,7 @@
                    //如果是接驳站点则需要判断接驳站点是否有空料架
                    //如果有空料架需要判断是否有出库任务
                    //有出库任务则禁止下发本次搬运任务
                    if (task.getStaNo().equals("401") || task.getStaNo().equals("402") || task.getStaNo().equals("307")) {
                        flag = false;
                        BasDevp basDevp = basDevpService.checkSiteStatus(Integer.parseInt(task.getStaNo()));