#
Junjie
2024-04-08 2f93fd44f708cd93fdb912600b0f4b664d11c95b
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/Utils.java
@@ -1,18 +1,36 @@
package com.zy.asrs.wcs.core.utils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.zy.asrs.framework.common.Cools;
import com.zy.asrs.framework.common.SpringUtils;
import com.zy.asrs.framework.exception.CoolException;
import com.zy.asrs.wcs.core.entity.Task;
import com.zy.asrs.wcs.core.entity.TaskSerialNo;
import com.zy.asrs.wcs.core.service.TaskSerialNoService;
import com.zy.asrs.wcs.core.service.TaskService;
import com.zy.asrs.wcs.rcs.cache.SlaveConnection;
import com.zy.asrs.wcs.rcs.entity.Device;
import com.zy.asrs.wcs.rcs.entity.DeviceType;
import com.zy.asrs.wcs.rcs.model.enums.SlaveType;
import com.zy.asrs.wcs.rcs.model.protocol.ShuttleProtocol;
import com.zy.asrs.wcs.rcs.service.DeviceService;
import com.zy.asrs.wcs.rcs.service.DeviceTypeService;
import com.zy.asrs.wcs.rcs.thread.ShuttleThread;
import java.util.ArrayList;
import java.util.List;
public class Utils {
    public static final String _LINK = "-";
    /**
     * 通过库位号获取 排
     */
    public static int getRow(String locNo) {
        if (!Cools.isEmpty(locNo)) {
            return Integer.parseInt(locNo.substring(0, 2));
            String[] split = locNo.split(_LINK);
            return Integer.parseInt(split[0]);
        }
        throw new RuntimeException("库位解析异常");
    }
@@ -22,7 +40,8 @@
     */
    public static int getBay(String locNo) {
        if (!Cools.isEmpty(locNo)) {
            return Integer.parseInt(locNo.substring(2, 5));
            String[] split = locNo.split(_LINK);
            return Integer.parseInt(split[1]);
        }
        throw new RuntimeException("库位解析异常");
    }
@@ -32,13 +51,15 @@
     */
    public static int getLev(String locNo) {
        if (!Cools.isEmpty(locNo)) {
            return Integer.parseInt(locNo.substring(5, 7));
            String[] split = locNo.split(_LINK);
            return Integer.parseInt(split[2]);
        }
        throw new RuntimeException("库位解析异常");
    }
    public static String getLocNo(Number row, Number bay, Number lev) {
        return zerofill(String.valueOf(row), 2) + zerofill(String.valueOf(bay), 3) + zerofill(String.valueOf(lev), 2);
        return row + _LINK + bay + _LINK + lev;
//        return zerofill(String.valueOf(row), 2) + zerofill(String.valueOf(bay), 3) + zerofill(String.valueOf(lev), 2);
    }
    public static String zerofill(String msg, Integer count){
@@ -88,4 +109,79 @@
        return list;
    }
    public static boolean hasShuttleInLoc(String locNo, Long deviceId) {
        DeviceTypeService deviceTypeService = SpringUtils.getBean(DeviceTypeService.class);
        DeviceService deviceService = SpringUtils.getBean(DeviceService.class);
        DeviceType deviceType = deviceTypeService.getOne(new LambdaQueryWrapper<DeviceType>()
                .eq(DeviceType::getFlag, String.valueOf(SlaveType.Shuttle))
                .eq(DeviceType::getStatus, 1));
        if (deviceType == null) {
            return false;
        }
        List<Device> list = deviceService.list(new LambdaQueryWrapper<Device>()
                .eq(Device::getDeviceType, deviceType.getId())
                .eq(Device::getStatus, 1));
        for (Device device : list) {
            if (deviceId.equals(device.getId())) {
                continue;
            }
            //获取四向穿梭车线程
            ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, device.getId().intValue());
            if (shuttleThread == null) {
                continue;
            }
            ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
            if (shuttleProtocol == null) {
                continue;
            }
            if (shuttleProtocol.getCurrentLocNo().equals(locNo)) {
                return true;
            }
        }
        return false;
    }
    /**
     * 生成工作号
     * @return taskNo(工作号)
     */
    public static int getTaskNo(String flag) {
        TaskSerialNoService taskSerialNoService = SpringUtils.getBean(TaskSerialNoService.class);
        TaskService taskService = SpringUtils.getBean(TaskService.class);
        TaskSerialNo taskSerialNo = taskSerialNoService.getOne(new LambdaQueryWrapper<TaskSerialNo>()
                .eq(TaskSerialNo::getFlag, flag)
                .eq(TaskSerialNo::getStatus, 1));
        if (Cools.isEmpty(taskSerialNo)) {
            throw new CoolException("数据异常,请联系管理员");
        }
        int taskNo = taskSerialNo.getTaskNo();
        int sNo = taskSerialNo.getStartNo();
        int eNo = taskSerialNo.getTargetNo();
        taskNo = taskNo >= eNo ? sNo : taskNo + 1;
        while (true) {
            Task task = taskService.getOne(new LambdaQueryWrapper<Task>()
                    .eq(Task::getTaskNo, taskNo));
            if (null != task) {
                taskNo = taskNo >= eNo ? sNo : taskNo + 1;
            } else {
                break;
            }
        }
        // 修改序号记录
        if (taskNo > 0){
            taskSerialNo.setTaskNo(taskNo);
            taskSerialNoService.updateById(taskSerialNo);
            return taskNo;
        }
        throw new CoolException("工作号生成失败");
    }
}