Browse Source

Merge remote-tracking branch 'origin/master'

master
lizw-2015 6 months ago
parent
commit
4a386ecbcc
  1. 28
      servo/src/main/java/com/galaxis/rcs/common/entity/LccBasContainer.java
  2. 32
      servo/src/main/java/com/galaxis/rcs/common/entity/LccBasExecutor.java
  3. 44
      servo/src/main/java/com/galaxis/rcs/common/entity/LccBasLocation.java
  4. 48
      servo/src/main/java/com/galaxis/rcs/common/entity/LccInvLedger.java
  5. 34
      servo/src/main/java/com/galaxis/rcs/common/entity/LccInvLpn.java
  6. 4
      servo/src/main/java/com/galaxis/rcs/common/enums/BizTaskType.java
  7. 1
      servo/src/main/java/com/galaxis/rcs/common/enums/PlanTaskType.java
  8. 71
      servo/src/main/java/com/galaxis/rcs/common/query/QLccBasContainer.java
  9. 77
      servo/src/main/java/com/galaxis/rcs/common/query/QLccBasExecutor.java
  10. 95
      servo/src/main/java/com/galaxis/rcs/common/query/QLccBasLocation.java
  11. 101
      servo/src/main/java/com/galaxis/rcs/common/query/QLccInvLedger.java
  12. 80
      servo/src/main/java/com/galaxis/rcs/common/query/QLccInvLpn.java
  13. 166
      servo/src/main/java/com/galaxis/rcs/inv/InvManager.java
  14. 22
      servo/src/main/java/com/galaxis/rcs/ptr/PtrAgvItem.java
  15. 69
      servo/src/main/java/com/yvan/workbench/controller/EnvController.java
  16. 368
      servo/src/main/java/com/yvan/workbench/controller/LccModelManager.java
  17. 2
      servo/src/main/java/com/yvan/workbench/model/entity/LccModelFloor.java
  18. 17
      servo/src/main/java/com/yvan/workbench/model/query/QLccModelFloor.java
  19. 6
      servo/src/test/java/com/yvan/workbench/CodegenTest.java

28
servo/src/main/java/com/galaxis/rcs/common/entity/LccBasContainer.java

@ -0,0 +1,28 @@
package com.galaxis.rcs.common.entity;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* 容器信息(lcc_bas_container)
*/
@Data
public class LccBasContainer implements Serializable {
/** 环境ID */
private Long envId;
/** 容器条码 */
private String lpn;
/** 容器类型 */
private String containerType;
/** 是否激活 */
private Boolean isActive;
/** 创建时间 */
private Date createAt;
/** 创建人 */
private String createBy;
/** 更新时间 */
private Date updateAt;
/** 更新人 */
private String updateBy;
}

32
servo/src/main/java/com/galaxis/rcs/common/entity/LccBasExecutor.java

@ -0,0 +1,32 @@
package com.galaxis.rcs.common.entity;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* 执行器信息(lcc_bas_executor)
*/
@Data
public class LccBasExecutor implements Serializable {
/** 环境ID */
private Long envId;
/** 执行器ID */
private String executorId;
/** 仿真车所在楼层 */
private String virtualFloorCode;
/** 仿真车所在XYZ */
private String virtualLocationAt;
/** 仿真车配置详情 */
private String virtualExecutorPayload;
/** 是否激活 */
private Boolean isActive;
/** 创建时间 */
private Date createAt;
/** 创建人 */
private String createBy;
/** 更新时间 */
private Date updateAt;
/** 更新人 */
private String updateBy;
}

44
servo/src/main/java/com/galaxis/rcs/common/entity/LccBasLocation.java

@ -0,0 +1,44 @@
package com.galaxis.rcs.common.entity;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* 库存位置(lcc_bas_location)
*/
@Data
public class LccBasLocation implements Serializable {
/** 环境ID */
private Long envId;
/** 位置编码 */
private String locCode;
/** 位置类型_gstore_rack_executor */
private String locType;
/** 路径点编码 */
private String wayPoint;
/** 货位相对于路径方向 */
private String locDirection;
/** 楼层数据 */
private String catalogCode;
/** 位置编码 */
private String rack;
/** 货架列 */
private Integer bay;
/** 货架层 */
private Integer level;
/** 货架格 */
private Integer cell;
/** 是否锁定 */
private Integer isLock;
/** 是否冻结 */
private Integer isFrozen;
/** 创建时间 */
private Date createAt;
/** 创建人 */
private String createBy;
/** 更新时间 */
private Date updateAt;
/** 更新人 */
private String updateBy;
}

48
servo/src/main/java/com/galaxis/rcs/common/entity/LccInvLedger.java

@ -0,0 +1,48 @@
package com.galaxis.rcs.common.entity;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* 库存账页(lcc_inv_ledger)
*/
@Data
public class LccInvLedger implements Serializable {
/** 环境ID */
private Long envId;
/** 业务单据ID */
private Long bizTaskId;
/** 账页号 */
private Long ledgerId;
/** 账页类型 */
private String ledgerType;
/** 账页原因 */
private String ledgerRemark;
/** 托盘条码 */
private String lpn;
/** 库存改变数量 */
private Integer qtyChange;
/** 入库占用改变数量 */
private Integer qtyInChange;
/** 出库占用改变数量 */
private Integer qtyOutChange;
/** 改变后堆叠层号从0开始 */
private Integer layerIndex;
/** 改变前库存位置 */
private String locCode;
/** 改变后库存数量 */
private Integer qty;
/** 改变后入库占用数量 */
private Integer qtyIn;
/** 改变后出库占用数量 */
private Integer qtyOut;
/** 创建时间 */
private Date createAt;
/** 创建人 */
private String createBy;
/** 更新时间 */
private Date updateAt;
/** 更新人 */
private String updateBy;
}

34
servo/src/main/java/com/galaxis/rcs/common/entity/LccInvLpn.java

@ -0,0 +1,34 @@
package com.galaxis.rcs.common.entity;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* 库存(lcc_inv_lpn)
*/
@Data
public class LccInvLpn implements Serializable {
/** 环境ID */
private Long envId;
/** 托盘条码 */
private String lpn;
/** 库存位置 */
private String locCode;
/** 堆叠层号从0开始 */
private Integer layerIndex;
/** 库存数量 */
private Integer qty;
/** 入库占用数量 */
private Integer qtyIn;
/** 出库占用数量 */
private Integer qtyOut;
/** 创建时间 */
private Date createAt;
/** 创建人 */
private String createBy;
/** 更新时间 */
private Date updateAt;
/** 更新人 */
private String updateBy;
}

4
servo/src/main/java/com/galaxis/rcs/common/enums/BizTaskType.java

@ -3,7 +3,9 @@ package com.galaxis.rcs.common.enums;
public enum BizTaskType { public enum BizTaskType {
MOVE, // 移动任务 MOVE, // 移动任务
CHARGE, // 充电任务 CHARGE, // 充电任务
CARRY; // 搬运任务 CARRY, // 搬运任务
LOAD, // 装载任务
UNLOAD; // 卸载任务
public static BizTaskType fromString(String value) { public static BizTaskType fromString(String value) {
if (value == null) if (value == null)

1
servo/src/main/java/com/galaxis/rcs/common/enums/PlanTaskType.java

@ -11,5 +11,4 @@ public enum PlanTaskType {
UNLOAD, // 装载任务 UNLOAD, // 装载任务
CHARGE, // 充电任务 CHARGE, // 充电任务
FINISH // 完成任务 FINISH // 完成任务
} }

71
servo/src/main/java/com/galaxis/rcs/common/query/QLccBasContainer.java

@ -0,0 +1,71 @@
package com.galaxis.rcs.common.query;
import static com.querydsl.core.types.PathMetadataFactory.*;
import com.querydsl.core.types.dsl.*;
import com.querydsl.core.types.*;
import com.querydsl.sql.*;
import java.sql.Types;
import com.galaxis.rcs.common.entity.LccBasContainer;
import java.util.Date;
/**
* 容器信息(lcc_bas_container)
*/
@SuppressWarnings("ALL")
public class QLccBasContainer extends RelationalPathBase<LccBasContainer> {
/** lcc_bas_container表 */
public static final QLccBasContainer lccBasContainer = new QLccBasContainer("lcc_bas_container");
/** 环境ID */
public final NumberPath<Long> envId = createNumber("envId", Long.class);
/** 容器条码 */
public final StringPath lpn = createString("lpn");
/** 容器类型 */
public final StringPath containerType = createString("containerType");
/** 是否激活 */
public final BooleanPath isActive = createBoolean("isActive");
/** 创建时间 */
public final DateTimePath<Date> createAt = createDateTime("createAt", Date.class);
/** 创建人 */
public final StringPath createBy = createString("createBy");
/** 更新时间 */
public final DateTimePath<Date> updateAt = createDateTime("updateAt", Date.class);
/** 更新人 */
public final StringPath updateBy = createString("updateBy");
public QLccBasContainer(String variable) {
super(LccBasContainer.class, forVariable(variable), "rcs2_tw_zhanghui", "lcc_bas_container");
addMetadata();
}
public QLccBasContainer(String variable, String schema, String table) {
super(LccBasContainer.class, forVariable(variable), schema, table);
addMetadata();
}
public QLccBasContainer(String variable, String schema) {
super(LccBasContainer.class, forVariable(variable), schema, "lcc_bas_container");
addMetadata();
}
public QLccBasContainer(Path<? extends LccBasContainer> path) {
super(path.getType(), path.getMetadata(), "rcs2_tw_zhanghui", "lcc_bas_container");
addMetadata();
}
public QLccBasContainer(PathMetadata metadata) {
super(LccBasContainer.class, metadata, "rcs2_tw_zhanghui", "lcc_bas_container");
addMetadata();
}
private void addMetadata() {
addMetadata(envId, ColumnMetadata.named("env_id").withIndex(1).ofType(Types.BIGINT).withSize(19));
addMetadata(lpn, ColumnMetadata.named("lpn").withIndex(2).ofType(Types.VARCHAR).withSize(50));
addMetadata(containerType, ColumnMetadata.named("container_type").withIndex(3).ofType(Types.VARCHAR).withSize(20));
addMetadata(isActive, ColumnMetadata.named("is_active").withIndex(4).ofType(Types.BIT).withSize(3));
addMetadata(createAt, ColumnMetadata.named("create_at").withIndex(5).ofType(Types.TIMESTAMP));
addMetadata(createBy, ColumnMetadata.named("create_by").withIndex(6).ofType(Types.VARCHAR).withSize(50));
addMetadata(updateAt, ColumnMetadata.named("update_at").withIndex(7).ofType(Types.TIMESTAMP));
addMetadata(updateBy, ColumnMetadata.named("update_by").withIndex(8).ofType(Types.VARCHAR).withSize(50));
}
}

77
servo/src/main/java/com/galaxis/rcs/common/query/QLccBasExecutor.java

@ -0,0 +1,77 @@
package com.galaxis.rcs.common.query;
import static com.querydsl.core.types.PathMetadataFactory.*;
import com.querydsl.core.types.dsl.*;
import com.querydsl.core.types.*;
import com.querydsl.sql.*;
import java.sql.Types;
import com.galaxis.rcs.common.entity.LccBasExecutor;
import java.util.Date;
/**
* 执行器信息(lcc_bas_executor)
*/
@SuppressWarnings("ALL")
public class QLccBasExecutor extends RelationalPathBase<LccBasExecutor> {
/** lcc_bas_executor表 */
public static final QLccBasExecutor lccBasExecutor = new QLccBasExecutor("lcc_bas_executor");
/** 环境ID */
public final NumberPath<Long> envId = createNumber("envId", Long.class);
/** 执行器ID */
public final StringPath executorId = createString("executorId");
/** 仿真车所在楼层 */
public final StringPath virtualFloorCode = createString("virtualFloorCode");
/** 仿真车所在XYZ */
public final StringPath virtualLocationAt = createString("virtualLocationAt");
/** 仿真车配置详情 */
public final StringPath virtualExecutorPayload = createString("virtualExecutorPayload");
/** 是否激活 */
public final BooleanPath isActive = createBoolean("isActive");
/** 创建时间 */
public final DateTimePath<Date> createAt = createDateTime("createAt", Date.class);
/** 创建人 */
public final StringPath createBy = createString("createBy");
/** 更新时间 */
public final DateTimePath<Date> updateAt = createDateTime("updateAt", Date.class);
/** 更新人 */
public final StringPath updateBy = createString("updateBy");
public QLccBasExecutor(String variable) {
super(LccBasExecutor.class, forVariable(variable), "rcs2_tw_zhanghui", "lcc_bas_executor");
addMetadata();
}
public QLccBasExecutor(String variable, String schema, String table) {
super(LccBasExecutor.class, forVariable(variable), schema, table);
addMetadata();
}
public QLccBasExecutor(String variable, String schema) {
super(LccBasExecutor.class, forVariable(variable), schema, "lcc_bas_executor");
addMetadata();
}
public QLccBasExecutor(Path<? extends LccBasExecutor> path) {
super(path.getType(), path.getMetadata(), "rcs2_tw_zhanghui", "lcc_bas_executor");
addMetadata();
}
public QLccBasExecutor(PathMetadata metadata) {
super(LccBasExecutor.class, metadata, "rcs2_tw_zhanghui", "lcc_bas_executor");
addMetadata();
}
private void addMetadata() {
addMetadata(envId, ColumnMetadata.named("env_id").withIndex(1).ofType(Types.BIGINT).withSize(19));
addMetadata(executorId, ColumnMetadata.named("executor_id").withIndex(2).ofType(Types.VARCHAR).withSize(50));
addMetadata(virtualFloorCode, ColumnMetadata.named("virtual_floor_code").withIndex(3).ofType(Types.VARCHAR).withSize(50));
addMetadata(virtualLocationAt, ColumnMetadata.named("virtual_location_at").withIndex(4).ofType(Types.VARCHAR).withSize(50));
addMetadata(virtualExecutorPayload, ColumnMetadata.named("virtual_executor_payload").withIndex(5).ofType(Types.VARCHAR).withSize(3000));
addMetadata(isActive, ColumnMetadata.named("is_active").withIndex(6).ofType(Types.BIT).withSize(3));
addMetadata(createAt, ColumnMetadata.named("create_at").withIndex(7).ofType(Types.TIMESTAMP));
addMetadata(createBy, ColumnMetadata.named("create_by").withIndex(8).ofType(Types.VARCHAR).withSize(50));
addMetadata(updateAt, ColumnMetadata.named("update_at").withIndex(9).ofType(Types.TIMESTAMP));
addMetadata(updateBy, ColumnMetadata.named("update_by").withIndex(10).ofType(Types.VARCHAR).withSize(50));
}
}

95
servo/src/main/java/com/galaxis/rcs/common/query/QLccBasLocation.java

@ -0,0 +1,95 @@
package com.galaxis.rcs.common.query;
import static com.querydsl.core.types.PathMetadataFactory.*;
import com.querydsl.core.types.dsl.*;
import com.querydsl.core.types.*;
import com.querydsl.sql.*;
import java.sql.Types;
import com.galaxis.rcs.common.entity.LccBasLocation;
import java.util.Date;
/**
* 库存位置(lcc_bas_location)
*/
@SuppressWarnings("ALL")
public class QLccBasLocation extends RelationalPathBase<LccBasLocation> {
/** lcc_bas_location表 */
public static final QLccBasLocation lccBasLocation = new QLccBasLocation("lcc_bas_location");
/** 环境ID */
public final NumberPath<Long> envId = createNumber("envId", Long.class);
/** 位置编码 */
public final StringPath locCode = createString("locCode");
/** 位置类型_gstore_rack_executor */
public final StringPath locType = createString("locType");
/** 路径点编码 */
public final StringPath wayPoint = createString("wayPoint");
/** 货位相对于路径方向 */
public final StringPath locDirection = createString("locDirection");
/** 楼层数据 */
public final StringPath catalogCode = createString("catalogCode");
/** 位置编码 */
public final StringPath rack = createString("rack");
/** 货架列 */
public final NumberPath<Integer> bay = createNumber("bay", Integer.class);
/** 货架层 */
public final NumberPath<Integer> level = createNumber("level", Integer.class);
/** 货架格 */
public final NumberPath<Integer> cell = createNumber("cell", Integer.class);
/** 是否锁定 */
public final NumberPath<Integer> isLock = createNumber("isLock", Integer.class);
/** 是否冻结 */
public final NumberPath<Integer> isFrozen = createNumber("isFrozen", Integer.class);
/** 创建时间 */
public final DateTimePath<Date> createAt = createDateTime("createAt", Date.class);
/** 创建人 */
public final StringPath createBy = createString("createBy");
/** 更新时间 */
public final DateTimePath<Date> updateAt = createDateTime("updateAt", Date.class);
/** 更新人 */
public final StringPath updateBy = createString("updateBy");
public QLccBasLocation(String variable) {
super(LccBasLocation.class, forVariable(variable), "rcs2_tw_zhanghui", "lcc_bas_location");
addMetadata();
}
public QLccBasLocation(String variable, String schema, String table) {
super(LccBasLocation.class, forVariable(variable), schema, table);
addMetadata();
}
public QLccBasLocation(String variable, String schema) {
super(LccBasLocation.class, forVariable(variable), schema, "lcc_bas_location");
addMetadata();
}
public QLccBasLocation(Path<? extends LccBasLocation> path) {
super(path.getType(), path.getMetadata(), "rcs2_tw_zhanghui", "lcc_bas_location");
addMetadata();
}
public QLccBasLocation(PathMetadata metadata) {
super(LccBasLocation.class, metadata, "rcs2_tw_zhanghui", "lcc_bas_location");
addMetadata();
}
private void addMetadata() {
addMetadata(envId, ColumnMetadata.named("env_id").withIndex(1).ofType(Types.BIGINT).withSize(19));
addMetadata(locCode, ColumnMetadata.named("loc_code").withIndex(2).ofType(Types.VARCHAR).withSize(50));
addMetadata(locType, ColumnMetadata.named("loc_type").withIndex(3).ofType(Types.VARCHAR).withSize(20));
addMetadata(wayPoint, ColumnMetadata.named("way_point").withIndex(4).ofType(Types.VARCHAR).withSize(50));
addMetadata(locDirection, ColumnMetadata.named("loc_direction").withIndex(5).ofType(Types.VARCHAR).withSize(10));
addMetadata(catalogCode, ColumnMetadata.named("catalog_code").withIndex(6).ofType(Types.VARCHAR).withSize(50));
addMetadata(rack, ColumnMetadata.named("rack").withIndex(7).ofType(Types.VARCHAR).withSize(50));
addMetadata(bay, ColumnMetadata.named("bay").withIndex(8).ofType(Types.INTEGER).withSize(10));
addMetadata(level, ColumnMetadata.named("level").withIndex(9).ofType(Types.INTEGER).withSize(10));
addMetadata(cell, ColumnMetadata.named("cell").withIndex(10).ofType(Types.INTEGER).withSize(10));
addMetadata(isLock, ColumnMetadata.named("is_lock").withIndex(11).ofType(Types.TINYINT).withSize(3));
addMetadata(isFrozen, ColumnMetadata.named("is_frozen").withIndex(12).ofType(Types.TINYINT).withSize(3));
addMetadata(createAt, ColumnMetadata.named("create_at").withIndex(13).ofType(Types.TIMESTAMP));
addMetadata(createBy, ColumnMetadata.named("create_by").withIndex(14).ofType(Types.VARCHAR).withSize(50));
addMetadata(updateAt, ColumnMetadata.named("update_at").withIndex(15).ofType(Types.TIMESTAMP));
addMetadata(updateBy, ColumnMetadata.named("update_by").withIndex(16).ofType(Types.VARCHAR).withSize(50));
}
}

101
servo/src/main/java/com/galaxis/rcs/common/query/QLccInvLedger.java

@ -0,0 +1,101 @@
package com.galaxis.rcs.common.query;
import static com.querydsl.core.types.PathMetadataFactory.*;
import com.querydsl.core.types.dsl.*;
import com.querydsl.core.types.*;
import com.querydsl.sql.*;
import java.sql.Types;
import com.galaxis.rcs.common.entity.LccInvLedger;
import java.util.Date;
/**
* 库存账页(lcc_inv_ledger)
*/
@SuppressWarnings("ALL")
public class QLccInvLedger extends RelationalPathBase<LccInvLedger> {
/** lcc_inv_ledger表 */
public static final QLccInvLedger lccInvLedger = new QLccInvLedger("lcc_inv_ledger");
/** 环境ID */
public final NumberPath<Long> envId = createNumber("envId", Long.class);
/** 业务单据ID */
public final NumberPath<Long> bizTaskId = createNumber("bizTaskId", Long.class);
/** 账页号 */
public final NumberPath<Long> ledgerId = createNumber("ledgerId", Long.class);
/** 账页类型 */
public final StringPath ledgerType = createString("ledgerType");
/** 账页原因 */
public final StringPath ledgerRemark = createString("ledgerRemark");
/** 托盘条码 */
public final StringPath lpn = createString("lpn");
/** 库存改变数量 */
public final NumberPath<Integer> qtyChange = createNumber("qtyChange", Integer.class);
/** 入库占用改变数量 */
public final NumberPath<Integer> qtyInChange = createNumber("qtyInChange", Integer.class);
/** 出库占用改变数量 */
public final NumberPath<Integer> qtyOutChange = createNumber("qtyOutChange", Integer.class);
/** 改变后堆叠层号从0开始 */
public final NumberPath<Integer> layerIndex = createNumber("layerIndex", Integer.class);
/** 改变前库存位置 */
public final StringPath locCode = createString("locCode");
/** 改变后库存数量 */
public final NumberPath<Integer> qty = createNumber("qty", Integer.class);
/** 改变后入库占用数量 */
public final NumberPath<Integer> qtyIn = createNumber("qtyIn", Integer.class);
/** 改变后出库占用数量 */
public final NumberPath<Integer> qtyOut = createNumber("qtyOut", Integer.class);
/** 创建时间 */
public final DateTimePath<Date> createAt = createDateTime("createAt", Date.class);
/** 创建人 */
public final StringPath createBy = createString("createBy");
/** 更新时间 */
public final DateTimePath<Date> updateAt = createDateTime("updateAt", Date.class);
/** 更新人 */
public final StringPath updateBy = createString("updateBy");
public QLccInvLedger(String variable) {
super(LccInvLedger.class, forVariable(variable), "rcs2_tw_zhanghui", "lcc_inv_ledger");
addMetadata();
}
public QLccInvLedger(String variable, String schema, String table) {
super(LccInvLedger.class, forVariable(variable), schema, table);
addMetadata();
}
public QLccInvLedger(String variable, String schema) {
super(LccInvLedger.class, forVariable(variable), schema, "lcc_inv_ledger");
addMetadata();
}
public QLccInvLedger(Path<? extends LccInvLedger> path) {
super(path.getType(), path.getMetadata(), "rcs2_tw_zhanghui", "lcc_inv_ledger");
addMetadata();
}
public QLccInvLedger(PathMetadata metadata) {
super(LccInvLedger.class, metadata, "rcs2_tw_zhanghui", "lcc_inv_ledger");
addMetadata();
}
private void addMetadata() {
addMetadata(envId, ColumnMetadata.named("env_id").withIndex(1).ofType(Types.BIGINT).withSize(19));
addMetadata(bizTaskId, ColumnMetadata.named("biz_task_id").withIndex(2).ofType(Types.BIGINT).withSize(19));
addMetadata(ledgerId, ColumnMetadata.named("ledger_id").withIndex(3).ofType(Types.BIGINT).withSize(19));
addMetadata(ledgerType, ColumnMetadata.named("ledger_type").withIndex(4).ofType(Types.VARCHAR).withSize(20));
addMetadata(ledgerRemark, ColumnMetadata.named("ledger_remark").withIndex(5).ofType(Types.VARCHAR).withSize(200));
addMetadata(lpn, ColumnMetadata.named("lpn").withIndex(6).ofType(Types.VARCHAR).withSize(50));
addMetadata(qtyChange, ColumnMetadata.named("qty_change").withIndex(7).ofType(Types.INTEGER).withSize(10));
addMetadata(qtyInChange, ColumnMetadata.named("qty_in_change").withIndex(8).ofType(Types.INTEGER).withSize(10));
addMetadata(qtyOutChange, ColumnMetadata.named("qty_out_change").withIndex(9).ofType(Types.INTEGER).withSize(10));
addMetadata(layerIndex, ColumnMetadata.named("layer_index").withIndex(10).ofType(Types.INTEGER).withSize(10));
addMetadata(locCode, ColumnMetadata.named("loc_code").withIndex(11).ofType(Types.VARCHAR).withSize(50));
addMetadata(qty, ColumnMetadata.named("qty").withIndex(12).ofType(Types.INTEGER).withSize(10));
addMetadata(qtyIn, ColumnMetadata.named("qty_in").withIndex(13).ofType(Types.INTEGER).withSize(10));
addMetadata(qtyOut, ColumnMetadata.named("qty_out").withIndex(14).ofType(Types.INTEGER).withSize(10));
addMetadata(createAt, ColumnMetadata.named("create_at").withIndex(15).ofType(Types.TIMESTAMP));
addMetadata(createBy, ColumnMetadata.named("create_by").withIndex(16).ofType(Types.VARCHAR).withSize(50));
addMetadata(updateAt, ColumnMetadata.named("update_at").withIndex(17).ofType(Types.TIMESTAMP));
addMetadata(updateBy, ColumnMetadata.named("update_by").withIndex(18).ofType(Types.VARCHAR).withSize(50));
}
}

80
servo/src/main/java/com/galaxis/rcs/common/query/QLccInvLpn.java

@ -0,0 +1,80 @@
package com.galaxis.rcs.common.query;
import static com.querydsl.core.types.PathMetadataFactory.*;
import com.querydsl.core.types.dsl.*;
import com.querydsl.core.types.*;
import com.querydsl.sql.*;
import java.sql.Types;
import com.galaxis.rcs.common.entity.LccInvLpn;
import java.util.Date;
/**
* 库存(lcc_inv_lpn)
*/
@SuppressWarnings("ALL")
public class QLccInvLpn extends RelationalPathBase<LccInvLpn> {
/** lcc_inv_lpn表 */
public static final QLccInvLpn lccInvLpn = new QLccInvLpn("lcc_inv_lpn");
/** 环境ID */
public final NumberPath<Long> envId = createNumber("envId", Long.class);
/** 托盘条码 */
public final StringPath lpn = createString("lpn");
/** 库存位置 */
public final StringPath locCode = createString("locCode");
/** 堆叠层号从0开始 */
public final NumberPath<Integer> layerIndex = createNumber("layerIndex", Integer.class);
/** 库存数量 */
public final NumberPath<Integer> qty = createNumber("qty", Integer.class);
/** 入库占用数量 */
public final NumberPath<Integer> qtyIn = createNumber("qtyIn", Integer.class);
/** 出库占用数量 */
public final NumberPath<Integer> qtyOut = createNumber("qtyOut", Integer.class);
/** 创建时间 */
public final DateTimePath<Date> createAt = createDateTime("createAt", Date.class);
/** 创建人 */
public final StringPath createBy = createString("createBy");
/** 更新时间 */
public final DateTimePath<Date> updateAt = createDateTime("updateAt", Date.class);
/** 更新人 */
public final StringPath updateBy = createString("updateBy");
public QLccInvLpn(String variable) {
super(LccInvLpn.class, forVariable(variable), "rcs2_tw_zhanghui", "lcc_inv_lpn");
addMetadata();
}
public QLccInvLpn(String variable, String schema, String table) {
super(LccInvLpn.class, forVariable(variable), schema, table);
addMetadata();
}
public QLccInvLpn(String variable, String schema) {
super(LccInvLpn.class, forVariable(variable), schema, "lcc_inv_lpn");
addMetadata();
}
public QLccInvLpn(Path<? extends LccInvLpn> path) {
super(path.getType(), path.getMetadata(), "rcs2_tw_zhanghui", "lcc_inv_lpn");
addMetadata();
}
public QLccInvLpn(PathMetadata metadata) {
super(LccInvLpn.class, metadata, "rcs2_tw_zhanghui", "lcc_inv_lpn");
addMetadata();
}
private void addMetadata() {
addMetadata(envId, ColumnMetadata.named("env_id").withIndex(1).ofType(Types.BIGINT).withSize(19));
addMetadata(lpn, ColumnMetadata.named("lpn").withIndex(2).ofType(Types.VARCHAR).withSize(50));
addMetadata(locCode, ColumnMetadata.named("loc_code").withIndex(3).ofType(Types.VARCHAR).withSize(50));
addMetadata(layerIndex, ColumnMetadata.named("layer_index").withIndex(4).ofType(Types.INTEGER).withSize(10));
addMetadata(qty, ColumnMetadata.named("qty").withIndex(5).ofType(Types.INTEGER).withSize(10));
addMetadata(qtyIn, ColumnMetadata.named("qty_in").withIndex(6).ofType(Types.INTEGER).withSize(10));
addMetadata(qtyOut, ColumnMetadata.named("qty_out").withIndex(7).ofType(Types.INTEGER).withSize(10));
addMetadata(createAt, ColumnMetadata.named("create_at").withIndex(8).ofType(Types.TIMESTAMP));
addMetadata(createBy, ColumnMetadata.named("create_by").withIndex(9).ofType(Types.VARCHAR).withSize(50));
addMetadata(updateAt, ColumnMetadata.named("update_at").withIndex(10).ofType(Types.TIMESTAMP));
addMetadata(updateBy, ColumnMetadata.named("update_by").withIndex(11).ofType(Types.VARCHAR).withSize(50));
}
}

166
servo/src/main/java/com/galaxis/rcs/inv/InvManager.java

@ -1,4 +1,170 @@
package com.galaxis.rcs.inv; package com.galaxis.rcs.inv;
import com.galaxis.rcs.common.entity.LccInvLpn;
import com.querydsl.core.util.StringUtils;
import org.clever.data.jdbc.DaoFactory;
import org.clever.data.jdbc.QueryDSL;
import java.sql.Date;
import static com.galaxis.rcs.common.query.QLccInvLpn.lccInvLpn;
import static com.galaxis.rcs.common.query.QLccInvLedger.lccInvLedger;
public class InvManager { public class InvManager {
private static final QueryDSL queryDSL = DaoFactory.getQueryDSL();
/**
* 记录库存
* @param envId 环境ID
* @param lpn 容器号
* @param locCode 库位号
* @param layerIndex 堆叠层
* @param qty 数量 >0 增加数量 <0 减数量
* @param qtyIn 入库数量 >0 减数量 <0 减数量
* @param qtyOut 出库数量 >0 减数量 <0 减数量
*/
public static void invSave(Long envId, String lpn, String locCode, Integer layerIndex, int qty, int qtyIn, int qtyOut) {
if (envId == null || envId <= 0
|| lpn == null || StringUtils.isNullOrEmpty(lpn) || lpn.equals("N/A")
|| locCode == null || StringUtils.isNullOrEmpty(locCode) || locCode.equals("N/A")
|| layerIndex == null || layerIndex < 0) {
throw new RuntimeException("库存记录时,关键参数值不对");
}
if (qty == 0 && qtyIn == 0 && qtyOut == 0) {
throw new RuntimeException("库存记录时,变化数量不能都为0");
}
if (qtyIn != 0 && qtyOut != 0) {
throw new RuntimeException("库存记录时,不能同时为入库和出库");
}
if (qty > 1 || qty < -1) {
throw new RuntimeException("库存记录时,数量变化值只能为0、1、-1");
}
if (qtyIn > 1 || qtyIn < -1) {
throw new RuntimeException("库存记录时,预占数量变化值只能为0、1、-1");
}
if (qtyOut > 1 || qtyOut < -1) {
throw new RuntimeException("库存记录时,预扣数量变化值只能为0、1、-1");
}
if (qty == 1 && qtyIn == 1) {
throw new RuntimeException("库存记录时,数量增加时不能增加预占数量");
}
if (qty == -1 && qtyOut == 1) {
throw new RuntimeException("库存记录时,数量扣减时不能对其增加预扣");
}
LccInvLpn lccInvLpnData = queryDSL.select(lccInvLpn)
.from(lccInvLpn)
.where(lccInvLpn.envId.eq(envId).and(lccInvLpn.locCode.eq(locCode)).and(lccInvLpn.lpn.eq(lpn)))
.fetchFirst();
if (lccInvLpnData != null) {
if ((lccInvLpnData.getQty() == 1 && qtyIn > 0) || (lccInvLpnData.getQty() == 1 && qty > 0)) {
throw new RuntimeException("库存记录时,当前货位有货, 不能放货或者准备放货");
} else if ((lccInvLpnData.getQty() == 0 && qtyOut > 0) || (lccInvLpnData.getQty() == 0 && qty < 0)) {
throw new RuntimeException("库存记录时,当前货位无货, 不能取货或者准备取货");
} else if (lccInvLpnData.getQtyIn() > 0 && qtyIn > 0) {
throw new RuntimeException("库存记录时,当前货位有预占, 不能准备放货");
} else if (lccInvLpnData.getQtyOut() > 0 && qtyOut > 0) {
throw new RuntimeException("库存记录时,当前货位有预扣, 不能准备取货");
}
} else {
if (qty < 0 || qtyIn < 0 || qtyOut < 0) {
throw new RuntimeException("没有找到原始库存,不能扣减数量");
}
}
queryDSL.beginTX(status -> {
if (lccInvLpnData != null) {
queryDSL.update(lccInvLpn)
.set(lccInvLpn.qty, lccInvLpn.qty.add(qty))
.set(lccInvLpn.qtyIn, lccInvLpn.qtyIn.add(qtyIn))
.set(lccInvLpn.qtyOut, lccInvLpn.qtyOut.add(qtyOut))
.set(lccInvLpn.layerIndex, layerIndex)
// .set(lccInvLpn.updateAt, )
.where(lccInvLpn.envId.eq(envId).and(lccInvLpn.locCode.eq(locCode)).and(lccInvLpn.lpn.eq(lpn)))
.execute();
// 记录账页
queryDSL.insert(lccInvLedger)
.set(lccInvLedger.envId, envId)
.set(lccInvLedger.lpn, lpn)
.set(lccInvLedger.locCode, locCode)
.set(lccInvLedger.layerIndex, layerIndex)
.set(lccInvLedger.qtyChange, qty)
.set(lccInvLedger.qtyInChange, qtyIn)
.set(lccInvLedger.qtyOutChange, qtyOut)
.set(lccInvLedger.qty, lccInvLpnData.getQty() + qty)
.set(lccInvLedger.qtyIn, lccInvLpnData.getQtyIn() + qtyIn)
.set(lccInvLedger.qtyOut, lccInvLpnData.getQtyOut() + qtyOut)
.set(lccInvLedger.ledgerType, "记账")
.set(lccInvLedger.ledgerRemark, "N/A")
.execute();
} else {
queryDSL.insert(lccInvLpn)
.set(lccInvLpn.envId, envId)
.set(lccInvLpn.lpn, lpn)
.set(lccInvLpn.locCode, locCode)
.set(lccInvLpn.layerIndex, layerIndex)
.set(lccInvLpn.qty, qty)
.set(lccInvLpn.qtyIn, qtyIn)
.set(lccInvLpn.qtyOut, qtyOut)
.execute();
// 记录账页
queryDSL.insert(lccInvLedger)
.set(lccInvLedger.envId, envId)
.set(lccInvLedger.lpn, lpn)
.set(lccInvLedger.locCode, locCode)
.set(lccInvLedger.layerIndex, layerIndex)
.set(lccInvLedger.qtyChange, qty)
.set(lccInvLedger.qtyInChange, qtyIn)
.set(lccInvLedger.qtyOutChange, qtyOut)
.set(lccInvLedger.qty, qty)
.set(lccInvLedger.qtyIn, qtyIn)
.set(lccInvLedger.qtyOut, qtyOut)
.set(lccInvLedger.ledgerType, "记账")
.set(lccInvLedger.ledgerRemark, "N/A")
.execute();
}
// 删除所有数量预占预扣都为0的库存
queryDSL.delete(lccInvLpn).where(lccInvLpn.qty.eq(0).and(lccInvLpn.qtyIn.eq(0)).and(lccInvLpn.qtyOut.eq(0))).execute();
});
}
/**
* 记录库存
* @param envId 环境ID
* @param lpn 容器号
* @param locCode 库位号
* @param qty 数量 >0 减数量 <0 减数量
* @param qtyIn 入库数量 >0 减数量 <0 减数量
* @param qtyOut 出库数量 >0 减数量 <0 减数量
*/
public static void invSave(Long envId, String lpn, String locCode, int qty, int qtyIn, int qtyOut) {
invSave(envId, lpn, locCode, 0, qty, qtyIn, qtyOut);
}
/**
* 保存库存
* @param envId 环境ID
* @param lpn 容器号
* @param locCode 库位号
* @param layerIndex 堆叠层
* @param qty 数量 >0 减数量 <0 减数量
*/
public static void invSave(Long envId, String lpn, String locCode, int layerIndex, int qty) {
invSave(envId, lpn, locCode, layerIndex, qty, 0, 0);
}
/**
* 保存库存
* @param envId 环境ID
* @param lpn 容器号
* @param locCode 库位号
* @param qty 数量 >0 减数量 <0 减数量
*/
public static void invSave(Long envId, String lpn, String locCode, int qty) {
invSave(envId, lpn, locCode, 0, qty, 0, 0);
}
} }

22
servo/src/main/java/com/galaxis/rcs/ptr/PtrAgvItem.java

@ -723,8 +723,21 @@ public abstract class PtrAgvItem extends ExecutorItem {
} }
if (deviceTaskList.size() <= 0) { if (deviceTaskList.isEmpty()) {
return; PtrAgvDeviceTask deviceTask = new PtrAgvDeviceTask();
deviceTask.x = startPoint.logicX;
deviceTask.y = startPoint.logicY;
deviceTask.speed = speed;
deviceTask.direction = direction;
deviceTask.pickMode = 0;
deviceTask.startPoint = startPoint;
deviceTask.endPoint = startPoint;
deviceTask.planTaskIdSet.addAll(rotationPlanTaskIdSet);
rotationPlanTaskIdSet.clear();
// 行走任务完成后,检查用的字段
deviceTask.checkLogicX = startPoint.logicX;
deviceTask.checkLogicY = startPoint.logicY;
deviceTaskList.add(deviceTask);
} }
// 标记任务分组结束 // 标记任务分组结束
@ -734,8 +747,13 @@ public abstract class PtrAgvItem extends ExecutorItem {
deviceTask.isGroupEnd = true; deviceTask.isGroupEnd = true;
// 最后一个规划任务为旋转时需要添加一个endDirection // 最后一个规划任务为旋转时需要添加一个endDirection
if (rotationPlanTaskIdSet.size() > 0) { if (rotationPlanTaskIdSet.size() > 0) {
deviceTask.operationType = COperationType.move;
deviceTask.pickMode = CPickMode.normal;
deviceTask.endDirection = direction; deviceTask.endDirection = direction;
deviceTask.planTaskIdSet.addAll(rotationPlanTaskIdSet); deviceTask.planTaskIdSet.addAll(rotationPlanTaskIdSet);
if (deviceTask.movePlanTaskId == null) {
deviceTask.movePlanTaskId = 0L;
}
rotationPlanTaskIdSet.clear(); rotationPlanTaskIdSet.clear();
} }

69
servo/src/main/java/com/yvan/workbench/controller/EnvController.java

@ -1,8 +1,10 @@
package com.yvan.workbench.controller; package com.yvan.workbench.controller;
import com.galaxis.rcs.RCSService; import com.galaxis.rcs.RCSService;
import com.google.common.base.Strings;
import com.yvan.workbench.model.entity.Model; import com.yvan.workbench.model.entity.Model;
import org.clever.core.Conv; import org.clever.core.Conv;
import org.clever.core.model.response.R;
import org.clever.data.jdbc.DaoFactory; import org.clever.data.jdbc.DaoFactory;
import org.clever.data.jdbc.QueryDSL; import org.clever.data.jdbc.QueryDSL;
import org.clever.data.jdbc.querydsl.utils.QueryDslUtils; import org.clever.data.jdbc.querydsl.utils.QueryDslUtils;
@ -12,7 +14,11 @@ import java.util.LinkedHashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import static com.galaxis.rcs.common.query.QLccBasContainer.lccBasContainer;
import static com.galaxis.rcs.common.query.QLccBasExecutor.lccBasExecutor;
import static com.galaxis.rcs.common.query.QLccBasLocation.lccBasLocation;
import static com.galaxis.rcs.common.query.QLccEnvInfo.lccEnvInfo; import static com.galaxis.rcs.common.query.QLccEnvInfo.lccEnvInfo;
import static com.galaxis.rcs.common.query.QLccInvLpn.lccInvLpn;
public class EnvController { public class EnvController {
static final QueryDSL queryDSL = DaoFactory.getQueryDSL(); static final QueryDSL queryDSL = DaoFactory.getQueryDSL();
@ -25,4 +31,67 @@ public class EnvController {
return Model.newSuccess(list); return Model.newSuccess(list);
} }
public static R<?> getAllInv(@RequestBody Map<String, Object> params) {
String catalogCode = Conv.asString(params.get("catalogCode"));
Long envId = Conv.asLong(params.get("envId"));
if (Strings.isNullOrEmpty(catalogCode)) {
return R.fail("catalogCode must not be null");
}
if (envId == null) {
return R.fail("envId must not be null");
}
var list = queryDSL.select(QueryDslUtils.linkedMap(
lccBasContainer.containerType,
lccInvLpn.lpn,
lccInvLpn.locCode,
lccBasLocation.rack,
lccBasLocation.bay,
lccBasLocation.level,
lccBasLocation.cell
))
.from(lccInvLpn)
.innerJoin(lccBasLocation).on(
lccInvLpn.locCode.eq(lccBasLocation.locCode).and(
lccBasLocation.envId.eq(lccBasLocation.envId)
)
)
.innerJoin(lccBasContainer).on(
lccInvLpn.lpn.eq(lccInvLpn.lpn).and(
lccBasContainer.envId.eq(lccInvLpn.envId)
)
)
.where(lccInvLpn.envId.eq(envId))
.where(lccBasLocation.catalogCode.eq(catalogCode))
.fetch();
return R.success(list);
}
public static R<?> getAllExecutor(@RequestBody Map<String, Object> params) {
String catalogCode = Conv.asString(params.get("catalogCode"));
Long envId = Conv.asLong(params.get("envId"));
if (Strings.isNullOrEmpty(catalogCode)) {
return R.fail("catalogCode must not be null");
}
if (envId == null) {
return R.fail("envId must not be null");
}
var list = queryDSL.select(QueryDslUtils.linkedMap(
lccBasExecutor.executorId,
lccBasExecutor.virtualLocationAt,
lccBasExecutor.virtualExecutorPayload
))
.from(lccBasExecutor)
.where(lccBasExecutor.envId.eq(envId))
.where(lccBasExecutor.isActive.eq(true))
.where(lccBasExecutor.virtualFloorCode.eq(catalogCode))
.fetch();
return R.success(list);
}
} }

368
servo/src/main/java/com/yvan/workbench/controller/LccModelManager.java

@ -1,11 +1,16 @@
package com.yvan.workbench.controller; package com.yvan.workbench.controller;
import com.galaxis.rcs.common.entity.LccBasLocation;
import com.galaxis.rcs.common.entity.StoreLocation;
import com.galaxis.rcs.ptr.JacksonUtils;
import com.yvan.workbench.model.entity.LccModelFloor; import com.yvan.workbench.model.entity.LccModelFloor;
import com.yvan.workbench.model.entity.LccModelWorld; import com.yvan.workbench.model.entity.LccModelWorld;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.clever.core.Assert; import org.clever.core.Assert;
import org.clever.core.Conv; import org.clever.core.Conv;
import org.clever.core.id.SnowFlake; import org.clever.core.id.SnowFlake;
import org.clever.core.json.JsonArrayWrapper;
import org.clever.core.json.JsonWrapper;
import org.clever.core.mapper.JacksonMapper; import org.clever.core.mapper.JacksonMapper;
import org.clever.core.model.request.QueryByPage; import org.clever.core.model.request.QueryByPage;
import org.clever.core.model.request.page.Page; import org.clever.core.model.request.page.Page;
@ -17,8 +22,12 @@ import org.clever.web.mvc.annotation.RequestBody;
import org.clever.web.mvc.annotation.RequestParam; import org.clever.web.mvc.annotation.RequestParam;
import org.clever.web.mvc.annotation.Transactional; import org.clever.web.mvc.annotation.Transactional;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
import static com.galaxis.rcs.common.query.QLccBasLocation.lccBasLocation;
import static com.yvan.workbench.model.query.QLccModelFloor.lccModelFloor; import static com.yvan.workbench.model.query.QLccModelFloor.lccModelFloor;
import static com.yvan.workbench.model.query.QLccModelWorld.lccModelWorld; import static com.yvan.workbench.model.query.QLccModelWorld.lccModelWorld;
@ -27,60 +36,60 @@ public class LccModelManager {
private static String getOtherData(String projectUuid, String projectLabel) { private static String getOtherData(String projectUuid, String projectLabel) {
return StringUtils.trim(String.format(""" return StringUtils.trim(String.format("""
{ {
"project_uuid": "%s", "project_uuid": "%s",
"project_label": "%s", "project_label": "%s",
"project_version": 0, "project_version": 0,
"server": "demo", "server": "demo",
"Tool": { "Tool": {
"Group": [], "Group": [],
"GlobalVariables": [], "GlobalVariables": [],
"UserCommand": [], "UserCommand": [],
"Dashboard": [], "Dashboard": [],
"DataTable": [], "DataTable": [],
"Trigger": [ "Trigger": [
{ {
"name": "OnOpen", "name": "OnOpen",
"fn": "" "fn": ""
}, },
{ {
"name": "OnReset", "name": "OnReset",
"fn": "" "fn": ""
}, },
{ {
"name": "OnStart", "name": "OnStart",
"fn": "" "fn": ""
},
{
"name": "OnStop",
"fn": ""
}
],
"gridHelper": {
"axesEnabled": true,
"axesSize": 5,
"axesColor": 14540253,
"axesWidth": 2,
"gridEnabled": true,
"gridSize": 1000,
"gridDivisions": 1000,
"gridColor": 14540253,
"gridOpacity": 1,
"backgroundColor": 16119285,
"snapEnabled": true,
"snapDistance": 0.25
}
}, },
"elevator": [], {
"wall": [], "name": "OnStop",
"pillar": [] "fn": ""
}""".stripIndent(), projectUuid, projectLabel)); }
],
"gridHelper": {
"axesEnabled": true,
"axesSize": 5,
"axesColor": 14540253,
"axesWidth": 2,
"gridEnabled": true,
"gridSize": 1000,
"gridDivisions": 1000,
"gridColor": 14540253,
"gridOpacity": 1,
"backgroundColor": 16119285,
"snapEnabled": true,
"snapDistance": 0.25
}
},
"elevator": [],
"wall": [],
"pillar": []
}""".stripIndent(), projectUuid, projectLabel));
} }
public static Page<LccModelWorld> projectList() { public static Page<LccModelWorld> projectList() {
return QueryDslUtils.queryByPage( return QueryDslUtils.queryByPage(
QUERY_DSL.selectFrom(lccModelWorld), QUERY_DSL.selectFrom(lccModelWorld),
QueryByPage.getCurrent() QueryByPage.getCurrent()
); );
} }
@ -89,24 +98,24 @@ public class LccModelManager {
Assert.isNotBlank(project.getProjectUuid(), "项目编号必填"); Assert.isNotBlank(project.getProjectUuid(), "项目编号必填");
Assert.isNotBlank(project.getProjectLabel(), "项目标题必填"); Assert.isNotBlank(project.getProjectLabel(), "项目标题必填");
Assert.isTrue( Assert.isTrue(
QUERY_DSL.selectFrom(lccModelWorld).where(lccModelWorld.projectUuid.eq(project.getProjectUuid())).fetchCount() <= 0, QUERY_DSL.selectFrom(lccModelWorld).where(lccModelWorld.projectUuid.eq(project.getProjectUuid())).fetchCount() <= 0,
"项目编号重复" "项目编号重复"
); );
project.setProjectVersion(1L); project.setProjectVersion(1L);
project.setId(SnowFlake.SNOW_FLAKE.nextId()); project.setId(SnowFlake.SNOW_FLAKE.nextId());
project.setDirectoryData(""" project.setDirectoryData("""
[ [
{
"label": "仓库楼层",
"items": [
{ {
"label": "仓库楼层", "catalogCode": "f1",
"items": [ "label": "一楼 (f1)"
{
"catalogCode": "f1",
"label": "一楼 (f1)"
}
]
} }
] ]
""".stripIndent()); }
]
""".stripIndent());
project.setOtherData(getOtherData(project.getProjectUuid(), project.getProjectLabel())); project.setOtherData(getOtherData(project.getProjectUuid(), project.getProjectLabel()));
QUERY_DSL.insert(lccModelWorld).populate(project).execute(); QUERY_DSL.insert(lccModelWorld).populate(project).execute();
return QUERY_DSL.selectFrom(lccModelWorld).where(lccModelWorld.id.eq(project.getId())).fetchOne(); return QUERY_DSL.selectFrom(lccModelWorld).where(lccModelWorld.id.eq(project.getId())).fetchOne();
@ -116,16 +125,16 @@ public class LccModelManager {
public static R<?> addOrUpdateWorld(@RequestBody LccModelWorld params) { public static R<?> addOrUpdateWorld(@RequestBody LccModelWorld params) {
Assert.isNotBlank(params.getProjectUuid(), "项目编号必填"); Assert.isNotBlank(params.getProjectUuid(), "项目编号必填");
long count = QUERY_DSL.selectFrom(lccModelWorld) long count = QUERY_DSL.selectFrom(lccModelWorld)
.where(lccModelWorld.projectUuid.eq(params.getProjectUuid())) .where(lccModelWorld.projectUuid.eq(params.getProjectUuid()))
.where(lccModelWorld.projectVersion.eq(1L)) .where(lccModelWorld.projectVersion.eq(1L))
.fetchCount(); .fetchCount();
if (count >= 1) { if (count >= 1) {
QUERY_DSL.update(lccModelWorld) QUERY_DSL.update(lccModelWorld)
.set(lccModelWorld.otherData, params.getOtherData()) .set(lccModelWorld.otherData, params.getOtherData())
.set(lccModelWorld.directoryData, params.getDirectoryData()) .set(lccModelWorld.directoryData, params.getDirectoryData())
.where(lccModelWorld.projectUuid.eq(params.getProjectUuid())) .where(lccModelWorld.projectUuid.eq(params.getProjectUuid()))
.where(lccModelWorld.projectVersion.eq(1L)) .where(lccModelWorld.projectVersion.eq(1L))
.execute(); .execute();
} else { } else {
//noinspection unchecked //noinspection unchecked
Map<String, Object> map = JacksonMapper.getInstance().fromJson(params.getOtherData(), Map.class); Map<String, Object> map = JacksonMapper.getInstance().fromJson(params.getOtherData(), Map.class);
@ -143,36 +152,233 @@ public class LccModelManager {
String catalogCode = Conv.asString(params.get("catalogCode")); String catalogCode = Conv.asString(params.get("catalogCode"));
String project_uuid = Conv.asString(params.get("project_uuid")); String project_uuid = Conv.asString(params.get("project_uuid"));
return QUERY_DSL.selectFrom(lccModelFloor) return QUERY_DSL.selectFrom(lccModelFloor)
.where(lccModelFloor.projectUuid.eq(project_uuid)) .where(lccModelFloor.projectUuid.eq(project_uuid))
.where(lccModelFloor.catalogCode.eq(catalogCode)) .where(lccModelFloor.catalogCode.eq(catalogCode))
.orderBy(lccModelFloor.projectVersion.desc()) .orderBy(lccModelFloor.projectVersion.desc())
.fetchFirst(); .fetchFirst();
} }
@Transactional @Transactional
public static R<?> addOrUpdateFloor(@RequestBody LccModelFloor params) { public static R<?> addOrUpdateFloor(@RequestBody LccModelFloor params) {
Assert.isNotBlank(params.getProjectUuid(), "项目编号必填"); Assert.isNotBlank(params.getProjectUuid(), "项目编号必填");
Assert.isNotBlank(params.getCatalogCode(), "楼层编号必填"); Assert.isNotBlank(params.getCatalogCode(), "楼层编号必填");
Assert.notNull(params.getEnvId(), "环境编号必填");
Assert.isNotBlank(params.getItems(), "楼层数据必填"); Assert.isNotBlank(params.getItems(), "楼层数据必填");
if (params.getEnvId() == null || params.getEnvId() <= 0) {
throw new RuntimeException("环境编号必填");
}
long count = QUERY_DSL.selectFrom(lccModelFloor) long count = QUERY_DSL.selectFrom(lccModelFloor)
.where(lccModelFloor.projectUuid.eq(params.getProjectUuid())) .where(lccModelFloor.projectUuid.eq(params.getProjectUuid()))
.where(lccModelFloor.projectVersion.eq(1L)) .where(lccModelFloor.envId.eq(params.getEnvId()))
.where(lccModelFloor.catalogCode.eq(params.getCatalogCode())) .where(lccModelFloor.catalogCode.eq(params.getCatalogCode()))
.fetchCount(); .fetchCount();
if (count >= 1) { if (count >= 1) {
QUERY_DSL.update(lccModelFloor) QUERY_DSL.update(lccModelFloor)
.set(lccModelFloor.items, params.getItems()) .set(lccModelFloor.items, params.getItems())
.where(lccModelFloor.projectUuid.eq(params.getProjectUuid())) .set(lccModelFloor.projectVersion, lccModelFloor.projectVersion.add(1L))
.where(lccModelFloor.projectVersion.eq(1L)) .where(lccModelFloor.projectUuid.eq(params.getProjectUuid()))
.where(lccModelFloor.catalogCode.eq(params.getCatalogCode())) .where(lccModelFloor.envId.eq(params.getEnvId()))
.execute(); .where(lccModelFloor.catalogCode.eq(params.getCatalogCode()))
.execute();
} else { } else {
params.setId(SnowFlake.SNOW_FLAKE.nextId()); params.setId(SnowFlake.SNOW_FLAKE.nextId());
params.setProjectVersion(1L); params.setProjectVersion(1L);
// params.setCreateBy(); // params.setCreateBy();
QUERY_DSL.insert(lccModelFloor).populate(params).execute(); QUERY_DSL.insert(lccModelFloor).populate(params).execute();
} }
batchSaveBasLocation(params);
return R.success(); return R.success();
} }
/**
* 保存库存货位数据
*/
private static void batchSaveBasLocation(LccModelFloor params) {
// 删除旧的楼层数据
QUERY_DSL.delete(lccBasLocation)
.where(lccBasLocation.envId.eq(params.getEnvId()))
.where(lccBasLocation.catalogCode.eq(params.getCatalogCode()))
.execute();
// ================================== 从 params.items 中解析出货位数据
var items = JacksonUtils.parseList(params.getItems(), HashMap.class);
var storeMap = new HashMap<String, LccBasLocation>();
for (Map<String, Object> item : items) {
String type = Conv.asString(item.get("t"));
String id = Conv.asString(item.get("id"));
if ("rack".equals(type)) {
// 循环 bays / levelHeight 生成存储位
List<Map<String, Object>> bays = (List<Map<String, Object>>) (((Map) item.get("dt")).get("bays"));
int bayIndex = 0;
for (Map<String, Object> bay : bays) {
List levelHeight = (List) bay.get("levelHeight");
for (int level = 0; level < levelHeight.size(); level++) {
// 生成存储位
var storeLoc = new StoreLocation(id, bayIndex, level, 0);
LccBasLocation basLocation = new LccBasLocation();
storeMap.put(storeLoc.toString(), basLocation);
basLocation.setLocCode(storeLoc.toString());
basLocation.setLocType(type);
basLocation.setWayPoint("N/A");
basLocation.setLocDirection("N/A");
basLocation.setRack(id);
basLocation.setBay(bayIndex);
basLocation.setLevel(level);
}
bayIndex++;
}
} else if ("gstore".equals(type)) {
// 地堆存储位只有一个格子
var storeLoc = new StoreLocation(id, 0, 0, 0);
LccBasLocation basLocation = new LccBasLocation();
storeMap.put(storeLoc.toString(), basLocation);
basLocation.setLocCode(storeLoc.toString());
basLocation.setLocType(type);
basLocation.setWayPoint("N/A");
basLocation.setLocDirection("N/A");
basLocation.setRack(id);
basLocation.setBay(0);
basLocation.setLevel(0);
}
}
// ================================== 从 params.items 中解析出地标连接数据
for (Map<String, Object> item : items) {
String type = Conv.asString(item.get("t"));
String id = Conv.asString(item.get("id"));
if (!"way".equals(type)) {
continue;
}
// 解析 linkStore 数据
List<Map<String, Object>> linkStore = (List<Map<String, Object>>) (((Map) item.get("dt")).get("linkStore"));
if (linkStore != null) {
for (Map<String, Object> link : linkStore) {
String rackId = Conv.asString(link.get("item"));
int bay = Conv.asInteger(link.get("bay"));
int level = Conv.asInteger(link.get("level"));
int cell = Conv.asInteger(link.get("cell"));
String direction = Conv.asString(link.get("direction"));
// 生成存储位
var storeLoc = new StoreLocation(rackId, bay, level, cell);
LccBasLocation basLocation = storeMap.get(storeLoc.toString());
if (basLocation != null) {
basLocation.setWayPoint(id);
basLocation.setLocDirection(direction);
}
}
}
}
// 全部写进数据库
var action = QUERY_DSL.insert(lccBasLocation);
for (LccBasLocation basLocation : storeMap.values()) {
basLocation.setEnvId(params.getEnvId());
basLocation.setCatalogCode(params.getCatalogCode());
basLocation.setCell(0);
basLocation.setIsLock(0);
basLocation.setIsFrozen(0);
basLocation.setUpdateAt(new Date());
basLocation.setCreateAt(new Date());
basLocation.setCreateBy("yvan");
basLocation.setUpdateBy("yvan");
action.populate(basLocation).addBatch();
}
if (action.getBatchCount() > 0) {
action.execute();
}
// ================= JSON 结构
/*
提取货架信息
1. t=rack 的情况下读取 bays 数组并且枚举里面的 levelHeight 数组按数量生成 loc_code
{
"id": "rack1",
"t": "rack",
"v": true,
"dt": {
"bays": [
{ "levelHeight": [ 0.001, 1.21 ], },
{ "levelHeight": [ 0.001, 1.21 ], }
],
},
}
2. t=gstore 的情况下
{
"id": "105_105",
"t": "gstore",
}
提取路标信息
{
"id": "1_2",
"t": "way",
"dt": {
"linkStore": [
{
"item": "rack1",
"bay": 0, "level": 0, "cell": 0, "direction": "up"
},
{
"item": "rack1",
"bay": 0, "level": 1, "cell": 0, "direction": "up"
}
]
}
}
{
"id": "1_2",
"t": "way",
"dt": {
"linkStore": [
{
"item": "rack1",
"bay": 0, "level": 0, "cell": 0, "direction": "up"
},
{
"item": "rack1",
"bay": 0, "level": 1, "cell": 0, "direction": "up"
}
]
}
}
{
"id": "4_2",
"t": "way",
"dt": {
"linkStore": [
{
"item": "105_105",
"bay": 0,
"level": 0,
"cell": 0,
"direction": "down"
}
]
}
}
生成实体
LccBasLocation basLocation = new LccBasLocation();
basLocation.setEnvId(params.getEnvId());
basLocation.setCatalogCode(params.getCatalogCode());
basLocation.setLocType("t");
basLocation.setWayPoint("way.id");
basLocation.setLocDirection("linkStore.direction");
basLocation.setRack("rack.id");
basLocation.setBay("rack.id");
basLocation.setLevel("rack.id");
basLocation.setCell("rack.id");
basLocation.setIsLock(0);
basLocation.setIsFrozen(0);
*/
}
} }
// test === // test ===

2
servo/src/main/java/com/yvan/workbench/model/entity/LccModelFloor.java

@ -15,6 +15,8 @@ public class LccModelFloor implements Serializable {
private String projectUuid; private String projectUuid;
/** 项目版本 */ /** 项目版本 */
private Long projectVersion; private Long projectVersion;
/** 环境ID */
private Long envId;
/** 楼层编号 */ /** 楼层编号 */
private String catalogCode; private String catalogCode;
/** 楼层数据 */ /** 楼层数据 */

17
servo/src/main/java/com/yvan/workbench/model/query/QLccModelFloor.java

@ -22,6 +22,8 @@ public class QLccModelFloor extends RelationalPathBase<LccModelFloor> {
public final StringPath projectUuid = createString("projectUuid"); public final StringPath projectUuid = createString("projectUuid");
/** 项目版本 */ /** 项目版本 */
public final NumberPath<Long> projectVersion = createNumber("projectVersion", Long.class); public final NumberPath<Long> projectVersion = createNumber("projectVersion", Long.class);
/** 环境ID */
public final NumberPath<Long> envId = createNumber("envId", Long.class);
/** 楼层编号 */ /** 楼层编号 */
public final StringPath catalogCode = createString("catalogCode"); public final StringPath catalogCode = createString("catalogCode");
/** 楼层数据 */ /** 楼层数据 */
@ -66,12 +68,13 @@ public class QLccModelFloor extends RelationalPathBase<LccModelFloor> {
addMetadata(id, ColumnMetadata.named("id").withIndex(1).ofType(Types.BIGINT).withSize(19)); addMetadata(id, ColumnMetadata.named("id").withIndex(1).ofType(Types.BIGINT).withSize(19));
addMetadata(projectUuid, ColumnMetadata.named("project_uuid").withIndex(2).ofType(Types.VARCHAR).withSize(36)); addMetadata(projectUuid, ColumnMetadata.named("project_uuid").withIndex(2).ofType(Types.VARCHAR).withSize(36));
addMetadata(projectVersion, ColumnMetadata.named("project_version").withIndex(3).ofType(Types.BIGINT).withSize(19)); addMetadata(projectVersion, ColumnMetadata.named("project_version").withIndex(3).ofType(Types.BIGINT).withSize(19));
addMetadata(catalogCode, ColumnMetadata.named("catalogCode").withIndex(4).ofType(Types.VARCHAR).withSize(255)); addMetadata(envId, ColumnMetadata.named("env_id").withIndex(4).ofType(Types.BIGINT).withSize(19));
addMetadata(items, ColumnMetadata.named("items").withIndex(5).ofType(Types.LONGVARCHAR).withSize(16777215)); addMetadata(catalogCode, ColumnMetadata.named("catalogCode").withIndex(5).ofType(Types.VARCHAR).withSize(255));
addMetadata(autoStart, ColumnMetadata.named("auto_start").withIndex(6).ofType(Types.BIT).withSize(3)); addMetadata(items, ColumnMetadata.named("items").withIndex(6).ofType(Types.LONGVARCHAR).withSize(16777215));
addMetadata(createAt, ColumnMetadata.named("create_at").withIndex(7).ofType(Types.TIMESTAMP)); addMetadata(autoStart, ColumnMetadata.named("auto_start").withIndex(7).ofType(Types.BIT).withSize(3));
addMetadata(createBy, ColumnMetadata.named("create_by").withIndex(8).ofType(Types.VARCHAR).withSize(255)); addMetadata(createAt, ColumnMetadata.named("create_at").withIndex(8).ofType(Types.TIMESTAMP));
addMetadata(updateAt, ColumnMetadata.named("update_at").withIndex(9).ofType(Types.TIMESTAMP)); addMetadata(createBy, ColumnMetadata.named("create_by").withIndex(9).ofType(Types.VARCHAR).withSize(255));
addMetadata(updateBy, ColumnMetadata.named("update_by").withIndex(10).ofType(Types.VARCHAR).withSize(255)); addMetadata(updateAt, ColumnMetadata.named("update_at").withIndex(10).ofType(Types.TIMESTAMP));
addMetadata(updateBy, ColumnMetadata.named("update_by").withIndex(11).ofType(Types.VARCHAR).withSize(255));
} }
} }

6
servo/src/test/java/com/yvan/workbench/CodegenTest.java

@ -29,7 +29,11 @@ public class CodegenTest {
// .addTable("rcs_task_biz") // .addTable("rcs_task_biz")
// .addTable("rcs_task_device") // .addTable("rcs_task_device")
// .addTable("rcs_task_plan"); // .addTable("rcs_task_plan");
.addTable("lcc_model_floor"); .addTable("lcc_bas_container")
.addTable("lcc_bas_executor")
.addTable("lcc_bas_location")
.addTable("lcc_inv_lpn")
.addTable("lcc_inv_ledger");
CodegenUtils.genCode(jdbc, config); CodegenUtils.genCode(jdbc, config);
log.info("-->"); log.info("-->");
jdbc.close(); jdbc.close();

Loading…
Cancel
Save