package com.zy.asrs.utils;
|
|
import com.alibaba.fastjson.JSON;
|
import com.baomidou.mybatisplus.mapper.EntityWrapper;
|
import com.zy.asrs.domain.enums.NotifyMsgType;
|
import com.zy.asrs.entity.DeviceConfig;
|
import com.zy.asrs.entity.WrkMast;
|
import com.zy.asrs.service.DeviceConfigService;
|
import com.zy.asrs.service.WrkMastService;
|
import com.zy.common.utils.RedisUtil;
|
import com.zy.core.News;
|
import com.zy.core.cache.SlaveConnection;
|
import com.zy.core.enums.RedisKeyType;
|
import com.zy.core.enums.ShuttleProtocolStatusType;
|
import com.zy.core.enums.SlaveType;
|
import com.zy.core.enums.WrkStsType;
|
import com.zy.core.model.command.ShuttleAssignCommand;
|
import com.zy.core.model.protocol.ShuttleProtocol;
|
import com.zy.core.thread.ShuttleThread;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Component;
|
|
import java.util.List;
|
|
@Component
|
public class ShuttleTaskUtils {
|
|
@Autowired
|
private DeviceConfigService deviceConfigService;
|
@Autowired
|
private WrkMastService wrkMastService;
|
@Autowired
|
private NotifyUtils notifyUtils;
|
@Autowired
|
private RedisUtil redisUtil;
|
|
/**
|
* 四向穿梭车任务完成
|
*/
|
public void shuttleFinished() {
|
try {
|
List<DeviceConfig> shuttleList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>()
|
.eq("device_type", String.valueOf(SlaveType.Shuttle)));
|
for (DeviceConfig device : shuttleList) {
|
//获取四向穿梭车信息
|
ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, device.getDeviceNo());
|
ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
|
if (shuttleProtocol == null) {
|
continue;
|
}
|
|
//四向穿梭车状态为等待确认、小车处于空闲状态
|
if (shuttleProtocol.getProtocolStatus() == ShuttleProtocolStatusType.WAITING.id //任务完成等待确认
|
&& shuttleProtocol.getTaskNo() != 0
|
) {
|
//将任务档标记为完成
|
WrkMast wrkMast = wrkMastService.selectByWorkNo(shuttleProtocol.getTaskNo());
|
if (wrkMast != null) {
|
if (wrkMast.getWrkSts() == WrkStsType.INBOUND_SHUTTLE_RUN.sts) {
|
//5.小车搬运中 ==> 9.入库完成
|
wrkMast.setWrkSts(WrkStsType.COMPLETE_INBOUND.sts);
|
shuttleThread.setSyncTaskNo(0);
|
} else if (wrkMast.getWrkSts() == WrkStsType.OUTBOUND_SHUTTLE_RUN.sts) {
|
//102.小车搬运中 ==> 103.小车搬运完成
|
wrkMast.setWrkSts(WrkStsType.OUTBOUND_SHUTTLE_RUN_COMPLETE.sts);
|
shuttleThread.setSyncTaskNo(0);
|
} else if (wrkMast.getWrkSts() == WrkStsType.MOVE_NEARBY.sts) {
|
//302.小车移动至近点中 ==> 303.小车移动至近点完成
|
wrkMast.setWrkSts(WrkStsType.MOVE_NEARBY_COMPLETE.sts);
|
shuttleThread.setSyncTaskNo(0);
|
} else if (wrkMast.getWrkSts() == WrkStsType.MOVE_IN_LIFT.sts) {
|
//304.小车迁入提升机中 ==> 305.小车迁入提升机完成
|
wrkMast.setWrkSts(WrkStsType.MOVE_IN_LIFT_COMPLETE.sts);
|
shuttleThread.setSyncTaskNo(0);
|
} else if (wrkMast.getWrkSts() == WrkStsType.MOVE_OUT_LIFT.sts) {
|
//308.小车迁出提升机中 ==> 309.小车迁出提升机完成
|
if (Utils.getLev(shuttleProtocol.getCurrentLocNo()) != Utils.getLev(wrkMast.getLocNo())) {
|
continue;//小车未到达目标层
|
}
|
wrkMast.setWrkSts(WrkStsType.MOVE_OUT_LIFT_COMPLETE.sts);
|
shuttleThread.setSyncTaskNo(0);
|
} else if (wrkMast.getWrkSts() == WrkStsType.MOVE_SHUTTLE.sts) {
|
//310.小车移动中 ==> 311.小车移动完成
|
wrkMast.setWrkSts(WrkStsType.COMPLETE_MOVE.sts);
|
shuttleThread.setSyncTaskNo(0);
|
notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.SHUTTLE_MOVE_COMPLETE);//触发通知
|
} else if (wrkMast.getWrkSts() == WrkStsType.CHARGE_SHUTTLE_WORKING.sts) {
|
//204.小车充电中 ==> 205.小车充电完成
|
wrkMast.setWrkSts(WrkStsType.CHARGE_SHUTTLE_COMPLETE.sts);
|
shuttleThread.setSyncTaskNo(0);
|
notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.SHUTTLE_POWER_COMPLETE);//触发通知
|
} else if (wrkMast.getWrkSts() == WrkStsType.LOC_MOVE_SHUTTLE_RUN.sts) {
|
//502.小车搬运中 ==> 509.移库完成
|
wrkMast.setWrkSts(WrkStsType.COMPLETE_LOC_MOVE.sts);
|
shuttleThread.setSyncTaskNo(0);
|
notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.SHUTTLE_DELIVERY);//触发通知
|
} else {
|
continue;
|
}
|
|
if (wrkMastService.updateById(wrkMast)) {
|
//设置四向穿梭车为空闲状态
|
shuttleThread.setProtocolStatus(ShuttleProtocolStatusType.IDLE);
|
News.info("四向穿梭车已确认且任务完成状态,复位。四向穿梭车号={}", shuttleProtocol.getShuttleNo());
|
} else {
|
News.error("四向穿梭车已确认且任务完成状态,复位失败,但未找到工作档。四向穿梭车号={},工作号={}", shuttleProtocol.getShuttleNo(), shuttleProtocol.getTaskNo());
|
}
|
} else {
|
Object object = redisUtil.get(RedisKeyType.SHUTTLE_WORK_FLAG.key + shuttleProtocol.getTaskNo());
|
if(object != null){
|
ShuttleAssignCommand assignCommand = JSON.parseObject(object.toString(), ShuttleAssignCommand.class);
|
if (!assignCommand.getAuto()) {
|
//手动模式
|
//工作号清零
|
shuttleThread.setTaskNo(0);
|
//设置四向穿梭车为空闲状态
|
shuttleThread.setProtocolStatus(ShuttleProtocolStatusType.IDLE);
|
News.info("四向穿梭车已确认且任务完成状态,复位。四向穿梭车号={}", shuttleProtocol.getShuttleNo());
|
}
|
}
|
}
|
}
|
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
|
}
|