自动化立体仓库 - WCS系统
#
luxiaotao1123
2022-08-26 deeea3d8de2d09fbeef300fcb6a790d72cfee42e
src/main/java/com/zy/asrs/controller/SteController.java
@@ -2,28 +2,36 @@
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.annotations.ManagerAuth;
import com.core.common.BaseRes;
import com.core.common.Cools;
import com.core.common.R;
import com.core.exception.CoolException;
import com.zy.asrs.domain.enums.CrnStatusType;
import com.zy.asrs.domain.param.SteOperatorParam;
import com.zy.asrs.domain.vo.SteMsgTableVo;
import com.zy.asrs.domain.vo.SteStateTableVo;
import com.zy.asrs.domain.vo.SteDataVo;
import com.zy.asrs.entity.BasSte;
import com.zy.asrs.entity.WrkMast;
import com.zy.asrs.service.BasSteService;
import com.zy.asrs.service.WrkMastService;
import com.zy.core.cache.MessageQueue;
import com.zy.core.cache.OutputQueue;
import com.zy.core.cache.SlaveConnection;
import com.zy.core.enums.SlaveType;
import com.zy.core.enums.SteTaskModeType;
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.SteProtocol;
import com.zy.core.properties.SlaveProperties;
import com.zy.core.thread.SteThread;
import lombok.extern.slf4j.Slf4j;
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 org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
@@ -126,6 +134,7 @@
            }
            vo.setSpeed(steProtocol.getSpeed());  // 速度
            vo.setCloser(steProtocol.getCloser());  // 近点距离
            vo.setPakMk(steProtocol.getPakMk());    // 作业标记
        }
        return R.ok().add(list);
    }
@@ -143,4 +152,98 @@
        return R.ok().add(str.toString());
    }
    @GetMapping("/detl/{steNo}")
    public R steDetl(@PathVariable("steNo") Integer steNo){
        SteDataVo vo = new SteDataVo();
        for (SteSlave ste : slaveProperties.getSte()) {
            if (steNo.equals(ste.getId())) {
                vo.setSteNo(ste.getId());
                BasSte basSte = basSteService.selectById(ste.getId());
                if (!Cools.isEmpty(basSte)) {
                    vo.setRow(basSte.getRow());
                    vo.setBay(basSte.getBay());
                    vo.setLev(basSte.getLev());
                    vo.setCrnNo(basSte.getCrnNo());
                    vo.setWorkNo(basSte.getWrkNo());
                    vo.setPakMk(basSte.getPakMk());
                }
                break;
            }
        }
        return R.ok().add(vo);
    }
    @PostMapping("/detl/update")
    @ManagerAuth
    public R steUpdate(SteDataVo vo){
        BasSte basSte = basSteService.selectById(vo.getSteNo());
        if (basSte == null) {
            return R.error();
        }
        // 获取穿梭车信息
        SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, vo.getSteNo());
        SteProtocol steProtocol = steThread.getSteProtocol();
        if (steProtocol != null) {
           throw new CoolException(vo.getSteNo() + "号穿梭车不在线,无法保存");
        }
        if (!Cools.isEmpty(vo.getRow(), vo.getBay(), vo.getLev())) {
            if (!steThread.modifyPosHandle(vo.getRow(), vo.getBay(), vo.getLev())) {
                throw new CoolException("服务器错误");
            }
        }
        basSte.setPakMk(vo.getPakMk());
        basSte.setWrkNo(vo.getWorkNo());
        basSte.setCrnNo(vo.getCrnNo());
        basSte.setUpdateTime(new Date());
        if (!basSteService.updateById(basSte)) {
            throw new CoolException("修改失败");
        }
        return R.ok();
    }
    /****************************************************************/
    /************************** 手动操作 ******************************/
    /****************************************************************/
    @ManagerAuth(memo = "手动操作")
    @PostMapping("/operator/ste")
    public R steOperator(SteOperatorParam param){
        if (Cools.isEmpty(param.getSteNo(), param.getSteTaskMode())) {
            return R.parse(BaseRes.PARAM);
        }
        for (SteSlave ste : slaveProperties.getSte()) {
            // 获取堆垛机信息
            if (param.getSteNo().equals(ste.getId())) {
                SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, ste.getId());
                if (steThread == null) {
                    throw new CoolException("穿梭车不在线");
                }
                SteProtocol steProtocol = steThread.getSteProtocol();
                if (steProtocol == null) {
                    throw new CoolException("穿梭车不在线");
                }
                SteTaskModeType steTaskModeType = SteTaskModeType.get(param.getSteTaskMode());
                SteCommand steCommand = new SteCommand();
                steCommand.setSteNo(ste.getId()); // 穿梭车编号
                if (param.getSteTaskMode() == 16) {
                    steCommand.setComplete(true);
                } else {
                    if (steTaskModeType == null) {
                        throw new CoolException("任务类型错误");
                    }
                    steCommand.setTaskNo(param.getTaskNo()); // 工作号
                    steCommand.setTaskMode(steTaskModeType);
                }
                if (MessageQueue.offer(SlaveType.Ste, ste.getId(), new Task(2, steCommand))) {
                    return R.ok();
                } else {
                    throw new CoolException("命令下发失败");
                }
            }
        }
        return R.error();
    }
}