diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/template/MesQcTemplateController.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/template/MesQcTemplateController.java index e9150e6..bd63231 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/template/MesQcTemplateController.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/template/MesQcTemplateController.java @@ -16,8 +16,6 @@ import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.item.MesQcTem import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.item.MesQcTemplateItemRespVO; import cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo.item.MesQcTemplateItemSaveReqVO; import cn.iocoder.yudao.module.mes.dal.dataobject.qc.MesQcTemplateDO; -import cn.iocoder.yudao.module.mes.dal.dataobject.qc.MesQcTemplateIndicatorDO; -import cn.iocoder.yudao.module.mes.dal.dataobject.qc.MesQcTemplateItemDO; import cn.iocoder.yudao.module.mes.service.qc.MesQcTemplateService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; @@ -75,16 +73,16 @@ public class MesQcTemplateController { @Parameter(name = "id", description = "编号", required = true, example = "1024") @PreAuthorize("@ss.hasPermission('mes:qc-template:query')") public CommonResult getTemplate(@RequestParam("id") Long id) { - MesQcTemplateDO template = templateService.getTemplate(id); - return success(BeanUtils.toBean(template, MesQcTemplateRespVO.class)); + // TODO @AI:service 只返回 do;数据拼接放在 controller 里; + return success(templateService.getTemplate(id)); } @GetMapping("/page") @Operation(summary = "获得质检方案分页") @PreAuthorize("@ss.hasPermission('mes:qc-template:query')") public CommonResult> getTemplatePage(@Valid MesQcTemplatePageReqVO pageReqVO) { - PageResult pageResult = templateService.getTemplatePage(pageReqVO); - return success(BeanUtils.toBean(pageResult, MesQcTemplateRespVO.class)); + // TODO @AI:service 只返回 do;数据拼接放在 controller 里; + return success(templateService.getTemplatePage(pageReqVO)); } @GetMapping("/simple-list") @@ -101,9 +99,9 @@ public class MesQcTemplateController { public void exportTemplateExcel(@Valid MesQcTemplatePageReqVO pageReqVO, HttpServletResponse response) throws IOException { pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); - List list = templateService.getTemplatePage(pageReqVO).getList(); - ExcelUtils.write(response, "质检方案.xls", "数据", MesQcTemplateRespVO.class, - BeanUtils.toBean(list, MesQcTemplateRespVO.class)); + List list = templateService.getTemplatePage(pageReqVO).getList(); + // TODO @AI:service 只返回 do;数据拼接放在 controller 里; + ExcelUtils.write(response, "质检方案.xls", "数据", MesQcTemplateRespVO.class, list); } // ========== 质检方案-检测指标项 ========== @@ -139,8 +137,8 @@ public class MesQcTemplateController { @Parameter(name = "id", description = "编号", required = true, example = "1024") @PreAuthorize("@ss.hasPermission('mes:qc-template:query')") public CommonResult getTemplateIndicator(@RequestParam("id") Long id) { - MesQcTemplateIndicatorDO indicator = templateService.getTemplateIndicator(id); - return success(BeanUtils.toBean(indicator, MesQcTemplateIndicatorRespVO.class)); + // TODO @AI:service 只返回 do;数据拼接放在 controller 里; + return success(templateService.getTemplateIndicator(id)); } @GetMapping("/indicator/page") @@ -148,8 +146,8 @@ public class MesQcTemplateController { @PreAuthorize("@ss.hasPermission('mes:qc-template:query')") public CommonResult> getTemplateIndicatorPage( @Valid MesQcTemplateIndicatorPageReqVO pageReqVO) { - PageResult pageResult = templateService.getTemplateIndicatorPage(pageReqVO); - return success(BeanUtils.toBean(pageResult, MesQcTemplateIndicatorRespVO.class)); + // TODO @AI:service 只返回 do;数据拼接放在 controller 里; + return success(templateService.getTemplateIndicatorPage(pageReqVO)); } // ========== 质检方案-产品关联 ========== @@ -185,8 +183,8 @@ public class MesQcTemplateController { @Parameter(name = "id", description = "编号", required = true, example = "1024") @PreAuthorize("@ss.hasPermission('mes:qc-template:query')") public CommonResult getTemplateItem(@RequestParam("id") Long id) { - MesQcTemplateItemDO item = templateService.getTemplateItem(id); - return success(BeanUtils.toBean(item, MesQcTemplateItemRespVO.class)); + // TODO @AI:service 只返回 do;数据拼接放在 controller 里; + return success(templateService.getTemplateItem(id)); } @GetMapping("/item/page") @@ -194,8 +192,8 @@ public class MesQcTemplateController { @PreAuthorize("@ss.hasPermission('mes:qc-template:query')") public CommonResult> getTemplateItemPage( @Valid MesQcTemplateItemPageReqVO pageReqVO) { - PageResult pageResult = templateService.getTemplateItemPage(pageReqVO); - return success(BeanUtils.toBean(pageResult, MesQcTemplateItemRespVO.class)); + // TODO @AI:service 只返回 do;数据拼接放在 controller 里; + return success(templateService.getTemplateItemPage(pageReqVO)); } } diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/template/vo/MesQcTemplatePageReqVO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/template/vo/MesQcTemplatePageReqVO.java index b2b81f0..f9a12ca 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/template/vo/MesQcTemplatePageReqVO.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/template/vo/MesQcTemplatePageReqVO.java @@ -6,6 +6,8 @@ import lombok.Data; import lombok.EqualsAndHashCode; import lombok.ToString; +import java.util.List; + @Schema(description = "管理后台 - MES 质检方案分页 Request VO") @Data @EqualsAndHashCode(callSuper = true) @@ -18,12 +20,10 @@ public class MesQcTemplatePageReqVO extends PageParam { @Schema(description = "方案名称", example = "出货检验") private String name; - // TODO @AI:会用 List - @Schema(description = "检测种类(模糊匹配)", example = "IQC") - private String types; + @Schema(description = "检测种类", example = "[1, 3]") + private List types; - // TODO @AI:使用 Boolean; - @Schema(description = "是否启用(Y/N)", example = "Y") - private String enableFlag; + @Schema(description = "是否启用", example = "true") + private Boolean enableFlag; } diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/template/vo/MesQcTemplateRespVO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/template/vo/MesQcTemplateRespVO.java index 366e6aa..4814c67 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/template/vo/MesQcTemplateRespVO.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/template/vo/MesQcTemplateRespVO.java @@ -6,6 +6,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import java.time.LocalDateTime; +import java.util.List; @Schema(description = "管理后台 - MES 质检方案 Response VO") @Data @@ -24,15 +25,13 @@ public class MesQcTemplateRespVO { @ExcelProperty("方案名称") private String name; - // TODO @AI:会用 List;这里不用 (逗号分隔:IQC,IPQC,OQC,RQC) 注释; - @Schema(description = "检测种类(逗号分隔:IQC,IPQC,OQC,RQC)", requiredMode = Schema.RequiredMode.REQUIRED, example = "IQC,OQC") + @Schema(description = "检测种类", requiredMode = Schema.RequiredMode.REQUIRED, example = "[1, 3]") @ExcelProperty("检测种类") - private String types; + private List types; - // TODO @AI:Boolean; - @Schema(description = "是否启用(Y/N)", requiredMode = Schema.RequiredMode.REQUIRED, example = "Y") + @Schema(description = "是否启用", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") @ExcelProperty("是否启用") - private String enableFlag; + private Boolean enableFlag; @Schema(description = "备注", example = "备注") @ExcelProperty("备注") diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/template/vo/MesQcTemplateSaveReqVO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/template/vo/MesQcTemplateSaveReqVO.java index 3c05c78..b878537 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/template/vo/MesQcTemplateSaveReqVO.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/template/vo/MesQcTemplateSaveReqVO.java @@ -2,8 +2,12 @@ package cn.iocoder.yudao.module.mes.controller.admin.qc.template.vo; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; import lombok.Data; +import java.util.List; + @Schema(description = "管理后台 - MES 质检方案新增/修改 Request VO") @Data public class MesQcTemplateSaveReqVO { @@ -19,15 +23,14 @@ public class MesQcTemplateSaveReqVO { @NotEmpty(message = "方案名称不能为空") private String name; - // TODO @AI:会用 List;这里不用 (逗号分隔:IQC,IPQC,OQC,RQC) 注释; - @Schema(description = "检测种类(逗号分隔:IQC,IPQC,OQC,RQC)", requiredMode = Schema.RequiredMode.REQUIRED, example = "IQC,OQC") - @NotEmpty(message = "检测种类不能为空") - private String types; + @Schema(description = "检测种类(1-IQC 2-IPQC 3-OQC 4-RQC,字典 mes_qc_type)", requiredMode = Schema.RequiredMode.REQUIRED, example = "[1, 3]") + @NotNull(message = "检测种类不能为空") + @Size(min = 1, message = "检测种类至少选择一项") + private List types; - // TODO @AI:Boolean; - @Schema(description = "是否启用(Y/N)", requiredMode = Schema.RequiredMode.REQUIRED, example = "Y") - @NotEmpty(message = "是否启用不能为空") - private String enableFlag; + @Schema(description = "是否启用", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") + @NotNull(message = "是否启用不能为空") + private Boolean enableFlag; @Schema(description = "备注", example = "备注") private String remark; diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/template/vo/indicator/MesQcTemplateIndicatorRespVO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/template/vo/indicator/MesQcTemplateIndicatorRespVO.java index 2829b58..bf79cbc 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/template/vo/indicator/MesQcTemplateIndicatorRespVO.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/template/vo/indicator/MesQcTemplateIndicatorRespVO.java @@ -21,10 +21,9 @@ public class MesQcTemplateIndicatorRespVO { private Long templateId; @Schema(description = "质检指标ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") - @ExcelProperty("质检指标ID") private Long indicatorId; - @Schema(description = "检测方法/检测要求", example = "目视检查外观") + @Schema(description = "检测方法", example = "目视检查外观") @ExcelProperty("检测方法") private String checkMethod; @@ -55,4 +54,22 @@ public class MesQcTemplateIndicatorRespVO { @ExcelProperty("创建时间") private LocalDateTime createTime; + // ========== JOIN mes_qc_indicator ========== + + @Schema(description = "检测项编码", example = "QI001") + @ExcelProperty("检测项编码") + private String indicatorCode; + + @Schema(description = "检测项名称", example = "长度") + @ExcelProperty("检测项名称") + private String indicatorName; + + @Schema(description = "检测项类型(字典 mes_index_type)", example = "SIZE") + @ExcelProperty("检测项类型") + private String indicatorType; + + @Schema(description = "检测工具", example = "卡尺") + @ExcelProperty("检测工具") + private String indicatorTool; + } diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/template/vo/item/MesQcTemplateItemRespVO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/template/vo/item/MesQcTemplateItemRespVO.java index 3b49f6e..91d4b2f 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/template/vo/item/MesQcTemplateItemRespVO.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/qc/template/vo/item/MesQcTemplateItemRespVO.java @@ -21,25 +21,21 @@ public class MesQcTemplateItemRespVO { private Long templateId; @Schema(description = "产品物料ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") - @ExcelProperty("产品物料ID") private Long itemId; @Schema(description = "最低检测数", example = "5") @ExcelProperty("最低检测数") private Integer quantityCheck; - // TODO @AI:VO 里,(0=不启用) 去掉 - @Schema(description = "最大不合格数(0=不启用)", example = "0") + @Schema(description = "最大不合格数", example = "0") @ExcelProperty("最大不合格数") private Integer quantityUnqualified; - // TODO @AI:VO 里,(0=不允许) 去掉 - @Schema(description = "最大致命缺陷率(%,0=不允许)", example = "0") + @Schema(description = "最大致命缺陷率(%)", example = "0") @ExcelProperty("致命缺陷率%") private BigDecimal criticalRate; - // TODO @AI:VO 里,(0=不允许) 去掉 - @Schema(description = "最大严重缺陷率(%,0=不允许)", example = "0") + @Schema(description = "最大严重缺陷率(%)", example = "0") @ExcelProperty("严重缺陷率%") private BigDecimal majorRate; @@ -55,4 +51,22 @@ public class MesQcTemplateItemRespVO { @ExcelProperty("创建时间") private LocalDateTime createTime; + // ========== JOIN mes_md_item ========== + + @Schema(description = "物料编码", example = "ITEM001") + @ExcelProperty("物料编码") + private String itemCode; + + @Schema(description = "物料名称", example = "螺丝") + @ExcelProperty("物料名称") + private String itemName; + + @Schema(description = "规格型号", example = "M3x10") + @ExcelProperty("规格型号") + private String specification; + + @Schema(description = "计量单位名称", example = "个") + @ExcelProperty("计量单位") + private String unitMeasureName; + } diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/qc/MesQcTemplateMapper.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/qc/MesQcTemplateMapper.java index 4acd5fb..8ebb94c 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/qc/MesQcTemplateMapper.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/qc/MesQcTemplateMapper.java @@ -18,12 +18,21 @@ import java.util.List; public interface MesQcTemplateMapper extends BaseMapperX { default PageResult selectPage(MesQcTemplatePageReqVO reqVO) { - return selectPage(reqVO, new LambdaQueryWrapperX() + LambdaQueryWrapperX query = new LambdaQueryWrapperX() .likeIfPresent(MesQcTemplateDO::getCode, reqVO.getCode()) .likeIfPresent(MesQcTemplateDO::getName, reqVO.getName()) - .likeIfPresent(MesQcTemplateDO::getTypes, reqVO.getTypes()) - .eqIfPresent(MesQcTemplateDO::getEnableFlag, reqVO.getEnableFlag()) - .orderByDesc(MesQcTemplateDO::getId)); + .orderByDesc(MesQcTemplateDO::getId); + // types: 取第一个值做 LIKE 匹配(简单实现,支持单值过滤) + // TODO @AI:find in set;你看看 mybatisutils 有类似的; + if (reqVO.getTypes() != null && !reqVO.getTypes().isEmpty()) { + query.like(MesQcTemplateDO::getTypes, String.valueOf(reqVO.getTypes().get(0))); + } + // TODO @AI:是不是里面就是 boolean + // enableFlag: 转为 Y/N 已经改成 boolean 了,数据库里也是 boolean + if (reqVO.getEnableFlag() != null) { + query.eq(MesQcTemplateDO::getEnableFlag, Boolean.TRUE.equals(reqVO.getEnableFlag()) ? "Y" : "N"); + } + return selectPage(reqVO, query); } default MesQcTemplateDO selectByCode(String code) { diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/DictTypeConstants.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/DictTypeConstants.java index 73fcdb5..d0caebc 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/DictTypeConstants.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/DictTypeConstants.java @@ -20,9 +20,9 @@ public interface DictTypeConstants { String MES_INDEX_TYPE = "mes_index_type"; // MES 检测项类型 String MES_QC_RESULT_TYPE = "mes_qc_result_type"; // MES 质检结果值类型 String MES_DEFECT_LEVEL = "mes_defect_level"; // MES 缺陷等级 - String MES_PRO_WORKORDER_STATUS = "mes_pro_workorder_status"; // MES 生产工单状态 - String MES_PRO_WORKORDER_SOURCE_TYPE = "mes_pro_workorder_source_type"; // MES 工单来源类型 - String MES_PRO_WORKORDER_TYPE = "mes_pro_workorder_type"; // MES 工单类型 + String MES_PRO_WORK_ORDER_STATUS = "mes_pro_work_order_status"; // MES 生产工单状态 + String MES_PRO_WORK_ORDER_SOURCE_TYPE = "mes_pro_work_order_source_type"; // MES 工单来源类型 + String MES_PRO_WORK_ORDER_TYPE = "mes_pro_work_order_type"; // MES 工单类型 String MES_QC_TYPE = "mes_qc_type"; // MES 检测种类(IQC/IPQC/OQC/RQC) } diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java index 4cf14ef..eafeaf2 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java @@ -87,6 +87,12 @@ public interface ErrorCodeConstants { // ========== MES 日历排班-班组(1-040-201-000) ========== ErrorCode CAL_TEAM_NOT_EXISTS = new ErrorCode(1_040_201_000, "班组不存在"); + ErrorCode CAL_TEAM_CODE_DUPLICATE = new ErrorCode(1_040_201_001, "班组编码已存在"); + // ========== MES 日历排班-班组成员(1-040-201-100) ========== + ErrorCode CAL_TEAM_MEMBER_NOT_EXISTS = new ErrorCode(1_040_201_100, "班组成员不存在"); + ErrorCode CAL_TEAM_MEMBER_USER_DUPLICATE = new ErrorCode(1_040_201_101, "该用户已分配到其他班组"); + // ========== MES 日历排班-班组排班(1-040-201-200) ========== + ErrorCode CAL_TEAM_SHIFT_NOT_EXISTS = new ErrorCode(1_040_201_200, "班组排班记录不存在"); // ========== MES 日历排班-排班计划(1-040-202-000) ========== ErrorCode CAL_PLAN_NOT_EXISTS = new ErrorCode(1_040_202_000, "排班计划不存在"); @@ -132,15 +138,16 @@ public interface ErrorCodeConstants { // ========== MES 生产管理-工序(1-040-500-000) ========== ErrorCode PRO_PROCESS_NOT_EXISTS = new ErrorCode(1_040_500_000, "工序不存在"); + ErrorCode PRO_PROCESS_CODE_EXISTS = new ErrorCode(1_040_500_001, "工序编码已存在"); // ========== MES 生产管理-工艺路线(1-040-501-000) ========== ErrorCode PRO_ROUTE_NOT_EXISTS = new ErrorCode(1_040_501_000, "工艺路线不存在"); // ========== MES 生产管理-生产工单(1-040-502-000) ========== - ErrorCode PRO_WORKORDER_NOT_EXISTS = new ErrorCode(1_040_502_000, "生产工单不存在"); - ErrorCode PRO_WORKORDER_CODE_DUPLICATE = new ErrorCode(1_040_502_001, "生产工单编码已存在"); - ErrorCode PRO_WORKORDER_NOT_PREPARE = new ErrorCode(1_040_502_002, "只能删除草稿状态的工单"); - ErrorCode PRO_WORKORDER_BOM_NOT_EXISTS = new ErrorCode(1_040_502_100, "生产工单BOM不存在"); + ErrorCode PRO_WORK_ORDER_NOT_EXISTS = new ErrorCode(1_040_502_000, "生产工单不存在"); + ErrorCode PRO_WORK_ORDER_CODE_DUPLICATE = new ErrorCode(1_040_502_001, "生产工单编码已存在"); + ErrorCode PRO_WORK_ORDER_NOT_PREPARE = new ErrorCode(1_040_502_002, "只能删除草稿状态的工单"); + ErrorCode PRO_WORK_ORDER_BOM_NOT_EXISTS = new ErrorCode(1_040_502_100, "生产工单BOM不存在"); // ========== MES 生产管理-生产任务(1-040-503-000) ========== ErrorCode PRO_TASK_NOT_EXISTS = new ErrorCode(1_040_503_000, "生产任务不存在"); @@ -166,14 +173,33 @@ public interface ErrorCodeConstants { // ========== MES 仓库管理-仓库(1-040-700-000) ========== ErrorCode WM_WAREHOUSE_NOT_EXISTS = new ErrorCode(1_040_700_000, "仓库不存在"); + ErrorCode WM_WAREHOUSE_CODE_DUPLICATE = new ErrorCode(1_040_700_001, "仓库编码已存在"); + ErrorCode WM_WAREHOUSE_NAME_DUPLICATE = new ErrorCode(1_040_700_002, "仓库名称已存在"); + ErrorCode WM_WAREHOUSE_HAS_LOCATION = new ErrorCode(1_040_700_003, "仓库下存在库区,无法删除"); + ErrorCode WM_WAREHOUSE_HAS_WORKSTATION = new ErrorCode(1_040_700_004, "仓库已被工作站引用,无法删除"); // ========== MES 仓库管理-库区(1-040-701-000) ========== - ErrorCode WM_STORAGE_AREA_NOT_EXISTS = new ErrorCode(1_040_701_000, "库区不存在"); + ErrorCode WM_WAREHOUSE_LOCATION_NOT_EXISTS = new ErrorCode(1_040_701_000, "库区不存在"); + ErrorCode WM_WAREHOUSE_LOCATION_CODE_DUPLICATE = new ErrorCode(1_040_701_001, "同一仓库下库区编码已存在"); + ErrorCode WM_WAREHOUSE_LOCATION_NAME_DUPLICATE = new ErrorCode(1_040_701_002, "同一仓库下库区名称已存在"); + ErrorCode WM_WAREHOUSE_LOCATION_HAS_AREA = new ErrorCode(1_040_701_003, "库区下存在库位,无法删除"); + ErrorCode WM_WAREHOUSE_LOCATION_HAS_WORKSTATION = new ErrorCode(1_040_701_004, "库区已被工作站引用,无法删除"); + ErrorCode WM_WAREHOUSE_REQUIRED = new ErrorCode(1_040_701_005, "选择库区时,仓库不能为空"); + ErrorCode WM_WAREHOUSE_LOCATION_RELATION_INVALID = new ErrorCode(1_040_701_006, "库区不属于所选仓库"); // ========== MES 仓库管理-库位(1-040-702-000) ========== - ErrorCode WM_STORAGE_LOCATION_NOT_EXISTS = new ErrorCode(1_040_702_000, "库位不存在"); + ErrorCode WM_WAREHOUSE_AREA_NOT_EXISTS = new ErrorCode(1_040_702_000, "库位不存在"); + ErrorCode WM_WAREHOUSE_AREA_CODE_DUPLICATE = new ErrorCode(1_040_702_001, "同一库区下库位编码已存在"); + ErrorCode WM_WAREHOUSE_AREA_NAME_DUPLICATE = new ErrorCode(1_040_702_002, "同一库区下库位名称已存在"); + ErrorCode WM_WAREHOUSE_AREA_HAS_WORKSTATION = new ErrorCode(1_040_702_003, "库位已被工作站引用,无法删除"); + ErrorCode WM_WAREHOUSE_LOCATION_REQUIRED = new ErrorCode(1_040_702_004, "选择库位时,库区不能为空"); + ErrorCode WM_WAREHOUSE_AREA_RELATION_INVALID = new ErrorCode(1_040_702_005, "库位不属于所选库区"); // ========== MES 仓库管理-库存(1-040-703-000) ========== ErrorCode WM_MATERIAL_STOCK_NOT_EXISTS = new ErrorCode(1_040_703_000, "库存记录不存在"); + // ========== 兼容旧命名(storage_area=库区,storage_location=库位) ========== + ErrorCode WM_STORAGE_AREA_NOT_EXISTS = WM_WAREHOUSE_LOCATION_NOT_EXISTS; + ErrorCode WM_STORAGE_LOCATION_NOT_EXISTS = WM_WAREHOUSE_AREA_NOT_EXISTS; + }