#
zzgtfwq
2 天以前 d91d1fc34a8af84513416cb2a03c75d96fb0304e
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -6,6 +6,7 @@
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.core.common.*;
import com.core.exception.CoolException;
import com.zy.asrs.controller.TaskWrkController;
import com.zy.asrs.domain.enums.LedErrorAreaType;
import com.zy.asrs.domain.enums.TaskStatusType;
import com.zy.asrs.entity.*;
@@ -13,24 +14,19 @@
import com.zy.asrs.service.*;
import com.zy.asrs.utils.*;
import com.zy.common.model.LocTypeDto;
import com.zy.common.model.MatDto;
import com.zy.common.model.SearchLocParam;
import com.zy.common.model.StartupDto;
import com.zy.common.service.CommonService;
import com.zy.common.utils.CollectionUtils;
import com.zy.common.utils.HttpHandler;
import com.zy.common.utils.News;
import com.zy.core.CrnThread;
import com.zy.core.DevpThread;
import com.zy.core.cache.*;
import com.zy.core.enums.*;
import com.zy.core.model.*;
import com.zy.core.model.command.CrnCommand;
import com.zy.core.model.command.LedCommand;
import com.zy.core.model.protocol.*;
import com.zy.core.properties.SlaveProperties;
import com.zy.core.thread.BarcodeThread;
import com.zy.core.thread.LedThread;
import com.zy.core.thread.RgvThread;
import com.zy.core.thread.SiemensDevpThread;
import com.zy.system.entity.license.LicenseVerify;
@@ -44,7 +40,6 @@
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
/**
 * 立体仓库WCS系统主流程业务
@@ -68,17 +63,11 @@
    @Autowired
    private LocMastService locMastService;
    @Autowired
    private StaDescService staDescService;
    @Autowired
    private BasCrnpService basCrnpService;
    @Autowired
    private BasDevpService basDevpService;
    @Autowired
    private LocDetlService locDetlService;
    @Autowired
    private BasErrLogService basErrLogService;
    @Autowired
    private BasCrnErrorMapper basCrnErrorMapper;
    @Autowired
    private WrkMastService wrkMastService;
    @Autowired
@@ -232,7 +221,7 @@
//                        LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed());
                        barcodeThread.setBarcode("");
                        staProtocol.setWorkNo(wrkMast.getWrkNo());
                        staProtocol.setStaNo(wrkMast.getStaNo().shortValue());
                        staProtocol.setStaNo(wrkMast.getStaNoSou$().shortValue());
                        devpThread.setPakMk(staProtocol.getSiteId(), false,238);
                        boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
@@ -307,7 +296,7 @@
     */
    public synchronized void storeEmptyPlt() {
        for (DevpSlave devp : slaveProperties.getDevp()) {
            if (devp.getId()==1) continue;
//            if (devp.getId()==1) continue;
            // 遍历空板入库口
            for (DevpSlave.Sta emptyInSta : devp.getEmptyInSta()) {
                // 获取空板入库站信息
@@ -341,7 +330,7 @@
                            // 更新站点信息 且 下发plc命令
                            staProtocol.setWorkNo(dto.getWorkNo());
                            staProtocol.setStaNo(dto.getStaNo().shortValue());
                            staProtocol.setStaNo(dto.getStaNoSou$(dto.getStaNo(),staProtocol.getSiteId()).shortValue());
                            devpThread.setPakMk(staProtocol.getSiteId(), false,4087);
                            boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                            if (!result) {
@@ -733,7 +722,7 @@
            }
            // 双深库位且浅库位有货,则需先对浅库位进行库位移转
            if (Utils.isDeepLoc(slaveProperties, wrkMast.getLocNo())) {
            if (Utils.isDeepLoc(slaveProperties, wrkMast.getLocNo()) && crnProtocol.getCrnNo()!=3) {
                String shallowLocNo = Utils.getShallowLoc(slaveProperties, wrkMast.getLocNo());
                LocMast shallowLoc = locMastService.selectById(shallowLocNo);
                // O.空库位、Q.拣料/盘点/并板再入库、S.入库预约、X.禁用 直接搬!
@@ -880,7 +869,7 @@
                }
                // 双深库位且浅库位有货,则需先对浅库位进行库位移转
                if (Utils.isDeepLoc(slaveProperties, wrkMast.getSourceLocNo())) {
                if (Utils.isDeepLoc(slaveProperties, wrkMast.getSourceLocNo()) && crnProtocol.getCrnNo()!=3) {
                    String shallowLocNo = Utils.getShallowLoc(slaveProperties, wrkMast.getSourceLocNo());
                    LocMast shallowLoc = locMastService.selectById(shallowLocNo);
                    // O.空库位、Q.拣料/盘点/并板再入库、S.入库预约、X.禁用 直接搬!
@@ -1119,7 +1108,7 @@
            }
            //  状态:等待确认 并且  任务完成位 = 1
            if (crnProtocol.statusType == CrnStatusType.WAITING && crnProtocol.getTaskNo() != 0) {
                if (crnProtocol.getTaskNo() == 32222) {
                if (crnProtocol.getTaskNo() == 32222 || crnProtocol.getTaskNo() == 999) {
                    // 堆垛机复位
                    crnThread.setResetFlag(true);
                } else {
@@ -1176,11 +1165,11 @@
                        if (!wrkMasts.isEmpty()) {
                            continue;
                        }
                        List<TaskWrkLog> taskWrkLogs = taskWrkLogService.selectList(new EntityWrapper<TaskWrkLog>().eq("CRN_NO",crnProtocol.getCrnNo()).orderBy("COMPLETE_TIME",false));
                        if (!taskWrkLogs.isEmpty()) {
                        List<WrkMast> WrkMastLogList = wrkMastMapper.selectByCrnNoLog(crnProtocol.getCrnNo());
                        if (!WrkMastLogList.isEmpty()) {
                            boolean signT = false;
                            for (TaskWrkLog taskWrkLog : taskWrkLogs){
                                Date completeTime = taskWrkLog.getCompleteTime();
                            for (WrkMast wrkMast : WrkMastLogList){
                                Date completeTime = wrkMast.getIoTime();
                                if (completeTime==null){
                                    continue;
                                }
@@ -1202,11 +1191,16 @@
                        crnCommand.setCrnNo(crnProtocol.getCrnNo()); // 堆垛机编号
                        crnCommand.setTaskNo((short)999); // 工作号
                        crnCommand.setAckFinish((short) 0);  // 任务完成确认位
                        crnCommand.setTaskMode(CrnTaskModeType.X_MOVE); // 任务模式:  站位移转4
                        crnCommand.setSourcePosX((short) 1);     // 源库位排
                        crnCommand.setTaskMode(CrnTaskModeType.GO_ORIGIN); // 任务模式:  站位移转4
                        Integer crnNo = crnProtocol.getCrnNo();
                        int row1 = crnNo * 4-1;
                        if (crnNo>2){
                            row1 = row1-2;
                        }
                        crnCommand.setSourcePosX((short) row1);     // 源库位排
                        crnCommand.setSourcePosY((short) 1);     // 源库位列
                        crnCommand.setSourcePosZ((short) 1);   // 源库位层
                        crnCommand.setDestinationPosX((short) 1);     // 目标库位排
                        crnCommand.setDestinationPosX((short) row1);     // 目标库位排
                        crnCommand.setDestinationPosY((short) 1);     // 目标库位层
                        crnCommand.setDestinationPosZ((short) 1);     // 目标库位列
                        if (!MessageQueue.offer(SlaveType.Crn, crnProtocol.getCrnNo(), new Task(2, crnCommand))) {
@@ -1237,6 +1231,45 @@
    /////////////////////////////////////RGV调度/////////////////////////////////////
    public synchronized void taskCreate() {
        for (RgvSlave rgvSlave : slaveProperties.getRgv()) {
            try {
                for (RgvSlave.RgvStn inSta : rgvSlave.getRgvInSta()) {
                    WrkMast wrkMast = deviceDetectionCreate(inSta);
                    if (!Cools.isEmpty(wrkMast)) {
                        TaskWrk taskWrk = new TaskWrk(wrkMast);
                        taskWrkService.insert(taskWrk);
                    }
                }
            } catch (Exception e){
            }
        }
    }
    public synchronized void taskCancel() {
        try {
            List<String> taskList = new ArrayList<>();
            for (RgvSlave rgvSlave : slaveProperties.getRgv()) {
                RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId());
                TaskProtocolCache taskProtocolCache = rgvThread.getTaskProtocolCache();
                ConcurrentHashMap<String, TaskProtocol> allTaskProtocol = taskProtocolCache.getAllTaskProtocol();
                for (TaskProtocol taskProtocol : allTaskProtocol.values()){
                    taskList.add(taskProtocol.getTaskNo().toString());
                }
            }
            Wrapper<TaskWrk> wrkWrapper = new EntityWrapper<TaskWrk>().eq("status", 5);
            for (String taskNo : taskList){
                wrkWrapper.ne("task_no", taskNo);
            }
            int count = taskWrkService.selectCount(wrkWrapper);
            if (count>0){
                taskWrkService.delete(wrkWrapper);
            }
        } catch (Exception e){
        }
    }
    public synchronized void taskStart() {
        for (RgvSlave rgvSlave : slaveProperties.getRgv()) {
            try {
@@ -1719,6 +1752,34 @@
        return true;
    }
    public WrkMast deviceDetectionCreate(RgvSlave.RgvStn inSta) {
        DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, inSta.getDevpPlcId());
        StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo());
        if (staProtocol == null) {
            return null;
        }
        // 判断是否满足取货条件
        if (staProtocol.isAutoing()
//                && staProtocol.isLoading()
//                && staProtocol.isStaOk()
                && staProtocol.getWorkNo() != 0) {
            WrkMast wrkMast = wrkMastService.selectByWrkNo(staProtocol.getWorkNo());
            if (!Cools.isEmpty(wrkMast)){
                if (inSta.getStaNo()==117 || inSta.getStaNo()==120 || inSta.getStaNo()==123
                        || inSta.getStaNo()==217 || inSta.getStaNo()==220 || inSta.getStaNo()==223){
                    if (wrkMast.getIoType()>100){
                        return null;
                    }
                }
                TaskWrk taskWrk = taskWrkService.selectByTaskNo(staProtocol.getWorkNo());
                if (Cools.isEmpty(taskWrk)){
                    return wrkMast;
                }
            }
        }
        return null;
    }
    public TaskWrk deviceDetection(RgvSlave.RgvStn inSta) {
        DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, inSta.getDevpPlcId());
@@ -1736,7 +1797,7 @@
//                && staProtocol.isLoading()
//                && staProtocol.isStaOk()
                && staProtocol.getWorkNo() != 0) {
            TaskWrk taskWrk = taskWrkService.selectByWrkNo(staProtocol.getWorkNo());
            TaskWrk taskWrk = taskWrkService.selectByTaskNo(staProtocol.getWorkNo());
            if (taskWrk != null) {
                Integer stano = staProtocol.getStaNo().intValue();
                if (staProtocol.getSiteId() == 1004 || staProtocol.getSiteId()==1020){
@@ -1854,7 +1915,7 @@
                // 判断是否满足取货条件
                if (staProtocolOther.isAutoing()
                        && staProtocolOther.getWorkNo() != 0) {
                    TaskWrk taskWrkOther = taskWrkService.selectByWrkNo(staProtocolOther.getWorkNo());
                    TaskWrk taskWrkOther = taskWrkService.selectByTaskNo(staProtocolOther.getWorkNo());
                    if (taskWrkOther != null) {
                        return taskWrkOther;
                    }
@@ -1964,6 +2025,7 @@
                issuedTake.setTaskNo(Long.valueOf(taskWrk.getWrkNo()));
                issuedTake.setTaskStatus(2);
                issuedTake.setTargetPositionStaNo(basDevpPositionSou.getDevNo());
                issuedTake.setTargetPositionStaNoEnd(basDevpPositionSou.getDevNo$());
                issuedTake.setTargetPositionStaNoPlcId(basDevpPositionSou.getPlcId());
                issuedTake.setTaskNoDirection(issuedTake.gettaskNoDirection$(issuedTake.getTaskNo(), issuedTake.getTaskStatus()));
                issuedTake.setTargetPosition(basDevpPositionSou.getPlcPosition());
@@ -1974,6 +2036,7 @@
                issuedPut.setTaskNo(Long.valueOf(taskWrk.getWrkNo()));
                issuedPut.setTaskStatus(3);
                issuedPut.setTargetPositionStaNo(basDevpPositionEnd.getDevNo());
                issuedPut.setTargetPositionStaNoEnd(basDevpPositionEnd.getDevNo$());
                issuedPut.setTargetPositionStaNoPlcId(basDevpPositionEnd.getPlcId());
                issuedPut.setTaskNoDirection(issuedPut.gettaskNoDirection$(issuedPut.getTaskNo(), issuedPut.getTaskStatus()));
                issuedPut.setTargetPosition(basDevpPositionEnd.getPlcPosition());
@@ -1981,13 +2044,11 @@
                issuedPut.setDirection(basDevpPositionEnd.getRgvSign()==1);
                try{
                    if (taskWrk.getIoType()==2 && basDevpPositionEnd.getRgvSign()==1){
                        Date now = new Date();
                        taskWrk.setStatus(TaskStatusType.OVER.id);
                        taskWrk.setModiTime(now);//更新时间
                        taskWrk.setCompleteTime(now);//完结时间
                        taskWrkService.updateById(taskWrk);
                    }
                    Date now = new Date();
                    taskWrk.setStatus(TaskStatusType.OVER.id);
                    taskWrk.setModiTime(now);//更新时间
                    taskWrk.setCompleteTime(now);//完结时间
                    taskWrkService.updateById(taskWrk);
                } catch (Exception e){
                }