zwl
22 小时以前 8e01a40be0a7ba61ece12870332b35a1fa3bfcd5
1.新增agv状态请求离开
2.修复无法自动生成移库任务
2个文件已添加
12个文件已修改
1 文件已重命名
1个文件已删除
930 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/entity/MesReturn.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/TransParent.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/WrkMast.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/WrkMastLog.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/enums/RcsRetMethodEnum.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/AgvTaskService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/AgvTaskServiceImpl.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java 314 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/RcsServiceImpl.java 489 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/TaskServiceImpl.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/WrkMastLogServiceImpl.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/model/MatDto.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/MainProcess.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/SiemensCrnThread.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/WrkMastMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/MesReturn.java
New file
@@ -0,0 +1,20 @@
package com.zy.asrs.entity;
import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
// MES接口返回结果
@Data
public class MesReturn {
    // 1:成功;2:失败
    @JsonProperty("Success")
    @JSONField(name = "Success")
    private String Success;
    // 失败消息
    @JsonProperty("Message")
    @JSONField(name = "Message")
    private String Message;
}
src/main/java/com/zy/asrs/entity/TransParent.java
@@ -12,7 +12,7 @@
    private String taskno;
    // 任务名称,wcs_task_header表中的task_name
    private String taskname;
    // AGV编码
    // 下发申请是:1.滑块库 2.连接器库
    @JsonProperty("AgvCode")
    @JSONField(name = "AgvCode")
    private String AgvCode;
src/main/java/com/zy/asrs/entity/WrkMast.java
@@ -26,7 +26,7 @@
    private static final long serialVersionUID = 1L;
    @ApiModelProperty(value= "")
    @TableId(value = "id", type = IdType.AUTO)
    @TableId(value = "id", type = IdType.INPUT)
    private Long id;
    /**
src/main/java/com/zy/asrs/entity/WrkMastLog.java
@@ -29,6 +29,9 @@
    @ApiModelProperty(value= "编号")
    private Long id;
    @ApiModelProperty("日志ID")
    private Long logId;
    /**
     * 工作号
     */
src/main/java/com/zy/asrs/enums/RcsRetMethodEnum.java
@@ -6,7 +6,9 @@
    TASK_OUT_BIN("outbin", "走出储位"),
    APPLY_IN_STATION("applyInStation", "入站请求"),
    APPLY_OFF_STATION("applyOutStation", "离站请求"),
//    APPLY_OFF_STATION("applyOutStation", "离站请求"),
    APPLY_IN_OFF_STATION("applyInOffStation", "取货离站请求"),
    APPLY_OFF_STATION("applyOutOffStation", "放货离站请求"),
    ARRIVE_ON_STATION("arriveOnStation", "到站完成"),
    ARRIVE_OFF_STATION("arriveOffStation", "离站完成"),
src/main/java/com/zy/asrs/service/AgvTaskService.java
File was renamed from src/main/java/com/zy/asrs/service/TaskService.java
@@ -5,5 +5,5 @@
import org.springframework.stereotype.Service;
@Service
public interface TaskService extends IService<AgvTask> {
public interface AgvTaskService extends IService<AgvTask> {
}
src/main/java/com/zy/asrs/service/impl/AgvTaskServiceImpl.java
New file
@@ -0,0 +1,12 @@
package com.zy.asrs.service.impl;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.zy.asrs.entity.AgvTask;
import com.zy.asrs.mapper.TaskMapper;
import com.zy.asrs.service.AgvTaskService;
import org.springframework.stereotype.Service;
@Service
public class AgvTaskServiceImpl extends ServiceImpl<TaskMapper, AgvTask> implements AgvTaskService {
}
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -101,6 +101,8 @@
    @Autowired
    private HikUtils hikUtils;
    @Autowired
    private AgvTaskServiceImpl agvTaskService;
    /**
     * 组托
@@ -129,6 +131,38 @@
                //LED
                LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed());
                // 尺寸检测异常
                boolean back = false;
                String errMsg = "";
                if (staProtocol.isFrontError()) {
                    errMsg = "前超限";
                    back = true;
                }
                if (!back && staProtocol.isBackError()) {
                    errMsg = "后超限";
                    back = true;
                }
                if (!back && staProtocol.isHighError()) {
                    errMsg = "高超限";
                    back = true;
                }
                if (!back && staProtocol.isLeftError()) {
                    errMsg = "左超限";
                    back = true;
                }
                if (!back && staProtocol.isRightError()) {
                    errMsg = "右超限";
                    back = true;
                }
                if (!back && staProtocol.isWeightError()) {
                    errMsg = "超重";
                    back = true;
                }
                if (!back && staProtocol.isBarcodeError()) {
                    errMsg = "扫码失败";
                    back = true;
                }
                // 判断是否满足入库条件
                if (!staProtocol.isLoading()) {
                    continue;
@@ -137,14 +171,39 @@
                if (staProtocol.isAutoing()
                        && staProtocol.isInEnable()
                        && !staProtocol.isEmptyMk()
                        && staProtocol.getWorkNo() == 9999
                        && staProtocol.getWorkNo() >9990
                        && staProtocol.isEmptyOutType()
                        && staProtocol.isPakMk()) {
                    News.warnNoLog("" + mark + " - 0" + " - 开始执行");
                    Short wrkNo = 9981;
                    Short bark = 303;
                    if(staProtocol.getSiteId()==304){
                        wrkNo = 9982;
                        bark = 306;
                    }else if(staProtocol.getSiteId()==307){
                        wrkNo = 9983;
                        bark = 307;
                    }
                    if (back) {
                        // led 异常显示
                        if (ledThread != null) {
                            String errorMsg = errMsg;
                            MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(5, errorMsg));
                        }
                        log.error("输送线异常组托退回={}",errMsg);
                        staProtocol.setWorkNo( wrkNo);
                        staProtocol.setStaNo(bark);
//                        devpThread.setPakMk(staProtocol.getSiteId(), false);
                        boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                        continue;
                    }
                    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)) {
                        if ("NG".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);
@@ -155,6 +214,12 @@
                                String errorMsg = "扫码失败,请重试";
                                MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(5, errorMsg));
                            }
                            log.error("输送线异常组托退回={}",errMsg);
                            staProtocol.setWorkNo( wrkNo);
                            staProtocol.setStaNo(bark);
//                        devpThread.setPakMk(staProtocol.getSiteId(), false);
                            boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                            continue;
                        }
                    } else {
@@ -169,6 +234,12 @@
                            String errorMsg = "扫码失败,请重试";
                            MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(5, errorMsg));
                        }
                        log.error("输送线异常组托退回={}",errMsg);
                        staProtocol.setWorkNo( wrkNo);
                        staProtocol.setStaNo(bark);
//                        devpThread.setPakMk(staProtocol.getSiteId(), false);
                        boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                        continue;
                    }
@@ -283,6 +354,12 @@
                                String errorMsg = jsonObject.getString("msg");
                                MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(5, errorMsg));
                            }
                            log.error("输送线异常组托退回={}",errMsg);
                            staProtocol.setWorkNo( wrkNo);
                            staProtocol.setStaNo(bark);
//                        devpThread.setPakMk(staProtocol.getSiteId(), false);
                            boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                        }
                    } catch (Exception e) {
@@ -540,7 +617,7 @@
                    if (staProtocol.isAutoing()
                            && staProtocol.isLoading()
                            && staProtocol.isInEnable()
                            && staProtocol.getWorkNo() > 0
                            && staProtocol.getWorkNo() == 9991
                            && staProtocol.isPakMk()) {
                        News.warnNoLog("" + mark + " - 0" + " - 开始执行");
@@ -549,7 +626,21 @@
                        if (barcodeThread == null) {
                            continue;
                        }
                        String name="401";
                        if (staProtocol.getSiteId()==402){
                            name = "402";
                        }
                        String bar = "";
                        Config name1 = configService.selectOne(new EntityWrapper<Config>().eq("name", name));
                        if (!Cools.isEmpty(name1)) {
                            bar = name1.getValue();
                        }
                        String barcode = barcodeThread.getBarcode();
                        if (barcode.equals("00000000")){
                            barcode = bar;
                        }
                        if (!Cools.isEmpty(barcode)) {
                            News.info("" + mark + " - 1" + " - {}号条码扫描器检测条码信息:{}", insta.getBarcode(), barcode);
                            if ("NG".endsWith(barcode) || "NoRead".equals(barcode)) {
@@ -606,7 +697,8 @@
                                throw new CoolException("保存工作明细档历史档失败");
                            }
                            // 保存工作主档历史档
                            if (wrkMastMapper.saveWrkMastLog(wrkMast.getWrkNo()) == 0) {
                            if (!wrkMastLogService.save(wrkMast.getWrkNo())) {
                                throw new CoolException("保存工作主档历史档失败");
                            }
@@ -704,7 +796,7 @@
                staProtocol = staProtocol.clone();
            }
            if (staProtocol.isAutoing() && staProtocol.isLoading() && (staProtocol.getWorkNo() == 0 || staProtocol.getStaNo() == null)) {
            if (staProtocol.isAutoing() && staProtocol.isLoading()) {
                CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, wrkMast.getCrnNo());
                CrnProtocol crnProtocol = crnThread.getCrnProtocol();
@@ -718,9 +810,6 @@
                            .eq("loc_no", wrkMast.getSourceLocNo()));
                    short staNo = wrkMast.getStaNo().shortValue();
                    if (wrkMast.getStaNo() == 1004) {
                        staNo = 2003;
                    }
                    // 下发站点信息
                    staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue());
@@ -1168,14 +1257,14 @@
                }
                //查询在库信息
                LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>()
                        .eq("loc_sts", "R")
                        .in("loc_sts", "R","P")
                        .eq("loc_no", wrkMast.getSourceLocNo()));
                if (Cools.isEmpty(locMast)) {
                    News.error("出库 ===>> 库位中没有这笔资料", wrkMast.getSourceLocNo());
                    continue;
                }
                //堆垛机接驳站点没有空料架
                if(staProtocol.getSiteId()==307&&!staProtocol.isEmptyOutType()&&(Cools.isEmpty(wrkMast.getCtnType())||wrkMast.getCtnType()==0)){
                if(!staProtocol.isEmptyOutType()&&(Cools.isEmpty(wrkMast.getCtnType())||wrkMast.getCtnType()==0)){
                    //请求wms下发agv搬运空料架到堆垛机接驳站点任务
                    try {
                        HashMap<String,Object> hashMap=new HashMap<>();
@@ -1198,17 +1287,17 @@
                        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                    }
                }
                Boolean config = true;
                if (staProtocol.getSiteId()==307 && !staProtocol.isEmptyOutType()){
                    config = false;
                }
                // 判断堆垛机出库站状态
                // 判断堆垛机出库站状态&& staProtocol.isOutEnable()
                if (staProtocol.isAutoing() && !staProtocol.isLoading() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y")
                        && staProtocol.getWorkNo() == 0 && staProtocol.isOutEnable() && config) {
                        && staProtocol.isEmptyOutType()) {
                    // 命令下发区 --------------------------------------------------------------------------
                    //判断是否有正在执行中的AGV任务
                    List<AgvTask> agvTasks = agvTaskService.selectList(new EntityWrapper<AgvTask>().eq("wrk_sts", 302).eq("source_sta_no", staProtocol.getSiteId()));
                    if (agvTasks != null && agvTasks.size() > 0) {
                        continue;
                    }
                    // 堆垛机控制过滤
                    if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) {
//                        continue;
@@ -1288,16 +1377,6 @@
                        }
                        break;
                    }
                }else if ((staProtocol.getSiteId()==304 || staProtocol.getSiteId()==301) && staProtocol.isAutoing()
                        && (staProtocol.isLoading() || staProtocol.getWorkNo() != 0)) {
                    if (staProtocol.getSiteId() == 304){
                        wrkMast.setSourceStaNo(301);
                    }else {
                        wrkMast.setSourceStaNo(304);
                    }
                    wrkMast.setModiTime(new  Date());
                    wrkMastMapper.updateById(wrkMast);
                }
            }
@@ -1805,10 +1884,7 @@
                // 站点条件判断
                if (staProtocol.isAutoing()
                        && staProtocol.isInEnable()
                        && staProtocol.isEmptyMk()
                        && (staProtocol.getWorkNo() ==0)
                        && staProtocol.isPakMk()
//                        && staProtocol.getEmptyInType() == 1
                ) {
                    News.warnNoLog("" + mark + " - 0" + " - 开始执行:空栈板初始化入库,叉车入库站放货");
@@ -1841,7 +1917,6 @@
                    try {
                        LocTypeDto locTypeDto = new LocTypeDto(staProtocol);
                        SearchLocParam param = new SearchLocParam();
                        param.setIoType(10);
                        param.setSourceStaNo(emptyInSta.getStaNo());
@@ -2021,9 +2096,8 @@
            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, led.getDevpPlcId());
            // 命令集合
            List<LedCommand> commands = new ArrayList<>();
//            // 工作档集合
//            List<WrkMast> wrkMasts = new ArrayList<>();
            List<Integer> workNoList = new ArrayList<>();
            // 工作档集合
            List<WrkMast> wrkMasts = new ArrayList<>();
            for (Integer staNo : led.getStaArr()) {
                // 获取叉车站点
                StaProtocol staProtocol = devpThread.getStation().get(staNo);
@@ -2032,48 +2106,20 @@
                } else {
                    staProtocol = staProtocol.clone();
                }
                Integer wrkNo = null;
                Integer ioType = null;
                Integer targetStaNo = null;
                String sourceLocNo = null;
                String locNo = null;
                String barcode = null;
                // 获取工作档数据
                WrkMast wrkMast = wrkMastMapper.selectById(staProtocol.getWorkNo());
//                if (null == wrkMast || wrkMast.getWrkSts() < 14 || wrkMast.getIoType() < 100) { continue; }
                if (null == wrkMast) {
                    List<WrkMastLog> wrkMastLogs = wrkMastLogService.selectList(new EntityWrapper<WrkMastLog>()
                            .eq("wrk_no", staProtocol.getWorkNo())
                            .orderBy("modi_time", false)
                    );
                    if (wrkMastLogs.isEmpty()) {
                        continue;
                    }
                    WrkMastLog wrkMastLog = wrkMastLogs.get(0);
                    wrkNo = wrkMastLog.getWrkNo();
                    ioType = wrkMastLog.getIoType();
                    sourceLocNo = wrkMastLog.getSourceLocNo();
                    locNo = wrkMastLog.getLocNo();
                    targetStaNo = wrkMastLog.getStaNo();
                    barcode = wrkMastLog.getBarcode();
                }else {
                    wrkNo = wrkMast.getWrkNo();
                    ioType = wrkMast.getIoType();
                    sourceLocNo = wrkMast.getSourceLocNo();
                    locNo = wrkMast.getLocNo();
                    targetStaNo = wrkMast.getStaNo();
                    barcode = wrkMast.getBarcode();
                    continue;
                }
                News.warnNoLog("" + mark + " - 0" + " - 开始执行:出库  ===>> 工作档信息写入led显示器");
                workNoList.add(wrkNo);
                News.warnNoLog(""+mark+" - 0"+" - 开始执行:出库  ===>> 工作档信息写入led显示器");
                wrkMasts.add(wrkMast);
                // 组装命令
                LedCommand ledCommand = new LedCommand();
                ledCommand.setWorkNo(wrkNo);
                ledCommand.setIoType(ioType);
                ledCommand.setWorkNo(wrkMast.getWrkNo());
                ledCommand.setIoType(wrkMast.getIoType());
                // 出库模式
                switch (ioType) {
                switch (wrkMast.getIoType()) {
                    case 1:
                        ledCommand.setTitle("全板入库");
                        break;
@@ -2106,104 +2152,34 @@
                        ledCommand.setTitle("并板入库");
                        break;
                    default:
                        News.error("" + mark + " - 1" + " - 任务入出库类型错误!!![工作号:{}] [入出库类型:{}]", wrkNo, ioType);
                        News.error(""+mark+" - 1"+" - 任务入出库类型错误!!![工作号:{}] [入出库类型:{}]", wrkMast.getWrkNo(), wrkMast.getIoType());
                        break;
                }
                ledCommand.setSourceLocNo(sourceLocNo);
                ledCommand.setLocNo(locNo);
                ledCommand.setStaNo(targetStaNo);
                ledCommand.setBarcode(barcode);
                ledCommand.setSourceLocNo(wrkMast.getSourceLocNo());
                ledCommand.setLocNo(wrkMast.getLocNo());
                ledCommand.setStaNo(wrkMast.getStaNo());
//                ledCommand.setSourceStaNo(wrkMast.getSourceStaNo());
                if (ioType != 110 && ioType != 10) {
                    List<WrkDetl> wrkDetls = wrkDetlService.findByWorkNo(wrkNo);
                    if (!wrkDetls.isEmpty()) {
                        WrkDetl wrkDetl = wrkDetls.get(0);
                        double anfme = 0D;
                        double weight = 0D;
                        for (WrkDetl detl : wrkDetls) {
                            anfme += detl.getAnfme();
                            weight += detl.getWeight();
                            wrkDetl.setAnfme(anfme);
                            wrkDetl.setWeight(weight);
                        }
                        List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>()
                                .eq("loc_no", wrkMast.getSourceLocNo()));
                        double totalAnfme = 0D;
                        double totalWeight = 0D;
                        for (LocDetl locDetl : locDetls) {
                            totalAnfme += locDetl.getAnfme();
                            totalWeight += locDetl.getWeight();
                        }
                        wrkDetl.setStockNum(totalAnfme);
                        wrkDetl.setStockNum2(totalWeight);
                        ledCommand.getMatDtos().add(new MatDto(
                                wrkDetl.getMatnr()
                                , wrkDetl.getMaktx()
                                , wrkDetl.getAnfme()
                                , wrkDetl.getWeight()
                                , wrkDetl.getStockNum()
                                , wrkDetl.getStockNum2()
                                , wrkDetl.getSpecs()
                                , wrkDetl.getSku()
                                , wrkDetl.getZpallet()
                                , wrkDetl.getModel()
                                , wrkDetl.getSupp()
                                , wrkDetl.getKpCstmrName()
                                , wrkDetl.getOrderNo()
                                , wrkDetl.getCstateid$()
                        ));
                    }else {
                        List<WrkDetlLog> wrkDetlLogs = wrkDetlLogService.selectTodayByWrkNo(wrkNo);
                        if(!wrkDetlLogs.isEmpty()) {
                            WrkDetlLog wrkDetlLog = wrkDetlLogs.get(0);
                            double anfme = 0D;
                            double weight = 0D;
                            for (WrkDetlLog detl : wrkDetlLogs) {
                                anfme += detl.getAnfme();
                                weight += detl.getWeight();
                                wrkDetlLog.setAnfme(anfme);
                                wrkDetlLog.setWeight(weight);
                if (wrkMast.getIoType() != 110 && wrkMast.getIoType() != 10) {
                    List<WrkDetl> wrkDetls = wrkDetlService.findByWorkNo(wrkMast.getWrkNo());
                    try{
                        if (wrkMast.getIoType()>100){
                            for (WrkDetl wrkDetl : wrkDetls){
                                LocDetl locDetl = locDetlService.selectMatnrSpecs(wrkDetl.getMatnr(), wrkDetl.getSpecs(), wrkMast.getSourceLocNo());
                                wrkDetl.setWeight(locDetl.getAnfme());
                            }
                            List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>()
                                    .eq("loc_no", sourceLocNo));
                            double totalAnfme = 0D;
                            double totalWeight = 0D;
                            for (LocDetl locDetl : locDetls) {
                                totalAnfme += locDetl.getAnfme();
                                totalWeight += locDetl.getWeight();
                        }else {
                            for (WrkDetl wrkDetl : wrkDetls){
                                wrkDetl.setWeight(wrkDetl.getAnfme());
                            }
                            wrkDetlLog.setStockNum(totalAnfme);
                            wrkDetlLog.setStockNum2(totalWeight);
                            ledCommand.getMatDtos().add(new MatDto(
                                    wrkDetlLog.getMatnr()
                                    , wrkDetlLog.getMaktx()
                                    , wrkDetlLog.getAnfme()
                                    , wrkDetlLog.getWeight()
                                    , wrkDetlLog.getStockNum()
                                    , wrkDetlLog.getStockNum2()
                                    , wrkDetlLog.getSpecs()
                                    , wrkDetlLog.getSku()
                                    , wrkDetlLog.getZpallet()
                                    , wrkDetlLog.getModel()
                                    , wrkDetlLog.getSupp()
                                    , wrkDetlLog.getKpCstmrName()
                                    , wrkDetlLog.getOrderNo()
                                    , wrkDetlLog.getCstateid$()
                            ));
                        }
                    }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())));
                }
                commands.add(ledCommand);
            }
            Set<Integer> workNos = new HashSet<>(workNoList);
            Set<Integer> workNos = wrkMasts.stream().map(WrkMast::getWrkNo).collect(Collectors.toSet());
            // 获取LED线程
            LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, led.getId());
            // 相同工作号集合则过滤
@@ -2234,22 +2210,19 @@
                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);
                }
            }
            try {
                // 修改主档led标记
                for (Integer wrkNo : workNoList) {
                    WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", wrkNo));
                    if (wrkMast != null) {
                        wrkMast.setOveMk("Y");
                        wrkMast.setModiTime(new Date());
                        if (wrkMastMapper.updateById(wrkMast) == 0) {
                            News.errorNoLog("" + mark + " - 4" + " - 更新工作档失败");
                            throw new CoolException("更新工作档失败");
                        }
                for (WrkMast wrkMast : wrkMasts) {
                    wrkMast.setOveMk("Y");
                    wrkMast.setModiTime(new Date());
                    if (wrkMastMapper.updateById(wrkMast) == 0) {
                        News.errorNoLog(""+mark+" - 4"+" - 更新工作档失败");
                        throw new CoolException("更新工作档失败");
                    }
                }
@@ -2262,7 +2235,7 @@
            }
        }
        News.infoNoLog("" + mark + " - 0" + " - 出库  ===>> 工作档信息写入led显示器执行完成");
        News.infoNoLog(""+mark+" - 0"+" - 出库  ===>> 工作档信息写入led显示器执行完成");
    }
    /**
@@ -2270,7 +2243,7 @@
     */
    public synchronized void ledReset(Integer mark) {
        News.warnNoLog("" + mark + " - 0" + " - 开始执行:其他  ===>> LED显示器复位,显示默认信息");
        News.warnNoLog(""+mark+" - 0"+" - 开始执行:其他  ===>> LED显示器复位,显示默认信息");
        for (LedSlave led : slaveProperties.getLed()) {
            // 获取输送线plc线程
@@ -2294,13 +2267,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显示器复位,显示默认信息");
    }
    /**
@@ -2436,7 +2409,6 @@
            int workNo = commonService.getWorkNo(0);
            // 保存工作档
            WrkMast wrkMast = new WrkMast();
            wrkMast.setId();
            wrkMast.setWrkNo(workNo);
            wrkMast.setIoTime(new Date());
            wrkMast.setWrkSts(11L); // 工作状态:11.生成出库ID
src/main/java/com/zy/asrs/service/impl/RcsServiceImpl.java
@@ -4,15 +4,13 @@
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.Cools;
import com.core.common.R;
import com.zy.asrs.entity.*;
import com.zy.asrs.enums.RcsRetMethodEnum;
import com.zy.asrs.service.AgvTaskService;
import com.zy.asrs.service.RcsService;
import com.zy.asrs.service.TaskService;
import com.zy.core.cache.MessageQueue;
import com.zy.core.cache.SlaveConnection;
import com.zy.core.enums.SlaveType;
import com.zy.core.model.Task;
import com.zy.core.model.protocol.StaProtocol;
import com.zy.core.thread.SiemensDevpThread;
import lombok.extern.slf4j.Slf4j;
@@ -29,12 +27,8 @@
import java.net.URL;
import java.net.URLConnection;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@Slf4j
@Service
@@ -43,8 +37,11 @@
    @Value("${hik.url}")
    private String HIK_URL;
    @Value("${mes.url}")
    public String MES_URL;
    @Autowired
    private TaskService taskService;
    private AgvTaskService agvTaskService;
    /**
@@ -56,6 +53,7 @@
     */
    @Override
    public RcsReturn reporterTask(RcsReporterTask rcsReporterTask) {
        log.info("海康AGV站点任务请求={}", JSONObject.toJSONString(rcsReporterTask));
        RcsReturn rcsReturn = new RcsReturn();
@@ -71,70 +69,29 @@
        String slotCode = values.getString("slotCode");
        EntityWrapper<AgvTask> wrapper = new EntityWrapper<>();
        wrapper.eq("task_no", robotTaskCode);
        AgvTask task = taskService.selectOne(wrapper);
        if(!Cools.isEmpty(task)){
        AgvTask task = agvTaskService.selectOne(wrapper);
        if (!Cools.isEmpty(task)) {
            try {
                // q3,q8=1
                if ("1".equals(carrierType)) {    //AGV
                    switch (Objects.requireNonNull(RcsRetMethodEnum.getEnum(method))) {
                        //放货申请
                        case APPLY_PUT: {
                switch (Objects.requireNonNull(RcsRetMethodEnum.getEnum(method))) {
                    //放货申请
                    case APPLY_PUT: {
                        if(task.getStaNo().equals("401")||task.getStaNo().equals("402")||task.getStaNo().equals("307")) {
                            Integer sourceStaNo = Integer.valueOf(task.getStaNo());
                            SiemensDevpThread siemensDevpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
                            StaProtocol staProtocol = siemensDevpThread.getStation().get(sourceStaNo).clone();
                            //wcs反馈rcs继续执行
                            if (staProtocol != null && !staProtocol.isLoading() && !staProtocol.isEmptyOutType()) {
                                RcsTaskContinue rcsTaskContinue = new RcsTaskContinue();
                                rcsTaskContinue.setRobotTaskCode(task.getTaskNo());
                                rcsTaskContinue.setTriggerType("TASK");
                                rcsTaskContinue.setTriggerCode(task.getTaskNo());
                                if(task.getTaskType().equals("AGV补空料架")){
                                    RcsTaskContinue rcsTaskContinue = new RcsTaskContinue();
                                    rcsTaskContinue.setRobotTaskCode(task.getTaskNo()+"-"+(task.getCtnType()-1));
                                    rcsTaskContinue.setTriggerType("TASK");
                                    rcsTaskContinue.setTriggerCode(task.getTaskNo()+"-"+(task.getCtnType()-1));
                                String url =HIK_URL + "api/robot/controller/task/extend/continue";
                                String response = sendPost(url, JSONObject.toJSONString(rcsTaskContinue));
                                if (!StringUtils.isEmpty(response) && response.contains("code")){
                                    RcsReturn rcsReturn1 = JSONObject.parseObject(response, RcsReturn.class);
                                    if("200".equals(rcsReturn1.getCode())) {
                                        //出发PLC站点的扫码器扫码
                                        boolean result = MessageQueue.offer(SlaveType.Devp, 1, new com.zy.core.model.Task(3, staProtocol));
                                        log.info("AGV放货完成,给站点写9991工作号,下发任务:{},站点:{},agv任务号:{}",result,task.getStaNo(),task.getTaskNo());
                                        if (result) {
                                            // 返回RCS
                                            rcsReturn.setCode("SUCCESS");
                                            rcsReturn.setMessage("");
                                            JSONObject data = new JSONObject();
                                            data.put("robotTaskCode", robotTaskCode);
                                            rcsReturn.setData(data);
                                        }else {
                                            // 返回RCS
                                            rcsReturn.setCode("Err_Internal");
                                            rcsReturn.setMessage("");
                                            JSONObject data = new JSONObject();
                                            data.put("robotTaskCode", robotTaskCode);
                                            rcsReturn.setData(data);
                                        }
                                    String url = HIK_URL + "api/robot/controller/task/extend/continue";
                                    String response = sendPost(url, JSONObject.toJSONString(rcsTaskContinue));
                                    if (!StringUtils.isEmpty(response) && response.contains("code")) {
                                        log.info("允许AGV放货成功");
                                    }
                                }
                            }
                        }
                        break;
                        //放货完成 --》agv已经离开
                        case TASK_END: {
                            Integer sourceStaNo = Integer.valueOf(task.getStaNo());
                            SiemensDevpThread siemensDevpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
                            StaProtocol staProtocol = siemensDevpThread.getStation().get(sourceStaNo).clone();
                            //放货完成 --》agv已经离开 --》给PLC站点写9991工作号
                            if (staProtocol != null && staProtocol.isLoading() && staProtocol.isEmptyOutType() && staProtocol.getWorkNo() ==0) {
                                staProtocol.setWorkNo((short) 9991);
                                staProtocol.setStaNo(Short.valueOf(task.getStaNo()));
                                boolean result = MessageQueue.offer(SlaveType.Devp, 1, new com.zy.core.model.Task(2, staProtocol));
                                log.info("AGV放货完成,给站点写9991工作号,下发任务:{},站点:{},agv任务号:{}",result,task.getStaNo(),task.getTaskNo());
                                if(result){
                                    // 更新任务状态等内部逻辑
                                    task.setWrkSts(304L);   // 301 任务下发、302 任务执行、303 任务中断、304 任务结束
                                    task.setModiTime(new Date());
                                    taskService.updateById(task);
                                    // 返回RCS
                                    rcsReturn.setCode("SUCCESS");
                                    rcsReturn.setMessage("");
@@ -142,42 +99,27 @@
                                    data.put("robotTaskCode", robotTaskCode);
                                    rcsReturn.setData(data);
                                }else {
                                    // 返回RCS
                                    rcsReturn.setCode("Err_Internal");
                                    rcsReturn.setMessage("");
                                    JSONObject data = new JSONObject();
                                    data.put("robotTaskCode", robotTaskCode);
                                    rcsReturn.setData(data);
                                }
                            }
                        }
                        break;
                        //rcs请求wms取货申请
                        case APPLY_PICK: {
                            Integer sourceStaNo = Integer.valueOf(task.getSourceStaNo());
                            SiemensDevpThread siemensDevpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
                            StaProtocol staProtocol = siemensDevpThread.getStation().get(sourceStaNo).clone();
                            //判断站点是否有料架和托盘
                            if (staProtocol != null && staProtocol.isLoading()
                                    && staProtocol.isEmptyOutType()
                                    && staProtocol.getWorkNo() >0 && staProtocol.getWorkNo() <9990) {
                                RcsTaskContinue rcsTaskContinue = new RcsTaskContinue();
                                rcsTaskContinue.setRobotTaskCode(task.getTaskNo());
                                rcsTaskContinue.setTriggerType("TASK");
                                rcsTaskContinue.setTriggerCode(task.getTaskNo());
                                String url =HIK_URL + "api/robot/controller/task/extend/continue";
                                String response = sendPost(url, JSONObject.toJSONString(rcsTaskContinue));
                                if (!StringUtils.isEmpty(response) && response.contains("code")){
                                    RcsReturn rcsReturn1 = JSONObject.parseObject(response, RcsReturn.class);
                                    if("200".equals(rcsReturn1.getCode())) {
                                    //出发PLC站点的扫码器扫码
                                    boolean result = MessageQueue.offer(SlaveType.Devp, 1, new com.zy.core.model.Task(3, staProtocol));
                                    if (result) {
                                        log.info("入库站点={}触发扫码成功", staProtocol.getSiteId());
                                        // 返回RCS
                                        rcsReturn.setCode("SUCCESS");
                                        rcsReturn.setMessage("");
                                        JSONObject data = new JSONObject();
                                        data.put("robotTaskCode", robotTaskCode);
                                        rcsReturn.setData(data);
                                    }else {
                                        RcsTaskContinue rcsTaskContinue = new RcsTaskContinue();
                                        rcsTaskContinue.setRobotTaskCode(task.getTaskNo()+"-"+(task.getCtnType()-1));
                                        rcsTaskContinue.setTriggerType("TASK");
                                        rcsTaskContinue.setTriggerCode(task.getTaskNo()+"-"+(task.getCtnType()-1));
                                        String url = HIK_URL + "api/robot/controller/task/extend/continue";
                                        String response = sendPost(url, JSONObject.toJSONString(rcsTaskContinue));
                                        if (!StringUtils.isEmpty(response) && response.contains("code")) {
                                            log.info("允许AGV放货成功");
                                        }
                                    } else {
                                        // 返回RCS
                                        rcsReturn.setCode("Err_Internal");
                                        rcsReturn.setMessage("");
@@ -187,27 +129,65 @@
                                    }
                                }
                            }
                        }else {
                            TransParent transParent = new TransParent();
                            transParent.setTaskno(task.getTaskNo()+"-"+(task.getCtnType()-1));
                            transParent.setTaskname(task.getTaskNo()+"-"+(task.getCtnType()-1));
                            transParent.setStationId(task.getStaNo());
                            transParent.setAgvCode("2");//连接器库
                            int i = applyInStation(transParent);
                            if (i == 1) {
                                rcsReturn.setCode("SUCCESS");
                                rcsReturn.setMessage("");
                                JSONObject data = new JSONObject();
                                data.put("robotTaskCode", robotTaskCode);
                                rcsReturn.setData(data);
                            }else {
                                // 返回RCS
                                rcsReturn.setCode("Err_Internal");
                                rcsReturn.setMessage("");
                                JSONObject data = new JSONObject();
                                data.put("robotTaskCode", robotTaskCode);
                                rcsReturn.setData(data);
                            }
                        }
                        break;
                        //rcs取货完成,已退出输送线
                        case PICK_COMPLETE: {
                            Integer sourceStaNo = Integer.valueOf(task.getSourceStaNo());
                    }
                    break;
                    //放货完成 --》agv已经离开
                    case TASK_END: {
                        if(task.getStaNo().equals("401")||task.getStaNo().equals("402")||task.getStaNo().equals("307")) {
                            Integer sourceStaNo = Integer.valueOf(task.getStaNo());
                            SiemensDevpThread siemensDevpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
                            StaProtocol staProtocol = siemensDevpThread.getStation().get(sourceStaNo).clone();
                            Boolean boo = false;
                            Short wrkNo = 9991;
                            //放货完成 --》agv已经离开 --》给PLC站点写9991工作号
                            if (staProtocol != null && !staProtocol.isLoading() && !staProtocol.isEmptyOutType() && staProtocol.getWorkNo() >0 && staProtocol.getWorkNo() <9990) {
                                staProtocol.setWorkNo((short) 0);
                                staProtocol.setStaNo((short) 0);
                            //补空料架 --》agv已经立库 --》给PLC站点写9995工作号
                            if (task.getTaskType().equals("AGV补空料架") && staProtocol != null && !staProtocol.isLoading() && staProtocol.isEmptyOutType() && staProtocol.getWorkNo() == 0) {
                                boo = true;
                                wrkNo = 9995;
                            } else if (!task.getTaskType().equals("AGV补空料架") && staProtocol != null && staProtocol.isLoading() && staProtocol.isEmptyOutType() && staProtocol.getWorkNo() == 0) {
                                boo = true;
                            }
                            if (boo) {
                                staProtocol.setWorkNo(wrkNo);//空料架到位信号点
                                staProtocol.setStaNo(Short.valueOf("0"));
                                boolean result = MessageQueue.offer(SlaveType.Devp, 1, new com.zy.core.model.Task(2, staProtocol));
                                log.info("AGV取货完成,给站点写0工作号,下发任务:{},站点:{},agv任务号:{}",result,task.getStaNo(),task.getTaskNo());
                                if(result){
                                log.info("AGV放货完成,给站点写9991工作号,下发任务:{},站点:{},agv任务号:{}", result, task.getStaNo(), task.getTaskNo());
                                if (result) {
                                    // 更新任务状态等内部逻辑
                                    task.setWrkSts(304L);   // 301 任务下发、302 任务执行、303 任务中断、304 任务结束
                                    task.setModiTime(new Date());
                                    agvTaskService.updateById(task);
                                    // 返回RCS
                                    rcsReturn.setCode("SUCCESS");
                                    rcsReturn.setMessage("");
                                    JSONObject data = new JSONObject();
                                    data.put("robotTaskCode", robotTaskCode);
                                    rcsReturn.setData(data);
                                }else {
                                } else {
                                    // 返回RCS
                                    rcsReturn.setCode("Err_Internal");
                                    rcsReturn.setMessage("");
@@ -215,16 +195,232 @@
                                    data.put("robotTaskCode", robotTaskCode);
                                    rcsReturn.setData(data);
                                }
                            } else {
                                // 返回RCS
                                rcsReturn.setCode("Err_Internal");
                                rcsReturn.setMessage("");
                                JSONObject data = new JSONObject();
                                data.put("robotTaskCode", robotTaskCode);
                                rcsReturn.setData(data);
                            }
                        }else {
                            // 更新任务状态等内部逻辑
                            task.setWrkSts(304L);   // 301 任务下发、302 任务执行、303 任务中断、304 任务结束
                            task.setModiTime(new Date());
                            agvTaskService.updateById(task);
                            // 返回RCS
                            rcsReturn.setCode("SUCCESS");
                            rcsReturn.setMessage("");
                            JSONObject data = new JSONObject();
                            data.put("robotTaskCode", robotTaskCode);
                            rcsReturn.setData(data);
                        }
                    }
                    break;
                    //rcs请求wms取货申请
                    case APPLY_PICK: {
                        if(task.getSourceStaNo().equals("401")||task.getSourceStaNo().equals("402")||task.getSourceStaNo().equals("307")) {
                            Integer sourceStaNo = Integer.valueOf(task.getSourceStaNo());
                            SiemensDevpThread siemensDevpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
                            StaProtocol staProtocol = siemensDevpThread.getStation().get(sourceStaNo).clone();
                            //判断站点是否有料架和托盘
                            if (staProtocol != null && (staProtocol.isLoading() || task.getTaskType().equals("AGV空料架回缓存区"))
                                    && staProtocol.isEmptyOutType()) {
                                RcsTaskContinue rcsTaskContinue = new RcsTaskContinue();
                                rcsTaskContinue.setRobotTaskCode(task.getTaskNo() + "-" + (task.getCtnType() - 1));
                                rcsTaskContinue.setTriggerType("TASK");
                                rcsTaskContinue.setTriggerCode(task.getTaskNo() + "-" + (task.getCtnType() - 1));
                                String url = HIK_URL + "api/robot/controller/task/extend/continue";
                                String response = sendPost(url, JSONObject.toJSONString(rcsTaskContinue));
                                if (!StringUtils.isEmpty(response) && response.contains("code")) {
                                    RcsReturn rcsReturn1 = JSONObject.parseObject(response, RcsReturn.class);
                                    if ("200".equals(rcsReturn1.getCode())) {
                                        // 返回RCS
                                        rcsReturn.setCode("SUCCESS");
                                        rcsReturn.setMessage("");
                                        JSONObject data = new JSONObject();
                                        data.put("robotTaskCode", robotTaskCode);
                                        rcsReturn.setData(data);
                                    } else {
                                        // 返回RCS
                                        rcsReturn.setCode("Err_Internal");
                                        rcsReturn.setMessage("");
                                        JSONObject data = new JSONObject();
                                        data.put("robotTaskCode", robotTaskCode);
                                        rcsReturn.setData(data);
                                    }
                                }
                            }
                        }else {
                            TransParent transParent = new TransParent();
                            transParent.setTaskno(task.getTaskNo()+"-"+(task.getCtnType()-1));
                            transParent.setTaskname(task.getTaskNo()+"-"+(task.getCtnType()-1));
                            transParent.setStationId(task.getStaNo());
                            transParent.setAgvCode("2");//连接器库
                            int i = applyInStation(transParent);
                            if (i == 1) {
                                rcsReturn.setCode("SUCCESS");
                                rcsReturn.setMessage("");
                                JSONObject data = new JSONObject();
                                data.put("robotTaskCode", robotTaskCode);
                                rcsReturn.setData(data);
                            }else {
                                // 返回RCS
                                rcsReturn.setCode("Err_Internal");
                                rcsReturn.setMessage("");
                                JSONObject data = new JSONObject();
                                data.put("robotTaskCode", robotTaskCode);
                                rcsReturn.setData(data);
                            }
                        }
                        break;
                    }
                    break;
                    //rcs取货完成,已退出输送线
                    case PICK_COMPLETE: {
                        Integer sourceStaNo = Integer.valueOf(task.getSourceStaNo());
                        SiemensDevpThread siemensDevpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
                        StaProtocol staProtocol = siemensDevpThread.getStation().get(sourceStaNo).clone();
                        //放货完成 --》agv已经离开 --》给PLC站点写9991工作号
                        if (staProtocol != null && !staProtocol.isLoading() && !staProtocol.isEmptyOutType()) {
                            staProtocol.setWorkNo((short) 0);
                            staProtocol.setStaNo((short) 0);
                            boolean result = MessageQueue.offer(SlaveType.Devp, 1, new com.zy.core.model.Task(2, staProtocol));
                            log.info("AGV取货完成,给站点写0工作号,下发任务:{},站点:{},agv任务号:{}", result, task.getStaNo(), task.getTaskNo());
                            if (result) {
                                // 返回RCS
                                rcsReturn.setCode("SUCCESS");
                                rcsReturn.setMessage("");
                                JSONObject data = new JSONObject();
                                data.put("robotTaskCode", robotTaskCode);
                                rcsReturn.setData(data);
                            } else {
                                // 返回RCS
                                rcsReturn.setCode("Err_Internal");
                                rcsReturn.setMessage("");
                                JSONObject data = new JSONObject();
                                data.put("robotTaskCode", robotTaskCode);
                                rcsReturn.setData(data);
                            }
                        default: {
                        }
                    }
                    break;
                    //AGV取货离站请求
                    case APPLY_IN_OFF_STATION:{
                        //如果是立库站点直接允许离站
                        if(task.getSourceStaNo().equals("401")||task.getSourceStaNo().equals("402")||task.getSourceStaNo().equals("307")) {
                            RcsTaskContinue rcsTaskContinue = new RcsTaskContinue();
                            rcsTaskContinue.setRobotTaskCode(task.getTaskNo() + "-" + (task.getCtnType() - 1));
                            rcsTaskContinue.setTriggerType("TASK");
                            rcsTaskContinue.setTriggerCode(task.getTaskNo() + "-" + (task.getCtnType() - 1));
                            String url = HIK_URL + "api/robot/controller/task/extend/continue";
                            String response = sendPost(url, JSONObject.toJSONString(rcsTaskContinue));
                            if (!StringUtils.isEmpty(response) && response.contains("code")) {
                                RcsReturn rcsReturn1 = JSONObject.parseObject(response, RcsReturn.class);
                                if ("200".equals(rcsReturn1.getCode())) {
                                    // 返回RCS
                                    rcsReturn.setCode("SUCCESS");
                                    rcsReturn.setMessage("");
                                    JSONObject data = new JSONObject();
                                    data.put("robotTaskCode", robotTaskCode);
                                    rcsReturn.setData(data);
                                } else {
                                    // 返回RCS
                                    rcsReturn.setCode("Err_Internal");
                                    rcsReturn.setMessage("");
                                    JSONObject data = new JSONObject();
                                    data.put("robotTaskCode", robotTaskCode);
                                    rcsReturn.setData(data);
                                }
                            }
                        }else{
                            //如果是工位需要像mes请求离站
                            TransParent transParent = new TransParent();
                            transParent.setTaskno(task.getTaskNo()+"-"+(task.getCtnType()-1));
                            transParent.setTaskname(task.getTaskNo()+"-"+(task.getCtnType()-1));
                            transParent.setStationId(task.getStaNo());
                            transParent.setAgvCode("2");//连接器库
                            int i = applyOutStation(transParent);
                            if (i == 1) {
                                rcsReturn.setCode("SUCCESS");
                                rcsReturn.setMessage("");
                                JSONObject data = new JSONObject();
                                data.put("robotTaskCode", robotTaskCode);
                                rcsReturn.setData(data);
                            }else {
                                // 返回RCS
                                rcsReturn.setCode("Err_Internal");
                                rcsReturn.setMessage("");
                                JSONObject data = new JSONObject();
                                data.put("robotTaskCode", robotTaskCode);
                                rcsReturn.setData(data);
                            }
                        }
                            break;
                    }
                    //AGV放货离站请求
                    case APPLY_OFF_STATION:{
                        //如果是立库站点直接允许离站
                        if(task.getStaNo().equals("401")||task.getStaNo().equals("402")||task.getStaNo().equals("307")) {
                            RcsTaskContinue rcsTaskContinue = new RcsTaskContinue();
                            rcsTaskContinue.setRobotTaskCode(task.getTaskNo() + "-" + (task.getCtnType() - 1));
                            rcsTaskContinue.setTriggerType("TASK");
                            rcsTaskContinue.setTriggerCode(task.getTaskNo() + "-" + (task.getCtnType() - 1));
                            String url = HIK_URL + "api/robot/controller/task/extend/continue";
                            String response = sendPost(url, JSONObject.toJSONString(rcsTaskContinue));
                            if (!StringUtils.isEmpty(response) && response.contains("code")) {
                                RcsReturn rcsReturn1 = JSONObject.parseObject(response, RcsReturn.class);
                                if ("200".equals(rcsReturn1.getCode())) {
                                    // 返回RCS
                                    rcsReturn.setCode("SUCCESS");
                                    rcsReturn.setMessage("");
                                    JSONObject data = new JSONObject();
                                    data.put("robotTaskCode", robotTaskCode);
                                    rcsReturn.setData(data);
                                } else {
                                    // 返回RCS
                                    rcsReturn.setCode("Err_Internal");
                                    rcsReturn.setMessage("");
                                    JSONObject data = new JSONObject();
                                    data.put("robotTaskCode", robotTaskCode);
                                    rcsReturn.setData(data);
                                }
                            }
                        }else{
                            //如果是工位需要像mes请求离站
                            TransParent transParent = new TransParent();
                            transParent.setTaskno(task.getTaskNo()+"-"+(task.getCtnType()-1));
                            transParent.setTaskname(task.getTaskNo()+"-"+(task.getCtnType()-1));
                            transParent.setStationId(task.getStaNo());
                            transParent.setAgvCode("2");//连接器库
                            int i = applyOutStation(transParent);
                            if (i == 1) {
                                rcsReturn.setCode("SUCCESS");
                                rcsReturn.setMessage("");
                                JSONObject data = new JSONObject();
                                data.put("robotTaskCode", robotTaskCode);
                                rcsReturn.setData(data);
                            }else {
                                // 返回RCS
                                rcsReturn.setCode("Err_Internal");
                                rcsReturn.setMessage("");
                                JSONObject data = new JSONObject();
                                data.put("robotTaskCode", robotTaskCode);
                                rcsReturn.setData(data);
                            }
                        }
                        break;
                    }
                    default: {
                    }
                    break;
                }
            } catch (Exception e) {
                log.error("RCS反馈任务进度处理异常 - {}", rcsReporterTask, e);
@@ -241,7 +437,7 @@
    /**
     * 向指定 URL 发送POST方法的请求
     *
     * @param url 发送请求的 URL
     * @param url   发送请求的 URL
     * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
     * @return 所代表远程资源的响应结果
     */
@@ -249,8 +445,7 @@
        PrintWriter out = null;
        BufferedReader in = null;
        StringBuilder result = new StringBuilder();
        try
        {
        try {
            log.info("sendPost - {} - {}", url, param);
            URL realUrl = new URL(url);
            URLConnection conn = realUrl.openConnection();
@@ -273,46 +468,70 @@
            out.flush();
            in = new BufferedReader(new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8));
            String line;
            while ((line = in.readLine()) != null)
            {
            while ((line = in.readLine()) != null) {
                result.append(line);
            }
            log.info("recv - {}", result);
        }
        catch (ConnectException e)
        {
        } catch (ConnectException e) {
            log.error("调用HttpUtils.sendPost ConnectException, url=" + url + ",param=" + param, e);
        }
        catch (SocketTimeoutException e)
        {
        } catch (SocketTimeoutException e) {
            log.error("调用HttpUtils.sendPost SocketTimeoutException, url=" + url + ",param=" + param, e);
        }
        catch (IOException e)
        {
        } catch (IOException e) {
            log.error("调用HttpUtils.sendPost IOException, url=" + url + ",param=" + param, e);
        }
        catch (Exception e)
        {
        } catch (Exception e) {
            log.error("调用HttpsUtil.sendPost Exception, url=" + url + ",param=" + param, e);
        }
        finally
        {
            try
            {
                if (out != null)
                {
        } finally {
            try {
                if (out != null) {
                    out.close();
                }
                if (in != null)
                {
                if (in != null) {
                    in.close();
                }
            }
            catch (IOException ex)
            {
            } catch (IOException ex) {
                log.error("调用in.close Exception, url=" + url + ",param=" + param, ex);
            }
        }
        return result.toString();
    }
    /**
     * 入站请求:转发AGV->入站请求->给MES
     *
     * @param apply
     * @return
     */
    public int applyInStation(TransParent apply) {
        String path = "AGVTransportPalletNotice";
        String url = MES_URL + path;
        String response = RcsServiceImpl.sendPost(url, JSONObject.toJSONString(apply));
        if (!StringUtils.isEmpty(response) && response.contains("Success")) {
            MesReturn mesReturn = JSONObject.parseObject(response, MesReturn.class);
            if ("1".equals(mesReturn.getSuccess())) {
                return 1;
            }
        }
        return 0;
    }
    /**
     * 离站请求:转发AGV->离站请求->给MES
     *
     * @param apply
     * @return
     */
    public int applyOutStation(TransParent apply) {
        String url = MES_URL + "AGVDepartureRequest";
        String response = RcsServiceImpl.sendPost(url, JSONObject.toJSONString(apply));
        if (!StringUtils.isEmpty(response) && response.contains("Success")) {
            MesReturn mesReturn = JSONObject.parseObject(response, MesReturn.class);
            if ("1".equals(mesReturn.getSuccess())) {
                return 1;
            }
        }
        return 0;
    }
}
src/main/java/com/zy/asrs/service/impl/TaskServiceImpl.java
File was deleted
src/main/java/com/zy/asrs/service/impl/WrkMastLogServiceImpl.java
@@ -1,17 +1,40 @@
package com.zy.asrs.service.impl;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.exception.CoolException;
import com.zy.asrs.entity.WrkMast;
import com.zy.asrs.mapper.WrkMastLogMapper;
import com.zy.asrs.entity.WrkMastLog;
import com.zy.asrs.service.WrkMastLogService;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.zy.asrs.service.WrkMastService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Objects;
@Service("wrkMastLogService")
public class WrkMastLogServiceImpl extends ServiceImpl<WrkMastLogMapper, WrkMastLog> implements WrkMastLogService {
    @Autowired
    private WrkMastService wrkMastService;
    @Autowired
    private WrkMastLogService wrkMastLogService;
    @Override
    public boolean save(Integer workNo) {
        return this.baseMapper.save(workNo) > 0;
        WrkMast mast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", workNo));
        if (Objects.isNull(mast)) {
            throw new CoolException("数据错误:任务不存在!!");
        }
        WrkMastLog mastLog = new WrkMastLog();
        BeanUtils.copyProperties(mast, mastLog);
        mastLog.setLogId(mast.getId());
        if (!wrkMastLogService.insert(mastLog)) {
            throw new CoolException("任务日志保存失败!!");
        }
        return true;
    }
}
src/main/java/com/zy/common/model/MatDto.java
@@ -71,4 +71,14 @@
        this.orderNo = orderNo;
        this.cstateid = cstateid;
    }
    public MatDto(String matNo, String maktx, Double count,Double total,String specs,String sku) {
        this.specs = specs;
        this.matnr = matNo;
        this.maktx = maktx;
        this.maknx = maktx;
        this.count = count;
        this.total = total;
        this.sku = sku;
    }
}
src/main/java/com/zy/core/MainProcess.java
@@ -42,12 +42,12 @@
                    }
                    // 演示
                    mainService.crnDemoOfLocMove1();
//                    mainService.crnDemoOfLocMove1();
                    // 入出库模式切换函数
//                    mainService.ioConvert();
                    // 入库  ===>> 入库站到堆垛机站,根据条码扫描生成入库工作档
                    mainService.generateStoreWrkFile(1); // 组托
                    mainService.generateStoreWrkFile0(2); // WMS入库
//                    mainService.generateStoreWrkFile0(2); // WMS入库
                    Thread.sleep(500);
                    // 拣料、并板、盘点再入库
                    mainService.stnToCrnStnPick(3);
src/main/java/com/zy/core/thread/SiemensCrnThread.java
@@ -181,10 +181,10 @@
                crnProtocol.setxSpeed(siemensNet.getByteTransform().TransInt16(result.Content, 28));
                crnProtocol.setySpeed(siemensNet.getByteTransform().TransInt16(result.Content, 32));
                crnProtocol.setzSpeed(siemensNet.getByteTransform().TransInt16(result.Content, 36));
                crnProtocol.setxDistance(siemensNet.getByteTransform().TransInt16(result.Content, 40));
                crnProtocol.setyDistance(siemensNet.getByteTransform().TransInt16(result.Content, 44));
                crnProtocol.setxDuration(siemensNet.getByteTransform().TransInt16(result.Content, 48));
                crnProtocol.setyDuration(siemensNet.getByteTransform().TransInt16(result.Content, 52));
                crnProtocol.setxDistance((short) siemensNet.getByteTransform().TransSingle(result.Content, 40));
                crnProtocol.setyDistance((short) siemensNet.getByteTransform().TransSingle(result.Content, 44));
                crnProtocol.setxDuration((short) siemensNet.getByteTransform().TransSingle(result.Content, 48));
                crnProtocol.setyDuration((short) siemensNet.getByteTransform().TransSingle(result.Content, 52));
                OutputQueue.CRN.offer(MessageFormat.format("【{0}】[id:{1}] <<<<< 实时数据更新成功",DateUtils.convert(new Date()), slave.getId()));
src/main/resources/application.yml
@@ -36,6 +36,13 @@
wms:
  url: 127.0.0.1:8083/ljqwms
#mes对接
mes:
  url: http://192.9.100.173:8088/prod-api/basicmodel/WmsFit/Api/
  #默认接口操作人员id
  defaultUserId: 30
#海康对接
hik:
  switch: false
src/main/resources/mapper/WrkMastMapper.xml
@@ -4,7 +4,8 @@
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.zy.asrs.entity.WrkMast">
        <id column="wrk_no" property="wrkNo" />
        <id column="id" property="id" />
        <result column="wrk_no" property="wrkNo" />
        <result column="inv_wh" property="invWh" />
        <result column="ymd" property="ymd" />
        <result column="mk" property="mk" />
@@ -104,7 +105,7 @@
    </select>
    <select id="selectPickStep" resultMap="BaseResultMap">
        select top 1 * from asr_wrk_mast where barcode=#{barcode} and wrk_sts=14 and (io_type=103 or io_type=107 or io_type=104)
        select top 1 * from asr_wrk_mast where barcode=#{barcode} and wrk_sts=20 and (io_type=103 or io_type=107 or io_type=104)
    </select>
    <select id="selectPakOutStep1" resultMap="BaseResultMap">