Junjie
2023-04-10 d91105438a87e013c6de439af89e49f055827b65
四向穿梭车异常记录
1个文件已修改
5个文件已添加
498 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/entity/BasShuttleErrLog.java 283 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/BasShuttleErrLogMapper.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/BasShuttleErrLogService.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/BasShuttleErrLogServiceImpl.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java 123 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/BasShuttleErrLogMapper.xml 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/BasShuttleErrLog.java
New file
@@ -0,0 +1,283 @@
package com.zy.asrs.entity;
import com.core.common.Cools;import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.enums.IdType;
import com.baomidou.mybatisplus.annotations.TableField;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.springframework.format.annotation.DateTimeFormat;
import com.core.common.SpringUtils;
import com.zy.system.service.UserService;
import com.zy.system.entity.User;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import com.baomidou.mybatisplus.annotations.TableName;
import java.io.Serializable;
@Data
@TableName("asr_bas_shuttle_err_log")
public class BasShuttleErrLog implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty(value= "")
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
    /**
     * 编号
     */
    @ApiModelProperty(value= "编号")
    private String uuid;
    /**
     * 工作号
     */
    @ApiModelProperty(value= "工作号")
    @TableField("wrk_no")
    private Integer wrkNo;
    /**
     * 发生时间
     */
    @ApiModelProperty(value= "发生时间")
    @TableField("start_time")
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    private Date startTime;
    /**
     * 结束时间
     */
    @ApiModelProperty(value= "结束时间")
    @TableField("end_time")
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    private Date endTime;
    /**
     * 工作状态
     */
    @ApiModelProperty(value= "工作状态")
    @TableField("wrk_sts")
    private Long wrkSts;
    /**
     * 入出库类型
     */
    @ApiModelProperty(value= "入出库类型")
    @TableField("io_type")
    private Integer ioType;
    /**
     * 穿梭车
     */
    @ApiModelProperty(value= "穿梭车")
    @TableField("shuttle_no")
    private Integer shuttleNo;
    /**
     * plc
     */
    @ApiModelProperty(value= "plc")
    @TableField("plc_no")
    private Integer plcNo;
    /**
     * 目标库位
     */
    @ApiModelProperty(value= "目标库位")
    @TableField("loc_no")
    private String locNo;
    /**
     * 目标站
     */
    @ApiModelProperty(value= "目标站")
    @TableField("sta_no")
    private Integer staNo;
    /**
     * 源站
     */
    @ApiModelProperty(value= "源站")
    @TableField("source_sta_no")
    private Integer sourceStaNo;
    /**
     * 源库位
     */
    @ApiModelProperty(value= "源库位")
    @TableField("source_loc_no")
    private String sourceLocNo;
    /**
     * 条码
     */
    @ApiModelProperty(value= "条码")
    private String barcode;
    /**
     * 异常码
     */
    @ApiModelProperty(value= "异常码")
    @TableField("err_code")
    private Integer errCode;
    /**
     * 异常
     */
    @ApiModelProperty(value= "异常")
    private String error;
    /**
     * 异常情况 1: 未处理  2: 已修复
     */
    @ApiModelProperty(value= "异常情况 1: 未处理  2: 已修复  ")
    private Integer status;
    /**
     * 添加时间
     */
    @ApiModelProperty(value= "添加时间")
    @TableField("create_time")
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    private Date createTime;
    /**
     * 添加人员
     */
    @ApiModelProperty(value= "添加人员")
    @TableField("create_by")
    private Long createBy;
    /**
     * 修改时间
     */
    @ApiModelProperty(value= "修改时间")
    @TableField("update_time")
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    private Date updateTime;
    /**
     * 修改人员
     */
    @ApiModelProperty(value= "修改人员")
    @TableField("update_by")
    private Long updateBy;
    /**
     * 备注
     */
    @ApiModelProperty(value= "备注")
    private String memo;
    public BasShuttleErrLog() {}
    public BasShuttleErrLog(String uuid,Integer wrkNo,Date startTime,Date endTime,Long wrkSts,Integer ioType,Integer shuttleNo,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;
        this.startTime = startTime;
        this.endTime = endTime;
        this.wrkSts = wrkSts;
        this.ioType = ioType;
        this.shuttleNo = shuttleNo;
        this.plcNo = plcNo;
        this.locNo = locNo;
        this.staNo = staNo;
        this.sourceStaNo = sourceStaNo;
        this.sourceLocNo = sourceLocNo;
        this.barcode = barcode;
        this.errCode = errCode;
        this.error = error;
        this.status = status;
        this.createTime = createTime;
        this.createBy = createBy;
        this.updateTime = updateTime;
        this.updateBy = updateBy;
        this.memo = memo;
    }
//    BasShuttleErrLog basShuttleErrLog = new BasShuttleErrLog(
//            null,    // 编号
//            null,    // 工作号
//            null,    // 发生时间
//            null,    // 结束时间
//            null,    // 工作状态
//            null,    // 入出库类型
//            null,    // 穿梭车
//            null,    // plc
//            null,    // 目标库位
//            null,    // 目标站
//            null,    // 源站
//            null,    // 源库位
//            null,    // 条码
//            null,    // 异常码
//            null,    // 异常
//            null,    // 异常情况
//            null,    // 添加时间
//            null,    // 添加人员
//            null,    // 修改时间
//            null,    // 修改人员
//            null    // 备注
//    );
    public String getStartTime$(){
        if (Cools.isEmpty(this.startTime)){
            return "";
        }
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.startTime);
    }
    public String getEndTime$(){
        if (Cools.isEmpty(this.endTime)){
            return "";
        }
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.endTime);
    }
    public String getStatus$(){
        if (null == this.status){ return null; }
        switch (this.status){
            case 1:
                return "未处理";
            case 2:
                return "已修复";
            default:
                return String.valueOf(this.status);
        }
    }
    public String getCreateTime$(){
        if (Cools.isEmpty(this.createTime)){
            return "";
        }
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.createTime);
    }
    public String getCreateBy$(){
        UserService service = SpringUtils.getBean(UserService.class);
        User user = service.selectById(this.createBy);
        if (!Cools.isEmpty(user)){
            return String.valueOf(user.getUsername());
        }
        return null;
    }
    public String getUpdateTime$(){
        if (Cools.isEmpty(this.updateTime)){
            return "";
        }
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.updateTime);
    }
    public String getUpdateBy$(){
        UserService service = SpringUtils.getBean(UserService.class);
        User user = service.selectById(this.updateBy);
        if (!Cools.isEmpty(user)){
            return String.valueOf(user.getUsername());
        }
        return null;
    }
}
src/main/java/com/zy/asrs/mapper/BasShuttleErrLogMapper.java
New file
@@ -0,0 +1,12 @@
package com.zy.asrs.mapper;
import com.zy.asrs.entity.BasShuttleErrLog;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
@Mapper
@Repository
public interface BasShuttleErrLogMapper extends BaseMapper<BasShuttleErrLog> {
}
src/main/java/com/zy/asrs/service/BasShuttleErrLogService.java
New file
@@ -0,0 +1,12 @@
package com.zy.asrs.service;
import com.zy.asrs.entity.BasShuttleErrLog;
import com.baomidou.mybatisplus.service.IService;
public interface BasShuttleErrLogService extends IService<BasShuttleErrLog> {
    BasShuttleErrLog findLatestByTaskNo(Integer crnNo, Integer taskNo);
    BasShuttleErrLog findLatest(Integer crnNo);
}
src/main/java/com/zy/asrs/service/impl/BasShuttleErrLogServiceImpl.java
New file
@@ -0,0 +1,36 @@
package com.zy.asrs.service.impl;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.zy.asrs.entity.BasErrLog;
import com.zy.asrs.mapper.BasShuttleErrLogMapper;
import com.zy.asrs.entity.BasShuttleErrLog;
import com.zy.asrs.service.BasShuttleErrLogService;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import java.util.List;
@Service("basShuttleErrLogService")
public class BasShuttleErrLogServiceImpl extends ServiceImpl<BasShuttleErrLogMapper, BasShuttleErrLog> implements BasShuttleErrLogService {
    @Override
    public BasShuttleErrLog findLatestByTaskNo(Integer shuttleNo, Integer taskNo) {
        List<BasShuttleErrLog> basShuttleErrLogs = this.baseMapper.selectList(new EntityWrapper<BasShuttleErrLog>().eq("shuttle_no", shuttleNo).eq("wrk_no", taskNo).orderBy("start_time", false));
        if (basShuttleErrLogs == null || basShuttleErrLogs.size() == 0) {
            return null;
        } else {
            return basShuttleErrLogs.get(0);
        }
    }
    @Override
    public BasShuttleErrLog findLatest(Integer shuttleNo) {
        List<BasShuttleErrLog> basShuttleErrLogs = this.baseMapper.selectList(new EntityWrapper<BasShuttleErrLog>().eq("shuttle_no", shuttleNo).orderBy("start_time", false));
        if (basShuttleErrLogs == null || basShuttleErrLogs.size() == 0) {
            return null;
        } else {
            return basShuttleErrLogs.get(0);
        }
    }
}
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -68,6 +68,10 @@
    @Autowired
    private BasSteErrLogService basSteErrLogService;
    @Autowired
    private BasShuttleErrLogService basShuttleErrLogService;
    @Autowired
    private BasShuttleErrService basShuttleErrService;
    @Autowired
    private BasCrnErrorMapper basCrnErrorMapper;
    @Autowired
    private BasSteService basSteService;
@@ -2918,6 +2922,7 @@
     */
    public void recErr() {
        try {
            this.recShuttleErr();
            this.recCrnErr();
            this.recSteErr();
        } catch (Exception e) {
@@ -2926,6 +2931,124 @@
    }
    /**
     * 四向穿梭车异常信息记录
     */
    private void recShuttleErr() {
        Date now = new Date();
        for (ShuttleSlave shuttleSlave : slaveProperties.getShuttle()) {
            // 获取堆垛机信息
            ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttleSlave.getId());
            if (shuttleThread == null) {
                continue;
            }
            ShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
            if (shuttleProtocol == null) {
                continue;
            }
            if (shuttleProtocol.getTaskNo() != 0) {
                //有任务
                BasShuttleErrLog latest = basShuttleErrLogService.findLatestByTaskNo(shuttleSlave.getId(), shuttleProtocol.getTaskNo().intValue());
                // 有异常
                if (latest == null) {
                    if (shuttleProtocol.getStatusErrorCode() != null && shuttleProtocol.getStatusErrorCode() > 0) {
                        WrkMast wrkMast = wrkMastMapper.selectById(shuttleProtocol.getTaskNo());
                        if (wrkMast == null) {
                            continue;
                        }
                        BasShuttleErr basShuttleErr = basShuttleErrService.queryByCode(shuttleProtocol.getStatusErrorCode().intValue());
                        String errName = basShuttleErr==null? "未知异常":basShuttleErr.getErrName();
                        BasShuttleErrLog basShuttleErrLog = new BasShuttleErrLog(
                                null,    // 编号
                                wrkMast.getWrkNo(),    // 工作号
                                now,    // 发生时间
                                null,    // 结束时间
                                wrkMast.getWrkSts(),    // 工作状态
                                wrkMast.getIoType(),    // 入出库类型
                                shuttleSlave.getId(),    // 四向穿梭车
                                null,    // plc
                                wrkMast.getLocNo(),    // 目标库位
                                wrkMast.getStaNo(),    // 目标站
                                wrkMast.getSourceStaNo(),    // 源站
                                wrkMast.getSourceLocNo(),    // 源库位
                                wrkMast.getBarcode(),    // 条码
                                (int) shuttleProtocol.getStatusErrorCode(),    // 异常码
                                errName,    // 异常
                                1,    // 异常情况
                                now,    // 添加时间
                                null,    // 添加人员
                                now,    // 修改时间
                                null,    // 修改人员
                                "任务中异常"    // 备注
                        );
                        if (!basShuttleErrLogService.insert(basShuttleErrLog)) {
                            News.error("四向穿梭车plc异常记录失败 ===>> [id:{}] [error:{}]", shuttleSlave.getId(), errName);
                        }
                    }
                } else {
                    // 异常修复
                    if (shuttleProtocol.getStatusErrorCode() == null || shuttleProtocol.getStatusErrorCode() == 0) {
                        latest.setEndTime(now);
                        latest.setUpdateTime(now);
                        latest.setStatus(2);
                        if (!basShuttleErrLogService.updateById(latest)) {
                            News.error("四向穿梭车plc异常记录修复失败 ===>> [id:{}] [errLogId:{}]", shuttleSlave.getId(), latest.getId());
                        }
                    }
                }
            }else {
                //无任务
                BasShuttleErrLog latest = basShuttleErrLogService.findLatest(shuttleSlave.getId());
                // 有异常
                if (shuttleProtocol.getStatusErrorCode() != null && shuttleProtocol.getStatusErrorCode() > 0) {
                    // 记录新异常
                    if (latest == null || (latest.getErrCode() != shuttleProtocol.getStatusErrorCode().intValue())) {
                        BasShuttleErr basShuttleErr = basShuttleErrService.queryByCode(shuttleProtocol.getStatusErrorCode().intValue());
                        String errName = basShuttleErr==null? "未知异常":basShuttleErr.getErrName();
                        BasShuttleErrLog basShuttleErrLog = new BasShuttleErrLog(
                                null,    // 编号
                                null,    // 工作号
                                now,    // 发生时间
                                null,    // 结束时间
                                null,    // 工作状态
                                null,    // 入出库类型
                                shuttleSlave.getId(),    // 四向穿梭车
                                null,    // plc
                                null,    // 目标库位
                                null,    // 目标站
                                null,    // 源站
                                null,    // 源库位
                                null,    // 条码
                                (int)shuttleProtocol.getStatusErrorCode(),    // 异常码
                                errName,    // 异常
                                1,    // 异常情况
                                now,    // 添加时间
                                null,    // 添加人员
                                now,    // 修改时间
                                null,    // 修改人员
                                "无任务异常"    // 备注
                        );
                        if (!basShuttleErrLogService.insert(basShuttleErrLog)) {
                            News.error("四向穿梭车plc异常记录失败 ===>> [id:{}] [error:{}]", shuttleSlave.getId(), errName);
                        }
                    }
                    // 无异常
                } else {
                    // 异常修复
                    if (latest != null && latest.getStatus() == 1) {
                        latest.setEndTime(now);
                        latest.setUpdateTime(now);
                        latest.setStatus(2);
                        if (!basShuttleErrLogService.updateById(latest)) {
                            News.error("四向穿梭车plc异常记录修复失败 ===>> [id:{}] [errLogId:{}]", shuttleSlave.getId(), latest.getId());
                        }
                    }
                }
            }
        }
    }
    /**
     * 堆垛机异常信息记录
     */
    private void recCrnErr(){
src/main/resources/mapper/BasShuttleErrLogMapper.xml
New file
@@ -0,0 +1,32 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zy.asrs.mapper.BasShuttleErrLogMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.zy.asrs.entity.BasShuttleErrLog">
        <id column="id" property="id" />
        <result column="uuid" property="uuid" />
        <result column="wrk_no" property="wrkNo" />
        <result column="start_time" property="startTime" />
        <result column="end_time" property="endTime" />
        <result column="wrk_sts" property="wrkSts" />
        <result column="io_type" property="ioType" />
        <result column="ste_no" property="steNo" />
        <result column="plc_no" property="plcNo" />
        <result column="loc_no" property="locNo" />
        <result column="sta_no" property="staNo" />
        <result column="source_sta_no" property="sourceStaNo" />
        <result column="source_loc_no" property="sourceLocNo" />
        <result column="barcode" property="barcode" />
        <result column="err_code" property="errCode" />
        <result column="error" property="error" />
        <result column="status" property="status" />
        <result column="create_time" property="createTime" />
        <result column="create_by" property="createBy" />
        <result column="update_time" property="updateTime" />
        <result column="update_by" property="updateBy" />
        <result column="memo" property="memo" />
    </resultMap>
</mapper>