1.完善连接器库入库请求
2.完善电视机显示程序
3.新增PDA给输送线下发入库
4.新增绑定和解绑测试区域是否有空库位
5.新增AGV离站信号
6.完善空托盘入库
1个文件已添加
10个文件已修改
470 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/OpenController.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/domain/param/ToInStaParam.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/WaitPakinMapper.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java 352 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/RcsServiceImpl.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/model/MatDto.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/utils/HikUtils.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/utils/HttpHandler.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/MainProcess.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/WaitPakinMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/OpenController.java
@@ -1,10 +1,15 @@
package com.zy.asrs.controller;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.core.common.R;
import com.zy.asrs.domain.param.ToInStaParam;
import com.zy.asrs.domain.param.ToOutStaParam;
import com.zy.asrs.entity.RcsReporterTask;
import com.zy.asrs.entity.RcsReturn;
import com.zy.asrs.service.RcsService;
import com.zy.common.utils.HttpHandler;
import com.zy.common.utils.News;
import com.zy.core.cache.MessageQueue;
import com.zy.core.cache.SlaveConnection;
import com.zy.core.enums.SlaveType;
@@ -13,16 +18,18 @@
import com.zy.core.thread.SiemensDevpThread;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
@Slf4j
@RestController
public class OpenController {
    @Autowired
    private RcsService rcsService;
    @Value("${zyHikUrl}")
    private String zyHikUrl;
    @RequestMapping("/open/toOutSta")
    public R toOutSta(@RequestBody ToOutStaParam param) {
@@ -61,4 +68,55 @@
        return rcsService.reporterTask(param);
    }
    @RequestMapping("/open/toInSta")
    public R toInSta(@RequestBody ToInStaParam param) {
        log.info("toInSta:{}",param);
        SiemensDevpThread siemensDevpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
        if(siemensDevpThread == null) {
            return R.error("线程不存在");
        }
        StaProtocol staProtocol = siemensDevpThread.getStation().get(param.getStaNo()).clone();
        if(staProtocol == null) {
            return R.error("站点不存在");
        }
        if (!staProtocol.isLoading()) {
            return R.error("站点无物");
        }
        Short s = 301;
        if (param.getStaNo() == 304 || param.getStaNo() == 305 || param.getStaNo() == 306) {
            s = 304;
        }
        staProtocol.setWorkNo(param.getWrkNo().shortValue());
        staProtocol.setStaNo(s);
        boolean result = MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol));
        log.info("发生成功:{}",result);
        return R.ok().add(result);
    }
    @RequestMapping("/open/capture")
    public void startPic(@RequestParam String ip,@RequestParam String filename) {
        try {
            HashMap<String, Object> data = new HashMap<>();
            data.put("ip", ip);
            data.put("filename", filename);
            String response = new HttpHandler.Builder()
                    .setUri(zyHikUrl)
                    .setPath("/capture")
                    .setJson(JSON.toJSONString(data))
                    .build()
                    .doPost();
            JSONObject jsonObject = JSON.parseObject(response);
            if (jsonObject.getBoolean("success")) {
                News.error("请求接口成功!!!url:{};request:{};response:{}", zyHikUrl + "/startPic", JSON.toJSONString(data), response);
            } else {
                News.error("请求接口失败!!!url:{};request:{};response:{}", zyHikUrl + "/startPic", JSON.toJSONString(data), response);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
src/main/java/com/zy/asrs/domain/param/ToInStaParam.java
New file
@@ -0,0 +1,10 @@
package com.zy.asrs.domain.param;
import lombok.Data;
@Data
public class ToInStaParam {
    private Integer wrkNo;
    private Integer staNo;
}
src/main/java/com/zy/asrs/mapper/WaitPakinMapper.java
@@ -8,5 +8,6 @@
@Mapper
@Repository
public interface WaitPakinMapper extends BaseMapper<WaitPakin> {
    WaitPakin selectByBarcode(String barcode);
}
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -171,16 +171,16 @@
                if (staProtocol.isAutoing()
                        && staProtocol.isInEnable()
                        && !staProtocol.isEmptyMk()
                        && staProtocol.getWorkNo() >9990
                        && staProtocol.isEmptyOutType()
                        && staProtocol.getWorkNo() > 9990
                        && (staProtocol.isEmptyOutType() || staProtocol.getSiteId() == 301 || staProtocol.getSiteId() == 304)
                        && staProtocol.isPakMk()) {
                    News.warnNoLog("" + mark + " - 0" + " - 开始执行");
                    Short wrkNo = 9981;
                    Short bark = 303;
                    if(staProtocol.getSiteId()==304){
                    if (staProtocol.getSiteId() == 304) {
                        wrkNo = 9982;
                        bark = 306;
                    }else if(staProtocol.getSiteId()==307){
                    } else if (staProtocol.getSiteId() == 307) {
                        wrkNo = 9983;
                        bark = 307;
                    }
@@ -191,8 +191,8 @@
                            String errorMsg = errMsg;
                            MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(5, errorMsg));
                        }
                        log.error("输送线异常组托退回={}",errMsg);
                        staProtocol.setWorkNo( wrkNo);
                        log.error("输送线异常组托退回={}", errMsg);
                        staProtocol.setWorkNo(wrkNo);
                        staProtocol.setStaNo(bark);
//                        devpThread.setPakMk(staProtocol.getSiteId(), false);
@@ -203,7 +203,7 @@
                    String barcode = barcodeThread.getBarcode();
                    if (!Cools.isEmpty(barcode)) {
                        News.info("" + mark + " - 1" + " - {}号条码扫描器检测条码信息:{}", inSta.getBarcode(), barcode);
                        if ("NG".endsWith(barcode) || "NoRead".equals(barcode) || "empty".equals(barcode)|| "00000000".equals(barcode)) {
                        if ("  ERROR".endsWith(barcode) || "NoRead".equals(barcode) || "empty".equals(barcode) || "00000000".equals(barcode)) {
//                            staProtocol.setWorkNo((short) 9992);
//                            staProtocol.setStaNo(inSta.getBackSta().shortValue());
//                            devpThread.setPakMk(staProtocol.getSiteId(), false);
@@ -214,8 +214,8 @@
                                String errorMsg = "扫码失败,请重试";
                                MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(5, errorMsg));
                            }
                            log.error("输送线异常组托退回={}",errMsg);
                            staProtocol.setWorkNo( wrkNo);
                            log.error("输送线异常组托退回={}", errMsg);
                            staProtocol.setWorkNo(wrkNo);
                            staProtocol.setStaNo(bark);
//                        devpThread.setPakMk(staProtocol.getSiteId(), false);
@@ -234,8 +234,8 @@
                            String errorMsg = "扫码失败,请重试";
                            MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(5, errorMsg));
                        }
                        log.error("输送线异常组托退回={}",errMsg);
                        staProtocol.setWorkNo( wrkNo);
                        log.error("输送线异常组托退回={}", errMsg);
                        staProtocol.setWorkNo(wrkNo);
                        staProtocol.setStaNo(bark);
//                        devpThread.setPakMk(staProtocol.getSiteId(), false);
@@ -354,8 +354,8 @@
                                String errorMsg = jsonObject.getString("msg");
                                MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(5, errorMsg));
                            }
                            log.error("输送线异常组托退回={}",errMsg);
                            staProtocol.setWorkNo( wrkNo);
                            log.error("输送线异常组托退回={}", errMsg);
                            staProtocol.setWorkNo(wrkNo);
                            staProtocol.setStaNo(bark);
//                        devpThread.setPakMk(staProtocol.getSiteId(), false);
@@ -450,10 +450,10 @@
        try {
            for (DevpSlave devp : slaveProperties.getDevp()) {
                // 遍历拣料入库口
                for (DevpSlave.Sta pickSta : devp.getPickSta()) {
                for (DevpSlave.Sta insta : devp.getInSta()) {
                    // 获取拣料入库站信息
                    SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
                    StaProtocol staProtocol = devpThread.getStation().get(pickSta.getStaNo());
                    StaProtocol staProtocol = devpThread.getStation().get(insta.getStaNo());
                    if (staProtocol == null) {
                        continue;
                    } else {
@@ -463,60 +463,50 @@
                    if (staProtocol.isAutoing()
                            && staProtocol.isLoading()
                            && staProtocol.isInEnable()
                            && staProtocol.getWorkNo() > 0
                            && staProtocol.getWorkNo() > 9990
                            && staProtocol.isPakMk()) {
                        News.warnNoLog("" + mark + " - 0" + " - 开始执行");
//                    // 获取条码扫描仪信息
//                    BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, pickSta.getBarcode());
//                    if (barcodeThread == null) {
//                        continue;
//                    }
//                    String barcode = barcodeThread.getBarcode();
//                    if(!Cools.isEmpty(barcode)) {
//                        News.info(""+mark+" - 1"+" - {}号条码扫描器检测条码信息:{}", pickSta.getBarcode(), barcode);
//                        if("NG".endsWith(barcode) || "NoRead".equals(barcode)) {
//                            continue;
//                        }
//                    } else {
//                        continue;
//                    }
                        // 获取条码扫描仪信息
                        BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, insta.getBarcode());
                        if (barcodeThread == null) {
                            continue;
                        }
//                    WrkMast wrkMast = wrkMastMapper.selectPickStep(barcode);
                        WrkMast wrkMast = wrkMastMapper.selectPakInStep3(staProtocol.getWorkNo().intValue());
                        String barcode = barcodeThread.getBarcode();
                        if (!Cools.isEmpty(barcode)) {
                            News.info("" + mark + " - 1" + " - {}号条码扫描器检测条码信息:{}", insta.getBarcode(), barcode);
                            if ("NG".endsWith(barcode) || "NoRead".equals(barcode)) {
                                continue;
                            }
                        } else {
                            continue;
                        }
                        WrkMast wrkMast = wrkMastMapper.selectPickStep(barcode);
                        if (wrkMast == null) {
                            // 无拣料数据
                            continue;
                        }
                        if (wrkMast.getIoType() == 53 || wrkMast.getIoType() == 57) {
                            if (wrkMast.getWrkSts() != 2) {
                                News.error("" + mark + " - 3" + " - 拣选盘点回库工作档状态异常!!! [plc编号:{}]", devp.getId());
                                continue;
                            }
                            LocMast locMast = locMastService.selectById(wrkMast.getLocNo());
                            // 更新站点信息 且 下发plc命令
                            staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue());
                            staProtocol.setStaNo(wrkMast.getStaNo().shortValue());
//                            staProtocol.setPalletSize(locMast.getLocType2());
                            devpThread.setPakMk(staProtocol.getSiteId(), false);
                            boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                            if (!result) {
                                News.error("" + mark + " - 3" + " - 发布命令至输送线队列失败!!! [plc编号:{}]", devp.getId());
                            }
                            continue;
                        }
                        if ((wrkMast.getIoType() != 103 && wrkMast.getIoType() != 104 && wrkMast.getIoType() != 107)
                                || Cools.isEmpty(wrkMast.getStaNo()) || Cools.isEmpty(wrkMast.getSourceStaNo())) {
                            continue;
                        }
                        // 拣、盘、并 作业站转换
//                    int stnNo = 0;
//                    if (wrkMast.getStaNo() == 109) {
//                        stnNo = 127;
//                    } else if (wrkMast.getStaNo() == 113) {
//                        stnNo = 128;
//                    } else {
//                        log.error("{}号任务数据异常!", wrkMast.getWrkNo());
//                    }
                        // 获取目标站
                        Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>()
                                .eq("type_no", wrkMast.getIoType() - 50)
                                .eq("stn_no", pickSta.getStaNo()) // 作业站点 = 拣料出库的目标站
                                .eq("stn_no", insta.getStaNo()) // 作业站点 = 拣料出库的目标站
                                .eq("crn_no", wrkMast.getCrnNo()); // 堆垛机号
                        StaDesc staDesc = staDescService.selectOne(wrapper);
                        if (Cools.isEmpty(staDesc)) {
@@ -526,68 +516,73 @@
//                        devpThread.setPakMk(staProtocol.getSiteId(), false);
//                        MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                            //LED
                            LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, pickSta.getLed());
                            LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, insta.getLed());
                            // led 异常显示
                            if (ledThread != null) {
                                String errorMsg = "此为拣料、并板、盘点再入库.请放在" + pickSta.getBackSta().shortValue() + "站点";
                                MessageQueue.offer(SlaveType.Led, pickSta.getLed(), new Task(5, errorMsg));
                                String errorMsg = "此为拣料、并板、盘点再入库.请放在" + insta.getBackSta().shortValue() + "站点";
                                MessageQueue.offer(SlaveType.Led, insta.getLed(), new Task(5, errorMsg));
                            }
                            continue;
                        }
                        try {
                            LocTypeDto locTypeDto = new LocTypeDto(staProtocol);
                            // 保存工作明细档历史档
                            if (wrkMastMapper.saveWrkDetlLog(wrkMast.getWrkNo()) == 0) {
                                throw new CoolException("保存工作明细档历史档失败");
                            }
                            // 保存工作主档历史档
                            SearchLocParam param = new SearchLocParam();
                            param.setBarcode(wrkMast.getBarcode());
                            param.setSourceStaNo(pickSta.getStaNo());
                            param.setLocType1(locTypeDto.getLocType1());
                            String response = new HttpHandler.Builder()
                                    .setUri(wmsUrl)
                                    .setPath("/rpc/pakin/pick/loc/v1")
                                    .setJson(JSON.toJSONString(param))
                                    .build()
                                    .doPost();
                            JSONObject jsonObject = JSON.parseObject(response);
                            if (jsonObject.getInteger("code").equals(200)) {
                                WrkMast newWrkMast = wrkMastMapper.selectPakInStepBarcode(wrkMast.getBarcode());
                                if (newWrkMast == null) {
                                    // 无拣料数据
                                    News.error("" + mark + " - 3" + " - 拣选盘点回库获取工作档失败!!! [plc编号:{}]", devp.getId());
                                    continue;
                                }
                            if (!wrkMastLogService.save(wrkMast.getWrkNo())) {
                                throw new CoolException("保存工作主档历史档失败");
                            }
                                if(newWrkMast.getWrkSts() != 53 && newWrkMast.getWrkSts() != 57) {
                                    News.error("" + mark + " - 3" + " - 拣选盘点回库工作档类型异常!!! [plc编号:{}]", devp.getId());
                                    continue;
                                }
                                if (wrkMast.getWrkSts() != 2) {
                                    News.error("" + mark + " - 3" + " - 拣选盘点回库工作档状态异常!!! [plc编号:{}]", devp.getId());
                                    continue;
                                }
                                LocMast locMast = locMastService.selectById(newWrkMast.getLocNo());
                                // 更新站点信息 且 下发plc命令
                                staProtocol.setWorkNo(newWrkMast.getWrkNo().shortValue());
                                staProtocol.setStaNo(newWrkMast.getStaNo().shortValue());
                                staProtocol.setPalletSize(locMast.getLocType2());
                                devpThread.setPakMk(staProtocol.getSiteId(), false);
                                boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                                if (!result) {
                                    News.error("" + mark + " - 3" + " - 发布命令至输送线队列失败!!! [plc编号:{}]", devp.getId());
                                }
                            } else {
                                News.error("" + mark + " - 5" + " - 请求接口失败!!!url:{};request:{};response:{}", wmsUrl + "/rpc/pakin/pick/loc/v1", JSON.toJSONString(param), response);
                            Date now = new Date();
                            // 堆垛机站点(目标站)
                            Integer staNo = staDesc.getCrnStn();
                            // 更新工作档数据状态
                            wrkMast.setIoTime(now);
                            wrkMast.setIoType(wrkMast.getIoType() - 50); // 入出库类型: 103->53,104->54,107->57
                            wrkMast.setWrkSts(2L); // 工作状态: 2.设备上走
                            wrkMast.setSourceStaNo(wrkMast.getStaNo()); // 源站
                            wrkMast.setStaNo(staNo); // 目标站
                            wrkMast.setLocNo(wrkMast.getSourceLocNo()); // 目标库位 = 出库时的源库位
                            wrkMast.setSourceLocNo(""); // 源库位清空
                            wrkMast.setModiTime(now);
                            wrkMast.setUpdMk("");//允许再次移库
                            if (wrkMastMapper.updateById(wrkMast) == 0) {
                                throw new CoolException("更新工作档数据状态失败");
                            }
                            // 更新明细档io_time (历史档关联使用)
                            wrkDetlService.updateIoTime(wrkMast.getWrkNo(), now);
                            // 修改库位状态 Q.拣料/盘点/并板再入库
                            LocMast locMast = locMastService.selectById(wrkMast.getLocNo());
                            locMast.setLocSts("Q");
                            locMast.setModiTime(new Date());
                            if (!locMastService.updateById(locMast)) {
                                throw new CoolException("修改库位状态失败");
                            }
                        } catch (Exception e) {
                            e.printStackTrace();
                            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                            continue;
                        }
                        LocMast locMast = locMastService.selectById(wrkMast.getLocNo());
                        // 更新站点信息 且 下发plc命令
                        staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue());
                        staProtocol.setStaNo(wrkMast.getStaNo().shortValue());
                        staProtocol.setPalletSize(locMast.getLocType2());
                        devpThread.setPakMk(staProtocol.getSiteId(), false);
                        boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                        if (!result) {
                            News.error("" + mark + " - 3" + " - 发布命令至输送线队列失败!!! [plc编号:{}]", devp.getId());
                        }
                    } else {
                        News.errorNoLog("" + mark + " - 6" + " - 站点信息不符合入库条件!!!" + " 自动信号:" + staProtocol.isLoading() + "、可入信号:" + staProtocol.isInEnable()
                                + "、空板信号:" + staProtocol.isEmptyMk());
                    }
                }
            }
@@ -627,8 +622,8 @@
                            continue;
                        }
                        String name="401";
                        if (staProtocol.getSiteId()==402){
                        String name = "401";
                        if (staProtocol.getSiteId() == 402) {
                            name = "402";
                        }
                        String bar = "";
@@ -638,7 +633,7 @@
                        }
                        String barcode = barcodeThread.getBarcode();
                        if (barcode.equals("00000000")){
                        if (barcode.equals("00000000")) {
                            barcode = bar;
                        }
                        if (!Cools.isEmpty(barcode)) {
@@ -1136,15 +1131,15 @@
                }
            }
            String ip = "";
            if (wrkMast.getStaNo()==401){
            if (wrkMast.getStaNo() == 401) {
                ip = "172.26.4.231";
            }else if (wrkMast.getStaNo()==402){
            } else if (wrkMast.getStaNo() == 402) {
                ip = "172.26.4.232";
            }else if (wrkMast.getStaNo()==307){
            } else if (wrkMast.getStaNo() == 307) {
                ip = "172.26.1.231";
            }else if (wrkMast.getStaNo()==303){
            } else if (wrkMast.getStaNo() == 303) {
                ip = "172.26.1.232";
            }else if (wrkMast.getStaNo()==304){
            } else if (wrkMast.getStaNo() == 304) {
                ip = "172.26.1.233";
            }
            SimpleDateFormat sf = new SimpleDateFormat("yyyyMMddHHmmss");
@@ -1159,7 +1154,7 @@
            list.add(newName);
            //入库前抓拍
            try {
                hikUtils.startPic(ip, newName + ".jpg");
                hikUtils.startPic(ip, newName);
            } catch (Exception e) {
                log.error("入库前抓拍");
            }
@@ -1257,18 +1252,18 @@
                }
                //查询在库信息
                LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>()
                        .in("loc_sts", "R","P")
                        .in("loc_sts", "R", "P")
                        .eq("loc_no", wrkMast.getSourceLocNo()));
                if (Cools.isEmpty(locMast)) {
                    News.error("出库 ===>> 库位中没有这笔资料", wrkMast.getSourceLocNo());
                    continue;
                }
                //堆垛机接驳站点没有空料架
                if(!staProtocol.isEmptyOutType()&&(Cools.isEmpty(wrkMast.getCtnType())||wrkMast.getCtnType()==0)){
                if (staProtocol.getSiteId() != 301 && staProtocol.getSiteId() != 304 && !staProtocol.isEmptyOutType() && (Cools.isEmpty(wrkMast.getCtnType()) || wrkMast.getCtnType() == 0)) {
                    //请求wms下发agv搬运空料架到堆垛机接驳站点任务
                    try {
                        HashMap<String,Object> hashMap=new HashMap<>();
                        hashMap.put("wrkNo",wrkMast.getWrkNo());
                        HashMap<String, Object> hashMap = new HashMap<>();
                        hashMap.put("wrkNo", wrkMast.getWrkNo());
                        String response = new HttpHandler.Builder()
                                .setUri(wmsUrl)
                                .setPath("/rpc/createAGVMoveTask")
@@ -1287,10 +1282,18 @@
                        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                    }
                }
                Boolean boo1 = false;
                Boolean boo2 = false;
                if (staProtocol.isEmptyOutType() || staProtocol.getSiteId() == 301 || staProtocol.getSiteId() == 304) {
                    boo1 = true;
                }
                if ((staProtocol.getSiteId() == 301 || staProtocol.getSiteId() == 304) && staProtocol.isOutEnable()) {
                    boo2 = true;
                }
                // 判断堆垛机出库站状态&& staProtocol.isOutEnable()
                if (staProtocol.isAutoing() && !staProtocol.isLoading() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y")
                        && staProtocol.isEmptyOutType()) {
                        && boo1 && boo2) {
                    // 命令下发区 --------------------------------------------------------------------------
                    //判断是否有正在执行中的AGV任务
@@ -1377,8 +1380,35 @@
                        }
                        break;
                    }
                } else if (staProtocol.getSiteId() == 301 && staProtocol.isAutoing() && staProtocol.isLoading() && !staProtocol.isOutEnable()) {
                    StaProtocol staProtocol1 = devpThread.getStation().get(304);
                    if (staProtocol1 == null) {
                        break;
                    } else {
                        staProtocol1 = staProtocol1.clone();
                    }
                    if (staProtocol1.isAutoing() && !staProtocol1.isLoading() && staProtocol1.isOutEnable()) {
                        wrkMast.setSourceStaNo(304);
                        wrkMast.setStaNo(306);
                        Date now = new Date();
                        wrkMast.setModiTime(now);
                        wrkMastMapper.updateById(wrkMast);
                    }
                } else if (staProtocol.getSiteId() == 304 && staProtocol.isAutoing() && staProtocol.isLoading() && !staProtocol.isOutEnable()){
                    StaProtocol staProtocol1 = devpThread.getStation().get(301);
                    if (staProtocol1 == null) {
                        break;
                    } else {
                        staProtocol1 = staProtocol1.clone();
                    }
                    if (staProtocol1.isAutoing() && !staProtocol1.isLoading() && staProtocol1.isOutEnable()) {
                        wrkMast.setSourceStaNo(301);
                        wrkMast.setStaNo(303);
                        Date now = new Date();
                        wrkMast.setModiTime(now);
                        wrkMastMapper.updateById(wrkMast);
                    }
                }
            }
        }
    }
@@ -1885,6 +1915,7 @@
                if (staProtocol.isAutoing()
                        && staProtocol.isInEnable()
                        && staProtocol.isPakMk()
                        && staProtocol.getWorkNo() > 9990
                ) {
                    News.warnNoLog("" + mark + " - 0" + " - 开始执行:空栈板初始化入库,叉车入库站放货");
@@ -1910,8 +1941,9 @@
                        continue;
                    }
                    WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("barcode", barcode));
                    WaitPakin waitPakin = waitPakinMapper.selectOne(new EntityWrapper<WaitPakin>().eq("zpallet", barcode).getEntity());
                    if (waitPakin != null || wrkMast != null) {
                    WaitPakin waitPakin = waitPakinMapper.selectByBarcode(barcode);
                    LocMast locMast1 = locMastService.selectOne(new EntityWrapper<LocMast>().eq("barcode", barcode));
                    if (waitPakin != null || wrkMast != null || locMast1 != null) {
                        continue;
                    }
@@ -2107,12 +2139,12 @@
                    staProtocol = staProtocol.clone();
                }
                // 获取工作档数据
                WrkMast wrkMast = wrkMastMapper.selectById(staProtocol.getWorkNo());
                WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no",staProtocol.getWorkNo()));
//                if (null == wrkMast || wrkMast.getWrkSts() < 14 || wrkMast.getIoType() < 100) { continue; }
                if (null == wrkMast) {
                    continue;
                }
                News.warnNoLog(""+mark+" - 0"+" - 开始执行:出库  ===>> 工作档信息写入led显示器");
                News.warnNoLog("" + mark + " - 0" + " - 开始执行:出库  ===>> 工作档信息写入led显示器");
                wrkMasts.add(wrkMast);
                // 组装命令
                LedCommand ledCommand = new LedCommand();
@@ -2120,12 +2152,12 @@
                ledCommand.setIoType(wrkMast.getIoType());
                // 出库模式
                switch (wrkMast.getIoType()) {
                    case 1:
                        ledCommand.setTitle("全板入库");
                        break;
                    case 10:
                        ledCommand.setTitle("空板入库");
                        break;
//                    case 1:
//                        ledCommand.setTitle("全板入库");
//                        break;
//                    case 10:
//                        ledCommand.setTitle("空板入库");
//                        break;
                    case 101:
                        ledCommand.setTitle("全板出库");
                        break;
@@ -2142,40 +2174,45 @@
                        ledCommand.setTitle("空板出库");
                        ledCommand.setEmptyMk(true);
                        break;
                    case 53:
                        ledCommand.setTitle("拣料入库");
                        break;
                    case 57:
                        ledCommand.setTitle("盘点入库");
                        break;
                    case 54:
                        ledCommand.setTitle("并板入库");
                        break;
//                    case 53:
//                        ledCommand.setTitle("拣料入库");
//                        break;
//                    case 57:
//                        ledCommand.setTitle("盘点入库");
//                        break;
//                    case 54:
//                        ledCommand.setTitle("并板入库");
//                        break;
                    default:
                        News.error(""+mark+" - 1"+" - 任务入出库类型错误!!![工作号:{}] [入出库类型:{}]", wrkMast.getWrkNo(), wrkMast.getIoType());
                        News.error("" + mark + " - 1" + " - 任务入出库类型错误!!![工作号:{}] [入出库类型:{}]", wrkMast.getWrkNo(), wrkMast.getIoType());
                        break;
                }
                ledCommand.setSourceLocNo(wrkMast.getSourceLocNo());
                ledCommand.setLocNo(wrkMast.getLocNo());
                ledCommand.setStaNo(wrkMast.getStaNo());
                ledCommand.setBarcode(wrkMast.getBarcode());
//                ledCommand.setSourceStaNo(wrkMast.getSourceStaNo());
                if (wrkMast.getIoType() != 110 && wrkMast.getIoType() != 10) {
                    List<WrkDetl> wrkDetls = wrkDetlService.findByWorkNo(wrkMast.getWrkNo());
                    try{
                        if (wrkMast.getIoType()>100){
                            for (WrkDetl wrkDetl : wrkDetls){
                    try {
                        if (wrkMast.getIoType() > 100) {
                            for (WrkDetl wrkDetl : wrkDetls) {
                                LocDetl locDetl = locDetlService.selectMatnrSpecs(wrkDetl.getMatnr(), wrkDetl.getSpecs(), wrkMast.getSourceLocNo());
                                wrkDetl.setWeight(locDetl.getAnfme());
                                if (Cools.isEmpty(locDetl)) {
                                    wrkDetl.setWeight(0.0);
                                }else {
                                    wrkDetl.setWeight(locDetl.getAnfme());
                                }
                            }
                        }else {
                            for (WrkDetl wrkDetl : wrkDetls){
                        } else {
                            for (WrkDetl wrkDetl : wrkDetls) {
                                wrkDetl.setWeight(wrkDetl.getAnfme());
                            }
                        }
                    }catch (Exception e){
                        log.error("工作档案明细输入电视机失败1:异常信息==》"+e);
                    } catch (Exception e) {
                        log.error("工作档案明细输入电视机失败1:异常信息==》" + e);
                    }
                    wrkDetls.forEach(wrkDetl -> ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getAnfme(),wrkDetl.getWeight(),wrkDetl.getSpecs(),wrkDetl.getSku())));
                    wrkDetls.forEach(wrkDetl -> ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getAnfme(), wrkDetl.getWeight(), wrkDetl.getSpecs(), wrkDetl.getSku(),wrkDetl.getZpallet())));
                }
                commands.add(ledCommand);
            }
@@ -2186,31 +2223,12 @@
            if (CollectionUtils.equals(ledThread.getWorkNos(), workNos)) {
                continue;
            }
//             命令下发 -------------------------------------------------------------------------------
//            if (!commands.isEmpty()) {
//                if (led.getId() < 7) {
//                    if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(3, commands))) {
//                        News.error(""+mark+" - 2"+" - {}号LED命令下发失败!!![ip:{}] [port:{}]", led.getId(), led.getIp(), led.getPort());
//                        continue;
//                    } else {
//                        ledThread.setLedMk(false);
//                    }
//                } else {
//                    if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(1, commands))) {
//                        News.error(""+mark+" - 3"+" - {}号LED命令下发失败!!![ip:{}] [port:{}]", led.getId(), led.getIp(), led.getPort());
//                        continue;
//                    } else {
//                        ledThread.setLedMk(false);
//                    }
//                }
//
//            }
            // 命令下发 -------------------------------------------------------------------------------
            if (!commands.isEmpty()) {
                if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(3, commands))) {
                    News.error("{}号LED命令下发失败!!![ip:{}] [port:{}]", led.getId(), led.getIp(), led.getPort());
                    continue;
                }else {
                } else {
                    ledThread.setLedMk(false);
                }
            }
@@ -2221,7 +2239,7 @@
                    wrkMast.setOveMk("Y");
                    wrkMast.setModiTime(new Date());
                    if (wrkMastMapper.updateById(wrkMast) == 0) {
                        News.errorNoLog(""+mark+" - 4"+" - 更新工作档失败");
                        News.errorNoLog("" + mark + " - 4" + " - 更新工作档失败");
                        throw new CoolException("更新工作档失败");
                    }
                }
@@ -2235,7 +2253,7 @@
            }
        }
        News.infoNoLog(""+mark+" - 0"+" - 出库  ===>> 工作档信息写入led显示器执行完成");
        News.infoNoLog("" + mark + " - 0" + " - 出库  ===>> 工作档信息写入led显示器执行完成");
    }
    /**
@@ -2243,7 +2261,7 @@
     */
    public synchronized void ledReset(Integer mark) {
        News.warnNoLog(""+mark+" - 0"+" - 开始执行:其他  ===>> LED显示器复位,显示默认信息");
        News.warnNoLog("" + mark + " - 0" + " - 开始执行:其他  ===>> LED显示器复位,显示默认信息");
        for (LedSlave led : slaveProperties.getLed()) {
            // 获取输送线plc线程
@@ -2267,13 +2285,13 @@
            if (reset && !ledThread.isLedMk()) {
                ledThread.setLedMk(true);
                if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(4, new ArrayList<>()))) {
                    News.error(""+mark+" - 1"+" - {}号LED命令下发失败!!![ip:{}] [port:{}]", led.getId(), led.getIp(), led.getPort());
                    News.error("" + mark + " - 1" + " - {}号LED命令下发失败!!![ip:{}] [port:{}]", led.getId(), led.getIp(), led.getPort());
                } else {
                }
            }
        }
        News.infoNoLog(""+mark+" - 0"+" - 执行完成:其他  ===>> LED显示器复位,显示默认信息");
        News.infoNoLog("" + mark + " - 0" + " - 执行完成:其他  ===>> LED显示器复位,显示默认信息");
    }
    /**
@@ -2522,7 +2540,7 @@
                    wrkMast.setCrnNo(crn.getId());
                    wrkMast.setSourceLocNo(sourceLocNo); // 源库位
                    wrkMast.setLocNo(locNo); // 目标库位
                    wrkMast.setFullPlt(sourceLoc.getLocSts().equals("F")?"Y":"N"); // 满板:Y
                    wrkMast.setFullPlt(sourceLoc.getLocSts().equals("F") ? "Y" : "N"); // 满板:Y
                    wrkMast.setPicking("N"); // 拣料
                    wrkMast.setExitMk("N"); // 退出
                    wrkMast.setEmptyMk(sourceLoc.getLocSts().equals("D") ? "Y" : "N"); // 空板
src/main/java/com/zy/asrs/service/impl/RcsServiceImpl.java
@@ -163,11 +163,15 @@
                            StaProtocol staProtocol = siemensDevpThread.getStation().get(sourceStaNo).clone();
                            Boolean boo = false;
                            Short wrkNo = 9991;
                            if(task.getStaNo().equals("307")){
                                wrkNo = 9997;
                            }
                            //放货完成 --》agv已经离开 --》给PLC站点写9991工作号
                            //补空料架 --》agv已经立库 --》给PLC站点写9995工作号
                            if (task.getTaskType().equals("AGV补空料架") && staProtocol != null && !staProtocol.isLoading() && staProtocol.isEmptyOutType() && staProtocol.getWorkNo() == 0) {
                                boo = true;
                                wrkNo = 9995;
                                wrkNo = 9998;
                            } else if (!task.getTaskType().equals("AGV补空料架") && staProtocol != null && staProtocol.isLoading() && staProtocol.isEmptyOutType() && staProtocol.getWorkNo() == 0) {
                                boo = true;
                            }
src/main/java/com/zy/common/model/MatDto.java
@@ -81,4 +81,15 @@
        this.total = total;
        this.sku = sku;
    }
    public MatDto(String matNo, String maktx, Double count,Double total,String specs,String sku,String barcode) {
        this.specs = specs;
        this.matnr = matNo;
        this.maktx = maktx;
        this.maknx = maktx;
        this.count = count;
        this.total = total;
        this.sku = sku;
        this.barcode = barcode;
    }
}
src/main/java/com/zy/common/utils/HikUtils.java
@@ -21,15 +21,15 @@
            String response = new HttpHandler.Builder()
                    .setUri(hikUrl)
                    .setPath("/startPic")
                    .setPath("/capture")
                    .setJson(JSON.toJSONString(data))
                    .build()
                    .doPost();
            JSONObject jsonObject = JSON.parseObject(response);
            if (jsonObject.getInteger("code").equals(200)) {
                News.error("请求接口成功!!!url:{};request:{};response:{}", hikUrl + "/startPic", JSON.toJSONString(data), response);
                News.error("请求接口成功!!!url:{};request:{};response:{}", hikUrl + "/capture", JSON.toJSONString(data), response);
            } else {
                News.error("请求接口失败!!!url:{};request:{};response:{}", hikUrl + "/startPic", JSON.toJSONString(data), response);
                News.error("请求接口失败!!!url:{};request:{};response:{}", hikUrl + "/capture", JSON.toJSONString(data), response);
            }
        } catch (Exception e) {
            e.printStackTrace();
src/main/java/com/zy/common/utils/HttpHandler.java
@@ -15,7 +15,7 @@
 */
public class HttpHandler {
    private static final Integer DEFAULT_TIMEOUT_SECONDS = 5;
    private static final Integer DEFAULT_TIMEOUT_SECONDS = 100;
    private static final MediaType MEDIA_TYPE = MediaType.parse("application/json;charset=utf-8");
    private String uri;
src/main/java/com/zy/core/MainProcess.java
@@ -83,9 +83,9 @@
//                    mainService.rgvFinished2(14);
                    //堆垛机无任务两分钟,回入库口待机
                    mainService.crnMove();
//                    mainService.crnMove();
                    //堆垛机有入库任务时,回入库口待机
                    mainService.crnMoveByInTask();
//                    mainService.crnMoveByInTask();
                } catch (Exception e) {
                    e.printStackTrace();
src/main/resources/application.yml
@@ -48,7 +48,7 @@
  switch: false
  url: http://172.26.11.98:80/rcs/rtas/
zyHikUrl: 10.10.10.200:9091/hik
zyHikUrl: 127.0.0.1:8000
# 下位机配置
wcs-slave:
@@ -81,7 +81,7 @@
      devpPlcId: ${wcs-slave.devp[0].id}
      staNo: 301
      row: 2
      bay: 2
      bay: 1
      lev: 1
    # 堆垛机入库站点
    crnInStn[1]:
@@ -247,14 +247,14 @@
    ip: 127.0.0.1
    port: 5005
    devpPlcId: ${wcs-slave.devp[0].id}
    staArr: 302
    staArr: 303,302,301
  # LED2
  led[1]:
    id: 2
    ip: 172.17.60.183
    port: 5005
    devpPlcId: ${wcs-slave.devp[0].id}
    staArr: 306
    staArr: 304,305,306
#  # LED3
  led[2]:
    id: 3
src/main/resources/mapper/WaitPakinMapper.xml
@@ -27,4 +27,8 @@
    </resultMap>
    <select id="selectByBarcode" resultMap="BaseResultMap">
        select * from cust_wait_pakin where zpallet = #{barcode}
    </select>
</mapper>