package com.zy.asrs.controller; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.annotations.ManagerAuth; import com.core.common.Cools; import com.core.common.R; import com.zy.asrs.domain.devops.DevopsMessage; import com.zy.asrs.domain.devops.ErrorType; import com.zy.asrs.entity.BasDevp; import com.zy.asrs.entity.WrkMast; import com.zy.asrs.mapper.WrkMastMapper; import com.zy.asrs.service.BasDevpService; import com.zy.asrs.service.WrkMastService; import com.zy.core.CrnThread; import com.zy.core.DevpThread; import com.zy.core.cache.SlaveConnection; import com.zy.core.enums.CrnForkPosType; import com.zy.core.enums.CrnModeType; import com.zy.core.enums.CrnStatusType; import com.zy.core.enums.SlaveType; import com.zy.core.model.CrnSlave; import com.zy.core.model.protocol.CrnProtocol; import com.zy.core.model.protocol.StaProtocol; import com.zy.core.properties.SlaveProperties; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; import java.util.List; @RestController @RequestMapping("/devops") public class DevopsController { @Autowired private WrkMastService wrkMastService; @Autowired private SlaveProperties slaveProperties; @Autowired private WrkMastMapper wrkMastMapper; @Autowired private BasDevpService basDevpService; @RequestMapping("/wrkMast/list") public R list() { List devopsMessages = new ArrayList<>(); DevopsMessage devopsMessage; for (CrnSlave crnSlave : slaveProperties.getCrn()) { List wrkMasts = wrkMastService.selectList(new EntityWrapper().eq("crn_no", crnSlave.getId()).orderBy("wrk_sts", false)); //先查询堆垛机是否在工作 WrkMast working = wrkMastMapper.selectWorking(crnSlave.getId()); for (WrkMast wrkMast : wrkMasts) { CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, wrkMast.getCrnNo()); CrnProtocol crnProtocol = crnThread.getCrnProtocol(); if (crnProtocol == null) { crnProtocol = new CrnProtocol(); } devopsMessage = new DevopsMessage(); devopsMessage.setWrkNo(wrkMast.getWrkNo()); if (working != null) { //在工作,则判断是否未当前这条 if (working.getWrkNo().equals(wrkMast.getWrkNo())) { if (crnProtocol.getTaskNo().intValue() == working.getWrkNo()) { devopsMessage.setError("该工作档正在执行,请稍后"); } else { devopsMessage.setError("该工作档状态不对,与堆垛机的工作号不匹配"); devopsMessage.setMethod("结合任务情况进行操作;如果实际已完成,就将工作档完成;如果未完成,则调整工作档状态"); } } else { devopsMessage.setError(working.getWrkNo() + "号工作档正在执行,请稍后"); } devopsMessages.add(devopsMessage); continue; } DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 1); StaProtocol staProtocol = devpThread.getStation().get(wrkMast.getStaNo()); List staError = isStaError(staProtocol, wrkMast); for (ErrorType type : staError) { if (!Cools.isEmpty(devopsMessage.getError())) { devopsMessage.setError(devopsMessage.getError() + ";" + type.getDesc()); devopsMessage.setMethod(devopsMessage.getMethod() + ";" + type.getMethod()); } else { devopsMessage.setError(type.getDesc()); devopsMessage.setMethod(type.getMethod()); } } List crnError = isCrnError(crnProtocol, wrkMast); for (ErrorType type : crnError) { if (!Cools.isEmpty(devopsMessage.getError())) { devopsMessage.setError(devopsMessage.getError() + ";" + type.getDesc()); devopsMessage.setMethod(devopsMessage.getMethod() + ";" + type.getMethod()); } else { devopsMessage.setError(type.getDesc()); devopsMessage.setMethod(type.getMethod()); } } devopsMessages.add(devopsMessage); } } return R.ok(devopsMessages); } private List isStaError(StaProtocol staProtocol, WrkMast wrkMast) { List types = new ArrayList<>(); if (staProtocol == null) { types.add(ErrorType.ERROR); return types; } else { staProtocol = staProtocol.clone(); } // 自动 if (staProtocol.isAutoing()) { types.add(ErrorType.FEIZIDONG); } if (wrkMast.getIoType() > 100) { // 出库校验 // 有物 if (staProtocol.isLoading()) { types.add(ErrorType.YOUWU); } // 工作号是否为0 if (staProtocol.getWorkNo() == 0) { types.add(ErrorType.GONGZUOHAO); } // 目标站点 if (staProtocol.getStaNo() == null) { types.add(ErrorType.STANO); } } else { // 入库校验 } return types; } private List isCrnError(CrnProtocol crnProtocol, WrkMast wrkMast) { List types = new ArrayList<>(); // 堆垛机是否空闲 if (crnProtocol.getStatusType() == CrnStatusType.IDLE) { types.add(ErrorType.CRN_NO_IDLE); } //任务号是否为0 if (crnProtocol.getTaskNo() == 0) { types.add(ErrorType.WORKING); } // 堆垛机是否自动 if (crnProtocol.getModeType() == CrnModeType.AUTO) { types.add(ErrorType.CRN_FEIZIDONG); } // 载货台有物 if (crnProtocol.getLoaded() == 0) { types.add(ErrorType.LOAD); } // 堆垛机取货中 if (crnProtocol.statusType == CrnStatusType.FETCHING) { types.add(ErrorType.WORKING); } // 放货中 if (crnProtocol.statusType == CrnStatusType.PUTTING) { types.add(ErrorType.WORKING); } // 堆垛机等待确认状态 if (crnProtocol.statusType == CrnStatusType.WAITING) { types.add(ErrorType.WORKING); } // 货叉是否会回中 if (crnProtocol.forkPosType == CrnForkPosType.HOME) { types.add(ErrorType.HOME); } return types; } @PostMapping("/site/list") @ManagerAuth(memo = "站点信息表") public R siteTable() { List devopsMessages = new ArrayList<>(); DevopsMessage devopsMessage; List outSta = slaveProperties.getOutSta(); List inSta = slaveProperties.getInSta(); // 持久数据 List basDevps = basDevpService.selectList(new EntityWrapper().orderBy("dev_no")); for (Integer out : outSta) { for (BasDevp devp : basDevps) { if (devp.getDevNo().equals(out)) { devopsMessage = new DevopsMessage(); devopsMessage.setStaNo(out); devopsMessage.setType("出库站点"); if (devp.getLoading().equalsIgnoreCase("Y")) { devopsMessage.setError(ErrorType.YOUWU.getDesc()); devopsMessage.setMethod("请将物料挪走,才能出库"); } else { List crnError = isOutStaError(devp); for (ErrorType type : crnError) { if (!Cools.isEmpty(devopsMessage.getError())) { devopsMessage.setError(devopsMessage.getError() + ";" + type.getDesc()); devopsMessage.setMethod(devopsMessage.getMethod() + ";" + type.getMethod()); } else { devopsMessage.setError(type.getDesc()); devopsMessage.setMethod(type.getMethod()); } } } devopsMessages.add(devopsMessage); } } } for (Integer in : inSta) { for (BasDevp devp : basDevps) { if (devp.getDevNo().equals(in)) { devopsMessage = new DevopsMessage(); devopsMessage.setStaNo(in); devopsMessage.setType("入库站点"); if (devp.getLoading().equalsIgnoreCase("Y")) { List crnError = isInStaError(devp); for (ErrorType type : crnError) { if (!Cools.isEmpty(devopsMessage.getError())) { devopsMessage.setError(devopsMessage.getError() + ";" + type.getDesc()); devopsMessage.setMethod(devopsMessage.getMethod() + ";" + type.getMethod()); } else { devopsMessage.setError(type.getDesc()); devopsMessage.setMethod(type.getMethod()); } } } else { devopsMessage.setError(ErrorType.WUWU.getDesc()); devopsMessage.setMethod(ErrorType.WUWU.getMethod()); } devopsMessages.add(devopsMessage); } } } return R.ok().add(devopsMessages); } private List isOutStaError(BasDevp devp) { List types = new ArrayList<>(); // 自动 if (devp.getAutoing().equalsIgnoreCase("Y")) { types.add(ErrorType.FEIZIDONG); } // 有物 if (devp.getLoading().equalsIgnoreCase("Y")) { types.add(ErrorType.YOUWU); } // 工作号是否为0 if (devp.getWrkNo() != null) { types.add(ErrorType.GONGZUOHAO); } // 目标站点 //TODO // if (devp.getStaNo() == null) { // types.add(ErrorType.STANO); // } return types; } private List isInStaError(BasDevp devp) { List types = new ArrayList<>(); // 自动 if (devp.getAutoing().equalsIgnoreCase("Y")) { types.add(ErrorType.FEIZIDONG); } // 工作号是否为0 if (devp.getWrkNo() != null) { types.add(ErrorType.GONGZUOHAO); } // 目标站点 // if (staProtocol.getStaNo() == null) { // types.add(ErrorType.STANO); // } return types; } }