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 67f62e598..1b34ecbb7 100644 Binary files a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/resources/type/excel_parts_add.xlsx and b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/resources/type/excel_parts_add.xlsx differ 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 000000000..d4917f35e Binary files /dev/null and b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/resources/type/excel_plate_add.xlsx differ 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, "板材不存在");