feat:任务编码修改
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
package cn.code.nl.module.wms.api.emptybox.dto;
|
package cn.code.nl.module.wms.api.emptybox.dto;
|
||||||
|
|
||||||
import jakarta.validation.constraints.NotBlank;
|
import jakarta.validation.constraints.NotBlank;
|
||||||
|
import jakarta.validation.constraints.Pattern;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -11,4 +12,8 @@ public class EmptyBoxOutboundCreateReq {
|
|||||||
|
|
||||||
@NotBlank(message = "木箱规格编码不能为空")
|
@NotBlank(message = "木箱规格编码不能为空")
|
||||||
private String materialCode;
|
private String materialCode;
|
||||||
|
|
||||||
|
@NotBlank(message = "异常点位不能为空")
|
||||||
|
@Pattern(regexp = "YCD01|YCD02", message = "异常点位不在可选范围内")
|
||||||
|
private String destinationPoint;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,34 @@
|
|||||||
|
package cn.code.nl.module.wms.enums.task;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* WMS 运输任务类型。
|
||||||
|
*
|
||||||
|
* <p>任务类型同时区分库存对象和作业方向,便于任务查询、统计和调度。</p>
|
||||||
|
*/
|
||||||
|
@Getter
|
||||||
|
@AllArgsConstructor
|
||||||
|
public enum WmsTaskTypeEnum {
|
||||||
|
|
||||||
|
/** 成品入库。 */
|
||||||
|
FINISHED_GOODS_INBOUND("010501"),
|
||||||
|
/** 成品出库。 */
|
||||||
|
FINISHED_GOODS_OUTBOUND("010502"),
|
||||||
|
/** 成品移库。 */
|
||||||
|
FINISHED_GOODS_MOVE("010503"),
|
||||||
|
/** 空托盘入库。 */
|
||||||
|
EMPTY_PALLET_INBOUND("010504"),
|
||||||
|
/** 空托盘出库。 */
|
||||||
|
EMPTY_PALLET_OUTBOUND("010505"),
|
||||||
|
/** 空木箱入库。 */
|
||||||
|
EMPTY_BOX_INBOUND("010506"),
|
||||||
|
/** 空木箱出库。 */
|
||||||
|
EMPTY_BOX_OUTBOUND("010507"),
|
||||||
|
/** 空木箱移库。 */
|
||||||
|
EMPTY_BOX_MOVE("010508");
|
||||||
|
|
||||||
|
/** 任务类型编码。 */
|
||||||
|
private final String code;
|
||||||
|
}
|
||||||
@@ -19,6 +19,7 @@ import cn.code.nl.module.wms.dal.mysql.boxinfo.BoxInfoMapper;
|
|||||||
import cn.code.nl.module.wms.dal.mysql.boxtype.BoxTypeMapper;
|
import cn.code.nl.module.wms.dal.mysql.boxtype.BoxTypeMapper;
|
||||||
import cn.code.nl.module.wms.dal.mysql.structAttr.StrucAttrMapper;
|
import cn.code.nl.module.wms.dal.mysql.structAttr.StrucAttrMapper;
|
||||||
import cn.code.nl.module.wms.enums.emptybox.EmptyBoxStatusEnum;
|
import cn.code.nl.module.wms.enums.emptybox.EmptyBoxStatusEnum;
|
||||||
|
import cn.code.nl.module.wms.enums.task.WmsTaskTypeEnum;
|
||||||
import cn.hutool.core.util.IdUtil;
|
import cn.hutool.core.util.IdUtil;
|
||||||
import jakarta.annotation.Resource;
|
import jakarta.annotation.Resource;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
@@ -40,8 +41,6 @@ public class EmptyBoxServiceImpl implements EmptyBoxService {
|
|||||||
private static final String TRUSS_INBOUND_POINT = "FHD01";
|
private static final String TRUSS_INBOUND_POINT = "FHD01";
|
||||||
private static final String INBOUND_LOCK = "8";
|
private static final String INBOUND_LOCK = "8";
|
||||||
private static final String OUTBOUND_LOCK = "9";
|
private static final String OUTBOUND_LOCK = "9";
|
||||||
private static final String OUTBOUND_POINT_1 = "ZXQ_01";
|
|
||||||
private static final String OUTBOUND_POINT_2 = "ZXQ_02";
|
|
||||||
private static final DateTimeFormatter TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
private static final DateTimeFormatter TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
@@ -66,7 +65,7 @@ public class EmptyBoxServiceImpl implements EmptyBoxService {
|
|||||||
throw new ServiceException(500, "木箱规格不存在");
|
throw new ServiceException(500, "木箱规格不存在");
|
||||||
}
|
}
|
||||||
String boxNo = generateBoxNo();
|
String boxNo = generateBoxNo();
|
||||||
String reservationCode = "EMPTY_BOX_" + IdUtil.getSnowflakeNextIdStr();
|
String reservationCode = generateReservationCode();
|
||||||
StrucAttrDO struct = reserveInboundStruct(req.getMaterialCode(), reservationCode, boxNo);
|
StrucAttrDO struct = reserveInboundStruct(req.getMaterialCode(), reservationCode, boxNo);
|
||||||
if (struct == null) {
|
if (struct == null) {
|
||||||
throw new ServiceException(500, "未找到符合条件的空木箱入库仓位");
|
throw new ServiceException(500, "未找到符合条件的空木箱入库仓位");
|
||||||
@@ -101,7 +100,7 @@ public class EmptyBoxServiceImpl implements EmptyBoxService {
|
|||||||
task.setOwnerService(OWNER_SERVICE);
|
task.setOwnerService(OWNER_SERVICE);
|
||||||
task.setBizType("EMPTY_BOX_TRUSS_IN");
|
task.setBizType("EMPTY_BOX_TRUSS_IN");
|
||||||
task.setHandleCode(TRUSS_HANDLE_CODE);
|
task.setHandleCode(TRUSS_HANDLE_CODE);
|
||||||
task.setTaskType("010501");
|
task.setTaskType(WmsTaskTypeEnum.EMPTY_BOX_INBOUND.getCode());
|
||||||
task.setAcsTaskType("7");
|
task.setAcsTaskType("7");
|
||||||
task.setAgvSystemType("1");
|
task.setAgvSystemType("1");
|
||||||
task.setPointCode1(req.getPointCode());
|
task.setPointCode1(req.getPointCode());
|
||||||
@@ -124,12 +123,12 @@ public class EmptyBoxServiceImpl implements EmptyBoxService {
|
|||||||
if (boxTypeMapper.selectByMaterialCode(req.getMaterialCode()) == null) {
|
if (boxTypeMapper.selectByMaterialCode(req.getMaterialCode()) == null) {
|
||||||
throw new ServiceException(500, "木箱规格不存在");
|
throw new ServiceException(500, "木箱规格不存在");
|
||||||
}
|
}
|
||||||
String reservationCode = "EMPTY_BOX_" + IdUtil.getSnowflakeNextIdStr();
|
String reservationCode = generateReservationCode();
|
||||||
BoxInfoDO box = reserveOutboundBox(req.getMaterialCode(), reservationCode);
|
BoxInfoDO box = reserveOutboundBox(req.getMaterialCode(), reservationCode);
|
||||||
if (box == null) {
|
if (box == null) {
|
||||||
throw new ServiceException(500, "没有可出库的该规格空木箱");
|
throw new ServiceException(500, "没有可出库的该规格空木箱");
|
||||||
}
|
}
|
||||||
String destinationPoint = selectOutboundPoint();
|
String destinationPoint = req.getDestinationPoint();
|
||||||
StrucAttrDO struct = new StrucAttrDO();
|
StrucAttrDO struct = new StrucAttrDO();
|
||||||
struct.setStructId(box.getStructId());
|
struct.setStructId(box.getStructId());
|
||||||
struct.setStructCode(box.getStructCode());
|
struct.setStructCode(box.getStructCode());
|
||||||
@@ -195,6 +194,13 @@ public class EmptyBoxServiceImpl implements EmptyBoxService {
|
|||||||
return codeGenApi.generate(req).getCheckedData();
|
return codeGenApi.generate(req).getCheckedData();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生成仓位临时预占码,长度不得超过 wms_structattr.task_code 的 20 个字符。
|
||||||
|
*/
|
||||||
|
String generateReservationCode() {
|
||||||
|
return IdUtil.getSnowflakeNextIdStr();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 按同规格排、全空排的顺序预占入库仓位。
|
* 按同规格排、全空排的顺序预占入库仓位。
|
||||||
*/
|
*/
|
||||||
@@ -254,20 +260,6 @@ public class EmptyBoxServiceImpl implements EmptyBoxService {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 按任务和点位库存综合负载选择出库点。
|
|
||||||
*/
|
|
||||||
private String selectOutboundPoint() {
|
|
||||||
// TODO 后续改为调用 LMS 接口,统一获取候选出库点和点位库存占用情况。
|
|
||||||
long point1Load = transportTaskApi.countUnfinishedByDestination(
|
|
||||||
OUTBOUND_POINT_1, OWNER_SERVICE).getCheckedData()
|
|
||||||
+ strucAttrMapper.countEmptyBoxAtPoint(OUTBOUND_POINT_1);
|
|
||||||
long point2Load = transportTaskApi.countUnfinishedByDestination(
|
|
||||||
OUTBOUND_POINT_2, OWNER_SERVICE).getCheckedData()
|
|
||||||
+ strucAttrMapper.countEmptyBoxAtPoint(OUTBOUND_POINT_2);
|
|
||||||
return point1Load <= point2Load ? OUTBOUND_POINT_1 : OUTBOUND_POINT_2;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建搬运任务。
|
* 创建搬运任务。
|
||||||
*/
|
*/
|
||||||
@@ -279,7 +271,9 @@ public class EmptyBoxServiceImpl implements EmptyBoxService {
|
|||||||
task.setBizType(bizType);
|
task.setBizType(bizType);
|
||||||
task.setBizId(struct.getStructId());
|
task.setBizId(struct.getStructId());
|
||||||
task.setHandleCode(HANDLE_CODE);
|
task.setHandleCode(HANDLE_CODE);
|
||||||
task.setTaskType("EMPTY_BOX_IN".equals(bizType) ? "010501" : "010503");
|
task.setTaskType("EMPTY_BOX_IN".equals(bizType)
|
||||||
|
? WmsTaskTypeEnum.EMPTY_BOX_INBOUND.getCode()
|
||||||
|
: WmsTaskTypeEnum.EMPTY_BOX_OUTBOUND.getCode());
|
||||||
task.setAcsTaskType("7");
|
task.setAcsTaskType("7");
|
||||||
task.setAgvSystemType("1");
|
task.setAgvSystemType("1");
|
||||||
task.setPointCode1(startPoint);
|
task.setPointCode1(startPoint);
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import cn.code.nl.module.wms.controller.admin.emptyvehicle.vo.EmptyVehicleTaskCr
|
|||||||
import cn.code.nl.module.wms.dal.dataobject.structAttr.StrucAttrDO;
|
import cn.code.nl.module.wms.dal.dataobject.structAttr.StrucAttrDO;
|
||||||
import cn.code.nl.module.wms.dal.dataobject.structAttr.EmptyVehicleRowCandidate;
|
import cn.code.nl.module.wms.dal.dataobject.structAttr.EmptyVehicleRowCandidate;
|
||||||
import cn.code.nl.module.wms.dal.mysql.structAttr.StrucAttrMapper;
|
import cn.code.nl.module.wms.dal.mysql.structAttr.StrucAttrMapper;
|
||||||
|
import cn.code.nl.module.wms.enums.task.WmsTaskTypeEnum;
|
||||||
import jakarta.annotation.Resource;
|
import jakarta.annotation.Resource;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
@@ -39,7 +40,8 @@ public class EmptyVehicleServiceImpl implements EmptyVehicleService {
|
|||||||
task.setBizType(inbound ? "EMPTY_VEHICLE_IN" : "EMPTY_VEHICLE_OUT");
|
task.setBizType(inbound ? "EMPTY_VEHICLE_IN" : "EMPTY_VEHICLE_OUT");
|
||||||
task.setBizId(struct.getStructId());
|
task.setBizId(struct.getStructId());
|
||||||
task.setHandleCode("EMPTYVEHICLETASK");
|
task.setHandleCode("EMPTYVEHICLETASK");
|
||||||
task.setTaskType(inbound ? "010501" : "010503");
|
task.setTaskType(inbound ? WmsTaskTypeEnum.EMPTY_PALLET_INBOUND.getCode()
|
||||||
|
: WmsTaskTypeEnum.EMPTY_PALLET_OUTBOUND.getCode());
|
||||||
task.setAcsTaskType("7");
|
task.setAcsTaskType("7");
|
||||||
task.setAgvSystemType("1");
|
task.setAgvSystemType("1");
|
||||||
task.setPointCode1(inbound ? reqVO.getDeviceCode() : struct.getStructCode());
|
task.setPointCode1(inbound ? reqVO.getDeviceCode() : struct.getStructCode());
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package cn.code.nl.module.wms.service.iostorinv;
|
package cn.code.nl.module.wms.service.iostorinv;
|
||||||
|
|
||||||
import cn.code.nl.module.wms.task.InTask;
|
import cn.code.nl.module.wms.task.InTask;
|
||||||
|
import cn.code.nl.module.wms.enums.task.WmsTaskTypeEnum;
|
||||||
import cn.hutool.core.util.IdUtil;
|
import cn.hutool.core.util.IdUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import cn.code.nl.framework.common.pojo.CommonResult;
|
import cn.code.nl.framework.common.pojo.CommonResult;
|
||||||
@@ -553,7 +554,7 @@ public class InboundIostorInvServiceImpl implements InboundIostorInvService {
|
|||||||
task.setBizType("INBOUND");
|
task.setBizType("INBOUND");
|
||||||
task.setBizId(bizId);
|
task.setBizId(bizId);
|
||||||
task.setHandleCode(InTask.class.getName());
|
task.setHandleCode(InTask.class.getName());
|
||||||
task.setTaskType("010501");
|
task.setTaskType(WmsTaskTypeEnum.FINISHED_GOODS_INBOUND.getCode());
|
||||||
task.setAcsTaskType("7");
|
task.setAcsTaskType("7");
|
||||||
task.setAgvSystemType("1");
|
task.setAgvSystemType("1");
|
||||||
task.setPointCode1(sourcePoint);
|
task.setPointCode1(sourcePoint);
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package cn.code.nl.module.wms.service.iostorinv;
|
|||||||
|
|
||||||
import cn.code.nl.module.wms.task.MoveTask;
|
import cn.code.nl.module.wms.task.MoveTask;
|
||||||
import cn.code.nl.module.wms.task.OutTask;
|
import cn.code.nl.module.wms.task.OutTask;
|
||||||
|
import cn.code.nl.module.wms.enums.task.WmsTaskTypeEnum;
|
||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
import cn.hutool.core.util.IdUtil;
|
import cn.hutool.core.util.IdUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
@@ -618,7 +619,7 @@ public class IostorInvServiceImpl implements IostorInvService {
|
|||||||
.findFirst()
|
.findFirst()
|
||||||
.orElseThrow();
|
.orElseThrow();
|
||||||
// 10. 任务起点、目的点严格使用移库单明细,保证移库任务与移库单据完全一致。
|
// 10. 任务起点、目的点严格使用移库单明细,保证移库任务与移库单据完全一致。
|
||||||
Long taskId = createAndIssueTask("010505", "移库任务",
|
Long taskId = createAndIssueTask(WmsTaskTypeEnum.FINISHED_GOODS_MOVE.getCode(), "移库任务",
|
||||||
moveDetail.getTurnoutStructCode(), moveDetail.getTurninStructCode(),
|
moveDetail.getTurnoutStructCode(), moveDetail.getTurninStructCode(),
|
||||||
action.vehicleCode(), null, null, taskGroupId, ++sortSeq,
|
action.vehicleCode(), null, null, taskGroupId, ++sortSeq,
|
||||||
"MOVE", String.valueOf(moveDetail.getMoveinvdtlId()));
|
"MOVE", String.valueOf(moveDetail.getMoveinvdtlId()));
|
||||||
@@ -633,7 +634,7 @@ public class IostorInvServiceImpl implements IostorInvService {
|
|||||||
}
|
}
|
||||||
// 13. 比较两个出库点未完成任务数,选择当前负载较小的目的点。
|
// 13. 比较两个出库点未完成任务数,选择当前负载较小的目的点。
|
||||||
String destinationPoint = chooseDestination(destinationLoads);
|
String destinationPoint = chooseDestination(destinationLoads);
|
||||||
Long taskId = createAndIssueTask("010503", "出库任务", source.getStructCode(),
|
Long taskId = createAndIssueTask(WmsTaskTypeEnum.FINISHED_GOODS_OUTBOUND.getCode(), "出库任务", source.getStructCode(),
|
||||||
destinationPoint, action.vehicleCode(), detail.getMaterialId(),
|
destinationPoint, action.vehicleCode(), detail.getMaterialId(),
|
||||||
detail.getMaterialCode(), taskGroupId, ++sortSeq, "OUT",
|
detail.getMaterialCode(), taskGroupId, ++sortSeq, "OUT",
|
||||||
vehicleAllocations.get(0).getIostorinvdisId());
|
vehicleAllocations.get(0).getIostorinvdisId());
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import cn.code.nl.module.wms.dal.dataobject.point.ShippingPointRowCandidate;
|
|||||||
import cn.code.nl.module.wms.dal.dataobject.point.WmsPointDO;
|
import cn.code.nl.module.wms.dal.dataobject.point.WmsPointDO;
|
||||||
import cn.code.nl.module.wms.dal.mysql.iostorinvdis.IostorinvDisMapper;
|
import cn.code.nl.module.wms.dal.mysql.iostorinvdis.IostorinvDisMapper;
|
||||||
import cn.code.nl.module.wms.dal.mysql.point.WmsPointMapper;
|
import cn.code.nl.module.wms.dal.mysql.point.WmsPointMapper;
|
||||||
|
import cn.code.nl.module.wms.enums.task.WmsTaskTypeEnum;
|
||||||
import jakarta.annotation.Resource;
|
import jakarta.annotation.Resource;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
@@ -117,7 +118,7 @@ public class ShippingAreaServiceImpl implements ShippingAreaService {
|
|||||||
task.setBizType(SHIPPING_AREA_BIZ_TYPE);
|
task.setBizType(SHIPPING_AREA_BIZ_TYPE);
|
||||||
task.setBizId(billId);
|
task.setBizId(billId);
|
||||||
task.setHandleCode(SHIPPING_AREA_HANDLE_CODE);
|
task.setHandleCode(SHIPPING_AREA_HANDLE_CODE);
|
||||||
task.setTaskType("010503");
|
task.setTaskType(WmsTaskTypeEnum.FINISHED_GOODS_OUTBOUND.getCode());
|
||||||
task.setAcsTaskType("7");
|
task.setAcsTaskType("7");
|
||||||
task.setAgvSystemType("1");
|
task.setAgvSystemType("1");
|
||||||
task.setPointCode1(reqVO.getDeviceCode());
|
task.setPointCode1(reqVO.getDeviceCode());
|
||||||
|
|||||||
@@ -4,9 +4,19 @@ import cn.code.nl.module.task.dto.TransportTaskCreateReqDTO;
|
|||||||
import cn.code.nl.module.wms.api.emptybox.dto.EmptyBoxTrussInboundCreateReq;
|
import cn.code.nl.module.wms.api.emptybox.dto.EmptyBoxTrussInboundCreateReq;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||||
|
|
||||||
class EmptyBoxServiceImplTest {
|
class EmptyBoxServiceImplTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void shouldGenerateReservationCodeWithinStructTaskCodeLimit() {
|
||||||
|
String reservationCode = new EmptyBoxServiceImpl().generateReservationCode();
|
||||||
|
|
||||||
|
assertFalse(reservationCode.isBlank());
|
||||||
|
assertTrue(reservationCode.length() <= 20);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void shouldBuildEmptyBoxTrussInboundTask() {
|
void shouldBuildEmptyBoxTrussInboundTask() {
|
||||||
EmptyBoxTrussInboundCreateReq req = new EmptyBoxTrussInboundCreateReq();
|
EmptyBoxTrussInboundCreateReq req = new EmptyBoxTrussInboundCreateReq();
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ VITE_PORT=5999
|
|||||||
VITE_BASE=/
|
VITE_BASE=/
|
||||||
|
|
||||||
# 请求路径
|
# 请求路径
|
||||||
VITE_BASE_URL=http://127.0.0.1:48080
|
VITE_BASE_URL=http://localhost:48080
|
||||||
# 接口地址
|
# 接口地址
|
||||||
VITE_GLOB_API_URL=/admin-api
|
VITE_GLOB_API_URL=/admin-api
|
||||||
# 文件上传类型:server - 后端上传, client - 前端直连上传,仅支持S3服务
|
# 文件上传类型:server - 后端上传, client - 前端直连上传,仅支持S3服务
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
VITE_BASE=/
|
VITE_BASE=/
|
||||||
|
|
||||||
# 请求路径
|
# 请求路径
|
||||||
VITE_BASE_URL=http://127.0.0.1:48080
|
VITE_BASE_URL=http://localhost:48080
|
||||||
# 接口地址
|
# 接口地址
|
||||||
VITE_GLOB_API_URL=/admin-api
|
VITE_GLOB_API_URL=/admin-api
|
||||||
# 文件上传类型:server - 后端上传, client - 前端直连上传,仅支持S3服务
|
# 文件上传类型:server - 后端上传, client - 前端直连上传,仅支持S3服务
|
||||||
|
|||||||
27
sql/mysql/wms_task_type.sql
Normal file
27
sql/mysql/wms_task_type.sql
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
-- WMS 运输任务类型。编码同时区分库存对象和作业方向。
|
||||||
|
-- 脚本按任务分类根节点和编码幂等插入,可重复执行。
|
||||||
|
|
||||||
|
INSERT INTO base_classstandard
|
||||||
|
(class_id, class_code, class_name, class_desc, parent_class_id, deleted,
|
||||||
|
sort, status, creator, create_time, updater, update_time)
|
||||||
|
SELECT 229000000000010500 + task_type.sort, task_type.class_code, task_type.class_name,
|
||||||
|
task_type.class_name, root.class_id, '0', task_type.sort, 0,
|
||||||
|
'1', NOW(), '1', NOW()
|
||||||
|
FROM base_classstandard root
|
||||||
|
JOIN (
|
||||||
|
SELECT '010501' class_code, '成品入库' class_name, 1 sort
|
||||||
|
UNION ALL SELECT '010502', '成品出库', 2
|
||||||
|
UNION ALL SELECT '010503', '成品移库', 3
|
||||||
|
UNION ALL SELECT '010504', '空托盘入库', 4
|
||||||
|
UNION ALL SELECT '010505', '空托盘出库', 5
|
||||||
|
UNION ALL SELECT '010506', '空木箱入库', 6
|
||||||
|
UNION ALL SELECT '010507', '空木箱出库', 7
|
||||||
|
UNION ALL SELECT '010508', '空木箱移库', 8
|
||||||
|
) task_type ON 1 = 1
|
||||||
|
WHERE root.class_code = '0002'
|
||||||
|
AND root.deleted = '0'
|
||||||
|
AND NOT EXISTS (
|
||||||
|
SELECT 1 FROM base_classstandard existing
|
||||||
|
WHERE existing.class_code = task_type.class_code
|
||||||
|
AND existing.deleted = '0'
|
||||||
|
);
|
||||||
Reference in New Issue
Block a user