1
zhang
2026-01-24 87f8618e3bb8bcc769884225238fb1d4d02afb43
zy-acs-cv/src/main/java/com/zy/asrs/service/impl/CtuMainServiceImpl.java
@@ -3,9 +3,12 @@
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.core.common.DateUtils;
import com.core.exception.CoolException;
import com.zy.asrs.controller.requestParam.StationRequestParam;
import com.zy.asrs.controller.vo.OpenBusSubmitParam;
import com.zy.asrs.controller.vo.StationStatus;
import com.zy.asrs.controller.vo.TaskDto;
import com.zy.asrs.entity.Job;
import com.zy.asrs.enums.WorkNoTypeType;
import com.zy.asrs.mapper.JobMapper;
@@ -30,6 +33,7 @@
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.concurrent.TimeUnit;
@@ -54,6 +58,9 @@
    @Value("${ctu.station}")
    private String station;
    @Value("${ctu.sendTask}")
    private String sendTask;
    @Autowired
    private SlaveProperties slaveProperties;
@@ -67,6 +74,7 @@
    /**
     * 出库的时候,设备上走
     */
    @Transactional
    public synchronized void out(Integer mark) {
        try {
            // 根据输送线plc遍历
@@ -86,7 +94,7 @@
                        continue;
                    }
                    //&& staProtocol.isOutEnable()
                    if (staProtocol.isAutoing() && staProtocol.getWorkNo() == 0 ) {
                    if (staProtocol.isAutoing() && staProtocol.getWorkNo() == 0) {
                        String seqNum = checkStationStatus(releaseSta.getStaNo());
                        if (seqNum != null) {
                            Job jobBySeqNum = jobMapper.getJobBySeqNum(seqNum);
@@ -95,7 +103,11 @@
                                // 下发移动 且 下发plc命令
                                staProtocol.setWorkNo(workNo);
                                staProtocol.setStaNo(releaseSta.getTargetSta());
                                if (jobMapper.insert(new Job(seqNum, workNo)) == 0) {
                                Job job = new Job();
                                job.setSeqNum(seqNum);
                                job.setJobNo(workNo);
                                job.setJobSts(2);
                                if (jobMapper.insert(job) == 0) {
                                    throw new CoolException("插入输送线任务失败," + jobBySeqNum + " - " + workNo);
                                }
                                devpThread.setPakMk(staProtocol.getSiteId(), false);
@@ -124,6 +136,7 @@
    /**
     * 从拣料站到入库站(CTU取货站)
     */
    @Transactional
    public synchronized void fake(Integer mark) {
        try {
            // 根据输送线plc遍历
@@ -139,12 +152,13 @@
                return;
            }
            if (staProtocol.getWorkNo() > 0 && staProtocol.isAutoing()) {
                Job jobByWorkNo = jobMapper.getJobByWorkNo(staProtocol.getWorkNo());
                Job jobByWorkNo = jobMapper.getJobByJobNo(staProtocol.getWorkNo());
                if (jobByWorkNo != null && jobByWorkNo.getJobSts() == 1) {
                    staProtocol.setStaNo(1006);
                    boolean result = MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol));
                    if (result) {
                        jobByWorkNo.setJobSts(2);
                        jobByWorkNo.setJobSts(3);
                        jobByWorkNo.setMemo("模拟按按钮");
                        jobMapper.updateById(jobByWorkNo);
                        log.info("入库输送线下发:{},{}", staProtocol.getWorkNo(), 1006);
                    }
@@ -175,7 +189,8 @@
                        return;
                    }
                    if (staProtocol.getWorkNo() > 0 && staProtocol.isAutoing()) {
                        if (checkStationStatus(takeSta.getStaNo()) != null) {
                        Job job = jobMapper.getJobByJobNo(staProtocol.getWorkNo());
                        if (job != null && job.getJobSts() >= 5) {
                            staProtocol.setWorkNo(0);
                            staProtocol.setStaNo(0);
                            boolean result = MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol));
@@ -192,7 +207,7 @@
        }
    }
    @Transactional
    public synchronized void waitTake(Integer mark) {
        try {
            // 根据输送线plc遍历
@@ -214,11 +229,21 @@
                    if (staProtocol.getWorkNo() > 0 && staProtocol.isAutoing()) {
                        StaProtocol targetStaProtocol = devpThread.getStation().get(inSta.getTargetSta());
                        if (targetStaProtocol.getWorkNo() == 0 && targetStaProtocol.isAutoing() && !targetStaProtocol.isLoading()) {
                            staProtocol.setWorkNo(staProtocol.getWorkNo());
                            staProtocol.setStaNo(inSta.getTargetSta());
                            boolean result = MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol));
                            if (result) {
                                log.info("" + (mark + LOG_STEP) + "入库前进:{},{}", staProtocol.getWorkNo(), inSta.getTargetSta());
                            Job job = jobMapper.getJobByJobNoAndJobSts(staProtocol.getWorkNo(), 2);
                            if (job != null) {
                                staProtocol.setWorkNo(staProtocol.getWorkNo());
                                staProtocol.setStaNo(inSta.getTargetSta());
                                boolean result = MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol));
                                if (result) {
                                    job.setJobSts(4);
                                    job.setInTime(new Date());
                                    if (jobMapper.updateById(job) == 0) {
                                        throw new CoolException("更新输送线任务失败," + " - " + staProtocol.getWorkNo());
                                    }
                                    log.info("" + (mark + LOG_STEP) + "入库前进:{},{}", staProtocol.getWorkNo(), inSta.getTargetSta());
                                }
                            } else {
                                // 模拟操作逻辑
                            }
                        }
                    }
@@ -230,6 +255,89 @@
        }
    }
    @Transactional
    public synchronized void createTake(Integer mark) {
        try {
            // 根据输送线plc遍历
            for (DevpSlave devp : slaveProperties.getDevp()) {
                // 遍历入库口
                for (DevpSlave.Sta inSta : devp.getInSta()) {
                    // 根据输送线plc遍历
                    SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
                    StaProtocol staProtocol = devpThread.getStation().get(inSta.getTargetSta());
                    if (staProtocol == null) {
                        return;
                    } else {
                        staProtocol = staProtocol.clone();
                    }
                    // 判断是否满足条件
                    if (!staProtocol.isLoading()) {
                        return;
                    }
                    if (staProtocol.getWorkNo() > 0 && staProtocol.isAutoing()) {
                        Job job = jobMapper.getJobByJobNo(staProtocol.getWorkNo());
                        if (job != null && job.getJobSts() == 4) {
                            job.setJobSts(5);
                            jobMapper.updateById(job);
                        }
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
        }
    }
    @Transactional
    public synchronized void fakeWms(Integer mark) {
        List<Job> jobs = jobMapper.listJobByJobSts(5);
        for (Job job : jobs) {
            OpenBusSubmitParam openBusSubmitParam = new OpenBusSubmitParam();
            openBusSubmitParam.setBatch(DateUtils.convert(new Date()));
            List<TaskDto> taskList = new ArrayList<>();
            TaskDto taskDto = new TaskDto();
            taskDto.setSeqNum("SSX-RK" + job.getJobNo());
            taskDto.setOriSta("1007");
            taskDto.setPriority(9527);
            taskList.add(taskDto);
            openBusSubmitParam.setTaskList(taskList);
            boolean b = sendTask(openBusSubmitParam);
            if (b){
                job.setJobSts(6);
                job.setRcsTime(new Date());
                jobMapper.updateById(job);
                log.info("任务发送给RCS成功," + job.getSeqNum() + " - " + job.getJobNo());
            }else {
                log.info("任务发送给RCS失败," + job.getSeqNum() + " - " + job.getJobNo());
            }
        }
    }
    @Transactional
    public boolean sendTask(OpenBusSubmitParam openBusSubmitParam) {
        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);
                return true;
            }
        } catch (Exception e) {
            log.error("请求接口失败!!!url:{};request:{};response:{}", ctuUrl + sendTask, JSON.toJSONString(openBusSubmitParam), response);
        }
        return false;
    }
    /**
     * 检查站点状态
@@ -259,7 +367,7 @@
                for (StationStatus object : stationStatuses) {
                    if (object.getStaNo().equals(staNo + "")) {
                        if (object.getConveyable()) {
                            return object.getSeqNum();
                            return object.getTaskNo();
                        } else {
                            log.info("站点:{}状态不对", staNo);
                            return null;