板材、配件修改

This commit is contained in:
lym
2025-02-14 15:15:53 +08:00
parent f08bb046f1
commit 7d142b6afe
19 changed files with 179 additions and 87 deletions
@@ -24,8 +24,8 @@ public class ErrorCodeConstants {
// ========== 生产单 TODO 补充编号 ========== // ========== 生产单 TODO 补充编号 ==========
public static final ErrorCode ORDER_NOT_EXISTS = new ErrorCode(1_001_109_000, "生产单不存在"); 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_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 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 PLATE_IS_PLAN = new ErrorCode(1_001_109_002, "删除对象中有已排单板件,请将该对象从排单中移除后再选择删除!");
public static final ErrorCode ORDER_ERROR = new ErrorCode(1_001_109_003, "当前生产单柜体,房间已全部删除!"); public static final ErrorCode ORDER_ERROR = new ErrorCode(1_001_109_003, "当前生产单柜体,房间已全部删除!");
@@ -41,7 +41,7 @@ public class ErrorCodeConstants {
// ========== 生产单 TODO 补充编号 ========== // ========== 生产单 TODO 补充编号 ==========
public static final ErrorCode PHONE_NOT_LAWFUL = new ErrorCode(1_001_116_000, "手机号不合法"); 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 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_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 ORDER_PROCESS_EXISTS = new ErrorCode(1_001_119_002, "该生产单工序组已经存在");
public static final ErrorCode PROCESS_GROUP_NOT_EXISTS = new ErrorCode(1_002_029_003, "工序组不存在"); 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 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_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 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 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 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 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_DATA_ERROR = new ErrorCode(1_002_029_012, "小板获取为空");
public static final ErrorCode PLATE_PRODUCE_DATA_ERROR = new ErrorCode(1_002_029_012, "小板生产数据获取为空"); public static final ErrorCode PLATE_PRODUCE_DATA_ERROR = new ErrorCode(1_002_029_012, "小板生产数据获取为空");
@@ -123,7 +123,7 @@ public class OrderController {
@GetMapping("/get") @GetMapping("/get")
@Operation(summary = "获得(单个)生产单") @Operation(summary = "获得(单个)生产单")
@Parameter(name = "id", description = "编号", required = true, example = "1024") @Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('production:manager-list:detail')") @PreAuthorize("@ss.hasPermission('productManager:List')")
public CommonResult<OrderRespVO> getOrder(@RequestParam("id") Long id) { public CommonResult<OrderRespVO> getOrder(@RequestParam("id") Long id) {
return success(BeanUtils.toBean(orderService.getOrder(id), OrderRespVO.class)); return success(BeanUtils.toBean(orderService.getOrder(id), OrderRespVO.class));
} }
@@ -6,9 +6,11 @@ import com.cf.imes.framework.common.exception.ErrorCode;
* @author there * @author there
* 生产管理服务错误码枚举 使用1-004-000-000 段 * 生产管理服务错误码枚举 使用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_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, "配件-封边条颜色、宽厚禁止为空");
} }
@@ -12,7 +12,8 @@ public enum CategoryEnum implements ObjectEnum{
ASSEMBLY("组件"), ASSEMBLY("组件"),
HARDWARE("五金"), HARDWARE("五金"),
EDGING("封边条"); EDGING("封边条"),
OTHER("其他");
/** /**
* 类别名称 * 类别名称
@@ -18,35 +18,32 @@ import lombok.experimental.Accessors;
@Accessors(chain = false) // 设置 chain = false,避免用户导入有问题 @Accessors(chain = false) // 设置 chain = false,避免用户导入有问题
public class PartsImportExcelVO { public class PartsImportExcelVO {
@ExcelProperty("配件编号") @ExcelProperty("物料编号")
private String goodsId; private String goodsId;
@ExcelProperty("复合部件") @ExcelProperty("分类")
private String isComposite;
@ExcelProperty("配件类型")
private String category; private String category;
@ExcelProperty("配件子类") @ExcelProperty("复合")
private String isComposite;
@ExcelProperty("子类")
private String type; private String type;
@ExcelProperty("配件名称") @ExcelProperty("物料名称")
private String name; private String name;
@ExcelProperty("型号") @ExcelProperty("型号")
private String model; private String model;
@ExcelProperty("颜色") @ExcelProperty("规格")
private String color; private String spec;
@ExcelProperty("材质") @ExcelProperty("材质")
private String material; private String material;
@ExcelProperty("单位") @ExcelProperty("颜色")
private String unit; private String color;
@ExcelProperty("规格")
private String spec;
@ExcelProperty("品牌") @ExcelProperty("品牌")
private String brand; private String brand;
@@ -54,9 +51,6 @@ public class PartsImportExcelVO {
@ExcelProperty("厂家") @ExcelProperty("厂家")
private String factor; private String factor;
@ExcelProperty("价格")// float(8,3)
private String price;
@ExcelProperty("长度")// float(8,3) @ExcelProperty("长度")// float(8,3)
private String length; private String length;
@@ -69,6 +63,12 @@ public class PartsImportExcelVO {
@ExcelProperty("备注") @ExcelProperty("备注")
private String remark; private String remark;
@ExcelProperty("价格")// float(8,3)
private String price;
@ExcelProperty("单位")
private String unit;
@ExcelProperty("上传结果") @ExcelProperty("上传结果")
private String result; private String result;
@@ -20,6 +20,7 @@ public class PartsRespVO {
@Schema(description = "配件 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "11238") @Schema(description = "配件 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "11238")
@ExcelProperty("配件ID") @ExcelProperty("配件ID")
@ExcelIgnore
private Long id; private Long id;
@Schema(description = "设计端商品ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "26589") @Schema(description = "设计端商品ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "26589")
@@ -26,11 +26,11 @@ public class PartsSaveReqVO {
@Schema(description = "颜色", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "颜色", requiredMode = Schema.RequiredMode.REQUIRED)
@Size(max = 32, message = "颜色长度不能超过32个字符") @Size(max = 32, message = "颜色长度不能超过32个字符")
@NotEmpty(message = "颜色不能为空") // @NotEmpty(message = "颜色不能为空")
private String color; private String color;
@Schema(description = "材质:颗粒板、欧松板、多层板、生态板、禾香板、密度板、实木、铝蜂窝板、铝塑板", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "材质:颗粒板、欧松板、多层板、生态板、禾香板、密度板、实木、铝蜂窝板、铝塑板", requiredMode = Schema.RequiredMode.REQUIRED)
@NotEmpty(message = "材质:颗粒板、欧松板、多层板、生态板、禾香板、密度板、实木、铝蜂窝板、铝塑板不能为空") // @NotEmpty(message = "材质:颗粒板、欧松板、多层板、生态板、禾香板、密度板、实木、铝蜂窝板、铝塑板不能为空")
@Size(max = 64, message = "材质长度不能超过64个字符") @Size(max = 64, message = "材质长度不能超过64个字符")
private String material; private String material;
@@ -45,7 +45,7 @@ public class PartsSaveReqVO {
private String type; private String type;
@Schema(description = "型号", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "型号", requiredMode = Schema.RequiredMode.REQUIRED)
@NotEmpty(message = "型号不能为空") // @NotEmpty(message = "型号不能为空")
@Size(max = 64, message = "型号长度不能超过64个字符") @Size(max = 64, message = "型号长度不能超过64个字符")
private String model; private String model;
@@ -78,12 +78,12 @@ public class PartsSaveReqVO {
private String factory; private String factory;
@Schema(description = "单位", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "单位", requiredMode = Schema.RequiredMode.REQUIRED)
@NotEmpty(message = "单位不能为空") // @NotEmpty(message = "单位不能为空")
@Size(max = 32, message = "单位长度不能超过32个字符") @Size(max = 32, message = "单位长度不能超过32个字符")
private String unit; private String unit;
@Schema(description = "是否复合部件:0 否 1 是", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "是否复合部件:0 否 1 是", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "是否复合部件不能为空") // @NotNull(message = "是否复合部件不能为空")
private Boolean isComposite; private Boolean isComposite;
@Schema(description = "子配件ID列表,复合部件时记录子配件ID,半角逗号分隔", requiredMode = Schema.RequiredMode.REQUIRED, example = "你说的对") @Schema(description = "子配件ID列表,复合部件时记录子配件ID,半角逗号分隔", requiredMode = Schema.RequiredMode.REQUIRED, example = "你说的对")
@@ -32,6 +32,7 @@ import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid; import javax.validation.Valid;
import javax.validation.constraints.NotEmpty;
@Tag(name = "管理后台 - 板材库管理") @Tag(name = "管理后台 - 板材库管理")
@RestController @RestController
@@ -113,21 +114,28 @@ public class PlateController {
} }
@GetMapping("/get-import-template") @GetMapping("/get-import-template")
@Operation(summary = "获得导入用户模板") @Operation(summary = "获得导入板材模板")
// @PreAuthorize("@ss.hasPermission('manage:plate:export')") // @PreAuthorize("@ss.hasPermission('manage:plate:export')")
@PreAuthorize("@ss.hasAnyPermissions('manage:plate:export','base:plate:export')") @PreAuthorize("@ss.hasAnyPermissions('manage:plate:export','base:plate:export')")
public void importTemplate(HttpServletResponse response) throws IOException { public void importTemplate(HttpServletResponse response) throws IOException {
// 手动创建导出 demo // 手动创建导出 demo
List<PlateImportExcelVO> list = Arrays.asList( List<PlateImportExcelVO> list = Arrays.asList(
PlateImportExcelVO.builder().goodsId("SP1123456").goodsName("5mm-多层板-高级灰").material("多层板").width(String.valueOf(1220)).height(String.valueOf(2440)) PlateImportExcelVO.builder().goodsId("BD10010001").goodsName("18mm-多层板-暖白").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(), .thickness(String.valueOf(18)).brand("AAA").spec("2440*1220*18").color("暖白").price("120").texture("").build(),
PlateImportExcelVO.builder().goodsId("SP1123457").goodsName("白玉木兰-欧松板").material("欧松").width(String.valueOf(1220)).height(String.valueOf(2750)) PlateImportExcelVO.builder().goodsId("BD10010002").goodsName("18mm-颗粒板-高级灰").material("多层").width(String.valueOf(1220)).height(String.valueOf(2750))
.thickness(String.valueOf(18)).brand("鸿达树").spec("2750*1220*18").remark("测试").color("白玉木兰").price("120").texture("").build() .thickness(String.valueOf(18)).brand("鸿达树").spec("2750*1220*18").color("高级灰").price("120").texture("").build()
); );
// 输出 // 输出
ExcelUtils.write(response, IMPORT_TEMPLATE, "板材列表", PlateImportExcelVO.class, list); 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") @PostMapping("/import")
@Operation(summary = "导入板材") @Operation(summary = "导入板材")
@Parameters({ @Parameters({
@@ -1,6 +1,10 @@
package com.cf.imes.module.manage.controller.admin.plate.vo.plate; package com.cf.imes.module.manage.controller.admin.plate.vo.plate;
import com.alibaba.excel.annotation.ExcelProperty; 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 com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
@@ -20,45 +24,41 @@ import javax.validation.constraints.NotEmpty;
@Accessors(chain = false) // 设置 chain = false,避免用户导入有问题 @Accessors(chain = false) // 设置 chain = false,避免用户导入有问题
public class PlateImportExcelVO { public class PlateImportExcelVO {
@ExcelProperty("商品编号") @ExcelProperty("*物料编号")
@NotEmpty(message = "商品编号不能为空") @NotEmpty(message = "物料编号不能为空")
private String goodsId; private String goodsId;
@ExcelProperty("商品名称") @ExcelProperty("*物料名称")
@NotEmpty(message = "商品名称不能为空") @NotEmpty(message = "物料名称不能为空")
private String goodsName; private String goodsName;
@ExcelProperty("材质") @ExcelProperty("*材质")
@NotEmpty(message = "材质不能为空") @NotEmpty(message = "材质不能为空")
private String material; private String material;
@ExcelProperty("颜色") @ExcelProperty("*颜色")
@NotEmpty(message = "颜色不能为空") @NotEmpty(message = "颜色不能为空")
private String color; private String color;
@ExcelProperty("纹理") @ExcelProperty(value = "*纹理")
@ColumnWidth(10)
private String texture; private String texture;
@ExcelProperty("宽度") @ExcelProperty("*宽度")
@ColumnWidth(10)
@NotEmpty(message = "宽度不能为空") @NotEmpty(message = "宽度不能为空")
private String width; private String width;
@ExcelProperty("高度")// float(8,3) @ExcelProperty("*高度")// float(8,3)
@ColumnWidth(10)
@NotEmpty(message = "高度不能为空") @NotEmpty(message = "高度不能为空")
private String height; private String height;
@ExcelProperty("厚度") @ExcelProperty("*厚度")
@ColumnWidth(10)
@NotEmpty(message = "厚度不能为空") @NotEmpty(message = "厚度不能为空")
private String thickness; private String thickness;
@ExcelProperty("价格")
@NotEmpty(message = "价格不能为空")
private String price;
@ExcelProperty("品牌")
@NotEmpty(message = "品牌不能为空")
private String brand;
@ExcelProperty("规格") @ExcelProperty("规格")
@NotEmpty(message = "规格不能为空") @NotEmpty(message = "规格不能为空")
private String spec; private String spec;
@@ -66,13 +66,21 @@ public class PlateImportExcelVO {
@ExcelProperty("备注") @ExcelProperty("备注")
private String remark; private String remark;
@ExcelProperty("品牌")
@NotEmpty(message = "品牌不能为空")
private String brand;
@ExcelProperty("价格")
@NotEmpty(message = "价格不能为空")
private String price;
@ExcelProperty("上传结果") @ExcelProperty("上传结果")
private String result; private String result;
public boolean isValidGoods() { public boolean isValidGoods() {
return !(goodsId == null || goodsId.isEmpty() || goodsName == null || goodsName.isEmpty() || material == null || return !(goodsId == null || goodsId.isEmpty() || goodsName == null || goodsName.isEmpty() || material == null ||
material.isEmpty() || color == null || color.isEmpty() || width == null ||width.isEmpty() || height == 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() );
} }
// 数据长度判断 // 数据长度判断
@@ -34,7 +34,7 @@ public class PlateRespVO {
@ExcelProperty("颜色") @ExcelProperty("颜色")
private String color; private String color;
@Schema(description = "纹理", example = "true") @Schema(description = "纹理", example = "")
@ExcelProperty(value = "纹理", converter = DictConvert.class) @ExcelProperty(value = "纹理", converter = DictConvert.class)
@DictFormat(DictTypeConstants.PLATE_TEXTURE) @DictFormat(DictTypeConstants.PLATE_TEXTURE)
private Boolean texture; private Boolean texture;
@@ -36,6 +36,7 @@ public class PlateSaveReqVO {
private String color; private String color;
@Schema(description = "纹理", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "纹理", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "纹理不能为空")
private Boolean texture; private Boolean texture;
@Schema(description = "宽度", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "宽度", requiredMode = Schema.RequiredMode.REQUIRED)
@@ -54,6 +55,7 @@ public class PlateSaveReqVO {
private Double thickness; private Double thickness;
@Schema(description = "价格", example = "3380") @Schema(description = "价格", example = "3380")
@NumberValid(name = "价格")
private Double price; private Double price;
@Schema(description = "品牌") @Schema(description = "品牌")
@@ -67,6 +67,14 @@ public final class PartsExcelListener extends ExcelListener<PartsImportExcelVO>
setter.accept(msg + "不可为空"); setter.accept(msg + "不可为空");
this.flag = false; this.flag = false;
} else { } else {
isNotEmptyToEnum(getter, setter, msg, enumClass);
}
}
// 不为空,判断枚举值是否正确
private <T extends Enum<T> & ObjectEnum> void isNotEmptyToEnum(Supplier<String> getter, Consumer<String> setter, String msg, Class<T> enumClass) {
String value = getter.get();
if (!StringUtils.isEmpty(value)) {
boolean isValid = false; boolean isValid = false;
for (T enumValue : enumClass.getEnumConstants()) { for (T enumValue : enumClass.getEnumConstants()) {
if (Objects.equals(enumValue.getValue(), value)) { if (Objects.equals(enumValue.getValue(), value)) {
@@ -139,16 +147,32 @@ public final class PartsExcelListener extends ExcelListener<PartsImportExcelVO>
*/ */
@Override @Override
public void invoke(PartsImportExcelVO data, AnalysisContext context) { 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); isEmptyAndAdd(data::getGoodsId, data::setResult, setResult(data.getResult(), "物料编号"), 32);
isNotEmptyAndAdd(data::getCategory, 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); isNotEmptyAndAdd(data::getType, data::setResult, setResult(data.getResult(), "子类型"), 64);
isEmptyAndAdd(data::getName, data::setResult, setResult(data.getResult(), "名称"), 64); isNotEmptyAndAdd(data::getModel, data::setResult, setResult(data.getResult(), "型号"), 64);
isEmptyAndAdd(data::getModel, data::setResult, setResult(data.getResult(), "型号"), 64); isNotEmptyAndAdd(data::getColor, data::setResult, setResult(data.getResult(), "颜色"), 64);
isEmptyAndAdd(data::getColor, data::setResult, setResult(data.getResult(), "颜色"), 64); isNotEmptyAndAdd(data::getMaterial, data::setResult, setResult(data.getResult(), "材质"), 64);
isEmptyAndAdd(data::getMaterial, data::setResult, setResult(data.getResult(), "材质"), 64); isNotEmptyAndAdd(data::getUnit, data::setResult, setResult(data.getResult(), "单位"), 32);
isEmptyAndAdd(data::getUnit, data::setResult, setResult(data.getResult(), "单位"), 32);
isNotEmptyAndAdd(data::getSpec, data::setResult, setResult(data.getResult(), "规格"), 64); isNotEmptyAndAdd(data::getSpec, data::setResult, setResult(data.getResult(), "规格"), 64);
isNotEmptyAndAdd(data::getBrand, data::setResult, setResult(data.getResult(), "品牌"), 64); isNotEmptyAndAdd(data::getBrand, data::setResult, setResult(data.getResult(), "品牌"), 64);
isNotEmptyAndAdd(data::getFactor, data::setResult, setResult(data.getResult(), "厂家"), 128); isNotEmptyAndAdd(data::getFactor, data::setResult, setResult(data.getResult(), "厂家"), 128);
@@ -158,12 +182,12 @@ public final class PartsExcelListener extends ExcelListener<PartsImportExcelVO>
isNotEmptyAndAdd(data::getRemark, data::setResult, setResult(data.getResult(), "备注"), 255); isNotEmptyAndAdd(data::getRemark, data::setResult, setResult(data.getResult(), "备注"), 255);
// 当为封边的时候,一定需要 // 当为封边的时候,一定需要
if (StringUtils.isNotEmpty(data.getCategory())) { // if (StringUtils.isNotEmpty(data.getCategory())) {
if (data.getCategory().equals(CategoryEnum.EDGING.getValue())) { // if (data.getCategory().equals(CategoryEnum.EDGING.getValue())) {
isEmpty(data::getThickness, data::setResult, setResult(data.getResult(), "厚度")); // isEmpty(data::getThickness, data::setResult, setResult(data.getResult(), "厚度"));
isEmpty(data::getWidth, data::setResult, setResult(data.getResult(), "宽度")); // isEmpty(data::getWidth, data::setResult, setResult(data.getResult(), "宽度"));
} // }
} // }
if (data.getResult() != null) if (data.getResult() != null)
data.setResult(data.getResult().replace("null,", "")); data.setResult(data.getResult().replace("null,", ""));
@@ -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.PartsImportExcelVO;
import com.cf.imes.module.manage.controller.admin.parts.vo.PartsPageReqVO; 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.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.util.file.FileHelperUtil;
import com.cf.imes.module.manage.dal.dataobject.parts.PartsDO; import com.cf.imes.module.manage.dal.dataobject.parts.PartsDO;
import com.cf.imes.module.manage.dal.mysql.parts.PartsMapper; 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.common.exception.util.ServiceExceptionUtil.exception;
import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getLoginUser; 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.*;
import static com.cf.imes.module.manage.enums.ErrorCodeConstants.PARTS_NOT_EXISTS;
/** /**
@@ -65,9 +65,11 @@ public class PartsServiceImpl implements PartsService {
@OrganIgnore @OrganIgnore
public Long create(PartsSaveReqVO createReqVO) { public Long create(PartsSaveReqVO createReqVO) {
validateFieldExists(createReqVO);
PartsDO partsDO = BeanUtils.toBean(createReqVO, PartsDO.class); PartsDO partsDO = BeanUtils.toBean(createReqVO, PartsDO.class);
Long organId = getOrganId(BASE_PARTS_CREATE_PERMISSION, getLoginUser().getId(), partsDO.getOrganId()); 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 // 判断是否存在--- goodsId
if (validateExistsByGoodsId(partsDO.getGoodsId(), organId)) { if (validateExistsByGoodsId(partsDO.getGoodsId(), organId)) {
throw exception(PARTS_GOOD_ID_EXISTS); throw exception(PARTS_GOOD_ID_EXISTS);
@@ -82,6 +84,9 @@ public class PartsServiceImpl implements PartsService {
@OrganIgnore @OrganIgnore
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void update(PartsSaveReqVO updateReqVO) { public void update(PartsSaveReqVO updateReqVO) {
validateFieldExists(updateReqVO);
Long organId = getOrganId(BASE_PARTS_UPDATE_PERMISSION, getLoginUser().getId(), updateReqVO.getOrganId()); Long organId = getOrganId(BASE_PARTS_UPDATE_PERMISSION, getLoginUser().getId(), updateReqVO.getOrganId());
// 校验id存在 // 校验id存在
boolean index = validateExistsById(updateReqVO.getId(),organId); boolean index = validateExistsById(updateReqVO.getId(),organId);
@@ -95,7 +100,7 @@ public class PartsServiceImpl implements PartsService {
throw exception(PARTS_GOOD_ID_EXISTS); 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); PartsDO updateObj = BeanUtils.toBean(updateReqVO, PartsDO.class);
partsMapper.updateById(updateObj); partsMapper.updateById(updateObj);
} }
@@ -186,10 +191,10 @@ public class PartsServiceImpl implements PartsService {
} }
}); });
// 批量插入,批量更新 // 批量插入,批量更新
if (insertList.size() > 0) { if (!insertList.isEmpty()) {
partsMapper.insertBatch(insertList); partsMapper.insertBatch(insertList);
} }
if (updateList.size() > 0) { if (!updateList.isEmpty()) {
partsMapper.updateBatch(updateList); partsMapper.updateBatch(updateList);
} }
} }
@@ -218,4 +223,20 @@ public class PartsServiceImpl implements PartsService {
return organIdDefault; 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);
}
}
}
}
} }
@@ -66,18 +66,19 @@ public final class PlateExcelListener<T> extends AnalysisEventListener<PlateImpo
} }
private void checkTexture(String valueCheck, String head, PlateImportExcelVO data) { private void checkTexture(String valueCheck, String head, PlateImportExcelVO data) {
String value = valueCheck.trim();
if (value.equals("")) { if (valueCheck == null || valueCheck.equals("")) {
this.flag = false; this.flag = false;
data.setResult(data.getResult() + "," + head + "信息缺少"); data.setResult(data.getResult() + "," + head + "信息缺少");
} else { } else {
String value = valueCheck.trim();
if (!value.equals("") && !value.equals("")) { if (!value.equals("") && !value.equals("")) {
this.flag = false; this.flag = false;
data.setResult(data.getResult() + "," + head + "信息有误"); data.setResult(data.getResult() + "," + head + "信息有误");
} else if (value.equals("")) { } else if (value.equals("")) {
data.setTexture("true"); data.setTexture("");
} else { } else {
data.setTexture("false"); data.setTexture("");
} }
} }
} }
@@ -1,5 +1,6 @@
package com.cf.imes.module.manage.service.plate; package com.cf.imes.module.manage.service.plate;
import java.io.File;
import java.util.*; import java.util.*;
import com.cf.imes.module.manage.controller.admin.plate.vo.plate.PlateImportExcelVO; import com.cf.imes.module.manage.controller.admin.plate.vo.plate.PlateImportExcelVO;
@@ -8,7 +9,9 @@ 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.controller.admin.plate.vo.plate.PlateSaveReqVO;
import com.cf.imes.module.manage.dal.dataobject.plate.PlateDO; import com.cf.imes.module.manage.dal.dataobject.plate.PlateDO;
import com.cf.imes.framework.common.pojo.PageResult; import com.cf.imes.framework.common.pojo.PageResult;
import org.springframework.boot.system.ApplicationHome;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid; import javax.validation.Valid;
/** /**
@@ -65,12 +68,24 @@ public interface PlateService {
PageResult<PlateDO> getPlatePage(PlatePageReqVO pageReqVO); PageResult<PlateDO> getPlatePage(PlatePageReqVO pageReqVO);
/** /**
* 批量导入用户 * 批量导入板材
* *
* @param importUsers 导入用户列表 * @param importUsers 导入板材列表
* @param isUpdateSupport 是否支持更新 * @param isUpdateSupport 是否支持更新
* @return 导入结果 * @return 导入结果
*/ */
PlateImportRespVO importPlateList(List<PlateImportExcelVO> importUsers, boolean isUpdateSupport , Long organId); PlateImportRespVO importPlateList(List<PlateImportExcelVO> 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";
}
} }
@@ -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.controller.admin.plate.vo.plate.PlateSaveReqVO;
import com.cf.imes.module.manage.dal.dataobject.plate.PlateDO; 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.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.organ.OrganApi;
import com.cf.imes.module.system.api.permission.PermissionApi; import com.cf.imes.module.system.api.permission.PermissionApi;
import com.cf.imes.module.system.enums.ErrorCodeConstants; 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 org.springframework.validation.annotation.Validated;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.List; import java.util.List;
@@ -71,11 +73,11 @@ public class PlateServiceImpl implements PlateService {
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void updatePlate(PlateSaveReqVO updateReqVO) { public void updatePlate(PlateSaveReqVO updateReqVO) {
// 校验存在 // 校验存在
validatePlateExists(Long.valueOf(updateReqVO.getId()), Long organId = getOrganId(BASE_PLATE_UPDATE_PERMISSION, getLoginUser().getId(), updateReqVO.getOrganId());
getOrganId(BASE_PLATE_UPDATE_PERMISSION, getLoginUser().getId(), updateReqVO.getOrganId())); validatePlateExists(Long.valueOf(updateReqVO.getId()), organId);
PlateDO updateObj = BeanUtils.toBean(updateReqVO, PlateDO.class); PlateDO updateObj = BeanUtils.toBean(updateReqVO, PlateDO.class);
// 校验板材goods_id是否相同 // 校验板材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); throw exception(PLATE_GOODS_ID_NOT_SAME);
} }
plateMapper.updateById(updateObj); plateMapper.updateById(updateObj);
@@ -165,6 +167,13 @@ public class PlateServiceImpl implements PlateService {
return respVO; return respVO;
} }
@Override
@OrganIgnore
public void exportTemplate(HttpServletResponse response, String value) {
String rootPath = getSavePath();
FileHelperUtil.getFile(rootPath, response, value);
}
private void validateOrganExists(Long organId) { private void validateOrganExists(Long organId) {
CommonResult<Boolean> index = organApi.validOrgan(organId); CommonResult<Boolean> index = organApi.validOrgan(organId);
if (!index.isSuccess()) { if (!index.isSuccess()) {
@@ -252,7 +252,7 @@ public class ErrorCodeConstants {
//=========== 板材信息 1-002-033-000 ============ //=========== 板材信息 1-002-033-000 ============
public static final ErrorCode PLATE_IMPORT_LIST_IS_EMPTY = new ErrorCode(1_002_033_001, "导入板材数据不能为空!"); 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_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 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, "板材不存在"); public static final ErrorCode REMAIN_PLATE_NOT_EXISTS = new ErrorCode(1_002_033_005, "板材不存在");