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<DevopsMessage> devopsMessages = new ArrayList<>();
|
DevopsMessage devopsMessage;
|
for (CrnSlave crnSlave : slaveProperties.getCrn()) {
|
List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().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<ErrorType> 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<ErrorType> 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<ErrorType> isStaError(StaProtocol staProtocol, WrkMast wrkMast) {
|
List<ErrorType> 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<ErrorType> isCrnError(CrnProtocol crnProtocol, WrkMast wrkMast) {
|
List<ErrorType> 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<DevopsMessage> devopsMessages = new ArrayList<>();
|
DevopsMessage devopsMessage;
|
List<Integer> outSta = slaveProperties.getOutSta();
|
List<Integer> inSta = slaveProperties.getInSta();
|
// 持久数据
|
List<BasDevp> basDevps = basDevpService.selectList(new EntityWrapper<BasDevp>().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<ErrorType> 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<ErrorType> 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<ErrorType> isOutStaError(BasDevp devp) {
|
List<ErrorType> types = new ArrayList<>();
|
// 自动
|
if (!devp.getAutoing().equalsIgnoreCase("Y")) {
|
types.add(ErrorType.FEIZIDONG);
|
}
|
// 工作号是否为0
|
if (devp.getWrkNo() != null && devp.getWrkNo() > 0) {
|
types.add(ErrorType.GONGZUOHAO);
|
}
|
if (devp.getCanouting().equalsIgnoreCase("N")) {
|
types.add(ErrorType.CANOUTING);
|
}
|
// 目标站点
|
//TODO
|
// if (devp.getStaNo() == null) {
|
// types.add(ErrorType.STANO);
|
// }
|
|
return types;
|
}
|
|
private List<ErrorType> isInStaError(BasDevp devp) {
|
List<ErrorType> types = new ArrayList<>();
|
// 自动
|
if (!devp.getAutoing().equalsIgnoreCase("Y")) {
|
types.add(ErrorType.FEIZIDONG);
|
}
|
// 工作号是否为0
|
if (devp.getWrkNo() != null && devp.getWrkNo() > 0) {
|
types.add(ErrorType.GONGZUOHAO);
|
}
|
if (devp.getCanining().equalsIgnoreCase("N")) {
|
types.add(ErrorType.CANINING);
|
}
|
// 目标站点
|
// if (staProtocol.getStaNo() == null) {
|
// types.add(ErrorType.STANO);
|
// }
|
return types;
|
}
|
}
|