b40ae90237b1ce741dae89aed09047d0dfbffcf1..f23352f53b2c06313ac9808c62399c7de0d44e3a
2025-06-06 lsh
*
f23352 对比 | 目录
2025-06-06 lsh
*
c3aa50 对比 | 目录
2025-06-06 lsh
*
3951ad 对比 | 目录
2025-06-06 lsh
*
ca1971 对比 | 目录
2025-06-06 lsh
*
c23950 对比 | 目录
7个文件已修改
359 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/RgvController.java 51 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/BasRgvErrLog.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/BasRgvOpt.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/MainProcess.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/model/protocol/RgvProtocol.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/RgvThread.java 71 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/index.html 170 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/RgvController.java
@@ -10,10 +10,7 @@
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.WrkMastService;
import com.zy.asrs.service.*;
import com.zy.asrs.service.impl.MainServiceImpl;
import com.zy.asrs.utils.NumUtils;
import com.zy.asrs.utils.Utils;
@@ -57,6 +54,10 @@
    private WrkMastService wrkMastService;
    @Autowired
    private BasRgvErrMapper basRgvErrMapper;
    @Autowired
    private BasRgvErrLogService basRgvErrLogService;
    @Autowired
    private BasRgvOptService basRgvOptService;
    @Autowired
    private BasRgvService basRgvService;
    @Autowired
@@ -452,6 +453,19 @@
        return R.ok().add(result);
    }
    @PostMapping("/ring/through/task/wrk/mast/position/data/v1")
//    @ManagerAuth(memo = "作业信息")
    public R ringThroughTaskWrkMastV1(){
        List<BasRgvOpt> result = new ArrayList<>();
        for (int i = 1 ; i<11; i ++){
            BasRgvOpt basRgvOpt = basRgvOptService.selectOne(new EntityWrapper<BasRgvOpt>().eq("rgv_no", i).orderBy("id", false));
            if (basRgvOpt!=null){
                result.add(basRgvOpt);
            }
        }
        return R.ok().add(result);
    }
    @PostMapping("/task/rgv/circular/shuttle/mast/position/data")
//    @ManagerAuth(memo = "作业信息")
    public R rgvCircularShuttle(){
@@ -468,8 +482,20 @@
                        if (rgvCircularShuttleParam.getStatus()==0){
                            rgvCircularShuttleParam.setStatus$(rgvProtocol.statusType.desc);
                        }
                        if (rgvCircularShuttleParam.getError()==0){
                            rgvCircularShuttleParam.setError$(rgvProtocol.getAlarm$());
                        if (rgvProtocol.getAlarmList().isEmpty()){
                            rgvCircularShuttleParam.setError(0);
                            rgvCircularShuttleParam.setError$("-");
                        } else {
                            StringBuilder alarmList = new StringBuilder();
                            for (Integer alarm : rgvProtocol.getAlarmList()){
                                BasRgvErr rgvErr = basRgvErrMapper.selectById(alarm);
                                alarmList.append((rgvErr==null || rgvErr.getErrName()==null)? "未知异常:"+alarm:rgvErr.getErrName());
                                if (alarm.equals(rgvProtocol.getAlarmList().get(rgvProtocol.getAlarmList().size() - 1))){
                                    break;
                                }
                                alarmList.append("---");
                            }
                            rgvCircularShuttleParam.setError$(alarmList.toString());
                        }
                    }
                }
@@ -479,6 +505,19 @@
        return R.ok().add(result);
    }
    @PostMapping("/task/rgv/circular/shuttle/mast/position/data/v1")
//    @ManagerAuth(memo = "作业信息")
    public R rgvCircularShuttleV1(){
        List<BasRgvErrLog> result = new ArrayList<>();
        for (int i = 1 ; i<11; i ++){
            BasRgvErrLog basRgvErrLog = basRgvErrLogService.selectOne(new EntityWrapper<BasRgvErrLog>().eq("rgv_no", i).orderBy("id", false));
            if (basRgvErrLog!=null){
                result.add(basRgvErrLog);
            }
        }
        return R.ok().add(result);
    }
    @PostMapping("/disable/rgv/status")
//    @ManagerAuth(memo = "修改RGV状态")
src/main/java/com/zy/asrs/entity/BasRgvErrLog.java
@@ -5,11 +5,15 @@
import com.baomidou.mybatisplus.annotations.TableField;
import java.text.SimpleDateFormat;
import java.util.Date;
import com.core.common.SpringUtils;
import com.zy.asrs.mapper.BasRgvErrMapper;
import org.springframework.format.annotation.DateTimeFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import com.baomidou.mybatisplus.annotations.TableName;
import java.io.Serializable;
import java.util.List;
@Data
@TableName("asr_bas_rgv_err_log")
@@ -169,6 +173,33 @@
    public BasRgvErrLog() {}
    public BasRgvErrLog(List<Integer> alarmLists , Short taskNo,Integer rgvNo) {
        BasRgvErrMapper basRgvErrMapper = SpringUtils.getBean(BasRgvErrMapper.class);
        StringBuilder alarmList = new StringBuilder();
        for (Integer alarm : alarmLists){
            BasRgvErr rgvErr = basRgvErrMapper.selectById(alarm);
            alarmList.append((rgvErr==null || rgvErr.getErrName()==null)? "未知异常:"+alarm:rgvErr.getErrName());
            if (alarm.equals(alarmLists.get(alarmLists.size() - 1))){
                this.errCode = alarm;
                break;
            }
            alarmList.append("---");
        }
        this.error = alarmList.toString();
        Date now = new Date();
        this.uuid = String.valueOf(now.getTime());
        this.wrkNo = taskNo.intValue();
        this.startTime = now;
        this.endTime = now;
        this.rgvNo = rgvNo;
        this.status = 1;
        this.createTime = now;
        this.createBy = 9999L;
        this.updateTime = now;
        this.updateBy = 9999L;
        this.memo = "异常自动记录";
    }
    public BasRgvErrLog(String uuid,Integer wrkNo,Date startTime,Date endTime,Long wrkSts,Integer ioType,Integer rgvNo,Integer plcNo,String locNo,Integer staNo,Integer sourceStaNo,String sourceLocNo,String barcode,Integer errCode,String error,Integer status,Date createTime,Long createBy,Date updateTime,Long updateBy,String memo) {
        this.uuid = uuid;
        this.wrkNo = wrkNo;
src/main/java/com/zy/asrs/entity/BasRgvOpt.java
@@ -5,6 +5,10 @@
import com.baomidou.mybatisplus.annotations.TableField;
import java.text.SimpleDateFormat;
import java.util.Date;
import com.zy.core.enums.RgvTaskModeType;
import com.zy.core.model.command.RgvCommand;
import com.zy.core.model.protocol.RgvProtocol;
import org.springframework.format.annotation.DateTimeFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
@@ -149,6 +153,30 @@
    private String memo;
    public BasRgvOpt() {}
    public BasRgvOpt(RgvProtocol rgvProtocol, RgvCommand command) {
        Date now = new Date();
        this.wrkNo1 = rgvProtocol.getTaskNo1().intValue();
        this.rgvNo = rgvProtocol.getRgvNo();
        this.sendTime = now;
        this.mode = command.getTaskModeType1().name();
        this.sourceSta = command.getSourceStaNo1().intValue();
        this.posSta = command.getDestinationStaNo1().intValue();
        this.updateTime = now;
        this.updateBy = 9999L;
        this.memo = "任务下发自动生成指令日志";
    }
    public BasRgvOpt(RgvProtocol rgvProtocol, Long command) {
        Date now = new Date();
        this.wrkNo1 = rgvProtocol.getTaskNo1().intValue();
        this.rgvNo = rgvProtocol.getRgvNo();
        this.sendTime = now;
        this.mode = "取放货";
        this.sourceSta = rgvProtocol.getRgvPosI();
        this.posSta = command.intValue();
        this.updateTime = now;
        this.updateBy = 9999L;
        this.memo = "漫游任务触发";
    }
    public BasRgvOpt(Integer wrkNo1,Integer wrkNo2,Integer rgvNo,Date sendTime,String mode,Integer sourceRow,Integer sourceBay,Integer sourceLev,Integer sourceSta,Integer posRow,Integer posBay,Integer posLev,Integer posSta,Integer response,Date updateTime,Long updateBy,String memo) {
        this.wrkNo1 = wrkNo1;
src/main/java/com/zy/core/MainProcess.java
@@ -52,7 +52,7 @@
                try {
                    // 间隔
                    Thread.sleep(200);
                    System.out.println("开始:"+new Date().getTime());
//                    System.out.println("开始:"+new Date().getTime());
                    // 系统运行状态判断
                    if (!SystemProperties.WCS_RUNNING_STATUS.get()) {
@@ -69,7 +69,7 @@
                    mainService.rgvCompleteWrkMastSta(autoZ);
                    //更新位置信息
                    mainService.updateStePosition();
                    System.out.println("结束:"+new Date().getTime());
//                    System.out.println("结束:"+new Date().getTime());
                } catch (Exception e) {
src/main/java/com/zy/core/model/protocol/RgvProtocol.java
@@ -4,6 +4,9 @@
import com.zy.core.enums.*;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
/**
 * Created by vincent on 2020/8/7
 */
@@ -104,6 +107,7 @@
     * 异常码
     */
    public Short alarm;
    public List<Integer> alarmList = new ArrayList<>();
    /**
     * 心跳指令 1-2每秒切换一次
src/main/java/com/zy/core/thread/RgvThread.java
@@ -8,7 +8,9 @@
import com.core.common.DateUtils;
import com.core.common.SpringUtils;
import com.zy.asrs.entity.BasRgv;
import com.zy.asrs.entity.BasRgvErrLog;
import com.zy.asrs.entity.BasRgvOpt;
import com.zy.asrs.service.BasRgvErrLogService;
import com.zy.asrs.service.BasRgvOptService;
import com.zy.asrs.service.BasRgvService;
import com.zy.asrs.utils.NumUtils;
@@ -27,7 +29,10 @@
import lombok.extern.slf4j.Slf4j;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
/**
 * RGV线程
@@ -49,6 +54,7 @@
     */
    private boolean resetFlag2 = false;
    private boolean connectRgv = false;
    private boolean alarmChangeSign = false;
    public RgvThread(RgvSlave slave) {
        this.slave = slave;
@@ -105,7 +111,9 @@
                        break;
                    //工位1写入数据
                    case 2:
                        write((RgvCommand) task.getData());
                        RgvCommand command2 = (RgvCommand) task.getData();
                        rgvOpt(command2);
                        write(command2);
                        break;
                    // 复位
                    case 3:
@@ -119,25 +127,14 @@
                        command.setTaskMode1(RgvTaskModeType.NONE); // 任务模式
                        command.setSourceStaNo1((short)0);     // 源站
                        command.setDestinationStaNo1((short)0);     // 目标站
                        rgvOpt(command);
                        write3(command);
                        break;
                    // 复位
                    case 4:
                        RgvCommand command4 = (RgvCommand) task.getData();
                        if (null == command4) {
                            command4 = new RgvCommand();
                        }
                        command4.setRgvNo(slave.getId()); // RGV编号
                        command4.setTaskNo1((short) 0); // 工作号
                        command4.setAckFinish1((short) 1);  // 任务完成确认位
                        command4.setTaskMode1(RgvTaskModeType.X_MOVE); // 任务模式
                        command4.setSourceStaNo1((short)0);     // 源站
                        command4.setDestinationStaNo1((short)0);     // 目标站
                        write3(command4);
                        break;
                    // 漫游
                    case 5:
                        write5((Long) task.getData());
                        Long aLong = (Long) task.getData();
                        rgvOpt(aLong);
                        write5(aLong);
                        break;
                    default:
                        break;
@@ -251,6 +248,7 @@
            OperateResultExOne<byte[]> result = siemensNet.Read("DB100.0", (short) 20);
            OperateResultExOne<byte[]> resultV = siemensNet.Read("DB20.16", (short) 2);
            OperateResultExOne<byte[]> resultE = siemensNet.Read("DB20.26", (short) 2);
            OperateResultExOne<byte[]> resultError = siemensNet.Read("DB13.0", (short) 13);
            if (result.IsSuccess && resultV.IsSuccess && resultE.IsSuccess) {
                if (null == rgvProtocol) {
                    rgvProtocol = new RgvProtocol();
@@ -267,8 +265,21 @@
                rgvProtocol.setRgvPos(siemensNet.getByteTransform().TransUInt32(result.Content, 16));
                rgvProtocol.setInstantaneousSpeed(Double.valueOf(siemensNet.getByteTransform().TransInt16(resultV.Content, 0)));
                rgvProtocol.setEndStaM(siemensNet.getByteTransform().TransInt16(resultE.Content, 0));
                boolean[] statusAlarmList = siemensNet.getByteTransform().TransBool(resultError.Content, 0, 13);
                int alarmCount = 0;
                List<Integer> alarmList = new ArrayList<>();
                for (boolean alarmSign : statusAlarmList){
                    alarmCount++;
                    if (alarmSign){
                        alarmList.add(alarmCount);
                    }
                }
                alarmChangeSign = new HashSet<>(alarmList).equals(new HashSet<>(rgvProtocol.getAlarmList()));
                rgvProtocol.setAlarmList(alarmList);
//                rgvProtocol.setRgvPos((long)NumUtils.GetRandomIntInRange(1737000));
                OutputQueue.RGV.offer(MessageFormat.format("【{0}】[id:{1}] <<<<< 实时数据更新成功",DateUtils.convert(new Date()), slave.getId()));
                try {
                    // 根据实时信息更新数据库
@@ -280,6 +291,16 @@
                    if (!basRgvService.updateById(rgvProtocol.toSqlModel(basRgv))){
                        log.error("RGV plc数据库更新失败 ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot());
                    }
                    try{
                        if (!alarmChangeSign && !alarmList.isEmpty()){
                            BasRgvErrLogService basRgvErrLogService = SpringUtils.getBean(BasRgvErrLogService.class);
                            BasRgvErrLog basRgvErrLog = new BasRgvErrLog(rgvProtocol.getAlarmList(), rgvProtocol.getTaskNo1(), rgvProtocol.getRgvNo());
                            basRgvErrLogService.insert(basRgvErrLog);
                        }
                    } catch (Exception e){
                        log.error("RGV异常信息保存失败!!");
                    }
                } catch (Exception ignore) {
                }
@@ -300,6 +321,24 @@
    /**
     * 工位1写入数据
     */
    private void rgvOpt(RgvCommand command) {
        try{
            BasRgvOptService basRgvOptService = SpringUtils.getBean(BasRgvOptService.class);
            BasRgvOpt basRgvOpt = new BasRgvOpt(rgvProtocol, command);
            basRgvOptService.insert(basRgvOpt);
        }catch (Exception e){
            log.error("RGV写入命令保存失败!!");
        }
    }
    private void rgvOpt(Long command) {
        try{
            BasRgvOptService basRgvOptService = SpringUtils.getBean(BasRgvOptService.class);
            BasRgvOpt basRgvOpt = new BasRgvOpt(rgvProtocol, command);
            basRgvOptService.insert(basRgvOpt);
        }catch (Exception e){
            log.error("RGV写入命令保存失败!!");
        }
    }
    private boolean write(RgvCommand command) throws InterruptedException {
        if (null == command) {
            log.error("RGV写入命令为空");
src/main/webapp/views/index.html
@@ -100,9 +100,35 @@
            z-index: 1000; /* 确保在其他元素之上 */
        }
        .task-bar-left1 {
            position: fixed;
            top: 8%;
            /*transform: translateY(-50%);*/
            width: 25%; /* 设置宽度 */
            background-color: rgba(255, 255, 255, 0); /* 半透明背景 */
            border-radius: 5px;
            padding: 10px;
            box-shadow: 0 0 10px rgba(0, 0, 0, 0);
            z-index: 1000; /* 确保在其他元素之上 */
        }
        .task-bar-right {
            position: fixed;
            top: 1%;
            /*transform: translateY(-50%);*/
            width: 25%; /* 设置宽度 */
            background-color: rgba(255, 255, 255, 0); /* 半透明背景 */
            border-radius: 5px;
            padding: 10px;
            box-shadow: 0 0 10px rgba(0, 0, 0, 0);
            z-index: 1000; /* 确保在其他元素之上 */
        }
        .task-bar-right1 {
            position: fixed;
            top: 5%;
            /*transform: translateY(-50%);*/
            width: 25%; /* 设置宽度 */
            background-color: rgba(255, 255, 255, 0); /* 半透明背景 */
@@ -317,6 +343,50 @@
                </el-table>
            </div>
        </div>
        <div class="task-bar-left1 left-task-bar" >
            <div>
                <el-tooltip :content="'Switch value: ' + valueLeft1" placement="top">
                    <el-switch
                            v-model="valueLeft1"
                            active-color="#13ce66"
                            inactive-color="#ff4949"
                            active-value="100"
                            inactive-value="0">
                    </el-switch>
                </el-tooltip>
            </div>
            <div v-if="valueLeft1 === '100' " class="task-bar-div1">
                <el-table
                        :data="tableDataLeft1"
                        style="width: 100%"
                        :row-class-name="tableRowClassName">
                    <el-table-column
                            prop="wrkNo1"
                            label="工作号">
                    </el-table-column>
                    <el-table-column
                            prop="rgvNo"
                            label="RGV号">
                    </el-table-column>
                    <el-table-column
                            prop="sendTime"
                            label="下发时间">
                    </el-table-column>
                    <el-table-column
                            prop="mode"
                            label="类型">
                    </el-table-column>
                    <el-table-column
                            prop="sourceSta"
                            label="起点">
                    </el-table-column>
                    <el-table-column
                            prop="posSta"
                            label="终点">
                    </el-table-column>
                </el-table>
            </div>
        </div>
        <!-- Right Task Bar -->
        <div class="task-bar-right right-task-bar">
@@ -372,6 +442,38 @@
                </el-table>
            </div>
        </div>
        <div class="task-bar-right1 right-task-bar">
            <div>
                <el-tooltip :content="'Switch value: ' + valueRight1" placement="top">
                    <el-switch
                            v-model="valueRight1"
                            active-color="#13ce66"
                            inactive-color="#ff4949"
                            active-value="100"
                            inactive-value="0">
                    </el-switch>
                </el-tooltip>
            </div>
            <div v-if="valueRight1 === '100' " class="task-bar-div1">
                <el-table
                        :data="tableDataRight1"
                        style="width: 100%"
                        :row-class-name="tableRowClassName">
                    <el-table-column
                            prop="rgvNo"
                            label="小车号">
                    </el-table-column>
                    <el-table-column
                            prop="error"
                            label="异常">
                    </el-table-column>
                    <el-table-column
                            prop="createTime$"
                            label="记录日期">
                    </el-table-column>
                </el-table>
            </div>
        </div>
    </div>
    <script>
@@ -380,7 +482,9 @@
            data: {
                activeNames: ['1'],
                valueLeft: '0',
                valueLeft1: '0',
                valueRight: '0',
                valueRight1: '0',
                licenseDay: '已过期',
                licenseDayI: 100,
                valueSystem: false,
@@ -388,7 +492,9 @@
                tableDataDev: [],
                energyGatheringRing: [],
                tableDataLeft: [],
                tableDataLeft1: [],
                tableDataRight: [],
                tableDataRight1: [],
                devpPos1:[
                    {dev_no: 116,pos:633980},
                    {dev_no: 117,pos:604043},
@@ -443,7 +549,9 @@
                    this.getTableDataDev()
                    this.getTableDataTrack()
                    this.getTableDataLeft()
                    this.getTableDataLeft1()
                    this.getTableDataRight()
                    this.getTableDataRight1()
                    this.getValueSystem()
                    this.getLicenseDays()
@@ -452,7 +560,9 @@
                        this.getTableDataDev()
                        this.getTableDataTrack()
                        this.getTableDataLeft()
                        this.getTableDataLeft1()
                        this.getTableDataRight()
                        this.getTableDataRight1()
                        this.getValueSystem()
                        this.getLicenseDays()
@@ -483,6 +593,18 @@
                        if (val.length >= 1){
                            this.handleChangeValueRight(1)
                        }
                    }
                },
                handleChange1(val) {
                    console.log(val);
                    if (val.length === 0){
                        valueRight1 = '0';
                    } else {
                        console.log("2222"+val);
                        if (val.length >= 1){
                            this.handleChangeValueRight1(1)
                        }
                    }
                },
@@ -555,6 +677,22 @@
                            valueRight = '100';
                        default:
                            valueRight = '0';
                    }
                },
                handleChangeValueRight1(val) {
                    console.log("33333"+val);
                    switch (val){
                        case 1:
                            valueRight1 = '100';
                        case 2:
                            valueRight1 = '100';
                        case 3:
                            valueRight1 = '100';
                        case 4:
                            valueRight1 = '100';
                        default:
                            valueRight1 = '0';
                    }
                },
                tableRowClassName({row, rowIndex}) {
@@ -640,6 +778,22 @@
                        }
                    });
                },
                getTableDataLeft1() {
                    let that = this;
                    $.ajax({
                        url: baseUrl + "/rgv/ring/through/task/wrk/mast/position/data/v1",
                        headers: {
                            'token': localStorage.getItem('token')
                        },
                        data: {},
                        dataType: 'json',
                        contentType: 'application/json;charset=UTF-8',
                        method: 'post',
                        success: function (res) {
                            that.tableDataLeft1 = res.data
                        }
                    });
                },
                getTableDataRight() {
                    let that = this;
                    $.ajax({
@@ -656,6 +810,22 @@
                        }
                    });
                },
                getTableDataRight1() {
                    let that = this;
                    $.ajax({
                        url: baseUrl + "/rgv/task/rgv/circular/shuttle/mast/position/data/v1",
                        headers: {
                            'token': localStorage.getItem('token')
                        },
                        data: {},
                        dataType: 'json',
                        contentType: 'application/json;charset=UTF-8',
                        method: 'post',
                        success: function (res) {
                            that.tableDataRight1 = res.data
                        }
                    });
                },
                getTableDataRgv() {
                    let that = this;
                    // that.tableDataRgv = busPsto