自动化立体仓库 - WCS系统
#
tqs
2022-11-29 b9be3396a828d2fab25f92c5032b380c92be2049
#
11个文件已添加
1个文件已修改
786 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/entity/BasRgv.java 209 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/BasRgvMapper.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/BasRgvService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/BasRgvServiceImpl.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/CodeBuilder.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/enums/RgvModeType.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/enums/RgvStatusType.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/enums/RgvTaskModeType.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/model/RgvSlave.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/model/command/RgvCommand.java 129 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/model/protocol/RgvProtocol.java 197 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/BasRgvMapper.xml 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/BasRgv.java
New file
@@ -0,0 +1,209 @@
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 com.core.common.SpringUtils;
import com.zy.system.service.UserService;
import com.zy.system.entity.User;
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 java.text.SimpleDateFormat;
import java.util.Date;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import com.baomidou.mybatisplus.annotations.TableName;
import java.io.Serializable;
@Data
@TableName("asr_bas_rgv")
public class BasRgv implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * RGV编号
     */
    @ApiModelProperty(value= "RGV编号")
    @TableId(value = "rgv_no", type = IdType.INPUT)
    @TableField("rgv_no")
    private Integer rgvNo;
    /**
     * 可入
     */
    @ApiModelProperty(value= "可入")
    @TableField("in_enable")
    private String inEnable;
    /**
     * 可出
     */
    @ApiModelProperty(value= "可出")
    @TableField("out_enable")
    private String outEnable;
    /**
     * 作业态
     */
    @ApiModelProperty(value= "作业态")
    @TableField("rgv_sts")
    private Integer rgvSts;
    /**
     * 任务号
     */
    @ApiModelProperty(value= "任务号")
    @TableField("wrk_no1")
    private Integer wrkNo1;
    /**
     * 堆垛机号
     */
    @ApiModelProperty(value= "堆垛机号")
    @TableField("wrk_no2")
    private Integer wrkNo2;
    /**
     * 错误码
     */
    @ApiModelProperty(value= "错误码")
    @TableField("rgv_err")
    private Long rgvErr;
    /**
     * 标记
     */
    @ApiModelProperty(value= "标记")
    @TableField("pak_mk")
    private String pakMk;
    /**
     * 状态 1: 正常  0: 禁用
     */
    @ApiModelProperty(value= "状态 1: 正常  0: 禁用  ")
    private Integer status;
    /**
     * 添加人员
     */
    @ApiModelProperty(value= "添加人员")
    @TableField("create_by")
    private Long createBy;
    /**
     * 添加时间
     */
    @ApiModelProperty(value= "添加时间")
    @TableField("create_time")
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    private Date createTime;
    /**
     * 修改人员
     */
    @ApiModelProperty(value= "修改人员")
    @TableField("update_by")
    private Long updateBy;
    /**
     * 修改时间
     */
    @ApiModelProperty(value= "修改时间")
    @TableField("update_time")
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    private Date updateTime;
    /**
     * 备注
     */
    @ApiModelProperty(value= "备注")
    private String memo;
    public BasRgv() {}
    public BasRgv(Integer rgvNo,String inEnable,String outEnable,Integer rgvSts,Integer wrkNo1,Integer wrkNo2,Long rgvErr,String pakMk,Integer status,Long createBy,Date createTime,Long updateBy,Date updateTime,String memo) {
        this.rgvNo = rgvNo;
        this.inEnable = inEnable;
        this.outEnable = outEnable;
        this.rgvSts = rgvSts;
        this.wrkNo1 = wrkNo1;
        this.wrkNo2 = wrkNo2;
        this.rgvErr = rgvErr;
        this.pakMk = pakMk;
        this.status = status;
        this.createBy = createBy;
        this.createTime = createTime;
        this.updateBy = updateBy;
        this.updateTime = updateTime;
        this.memo = memo;
    }
//    BasRgv basRgv = new BasRgv(
//            null,    // RGV编号[非空]
//            null,    // 可入
//            null,    // 可出
//            null,    // 作业态
//            null,    // 任务号
//            null,    // 堆垛机号
//            null,    // 错误码
//            null,    // 标记
//            null,    // 状态
//            null,    // 添加人员
//            null,    // 添加时间
//            null,    // 修改人员
//            null,    // 修改时间
//            null    // 备注
//    );
    public String getStatus$(){
        if (null == this.status){ return null; }
        switch (this.status){
            case 1:
                return "正常";
            case 0:
                return "禁用";
            default:
                return String.valueOf(this.status);
        }
    }
    public String getCreateBy$(){
        UserService service = SpringUtils.getBean(UserService.class);
        User user = service.selectById(this.createBy);
        if (!Cools.isEmpty(user)){
            return String.valueOf(user.getNickname());
        }
        return null;
    }
    public String getCreateTime$(){
        if (Cools.isEmpty(this.createTime)){
            return "";
        }
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.createTime);
    }
    public String getUpdateBy$(){
        UserService service = SpringUtils.getBean(UserService.class);
        User user = service.selectById(this.updateBy);
        if (!Cools.isEmpty(user)){
            return String.valueOf(user.getNickname());
        }
        return null;
    }
    public String getUpdateTime$(){
        if (Cools.isEmpty(this.updateTime)){
            return "";
        }
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.updateTime);
    }
}
src/main/java/com/zy/asrs/mapper/BasRgvMapper.java
New file
@@ -0,0 +1,12 @@
package com.zy.asrs.mapper;
import com.zy.asrs.entity.BasRgv;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
@Mapper
@Repository
public interface BasRgvMapper extends BaseMapper<BasRgv> {
}
src/main/java/com/zy/asrs/service/BasRgvService.java
New file
@@ -0,0 +1,8 @@
package com.zy.asrs.service;
import com.zy.asrs.entity.BasRgv;
import com.baomidou.mybatisplus.service.IService;
public interface BasRgvService extends IService<BasRgv> {
}
src/main/java/com/zy/asrs/service/impl/BasRgvServiceImpl.java
New file
@@ -0,0 +1,12 @@
package com.zy.asrs.service.impl;
import com.zy.asrs.mapper.BasRgvMapper;
import com.zy.asrs.entity.BasRgv;
import com.zy.asrs.service.BasRgvService;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
@Service("basRgvService")
public class BasRgvServiceImpl extends ServiceImpl<BasRgvMapper, BasRgv> implements BasRgvService {
}
src/main/java/com/zy/common/CodeBuilder.java
@@ -1,6 +1,7 @@
package com.zy.common;
import com.core.generators.CoolGenerator;
import com.core.generators.constant.SqlOsType;
/**
 * Created by vincent on 2019-06-04
@@ -15,11 +16,18 @@
//        generator.password="xltys1995";
//        generator.table="sys_host";
        // sqlserver
        generator.url="192.168.3.208:1433;databasename=cool";
        generator.sqlOsType = SqlOsType.SQL_SERVER;
        generator.url="localhost:1433;databasename=xjhsasrs";
        generator.username="sa";
        generator.password="sa@123";
        generator.table="asr_wrk_detl";
        generator.table="asr_bas_rgv";
        generator.packagePath="com.zy.asrs";
        generator.controller = false;
        generator.html = false;
        generator.js = false;
        generator.htmlDetail = false;
        generator.sql = false;
        generator.build();
    }
src/main/java/com/zy/core/enums/RgvModeType.java
New file
@@ -0,0 +1,42 @@
package com.zy.core.enums;
public enum RgvModeType {
    NONE(-1, "离线"),
    STOP(0, "维修"),
    HAND(1, "手动"),
    HALF_AUTO(2, "半自动"),
    AUTO(3, "自动"),
    ;
    public Integer id;
    public String desc;
    RgvModeType(Integer id, String desc) {
        this.id = id;
        this.desc = desc;
    }
    public static RgvModeType get(Short id) {
        if (null == id) {
            return null;
        }
        for (RgvModeType type : RgvModeType.values()) {
            if (type.id.equals(id.intValue())) {
                return type;
            }
        }
        return null;
    }
    public static RgvModeType get(RgvModeType type) {
        if (null == type) {
            return null;
        }
        for (RgvModeType rgvModeType : RgvModeType.values()) {
            if (rgvModeType == type) {
                return rgvModeType;
            }
        }
        return null;
    }
}
src/main/java/com/zy/core/enums/RgvStatusType.java
New file
@@ -0,0 +1,44 @@
package com.zy.core.enums;
public enum RgvStatusType {
    NONE(-1, "离线"),
    IDLE(0, "空闲"),
    WORKING(1, "作业中"),
    SOS(2, "报警"),
    FETCHING(11, "取货中"),
    PUTTING(12, "放货中"),
    WAITING(10, "任务完成等待WCS确认"),
    ;
    public Integer id;
    public String desc;
    RgvStatusType(Integer id, String desc) {
        this.id = id;
        this.desc = desc;
    }
    public static RgvStatusType get(Short id) {
        if (null == id) {
            return null;
        }
        for (RgvStatusType type : RgvStatusType.values()) {
            if (type.id.equals(id.intValue())) {
                return type;
            }
        }
        return NONE;
    }
    public static RgvStatusType get(RgvStatusType type) {
        if (null == type) {
            return null;
        }
        for (RgvStatusType rgvStatusType : RgvStatusType.values()) {
            if (rgvStatusType == type) {
                return rgvStatusType;
            }
        }
        return null;
    }
}
src/main/java/com/zy/core/enums/RgvTaskModeType.java
New file
@@ -0,0 +1,46 @@
package com.zy.core.enums;
public enum RgvTaskModeType {
    NONE(0),    // 无
    FETCH(1),    // 取货
    PUT(2),    // 放货
    FETCH_PUT(3),    // 库位移转
//    X_MOVE(4),    // 站位移转
//    Y_MOVE(5),    // 站位移转
//    XY_MOVE(6),    // 站位移转
//    GO_ORIGIN(7),    // 回原点
//    BACK_ORIGIN(8),      // 回反原点
//    CLEAR(9),       // 清错
    ;
    public Integer id;
    RgvTaskModeType(Integer id) {
        this.id = id;
    }
    public static RgvTaskModeType get(Short id) {
        if (null == id) {
            return null;
        }
        for (RgvTaskModeType type : RgvTaskModeType.values()) {
            if (type.id.equals(id.intValue())) {
                return type;
            }
        }
        return null;
    }
    public static RgvTaskModeType get(RgvTaskModeType type) {
        if (null == type) {
            return null;
        }
        for (RgvTaskModeType rgvTaskModeType : RgvTaskModeType.values()) {
            if (rgvTaskModeType == type) {
                return rgvTaskModeType;
            }
        }
        return null;
    }
}
src/main/java/com/zy/core/model/RgvSlave.java
New file
@@ -0,0 +1,51 @@
package com.zy.core.model;
import com.zy.core.Slave;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.ArrayList;
import java.util.List;
/**
 * Created by vincent on 2020/8/10
 */
@EqualsAndHashCode(callSuper = true)
@Data
public class RgvSlave extends Slave {
    private Integer rack;
    private Integer slot;
    private Integer offset;
    private Boolean demo;
    // 堆垛机入库站点
    private List<CrnStn> rgvInStn = new ArrayList<>();
    // 堆垛机出库站点
    private List<CrnStn> rgvOutStn = new ArrayList<>();
    @Data
    public static class CrnStn {
        // 输送线plc编号
        private Integer devpPlcId;
        // 堆垛机站点编号
        private Integer staNo;
        // 排
        private Integer row;
        // 列
        private Integer bay;
        // 层
        private Integer lev;
    }
}
src/main/java/com/zy/core/model/command/RgvCommand.java
New file
@@ -0,0 +1,129 @@
package com.zy.core.model.command;
import com.alibaba.fastjson.annotation.JSONField;
import com.zy.core.enums.RgvTaskModeType;
import lombok.Data;
import java.util.Calendar;
import java.util.Date;
/**
 * 堆垛机命令报文
 * Created by vincent on 2020/8/11
 */
@Data
public class RgvCommand {
    // Rgv编号
    private Integer rgvNo = 0;
    // 工位1任务完成确认位
    private Short ackFinish1 = 0;
    // 工位1任务号
    private Short taskNo1 = 0;
    /**
     * 任务模式:
     * 0 = 无
     * 1 = 取货
     * 2 = 放货
     * 3 = 取放货
     */
    private Short taskMode1 = 0;
    @JSONField(serialize = false)
    private RgvTaskModeType taskModeType1;
    /*
    工位1源站
     */
    private Short sourceStaNo1 = 0;
    /*
    工位1目标站
     */
    private Short destinationStaNo1 = 0;
    //////////////////////     工位2定义   //////////////////////////////////////////////////
    // 工位1任务完成确认位
    private Short ackFinish2 = 0;
    // 工位2任务号
    private Short taskNo2 = 0;
    /**
     * 任务模式:
     * 0 = 无
     * 1 = 取货
     * 2 = 放货
     * 3 = 取放货
     */
    private Short taskMode2 = 0;
    @JSONField(serialize = false)
    private RgvTaskModeType taskModeType2;
    /*
    工位1源站
     */
    private Short sourceStaNo2 = 0;
    /*
    工位1目标站
     */
    private Short destinationStaNo2 = 0;
    ///////////////////////////////////////////////////////////////////////////////////////
    /**
     * 任务模式:
     * 0 = 未确认
     * 1 = 工位1任务确认
     * 2 = 工位2任务确认
     * 3 = 工位1、2任务同时确认
     */
    private Short command = 0;
    public void setTaskMode1(Short taskMode1){
        this.taskMode1 = taskMode1;
        this.taskModeType1 = RgvTaskModeType.get(taskModeType1);
    }
    public void setTaskMode1(RgvTaskModeType type1) {
        this.taskModeType1 = type1;
        this.taskMode1 = RgvTaskModeType.get(type1).id.shortValue();
    }
    public void setTaskMode2(Short taskMode2){
        this.taskMode2 = taskMode2;
        this.taskModeType2 = RgvTaskModeType.get(taskModeType2);
    }
    public void setTaskMode2(RgvTaskModeType type2) {
        this.taskModeType2 = type2;
        this.taskMode2 = RgvTaskModeType.get(type2).id.shortValue();
    }
    public static void main(String[] args) {
        Date date = new Date();
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        System.out.println(cal.get(Calendar.YEAR));
        //默认从0-11
        System.out.println(cal.get(Calendar.MONTH)+1);
        System.out.println(cal.get(Calendar.DATE));
        int hour = cal.get(Calendar.HOUR_OF_DAY);
        System.out.println("时");
        System.out.println(hour);
        int minute = cal.get(Calendar.MINUTE);
        System.out.println("分");
        System.out.println(minute);
        int second = cal.get(Calendar.SECOND);
        System.out.println("秒");
        System.out.println(second);
        int mm = cal.get(Calendar.DAY_OF_WEEK) - 1; // 星期:0(日)~6(六)
        System.out.println("礼拜");
        System.out.println(mm);
    }
}
src/main/java/com/zy/core/model/protocol/RgvProtocol.java
New file
@@ -0,0 +1,197 @@
package com.zy.core.model.protocol;
import com.zy.asrs.entity.BasCrnp;
import com.zy.asrs.entity.BasRgv;
import com.zy.core.enums.*;
import lombok.Data;
/**
 * Created by vincent on 2020/8/7
 */
@Data
public class RgvProtocol {
    private Integer RgvNo;
    /**
     * 1 = 手动模式
     * 2 = 自动模式
     * 3 = 电脑模式
     */
    public Short mode;
    public RgvModeType modeType;
    /**
     * RGV当前状态
     * 0:空闲,无任务
     * 1:作业中
     * 2:报警
     */
    public Short status;
    /**
     * 状态枚举
     */
    public RgvStatusType statusType;
    /**
     * 工位1任务号
     */
    public Short taskNo1 = 0;
    /**
     * RGV工位1当前状态
     * 0:空闲,无任务
     * 11:取货中
     * 12:放货中
     * 10:任务完成等待WCS确认
     */
    public Short status1;
    /**
     * 状态枚举
     */
    public RgvStatusType statusType1;
    /**
     * 工位1有物
     */
    public Short loaded1;
    /**
     * RGV当前位置
     */
    public Short RgvPos;
    /**
     * 走行在定位
     * 0 = 在定位
     * 1 = 不在定位
     */
    public Short walkPos;
    //////////////////////     工位2定义   //////////////////////////////////////////////////
    /**
     * 工位2任务号
     */
    public Short taskNo2 = 0;
    /**
     * RGV工位2当前状态
     * 0:空闲,无任务
     * 11:取货中
     * 12:放货中
     * 10:任务完成等待WCS确认
     */
    public Short status2;
    /**
     * 状态枚举
     */
    public RgvStatusType statusType2;
    /**
     * 工位2有物
     */
    public Short loaded2;
    ///////////////////////////////////////////////////////////////////////////////////////
    /**
     * 异常码
     */
    public Short alarm;
    private Short temp1;
    private Short temp2;
    private Short temp3;
    private Short temp4;
    /**
     * X行走行速度m/min
     */
    private Float xSpeed;
    /**
     * 堆垛机累计走行距离km
     */
    public Float xDistance;
    /**
     * 堆垛机累计走行时长h
     */
    public Float xDuration;
    public void setMode(Short mode) {
        this.mode = mode;
        this.modeType = RgvModeType.get(mode);
    }
    public void setMode(RgvModeType type) {
        this.modeType = type;
        this.mode = RgvModeType.get(type).id.shortValue();
    }
    public void setStatus(Short status){
        this.status = status;
        this.statusType = RgvStatusType.get(status);
    }
    public void setStatus(RgvStatusType type){
        this.statusType = type;
        this.status = RgvStatusType.get(type).id.shortValue();
    }
    public void setStatus1(Short status1){
        this.status1 = status1;
        this.statusType1 = RgvStatusType.get(status1);
    }
    public void setStatus1(RgvStatusType type1){
        this.statusType1 = type1;
        this.status1 = RgvStatusType.get(type1).id.shortValue();
    }
    public void setStatus2(Short status2){
        this.status2 = status2;
        this.statusType2 = RgvStatusType.get(status2);
    }
    public void setStatus2(RgvStatusType type2){
        this.statusType2 = type2;
        this.status2 = RgvStatusType.get(type2).id.shortValue();
    }
    /**
     * 最近一次入出库类型
     *       I:入库
     *       O:出库
     */
    private String lastIo = "I";
    public BasRgv toSqlModel(BasRgv basRgv){
        if (alarm!=null) {
            basRgv.setRgvErr(alarm.longValue());
        }
        basRgv.setWrkNo1(taskNo1.intValue());
        basRgv.setWrkNo2(taskNo2.intValue());
        return basRgv;
    }
    public void setxSpeed(Short xSpeed) {
        this.xSpeed = Float.valueOf(xSpeed);
    }
    public void setxDistance(Short xDistance) {
        this.xDistance = Float.valueOf(xDistance);
    }
    public void setxDuration(Short xDuration) {
        this.xDuration = Float.valueOf(xDuration);
    }
}
src/main/resources/mapper/BasRgvMapper.xml
New file
@@ -0,0 +1,24 @@
<?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.BasRgvMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.zy.asrs.entity.BasRgv">
        <result column="rgv_no" property="rgvNo" />
        <result column="in_enable" property="inEnable" />
        <result column="out_enable" property="outEnable" />
        <result column="rgv_sts" property="rgvSts" />
        <result column="wrk_no1" property="wrkNo1" />
        <result column="wrk_no2" property="wrkNo2" />
        <result column="rgv_err" property="rgvErr" />
        <result column="pak_mk" property="pakMk" />
        <result column="status" property="status" />
        <result column="create_by" property="createBy" />
        <result column="create_time" property="createTime" />
        <result column="update_by" property="updateBy" />
        <result column="update_time" property="updateTime" />
        <result column="memo" property="memo" />
    </resultMap>
</mapper>