自动化立体仓库 - WCS系统
*
lsh
2024-10-23 c55724c0af4cb66443b747c6567f16d0b878bce5
src/main/java/com/zy/asrs/controller/RgvController.java
@@ -2,37 +2,43 @@
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.annotations.ManagerAuth;
import com.core.common.Cools;
import com.core.common.R;
import com.core.exception.CoolException;
import com.zy.asrs.domain.enums.RgvStatusType;
import com.zy.asrs.domain.param.RgvOperatorParam;
import com.zy.asrs.domain.param.*;
import com.zy.asrs.domain.vo.*;
import com.zy.asrs.entity.*;
import com.zy.asrs.mapper.BasRgvErrMapper;
import com.zy.asrs.service.BasCircularShuttleService;
import com.zy.asrs.service.BasDevpPositionService;
import com.zy.asrs.service.BasRgvService;
import com.zy.asrs.service.LocMastService;
import com.zy.asrs.service.WrkMastService;
import com.zy.asrs.service.impl.MainServiceImpl;
import com.zy.asrs.utils.VersionUtils;
import com.zy.asrs.utils.NumUtils;
import com.zy.asrs.utils.Utils;
import com.zy.core.cache.MessageQueue;
import com.zy.core.cache.OutputQueue;
import com.zy.core.cache.SlaveConnection;
import com.zy.core.enums.RgvModeType;
import com.zy.core.enums.RgvTaskModeType;
import com.zy.core.enums.SlaveType;
import com.zy.core.model.DevpSlave;
import com.zy.core.model.RgvSlave;
import com.zy.core.model.Task;
import com.zy.core.model.command.RgvCommand;
import com.zy.core.model.protocol.RgvProtocol;
import com.zy.core.properties.SlaveProperties;
import com.zy.core.thread.RgvThread;
import com.zy.core.thread.SiemensDevpThread;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.rmi.CORBA.Util;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -58,7 +64,12 @@
    @Autowired
    private MainServiceImpl mainService;
    @Autowired
    private LocMastService locMastService;
    private BasDevpPositionService basDevpPositionService;
    @Autowired
    private BasCircularShuttleService basCircularShuttleService;
    @Value("${constant-parameters.perimeter}")
    private Long perimeter;
    @PostMapping("/table/rgv/state")
    @ManagerAuth(memo = "RGV信息表")
@@ -88,7 +99,7 @@
            vo.setWalkPos(rgvProtocol.getWalkPos()==1?"不在定位":"在定位");
            vo.setWorkNo2(rgvProtocol.getTaskNo2());  //  工位2任务号
            vo.setStatus2(rgvProtocol.getStatusType2().desc);  // 工位2状态
            vo.setLoading2(rgvProtocol.getLoaded2()==1?"有物":"无物");  // 工位2有物
            vo.setLoading2(rgvProtocol.getLoaded2()==0?"无物":"有物");  // 工位2有物
            vo.setWarnCode(String.valueOf(rgvProtocol.getAlarm()));
            if (rgvProtocol.getAlarm() > 0) {
@@ -110,7 +121,7 @@
            vo.setRgvNo(basRgv.getRgvNo());   //  RGV号
            list.add(vo);
            // 获取RGV信息
            RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Crn, basRgv.getRgvNo());
            RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, basRgv.getRgvNo());
            if (rgvThread == null) {
                continue;
            }
@@ -119,7 +130,7 @@
                continue;
            }
            vo.setWorkNo1(rgvProtocol.getTaskNo1());  //  任务号
            vo.setWorkNo(rgvProtocol.getTaskNo1());  //  任务号
            if (rgvProtocol.getTaskNo1()>0) {
                WrkMast wrkMast = wrkMastService.selectById(rgvProtocol.getTaskNo1());
                if (wrkMast != null) {
@@ -145,7 +156,7 @@
        StringBuilder str = new StringBuilder();
        String s;
        int i = 0;
        while((s = OutputQueue.CRN.poll()) != null && i <=10) {
        while((s = OutputQueue.RGV.poll()) != null && i <=10) {
            str.append("\n").append(s);
            i++;
        }
@@ -321,4 +332,142 @@
        return false;
    }
    @PostMapping("/ring/through/rgv/position/data")
//    @ManagerAuth(memo = "环穿位置信息")
    public R ringThroughRgv(){
        List<RingThroughParam> result = new ArrayList<>();
        for (RgvSlave rgv : slaveProperties.getRgv()) {
//        for (int i = 1;i<2;i++) {
//            // 获取RGV信息
            RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgv.getId());
            if (rgvThread == null) {
                continue;
            }
            RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
            if (rgvProtocol == null) {
                continue;
            }
            RingThroughParam ringThroughParam = new RingThroughParam();
            ringThroughParam.setIndex(rgv.getId());
//            ringThroughParam.setIndex(i);
//            double[] doubles = Utils.RingThroughXY2(perimeter, NumUtils.GetRandomIntInRange(183));
            double[] doubles = Utils.RingThroughXYRgv(perimeter, perimeter-rgvProtocol.RgvPos.doubleValue());
//            double[] doubles = Utils.RingThroughXY2(183.0, 100*i );
            ringThroughParam.setValueX(doubles[0]-2.94);
            ringThroughParam.setValueY(doubles[1]-2.94);
            ringThroughParam.setModeColor(rgvProtocol.modeType.color);
            ringThroughParam.setStatusColor(rgvProtocol.statusType.color);
            result.add(ringThroughParam);
        }
        return R.ok().add(result);
    }
    @PostMapping("/ring/through/dev/position/data")
//    @ManagerAuth(memo = "站点信息")
    public R ringThroughDev(){
        List<RingThroughParam> result = new ArrayList<>();
        List<BasDevpPosition> basDevpPositions = basDevpPositionService.selectList(new EntityWrapper<>());
        for (BasDevpPosition basDevpPosition : basDevpPositions){
            RingThroughParam ringThroughParam = new RingThroughParam();
            ringThroughParam.setIndex(basDevpPosition.getDevNo());
            double[] doubles = Utils.RingThroughXYSta(perimeter, perimeter-basDevpPosition.getPlcPosition());
            ringThroughParam.setValueX(doubles[0]>50? doubles[0]+6:doubles[0]-1);
            ringThroughParam.setValueY(doubles[1]>50? doubles[1]+6:doubles[1]-1);
            result.add(ringThroughParam);
        }
        return R.ok().add(result);
    }
    @PostMapping("/ring/through/track/position/data")
//    @ManagerAuth(memo = "轨道PLC状态信息")
    public R wnergyGatheringRingParamTrack(){
        List<EnergyGatheringRingParam> result = new ArrayList<>();
        try{
            for (DevpSlave devp : slaveProperties.getDevp()) {
                if (devp.getId()!=1){
                    break;
                }
                SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
                if (devpThread.isResult()){
                    if (true){
                        EnergyGatheringRingParam energyGatheringRingParam = new EnergyGatheringRingParam();
                        energyGatheringRingParam.setTrackColor("rgba(0, 230, 118, 0.5)");
                        energyGatheringRingParam.setRadiationColor("rgba(0, 230, 118, 0.5)");
                        result.add(energyGatheringRingParam);
                    } else {
                        EnergyGatheringRingParam energyGatheringRingParam = new EnergyGatheringRingParam();
                        energyGatheringRingParam.setTrackColor("rgba(0, 230, 118, 0.5)");
                        energyGatheringRingParam.setRadiationColor("rgba(0, 230, 118, 0.5)");
                        result.add(energyGatheringRingParam);
                    }
                }
            }
            if (result.isEmpty()){
                EnergyGatheringRingParam energyGatheringRingParam = new EnergyGatheringRingParam();
                energyGatheringRingParam.setTrackColor("rgba(0, 0, 0, 81)");
                energyGatheringRingParam.setRadiationColor("rgba(0, 0, 0, 81)");
                result.add(energyGatheringRingParam);
            }
        } catch (Exception e){
            EnergyGatheringRingParam energyGatheringRingParam = new EnergyGatheringRingParam();
            energyGatheringRingParam.setTrackColor("rgba(0, 0, 0, 81)");
            energyGatheringRingParam.setRadiationColor("rgba(0, 0, 0, 81)");
            result.add(energyGatheringRingParam);
        }
        return R.ok().add(result);
    }
    @PostMapping("/ring/through/task/wrk/mast/position/data")
//    @ManagerAuth(memo = "作业信息")
    public R ringThroughTaskWrkMast(){
        List<RgvWrkMastParam> result = new ArrayList<>();
        List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<>());
        for (WrkMast wrkMast : wrkMasts){
            RgvWrkMastParam rgvWrkMastParam = new RgvWrkMastParam(wrkMast);
            if (Cools.isEmpty(rgvWrkMastParam.getRgvNo())){
                rgvWrkMastParam.setRgvSts("未绑定");
            } else {
                RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvWrkMastParam.getRgvNo());
                if (rgvThread == null) {
                    rgvWrkMastParam.setRgvSts("未知");
                } else {
                    RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
                    if (rgvProtocol == null) {
                        rgvWrkMastParam.setRgvSts("未知");
                    } else {
                        rgvWrkMastParam.setRgvSts(rgvProtocol.statusType.desc);
                    }
                }
            }
            result.add(rgvWrkMastParam);
        }
        return R.ok().add(result);
    }
    @PostMapping("/task/rgv/circular/shuttle/mast/position/data")
//    @ManagerAuth(memo = "作业信息")
    public R rgvCircularShuttle(){
        List<RgvCircularShuttleParam> result = new ArrayList<>();
        List<BasCircularShuttle> basCircularShuttleList = basCircularShuttleService.selectList(new EntityWrapper<>());
        for (BasCircularShuttle basCircularShuttle : basCircularShuttleList){
            RgvCircularShuttleParam rgvCircularShuttleParam = new RgvCircularShuttleParam(basCircularShuttle);
            if (!Cools.isEmpty(rgvCircularShuttleParam.getRgvNo())){
                RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvCircularShuttleParam.getRgvNo());
                if (rgvThread != null) {
                    RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
                    if (rgvProtocol != null) {
                        rgvCircularShuttleParam.setPosition(rgvProtocol.getRgvPos());
                        if (rgvCircularShuttleParam.getStatus()==0){
                            rgvCircularShuttleParam.setStatus$(rgvProtocol.statusType.desc);
                        }
                    }
                }
            }
            result.add(rgvCircularShuttleParam);
        }
        return R.ok().add(result);
    }
}