package com.zy.asrs.service.impl; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.common.Cools; import com.zy.asrs.entity.BasCircularShuttle; import com.zy.asrs.entity.BasDevpPosition; import com.zy.asrs.entity.BasRgv; import com.zy.asrs.entity.BasSte; import com.zy.asrs.service.BasCircularShuttleService; import com.zy.asrs.service.BasDevpPositionService; import com.zy.asrs.service.BasDevpService; import com.zy.asrs.utils.Utils; import com.zy.core.DevpThread; import com.zy.core.News; import com.zy.core.cache.MessageQueue; import com.zy.core.cache.SlaveConnection; import com.zy.core.enums.*; import com.zy.core.model.DevpSlave; import com.zy.core.model.RgvSlave; import com.zy.core.model.SteSlave; import com.zy.core.model.Task; import com.zy.core.model.command.SteCommand; import com.zy.core.model.protocol.RgvProtocol; import com.zy.core.model.protocol.StaProtocol; import com.zy.core.model.protocol.SteProtocol; import com.zy.core.properties.SlaveProperties; import com.zy.core.thread.RgvThread; import com.zy.core.thread.SiemensDevpThread; import com.zy.core.thread.SteThread; 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.List; import java.util.Map; /** * 立体仓库WCS系统主流程业务 * Created by vincent on 2020/8/6 */ @Slf4j @Service("mainService") @Transactional public class MainServiceImpl { @Autowired private SlaveProperties slaveProperties; @Autowired private BasDevpService basDevpService; @Autowired private BasRgvServiceImpl basRgvService; @Autowired private BasDevpPositionService basDevpPositionService; @Autowired private BasCircularShuttleService basCircularShuttleService; /** * 站点任务检测 下发小车取放任务 */ public synchronized void updateStePosition() { try{ List basCircularShuttleList = basCircularShuttleService.selectList(new EntityWrapper().orderBy("ste_id", true)); for (BasCircularShuttle basCircularShuttle : basCircularShuttleList){ RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, basCircularShuttle.getSteNo()); RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); if (rgvProtocol.modeType != RgvModeType.AUTO || (rgvProtocol.getStatusType() != RgvStatusType.IDLE && rgvProtocol.getStatusType() != RgvStatusType.SOS1001) ){ } else { break; } } } catch (Exception e){ } } /** * 站点任务检测 下发小车取放任务 */ public synchronized void DevpTaskNoRun() { for (DevpSlave devp : slaveProperties.getDevp()) { // 遍历空板入库口 for (DevpSlave.Sta sta : devp.getInSta()) { // 获取空板入库站信息 SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); StaProtocol staProtocol = devpThread.getStation().get(sta.getStaNo()); if (staProtocol == null) { continue; } else { staProtocol = staProtocol.clone(); } } } } public synchronized void loopSteCharge() { for (RgvSlave rgv : slaveProperties.getRgv()) { RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgv.getId()); RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); BasRgv basRgv = basRgvService.selectById(rgv.getId()); if (Cools.isEmpty(rgvProtocol, basRgv)) { continue; } try { // 在线 空闲 无作业标记 不在充电 if (rgvProtocol.getMode() == 0 || !rgvProtocol.statusType.equals(RgvStatusType.IDLE) || basRgv.getPakMk().equals("Y") // || steProtocol.getChargeStatus() == 1 ) { continue; } } catch (Exception e) { News.error("fail", e); } } } }