1
zhang
5 天以前 b10ed4245c671edbf3a0ef346d5b08ec854a277d
src/main/java/com/zy/asrs/service/impl/CtuMainServiceImpl.java
@@ -1,10 +1,10 @@
package com.zy.asrs.service.impl;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.zy.asrs.entity.WrkMast;
import com.zy.asrs.mapper.*;
import com.zy.asrs.service.*;
import com.zy.common.service.CommonService;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.core.exception.CoolException;
import com.zy.asrs.controller.requestParam.StationRequestParam;
import com.zy.common.utils.HttpHandler;
import com.zy.common.utils.News;
import com.zy.core.cache.MessageQueue;
import com.zy.core.cache.SlaveConnection;
@@ -14,76 +14,49 @@
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.Date;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
/**
 * 立体仓库WCS系统主流程业务
 * Created by vincent on 2020/8/6
 */
@Slf4j
@Service("mainService")
@Service("ctuMainService")
@Transactional
@Data
public class CtuMainServiceImpl {
    public static final long COMMAND_TIMEOUT = 5 * 1000;
    @Value("${ctu.url}")
    private String ctuUrl;
    @Value("${ctu.station}")
    private String station;
    @Value("${ctu.getLoc}")
    private String getLoc;
    @Value("${ctu.update}")
    private String updateSta;
    @Autowired
    private SlaveProperties slaveProperties;
    @Autowired
    private WrkMastMapper wrkMastMapper;
    @Autowired
    private WrkMastService wrkMastService;
    public Integer wrkNo = 10000;
    /**
     * 入库,从拣料站到入库站(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();
                }
                // 判断是否满足条件
                if (!staProtocol.isLoading()) {
                    continue;
                }
                if (staProtocol.isAutoing() && staProtocol.isInEnable()
                        && !staProtocol.isEmptyMk() && (staProtocol.getWorkNo() == 0 || staProtocol.getWorkNo() == 9999)
                        && staProtocol.isPakMk()) {
                    WrkMast wrkMast = wrkMastMapper.selectByWrkNo(staProtocol.getWorkNo());
                    if (wrkMast.getWrkSts() == 106) {
                        //下发移动任务,并生成入库工作档
                    } else {
                        log.info("" + mark + " - " + staProtocol.getWorkNo() + " - 找不到对应的工作档");
                    }
                }
            }
        }
    }
    /**
     * 出库站到拣料站
     */
    public synchronized void generateStoreWrkFile0(Integer mark) {
    public synchronized void out(Integer mark) {
        // 根据输送线plc遍历
        for (DevpSlave devp : slaveProperties.getDevp()) {
            // 遍历入库口
@@ -100,43 +73,122 @@
                if (!staProtocol.isLoading()) {
                    continue;
                }
                if (staProtocol.isAutoing() && staProtocol.isOutEnable()
                        && !staProtocol.isEmptyMk() && (staProtocol.getWorkNo() == 0 || staProtocol.getWorkNo() == 9999)
                        && staProtocol.isPakMk()) {
                    News.warnNoLog("" + mark + " - 0" + " - 开始执行");
                    // 判断重复工作档
                    WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("source_sta_no", staProtocol.getSiteId()).eq("wrk_sts", 105));
                    if (wrkMast == null) {
                        continue;
                    }
                    // 命令下发区 --------------------------------------------------------------------------
                    // 更新站点信息 且 下发plc命令
                    staProtocol.setWorkNo(wrkMast.getWrkNo());
                    staProtocol.setStaNo(wrkMast.getStaNo().shortValue());
                    devpThread.setPakMk(staProtocol.getSiteId(), false);
                    boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                    log.info("输送线下发3:{},{}", wrkMast.getWrkNo(), wrkMast.getStaNo());
                    if (result) {
                        // 更新工作主档
                        wrkMast.setWrkSts(106L);
                        wrkMast.setModiTime(new Date());
                        if (wrkMastMapper.updateById(wrkMast) == 0) {
                            News.error("" + mark + " - 1" + " - 更新工作档失败!!! [工作号:{}]", wrkMast.getWrkNo());
                //&& staProtocol.isOutEnable()
                if (staProtocol.isAutoing() && !staProtocol.isEmptyMk() && (staProtocol.getWorkNo() == 0 || staProtocol.getWorkNo() == 9999) && staProtocol.isPakMk()) {
                    if (station(1001)) {
                        News.warnNoLog("" + mark + " - 0" + " - 开始执行");
                        // 更新站点信息 且 下发plc命令
                        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:{},{}", staProtocol.getWorkNo(), 1004);
                        if (result) {
                            try {
                                Thread.sleep(8000L);
                            } catch (InterruptedException e) {
                                throw new RuntimeException(e);
                            }
                        } else {
                            News.error("" + mark + " - 2" + " - 发布命令至输送线队列失败!!! [plc编号:{}]", devp.getId());
                        }
                    } 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());
                    News.errorNoLog("" + mark + " - 6" + " - 站点信息不符合入库条件!!!" + " 自动信号:" + staProtocol.isLoading() + "、可入信号:" + staProtocol.isInEnable() + "、空板信号:" + staProtocol.isEmptyMk() + "、工作号:" + staProtocol.getWorkNo() + "、锁定标记" + staProtocol.isPakMk() + "、入库印记:" + staProtocol.getStamp());
                }
            }
        }
    }
    /**
     * 入库,从拣料站到入库站(CTU取货站)
     */
    public synchronized void in(Integer mark) {
        // 根据输送线plc遍历
        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);
                }
                staProtocol.setStaNo((short) 1006);
                boolean result = MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol));
                log.info("入库输送线下发:{},{}", staProtocol.getWorkNo(), 1007);
            }
        }
    }
    public synchronized void in2(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 (staProtocol.getWorkNo() > 0 && staProtocol.isAutoing() && !staProtocol.isEmptyMk() && staProtocol.isPakMk()) {
            Integer workNo = staProtocol.getWorkNo();
            staProtocol.setWorkNo(0);
            staProtocol.setStaNo((short) 0);
            boolean result = MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol));
            log.info("取走写入确认位:{},{}", staProtocol.getWorkNo(), 1006);
            StaProtocol staProtocol1006 = devpThread.getStation().get(1006);
            staProtocol1006.setWorkNo(workNo);
            staProtocol1006.setStaNo((short) 1007);
            boolean result2 = MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol));
            log.info("取走写入确认位:{},{}", staProtocol.getWorkNo(), 1007);
        }
    }
    @Transactional
    public boolean station(Integer staNo) {
        StationRequestParam stationRequestParam = new StationRequestParam();
        List<String> staNos = new ArrayList<>();
        staNos.add(staNo + "");
        stationRequestParam.setStaNos(staNos);
        String response = "";
        try {
            response = new HttpHandler.Builder()
                    .setUri(ctuUrl)
                    .setPath(station)
                    .setTimeout(1200, TimeUnit.SECONDS)
                    .setJson(JSON.toJSONString(stationRequestParam))
                    .build()
                    .doPost();
            JSONObject jsonObject = JSON.parseObject(response);
            if (jsonObject.getInteger("code").equals(200)) {
                log.info("下发任务返回数据:{}", response);
                return true;
            } else {
                //log.error("请求接口失败!!!url:{};request:{};response:{}", ctuUrl + sendTask, JSON.toJSONString(openBusSubmitParam), response);
                throw new CoolException("调用下发任务接口报错");
            }
        } catch (Exception e) {
            //log.error("fail", e);
        }
        return false;
    }
}