From dad15fb31e63385b939bfaf598151c40e8050cf8 Mon Sep 17 00:00:00 2001 From: zxy Date: Fri, 20 Mar 2026 10:17:26 +0800 Subject: [PATCH] =?UTF-8?q?1.=E4=BC=98=E5=8C=96=E7=89=A9=E6=96=99=E5=A4=A7?= =?UTF-8?q?=E7=B1=BB=E7=BC=96=E7=A0=81=E7=BB=B4=E6=8A=A4=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=EF=BC=8C=E6=96=B0=E5=A2=9E=E7=BC=96=E7=A0=81=E5=94=AF=E4=B8=80?= =?UTF-8?q?=E6=80=A7=E6=A0=A1=E9=AA=8C=E3=80=81=E8=87=AA=E5=8A=A8=E7=94=9F?= =?UTF-8?q?=E6=88=90=E9=80=BB=E8=BE=91=E5=8F=8A=E9=94=99=E8=AF=AF=E7=A0=81?= =?UTF-8?q?=EF=BC=8C=E5=B9=B6=E5=AE=8C=E5=96=84=E5=89=8D=E7=AB=AF=E8=A1=A8?= =?UTF-8?q?=E5=8D=95=E6=A0=A1=E9=AA=8C=E4=B8=8E=E7=95=8C=E9=9D=A2=E5=AD=97?= =?UTF-8?q?=E6=AE=B5=E8=B0=83=E6=95=B4;=202.=E6=96=B0=E5=A2=9E=E7=89=A9?= =?UTF-8?q?=E6=96=99=E7=AE=A1=E7=90=86=E6=A0=B9=E6=8D=AE=E7=89=A9=E6=96=99?= =?UTF-8?q?=E5=A4=A7=E7=B1=BB=E8=87=AA=E5=8A=A8=E7=94=9F=E6=88=90=E7=89=A9?= =?UTF-8?q?=E6=96=99=E7=BC=96=E7=A0=81=E5=8A=9F=E8=83=BD;=203.=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E9=A1=B9=E7=9B=AE=E8=AE=A2=E5=8D=95=E8=AF=A6=E6=83=85?= =?UTF-8?q?=E9=A1=B5=E8=BE=85=E5=8A=A9=E9=A1=B9=E6=A0=A1=E9=AA=8C=E9=80=BB?= =?UTF-8?q?=E8=BE=91=E5=8F=8A=E4=BE=9B=E5=BA=94=E5=95=86=E8=A1=A8=E5=8D=95?= =?UTF-8?q?=E7=A8=8E=E7=8E=87=E5=BF=85=E5=A1=AB=E6=A0=A1=E9=AA=8C;?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module/heli/enums/ErrorCodeConstants.java | 7 +- .../admin/matcode/MatCodeController.java | 16 +++-- .../admin/matcode/vo/MatCodeRespVO.java | 3 - .../admin/material/vo/MaterialRespVO.java | 3 + .../admin/material/vo/MaterialSaveReqVO.java | 3 + .../dal/dataobject/matcode/MatCodeDO.java | 3 - .../dal/dataobject/material/MaterialDO.java | 3 + .../heli/dal/mysql/matcode/MatCodeMapper.java | 11 +++ .../heli/service/matcode/MatCodeService.java | 8 ++- .../service/matcode/MatCodeServiceImpl.java | 70 ++++++++++++++++++- .../src/api/heli/matcode/index.ts | 5 ++ .../src/views/heli/matcode/MatCodeForm.vue | 16 +++-- .../src/views/heli/matcode/index.vue | 34 ++------- .../src/views/heli/material/MaterialForm.vue | 25 ++++++- .../src/views/heli/projectorder/detail.vue | 5 +- .../src/views/heli/supplier/SupplierForm.vue | 2 +- 16 files changed, 155 insertions(+), 59 deletions(-) diff --git a/mes-module-heli/mes-module-heli-api/src/main/java/com/chanko/yunxi/mes/module/heli/enums/ErrorCodeConstants.java b/mes-module-heli/mes-module-heli-api/src/main/java/com/chanko/yunxi/mes/module/heli/enums/ErrorCodeConstants.java index f9d52bbb..8d17aeb4 100644 --- a/mes-module-heli/mes-module-heli-api/src/main/java/com/chanko/yunxi/mes/module/heli/enums/ErrorCodeConstants.java +++ b/mes-module-heli/mes-module-heli-api/src/main/java/com/chanko/yunxi/mes/module/heli/enums/ErrorCodeConstants.java @@ -176,7 +176,10 @@ public interface ErrorCodeConstants { ErrorCode YEAR_NUM_NOT_EXISTS = new ErrorCode(1_013_011, "数据已过期,请重新修改"); ErrorCode PROCESS_DETAIL_NOT_EXISTS = new ErrorCode(1_013_012, "数据已过期,请重新修改"); - // ========== 物料大类编码维护 TODO 补充编号 ========== - ErrorCode MAT_CODE_NOT_EXISTS = new ErrorCode(1_014_001, "物料大类编码维护不存在"); + // ========== 物料大类编码维护 ========== + ErrorCode MAT_CODE_NOT_EXISTS = new ErrorCode(1_014_001, "该物料大类不存在"); + ErrorCode MAT_CAT_CODE_REPEAT = new ErrorCode(1_014_002, "该物料大类已存在"); + ErrorCode MAT_CAT_CODE_DISABLED = new ErrorCode(1_014_003, "该物料大类没有维护物料大类编码,请维护!"); + ErrorCode MAT_CAT_CODE_ERROR = new ErrorCode(1_014_004, "该物料大类编码不正确,请检查!"); } diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/matcode/MatCodeController.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/matcode/MatCodeController.java index 53dabda7..39c8db4a 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/matcode/MatCodeController.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/matcode/MatCodeController.java @@ -14,20 +14,13 @@ import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Operation; import javax.validation.*; -import javax.servlet.http.*; -import java.util.*; -import java.io.IOException; -import com.chanko.yunxi.mes.framework.common.pojo.PageParam; import com.chanko.yunxi.mes.framework.common.pojo.PageResult; import com.chanko.yunxi.mes.framework.common.pojo.CommonResult; import com.chanko.yunxi.mes.framework.common.util.object.BeanUtils; import static com.chanko.yunxi.mes.framework.common.pojo.CommonResult.success; -import com.chanko.yunxi.mes.framework.excel.core.util.ExcelUtils; -import com.chanko.yunxi.mes.framework.operatelog.core.annotations.OperateLog; -import static com.chanko.yunxi.mes.framework.operatelog.core.enums.OperateTypeEnum.*; @@ -73,6 +66,15 @@ public class MatCodeController { return success(BeanUtils.toBean(matCode, MatCodeRespVO.class)); } + @GetMapping("/getMatCatCode") + @Operation(summary = "获得物料大类编码维护") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('base:mat-code:query')") + public CommonResult getMatCatCode(@RequestParam("matCatCode") String matCatCode) { + String code = matCodeService.getMatCatCode(matCatCode); + return success(code); + } + @GetMapping("/page") @Operation(summary = "获得物料大类编码维护分页") @PreAuthorize("@ss.hasPermission('base:mat-code:query')") diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/matcode/vo/MatCodeRespVO.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/matcode/vo/MatCodeRespVO.java index 65d104bb..d7024032 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/matcode/vo/MatCodeRespVO.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/matcode/vo/MatCodeRespVO.java @@ -2,9 +2,6 @@ package com.chanko.yunxi.mes.module.heli.controller.admin.matcode.vo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; -import java.util.*; -import java.util.*; -import org.springframework.format.annotation.DateTimeFormat; import java.time.LocalDateTime; import com.alibaba.excel.annotation.*; diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/material/vo/MaterialRespVO.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/material/vo/MaterialRespVO.java index fb01aaea..7fb6b0c0 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/material/vo/MaterialRespVO.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/material/vo/MaterialRespVO.java @@ -136,4 +136,7 @@ public class MaterialRespVO { @ExcelProperty("首选供应商名称") private String mainSupplierName; + private String matCate; + + } diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/material/vo/MaterialSaveReqVO.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/material/vo/MaterialSaveReqVO.java index d5d84fbc..84316fcd 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/material/vo/MaterialSaveReqVO.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/material/vo/MaterialSaveReqVO.java @@ -94,4 +94,7 @@ public class MaterialSaveReqVO { @Schema(description = "物料logo地址") private String logo; + @Schema(description = "物料大类") + private String matCate; + } diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/matcode/MatCodeDO.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/matcode/MatCodeDO.java index d0985405..6f237968 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/matcode/MatCodeDO.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/matcode/MatCodeDO.java @@ -1,9 +1,6 @@ package com.chanko.yunxi.mes.module.heli.dal.dataobject.matcode; import lombok.*; -import java.util.*; -import java.time.LocalDateTime; -import java.time.LocalDateTime; import com.baomidou.mybatisplus.annotation.*; import com.chanko.yunxi.mes.framework.mybatis.core.dataobject.BaseDO; diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/material/MaterialDO.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/material/MaterialDO.java index 2e1cb4fe..32a18ec3 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/material/MaterialDO.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/material/MaterialDO.java @@ -194,4 +194,7 @@ public class MaterialDO extends TenantBaseDO { private Long purchaseOrderNoDetailId; @TableField(exist = false) private Long purchaseOrderNoId; + + private String matCate; + } diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/matcode/MatCodeMapper.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/matcode/MatCodeMapper.java index cf11ef45..7de8cc78 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/matcode/MatCodeMapper.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/matcode/MatCodeMapper.java @@ -28,4 +28,15 @@ public interface MatCodeMapper extends BaseMapperX { .orderByDesc(MatCodeDO::getId)); } + default MatCodeDO selectByMatCatCode(String matCatCode) { + return selectOne(new LambdaQueryWrapperX() + .eq(MatCodeDO::getMatCatCode, matCatCode)); + } + + default MatCodeDO selectByMatCatCodeAndIdNot(String matCatCode, Long id) { + return selectOne(new LambdaQueryWrapperX() + .eq(MatCodeDO::getMatCatCode, matCatCode) + .ne(MatCodeDO::getId, id)); + } + } diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/matcode/MatCodeService.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/matcode/MatCodeService.java index 1cd546bd..a787f754 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/matcode/MatCodeService.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/matcode/MatCodeService.java @@ -2,11 +2,10 @@ package com.chanko.yunxi.mes.module.heli.service.matcode; import com.chanko.yunxi.mes.framework.common.pojo.PageResult; import com.chanko.yunxi.mes.module.heli.controller.admin.matcode.vo.MatCodePageReqVO; -import com.chanko.yunxi.mes.module.heli.controller.admin.matcode.vo.MatCodeRespVO; import com.chanko.yunxi.mes.module.heli.controller.admin.matcode.vo.MatCodeSaveReqVO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.matcode.MatCodeDO; -import javax.validation.*; +import javax.validation.Valid; /** @@ -54,4 +53,9 @@ public interface MatCodeService { */ PageResult getMatCodePage(MatCodePageReqVO pageReqVO); + + MatCodeDO getByMatCatCode(String matCatCode); + + + String getMatCatCode(String matCatCode); } diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/matcode/MatCodeServiceImpl.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/matcode/MatCodeServiceImpl.java index a260c87d..9deb7d65 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/matcode/MatCodeServiceImpl.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/matcode/MatCodeServiceImpl.java @@ -6,6 +6,7 @@ import com.chanko.yunxi.mes.module.heli.controller.admin.matcode.vo.MatCodePageR import com.chanko.yunxi.mes.module.heli.controller.admin.matcode.vo.MatCodeSaveReqVO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.matcode.MatCodeDO; import com.chanko.yunxi.mes.module.heli.dal.mysql.matcode.MatCodeMapper; +import com.chanko.yunxi.mes.module.heli.enums.ErrorCodeConstants; import com.chanko.yunxi.mes.module.system.dal.dataobject.user.AdminUserDO; import com.chanko.yunxi.mes.module.system.dal.mysql.user.AdminUserMapper; import org.springframework.stereotype.Service; @@ -14,6 +15,7 @@ import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; import static com.chanko.yunxi.mes.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.chanko.yunxi.mes.module.heli.enums.ErrorCodeConstants.MAT_CAT_CODE_DISABLED; import static com.chanko.yunxi.mes.module.heli.enums.ErrorCodeConstants.MAT_CODE_NOT_EXISTS; /** @@ -27,11 +29,29 @@ public class MatCodeServiceImpl implements MatCodeService { @Resource private MatCodeMapper matCodeMapper; + @Resource private AdminUserMapper userMapper; + public static String generateMaterialCode(String matTypeCode, String curMaxSeq) { + try { + int matCode = Integer.parseInt(matTypeCode); + // curMaxSeq 转换为数字 + int curMaxSeqNum = Integer.parseInt(curMaxSeq) + 1; + int ss = matCode + curMaxSeqNum; + + // ss 转为字符串,不足 5 位补 前面补充0 + return String.format("%05d", ss); + } catch (Exception e) { + throw exception(ErrorCodeConstants.MAT_CAT_CODE_ERROR); + } + + } + @Override public Long createMatCode(MatCodeSaveReqVO createReqVO) { + // 校验 matCatCode 唯一性 + validateMatCatCodeUnique(null, createReqVO.getMatCatCode()); // 插入 MatCodeDO matCode = BeanUtils.toBean(createReqVO, MatCodeDO.class); matCodeMapper.insert(matCode); @@ -43,11 +63,33 @@ public class MatCodeServiceImpl implements MatCodeService { public void updateMatCode(MatCodeSaveReqVO updateReqVO) { // 校验存在 validateMatCodeExists(updateReqVO.getId()); + // 校验 matCatCode 唯一性(更新时允许更新自己) + validateMatCatCodeUnique(updateReqVO.getId(), updateReqVO.getMatCatCode()); // 更新 MatCodeDO updateObj = BeanUtils.toBean(updateReqVO, MatCodeDO.class); matCodeMapper.updateById(updateObj); } + /** + * 校验物料大类编码唯一性 + * + * @param id ID,创建时传 null,更新时传当前记录 ID + * @param matCatCode 物料大类编码 + */ + private void validateMatCatCodeUnique(Long id, String matCatCode) { + MatCodeDO existing; + if (id == null) { + // 创建:检查是否存在相同的 matCatCode + existing = matCodeMapper.selectByMatCatCode(matCatCode); + } else { + // 更新:检查是否存在其他记录使用了相同的 matCatCode + existing = matCodeMapper.selectByMatCatCodeAndIdNot(matCatCode, id); + } + if (existing != null) { + throw exception(ErrorCodeConstants.MAT_CAT_CODE_REPEAT); + } + } + @Override public void deleteMatCode(Long id) { // 校验存在 @@ -67,11 +109,33 @@ public class MatCodeServiceImpl implements MatCodeService { return matCodeMapper.selectById(id); } + @Override + public MatCodeDO getByMatCatCode(String matCatCode) { + MatCodeDO matCodeDO = matCodeMapper.selectByMatCatCode(matCatCode); + if (matCodeDO == null) { + throw exception(MAT_CODE_NOT_EXISTS); + } + return matCodeDO; + } + + @Override + public String getMatCatCode(String matCatCode) { + MatCodeDO matCodeDO = matCodeMapper.selectByMatCatCode(matCatCode); + if (matCodeDO == null) { + throw exception(MAT_CAT_CODE_DISABLED); + } + + if (Boolean.FALSE.equals(matCodeDO.getStatus())) { + throw exception(MAT_CAT_CODE_DISABLED); + } + return generateMaterialCode(matCodeDO.getMatTypeCode(), matCodeDO.getCurMaxSeq()); + } + @Override public PageResult getMatCodePage(MatCodePageReqVO pageReqVO) { - PageResult matCodeDOPageResult = matCodeMapper.selectPage(pageReqVO); + PageResult pageResult = matCodeMapper.selectPage(pageReqVO); // 查询创建人,根据creator字段,查询用户信息 - matCodeDOPageResult.getList().forEach(matCodeDO -> { + pageResult.getList().forEach(matCodeDO -> { if (matCodeDO.getCreator() != null) { AdminUserDO user = userMapper.selectById(matCodeDO.getCreator()); if (user != null) { @@ -79,7 +143,7 @@ public class MatCodeServiceImpl implements MatCodeService { } } }); - return matCodeDOPageResult; + return pageResult; } } diff --git a/mes-ui/mes-ui-admin-vue3/src/api/heli/matcode/index.ts b/mes-ui/mes-ui-admin-vue3/src/api/heli/matcode/index.ts index 07403b8f..26d42403 100644 --- a/mes-ui/mes-ui-admin-vue3/src/api/heli/matcode/index.ts +++ b/mes-ui/mes-ui-admin-vue3/src/api/heli/matcode/index.ts @@ -19,6 +19,11 @@ export const getMatCode = async (id: number) => { return await request.get({ url: `/heli/matcode/get?id=` + id }) } +// 查询物料大类编码维护详情 +export const getMatCatCode = async (id: number) => { + return await request.get({ url: `/heli/matcode/getMatCatCode?matCatCode=` + id }) +} + // 新增物料大类编码维护 export const createMatCode = async (data: MatCodeVO) => { return await request.post({ url: `/heli/matcode/create`, data }) diff --git a/mes-ui/mes-ui-admin-vue3/src/views/heli/matcode/MatCodeForm.vue b/mes-ui/mes-ui-admin-vue3/src/views/heli/matcode/MatCodeForm.vue index 62ddea3e..fba39195 100644 --- a/mes-ui/mes-ui-admin-vue3/src/views/heli/matcode/MatCodeForm.vue +++ b/mes-ui/mes-ui-admin-vue3/src/views/heli/matcode/MatCodeForm.vue @@ -9,7 +9,7 @@ v-loading="formLoading" > - + - + - + @@ -58,8 +58,14 @@ const formData = ref({ }) const formRules = reactive({ matCatCode: [{ required: true, message: '物料大类不能为空', trigger: 'blur' }], - matTypeCode: [{ required: true, message: '物料分类编码不能为空', trigger: 'blur' }], - curMaxSeq: [{ required: true, message: '最大流水号不能为空', trigger: 'blur' }], + matTypeCode: [ + { required: true, message: '物料分类编码不能为空', trigger: 'blur' }, + { max: 10, message: '物料分类编码最多10个字符', trigger: 'blur' } + ], + curMaxSeq: [ + { required: true, message: '最大流水号不能为空', trigger: 'blur' }, + { max: 5, message: '最大流水号最多5个字符', trigger: 'blur' } + ], status: [{ required: true, message: '状态不能为空', trigger: 'blur' }], }) const formRef = ref() // 表单 Ref diff --git a/mes-ui/mes-ui-admin-vue3/src/views/heli/matcode/index.vue b/mes-ui/mes-ui-admin-vue3/src/views/heli/matcode/index.vue index 8718e956..bcdf57b7 100644 --- a/mes-ui/mes-ui-admin-vue3/src/views/heli/matcode/index.vue +++ b/mes-ui/mes-ui-admin-vue3/src/views/heli/matcode/index.vue @@ -6,9 +6,9 @@ :model="queryParams" ref="queryFormRef" :inline="true" - label-width="80px" + label-width="90px" > - + - + 新增 - - - - - - - - - @@ -61,7 +52,7 @@ - +