From 7d142b6afe96ff562c021980ebda0a9acea77d0f Mon Sep 17 00:00:00 2001 From: lym <1994302445@qq.com> Date: Fri, 14 Feb 2025 15:15:53 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9D=BF=E6=9D=90=E3=80=81=E9=85=8D=E4=BB=B6?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../executor/enums/ErrorCodeConstants.java | 10 ++-- .../admin/order/OrderController.java | 2 +- .../manage/enums/ErrorCodeConstants.java | 6 +- .../manage/enums/parts/CategoryEnum.java | 3 +- .../admin/parts/vo/PartsImportExcelVO.java | 34 +++++------ .../admin/parts/vo/PartsRespVO.java | 1 + .../admin/parts/vo/PartsSaveReqVO.java | 10 ++-- .../admin/plate/PlateController.java | 18 ++++-- .../plate/vo/plate/PlateImportExcelVO.java | 46 +++++++++------ .../admin/plate/vo/plate/PlateRespVO.java | 2 +- .../admin/plate/vo/plate/PlateSaveReqVO.java | 2 + .../service/parts/PartsExcelListener.java | 54 +++++++++++++----- .../service/parts/PartsServiceImpl.java | 33 +++++++++-- .../service/plate/PlateExcelListener.java | 9 +-- .../manage/service/plate/PlateService.java | 19 +++++- .../service/plate/PlateServiceImpl.java | 15 ++++- .../main/resources/type/excel_parts_add.xlsx | Bin 11851 -> 13610 bytes .../main/resources/type/excel_plate_add.xlsx | Bin 0 -> 11859 bytes .../system/enums/ErrorCodeConstants.java | 2 +- 19 files changed, 179 insertions(+), 87 deletions(-) create mode 100644 cf-module-prod-manage/cf-module-prod-manage-biz/src/main/resources/type/excel_plate_add.xlsx diff --git a/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/enums/ErrorCodeConstants.java b/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/enums/ErrorCodeConstants.java index ab852cb5c..9c02f71b3 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/enums/ErrorCodeConstants.java +++ b/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/enums/ErrorCodeConstants.java @@ -24,8 +24,8 @@ public class ErrorCodeConstants { // ========== 生产单 TODO 补充编号 ========== public static final ErrorCode ORDER_NOT_EXISTS = new ErrorCode(1_001_109_000, "生产单不存在"); - public static final ErrorCode ORDER_NOT_CANCEL = new ErrorCode(1_001_109_000, "生产单以进入生产状态,无法作废"); - public static final ErrorCode ORDER_PLAN_ERROR = new ErrorCode(1_001_109_001, "选中删除对象有已开料板件,请联系管理员修改开料状态后再删除!"); + public static final ErrorCode ORDER_NOT_CANCEL = new ErrorCode(1_001_109_001, "生产单以进入生产状态,无法作废"); +// public static final ErrorCode ORDER_PLAN_ERROR = new ErrorCode(1_001_109_001, "选中删除对象有已开料板件,请联系管理员修改开料状态后再删除!"); public static final ErrorCode PLATE_IS_PLAN = new ErrorCode(1_001_109_002, "删除对象中有已排单板件,请将该对象从排单中移除后再选择删除!"); public static final ErrorCode ORDER_ERROR = new ErrorCode(1_001_109_003, "当前生产单柜体,房间已全部删除!"); @@ -41,7 +41,7 @@ public class ErrorCodeConstants { // ========== 生产单 TODO 补充编号 ========== public static final ErrorCode PHONE_NOT_LAWFUL = new ErrorCode(1_001_116_000, "手机号不合法"); public static final ErrorCode CUSTOM_ORDER_EXISTS = new ErrorCode(1_001_117_000, "自定义生产单号存在"); - public static final ErrorCode ORDER_EXISTS = new ErrorCode(1_001_117_000, "api导入生产单已存在"); +// public static final ErrorCode ORDER_EXISTS = new ErrorCode(1_001_117_000, "api导入生产单已存在"); public static final ErrorCode ORDER_PROCESS_NOT_EXISTS = new ErrorCode(1_001_119_001, "工序组不存在"); public static final ErrorCode ORDER_PROCESS_EXISTS = new ErrorCode(1_001_119_002, "该生产单工序组已经存在"); public static final ErrorCode PROCESS_GROUP_NOT_EXISTS = new ErrorCode(1_002_029_003, "工序组不存在"); @@ -51,8 +51,8 @@ public class ErrorCodeConstants { public static final ErrorCode ORDER_NOT_FOUND = new ErrorCode(1_002_029_006, "生产单不存在"); public static final ErrorCode PLATE_PLAN_DATA_ERROR = new ErrorCode(1_002_029_008, "接口数据获取,板件明细源数据缺少,请确定接口数据正确"); public static final ErrorCode PLATE_GOOD_DATA_NULL = new ErrorCode(1_002_029_13, "接口数据获取,板材源数据缺少,请确定接口数据正确"); - public static final ErrorCode PARTS_DATA_ERROR = new ErrorCode(1_002_029_009, "配件数据获取错误"); - public static final ErrorCode BODY_DATA_ERROR = new ErrorCode(1_002_029_010, "柜体数据获取错误"); +// public static final ErrorCode PARTS_DATA_ERROR = new ErrorCode(1_002_029_009, "配件数据获取错误"); +// public static final ErrorCode BODY_DATA_ERROR = new ErrorCode(1_002_029_010, "柜体数据获取错误"); public static final ErrorCode GOODS_DATA_ERROR = new ErrorCode(1_002_029_011, "存在小板情况下,缺少板材数据,请确认数据源是否完整"); public static final ErrorCode PLATE_DATA_ERROR = new ErrorCode(1_002_029_012, "小板获取为空"); public static final ErrorCode PLATE_PRODUCE_DATA_ERROR = new ErrorCode(1_002_029_012, "小板生产数据获取为空"); diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/order/OrderController.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/order/OrderController.java index f5bd8ea59..1fff3cd9b 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/order/OrderController.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/order/OrderController.java @@ -123,7 +123,7 @@ public class OrderController { @GetMapping("/get") @Operation(summary = "获得(单个)生产单") @Parameter(name = "id", description = "编号", required = true, example = "1024") - @PreAuthorize("@ss.hasPermission('production:manager-list:detail')") + @PreAuthorize("@ss.hasPermission('productManager:List')") public CommonResult getOrder(@RequestParam("id") Long id) { return success(BeanUtils.toBean(orderService.getOrder(id), OrderRespVO.class)); } diff --git a/cf-module-prod-manage/cf-module-prod-manage-api/src/main/java/com/cf/imes/module/manage/enums/ErrorCodeConstants.java b/cf-module-prod-manage/cf-module-prod-manage-api/src/main/java/com/cf/imes/module/manage/enums/ErrorCodeConstants.java index dd0fbaefe..224578b83 100644 --- a/cf-module-prod-manage/cf-module-prod-manage-api/src/main/java/com/cf/imes/module/manage/enums/ErrorCodeConstants.java +++ b/cf-module-prod-manage/cf-module-prod-manage-api/src/main/java/com/cf/imes/module/manage/enums/ErrorCodeConstants.java @@ -6,9 +6,11 @@ import com.cf.imes.framework.common.exception.ErrorCode; * @author there * 生产管理服务错误码枚举 使用1-004-000-000 段 */ -public interface ErrorCodeConstants { +public class ErrorCodeConstants { public static final ErrorCode PARTS_NOT_EXISTS = new ErrorCode(1_004_001_000, "配件不存在"); - public static final ErrorCode PARTS_GOOD_ID_EXISTS = new ErrorCode(1_004_001_001, "配件标识已存在"); + public static final ErrorCode PARTS_GOOD_ID_EXISTS = new ErrorCode(1_004_001_001, "配件编号已存在"); + public static final ErrorCode PARTS_UNIT_NOT_NULL = new ErrorCode(1_004_001_002, "配件-组件或五金或封边条,单位禁止为空"); + public static final ErrorCode PARTS_EDGE_NOT_NULL = new ErrorCode(1_004_001_003, "配件-封边条颜色、宽厚禁止为空"); } diff --git a/cf-module-prod-manage/cf-module-prod-manage-api/src/main/java/com/cf/imes/module/manage/enums/parts/CategoryEnum.java b/cf-module-prod-manage/cf-module-prod-manage-api/src/main/java/com/cf/imes/module/manage/enums/parts/CategoryEnum.java index 159d5113f..d8e9abd3c 100644 --- a/cf-module-prod-manage/cf-module-prod-manage-api/src/main/java/com/cf/imes/module/manage/enums/parts/CategoryEnum.java +++ b/cf-module-prod-manage/cf-module-prod-manage-api/src/main/java/com/cf/imes/module/manage/enums/parts/CategoryEnum.java @@ -12,7 +12,8 @@ public enum CategoryEnum implements ObjectEnum{ ASSEMBLY("组件"), HARDWARE("五金"), - EDGING("封边条"); + EDGING("封边条"), + OTHER("其他"); /** * 类别名称 diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/parts/vo/PartsImportExcelVO.java b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/parts/vo/PartsImportExcelVO.java index 15c04045d..d39f5dc0e 100644 --- a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/parts/vo/PartsImportExcelVO.java +++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/parts/vo/PartsImportExcelVO.java @@ -18,35 +18,32 @@ import lombok.experimental.Accessors; @Accessors(chain = false) // 设置 chain = false,避免用户导入有问题 public class PartsImportExcelVO { - @ExcelProperty("配件编号") + @ExcelProperty("物料编号") private String goodsId; - @ExcelProperty("复合部件") - private String isComposite; - - @ExcelProperty("配件类型") + @ExcelProperty("分类") private String category; - @ExcelProperty("配件子类") + @ExcelProperty("复合") + private String isComposite; + + @ExcelProperty("子类") private String type; - @ExcelProperty("配件名称") + @ExcelProperty("物料名称") private String name; @ExcelProperty("型号") private String model; - @ExcelProperty("颜色") - private String color; + @ExcelProperty("规格") + private String spec; @ExcelProperty("材质") private String material; - @ExcelProperty("单位") - private String unit; - - @ExcelProperty("规格") - private String spec; + @ExcelProperty("颜色") + private String color; @ExcelProperty("品牌") private String brand; @@ -54,9 +51,6 @@ public class PartsImportExcelVO { @ExcelProperty("厂家") private String factor; - @ExcelProperty("价格")// float(8,3) - private String price; - @ExcelProperty("长度")// float(8,3) private String length; @@ -69,6 +63,12 @@ public class PartsImportExcelVO { @ExcelProperty("备注") private String remark; + @ExcelProperty("价格")// float(8,3) + private String price; + + @ExcelProperty("单位") + private String unit; + @ExcelProperty("上传结果") private String result; diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/parts/vo/PartsRespVO.java b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/parts/vo/PartsRespVO.java index 4ee13c030..ce1442d15 100644 --- a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/parts/vo/PartsRespVO.java +++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/parts/vo/PartsRespVO.java @@ -20,6 +20,7 @@ public class PartsRespVO { @Schema(description = "配件 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "11238") @ExcelProperty("配件ID") + @ExcelIgnore private Long id; @Schema(description = "设计端商品ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "26589") diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/parts/vo/PartsSaveReqVO.java b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/parts/vo/PartsSaveReqVO.java index 7b1ec1a0b..68f049098 100644 --- a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/parts/vo/PartsSaveReqVO.java +++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/parts/vo/PartsSaveReqVO.java @@ -26,11 +26,11 @@ public class PartsSaveReqVO { @Schema(description = "颜色", requiredMode = Schema.RequiredMode.REQUIRED) @Size(max = 32, message = "颜色长度不能超过32个字符") - @NotEmpty(message = "颜色不能为空") +// @NotEmpty(message = "颜色不能为空") private String color; @Schema(description = "材质:颗粒板、欧松板、多层板、生态板、禾香板、密度板、实木、铝蜂窝板、铝塑板", requiredMode = Schema.RequiredMode.REQUIRED) - @NotEmpty(message = "材质:颗粒板、欧松板、多层板、生态板、禾香板、密度板、实木、铝蜂窝板、铝塑板不能为空") +// @NotEmpty(message = "材质:颗粒板、欧松板、多层板、生态板、禾香板、密度板、实木、铝蜂窝板、铝塑板不能为空") @Size(max = 64, message = "材质长度不能超过64个字符") private String material; @@ -45,7 +45,7 @@ public class PartsSaveReqVO { private String type; @Schema(description = "型号", requiredMode = Schema.RequiredMode.REQUIRED) - @NotEmpty(message = "型号不能为空") +// @NotEmpty(message = "型号不能为空") @Size(max = 64, message = "型号长度不能超过64个字符") private String model; @@ -78,12 +78,12 @@ public class PartsSaveReqVO { private String factory; @Schema(description = "单位", requiredMode = Schema.RequiredMode.REQUIRED) - @NotEmpty(message = "单位不能为空") +// @NotEmpty(message = "单位不能为空") @Size(max = 32, message = "单位长度不能超过32个字符") private String unit; @Schema(description = "是否复合部件:0 否 1 是", requiredMode = Schema.RequiredMode.REQUIRED) - @NotNull(message = "是否复合部件不能为空") +// @NotNull(message = "是否复合部件不能为空") private Boolean isComposite; @Schema(description = "子配件ID列表,复合部件时记录子配件ID,半角逗号分隔", requiredMode = Schema.RequiredMode.REQUIRED, example = "你说的对") diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/plate/PlateController.java b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/plate/PlateController.java index 86999c5ac..65cb1efb5 100644 --- a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/plate/PlateController.java +++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/plate/PlateController.java @@ -32,6 +32,7 @@ import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; +import javax.validation.constraints.NotEmpty; @Tag(name = "管理后台 - 板材库管理") @RestController @@ -113,21 +114,28 @@ public class PlateController { } @GetMapping("/get-import-template") - @Operation(summary = "获得导入用户模板") + @Operation(summary = "获得导入板材模板") // @PreAuthorize("@ss.hasPermission('manage:plate:export')") @PreAuthorize("@ss.hasAnyPermissions('manage:plate:export','base:plate:export')") public void importTemplate(HttpServletResponse response) throws IOException { // 手动创建导出 demo List list = Arrays.asList( - PlateImportExcelVO.builder().goodsId("SP1123456").goodsName("5mm-多层板-高级灰").material("多层板").width(String.valueOf(1220)).height(String.valueOf(2440)) - .thickness(String.valueOf(5)).brand("AAA").spec("2440*1220*5").remark("板材样本").color("高级灰").price("120").texture("无").build(), - PlateImportExcelVO.builder().goodsId("SP1123457").goodsName("白玉木兰-欧松板").material("欧松板").width(String.valueOf(1220)).height(String.valueOf(2750)) - .thickness(String.valueOf(18)).brand("鸿达树").spec("2750*1220*18").remark("测试").color("白玉木兰").price("120").texture("无").build() + PlateImportExcelVO.builder().goodsId("BD10010001").goodsName("18mm-多层板-暖白").material("多层板").width(String.valueOf(1220)).height(String.valueOf(2440)) + .thickness(String.valueOf(18)).brand("AAA").spec("2440*1220*18").color("暖白").price("120").texture("无").build(), + PlateImportExcelVO.builder().goodsId("BD10010002").goodsName("18mm-颗粒板-高级灰").material("多层板").width(String.valueOf(1220)).height(String.valueOf(2750)) + .thickness(String.valueOf(18)).brand("鸿达树").spec("2750*1220*18").color("高级灰").price("120").texture("无").build() ); // 输出 ExcelUtils.write(response, IMPORT_TEMPLATE, "板材列表", PlateImportExcelVO.class, list); } +// @GetMapping("/get-import-template") +// @Operation(summary = "获得导入板材模板") +// @Parameter(name = "value", description = "文件类型", required = true, example = "0") +// public void importTemplate(HttpServletResponse response, @RequestParam("value") @NotEmpty(message = "文件路径不能为空") String value) { +// plateService.exportTemplate(response, value); +// } + @PostMapping("/import") @Operation(summary = "导入板材") @Parameters({ diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/plate/vo/plate/PlateImportExcelVO.java b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/plate/vo/plate/PlateImportExcelVO.java index 823bb8329..5ef6af037 100644 --- a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/plate/vo/plate/PlateImportExcelVO.java +++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/plate/vo/plate/PlateImportExcelVO.java @@ -1,6 +1,10 @@ package com.cf.imes.module.manage.controller.admin.plate.vo.plate; import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.cf.imes.framework.excel.core.annotations.DictFormat; +import com.cf.imes.framework.excel.core.convert.DictConvert; +import com.cf.imes.module.manage.enums.DictTypeConstants; import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.AllArgsConstructor; import lombok.Builder; @@ -20,45 +24,41 @@ import javax.validation.constraints.NotEmpty; @Accessors(chain = false) // 设置 chain = false,避免用户导入有问题 public class PlateImportExcelVO { - @ExcelProperty("商品编号") - @NotEmpty(message = "商品编号不能为空") + @ExcelProperty("*物料编号") + @NotEmpty(message = "物料编号不能为空") private String goodsId; - @ExcelProperty("商品名称") - @NotEmpty(message = "商品名称不能为空") + @ExcelProperty("*物料名称") + @NotEmpty(message = "物料名称不能为空") private String goodsName; - @ExcelProperty("材质") + @ExcelProperty("*材质") @NotEmpty(message = "材质不能为空") private String material; - @ExcelProperty("颜色") + @ExcelProperty("*颜色") @NotEmpty(message = "颜色不能为空") private String color; - @ExcelProperty("纹理") + @ExcelProperty(value = "*纹理") + @ColumnWidth(10) private String texture; - @ExcelProperty("宽度") + @ExcelProperty("*宽度") + @ColumnWidth(10) @NotEmpty(message = "宽度不能为空") private String width; - @ExcelProperty("高度")// float(8,3) + @ExcelProperty("*高度")// float(8,3) + @ColumnWidth(10) @NotEmpty(message = "高度不能为空") private String height; - @ExcelProperty("厚度") + @ExcelProperty("*厚度") + @ColumnWidth(10) @NotEmpty(message = "厚度不能为空") private String thickness; - @ExcelProperty("价格") - @NotEmpty(message = "价格不能为空") - private String price; - - @ExcelProperty("品牌") - @NotEmpty(message = "品牌不能为空") - private String brand; - @ExcelProperty("规格") @NotEmpty(message = "规格不能为空") private String spec; @@ -66,13 +66,21 @@ public class PlateImportExcelVO { @ExcelProperty("备注") private String remark; + @ExcelProperty("品牌") + @NotEmpty(message = "品牌不能为空") + private String brand; + + @ExcelProperty("价格") + @NotEmpty(message = "价格不能为空") + private String price; + @ExcelProperty("上传结果") private String result; public boolean isValidGoods() { return !(goodsId == null || goodsId.isEmpty() || goodsName == null || goodsName.isEmpty() || material == null || material.isEmpty() || color == null || color.isEmpty() || width == null ||width.isEmpty() || height == null || - height.isEmpty() || height == null ||thickness.isEmpty() || brand == null || brand.isEmpty() || spec == null || spec.isEmpty()); + height.isEmpty() || height == null ||thickness.isEmpty() ); } // 数据长度判断 diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/plate/vo/plate/PlateRespVO.java b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/plate/vo/plate/PlateRespVO.java index 362a6b552..f68651ee4 100644 --- a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/plate/vo/plate/PlateRespVO.java +++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/plate/vo/plate/PlateRespVO.java @@ -34,7 +34,7 @@ public class PlateRespVO { @ExcelProperty("颜色") private String color; - @Schema(description = "纹理", example = "true") + @Schema(description = "纹理", example = "有") @ExcelProperty(value = "纹理", converter = DictConvert.class) @DictFormat(DictTypeConstants.PLATE_TEXTURE) private Boolean texture; diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/plate/vo/plate/PlateSaveReqVO.java b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/plate/vo/plate/PlateSaveReqVO.java index 872d17d7b..7803bf987 100644 --- a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/plate/vo/plate/PlateSaveReqVO.java +++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/plate/vo/plate/PlateSaveReqVO.java @@ -36,6 +36,7 @@ public class PlateSaveReqVO { private String color; @Schema(description = "纹理", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "纹理不能为空") private Boolean texture; @Schema(description = "宽度", requiredMode = Schema.RequiredMode.REQUIRED) @@ -54,6 +55,7 @@ public class PlateSaveReqVO { private Double thickness; @Schema(description = "价格", example = "3380") + @NumberValid(name = "价格") private Double price; @Schema(description = "品牌") diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/service/parts/PartsExcelListener.java b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/service/parts/PartsExcelListener.java index 5d4fa1f80..e29f0e07e 100644 --- a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/service/parts/PartsExcelListener.java +++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/service/parts/PartsExcelListener.java @@ -67,6 +67,14 @@ public final class PartsExcelListener extends ExcelListener setter.accept(msg + "不可为空"); this.flag = false; } else { + isNotEmptyToEnum(getter, setter, msg, enumClass); + } + } + + // 不为空,判断枚举值是否正确 + private & ObjectEnum> void isNotEmptyToEnum(Supplier getter, Consumer setter, String msg, Class enumClass) { + String value = getter.get(); + if (!StringUtils.isEmpty(value)) { boolean isValid = false; for (T enumValue : enumClass.getEnumConstants()) { if (Objects.equals(enumValue.getValue(), value)) { @@ -139,16 +147,32 @@ public final class PartsExcelListener extends ExcelListener */ @Override public void invoke(PartsImportExcelVO data, AnalysisContext context) { - isEmptyAndAdd(data::getGoodsId, data::setResult, setResult(data.getResult(), "编号"), 32); - isEmptyAndEnumAdd(data::getIsComposite, data::setResult, setResult(data.getResult(), "是否复合部件"), WhetherEnum.class); - isEmptyAndEnumAdd(data::getCategory, data::setResult, setResult(data.getResult(), "类型"), CategoryEnum.class); - isNotEmptyAndAdd(data::getCategory, data::setResult, setResult(data.getResult(), "类型"),32); + +// 一,必须存在且合理 + isEmptyAndAdd(data::getGoodsId, data::setResult, setResult(data.getResult(), "物料编号"), 32); + isEmptyAndAdd(data::getName, data::setResult, setResult(data.getResult(), "物料名称"), 64); + isEmptyAndEnumAdd(data::getCategory, data::setResult, setResult(data.getResult(), "分类"), CategoryEnum.class); + isNotEmptyAndAdd(data::getCategory, data::setResult, setResult(data.getResult(), "分类"),32); + +// 二,分类,必须存在 + if (data.getCategory() != null ) { + if (!CategoryEnum.OTHER.getValue().equals(data.getCategory())) { // 不为其他 + isEmpty(data::getUnit, data::setResult, setResult(data.getResult(), "单位")); + if (CategoryEnum.EDGING.getValue().equals(data.getCategory())) { // 为封边 + isEmpty(data::getColor, data::setResult, setResult(data.getResult(), "颜色")); + isEmpty(data::getWidth, data::setResult, setResult(data.getResult(), "宽度")); + isEmpty(data::getThickness, data::setResult, setResult(data.getResult(), "厚度")); + } + } + } + +// 三,存在则判断是否符合 + isNotEmptyToEnum(data::getIsComposite, data::setResult, setResult(data.getResult(), "是否复合部件"), WhetherEnum.class); isNotEmptyAndAdd(data::getType, data::setResult, setResult(data.getResult(), "子类型"), 64); - isEmptyAndAdd(data::getName, data::setResult, setResult(data.getResult(), "名称"), 64); - isEmptyAndAdd(data::getModel, data::setResult, setResult(data.getResult(), "型号"), 64); - isEmptyAndAdd(data::getColor, data::setResult, setResult(data.getResult(), "颜色"), 64); - isEmptyAndAdd(data::getMaterial, data::setResult, setResult(data.getResult(), "材质"), 64); - isEmptyAndAdd(data::getUnit, data::setResult, setResult(data.getResult(), "单位"), 32); + isNotEmptyAndAdd(data::getModel, data::setResult, setResult(data.getResult(), "型号"), 64); + isNotEmptyAndAdd(data::getColor, data::setResult, setResult(data.getResult(), "颜色"), 64); + isNotEmptyAndAdd(data::getMaterial, data::setResult, setResult(data.getResult(), "材质"), 64); + isNotEmptyAndAdd(data::getUnit, data::setResult, setResult(data.getResult(), "单位"), 32); isNotEmptyAndAdd(data::getSpec, data::setResult, setResult(data.getResult(), "规格"), 64); isNotEmptyAndAdd(data::getBrand, data::setResult, setResult(data.getResult(), "品牌"), 64); isNotEmptyAndAdd(data::getFactor, data::setResult, setResult(data.getResult(), "厂家"), 128); @@ -158,12 +182,12 @@ public final class PartsExcelListener extends ExcelListener isNotEmptyAndAdd(data::getRemark, data::setResult, setResult(data.getResult(), "备注"), 255); // 当为封边的时候,一定需要 - if (StringUtils.isNotEmpty(data.getCategory())) { - if (data.getCategory().equals(CategoryEnum.EDGING.getValue())) { - isEmpty(data::getThickness, data::setResult, setResult(data.getResult(), "厚度")); - isEmpty(data::getWidth, data::setResult, setResult(data.getResult(), "宽度")); - } - } +// if (StringUtils.isNotEmpty(data.getCategory())) { +// if (data.getCategory().equals(CategoryEnum.EDGING.getValue())) { +// isEmpty(data::getThickness, data::setResult, setResult(data.getResult(), "厚度")); +// isEmpty(data::getWidth, data::setResult, setResult(data.getResult(), "宽度")); +// } +// } if (data.getResult() != null) data.setResult(data.getResult().replace("null,", "")); diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/service/parts/PartsServiceImpl.java b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/service/parts/PartsServiceImpl.java index 8720c08ba..5f6df763b 100644 --- a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/service/parts/PartsServiceImpl.java +++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/service/parts/PartsServiceImpl.java @@ -6,6 +6,7 @@ import com.cf.imes.framework.organ.core.context.OrganContextHolder; import com.cf.imes.module.manage.controller.admin.parts.vo.PartsImportExcelVO; import com.cf.imes.module.manage.controller.admin.parts.vo.PartsPageReqVO; import com.cf.imes.module.manage.controller.admin.parts.vo.PartsSaveReqVO; +import com.cf.imes.module.manage.enums.parts.CategoryEnum; import com.cf.imes.module.manage.util.file.FileHelperUtil; import com.cf.imes.module.manage.dal.dataobject.parts.PartsDO; import com.cf.imes.module.manage.dal.mysql.parts.PartsMapper; @@ -29,8 +30,7 @@ import java.util.List; import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception; import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getLoginUser; -import static com.cf.imes.module.manage.enums.ErrorCodeConstants.PARTS_GOOD_ID_EXISTS; -import static com.cf.imes.module.manage.enums.ErrorCodeConstants.PARTS_NOT_EXISTS; +import static com.cf.imes.module.manage.enums.ErrorCodeConstants.*; /** @@ -65,9 +65,11 @@ public class PartsServiceImpl implements PartsService { @OrganIgnore public Long create(PartsSaveReqVO createReqVO) { + validateFieldExists(createReqVO); + PartsDO partsDO = BeanUtils.toBean(createReqVO, PartsDO.class); Long organId = getOrganId(BASE_PARTS_CREATE_PERMISSION, getLoginUser().getId(), partsDO.getOrganId()); - partsDO.setOrganId(organId).setIsComposite(false); + partsDO.setOrganId(organId).setIsComposite(createReqVO.getIsComposite() != null && createReqVO.getIsComposite()); // 判断是否存在--- goodsId if (validateExistsByGoodsId(partsDO.getGoodsId(), organId)) { throw exception(PARTS_GOOD_ID_EXISTS); @@ -82,6 +84,9 @@ public class PartsServiceImpl implements PartsService { @OrganIgnore @Transactional(rollbackFor = Exception.class) public void update(PartsSaveReqVO updateReqVO) { + + validateFieldExists(updateReqVO); + Long organId = getOrganId(BASE_PARTS_UPDATE_PERMISSION, getLoginUser().getId(), updateReqVO.getOrganId()); // 校验id存在 boolean index = validateExistsById(updateReqVO.getId(),organId); @@ -95,7 +100,7 @@ public class PartsServiceImpl implements PartsService { throw exception(PARTS_GOOD_ID_EXISTS); } // 更新 - updateReqVO.setOrganId(organId); + updateReqVO.setOrganId(organId).setIsComposite(updateReqVO.getIsComposite() != null && updateReqVO.getIsComposite()); PartsDO updateObj = BeanUtils.toBean(updateReqVO, PartsDO.class); partsMapper.updateById(updateObj); } @@ -186,10 +191,10 @@ public class PartsServiceImpl implements PartsService { } }); // 批量插入,批量更新 - if (insertList.size() > 0) { + if (!insertList.isEmpty()) { partsMapper.insertBatch(insertList); } - if (updateList.size() > 0) { + if (!updateList.isEmpty()) { partsMapper.updateBatch(updateList); } } @@ -218,4 +223,20 @@ public class PartsServiceImpl implements PartsService { return organIdDefault; } + // 必填字段判断 + private void validateFieldExists(PartsSaveReqVO partsSaveReqVO) { + if (!CategoryEnum.OTHER.getValue().equals(partsSaveReqVO.getCategory())) { // 不为其他 + if (partsSaveReqVO.getUnit() == null) { + throw exception(PARTS_UNIT_NOT_NULL); + } + if (CategoryEnum.EDGING.getValue().equals(partsSaveReqVO.getCategory())) { // 为封边 + if (partsSaveReqVO.getColor() == null || partsSaveReqVO.getWidth() == null || partsSaveReqVO.getThickness() == null) { + throw exception(PARTS_EDGE_NOT_NULL); + } + } + } + + } + + } \ No newline at end of file diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/service/plate/PlateExcelListener.java b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/service/plate/PlateExcelListener.java index 2c3534b94..3034ebf82 100644 --- a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/service/plate/PlateExcelListener.java +++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/service/plate/PlateExcelListener.java @@ -66,18 +66,19 @@ public final class PlateExcelListener extends AnalysisEventListener getPlatePage(PlatePageReqVO pageReqVO); /** - * 批量导入用户 + * 批量导入板材 * - * @param importUsers 导入用户列表 + * @param importUsers 导入板材列表 * @param isUpdateSupport 是否支持更新 * @return 导入结果 */ PlateImportRespVO importPlateList(List importUsers, boolean isUpdateSupport , Long organId); + /** + * 生产导入文件模板下载 + */ + void exportTemplate(HttpServletResponse response, String value); + + default String getSavePath() { + ApplicationHome applicationHome = new ApplicationHome(this.getClass()); + + // 保存目录位置根据项目需求可随意更改 + return applicationHome.getDir().getAbsolutePath() + File.separator + "type"; + + } } \ No newline at end of file diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/service/plate/PlateServiceImpl.java b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/service/plate/PlateServiceImpl.java index e4dfc58b5..6d6742b9d 100644 --- a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/service/plate/PlateServiceImpl.java +++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/service/plate/PlateServiceImpl.java @@ -11,6 +11,7 @@ import com.cf.imes.module.manage.controller.admin.plate.vo.plate.PlatePageReqVO; import com.cf.imes.module.manage.controller.admin.plate.vo.plate.PlateSaveReqVO; import com.cf.imes.module.manage.dal.dataobject.plate.PlateDO; import com.cf.imes.module.manage.dal.mysql.plate.PlateMapper; +import com.cf.imes.module.manage.util.file.FileHelperUtil; import com.cf.imes.module.system.api.organ.OrganApi; import com.cf.imes.module.system.api.permission.PermissionApi; import com.cf.imes.module.system.enums.ErrorCodeConstants; @@ -19,6 +20,7 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; @@ -71,11 +73,11 @@ public class PlateServiceImpl implements PlateService { @Transactional(rollbackFor = Exception.class) public void updatePlate(PlateSaveReqVO updateReqVO) { // 校验存在 - validatePlateExists(Long.valueOf(updateReqVO.getId()), - getOrganId(BASE_PLATE_UPDATE_PERMISSION, getLoginUser().getId(), updateReqVO.getOrganId())); + Long organId = getOrganId(BASE_PLATE_UPDATE_PERMISSION, getLoginUser().getId(), updateReqVO.getOrganId()); + validatePlateExists(Long.valueOf(updateReqVO.getId()), organId); PlateDO updateObj = BeanUtils.toBean(updateReqVO, PlateDO.class); // 校验板材goods_id是否相同 - if (plateMapper.isByGoodIDAndId(updateReqVO.getGoodsId(), getLoginUser().getId(), Long.valueOf(updateReqVO.getId()))) { + if (plateMapper.isByGoodIDAndId(updateReqVO.getGoodsId(), organId, Long.valueOf(updateReqVO.getId()))) { throw exception(PLATE_GOODS_ID_NOT_SAME); } plateMapper.updateById(updateObj); @@ -165,6 +167,13 @@ public class PlateServiceImpl implements PlateService { return respVO; } + @Override + @OrganIgnore + public void exportTemplate(HttpServletResponse response, String value) { + String rootPath = getSavePath(); + FileHelperUtil.getFile(rootPath, response, value); + } + private void validateOrganExists(Long organId) { CommonResult index = organApi.validOrgan(organId); if (!index.isSuccess()) { diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/resources/type/excel_parts_add.xlsx b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/resources/type/excel_parts_add.xlsx index 67f62e5983761b3eeb3f3427b368cbc3b839e39d..1b34ecbb767ac10f3dba0418bd505ae1b007940d 100644 GIT binary patch delta 6651 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 N4#kc?!uj8v{{UNd0GR*) diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/resources/type/excel_plate_add.xlsx b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/resources/type/excel_plate_add.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..d4917f35ee59c497c9b8bfa229c7767d54f715b2 GIT binary patch literal 11859 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 P+(-a(5D%v5e%<{)&XhDS literal 0 HcmV?d00001 diff --git a/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/enums/ErrorCodeConstants.java b/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/enums/ErrorCodeConstants.java index 67088c487..b50986bbc 100644 --- a/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/enums/ErrorCodeConstants.java +++ b/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/enums/ErrorCodeConstants.java @@ -252,7 +252,7 @@ public class ErrorCodeConstants { //=========== 板材信息 1-002-033-000 ============ public static final ErrorCode PLATE_IMPORT_LIST_IS_EMPTY = new ErrorCode(1_002_033_001, "导入板材数据不能为空!"); - public static final ErrorCode PLATE_EXISTS = new ErrorCode(1_002_033_002, "板材存在"); + public static final ErrorCode PLATE_EXISTS = new ErrorCode(1_002_033_002, "商品编号已存在"); public static final ErrorCode THE_CURRENT_BOARD_IS_NOT_SELECTED = new ErrorCode(1_002_033_003, "当前板材没有选择房间和柜体,请选择"); public static final ErrorCode THE_BOARD_HAS_BEEN_CUT_INTO_PIECES = new ErrorCode(1_002_033_004, "当前排单已有板材开料,禁止删除"); public static final ErrorCode REMAIN_PLATE_NOT_EXISTS = new ErrorCode(1_002_033_005, "板材不存在");