1
zhang
2025-08-14 2599526586d46212c48eaccba1a8cea97e14176d
1
4个文件已添加
4个文件已修改
677 ■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/OpenController.java 88 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/domain/param/OpenBusSubmitParam.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/domain/param/TaskDto.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/domain/param/TaskReportParam.java 111 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/CtuMainServiceImpl.java 387 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/CtuMainProcess.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/SiemensDevpThread.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/OpenController.java
New file
@@ -0,0 +1,88 @@
package com.zy.asrs.controller;
import com.core.common.R;
import com.zy.asrs.domain.param.TaskReportParam;
import com.zy.asrs.service.LocMastService;
import com.zy.asrs.service.impl.CtuMainServiceImpl;
import com.zy.common.web.BaseController;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
/**
 * Created by vincent on 2022/4/8
 */
@Slf4j
@RestController
@RequestMapping("open/asrs")
public class OpenController extends BaseController {
    @Autowired
    private LocMastService locMastService;
    @Autowired
    private CtuMainServiceImpl ctuMainService;
    @Value("${ctu.url}")
    private String ctuUrl;
    @Value("${ctu.locSync}")
    private String locSync;
    private static final boolean auth = true;
    public static final ArrayList<String> APP_KEY_LIST = new ArrayList<String>() {{
        add("ea1f0459efc02a79f046f982767939ae");
    }};
    private String getLocSts(Long sts) {
        //15    IDLE    空闲
        //16    STOCK    在库
        //17    PAKIN    入库预约
        //18    PAKOUT    出库预约
        //19    DISABLED    禁用
        switch (sts.intValue()) {
            case 15:
                return "O";
            case 16:
                return "F";
            case 17:
                return "S";
            case 18:
                return "R";
            case 19:
                return "X";
            default:
                return "W";
        }
    }
    /**
     * 任务状态上报接收
     */
    @RequestMapping("/task/sync/v1")
    public R taskSync(@RequestBody TaskReportParam param) {
        if (param == null || param.getSeqNum() == null || param.getQrCode() == null) {
            return R.error("参数为空");
        }
        if (param.getQrCode().equals("1547")) {
            log.info("1001任务状态上报接收:{}", param);
            ctuMainService.setFlag1001(true);
        } else if (param.getQrCode().equals("1612")) {
            log.info("1007任务状态上报接收:{}", param);
            ctuMainService.setFlag1007(true);
        }
        return R.ok();
    }
}
src/main/java/com/zy/asrs/domain/param/OpenBusSubmitParam.java
New file
@@ -0,0 +1,18 @@
package com.zy.asrs.domain.param;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
/**
 * Created by vincent on 2023/6/12
 */
@Data
public class OpenBusSubmitParam {
    private String batch;
    private List<TaskDto> taskList = new ArrayList<>();
}
src/main/java/com/zy/asrs/domain/param/TaskDto.java
New file
@@ -0,0 +1,23 @@
package com.zy.asrs.domain.param;
import lombok.Data;
/**
 * Created by vincent on 2023/6/12
 */
@Data
public class TaskDto {
    private String seqNum;
    private String oriLoc;
    private String oriSta;
    private String destLoc;
    private String destSta;
    private Integer priority = 1;
}
src/main/java/com/zy/asrs/domain/param/TaskReportParam.java
New file
@@ -0,0 +1,111 @@
package com.zy.asrs.domain.param;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
@Data
public class TaskReportParam implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * 总线
     */
    @ApiModelProperty(value = "总线")
    private String busNo;
    /**
     * 任务号
     */
    @ApiModelProperty(value = "任务号")
    private String seqNum;
    /**
     * 任务进度
     */
    @ApiModelProperty(value = "任务进度")
    private Integer taskSts;
    /**
     * AGV
     */
    @ApiModelProperty(value = "AGV")
    private String agvId;
    /**
     * 所在上报点位
     */
    @ApiModelProperty(value = "所在上报点位")
    private String qrCode;
    /**
     * 库位或站点
     */
    @ApiModelProperty(value = "库位或站点")
    private String locNo;
    /**
     * 上报次数
     */
    @ApiModelProperty(value = "上报次数")
    private Integer reportTimes;
    /**
     * 托盘码
     */
    @ApiModelProperty(value = "托盘码")
    private String zpallet;
    /**
     * 是否删除 1: 是  0: 否
     */
    @ApiModelProperty(value = "是否删除 1: 是  0: 否  ")
    private Integer deleted;
    /**
     * 租户
     */
    @ApiModelProperty(value = "租户")
    private Long tenantId;
    /**
     * 添加人员
     */
    @ApiModelProperty(value = "添加人员")
    private Long createBy;
    /**
     * 添加时间
     */
    @ApiModelProperty(value = "添加时间")
    private Date createTime;
    /**
     * 修改人员
     */
    @ApiModelProperty(value = "修改人员")
    private Long updateBy;
    /**
     * 修改时间
     */
    @ApiModelProperty(value = "修改时间")
    private Date updateTime;
    /**
     * 备注
     */
    @ApiModelProperty(value = "备注")
    private String memo;
}
src/main/java/com/zy/asrs/service/impl/CtuMainServiceImpl.java
@@ -1,12 +1,15 @@
package com.zy.asrs.service.impl;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.Cools;
import com.zy.asrs.entity.LocMast;
import com.zy.asrs.entity.WrkMast;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.core.common.DateUtils;
import com.core.exception.CoolException;
import com.zy.asrs.domain.param.OpenBusSubmitParam;
import com.zy.asrs.domain.param.TaskDto;
import com.zy.asrs.mapper.WrkMastMapper;
import com.zy.asrs.service.LocMastService;
import com.zy.asrs.service.WrkMastService;
import com.zy.common.utils.HttpHandler;
import com.zy.common.utils.News;
import com.zy.core.cache.MessageQueue;
import com.zy.core.cache.SlaveConnection;
@@ -16,14 +19,15 @@
import com.zy.core.model.protocol.StaProtocol;
import com.zy.core.properties.SlaveProperties;
import com.zy.core.thread.SiemensDevpThread;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.*;
import java.util.concurrent.TimeUnit;
/**
 * 立体仓库WCS系统主流程业务
@@ -32,10 +36,22 @@
@Slf4j
@Service("ctuMainService")
@Transactional
@Data
public class CtuMainServiceImpl {
    public static final long COMMAND_TIMEOUT = 5 * 1000;
    @Value("${ctu.url}")
    private String ctuUrl;
    @Value("${ctu.sendTask}")
    private String sendTask;
    @Value("${ctu.getLoc}")
    private String getLoc;
    @Value("${ctu.update}")
    private String updateSta;
    @Autowired
    private SlaveProperties slaveProperties;
@@ -49,64 +65,91 @@
    @Autowired
    private WrkMastService wrkMastService;
    private boolean flag1001 = false;
    public Integer wrkNo = 10000;
    private boolean flag1007 = false;
    /**
     * 入库,从拣料站到入库站(CTU取货站)
     */
    public synchronized void generateStoreWrkFile(Integer mark) {
        // 根据输送线plc遍历
        for (DevpSlave devp : slaveProperties.getDevp()) {
            // 遍历入库口
            for (DevpSlave.Sta inSta : devp.getInSta()) {
                // 获取入库站信息
                SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
                StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo());
                if (staProtocol == null) {
                    continue;
                } else {
                    staProtocol = staProtocol.clone();
        SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
        StaProtocol staProtocol = devpThread.getStation().get(1004);
        if (staProtocol == null) {
            return;
        } else {
            staProtocol = staProtocol.clone();
        }
        // 判断是否满足条件
//        if (!staProtocol.isLoading()) {
//            return;
//        }
        // && staProtocol.isInEnable()
        if (staProtocol.getWorkNo() > 0 && staProtocol.isAutoing() && !staProtocol.isEmptyMk() && staProtocol.isPakMk()) {
            if (staProtocol.getStaNo() == 1004) {
                try {
                    Thread.sleep(8000L);
                } catch (InterruptedException e) {
                    throw new RuntimeException(e);
                }
                // 判断是否满足条件
//                if (!staProtocol.isLoading()) {
//                    continue;
//                }
                // && staProtocol.isInEnable()
                if (staProtocol.isAutoing() && !staProtocol.isEmptyMk() && staProtocol.isPakMk()) {
                    WrkMast wrkMast = wrkMastMapper.selectByWrkNo(staProtocol.getWorkNo());
                    if (wrkMast != null) {
                        //下发移动任务,并生成入库工作档
                        WrkMast in = new WrkMast();
                        wrkMast.setWrkSts(223L);
                        wrkMast.setModiTime(new Date());
                        wrkMastService.updateById(wrkMast);
                        in.setSourceLocNo("1007");
                        in.setLocNo(wrkMast.getSourceLocNo());
                        in.setIoType(10);
                        in.setIoTime(new Date());
                        in.setWrkSts(1L); // 工作状态:11.生成出库ID
                        in.setIoPri(13D); // 优先级:13
                        in.setFullPlt("Y"); // 满板:Y
                        in.setPicking("N"); // 拣料
                        in.setExitMk("N"); // 退出
                        in.setEmptyMk("Y"); // 空板
                        in.setLinkMis("N");
                        in.setAppeTime(new Date());
                        in.setModiTime(new Date());
                        in.setBarcode(wrkMast.getBarcode());
                        in.setPlcWrkNo(wrkMast.getPlcWrkNo());
                        wrkMastService.insert(in);
                        LocMast locMast = locMastService.selectById(wrkMast.getSourceLocNo());
                        locMast.setLocSts("S");
                        locMast.setModiTime(new Date());
                        locMastService.updateById(locMast);
                    }
                }
                staProtocol.setStaNo((short) 1007);
                boolean result = MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol));
                log.info("入库输送线下发:{},{}", staProtocol.getWorkNo(), 1007);
            }
//                    WrkMast wrkMast = wrkMastMapper.selectByWrkNo(staProtocol.getWorkNo());
//                    if (wrkMast != null) {
//                        //下发移动任务,并生成入库工作档
//                        WrkMast in = new WrkMast();
//                        wrkMast.setWrkSts(223L);
//                        wrkMast.setModiTime(new Date());
//                        wrkMastService.updateById(wrkMast);
//                        in.setSourceLocNo("1007");
//                        in.setLocNo(wrkMast.getSourceLocNo());
//                        in.setIoType(10);
//                        in.setIoTime(new Date());
//                        in.setWrkSts(1L); // 工作状态:11.生成出库ID
//                        in.setIoPri(13D); // 优先级:13
//                        in.setFullPlt("Y"); // 满板:Y
//                        in.setPicking("N"); // 拣料
//                        in.setExitMk("N"); // 退出
//                        in.setEmptyMk("Y"); // 空板
//                        in.setLinkMis("N");
//                        in.setAppeTime(new Date());
//                        in.setModiTime(new Date());
//                        in.setBarcode(wrkMast.getBarcode());
//                        in.setPlcWrkNo(wrkMast.getPlcWrkNo());
//                        wrkMastService.insert(in);
//                        LocMast locMast = locMastService.selectById(wrkMast.getSourceLocNo());
//                        locMast.setLocSts("S");
//                        locMast.setModiTime(new Date());
//                        locMastService.updateById(locMast);
//                    }
        }
    }
    public synchronized void outToPlc(Integer mark) {
        // 根据输送线plc遍历
        SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
        StaProtocol staProtocol = devpThread.getStation().get(1007);
        if (staProtocol == null) {
            return;
        } else {
            staProtocol = staProtocol.clone();
        }
        // 判断是否满足条件
        if (!staProtocol.isLoading()) {
            return;
        }
        if (flag1007 && staProtocol.getWorkNo() > 0 && staProtocol.isAutoing() && !staProtocol.isEmptyMk() && staProtocol.isPakMk()) {
            boolean result = MessageQueue.offer(SlaveType.Devp, 1, new Task(3, staProtocol));
            log.info("取走写入确认位:{},{}", staProtocol.getWorkNo(), 1007);
        }
    }
    /**
     * 出库
@@ -129,40 +172,45 @@
                    continue;
                }
                //&& staProtocol.isOutEnable()
                if (staProtocol.isAutoing() && !staProtocol.isEmptyMk() && (staProtocol.getWorkNo() == 0 || staProtocol.getWorkNo() == 9999) && staProtocol.isPakMk()) {
                if (flag1001 && staProtocol.isAutoing() && !staProtocol.isEmptyMk() && (staProtocol.getWorkNo() == 0 || staProtocol.getWorkNo() == 9999) && staProtocol.isPakMk()) {
                    News.warnNoLog("" + mark + " - 0" + " - 开始执行");
                    // 判断重复工作档
                    // 106也算上,以后106-》107用于更新库存
                    WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("loc_no", "1001").in("wrk_sts", 106, 107));
                    if (wrkMast == null) {
                        continue;
                    }
//                    WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("loc_no", "1001").in("wrk_sts", 106, 107));
//                    if (wrkMast == null) {
//                        continue;
//                    }
                    // 命令下发区 --------------------------------------------------------------------------
                    // 更新站点信息 且 下发plc命令
                    staProtocol.setWorkNo(wrkMast.getPlcWrkNo());
                    staProtocol.setWorkNo((int) (Math.random() * 10000));
                    staProtocol.setStaNo((short) 1004);
                    devpThread.setPakMk(staProtocol.getSiteId(), false);
                    boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                    log.info("输送线下发3:{},{}", wrkMast.getWrkNo(), 1004);
                    log.info("输送线下发3:{},{}", staProtocol.getWorkNo(), 1004);
                    if (result) {
                        // 更新工作主档
                        wrkMast.setWrkSts(108L);
                        wrkMast.setModiTime(new Date());
                        if (wrkMastMapper.updateById(wrkMast) == 0) {
                            News.error("" + mark + " - 1" + " - 更新工作档失败!!! [工作号:{}]", wrkMast.getWrkNo());
                        }
                        setFlag1001(false);
                    } else {
                        News.error("" + mark + " - 2" + " - 发布命令至输送线队列失败!!! [plc编号:{}]", devp.getId());
                    }
                } else {
                    News.errorNoLog("" + mark + " - 6" + " - 站点信息不符合入库条件!!!" + " 自动信号:" + staProtocol.isLoading() + "、可入信号:" + staProtocol.isInEnable() + "、空板信号:" + staProtocol.isEmptyMk() + "、工作号:" + staProtocol.getWorkNo() + "、锁定标记" + staProtocol.isPakMk() + "、入库印记:" + staProtocol.getStamp());
                }
            }
        }
    }
    public static final ArrayList<Integer> staNos1 = new ArrayList<Integer>() {{
        add(1001);
        add(1002);
        add(1003);
        add(1004);
        add(1005);
        add(1006);
        add(1007);
    }};
    public static final ArrayList<Integer> staNos2 = new ArrayList<Integer>() {{
@@ -193,34 +241,197 @@
            }
            // && staProtocol.isInEnable()
            if (staProtocol.isInEnable()) {
                getWrk(staProtocol, "-2");
                OpenBusSubmitParam openBusSubmitParam = new OpenBusSubmitParam();
                openBusSubmitParam.setBatch(DateUtils.convert(new Date()));
                List<TaskDto> taskList = new ArrayList<>();
                TaskDto taskDto = new TaskDto();
                Random rand = new Random();
                taskDto.setSeqNum(rand.nextInt(10000) + "");
                taskDto.setDestLoc(getFLoc(staProtocol.getSiteId() + "-2", "15"));
                taskDto.setOriSta(staProtocol.getSiteId() + "-2");
                taskDto.setPriority(123);
                taskList.add(taskDto);
                openBusSubmitParam.setTaskList(taskList);
                sendTask(openBusSubmitParam, staProtocol);
            }
            if (staProtocol.isOutEnable()) {
                getWrk(staProtocol, "-3");
                OpenBusSubmitParam openBusSubmitParam = new OpenBusSubmitParam();
                openBusSubmitParam.setBatch(DateUtils.convert(new Date()));
                List<TaskDto> taskList = new ArrayList<>();
                TaskDto taskDto = new TaskDto();
                Random rand = new Random();
                taskDto.setSeqNum(rand.nextInt(10000) + "");
                taskDto.setDestLoc(getFLoc(staProtocol.getSiteId() + "-3", "15"));
                taskDto.setOriSta(staProtocol.getSiteId() + "-3");
                taskDto.setPriority(123);
                taskList.add(taskDto);
                openBusSubmitParam.setTaskList(taskList);
                sendTask(openBusSubmitParam, staProtocol);
            }
        }
    }
    private void getWrk(StaProtocol staProtocol, String lev) {
        List<WrkMast> sourceLocNo = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("source_loc_no", staProtocol.getSiteId() + lev));
        if (!Cools.isEmpty(sourceLocNo) && !sourceLocNo.isEmpty()) {
            return;
    public synchronized void autoOut(Integer mark) {
        int i = 0;
        for (Integer staNo : staNos1) {
            SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
            StaProtocol staProtocol = devpThread.getStation().get(staNo);
            if (staProtocol == null) {
                continue;
            } else {
                staProtocol = staProtocol.clone();
            }
            // 判断是否满足条件
            if (!staProtocol.isAutoing()) {
                continue;
            }
            if (staProtocol.isLoading()) {
                continue;
            }
            if (staProtocol.getStaNo() != 0) {
                continue;
            }
            i++;
        }
        WrkMast in = new WrkMast();
        in.setSourceLocNo(staProtocol.getSiteId() + lev);
        in.setLocNo("");
        in.setIoType(10);
        in.setIoTime(new Date());
        in.setWrkSts(1L); // 工作状态:11.生成出库ID
        in.setIoPri(13D); // 优先级:13
        in.setFullPlt("Y"); // 满板:Y
        in.setPicking("N"); // 拣料
        in.setExitMk("N"); // 退出
        in.setEmptyMk("Y"); // 空板
        in.setLinkMis("N");
        in.setAppeTime(new Date());
        in.setModiTime(new Date());
        wrkMastService.insert(in);
        SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
        StaProtocol staProtocol = devpThread.getStation().get(1001);
        if (i >= 7) {
            OpenBusSubmitParam openBusSubmitParam = new OpenBusSubmitParam();
            openBusSubmitParam.setBatch(DateUtils.convert(new Date()));
            List<TaskDto> taskList = new ArrayList<>();
            TaskDto taskDto = new TaskDto();
            taskDto.setSeqNum(Math.random() * 1000 + "");
            taskDto.setOriLoc(getFLoc("1001", "16"));
            taskDto.setDestSta("1001");
            taskDto.setPriority(123);
            taskList.add(taskDto);
            openBusSubmitParam.setTaskList(taskList);
            sendTask(openBusSubmitParam, staProtocol);
        }
    }
    public synchronized void autoIn(Integer mark) {
        SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
        StaProtocol staProtocol = devpThread.getStation().get(1007);
        if (staProtocol == null) {
            return;
        } else {
            staProtocol = staProtocol.clone();
        }
        // 判断是否满足条件
        if (!staProtocol.isAutoing()) {
            return;
        }
        if (!staProtocol.isLoading()) {
            return;
        }
        if (staProtocol.getStaNo() > 0) {
            return;
        }
        OpenBusSubmitParam openBusSubmitParam = new OpenBusSubmitParam();
        openBusSubmitParam.setBatch(DateUtils.convert(new Date()));
        List<TaskDto> taskList = new ArrayList<>();
        TaskDto taskDto = new TaskDto();
        taskDto.setSeqNum(Math.random() * 1000 + "");
        taskDto.setDestLoc(getFLoc("1007", "15"));
        taskDto.setOriLoc("1007");
        taskDto.setPriority(123);
        taskList.add(taskDto);
        openBusSubmitParam.setTaskList(taskList);
        sendTask(openBusSubmitParam, staProtocol);
    }
    public void updateSta(Integer mark) {
        SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
        StaProtocol staProtocol1 = devpThread.getStation().get(1001);
        StaProtocol staProtocol7 = devpThread.getStation().get(1007);
        if (staProtocol1 == null) {
            return;
        }
        if (staProtocol7 == null) {
            return;
        }
        updateSta("1001", staProtocol1.isLoading() ? "16" : "15");
        updateSta("1007", staProtocol7.isLoading() ? "16" : "15");
    }
    @Transactional
    public void sendTask(OpenBusSubmitParam openBusSubmitParam, StaProtocol staProtocol) {
        String response = "";
        try {
            response = new HttpHandler.Builder()
                    .setUri(ctuUrl)
                    .setPath(sendTask)
                    .setTimeout(1200, TimeUnit.SECONDS)
                    .setJson(JSON.toJSONString(openBusSubmitParam))
                    .build()
                    .doPost();
            JSONObject jsonObject = JSON.parseObject(response);
            if (jsonObject.getInteger("code").equals(200)) {
                log.info("下发任务返回数据:{}", response);
            } else {
                log.error("请求接口失败!!!url:{};request:{};response:{}", ctuUrl + sendTask, JSON.toJSONString(openBusSubmitParam), response);
                throw new CoolException("调用下发任务接口报错");
            }
        } catch (Exception e) {
            log.error("fail", e);
        }
    }
    @Transactional
    public void updateSta(String staNo, String sts) {
        Map<String, String> data = new HashMap<String, String>();
        data.put("staNo", staNo);
        data.put("sts", sts);
        String response = "";
        try {
            response = new HttpHandler.Builder()
                    .setUri(ctuUrl)
                    .setPath(updateSta)
                    .setTimeout(1200, TimeUnit.SECONDS)
                    .setJson(JSON.toJSONString(data))
                    .build()
                    .doPost();
            JSONObject jsonObject = JSON.parseObject(response);
            if (jsonObject.getInteger("code").equals(200)) {
                //log.info("下发任务返回数据:{}", response);
            } else {
                //log.error("请求接口失败!!!url:{};request:{};response:{}", ctuUrl + sendTask, JSON.toJSONString(data), response);
                //throw new CoolException("调用下发任务接口报错");
            }
        } catch (Exception e) {
            log.error("fail", e);
        }
    }
    @Transactional
    public String getFLoc(String staNo, String sts) {
        Map<String, String> data = new HashMap<String, String>();
        data.put("staNo", staNo);
        data.put("sts", sts);
        String response = "";
        try {
            response = new HttpHandler.Builder()
                    .setUri(ctuUrl)
                    .setPath(getLoc)
                    .setTimeout(1200, TimeUnit.SECONDS)
                    .setJson(JSON.toJSONString(data))
                    .build()
                    .doPost();
            JSONObject jsonObject = JSON.parseObject(response);
            if (jsonObject.getInteger("code").equals(200)) {
                //log.info("下发任务返回数据:{}", response);
                JSONObject loc = JSON.parseObject(jsonObject.getString("data"));
                return loc.getString("locNo");
            } else {
                log.error("请求接口失败!!!url:{};request:{};response:{}", ctuUrl + sendTask, JSON.toJSONString(data), response);
                throw new CoolException("调用下发任务接口报错");
            }
        } catch (Exception e) {
            log.error("fail", e);
        }
        return null;
    }
}
src/main/java/com/zy/core/CtuMainProcess.java
@@ -43,15 +43,26 @@
                    }
                    // 入库
                    // 自动入库
                    ctuMainService.generateStoreWrkFile(1);
                    // 出库
                    ctuMainService.out(2);
                    // 出库
                    ctuMainService.outToPlc(6);
                    // 101-108按钮入库
                    ctuMainService.in(3);
                    //1001自动出
                    //ctuMainService.autoOut(4);
                    //1007自动入
                    //ctuMainService.autoIn(5);
                    ctuMainService.updateSta(6);
                } catch (Exception e) {
                    e.printStackTrace();
src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -123,6 +123,11 @@
                        write((StaProtocol) task.getData());
                        log.error("输送线下发命令:" + ((StaProtocol) task.getData()).getWorkNo() + "," + ((StaProtocol) task.getData()).getStaNo());
                        break;
                    // 写数据 ID+目标站
                    case 3:
                        write2((StaProtocol) task.getData());
                        log.error("输送线下发命令:" + ((StaProtocol) task.getData()).getWorkNo() + "," + ((StaProtocol) task.getData()).getStaNo());
                        break;
                    default:
                        break;
                }
@@ -396,6 +401,31 @@
        }
    }
    private void write2(StaProtocol staProtocol) throws InterruptedException {
        if (null == staProtocol) {
            return;
        }
        OperateResult write = null;
        boolean[] array = new boolean[1];
        array[0] = true;
        //任务下发次数
        int writeCount = 0;
        do {
            write = siemensS7Net.Write("DB102.0", array);
            if (write.IsSuccess) {
                log.error("写入输送线命令成功。输送线plc编号={},站点数据={},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
                break;
            } else {
                writeCount++;
                log.error("写入输送线命令失败。输送线plc编号={},站点数据={},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
            }
        } while (writeCount < 5);
        if (!write.IsSuccess) {
            News.error("SiemensDevp" + " - 4" + " - 写入输送线站点数据失败。输送线plc编号={},站点数据={}", slave.getId(), JSON.toJSON(staProtocol));
        }
    }
    // 更新入出库模式
    private void updateIoMode() throws InterruptedException {
        if (this.ioModeOf2F != IoModeType.NONE) {
src/main/resources/application.yml
@@ -19,6 +19,13 @@
    database: 0
#    password: xltys1995
ctu:
  url: 10.10.10.200:8088
  locSync: /api/open/loc/sync
  sendTask: /api/open/bus/submit
  getLoc: /api/open/loc/one
  update: /api/open/sta/update
mybatis-plus:
  mapper-locations: classpath:mapper/*.xml
#  global-config: