野心家
2025-05-09 b1fe5e3f3eed2e4cf20a1ca2871db3f3f6576f2d
初始化
17个文件已修改
878 ■■■■■ 已修改文件
pom.xml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/CrnController.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/param/StorageEscalationParam.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/LocMastMapper.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/LocMastService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java 156 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/TaskLogScheduler.java 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/MainProcess.java 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/SiemensCrnThread.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/SiemensDevpThread.java 335 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-prod.yml 244 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/LocMastMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/wcs/js/common.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/wcs/js/console.map.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/wms/js/common.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pom.xml
@@ -9,13 +9,13 @@
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.zy</groupId>
    <artifactId>jdzwcs</artifactId>
    <artifactId>scwcs</artifactId>
    <version>1.0.0</version>
    <packaging>war</packaging>
    <properties>
        <java.version>1.8</java.version>
        <cool.version>3.4.5</cool.version>
        <cool.version>3.4.0</cool.version>
        <mysql-driver.version>5.1.47</mysql-driver.version>
        <mybatis-plus.version>2.3.2</mybatis-plus.version>
        <fastjson.version>1.2.58</fastjson.version>
@@ -200,7 +200,7 @@
    </dependencies>
    <build>
        <finalName>jdzwcs</finalName>
        <finalName>scwcs</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
src/main/java/com/zy/asrs/controller/CrnController.java
@@ -429,12 +429,12 @@
        command.setTaskNo((short) 0); // 工作号
        command.setAckFinish((short) 0);  // 任务完成确认位
        command.setTaskMode(CrnTaskModeType.LOC_MOVE); // 任务模式
        command.setSourcePosZ(param.getSourceRow());     // 源库位排
        command.setSourcePosX(param.getSourceBay());     // 源库位列
        command.setSourcePosY(param.getSourceLev());     // 源库位层
        command.setDestinationPosZ(param.getRow());     // 目标库位排
        command.setDestinationPosX(param.getBay());     // 目标库位列
        command.setDestinationPosY(param.getLev());     // 目标库位层
        command.setSourcePosX(param.getSourceRow());     // 源库位排
        command.setSourcePosY(param.getSourceBay());     // 源库位列
        command.setSourcePosZ(param.getSourceLev());     // 源库位层
        command.setDestinationPosX(param.getRow());     // 目标库位排
        command.setDestinationPosY(param.getBay());     // 目标库位列
        command.setDestinationPosZ(param.getLev());     // 目标库位层
//        command.setCommand((short)1);
        LocMast sourceLoc = locMastService.selectOne(new EntityWrapper<LocMast>().eq("row1", command.getSourcePosX())
                .eq("bay1", command.getSourcePosY()).eq("lev1", command.getSourcePosZ()));
src/main/java/com/zy/asrs/entity/param/StorageEscalationParam.java
@@ -10,4 +10,8 @@
    private Integer WCSStatus=0;
    //错误信息   具体的错误信息(超高,超重等)
    private String WCSErrorMessage="";
    //是否满板 1满板  0空板
    private int StaType=1;
    //库位类型 1高库位 0低库位
    private int LocType=0;
}
src/main/java/com/zy/asrs/mapper/LocMastMapper.java
@@ -30,7 +30,7 @@
    LocMast queryDemoSourceLoc(@Param("crnNo") Integer crnNo);
    LocMast queryDemoLoc(@Param("crnNo") Integer crnNo);
    LocMast queryDemoLoc(@Param("crnNo") Integer crnNo,@Param("locType1") short locType1);
    @Select("select count(*) as count from asr_loc_mast where 1=1 and loc_sts = 'O' and loc_type1 = #{locType1} and crn_no = #{crnNo}")
    Integer selectEmptyLocCount(@Param("locType1") Short locType1, @Param("crnNo") Integer crnNo);
src/main/java/com/zy/asrs/service/LocMastService.java
@@ -37,7 +37,7 @@
     * @param crn
     * @return
     */
    LocMast queryDemoLoc(Integer crn);
    LocMast queryDemoLoc(Integer crn,short locType1);
    /**
     * 检查当前库位所属巷道的空库位数量
src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java
@@ -59,8 +59,8 @@
    }
    @Override
    public LocMast queryDemoLoc(Integer crn) {
        return this.baseMapper.queryDemoLoc(crn);
    public LocMast queryDemoLoc(Integer crn,short locType1) {
        return this.baseMapper.queryDemoLoc(crn,locType1);
    }
    @Override
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -113,6 +113,70 @@
    private CrnController crnController;
    @Autowired
    private SiteController siteController;
    /**
     * 堆垛机演示  ===>> 库位移转
     */
    public synchronized void crnDemoOfLocMove1() {
        try {
            List <BasCrnp> basCrnps =basCrnpService.selectList(new EntityWrapper<BasCrnp>());
            for (BasCrnp crn : basCrnps) {
                if (!crn.getEmpIn().equals("1")) {
                    continue;
                }   // 必须为演示状态
                CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getCrnNo());
                CrnProtocol crnProtocol = crnThread.getCrnProtocol();
                if (crnProtocol == null) {
                    continue;
                }
                // 只有当堆垛机空闲 并且 无任务时才继续执行
                if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getTaskNo() == 0 && crnProtocol.getModeType() == CrnModeType.AUTO) {
                    // 获取移库工作档信息
                    WrkMast wrkMast = wrkMastMapper.selectLocMove(crn.getCrnNo());
                    if (null != wrkMast) {
                        continue;
                    }
                    LocMast sourceLoc = locMastService.queryDemoSourceLoc(crn.getCrnNo());
                    LocMast loc = locMastService.queryDemoLoc(crn.getCrnNo(),sourceLoc.getLocType1());
                    if (null == sourceLoc || null == loc) {
                        continue;
                    }
                    String sourceLocNo = sourceLoc.getLocNo();
                    String locNo = loc.getLocNo();
                    // 获取工作号
                    int workNo = commonService.getWorkNo(0);
                    // 保存工作档
                    TaskWrk taskWrk = new TaskWrk();
                    taskWrk.setWrkNo(workNo);
                    taskWrk.setTaskNo(workNo+"");//任务号
                    taskWrk.setWrkSts(11); // 工作状态:11.生成出库ID
                    taskWrk.setIoType(3); // 入出库状态: 3.库格移载
                    taskWrk.setIoPri(13);
                    taskWrk.setCrnNo(crn.getCrnNo());
                    taskWrk.setStartPoint(sourceLocNo);//起点
                    taskWrk.setTargetPoint(locNo);
                    taskWrk.setBarcode(sourceLoc.getBarcode()); // 托盘码
                    taskWrk.setModiTime(new Date());
                    int res = taskWrkMapper.insert(taskWrk);
                    if (res == 0) {
                        throw new CoolException("保存工作档失败");
                    }else {
                        loc.setCtnKind(1);
                        locMastService.updateById(loc);
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
        }
    }
    @Synchronized
    public void shiftTargetToCyclePoint() throws IOException, InterruptedException {
        try {
@@ -164,7 +228,7 @@
                                MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(4, staProtocol5));
                            }
                        } else {
                            if(staProtocol.isLoading() && (staProtocol.getStaNo() == 105 || staProtocol.getStaNo() == 110 ||  staProtocol.getStaNo() == 111)){
                            if (staProtocol.isLoading() && (staProtocol.getStaNo() == 105 || staProtocol.getStaNo() == 110 || staProtocol.getStaNo() == 111)) {
                                short workNo = staProtocol.getWorkNo();
                                staProtocol.setWorkNo(workNo);
                                staProtocol.setStaNo((short) 112);
@@ -221,9 +285,6 @@
    }
    public synchronized void generateStoreWrkFile1() throws IOException, InterruptedException {
        try {
            // 根据输送线plc遍历
@@ -276,7 +337,7 @@
                    // 判断是否满足入库条件
                    if (staProtocol.isAutoing() && staProtocol.isLoading()
                            && staProtocol.isInEnable()
                            && !staProtocol.isEmptyMk() && workNo >= 9790
                            && workNo >= 9990
                            && staProtocol.isPakMk()) {
                        // 获取条码扫描仪信息
                        BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, inSta.getBarcode());
@@ -303,6 +364,10 @@
                        }
                        log.info("组托入库={}", storageEscalationParam);
                        storageEscalationParam.setBoxNo(BoxNo);
                        //是否满板 1满板  0空板
                        storageEscalationParam.setStaType(staProtocol.isEmptyMk()? 0:1);
                        //库位类型 1高库位 0低库位
                        storageEscalationParam.setLocType(staProtocol.isHigh()? 1:0);
                        String response = "";
                        Boolean success = false;
                        try {
@@ -313,20 +378,13 @@
                                    .build()
                                    .doPost();
                            JSONObject jsonObject = JSON.parseObject(response);
                            if(back){
                                if(staProtocol.getWorkNo()>=9801&&staProtocol.getWorkNo()<=9825){
                                    staProtocol.setStaNo((short)105);
                                } else if (staProtocol.getWorkNo()>=9826&&staProtocol.getWorkNo()<=9850) {
                                    staProtocol.setStaNo((short)107);
                                }else if (staProtocol.getWorkNo()>=9851&&staProtocol.getWorkNo()<=9875) {
                                    staProtocol.setStaNo((short)109);
                                }else if (staProtocol.getWorkNo()>=9876 && staProtocol.getWorkNo() <= 9900){
                                    staProtocol.setStaNo((short)110);
                                }
                            if (back) {
                                staProtocol.setWorkNo((short) 9991);
                                staProtocol.setStaNo(inSta.getBackSta().shortValue());
                                devpThread.setPakMk(staProtocol.getSiteId(), false);
                                MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                            }else{
                                if (!Cools.isEmpty(response)&&!Cools.isEmpty(jsonObject.get("ReturnStatus"))&&jsonObject.get("ReturnStatus").equals(0) && !Cools.isEmpty(jsonObject.get("Result").toString())) {
                            } else {
                                if (!Cools.isEmpty(response) && !Cools.isEmpty(jsonObject.get("ReturnStatus")) && jsonObject.get("ReturnStatus").equals(0) && !Cools.isEmpty(jsonObject.get("Result").toString())) {
                                    Result result = JSON.parseObject(jsonObject.get("Result").toString(), Result.class);
                                    // 创新一个入库工作档
                                    TaskWrk taskWrk = taskWrkService.selectByTaskNo(result.getTaskNo());
@@ -342,7 +400,7 @@
                                            staProtocol.setStaNo(staDesc.getCrnStn().shortValue());
                                            MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                                            HashMap<String, Object> hashMap = new HashMap<>();
                                            hashMap.put("TaskNo",taskWrk.getTaskNo());
                                            hashMap.put("TaskNo", taskWrk.getTaskNo());
                                            try {
                                                //开始上报,任务开始时,WCS回调WMS
                                                response = new HttpHandler.Builder()
@@ -353,7 +411,7 @@
                                                        .doPost();
                                                JSONObject jsonObject1 = JSON.parseObject(response);
                                                Boolean bool = false;
                                                if(jsonObject1.get("ReturnStatus").equals(0)){
                                                if (jsonObject1.get("ReturnStatus").equals(0)) {
                                                    taskWrk.setStatus(2);//派发任务
                                                    bool = true;
                                                    taskWrkService.updateById(taskWrk);
@@ -371,22 +429,14 @@
                                            }
                                        }
                                    } else {
//                                    staProtocol.setWorkNo((short) 9991);
                                        if(staProtocol.getWorkNo()>=9801&&staProtocol.getWorkNo()<=9825){
                                            staProtocol.setStaNo((short)105);
                                        } else if (staProtocol.getWorkNo()>=9826&&staProtocol.getWorkNo()<=9850) {
                                            staProtocol.setStaNo((short)107);
                                        }else if (staProtocol.getWorkNo()>=9851&&staProtocol.getWorkNo()<=9875) {
                                            staProtocol.setStaNo((short)109);
                                        }else{
                                            staProtocol.setStaNo((short)110);
                                        }
                                        staProtocol.setWorkNo((short) 9991);
                                        staProtocol.setStaNo(inSta.getBackSta().shortValue());
                                        devpThread.setPakMk(staProtocol.getSiteId(), false);
                                        MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                                    }
                                } else {
//                                staProtocol.setWorkNo((short) 9991);
                                    staProtocol.setWorkNo((short) 9991);
                                    staProtocol.setStaNo(inSta.getBackSta().shortValue());
                                    devpThread.setPakMk(staProtocol.getSiteId(), false);
                                    MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
@@ -876,7 +926,7 @@
                crnCommand.setDestinationPosY(Utils.getBayShort(taskWrk.getTargetPoint()));     // 目标库位层
                crnCommand.setDestinationPosZ(Utils.getLevShort(taskWrk.getTargetPoint()));     // 目标库位排
                crnCommand.setCommand((short) 1);
                log.info("堆垛机入库任务下发={}",crnCommand);
                log.info("堆垛机入库任务下发={}", crnCommand);
                if (!CommandUtils.offer(SlaveType.Crn, taskWrk.getCrnNo(), new Task(2, crnCommand), false)) {
                    log.error("堆垛机命令生成失败,堆垛机号={},任务数据={}", taskWrk.getCrnNo(), JSON.toJSON(crnCommand));
                    throw new CoolException("堆垛机命令生成失败");
@@ -896,7 +946,7 @@
     * 出库  ===>>  库位到堆垛机站
     * 2022-06-09 TQS修改,查询工作档LIST,遍历下发,防止第一个任务堵塞出库
     */
    public synchronized void  locToCrnStn(CrnSlave slave, CrnProtocol crnProtocol) {
    public synchronized void locToCrnStn(CrnSlave slave, CrnProtocol crnProtocol) {
        List<TaskWrk> taskWrksInitial = taskWrkMapper.selectPakOut(slave.getId(), null);
        if (taskWrksInitial.size() == 0) {
            return;
@@ -916,24 +966,24 @@
                        continue;
                    }
                    LocMast locMast=locMastService.selectByLocNo(taskWrk.getStartPoint());
                    LocMast locMast = locMastService.selectByLocNo(taskWrk.getStartPoint());
                    //判断其库位是否为深库位,如果为深库位找其浅库位是都有货
                    if(locMast.getRow1()==1||locMast.getRow1()==5){
                        LocMast locMast1=locMastService.selectOne(new EntityWrapper<LocMast>()
                                .eq("row1", (locMast.getRow1()+1))
                                .eq("bay1",locMast.getBay1())
                                .eq("lev1",locMast.getLev1()).eq("loc_sts","F"));
                        if (!Cools.isEmpty(locMast1)){
                            log.info(locMast.getLocNo()+"出深库位,浅库位有货");
                    if (locMast.getRow1() == 1 || locMast.getRow1() == 5) {
                        LocMast locMast1 = locMastService.selectOne(new EntityWrapper<LocMast>()
                                .eq("row1", (locMast.getRow1() + 1))
                                .eq("bay1", locMast.getBay1())
                                .eq("lev1", locMast.getLev1()).eq("loc_sts", "F"));
                        if (!Cools.isEmpty(locMast1)) {
                            log.info(locMast.getLocNo() + "出深库位,浅库位有货");
                            continue;
                        }
                    }else if(locMast.getRow1()==4||locMast.getRow1()==8){
                        LocMast locMast1=locMastService.selectOne(new EntityWrapper<LocMast>()
                                .eq("row1", (locMast.getRow1()-1))
                                .eq("bay1",locMast.getBay1())
                                .eq("lev1",locMast.getLev1()).eq("loc_sts","F"));
                        if (!Cools.isEmpty(locMast1)){
                            log.info(locMast.getLocNo()+"出深库位,浅库位有货");
                    } else if (locMast.getRow1() == 4 || locMast.getRow1() == 8) {
                        LocMast locMast1 = locMastService.selectOne(new EntityWrapper<LocMast>()
                                .eq("row1", (locMast.getRow1() - 1))
                                .eq("bay1", locMast.getBay1())
                                .eq("lev1", locMast.getLev1()).eq("loc_sts", "F"));
                        if (!Cools.isEmpty(locMast1)) {
                            log.info(locMast.getLocNo() + "出深库位,浅库位有货");
                            continue;
                        }
                    }
@@ -964,8 +1014,8 @@
                            break;
                        }
                        int storeCount = basDevpService.getStoreCount();
                        if(storeCount >= maxCount){
                            log.error("输送线暂存数达到上限{}",storeCount);
                        if (storeCount >= maxCount) {
                            log.error("输送线暂存数达到上限{}", storeCount);
                            break;
                        }
@@ -1104,7 +1154,7 @@
                        log.error("修改工作档状态 11.生成出库ID => 12.吊车出库中 失败!!,工作号={}", taskWrk.getWrkNo());
                    }
                    String response = "";
                    Boolean bool=false;
                    Boolean bool = false;
                    HashMap<String, Object> headParam = new HashMap<>();
                    headParam.put("TaskNo", taskWrk.getTaskNo());
                    try {
@@ -1116,7 +1166,7 @@
                                .build()
                                .doPost();
                        JSONObject jsonObject = JSON.parseObject(response);
                        if(jsonObject.get("ReturnStatus").equals(0)){
                        if (jsonObject.get("ReturnStatus").equals(0)) {
                            bool = true;
                            taskWrk.setStatus(2);
                            taskWrkMapper.updateById(taskWrk);
@@ -1125,7 +1175,7 @@
                    } catch (Exception e) {
                        log.error("wcs派发移库库任务上报wms失败", taskWrk);
//                        throw new CoolException("wcs派发移库库任务上报wms失败");
                    }finally {
                    } finally {
                        apiLogService.save("wcs派发移库任务上报wms"
                                , wmsUrl + taskStatusFeedbackPath
                                , null
@@ -1216,7 +1266,7 @@
                crnOperatorParam.setCrnNo(crn.getId());
                R r = crnController.crnTaskComplete(crnOperatorParam);
                Thread.sleep(1000);
                if(!r.get("code").equals(200)){
                if (!r.get("code").equals(200)) {
                    return;
                }
                if (!Cools.isEmpty(taskWrk)) {
src/main/java/com/zy/asrs/task/TaskLogScheduler.java
@@ -11,7 +11,10 @@
import com.zy.asrs.service.*;
import com.zy.asrs.service.impl.TaskWrkLogServiceImpl;
import com.zy.asrs.utils.PostMesDataUtils;
import com.zy.common.service.CommonService;
import com.zy.common.utils.HttpHandler;
import com.zy.system.entity.Config;
import com.zy.system.service.ConfigService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
@@ -57,30 +60,15 @@
    private String TaskExecCallback;
    @Value("${wms.taskStatusFeedbackPath}")
    private String taskStatusFeedbackPath;
    @Autowired
    private ConfigService configService;
    @Scheduled(cron = "0/3 * * * * ? ")
    public void execute() throws IOException {
        for (TaskWrk taskWrk : taskWrkService.selectToBeHistoryData()) {
            HashMap<String, Object> headParam = new HashMap<>();
            if (taskWrk.getStatus().equals(TaskStatusType.OVER.id) || taskWrk.getStatus() == 7) {//完成
                headParam.put("Result", 1);
            } else if (taskWrk.getStatus().equals(TaskStatusType.CANCEL.id)) {
                headParam.put("Result", 2);
            }
            String response = "";
            Boolean bool = false;
            try {
                headParam.put("TaskNo", taskWrk.getTaskNo());
                log.info("wcs手动完成任务上报wms={}", taskWrk);
                response = new HttpHandler.Builder()
                        // .setHeaders(headParam)
                        .setUri(wmsUrl)
                        .setPath(TaskExecCallback)
                        .setJson(JSON.toJSONString(headParam))
                        .build()
                        .doPost();
                JSONObject jsonObject = JSON.parseObject(response);
            Config config =configService.selectByCode("ysms");
            if(config.getValue().equals("Y")&&taskWrk.getIoType()==3){
                TaskWrkLog taskWrkLog = new TaskWrkLog(taskWrk);
                if (!wrkLogService.insert(taskWrkLog)) {
                    throw new CoolException("转历史档失败" + taskWrkLog);
@@ -88,19 +76,48 @@
                if (!taskWrkService.deleteById(taskWrk)) {
                    throw new CoolException("任务档删除失败" + taskWrkLog);
                }
                bool = true;
            } catch (Exception e) {
                log.error("wcs手动完成任务上报wms失败{},返回值={}", taskWrk, response);
            } finally {
                apiLogService.save("wcs完成或者取消任务上报wms"
                        , wmsUrl + TaskExecCallback
                        , null
                        , "127.0.0.1"
                        , JSON.toJSONString(headParam)
                        , response
                        , bool
                );
            }else{
                HashMap<String, Object> headParam = new HashMap<>();
                if (taskWrk.getStatus().equals(TaskStatusType.OVER.id) || taskWrk.getStatus() == 7) {//完成
                    headParam.put("Result", 1);
                } else if (taskWrk.getStatus().equals(TaskStatusType.CANCEL.id)) {
                    headParam.put("Result", 2);
                }
                String response = "";
                Boolean bool = false;
                try {
                    headParam.put("TaskNo", taskWrk.getTaskNo());
                    log.info("wcs手动完成任务上报wms={}", taskWrk);
                    response = new HttpHandler.Builder()
                            // .setHeaders(headParam)
                            .setUri(wmsUrl)
                            .setPath(TaskExecCallback)
                            .setJson(JSON.toJSONString(headParam))
                            .build()
                            .doPost();
                    JSONObject jsonObject = JSON.parseObject(response);
                    TaskWrkLog taskWrkLog = new TaskWrkLog(taskWrk);
                    if (!wrkLogService.insert(taskWrkLog)) {
                        throw new CoolException("转历史档失败" + taskWrkLog);
                    }
                    if (!taskWrkService.deleteById(taskWrk)) {
                        throw new CoolException("任务档删除失败" + taskWrkLog);
                    }
                    bool = true;
                } catch (Exception e) {
                    log.error("wcs手动完成任务上报wms失败{},返回值={}", taskWrk, response);
                } finally {
                    apiLogService.save("wcs完成或者取消任务上报wms"
                            , wmsUrl + TaskExecCallback
                            , null
                            , "127.0.0.1"
                            , JSON.toJSONString(headParam)
                            , response
                            , bool
                    );
                }
            }
        }
    }
src/main/java/com/zy/core/MainProcess.java
@@ -47,7 +47,7 @@
                    }
                    // 演示
//                    mainService.crnDemoOfLocMove1();
                    mainService.crnDemoOfLocMove1();
                    // 入库  ===>> 入库站到堆垛机站,根据条码扫描生成入库工作档
                    mainService.generateStoreWrkFile1(); // 组托
                    // 出库  ===>>  堆垛机出库站到出库站
@@ -68,13 +68,13 @@
                    //环形循环函数
//                    mainService.shiftTargetToCyclePoint();
//                    mainService.shiftCyclePointToTarget();
                    i++;
                    if (i > 2) {
                        //环形循环函数
                        mainService.shiftTargetToCyclePoint();
                        mainService.shiftCyclePointToTarget();
                        i = 0;
                    }
//                    i++;
//                    if (i > 2) {
//                        //环形循环函数
//                        mainService.shiftTargetToCyclePoint();
//                        mainService.shiftCyclePointToTarget();
//                        i = 0;
//                    }
                    //自动派发任务
   //                 mainService.autoDistribute();
src/main/java/com/zy/core/thread/SiemensCrnThread.java
@@ -192,7 +192,7 @@
            OutputQueue.CRN.offer(MessageFormat.format("【{0}】[id:{1}] <<<<< 实时数据更新成功",DateUtils.convert(new Date()), slave.getId()));
            OutputQueue.CRN.offer(MessageFormat.format("【{0}】[id:{1}] <<<<< 实时数据更新成功", DateUtils.convert(new Date()), slave.getId()));
            // 复位信号
            if (crnProtocol.getTaskFinish() == 0) {
src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -49,32 +49,72 @@
    private Map<Integer, StaProtocol> station = new ConcurrentHashMap<>();
    private short heartBeatVal = 1;
    public static final ArrayList<Integer> staNos1 = new ArrayList<Integer>() {{
        add(100);add(101);add(102);add(103);add(104);
        add(105);add(106);add(107);add(108);add(109);
        add(110);add(111);add(112);add(113);add(114);
        add(115);add(116);add(117);add(118);add(119);
        add(120);add(121);add(122);add(123);add(124);
        add(125);add(1001);add(1002);add(1003);add(1004);
        add(1001);
        add(1002);
        add(1003);
        add(1004);
        add(1005);
        add(1010);
        add(1006);
        add(1007);
        add(1008);
        add(1009);
        add(1011);
        add(1012);
        add(1013);
        add(1014);
        add(1015);
        add(1016);
        add(1017);
        add(1018);
        add(1019);
        add(1020);
    }};
    /*public static final ArrayList<Integer> staNos2 = new ArrayList<Integer>() {{
        add(200);add(201);add(202);add(203);
        add(204);add(205);add(206);add(207);
        add(208);add(209);add(210);add(211);
        add(212);add(213);add(214);add(215);
        add(216);add(217);add(218);add(219);
        add(220);add(221);add(222);add(223);
        add(224);add(225);add(226);add(227);
        add(228);add(229);add(230);add(231);
        add(232);add(233);add(234);add(235);
    public static final ArrayList<Integer> staNos2 = new ArrayList<Integer>() {{
        add(2001);
        add(2002);
        add(2003);
        add(2004);
        add(2005);
        add(2006);
        add(2007);
        add(2008);
        add(2009);
        add(2010);
        add(2011);
        add(2012);
        add(2013);
        add(2014);
        add(2015);
        add(2016);
        add(2017);
        add(2018);
        add(2019);
    }};
    public static final ArrayList<Integer> staNos3 = new ArrayList<Integer>() {{
        add(300);add(301);add(302);add(303);
        add(304);add(305);add(306);add(307);
        add(1051);
        add(1052);
        add(1053);
        add(1054);
        add(1055);
        add(1056);
        add(1057);
        add(1058);
    }};
    public static final ArrayList<Integer> staNos4 = new ArrayList<Integer>() {{
        add(400);add(401);add(402);add(403);
        add(404);add(405);add(406);add(407);
    }};*/
        add(2051);
        add(2052);
        add(2053);
        add(2054);
        add(2055);
        add(2056);
        add(2057);
        add(2058);
    }};
    /**
     * 条码数量
@@ -90,17 +130,18 @@
     * 4.出库模式
     */
    public IoModeType ioModeOf2F = IoModeType.NONE;
//    public IoModeType ioMode = IoModeType.NONE;
    //    public IoModeType ioMode = IoModeType.NONE;
    private ArrayList<Integer> getStaNo() {
        switch (slave.getId()) {
            case 1:
                return staNos1;
            /*case 2:
            case 2:
                return staNos2;
            case 3:
                return staNos3;
            case 4:
                return staNos4;*/
                return staNos4;
            default:
                throw new CoolException("服务器异常");
        }
@@ -128,12 +169,12 @@
                        break;
                    // 写数据 ID+目标站
                    case 2:
                        write((StaProtocol)task.getData());
                        write((StaProtocol) task.getData());
                        read();
                        break;
                    // 写数据 ID+目标站
                    case 4:
                        writeCycle((StaProtocol)task.getData());
                        writeCycle((StaProtocol) task.getData());
                        read();
                        break;
                   /* case 3:
@@ -187,12 +228,12 @@
        siemensS7Net.setRack(slave.getRack().byteValue());
        siemensS7Net.setSlot(slave.getSlot().byteValue());
        OperateResult connect = siemensS7Net.ConnectServer();
        if(connect.IsSuccess){
        if (connect.IsSuccess) {
            result = true;
            OutputQueue.DEVP.offer(MessageFormat.format( "【{0}】输送线plc连接成功 ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()));
            OutputQueue.DEVP.offer(MessageFormat.format("【{0}】输送线plc连接成功 ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()));
            log.info("输送线plc连接成功 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
        } else {
            OutputQueue.DEVP.offer(MessageFormat.format( "【{0}】输送线plc连接失败!!! ===>> [id:{1}] [ip:{2}] [port:{3}]  [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()));
            OutputQueue.DEVP.offer(MessageFormat.format("【{0}】输送线plc连接失败!!! ===>> [id:{1}] [ip:{2}] [port:{3}]  [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()));
            log.error("输送线plc连接失败!!! ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
//            DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
//            deviceErrorService.addDeviceError("devp", slave.getId(), "输送线plc连接失败");
@@ -210,7 +251,7 @@
//        updateIoMode();
        ArrayList<Integer> staNos = getStaNo();
        int staNoSize = staNos.size();
        OperateResultExOne<byte[]> result = siemensS7Net.Read("DB101.0", (short) (staNoSize*8));
        OperateResultExOne<byte[]> result = siemensS7Net.Read("DB101.0", (short) (staNoSize * 8));
        if (result.IsSuccess) {
            for (int i = 0; i < staNoSize; i++) {
                Integer siteId = staNos.get(i); // 站点编号
@@ -220,11 +261,11 @@
                    staProtocol.setSiteId(siteId);
                    station.put(siteId, staProtocol);
                }
                staProtocol.setWorkNo((short)siemensS7Net.getByteTransform().TransInt32(result.Content, i*8));     // 工作号
                staProtocol.setWorkNo((short) siemensS7Net.getByteTransform().TransInt32(result.Content, i * 8));     // 工作号
                staProtocol.setStaNo(siemensS7Net.getByteTransform().TransInt16(result.Content, i*8 + 4));   // 目标站
                staProtocol.setStaNo(siemensS7Net.getByteTransform().TransInt16(result.Content, i * 8 + 4));   // 目标站
                boolean[] status = siemensS7Net.getByteTransform().TransBool(result.Content, i*8 + 6, 2);
                boolean[] status = siemensS7Net.getByteTransform().TransBool(result.Content, i * 8 + 6, 2);
                staProtocol.setAutoing(status[0]);  // 自动
                staProtocol.setLoading(status[1]);  // 有物
                staProtocol.setInEnable(status[2]); // 可入
@@ -240,90 +281,38 @@
            }
        }
//        OperateResultExOne<byte[]> resultAgvAndPlc = siemensS7Net.Read("DB102.0", (short) 30);
//        if (resultAgvAndPlc.IsSuccess) {
//            for (int i = 0; i < staNoSize; i++) {
//                int sign =(i+2)/2-1;
//                if ((i+2)%2!=0){
//                    Integer siteId = staNos.get(i); // 站点编号
//                    StaProtocol staProtocol = station.get(siteId);
//                    if (null == staProtocol) {
//                        staProtocol = new StaProtocol();
//                        staProtocol.setSiteId(siteId);
//                        station.put(siteId, staProtocol);
//                    }
//                    staProtocol.setAgvStartPick(siemensS7Net.getByteTransform().TransInt16(resultAgvAndPlc.Content, sign*6+4));     // 允许取货
//                    staProtocol.setAgvStartPlace((short)0);   // 允许放货
//                    continue;
//                }
//                Integer siteId = staNos.get(i); // 站点编号
//                StaProtocol staProtocol = station.get(siteId);
//                if (null == staProtocol) {
//                    staProtocol = new StaProtocol();
//                    staProtocol.setSiteId(siteId);
//                    station.put(siteId, staProtocol);
//                }
//                staProtocol.setAgvStartPick(siemensS7Net.getByteTransform().TransInt16(resultAgvAndPlc.Content, sign*6));     // 允许取货
//                staProtocol.setAgvStartPlace(siemensS7Net.getByteTransform().TransInt16(resultAgvAndPlc.Content, sign*6 + 2));   // 允许放货
//            }
//        }
//        OperateResultExOne<byte[]> resultAgvAndPlcOk = siemensS7Net.Read("DB132.0", (short) 30);
//        if (resultAgvAndPlcOk.IsSuccess) {
//            for (int i = 0; i < staNoSize; i++) {
//                int sign =(i+2)/2-1;
//                if ((i+2)%2!=0){
//                    Integer siteId = staNos.get(i); // 站点编号
//                    StaProtocol staProtocol = station.get(siteId);
//                    if (null == staProtocol) {
//                        staProtocol = new StaProtocol();
//                        staProtocol.setSiteId(siteId);
//                        station.put(siteId, staProtocol);
//                    }
//                    staProtocol.setAgvTargetPick(siemensS7Net.getByteTransform().TransInt16(resultAgvAndPlcOk.Content, sign*6+4));     // 允许取货
//                    staProtocol.setAgvTargetPlace((short)0);   // 允许放货
//                    continue;
//                }
//                Integer siteId = staNos.get(i); // 站点编号
//                StaProtocol staProtocol = station.get(siteId);
//                if (null == staProtocol) {
//                    staProtocol = new StaProtocol();
//                    staProtocol.setSiteId(siteId);
//                    station.put(siteId, staProtocol);
//                }
//                try{
//                    staProtocol.setAgvTargetPick(siemensS7Net.getByteTransform().TransInt16(resultAgvAndPlcOk.Content, sign*6));     // 取货完成
//                    if (staProtocol.getAgvTargetPick()!=0){
//                        System.out.println(staProtocol.getAgvTargetPick());
//                    }
//                    staProtocol.setAgvTargetPlace(siemensS7Net.getByteTransform().TransInt16(resultAgvAndPlcOk.Content, sign*6 + 2));   // 放货完成
//                    if (staProtocol.getAgvTargetPlace()!=0){
//                        System.out.println(staProtocol.getAgvTargetPlace());
//                    }
//                }catch (Exception e){
//                    log.error(""+e);
//                }
//            }
//        }
        if (slave.getId() == 1) {
            //条码
            //Thread.sleep(200);
            OperateResultExOne<byte[]> result2 = siemensS7Net.Read("DB101.848.0", (short) 8);
            if (result2.IsSuccess) {
                for (int i = 0; i < 1; i++) {
                    String barcode = siemensS7Net.getByteTransform().TransString(result2.Content, i * 8, 8, "UTF-8");
                    BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, i + 1);
                    if (!Cools.isEmpty(barcodeThread) && !barcodeThread.getBarcode().equals(barcode)) {
                        barcodeThread.setBarcode(barcode);
                    }
        //条码
        Thread.sleep(200);
        OperateResultExOne<byte[]> result2 = siemensS7Net.Read("DB101.840.0", (short) 8);
        if (result2.IsSuccess) {
            for (int i = 0; i < 1; i++) {
                String barcode = siemensS7Net.getByteTransform().TransString(result2.Content, i * 8, 8, "UTF-8");
                BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, i + 1);
                if (!Cools.isEmpty(barcodeThread) && !barcodeThread.getBarcode().equals(barcode)) {
                    barcodeThread.setBarcode(barcode);
                }
            }
        }
            //外形检测
            OperateResultExOne<byte[]> resultErr1 = siemensS7Net.Read("DB101.810.0", (short) (barcodeSize*1));
            StaProtocol staProtocol1 = station.get(116);
        //外形检测
        OperateResultExOne<byte[]> resultErr1 = siemensS7Net.Read("DB101.802.0", (short) (barcodeSize * 1));
        if (resultErr1.IsSuccess) {
            int sta = 0;
            switch (slave.getId()) {
                case 1:
                    sta = 1014;
                    break;
                case 2:
                    sta = 2007;
                    break;
                case 3:
                    sta = 1052;
                    break;
                case 4:
                    sta = 2056;
                    break;
            }
            StaProtocol staProtocol1 = station.get(sta);
            boolean[] status1 = siemensS7Net.getByteTransform().TransBool(resultErr1.Content, 0, 1);
            staProtocol1.setFrontErr(status1[0]);
            staProtocol1.setBackErr(status1[1]);
@@ -332,25 +321,25 @@
            staProtocol1.setRightErr(status1[4]);
            staProtocol1.setWeightErr(status1[5]);
            staProtocol1.setBarcodeErr(status1[6]);
        }
            OperateResultExOne<byte[]> resultErr = siemensS7Net.Read("DB101.922.0", (short) (staNoSize * 4));
            if (resultErr.IsSuccess) {
                for (int i = 0; i < staNoSize; i++) {
                    Integer siteId = staNos.get(i); // 站点编号
                    boolean[] status = siemensS7Net.getByteTransform().TransBool(resultErr.Content, i * 4, 1);
                    StaProtocol staProtocol = station.get(siteId);
                    staProtocol.setBreakerErr(status[0]);
                    staProtocol.setInfraredErr(status[1]);
                    staProtocol.setOutTimeErr(status[2]);
                    staProtocol.setSeizeSeatErr(status[3]);
                    staProtocol.setWrkYgoodsN(status[4]);
                    staProtocol.setInverterErr(status[5]);
                    staProtocol.setContactErr(status[6]);
                    staProtocol.setUpcontactErr(status[7]);
                }
        OperateResultExOne<byte[]> resultErr = siemensS7Net.Read("DB101.922.0", (short) (staNoSize * 4));
        if (resultErr.IsSuccess) {
            for (int i = 0; i < staNoSize; i++) {
                Integer siteId = staNos.get(i); // 站点编号
                boolean[] status = siemensS7Net.getByteTransform().TransBool(resultErr.Content, i * 4, 1);
                StaProtocol staProtocol = station.get(siteId);
                staProtocol.setBreakerErr(status[0]);
                staProtocol.setInfraredErr(status[1]);
                staProtocol.setOutTimeErr(status[2]);
                staProtocol.setSeizeSeatErr(status[3]);
                staProtocol.setWrkYgoodsN(status[4]);
                staProtocol.setInverterErr(status[5]);
                staProtocol.setContactErr(status[6]);
                staProtocol.setUpcontactErr(status[7]);
            }
        }
@@ -377,9 +366,8 @@
//            this.ioMode = IoModeType.get(result2.Content);
//        }
        if (result.IsSuccess ) {
            OutputQueue.DEVP.offer(MessageFormat.format("【{0}】[id:{1}] <<<<< 实时数据更新成功",DateUtils.convert(new Date()), slave.getId()));
        if (result.IsSuccess) {
            OutputQueue.DEVP.offer(MessageFormat.format("【{0}】[id:{1}] <<<<< 实时数据更新成功", DateUtils.convert(new Date()), slave.getId()));
            // 根据实时信息更新数据库
            try {
@@ -418,48 +406,48 @@
        }
        ArrayList<Integer> staNos = getStaNo();
        int index = staNos.indexOf(staProtocol.getSiteId());
        if (staProtocol.getAgvTypeSign()==0 || staProtocol.getAgvTypeSign()==2 ){  //0取货
            switch (staProtocol.getSiteId()){
        if (staProtocol.getAgvTypeSign() == 0 || staProtocol.getAgvTypeSign() == 2) {  //0取货
            switch (staProtocol.getSiteId()) {
                case 100:
                    index=32;
                    index = 32;
                    break;
                case 101:
                    index=34;
                    index = 34;
                    break;
                case 102:
                    index=38;
                    index = 38;
                    break;
                case 103:
                    index=40;
                    index = 40;
                    break;
                case 104:
                    index=44;
                    index = 44;
                    break;
                case 105:
                    index=46;
                    index = 46;
                    break;
                case 106:
                    index=50;
                    index = 50;
                    break;
                case 107:
                    index=52;
                    index = 52;
                    break;
                default:
                    return;
            }
        }else {
            switch (staProtocol.getSiteId()){
        } else {
            switch (staProtocol.getSiteId()) {
                case 100:
                    index=30;
                    index = 30;
                    break;
                case 102:
                    index=36;
                    index = 36;
                    break;
                case 104:
                    index=42;
                    index = 42;
                    break;
                case 106:
                    index=48;
                    index = 48;
                    break;
                default:
                    return;
@@ -471,28 +459,29 @@
        int writeCount = 0;
        do {
            short textWrite = 1;// 任务完成
            if (staProtocol.getAgvTypeSign()>1){
            if (staProtocol.getAgvTypeSign() > 1) {
                textWrite = 0;// 任务复位
            }
            write = siemensS7Net.Write("DB102." + index, textWrite);
            if(write.IsSuccess){
                writeCount=6;
            }else {
            if (write.IsSuccess) {
                writeCount = 6;
            } else {
                writeCount++;
                log.error("写入输送线取放货完成命令后读取失败。输送线plc编号={},站点数据={},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
            }
        }while (writeCount<5);
        } while (writeCount < 5);
        if (!write.IsSuccess) {
            OutputQueue.DEVP.offer(MessageFormat.format("【{0}】写入输送线站点数据失败。输送线plc编号={1},站点数据={2}", slave.getId(), JSON.toJSON(staProtocol)));
            log.error("写入输送线取放货完成站点数据失败。输送线plc编号={},站点数据={}", slave.getId(), JSON.toJSON(staProtocol));
        } else {
            OutputQueue.DEVP.offer(MessageFormat.format("【{0}】 输送线命令下发 [id:{1}] >>>>> {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(staProtocol)));
            log.info("输送线取放货完成命令下发码垛完成  给输送线写任务完成 [id:{}] >>>>> 命令下发: {}",  slave.getId(), JSON.toJSON(staProtocol));
            log.info("输送线取放货完成命令下发码垛完成  给输送线写任务完成 [id:{}] >>>>> 命令下发: {}", slave.getId(), JSON.toJSON(staProtocol));
        }
    }
    private void write(StaProtocol staProtocol) throws InterruptedException {
        if (staProtocol == null) {
            return;
@@ -510,7 +499,7 @@
        boolean writeFlag = false; // 任务下发成功标记
        String plcAddressWorkNo = "DB100." + index * 6;
        String plcAddressStaNo = "DB100." + (index * 6 + 4);
        Thread.sleep(100);
        while (writeCount < 5) {
            // **读取当前PLC状态,避免不必要的写入**
            OperateResultExOne<byte[]> readResult = siemensS7Net.Read(plcAddressWorkNo, (short) 6);
@@ -561,8 +550,8 @@
        int writeCount = 0; // 任务下发尝试次数
        boolean writeFlag = false; // 任务下发成功标记
        String plcAddressWorkNo = "";
        String plcAddressStaNo = "" ;
        switch (staProtocol.getSiteId()){
        String plcAddressStaNo = "";
        switch (staProtocol.getSiteId()) {
            case 105:
                plcAddressWorkNo = "DB73." + 0;
                plcAddressStaNo = "DB73." + 4;
@@ -689,16 +678,16 @@
        int writeCount = 0;
        //任务下发成功标识
        boolean writeFlag = false;
        while(writeCount < 5){
            writeResult = siemensS7Net.Write("DB100." + index*4, array);    // 工作号、目标站
        while (writeCount < 5) {
            writeResult = siemensS7Net.Write("DB100." + index * 4, array);    // 工作号、目标站
            if(writeResult.IsSuccess){
            if (writeResult.IsSuccess) {
                Thread.sleep(200);
                OperateResultExOne<byte[]> readResult = siemensS7Net.Read("DB100." + index*4, (short)4);
                if(readResult.IsSuccess){
                OperateResultExOne<byte[]> readResult = siemensS7Net.Read("DB100." + index * 4, (short) 4);
                if (readResult.IsSuccess) {
                    short workNo = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 0);
                    short staNo = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 2);
                    if(staProtocol.getWorkNo().equals(workNo) && staProtocol.getStaNo().equals(staNo)){
                    if (staProtocol.getWorkNo().equals(workNo) && staProtocol.getStaNo().equals(staNo)) {
                        //任务命令写入成功
                        writeFlag = true;
                        log.info("写入输送线命令后返回成功,并且回读成功。输送线plc编号={},{},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
@@ -708,7 +697,7 @@
                    } else {//返回结果是成功了,但是真实值不相同
                        writeCount++;
                        OutputQueue.DEVP.offer(MessageFormat.format("【{0}】写入输送线命令后返回成功,但是读取任务值不一致。输送线plc编号={1},站点数据={2},写入次数={3}",
                                slave.getId(), JSON.toJSON(staProtocol),writeCount));
                                slave.getId(), JSON.toJSON(staProtocol), writeCount));
                        log.error("写入输送线命令后返回成功,但是读取任务值不一致。输送线plc编号={},{},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
                    }
@@ -722,7 +711,7 @@
            } else {
                writeCount++;
                OutputQueue.DEVP.offer(MessageFormat.format("【{0}】写入输送线命令失败。输送线plc编号={1},站点数据={2},写入次数={3}",
                        slave.getId(), JSON.toJSON(staProtocol),writeCount));
                        slave.getId(), JSON.toJSON(staProtocol), writeCount));
                log.error("写入输送线命令失败。输送线plc编号={},站点数据={},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
            }
@@ -730,9 +719,9 @@
        }
        //写命令尝试了5次还是失败了
        if(!writeFlag){
        if (!writeFlag) {
            staProtocol = station.get(staProtocol.getSiteId());
            if (staProtocol.getWorkNo() == 0 && staProtocol.getStaNo() ==0) {
            if (staProtocol.getWorkNo() == 0 && staProtocol.getStaNo() == 0) {
                staProtocol.setPakMk(true);
            }
            OutputQueue.DEVP.offer(MessageFormat.format("【{0}】写入输送线命令尝试5次失败。输送线plc编号={1},站点数据={2}", slave.getId(), JSON.toJSON(staProtocol)));
@@ -748,7 +737,7 @@
            Integer siteId = staProtocol.getSiteId();
            staProtocol = station.get(siteId);
            if ((siteId == 101 || siteId == 201)&&(staProtocol.getWorkNo() == 0 && staProtocol.getStaNo() ==0)) {
            if ((siteId == 101 || siteId == 201) && (staProtocol.getWorkNo() == 0 && staProtocol.getStaNo() == 0)) {
                staProtocol.setPakMk(true);
            }
@@ -805,7 +794,7 @@
    /**
     * 心跳
     */
    private void heartbeat(){
    private void heartbeat() {
        if (heartBeatVal == 1) {
            heartBeatVal = 2;
        } else {
@@ -837,14 +826,14 @@
        ArrayList<Integer> staNos = staNos1;
        System.out.println(staNos.indexOf(129));
        System.out.println(staNos.size());
        for (int i = 0; i<staNos.size(); i++) {
        for (int i = 0; i < staNos.size(); i++) {
//            System.out.println(i*2);
//            System.out.println(i*2 + 200);
//            System.out.println(i);
        }
        int index = staNos.indexOf(128);
        System.out.println(index*2);
        System.out.println(index*2 + 200);
        System.out.println(index * 2);
        System.out.println(index * 2 + 200);
    }
//    public static void main(String[] args) throws Exception {
src/main/resources/application-prod.yml
@@ -1,6 +1,6 @@
wcs-slave:
  doubleDeep: true #双深
  doubleLocs: 1,4,5,8 #双深库位排号 1,4,5,8
  doubleLocs: 1,4 #双深库位排号 1,4
  groupCount: 4 #一个堆垛机负责的货架排数
  crn[0]: #堆垛机1
    id: 1
@@ -10,19 +10,32 @@
    rack: 0
    offset: 2  #偏移量,当堆垛机站点列号=1时,偏移量=2
    port: 102
    crnOutStn[0]: #堆垛机出库站点
      staNo: 125
      row: 3
    crnOutStn[0]: #堆垛机出库站点--1F输送线 放货口
      staNo: 1002
      row: 1
      bay: 1
      lev: 2
      lev: 1
      devpPlcId: ${wcs-slave.devp[0].id}
    crnInStn[0]: #堆垛机入库站点1
      staNo: 100
    crnInStn[0]: #堆垛机入库站点1--1F输送线 取货口
      staNo: 1004
      row: 2
      bay: 1
      lev: 2
      lev: 1
      backSta: 102
      devpPlcId: ${wcs-slave.devp[0].id}
    crnOutStn[1]: #堆垛机出库站点--2F输送线 放货口
      staNo: 2002
      row: 1
      bay: 59
      lev: 11
      devpPlcId: ${wcs-slave.devp[1].id}
    crnInStn[1]: #堆垛机入库站点--2F输送线 取货口
      staNo: 2003
      row: 2
      bay: 59
      lev: 11
      backSta: 102
      devpPlcId: ${wcs-slave.devp[1].id}
  crn[1]: #堆垛机2
    id: 2
    ip: 10.10.10.120
@@ -31,43 +44,224 @@
    rack: 0
    offset: 2  #偏移量,当堆垛机站点列号=1时,偏移量=2
    port: 102
    crnOutStn[0]: #堆垛机出库站点
      staNo: 115
      row: 7
    crnOutStn[0]: #堆垛机出库站点--1F输送线 放货口
      staNo: 1006
      row: 3
      bay: 1
      lev: 2
      lev: 1
      devpPlcId: ${wcs-slave.devp[0].id}
    crnInStn[0]: #堆垛机入库站点1
      staNo: 120
      row: 6
    crnInStn[0]: #堆垛机入库站点1--1F输送线 取货口
      staNo: 1008
      row: 4
      bay: 1
      lev: 2
      lev: 1
      backSta: 106
      devpPlcId: ${wcs-slave.devp[0].id}
  devp[0]: #输送线
    crnOutStn[1]: #堆垛机出库站点--2F输送线 放货口
      staNo: 2002
      row: 3
      bay: 59
      lev: 11
      devpPlcId: ${wcs-slave.devp[1].id}
    crnInStn[1]: #堆垛机入库站点1--2F输送线 取货口
      staNo: 2003
      row: 4
      bay: 59
      lev: 11
      backSta: 106
      devpPlcId: ${wcs-slave.devp[1].id}
  crn[2]: #堆垛机3
    id: 3
    ip: 192.168.110.10
    slot: 0
    demo: false
    rack: 0
    offset: 2  #偏移量,当堆垛机站点列号=1时,偏移量=2
    port: 102
    crnOutStn[0]: #堆垛机出库站点--1F输送线 放货口
      staNo: 1056
      row: 6
      bay: 1
      lev: 1
      devpPlcId: ${wcs-slave.devp[2].id}
    crnInStn[0]: #堆垛机入库站点1--1F输送线 取货口
      staNo: 1058
      row: 7
      bay: 1
      lev: 1
      backSta: 106
      devpPlcId: ${wcs-slave.devp[2].id}
    crnOutStn[1]: #堆垛机出库站点--2F输送线 放货口
      staNo: 2057
      row: 7
      bay: 1
      lev: 13
      devpPlcId: ${wcs-slave.devp[3].id}
    crnInStn[1]: #堆垛机入库站点1--2F输送线 取货口
      staNo: 2057
      row: 7
      bay: 1
      lev: 13
      backSta: 106
      devpPlcId: ${wcs-slave.devp[3].id}
    crnOutStn[2]: #堆垛机出库站点--2F输送线 放货口
      staNo: 2058
      row: 6
      bay: 1
      lev: 13
      devpPlcId: ${wcs-slave.devp[3].id}
    crnInStn[2]: #堆垛机入库站点1--2F输送线 取货口
      staNo: 2058
      row: 6
      bay: 1
      lev: 13
      backSta: 106
      devpPlcId: ${wcs-slave.devp[3].id}
    crnOutStn[3]: #堆垛机出库站点--2F输送线 放货口
      staNo: 2051
      row: 7
      bay: 13
      lev: 13
      devpPlcId: ${wcs-slave.devp[3].id}
    crnInStn[3]: #堆垛机入库站点1--2F输送线 取货口
      staNo: 2051
      row: 7
      bay: 13
      lev: 13
      backSta: 106
      devpPlcId: ${wcs-slave.devp[3].id}
    crnOutStn[4]: #堆垛机出库站点--2F输送线 放货口
      staNo: 2052
      row: 7
      bay: 10
      lev: 13
      devpPlcId: ${wcs-slave.devp[3].id}
    crnInStn[4]: #堆垛机入库站点1--2F输送线 取货口
      staNo: 2052
      row: 7
      bay: 10
      lev: 13
      backSta: 106
      devpPlcId: ${wcs-slave.devp[3].id}
    crnOutStn[5]: #堆垛机出库站点--2F输送线 放货口
      staNo: 2054
      row: 7
      bay: 4
      lev: 13
      devpPlcId: ${wcs-slave.devp[3].id}
    crnInStn[5]: #堆垛机入库站点1--2F输送线 取货口
      staNo: 2056
      row: 7
      bay: 12
      lev: 13
      backSta: 106
      devpPlcId: ${wcs-slave.devp[3].id}
  devp[0]: #输送线--半成品1F
    id: 1
    ip: 10.10.10.130
    ip: 192.168.110.50
    rack: 0
    port: 102
    slot: 0
    emptyInSta[0]: #空板入库口0
      staNo: 116
      staNo: 1014
    inSta[0]: #入库口1
      staNo: 116
      backSta: 110
      staNo: 1014
      backSta: 1015
      barcode: ${wcs-slave.barcode[0].id}
    outSta[0]: #出库口1
      staNo: 105
      staNo: 1019
    outSta[1]: #出库口2
      staNo: 107
      staNo: 1010
    outSta[2]: #出库口2
      staNo: 109
      staNo: 1020
  devp[1]: #输送线--半成品2F
    id: 2
    ip: 192.168.110.70
    rack: 0
    port: 102
    slot: 0
    emptyInSta[0]: #空板入库口0
      staNo: 2007
    inSta[0]: #入库口1
      staNo: 2007
      backSta: 2006
      barcode: ${wcs-slave.barcode[1].id}
    outSta[0]: #出库口1
      staNo: 2001
    outSta[1]: #出库口2
      staNo: 2019
  devp[2]: #输送线--成品1F
    id: 3
    ip: 192.168.110.30
    rack: 0
    port: 102
    slot: 0
    emptyInSta[0]: #空板入库口0
      staNo: 1058
    inSta[0]: #入库口1
      staNo: 1052
      backSta: 1051
      barcode: ${wcs-slave.barcode[2].id}
    inSta[1]: #入库口2  #空板入库口0
      staNo: 1058
      backSta: 1053
      barcode: ${wcs-slave.barcode[2].id}
    outSta[0]: #出库口1
      staNo: 1053
  devp[3]: #输送线--成品2F
    id: 4
    ip: 192.168.110.70
    rack: 0
    port: 102
    slot: 0
    emptyInSta[0]: #空板入库口0
      staNo: 2056
    inSta[0]: #入库口1
      staNo: 2056
      backSta: 2055
      barcode: ${wcs-slave.barcode[3].id}
    outSta[0]: #出库口1
      staNo: 1053
    outSta[1]: #出库口1
      staNo: 251
    outSta[2]: #出库口1
      staNo: 252
    outSta[3]: #出库口1
      staNo: 110
      staNo: 257
    outSta[4]: #出库口1
      staNo: 258
    # 拣料入库口1
    pickSta[0]:
      staNo: 2051
      barcode: ${wcs-slave.barcode[3].id}
    # 拣料入库口2
    pickSta[1]:
      staNo: 2052
      barcode: ${wcs-slave.barcode[3].id}
    # 拣料入库口3
    pickSta[2]:
      staNo: 2057
      barcode: ${wcs-slave.barcode[3].id}
    # 拣料入库口4
    pickSta[3]:
      staNo: 2058
      barcode: ${wcs-slave.barcode[3].id}
  barcode[0]: #条码扫描仪
    port: 51236
    ip: 172.17.91.39
    id: 1
  barcode[1]: #条码扫描仪
    port: 51236
    ip: 172.17.91.39
    id: 1
  barcode[2]: #条码扫描仪
    port: 51236
    ip: 172.17.91.39
    id: 1
  barcode[3]: #条码扫描仪
    port: 51236
    ip: 172.17.91.39
    id: 1
#  crn[0]: #堆垛机1
#    rack: 0
#    offset: 2    #偏移量,当堆垛机站点列号=1时,偏移量=2
src/main/resources/application.yml
@@ -1,5 +1,5 @@
server:
  port: 8080
  port: 8081
  servlet:
    context-path: /@pom.build.finalName@
@@ -8,7 +8,7 @@
    name: @pom.build.finalName@
  datasource:
    driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
    url: jdbc:sqlserver://10.10.10.220:1433;databasename=rywxasrs
    url: jdbc:sqlserver://127.0.0.1:1433;databasename=czscwcs
    username: sa
    password: sa@123
  mvc:
@@ -37,7 +37,7 @@
#License相关配置
license:
  subject: jdzwcs
  subject: scwcs
  publicAlias: publicCert
  storePass: public_zhongyang_123456789
  licensePath: license.lic
src/main/resources/mapper/LocMastMapper.xml
@@ -51,12 +51,12 @@
    <select id="queryDemoSourceLoc" resultMap="BaseResultMap">
        select top 1 * from asr_loc_mast where crn_no = #{crnNo}
        and loc_sts='D'
        and loc_sts='F'
        ORDER BY NEWID()
    </select>
    <select id="queryDemoLoc" resultMap="BaseResultMap">
        select top 1 * from asr_loc_mast where crn_no = #{crnNo} and loc_sts = 'O'
        select top 1 * from asr_loc_mast where crn_no = #{crnNo} and loc_type1 = #{locType1} and loc_sts = 'O' and (ctn_kind=0 or ctn_kind is null)
        ORDER BY NEWID()
    </select>
src/main/webapp/static/wcs/js/common.js
@@ -1,4 +1,4 @@
var baseUrl = "/jdzwcs";
var baseUrl = "/scwcs";
// 赋值
function setVal(el, val) {
src/main/webapp/static/wcs/js/console.map.js
@@ -1,5 +1,5 @@
mapInfo = {
    "mapName": "jdzwcs",
    "mapName": "scwcs",
    "rackCount": 13,
    "crnCount": 4,
    "stbCount": 4,
src/main/webapp/static/wms/js/common.js
@@ -1,4 +1,4 @@
var baseUrl = "/jdzwcs";
var baseUrl = "/scwcs";
// 详情窗口-高度
var detailHeight = '80%';