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>