自动化立体仓库 - WMS系统
zyx
2024-03-27 0cdbbb60b9549be1c99ff7d5a37936dadac61649
AGV任务下发
8个文件已修改
208 ■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/AgvWrkMastController.java 53 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/param/AgvTaskCreateParam.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/param/AgvTaskParam.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/AgvWrkMastService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/AgvWrkMastServiceImp.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/AgvWrkMastScheduler.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/OrderSyncScheduler.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/handler/AgvWrkMastHandler.java 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/AgvWrkMastController.java
@@ -17,7 +17,6 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.io.IOException;
import java.util.*;
@RestController
@@ -158,30 +157,30 @@
        return R.ok();
    }
    @RequestMapping(value = "/wrkMast/startWrk/auth")
    @ManagerAuth(memo = "工作档开始任务")
    public R startWrk(@RequestParam String param) throws IOException {
        List<AgvWrkMast> agvWrkMastList = JSONArray.parseArray(param, AgvWrkMast.class);
        if (Cools.isEmpty(agvWrkMastList)){
            return R.error();
        }
        int startWrkCode = agvWrkMastService.startWrk(agvWrkMastList,"putaway");
        int code = agvWrkMastService.containerMoveIn(agvWrkMastList);
        if(code == 0){
            agvWrkMastList.forEach(agvWrkMast -> {
                //202.RCS取货中
                agvWrkMast.setWrkSts((long)202);
                //修改AGV入库通知档状态入出状态为Y
                agvWaitPakinService.updateIoStatus(agvWrkMast.getWrkNo(),"Y");
            });
            agvWrkMastService.updateBatchById(agvWrkMastList);
            return R.ok("任务启动成功");
        }
        return R.error("任务启动失败");
    }
//    @RequestMapping(value = "/wrkMast/startWrk/auth")
//    @ManagerAuth(memo = "工作档开始任务")
//    public R startWrk(@RequestParam String param) throws IOException {
//        List<AgvWrkMast> agvWrkMastList = JSONArray.parseArray(param, AgvWrkMast.class);
//        if (Cools.isEmpty(agvWrkMastList)){
//            return R.error();
//        }
//        int startWrkCode = agvWrkMastService.startWrk(agvWrkMastList,"putaway");
//
//        int code = agvWrkMastService.containerMoveIn(agvWrkMastList);
//
//        if(code == 0){
//            agvWrkMastList.forEach(agvWrkMast -> {
//                //202.RCS取货中
//                agvWrkMast.setWrkSts((long)202);
//                //修改AGV入库通知档状态入出状态为Y
//                agvWaitPakinService.updateIoStatus(agvWrkMast.getWrkNo(),"Y");
//            });
//            agvWrkMastService.updateBatchById(agvWrkMastList);
//
//            return R.ok("任务启动成功");
//        }
//
//        return R.error("任务启动失败");
//
//    }
}
src/main/java/com/zy/asrs/entity/param/AgvTaskCreateParam.java
@@ -13,17 +13,20 @@
    private static final long serialVersionUID = 1L;
    //任务类型  putaway:上架; carry:搬运,统指出库、移库、点到点搬运等; scan:扫描盘点; weight:称重盘点; rfid:rfid盘点
    private String taskType;
    //任务号
    private String reqCode;
    //任务组
    private String taskGroupCode;
    //任务类型
    private String taskTyp;
    //任务组优先级
    private int groupPriority;
//    //任务组
//    private String taskGroupCode;
//
//    //任务组优先级
//    private int groupPriority;
    //任务列表
    private List<AgvTaskParam> tasks;
    private List<AgvTaskParam> positionCodePath;
}
src/main/java/com/zy/asrs/entity/param/AgvTaskParam.java
@@ -4,10 +4,13 @@
@Data
public class AgvTaskParam {
    //业务任务号
    private String taskCode;
    //任务优先级
    private int taskPriority;
    //任务描述
    private AgvTaskkDescribeParam taskDescribe;
    //位置编号
    private String positionCode;
    //位置类型说明 00表示位置编号
    private String type;
    public AgvTaskParam(String positionCode){
        this.positionCode = positionCode;
        this.type = "00";
    }
}
src/main/java/com/zy/asrs/service/AgvWrkMastService.java
@@ -10,7 +10,7 @@
    public void updateWrkStsByWrkNo(int wrkNo, long wrkSts);
    public int startWrk(List<AgvWrkMast> agvWrkMastList, String taskType) throws IOException;
    public int startWrk(AgvWrkMast agvWrkMast) throws IOException;
    public int containerMoveIn(List<AgvWrkMast> agvWrkMastList) throws IOException;
src/main/java/com/zy/asrs/service/impl/AgvWrkMastServiceImp.java
@@ -10,7 +10,6 @@
import com.zy.asrs.entity.AgvWrkMast;
import com.zy.asrs.entity.param.AgvTaskCreateParam;
import com.zy.asrs.entity.param.AgvTaskParam;
import com.zy.asrs.entity.param.AgvTaskkDescribeParam;
import com.zy.asrs.mapper.AgvWrkMastMapper;
import com.zy.asrs.service.*;
import com.zy.common.utils.HttpHandler;
@@ -20,11 +19,7 @@
import org.springframework.stereotype.Service;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.*;
@Service
@Slf4j
@@ -72,12 +67,12 @@
        return true;
    }
    public int startWrk(List<AgvWrkMast> agvWrkMastList, String taskType) throws IOException {
    public int startWrk(AgvWrkMast agvWrkMast) throws IOException {
        AgvTaskCreateParam agvTaskCreateParam = new AgvTaskCreateParam();
        agvTaskCreateParam.setTaskType(taskType);
        //agvTaskCreateParam.setTaskType(taskType);
        getRequestParam(agvTaskCreateParam,agvWrkMastList);
        getRequestParam(agvTaskCreateParam,agvWrkMast);
        return doHttpRequest(agvTaskCreateParam,"搬运任务下发",url, taskCreatePath,null,"127.0.0.1");
@@ -161,35 +156,23 @@
        }
    }
    private void getRequestParam(AgvTaskCreateParam agvTaskCreateParam,List<AgvWrkMast> agvWrkMastList){
        List<AgvTaskParam> agvTaskParamList = agvWrkMastList.stream().map(agvWrkMast -> {
            AgvTaskParam agvTaskParam = new AgvTaskParam();
            AgvTaskkDescribeParam agvTaskkDescribeParam = new AgvTaskkDescribeParam();
            agvTaskParam.setTaskDescribe(agvTaskkDescribeParam);
            //AgvTaskParam
            if(agvWrkMast.getIoType() == 53 || agvWrkMast.getIoType() == 57){
                agvTaskParam.setTaskCode(-agvWrkMast.getWrkNo() + "");
            }else{
                agvTaskParam.setTaskCode(agvWrkMast.getWrkNo() + "");
            }
    private void getRequestParam(AgvTaskCreateParam agvTaskCreateParam,AgvWrkMast agvWrkMast){
            agvTaskParam.setTaskPriority(agvWrkMast.getIoPri().intValue());
        List<AgvTaskParam> agvTaskParamList = Arrays.asList(
                //起始位
                new AgvTaskParam(agvWrkMast.getSourceLocNo()),
                //目标位
                new AgvTaskParam(agvWrkMast.getLocNo()));
            //AgvTaskkDescribeParam
            if(agvWrkMast.getSourceLocNo().contains("CS") || agvWrkMast.getSourceLocNo().contains("SK")){
                agvTaskkDescribeParam.setFromLocationCode(agvWrkMast.getSourceLocNo());
            }
//        //起始位
//        agvTaskParamList.add(new AgvTaskParam(agvWrkMast.getSourceLocNo()));
//        //目标位
//        agvTaskParamList.add(new AgvTaskParam(agvWrkMast.getLocNo()));
            if(agvWrkMast.getLocNo().contains("SK")){
                agvTaskkDescribeParam.setToLocationCode(agvWrkMast.getLocNo());
            }else {
                agvTaskkDescribeParam.setToStationCode(agvWrkMast.getLocNo());
            }
            agvTaskkDescribeParam.setContainerCode(agvWrkMast.getBarcode());
            return agvTaskParam;
        }).collect(Collectors.toList());
        agvTaskCreateParam.setReqCode(agvWrkMast.getWrkNo().toString());
        agvTaskCreateParam.setTaskTyp("F01");
        agvTaskCreateParam.setPositionCodePath(agvTaskParamList);
        agvTaskCreateParam.setTasks(agvTaskParamList);
    }
    private int doHttpRequest(Object requestParam, String namespace, String url, String path, String appkey, String ip){
src/main/java/com/zy/asrs/task/AgvWrkMastScheduler.java
@@ -86,11 +86,13 @@
                .or().eq("io_type", 57)).getRecords();
        if(!Cools.isEmpty(agvWrkMastList)){
            agvWrkMastList.forEach(agvWrkMast -> {
            try {
                ReturnT<String> returnT = agvWrkMastHandler.startPutWayWrk(agvWrkMastList);
                    agvWrkMastHandler.startPutWayWrk(agvWrkMast);
            } catch (IOException e) {
                log.error(e.getMessage());
            }
            });
        }
    }
@@ -111,11 +113,13 @@
                        .or().eq("io_type", 107)).getRecords();
        if(!Cools.isEmpty(agvWrkMastList)){
            agvWrkMastList.forEach(agvWrkMast -> {
            try {
                ReturnT<String> returnT = agvWrkMastHandler.startCarryWrk(agvWrkMastList);
                    agvWrkMastHandler.startPutWayWrk(agvWrkMast);
            } catch (IOException e) {
                log.error(e.getMessage());
            }
            });
        }
    }
src/main/java/com/zy/asrs/task/OrderSyncScheduler.java
@@ -39,7 +39,7 @@
        }
    }
    @Scheduled(cron = "0/5 * * * * ? ")
    //@Scheduled(cron = "0/5 * * * * ? ")
    @Async("orderThreadPool")
    public void completeAndReport(){
        String erpReport = Parameter.get().getErpReport();
src/main/java/com/zy/asrs/task/handler/AgvWrkMastHandler.java
@@ -146,55 +146,47 @@
    }
    @Transactional
    public ReturnT<String> startPutWayWrk(List<AgvWrkMast> agvWrkMastList) throws IOException {
    public ReturnT<String> startPutWayWrk(AgvWrkMast agvWrkMast) throws IOException {
        //下发任务
        int startWrkCode = agvWrkMastService.startWrk(agvWrkMastList,"putaway");
        int startWrkCode = agvWrkMastService.startWrk(agvWrkMast);
        if(startWrkCode != 0){
            throw new CoolException("任务下发失败");
        }
        //下发容器入场指令 (缓存货架)
        int code = agvWrkMastService.containerMoveIn(agvWrkMastList);
        if(code == 0){
            for(AgvWrkMast agvWrkMast : agvWrkMastList){
                //202.RCS取货中
                agvWrkMast.setWrkSts(202L);
                agvWrkMastService.updateById(agvWrkMast);
                if(agvWrkMast.getIoType() == 1){
                    //修改AGV入库通知档状态入出状态为Y
                    agvWaitPakinService.updateIoStatus(agvWrkMast.getWrkNo(),"Y");
                }
            }
            return SUCCESS;
        }
        return FAIL;
    }
    @Transactional
    public ReturnT<String> startCarryWrk(List<AgvWrkMast> agvWrkMastList) throws IOException {
        //log.info(agvWrkMastList.toString());
        //任务过滤,过滤掉已存在相同目标库位的工作档
        //agvWrkMastList = filter(agvWrkMastList);
        int code = agvWrkMastService.startWrk(agvWrkMastList,"carry");
        //log.info(agvWrkMastList.toString());
        if (Cools.isEmpty(agvWrkMastList)){
            return SUCCESS;
        }
        if(code == 0){
            agvWrkMastList.forEach(agvWrkMast -> {
                //202.RCS取货中
                agvWrkMast.setWrkSts(202L);
                agvWrkMastService.updateById(agvWrkMast);
            });
            //agvWrkMastService.updateBatchById(agvWrkMastList);
            return SUCCESS;
        }
        return FAIL;
    }
//    @Transactional
//    public ReturnT<String> startCarryWrk(AgvWrkMast agvWrkMast) throws IOException {
//        //log.info(agvWrkMastList.toString());
//        //任务过滤,过滤掉已存在相同目标库位的工作档
//        //agvWrkMastList = filter(agvWrkMastList);
//        int code = agvWrkMastService.startWrk(agvWrkMast);
//        //log.info(agvWrkMastList.toString());
//        if (Cools.isEmpty(agvWrkMastList)){
//            return SUCCESS;
//        }
//        if(code == 0){
//            agvWrkMastList.forEach(agvWrkMast -> {
//                //202.RCS取货中
//                agvWrkMast.setWrkSts(202L);
//                agvWrkMastService.updateById(agvWrkMast);
//            });
//            //agvWrkMastService.updateBatchById(agvWrkMastList);
//
//            return SUCCESS;
//        }
//
//        return FAIL;
//    }
    @Synchronized
    @Transactional