自动化立体仓库 - WCS系统
zc
3 天以前 292ad975aaa9f3a4a74ac2a3f89b5cf3bf9a1bbb
初步调试
3个文件已修改
105 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/TVController.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java 50 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/dispatcher/ShuttleDispatchUtils.java 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/TVController.java
@@ -23,6 +23,7 @@
import com.zy.common.model.SearchLocParam;
import com.zy.common.service.CommonService;
import com.zy.common.utils.HttpHandler;
import com.zy.common.utils.RedisUtil;
import com.zy.core.cache.SlaveConnection;
import com.zy.core.enums.SlaveType;
import com.zy.core.model.LedSlave;
@@ -33,6 +34,7 @@
import com.zy.core.thread.LedThread;
import com.zy.core.thread.ShuttleThread;
import com.zy.core.thread.impl.NormalLedThread;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
@@ -47,6 +49,7 @@
/**
 * Created by vincent on 2020/11/16
 */
@Slf4j
@RestController
@RequestMapping("/monitor")
public class TVController {
@@ -66,6 +69,9 @@
    private SlaveProperties slaveProperties;
    @Autowired
    private BasShuttleErrService basShuttleErrService;
    @Autowired
    private RedisUtil redisUtil;
    @Value("${asrs.wmsUrl}")
    private String wmsUrl;
@@ -245,30 +251,13 @@
        if (basDevp.getWrkNo() == null || basDevp.getWrkNo() == 0) {
            return R.ok();
        }
        List<LedCommand> commands = new ArrayList<>();
        Map<String, Object> param = new HashMap<>();
        param.put("taskNo", basDevp.getWrkNo());
        String response = null;
        try {
            response = new HttpHandler.Builder()
                    .setUri(wmsUrl)
                    .setPath("/rpc/led/getTask2")
                    .setJson(JSON.toJSONString(param))
                    .build()
                    .doPost();
        } catch (IOException e) {
            e.printStackTrace();
        Object o = redisUtil.get("LED_" + dev_no);
        if (o != null) {
            log.info("电视机显示:{}",JSONObject.toJSONString(o));
            return R.ok().add(o);
        }
        JSONObject jsonObject = JSON.parseObject(response);
        Integer code = jsonObject.getInteger("code");
        if (code.equals(200)) {
            String data = jsonObject.getString("data");
            List<LedCommand> wrkDetls = JSONArray.parseArray(data, LedCommand.class);
            commands.addAll(wrkDetls);
        } else {
            return R.ok();
        }
        return R.ok().add(commands);
    }
    /**
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -1,6 +1,7 @@
package com.zy.asrs.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.Cools;
@@ -25,10 +26,7 @@
import com.zy.core.model.LiftSlave;
import com.zy.core.model.ShuttleSlave;
import com.zy.core.model.Task;
import com.zy.core.model.command.LiftAssignCommand;
import com.zy.core.model.command.LiftCommand;
import com.zy.core.model.command.ShuttleAssignCommand;
import com.zy.core.model.command.ShuttleCommand;
import com.zy.core.model.command.*;
import com.zy.core.model.protocol.ForkLiftStaProtocol;
import com.zy.core.model.protocol.LiftProtocol;
import com.zy.core.model.protocol.ShuttleProtocol;
@@ -45,6 +43,7 @@
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.io.IOException;
import java.util.*;
/**
@@ -232,6 +231,8 @@
                            wrkMast.setWrkSts(WrkStsType.INBOUND_DEVICE_RUN.sts);
                            wrkMast.setModiTime(new Date());
                            wrkMastService.updateById(wrkMast);
                            setLedData(wrkMast.getWrkNo(), wrkMast.getStaNo());
                        } else if (wrkMast != null && wrkMast.getWrkSts() != WrkStsType.NEW_INBOUND.sts) {
                            continue;
                        }
@@ -328,6 +329,7 @@
                                JSONObject jsonObject = JSON.parseObject(response);
                                Integer code = jsonObject.getInteger("code");
                                if (code.equals(200)) {
                                    setLedData(wrkMast.getWrkNo(), wrkMast.getStaNo());
                                } else {
                                    String msg = jsonObject.getString("msg");
@@ -514,12 +516,39 @@
                        wrkMast.setModiTime(new Date());
                        wrkMast.setShuttleNo(null);
                        wrkMastService.updateById(wrkMast);
                        setLedData(wrkMast.getWrkNo(), wrkMast.getStaNo());
                    }
                }
            }
        }
    }
    private void setLedData(Integer wrkNo, Integer staNo) {
        try {
            List<LedCommand> commands = new ArrayList<>();
            Map<String, Object> param = new HashMap<>();
            param.put("taskNo", wrkNo);
            String response = null;
            response = new HttpHandler.Builder()
                    .setUri(wmsUrl)
                    .setPath("/rpc/led/getTask2")
                    .setJson(JSON.toJSONString(param))
                    .build()
                    .doPost();
            JSONObject jsonObject = JSON.parseObject(response);
            Integer code = jsonObject.getInteger("code");
            if (code.equals(200)) {
                String data = jsonObject.getString("data");
                List<LedCommand> wrkDetls = JSONArray.parseArray(data, LedCommand.class);
                commands.addAll(wrkDetls);
                redisUtil.set("LED_" + staNo, commands, 10);
                log.info("电视机数据设置:{}", data);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    /**
     * 初始化实时地图
@@ -957,7 +986,7 @@
            staProtocol = staProtocol.clone();
            staProtocol.setStaNo(staNo);
            staProtocol.setWorkNo(wrkMast.getMainWrkNo().shortValue());
            staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue());
            boolean result = MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol));
            wrkMast.setWrkSts(WrkStsType.INBOUND_DEVICE_RUN.sts);
@@ -1043,7 +1072,7 @@
                    return false;
                }
            } else if (sourceStaNo == 1012) {
                if (staProtocol.getWorkNo().intValue() != wrkMast.getWrkNo()) {
                if (staProtocol.getFinishWorkNo().intValue() != wrkMast.getWrkNo()) {
                    News.info("{}任务,{}站点,任务号不一致", wrkMast.getWrkNo(), staProtocol.getSiteId());
                    return false;
                }
@@ -1060,7 +1089,7 @@
            } else if (wrkMast.getSourceStaNo() == 1032) {
                locNo = "0200308";
            }
            boolean dispatchShuttle = shuttleDispatchUtils.searchDispatchShuttleS(wrkMast.getWrkNo(), locNo, wrkMast.getLocNo(), "TRANSPORT_LIFT");
            boolean dispatchShuttle = shuttleDispatchUtils.searchDispatchShuttleNoLift(wrkMast.getWrkNo(), locNo, wrkMast.getLocNo(), "TRANSPORT_LIFT");
            if (!dispatchShuttle) {
                News.info("{}任务,调度小车失败", wrkMast.getWrkNo());
                return false;
@@ -1287,10 +1316,10 @@
            Integer sourceLev = liftThread.getLevToStaNo(Utils.getLev(wrkMast.getSourceLocNo()));
            //获取提升机命令
            List<LiftCommand> liftCommands = liftThread.getPalletOutCommand(wrkMast.getMainWrkNo(), sourceLev, wrkMast.getStaNo());
            List<LiftCommand> liftCommands = liftThread.getPalletOutCommand(wrkMast.getWrkNo(), sourceLev, wrkMast.getStaNo());
            LiftCommand liftCommand = liftCommands.get(0);
//            if (wrkMast.getMainWrkNo() != null) {
            liftCommand.setTaskNo(wrkMast.getMainWrkNo());
            liftCommand.setTaskNo(wrkMast.getWrkNo());
//            } else {
//                int deviceWrk = commonService.getWorkNo(8);//生成提升机设备工作号
//                liftCommand.setTaskNo(deviceWrk);//更换随机任务号
@@ -1303,7 +1332,7 @@
            LiftAssignCommand assignCommand = new LiftAssignCommand();
            assignCommand.setCommands(commands);
            assignCommand.setLiftNo(liftProtocol.getLiftNo().shortValue());
            assignCommand.setTaskNo(wrkMast.getMainWrkNo().shortValue());
            assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue());
            assignCommand.setTaskMode(LiftCommandModeType.PALLET_OUT.id.shortValue());
            wrkMast.setWrkSts(WrkStsType.OUTBOUND_LIFT_RUN.sts);
@@ -1312,6 +1341,7 @@
            wrkMast.setModiTime(now);
            if (wrkMastService.updateById(wrkMast)) {
                setLedData(wrkMast.getWrkNo(), wrkMast.getStaNo());
                //下发任务
                liftAction.assignWork(wrkMast.getLiftNo(), assignCommand);
                return false;
src/main/java/com/zy/core/dispatcher/ShuttleDispatchUtils.java
@@ -399,7 +399,7 @@
            }
        }
        //寻找离任务楼层最近的穿梭车(不考虑跨楼层小车移动距离)
        //
        if (!diffLev.isEmpty()) {
            Map<Integer, ShuttleThread> diffShuttles = new TreeMap<>();//自然排序小车Map
            //获取任务
@@ -436,15 +436,15 @@
                        //给工作档绑定小车号
                        diffShuttles.put(-1, shuttleThread);
                    } else {
                        if (tongLev && diffLev.size() >= 2) {
                            //当前穿梭车线程到目标地点距离
                            List<NavigateNode> currentShuttlePath = navigateUtils.calc(currentLocNo, locNo, NavigationMapType.NORMAL.id, Utils.getShuttlePoints(shuttleProtocol.getShuttleNo(), Utils.getLev(currentLocNo)), null);//搜索空闲穿梭车,使用正常通道地图
                            if (currentShuttlePath == null) {
                                continue;
                            }
                            Integer currentAllDistance = navigateUtils.getOriginPathAllDistance(currentShuttlePath);//计算当前路径行走总距离
                            diffShuttles.put(currentAllDistance, shuttleThread);
                        } else {
//                        if (tongLev && diffLev.size() >= 2) {
//                            //当前穿梭车线程到目标地点距离
//                            List<NavigateNode> currentShuttlePath = navigateUtils.calc(currentLocNo, locNo, NavigationMapType.NORMAL.id, Utils.getShuttlePoints(shuttleProtocol.getShuttleNo(), Utils.getLev(currentLocNo)), null);//搜索空闲穿梭车,使用正常通道地图
//                            if (currentShuttlePath == null) {
//                                continue;
//                            }
//                            Integer currentAllDistance = navigateUtils.getOriginPathAllDistance(currentShuttlePath);//计算当前路径行走总距离
//                            diffShuttles.put(currentAllDistance, shuttleThread);
//                        } else {
                            //ABS(目标楼层 - 当前楼层) 得到差距,取最小差值
                            int currentValue = Math.abs(lev - currentLev);
                            if (diffShuttles.get(currentValue) != null) {
@@ -452,7 +452,7 @@
                            } else {
                                diffShuttles.put(currentValue, shuttleThread);
                            }
                        }
    //                   }
                    }
                }