mirror of
http://192.168.1.205:9980/cf_devdept2/cf_imes_server.git
synced 2026-08-14 21:52:07 +08:00
新增配件管理、板材详情
This commit is contained in:
+2
@@ -8,4 +8,6 @@ package com.cf.imes.module.manage.enums;
|
||||
public class DictTypeConstants {
|
||||
|
||||
public static final String PLATE_TEXTURE = "plate_texture_type";// 板件纹里
|
||||
|
||||
public static final String PART_CATEGORY = "part_category";// 配件主类型
|
||||
}
|
||||
|
||||
+6
@@ -1,8 +1,14 @@
|
||||
package com.cf.imes.module.manage.enums;
|
||||
|
||||
import com.cf.imes.framework.common.exception.ErrorCode;
|
||||
|
||||
/**
|
||||
* @author there
|
||||
* 生产管理服务错误码枚举 使用1-004-000-000 段
|
||||
*/
|
||||
public interface ErrorCodeConstants {
|
||||
|
||||
public static final ErrorCode PARTS_NOT_EXISTS = new ErrorCode(1_004_000_000, "配件不存在");
|
||||
public static final ErrorCode PARTS_GOOD_ID_EXISTS = new ErrorCode(1_004_000_000, "配件标识已存在");
|
||||
|
||||
}
|
||||
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
package com.cf.imes.module.manage.enums.parts;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* 配件主类的枚举值
|
||||
*/
|
||||
@Getter
|
||||
@AllArgsConstructor
|
||||
public enum CategoryEnum implements ObjectEnum{
|
||||
|
||||
ASSEMBLY("组件"),
|
||||
HARDWARE("五金"),
|
||||
EDGING("封边条");
|
||||
|
||||
/**
|
||||
* 类别名称
|
||||
*/
|
||||
private final String value;
|
||||
|
||||
}
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
package com.cf.imes.module.manage.enums.parts;
|
||||
|
||||
public interface ObjectEnum {
|
||||
|
||||
String getValue();
|
||||
}
|
||||
+17
@@ -0,0 +1,17 @@
|
||||
package com.cf.imes.module.manage.enums.parts;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
@Getter
|
||||
@AllArgsConstructor
|
||||
public enum WhetherEnum implements ObjectEnum{
|
||||
|
||||
TRUE("是"),
|
||||
FALSE("否");
|
||||
|
||||
/**
|
||||
* 类别名称
|
||||
*/
|
||||
private final String value;
|
||||
}
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package com.cf.imes.module.manage.enums;
|
||||
package com.cf.imes.module.manage.enums.remainPlate;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package com.cf.imes.module.manage.enums;
|
||||
package com.cf.imes.module.manage.enums.remainPlate;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package com.cf.imes.module.manage.enums;
|
||||
package com.cf.imes.module.manage.enums.remainPlate;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
+148
@@ -0,0 +1,148 @@
|
||||
package com.cf.imes.module.manage.controller.admin.parts;
|
||||
|
||||
import com.cf.imes.module.manage.controller.admin.parts.vo.*;
|
||||
import com.cf.imes.module.manage.controller.admin.plate.vo.plate.PlateImportExcelVO;
|
||||
import com.cf.imes.module.manage.dal.dataobject.parts.PartsDO;
|
||||
import com.cf.imes.module.manage.service.parts.PartsExcelListener;
|
||||
import com.cf.imes.module.manage.service.parts.PartsService;
|
||||
import com.cf.imes.module.manage.util.file.ExcelReadUtil;
|
||||
import io.swagger.v3.oas.annotations.Parameters;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import javax.annotation.Resource;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
|
||||
import javax.validation.*;
|
||||
import javax.servlet.http.*;
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
import java.util.*;
|
||||
import java.io.IOException;
|
||||
|
||||
import com.cf.imes.framework.common.pojo.PageParam;
|
||||
import com.cf.imes.framework.common.pojo.PageResult;
|
||||
import com.cf.imes.framework.common.pojo.CommonResult;
|
||||
import com.cf.imes.framework.common.util.object.BeanUtils;
|
||||
import static com.cf.imes.framework.common.pojo.CommonResult.success;
|
||||
|
||||
import com.cf.imes.framework.excel.core.util.ExcelUtils;
|
||||
|
||||
import com.cf.imes.framework.operatelog.core.annotations.OperateLog;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import static com.cf.imes.framework.operatelog.core.enums.OperateTypeEnum.*;
|
||||
|
||||
|
||||
@Tag(name = "管理后台 - 配件管理")
|
||||
@RestController
|
||||
@RequestMapping("/manage/parts/")
|
||||
@Validated
|
||||
public class PartsController {
|
||||
|
||||
@Resource
|
||||
private PartsService partsService;
|
||||
|
||||
final String IMPORT_TEMPLATE = "配件导入模板.xlsx";
|
||||
|
||||
@PostMapping("/create")
|
||||
@Operation(summary = "创建配件")
|
||||
@PreAuthorize("@ss.hasAnyPermissions('system:accessory:create','base:accessory:create')")
|
||||
public CommonResult<Long> create(@Valid @RequestBody PartsSaveReqVO createReqVO) {
|
||||
return success(partsService.create(createReqVO));
|
||||
}
|
||||
|
||||
@PutMapping("/update")
|
||||
@Operation(summary = "更新配件")
|
||||
@PreAuthorize("@ss.hasAnyPermissions('system:accessory:update','base:accessory:update')")
|
||||
public CommonResult<Boolean> update(@Valid @RequestBody PartsSaveReqVO updateReqVO) {
|
||||
partsService.update(updateReqVO);
|
||||
return success(true);
|
||||
}
|
||||
|
||||
@DeleteMapping("/delete")
|
||||
@Operation(summary = "删除配件")
|
||||
@Parameters({
|
||||
@Parameter(name = "id", description = "编号", required = true, example = "1024"),
|
||||
@Parameter(name = "organId", description = "板材所属组织ID", example = "1024")
|
||||
})
|
||||
@PreAuthorize("@ss.hasAnyPermissions('system:accessory:delete','base:accessory:delete')")
|
||||
public CommonResult<Boolean> delete(@RequestParam("id") Long id,
|
||||
@RequestParam(value = "organId",required = false, defaultValue = "0") Long organId) {
|
||||
partsService.delete(id, organId);
|
||||
return success(true);
|
||||
}
|
||||
|
||||
@GetMapping("/get")
|
||||
@Operation(summary = "获得配件")
|
||||
@Parameters({
|
||||
@Parameter(name = "id", description = "编号", required = true, example = "1024"),
|
||||
@Parameter(name = "organId", description = "板材所属组织ID", example = "1024")
|
||||
})
|
||||
@PreAuthorize("@ss.hasAnyPermissions('system:accessory:query','base:accessory:query')")
|
||||
public CommonResult<PartsRespVO> get(@RequestParam("id") Long id,
|
||||
@RequestParam(value = "organId", required = false, defaultValue = "0") Long organId) {
|
||||
PartsDO partsDO = partsService.get(id, organId);
|
||||
return success(BeanUtils.toBean(partsDO, PartsRespVO.class));
|
||||
}
|
||||
|
||||
@GetMapping("/page")
|
||||
@Operation(summary = "获得配件分页")
|
||||
@PreAuthorize("@ss.hasAnyPermissions('manage:parts:query','base:accessory:query')")
|
||||
public CommonResult<PageResult<PartsRespVO>> getPage(@Valid PartsPageReqVO pageReqVO) {
|
||||
PageResult<PartsDO> pageResult = partsService.getPage(pageReqVO);
|
||||
return success(BeanUtils.toBean(pageResult, PartsRespVO.class));
|
||||
}
|
||||
|
||||
@GetMapping("/export-excel")
|
||||
@Operation(summary = "导出配件文件")
|
||||
@PreAuthorize("@ss.hasAnyPermissions('manage:parts:export','base:accessory:export')")
|
||||
@OperateLog(type = EXPORT)
|
||||
public void exportExcel(@Valid PartsPageReqVO pageReqVO,
|
||||
HttpServletResponse response) throws IOException {
|
||||
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
|
||||
List<PartsDO> list = partsService.getPage(pageReqVO).getList();
|
||||
// 导出 Excel
|
||||
ExcelUtils.write(response, "配件表 parts_{N}.xls", "数据", PartsRespVO.class,
|
||||
BeanUtils.toBean(list, PartsRespVO.class));
|
||||
}
|
||||
|
||||
@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) {
|
||||
partsService.exportTemplate(response, value);
|
||||
}
|
||||
|
||||
@PostMapping("/import")
|
||||
@Operation(summary = "导入配件")
|
||||
@Parameters({
|
||||
@Parameter(name = "file", description = "Excel 文件", required = true),
|
||||
@Parameter(name = "updateSupport", description = "是否支持更新", example = "true"),
|
||||
@Parameter(name = "organId", description = "配件所属组织ID")
|
||||
})
|
||||
@PreAuthorize("@ss.hasAnyPermissions('system:accessory:import','base:accessory:import')")
|
||||
public void importExcel(@RequestParam("file") MultipartFile file,
|
||||
@RequestParam(value = "updateSupport", required = false, defaultValue = "false") Boolean updateSupport,
|
||||
@RequestParam(value = "organId", required = false, defaultValue = "0") Long organId,
|
||||
HttpServletResponse response) throws Exception {
|
||||
|
||||
ExcelReadUtil excelReadUtil = new ExcelReadUtil();
|
||||
PartsExcelListener listener = new PartsExcelListener();
|
||||
List<PartsImportExcelVO> list = excelReadUtil.read(file, PartsImportExcelVO.class, listener);
|
||||
System.out.println(" list = " + list);
|
||||
if (!excelReadUtil.getFlag())
|
||||
ExcelUtils.write(response, IMPORT_TEMPLATE, "配件列表", PartsImportExcelVO.class, list);
|
||||
else {
|
||||
if (list.isEmpty()){
|
||||
PartsImportExcelVO partsImportExcelVO = PartsImportExcelVO.builder().result("导入失败,请保证导入文件中包含配件数据").build();
|
||||
list.add(partsImportExcelVO);
|
||||
ExcelUtils.write(response, IMPORT_TEMPLATE, "板材列表", PartsImportExcelVO.class, list);
|
||||
} else {
|
||||
partsService.importPartsList(list, updateSupport, organId);// 成功,批量导入
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
+73
@@ -0,0 +1,73 @@
|
||||
package com.cf.imes.module.manage.controller.admin.parts.vo;
|
||||
|
||||
import com.alibaba.excel.annotation.ExcelIgnore;
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
/**
|
||||
* 配件导入模板
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@Accessors(chain = false) // 设置 chain = false,避免用户导入有问题
|
||||
public class PartsImportExcelVO {
|
||||
|
||||
@ExcelProperty("配件编号")
|
||||
private String goodsId;
|
||||
|
||||
@ExcelProperty("复合部件")
|
||||
private String isComposite;
|
||||
|
||||
@ExcelProperty("配件类型")
|
||||
private String category;
|
||||
|
||||
@ExcelProperty("配件子类")
|
||||
private String type;
|
||||
|
||||
@ExcelProperty("配件名称")
|
||||
private String name;
|
||||
|
||||
@ExcelProperty("型号")
|
||||
private String model;
|
||||
|
||||
@ExcelProperty("颜色")
|
||||
private String color;
|
||||
|
||||
@ExcelProperty("材质")
|
||||
private String material;
|
||||
|
||||
@ExcelProperty("单位")
|
||||
private String unit;
|
||||
|
||||
@ExcelProperty("规格")
|
||||
private String spec;
|
||||
|
||||
@ExcelProperty("品牌")
|
||||
private String brand;
|
||||
|
||||
@ExcelProperty("厂家")
|
||||
private String factor;
|
||||
|
||||
@ExcelProperty("长度")// float(8,3)
|
||||
private String length;
|
||||
|
||||
@ExcelProperty("宽度")// float(8,3)
|
||||
private String width;
|
||||
|
||||
@ExcelProperty("厚度")
|
||||
private String thickness;
|
||||
|
||||
@ExcelProperty("备注")
|
||||
private String remark;
|
||||
|
||||
@ExcelProperty("上传结果")
|
||||
@ExcelIgnore
|
||||
private String result;
|
||||
|
||||
}
|
||||
+104
@@ -0,0 +1,104 @@
|
||||
package com.cf.imes.module.manage.controller.admin.parts.vo;
|
||||
|
||||
import com.cf.imes.framework.common.pojo.PageParam;
|
||||
import com.cf.imes.framework.common.validation.NumberValid;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.ToString;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import javax.validation.constraints.Size;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
import static com.cf.imes.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
|
||||
|
||||
/**
|
||||
* 查询
|
||||
*/
|
||||
@Schema(description = "管理后台 - 配件分页 Request VO")
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@ToString(callSuper = true)
|
||||
public class PartsPageReqVO extends PageParam {
|
||||
|
||||
@Schema(description = "设计端商品ID", example = "26589")
|
||||
@Size(max = 32, message = "配件编号长度不能超过32个字符")
|
||||
private String goodsId;
|
||||
|
||||
@Schema(description = "配件名称", example = "张三")
|
||||
@Size(max = 64, message = "配件名称长度不能超过64个字符")
|
||||
private String name;
|
||||
|
||||
@Schema(description = "颜色")
|
||||
@Size(max = 32, message = "颜色长度不能超过32个字符")
|
||||
private String color;
|
||||
|
||||
@Schema(description = "材质:颗粒板、欧松板、多层板、生态板、禾香板、密度板、实木、铝蜂窝板、铝塑板")
|
||||
@Size(max = 64, message = "材质长度不能超过64个字符")
|
||||
private String material;
|
||||
|
||||
@Schema(description = "配件类型", example = "2")
|
||||
@Size(max = 32, message = "配件类型长度不能超过323个字符")
|
||||
private String category;
|
||||
|
||||
@Schema(description = "配件子类", example = "2")
|
||||
@Size(max = 64, message = "配件子类长度不能超过64个字符")
|
||||
private String type;
|
||||
|
||||
@Schema(description = "型号")
|
||||
@Size(max = 64, message = "配件型号长度不能超过64个字符")
|
||||
private String model;
|
||||
|
||||
@Schema(description = "规格")
|
||||
@Size(max = 64, message = "配件规格不能超过64个字符")
|
||||
private String spec;
|
||||
|
||||
@Schema(description = "宽度")
|
||||
@NumberValid(name = "宽度")
|
||||
private Double[] width;
|
||||
|
||||
@Schema(description = "长度")
|
||||
@NumberValid(name = "长度")
|
||||
private Double[] length;
|
||||
|
||||
@Schema(description = "厚度")
|
||||
@NumberValid(name = "厚度")
|
||||
private Double[] thickness;
|
||||
|
||||
@Schema(description = "品牌")
|
||||
@Size(max = 64, message = "配件品牌不能超过64个字符")
|
||||
private String brand;
|
||||
|
||||
@Schema(description = "厂家")
|
||||
@Size(max = 128, message = "厂家长度不能超过64个字符")
|
||||
private String factory;
|
||||
|
||||
@Schema(description = "单位")
|
||||
@Size(max = 32, message = "单位长度不能超过64个字符")
|
||||
private String unit;
|
||||
|
||||
@Schema(description = "是否复合部件:0 否 1 是")
|
||||
private Boolean isComposite;
|
||||
|
||||
@Schema(description = "子配件ID列表,复合部件时记录子配件ID,半角逗号分隔", example = "你说的对")
|
||||
@Size(max = 255, message = "子配件列表长度不能超过255个字符")
|
||||
private String subparts;
|
||||
|
||||
@Schema(description = "备注", example = "你说的对")
|
||||
@Size(max = 255, message = "备注长度不能超过255个字符")
|
||||
private String remark;
|
||||
|
||||
@Schema(description = "创建时间")
|
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
||||
private LocalDateTime[] createTime;
|
||||
|
||||
private Long organId;
|
||||
|
||||
@Schema(description = "排序", example = "ascend")
|
||||
private String order;
|
||||
|
||||
@Schema(description = "排序字段", example = "id")
|
||||
private String field;
|
||||
|
||||
}
|
||||
+97
@@ -0,0 +1,97 @@
|
||||
package com.cf.imes.module.manage.controller.admin.parts.vo;
|
||||
|
||||
import com.cf.imes.framework.common.validation.NumberValid;
|
||||
import com.cf.imes.framework.excel.core.annotations.DictFormat;
|
||||
import com.cf.imes.module.manage.enums.DictTypeConstants;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.*;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import com.alibaba.excel.annotation.*;
|
||||
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
import javax.validation.constraints.Size;
|
||||
|
||||
@Schema(description = "管理后台 - 配件 Response VO")
|
||||
@Data
|
||||
@ExcelIgnoreUnannotated
|
||||
public class PartsRespVO {
|
||||
|
||||
@Schema(description = "配件 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "11238")
|
||||
@ExcelProperty("配件 ID")
|
||||
private Long id;
|
||||
|
||||
@Schema(description = "设计端商品ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "26589")
|
||||
@ExcelProperty("设计端商品ID")
|
||||
private String goodsId;
|
||||
|
||||
@Schema(description = "配件名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三")
|
||||
@ExcelProperty("配件名称")
|
||||
private String name;
|
||||
|
||||
@Schema(description = "颜色", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@Size(max = 32, message = "颜色长度不能超过32个字符")
|
||||
private String color;
|
||||
|
||||
@Schema(description = "材质:颗粒板、欧松板、多层板、生态板、禾香板、密度板、实木、铝蜂窝板、铝塑板", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@ExcelProperty("材质:颗粒板、欧松板、多层板、生态板、禾香板、密度板、实木、铝蜂窝板、铝塑板")
|
||||
private String material;
|
||||
|
||||
@Schema(description = "配件类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
|
||||
@ExcelProperty("配件类型")
|
||||
@DictFormat(DictTypeConstants.PART_CATEGORY)
|
||||
private String category;
|
||||
|
||||
@Schema(description = "配件子类", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
|
||||
@ExcelProperty("配件子类")
|
||||
private String type;
|
||||
|
||||
@Schema(description = "型号", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@ExcelProperty("型号")
|
||||
private String model;
|
||||
|
||||
@Schema(description = "宽度", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NumberValid(name = "宽度")
|
||||
private Double width;
|
||||
|
||||
@Schema(description = "长度", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NumberValid(name = "长度")
|
||||
private Double length;
|
||||
|
||||
@Schema(description = "厚度", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NumberValid(name = "厚度")
|
||||
private Double thickness;
|
||||
|
||||
@Schema(description = "规格", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@ExcelProperty("规格")
|
||||
private String spec;
|
||||
|
||||
@Schema(description = "品牌", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@ExcelProperty("品牌")
|
||||
private String brand;
|
||||
|
||||
@Schema(description = "厂家", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@ExcelProperty("厂家")
|
||||
private String factory;
|
||||
|
||||
@Schema(description = "单位", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@ExcelProperty("单位")
|
||||
private String unit;
|
||||
|
||||
@Schema(description = "是否复合部件:0 否 1 是", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@ExcelProperty("是否复合部件:0 否 1 是")
|
||||
private Boolean isComposite;
|
||||
|
||||
@Schema(description = "子配件ID列表,复合部件时记录子配件ID,半角逗号分隔", requiredMode = Schema.RequiredMode.REQUIRED, example = "你说的对")
|
||||
@ExcelProperty("是否复合部件:0 否 1 是")
|
||||
private String subparts;
|
||||
|
||||
@Schema(description = "备注", requiredMode = Schema.RequiredMode.REQUIRED, example = "你说的对")
|
||||
@ExcelProperty("备注")
|
||||
private String remark;
|
||||
|
||||
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@ExcelProperty("创建时间")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
}
|
||||
+95
@@ -0,0 +1,95 @@
|
||||
package com.cf.imes.module.manage.controller.admin.parts.vo;
|
||||
|
||||
import com.cf.imes.framework.common.validation.NumberValid;
|
||||
import com.cf.imes.module.manage.validation.parts.PartsCategoryValid;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.*;
|
||||
|
||||
import javax.validation.constraints.*;
|
||||
|
||||
@Schema(description = "管理后台 - 配件 新增/修改 Request VO")
|
||||
@Data
|
||||
public class PartsSaveReqVO {
|
||||
|
||||
@Schema(description = "配件 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "11238")
|
||||
private Long id;
|
||||
|
||||
@Schema(description = "设计端商品ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "26589")
|
||||
@NotEmpty(message = "设计端商品ID不能为空")
|
||||
@Size(max = 32, message = "设计端商品ID长度不能超过32个字符")
|
||||
private String goodsId;
|
||||
|
||||
@Schema(description = "配件名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三")
|
||||
@NotEmpty(message = "配件名称不能为空")
|
||||
@Size(max = 64, message = "配件名称长度不能超过64个字符")
|
||||
private String name;
|
||||
|
||||
@Schema(description = "颜色", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@Size(max = 32, message = "颜色长度不能超过32个字符")
|
||||
@NotEmpty(message = "颜色不能为空")
|
||||
private String color;
|
||||
|
||||
@Schema(description = "材质:颗粒板、欧松板、多层板、生态板、禾香板、密度板、实木、铝蜂窝板、铝塑板", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotEmpty(message = "材质:颗粒板、欧松板、多层板、生态板、禾香板、密度板、实木、铝蜂窝板、铝塑板不能为空")
|
||||
@Size(max = 64, message = "材质长度不能超过64个字符")
|
||||
private String material;
|
||||
|
||||
@Schema(description = "配件类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
|
||||
@NotEmpty(message = "配件类型不能为空")
|
||||
@Size(max = 32, message = "配件类型长度不能超过32个字符")
|
||||
@PartsCategoryValid
|
||||
private String category;
|
||||
|
||||
@Schema(description = "配件子类", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
|
||||
@Size(max = 64, message = "配件子类长度不能超过64个字符")
|
||||
private String type;
|
||||
|
||||
@Schema(description = "型号", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotEmpty(message = "型号不能为空")
|
||||
@Size(max = 64, message = "型号长度不能超过64个字符")
|
||||
private String model;
|
||||
|
||||
@Schema(description = "宽度", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NumberValid(name = "宽度")
|
||||
private Double width;
|
||||
|
||||
@Schema(description = "长度", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NumberValid(name = "长度")
|
||||
private Double length;
|
||||
|
||||
@Schema(description = "厚度", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NumberValid(name = "厚度")
|
||||
private Double thickness;
|
||||
|
||||
@Schema(description = "规格", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@Size(max = 64, message = "规格长度不能超过64个字符")
|
||||
private String spec;
|
||||
|
||||
@Schema(description = "品牌", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@Size(max = 64, message = "品牌长度不能超过64个字符")
|
||||
private String brand;
|
||||
|
||||
@Schema(description = "厂家", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@Size(max = 128, message = "厂家长度不能超过128个字符")
|
||||
private String factory;
|
||||
|
||||
@Schema(description = "单位", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotEmpty(message = "单位不能为空")
|
||||
@Size(max = 32, message = "单位长度不能超过32个字符")
|
||||
private String unit;
|
||||
|
||||
@Schema(description = "是否复合部件:0 否 1 是", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotNull(message = "是否复合部件不能为空")
|
||||
private Boolean isComposite;
|
||||
|
||||
@Schema(description = "子配件ID列表,复合部件时记录子配件ID,半角逗号分隔", requiredMode = Schema.RequiredMode.REQUIRED, example = "你说的对")
|
||||
@Size(max = 255, message = "子配件列表长度不能超过255个字符")
|
||||
private String subparts;
|
||||
|
||||
@Schema(description = "备注", requiredMode = Schema.RequiredMode.REQUIRED, example = "你说的对")
|
||||
@Size(max = 255, message = "备注长度不能超过255个字符")
|
||||
private String remark;
|
||||
|
||||
private Long organId;
|
||||
|
||||
}
|
||||
+5
-3
@@ -42,6 +42,8 @@ public class PlateController {
|
||||
@Resource
|
||||
private PlateService plateService;
|
||||
|
||||
final String IMPORT_TEMPLATE = "板材导入模板.xlsx";
|
||||
|
||||
@PostMapping("/create")
|
||||
@Operation(summary = "创建板材信息")
|
||||
// @PreAuthorize("@ss.hasPermission('manage:plate:create')")
|
||||
@@ -123,7 +125,7 @@ public class PlateController {
|
||||
.thickness(String.valueOf(18)).brand("鸿达树").spec("2750*1220*18").remark("测试").color("白玉木兰").texture("无").build()
|
||||
);
|
||||
// 输出
|
||||
ExcelUtils.write(response, "板材导入模板.xlsx", "板材列表", PlateImportExcelVO.class, list);
|
||||
ExcelUtils.write(response, IMPORT_TEMPLATE, "板材列表", PlateImportExcelVO.class, list);
|
||||
}
|
||||
|
||||
@PostMapping("/import")
|
||||
@@ -143,12 +145,12 @@ public class PlateController {
|
||||
List<PlateImportExcelVO> list = plateExcelUtil.read(file, PlateImportExcelVO.class);
|
||||
// 判断文件是否导入成功
|
||||
if (!plateExcelUtil.getFlag())
|
||||
ExcelUtils.write(response, "板材导入模板.xlsx", "板材列表", PlateImportExcelVO.class, list);
|
||||
ExcelUtils.write(response, IMPORT_TEMPLATE, "板材列表", PlateImportExcelVO.class, list);
|
||||
else {
|
||||
if (list.size() == 0){
|
||||
PlateImportExcelVO plateImportExcelVO = PlateImportExcelVO.builder().result("导入失败,请保证导入文件中包含板材数据").build();
|
||||
list.add(plateImportExcelVO);
|
||||
ExcelUtils.write(response, "板材导入模板.xlsx", "板材列表", PlateImportExcelVO.class, list);
|
||||
ExcelUtils.write(response, IMPORT_TEMPLATE, "板材列表", PlateImportExcelVO.class, list);
|
||||
}else {
|
||||
plateService.importPlateList(list, updateSupport, organId);// 成功,批量导入
|
||||
}
|
||||
|
||||
+101
@@ -0,0 +1,101 @@
|
||||
package com.cf.imes.module.manage.dal.dataobject.parts;
|
||||
|
||||
import lombok.*;
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import com.cf.imes.framework.mybatis.core.dataobject.BaseDO;
|
||||
|
||||
/**
|
||||
* 配件表 parts_{N} DO
|
||||
*
|
||||
* @author 晨丰科技
|
||||
*/
|
||||
@TableName("parts")
|
||||
@KeySequence("parts_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@ToString(callSuper = true)
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class PartsDO extends BaseDO {
|
||||
|
||||
/**
|
||||
* 配件 ID
|
||||
*/
|
||||
@TableId
|
||||
private Long id;
|
||||
/**
|
||||
* 组织id
|
||||
*/
|
||||
@TableField(fill = FieldFill.INSERT_UPDATE)
|
||||
private Long organId;
|
||||
/**
|
||||
* 设计端商品ID
|
||||
*/
|
||||
private String goodsId;
|
||||
/**
|
||||
* 配件名称
|
||||
*/
|
||||
private String name;
|
||||
/**
|
||||
* 材质:颗粒板、欧松板、多层板、生态板、禾香板、密度板、实木、铝蜂窝板、铝塑板
|
||||
*/
|
||||
private String material;
|
||||
/**
|
||||
* 颜色
|
||||
*/
|
||||
private String color;
|
||||
/**
|
||||
* 配件类型
|
||||
*/
|
||||
private String type;
|
||||
/**
|
||||
* 配件主类
|
||||
*/
|
||||
private String category;
|
||||
/**
|
||||
* 型号
|
||||
*/
|
||||
private String model;
|
||||
/**
|
||||
* 宽度
|
||||
*/
|
||||
private Double width;
|
||||
/**
|
||||
* 长度
|
||||
*/
|
||||
private Double length;
|
||||
/**
|
||||
* 厚度
|
||||
*/
|
||||
private Double thickness;
|
||||
/**
|
||||
* 规格
|
||||
*/
|
||||
private String spec;
|
||||
/**
|
||||
* 品牌
|
||||
*/
|
||||
private String brand;
|
||||
/**
|
||||
* 厂家
|
||||
*/
|
||||
private String factory;
|
||||
/**
|
||||
* 单位
|
||||
*/
|
||||
private String unit;
|
||||
/**
|
||||
* 是否复合部件:0 否 1 是
|
||||
*/
|
||||
private Boolean isComposite;
|
||||
/**
|
||||
* 子配件ID列表,复合部件时记录子配件ID,半角逗号分隔
|
||||
*/
|
||||
private String subparts;
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
|
||||
}
|
||||
+106
@@ -0,0 +1,106 @@
|
||||
package com.cf.imes.module.manage.dal.mysql.parts;
|
||||
|
||||
import com.cf.imes.framework.common.pojo.PageResult;
|
||||
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX;
|
||||
import com.cf.imes.module.manage.controller.admin.parts.vo.PartsPageReqVO;
|
||||
import com.cf.imes.module.manage.dal.dataobject.parts.PartsDO;
|
||||
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
/**
|
||||
* 配件表 parts_{N} Mapper
|
||||
*
|
||||
* @author 晨丰科技
|
||||
*/
|
||||
@Mapper
|
||||
public interface PartsMapper extends BaseMapperX<PartsDO> {
|
||||
|
||||
default PageResult<PartsDO> selectPage(PartsPageReqVO reqVO) {
|
||||
LambdaQueryWrapperX<PartsDO> queryWrapper = new LambdaQueryWrapperX<PartsDO>()
|
||||
.eqIfPresent(PartsDO::getOrganId, reqVO.getOrganId())
|
||||
.eqIfPresent(PartsDO::getCategory, reqVO.getCategory())
|
||||
.likeIfPresent(PartsDO::getGoodsId, reqVO.getGoodsId())
|
||||
.likeIfPresent(PartsDO::getColor, reqVO.getColor())
|
||||
.likeIfPresent(PartsDO::getType, reqVO.getType())
|
||||
.likeIfPresent(PartsDO::getName, reqVO.getName())
|
||||
.likeIfPresent(PartsDO::getMaterial, reqVO.getMaterial())
|
||||
.likeIfPresent(PartsDO::getModel, reqVO.getModel())
|
||||
.likeIfPresent(PartsDO::getSpec, reqVO.getSpec())
|
||||
.likeIfPresent(PartsDO::getBrand, reqVO.getBrand())
|
||||
.likeIfPresent(PartsDO::getFactory, reqVO.getFactory())
|
||||
.likeIfPresent(PartsDO::getUnit, reqVO.getUnit())
|
||||
.eqIfPresent(PartsDO::getIsComposite, reqVO.getIsComposite())
|
||||
.betweenIfPresent(PartsDO::getWidth, reqVO.getWidth())
|
||||
.betweenIfPresent(PartsDO::getLength, reqVO.getLength())
|
||||
.betweenIfPresent(PartsDO::getThickness, reqVO.getThickness())
|
||||
.likeIfPresent(PartsDO::getRemark, reqVO.getRemark())
|
||||
.betweenIfPresent(PartsDO::getCreateTime, reqVO.getCreateTime());
|
||||
|
||||
if (reqVO.getOrder() == null) {
|
||||
queryWrapper.orderByDesc(PartsDO::getGoodsId);
|
||||
}else {
|
||||
if (reqVO.getOrder().equals("ascend")) {
|
||||
switch (reqVO.getField()) {
|
||||
case "goodsId" -> queryWrapper.orderByAsc(PartsDO::getGoodsId);
|
||||
case "isComposite" -> queryWrapper.orderByAsc(PartsDO::getIsComposite);
|
||||
case "category" -> queryWrapper.orderByAsc(PartsDO::getCategory);
|
||||
case "type" -> queryWrapper.orderByAsc(PartsDO::getType);
|
||||
case "name" -> queryWrapper.orderByAsc(PartsDO::getName);
|
||||
case "model" -> queryWrapper.orderByAsc(PartsDO::getModel);
|
||||
case "material" -> queryWrapper.orderByAsc(PartsDO::getMaterial);
|
||||
case "color" -> queryWrapper.orderByAsc(PartsDO::getColor);
|
||||
case "unit" -> queryWrapper.orderByAsc(PartsDO::getUnit);
|
||||
case "spec" -> queryWrapper.orderByAsc(PartsDO::getSpec);
|
||||
case "brand" -> queryWrapper.orderByAsc(PartsDO::getBrand);
|
||||
case "factory" -> queryWrapper.orderByAsc(PartsDO::getFactory);
|
||||
case "width" -> queryWrapper.orderByAsc(PartsDO::getWidth);
|
||||
case "length" -> queryWrapper.orderByAsc(PartsDO::getLength);
|
||||
case "thickness" -> queryWrapper.orderByAsc(PartsDO::getThickness);
|
||||
default -> {
|
||||
// default不排序
|
||||
}
|
||||
}
|
||||
}else if (reqVO.getOrder().equals("descend")) {
|
||||
switch (reqVO.getField()) {
|
||||
case "goodsId" -> queryWrapper.orderByDesc(PartsDO::getGoodsId);
|
||||
case "isComposite" -> queryWrapper.orderByDesc(PartsDO::getIsComposite);
|
||||
case "category" -> queryWrapper.orderByDesc(PartsDO::getCategory);
|
||||
case "type" -> queryWrapper.orderByDesc(PartsDO::getType);
|
||||
case "name" -> queryWrapper.orderByDesc(PartsDO::getName);
|
||||
case "model" -> queryWrapper.orderByDesc(PartsDO::getModel);
|
||||
case "material" -> queryWrapper.orderByDesc(PartsDO::getMaterial);
|
||||
case "color" -> queryWrapper.orderByDesc(PartsDO::getColor);
|
||||
case "unit" -> queryWrapper.orderByDesc(PartsDO::getUnit);
|
||||
case "spec" -> queryWrapper.orderByDesc(PartsDO::getSpec);
|
||||
case "brand" -> queryWrapper.orderByDesc(PartsDO::getBrand);
|
||||
case "factory" -> queryWrapper.orderByDesc(PartsDO::getFactory);
|
||||
case "width" -> queryWrapper.orderByDesc(PartsDO::getWidth);
|
||||
case "length" -> queryWrapper.orderByDesc(PartsDO::getLength);
|
||||
case "thickness" -> queryWrapper.orderByDesc(PartsDO::getThickness);
|
||||
default -> {
|
||||
// default不排序
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return selectPage(reqVO, queryWrapper);
|
||||
}
|
||||
|
||||
default PartsDO selectById(Long id , Long organId) {
|
||||
return selectOne(PartsDO::getId, id, PartsDO::getOrganId, organId);
|
||||
}
|
||||
|
||||
default PartsDO selectByGoodID(String goodId , Long organId) {
|
||||
return selectOne(PartsDO::getGoodsId, goodId, PartsDO::getOrganId, organId);
|
||||
}
|
||||
|
||||
default PartsDO selectExceptGoodID(Long id, String goodId , Long organId) {
|
||||
return selectOne(new LambdaQueryWrapperX<PartsDO>()
|
||||
.ne(PartsDO::getId, id)
|
||||
.eq(PartsDO::getGoodsId, goodId)
|
||||
.eq(PartsDO::getOrganId, organId));
|
||||
}
|
||||
|
||||
}
|
||||
+211
@@ -0,0 +1,211 @@
|
||||
package com.cf.imes.module.manage.service.parts;
|
||||
|
||||
import com.alibaba.excel.context.AnalysisContext;
|
||||
import com.alibaba.excel.event.AnalysisEventListener;
|
||||
import com.alibaba.nacos.common.utils.StringUtils;
|
||||
import com.cf.imes.module.manage.controller.admin.parts.vo.PartsImportExcelVO;
|
||||
import com.cf.imes.module.manage.enums.parts.CategoryEnum;
|
||||
import com.cf.imes.module.manage.enums.parts.ObjectEnum;
|
||||
import com.cf.imes.module.manage.enums.parts.WhetherEnum;
|
||||
import com.cf.imes.module.manage.util.file.ExcelListener;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import java.text.DecimalFormat;
|
||||
import java.util.*;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
/**
|
||||
* 配件 导入监听器
|
||||
*/
|
||||
@Slf4j
|
||||
public final class PartsExcelListener extends ExcelListener<PartsImportExcelVO> {
|
||||
|
||||
private static final String ZERO = "0";
|
||||
|
||||
/**
|
||||
* 自定义用于暂时存储data
|
||||
* 可以通过实例获取该值
|
||||
*/
|
||||
private List<PartsImportExcelVO> datas = new ArrayList<>();
|
||||
|
||||
private boolean flag = true;
|
||||
|
||||
private Map<Integer, String> valueMap = new HashMap<>();
|
||||
|
||||
// 非空判断,错误写入;不为空则判断字符串长度是否超过
|
||||
private void isEmptyAndAdd(Supplier<String> getter, Consumer<String> setter,String msg, int maxLength) {
|
||||
String value = getter.get();
|
||||
if (StringUtils.isEmpty(value)) {
|
||||
setter.accept(msg + "不可为空");
|
||||
this.flag = false;
|
||||
} else { // 字符长度判断
|
||||
isLong(value, setter, maxLength, msg);
|
||||
}
|
||||
}
|
||||
|
||||
private void isEmpty(Supplier<String> getter, Consumer<String> setter,String msg) {
|
||||
String value = getter.get();
|
||||
if (StringUtils.isEmpty(value)) {
|
||||
setter.accept(msg + "不可为空");
|
||||
this.flag = false;
|
||||
}
|
||||
}
|
||||
|
||||
//不为空时,判断长度
|
||||
private void isNotEmptyAndAdd(Supplier<String> getter, Consumer<String> setter,String msg, int maxLength) {
|
||||
String value = getter.get();
|
||||
if (StringUtils.isNotEmpty(value)) {
|
||||
isLong(value, setter, maxLength, msg);
|
||||
}
|
||||
}
|
||||
|
||||
// 非空判断,并判断枚举值是否正确
|
||||
private <T extends Enum<T> & ObjectEnum> void isEmptyAndEnumAdd(Supplier<String> getter, Consumer<String> setter, String msg, Class<T> enumClass) {
|
||||
String value = getter.get();
|
||||
if (StringUtils.isEmpty(value)) {
|
||||
setter.accept(msg + "不可为空");
|
||||
this.flag = false;
|
||||
} else {
|
||||
boolean isValid = false;
|
||||
for (T enumValue : enumClass.getEnumConstants()) {
|
||||
if (Objects.equals(enumValue.getValue(), value)) {
|
||||
isValid = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!isValid) {
|
||||
setter.accept(msg + "请使用规范标识填写表格");
|
||||
this.flag = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 非空时判断字符串是否可以转换为Double,并判断整数位与小数位是否符合长度要求
|
||||
private void isEmptyAndDoubleAdd(Supplier<String> getter, Consumer<String> setter, String msg, int integerLength, int decimalLength) {
|
||||
String value = getter.get();
|
||||
if (StringUtils.isNotEmpty(value)) {
|
||||
// 判断是否可以转换
|
||||
try {
|
||||
Double d = Double.parseDouble(value);
|
||||
if (d < Double.parseDouble(ZERO)) {
|
||||
setter.accept(msg + "必须大于0");
|
||||
} else {
|
||||
// 处理科学计数法,保留小数点后四位
|
||||
DecimalFormat decimalFormat = new DecimalFormat("#.####");
|
||||
String valueString = decimalFormat.format(d);
|
||||
|
||||
String[] split = valueString.split("\\.");
|
||||
// 获取小数点前的位数
|
||||
int integerPartLength = split[0].length();
|
||||
// 获取小数点后的位数
|
||||
int fractionalPartLength = 0;
|
||||
if (split.length > 2) {
|
||||
fractionalPartLength = split[1].length();
|
||||
}
|
||||
|
||||
if (integerPartLength > integerLength || fractionalPartLength > decimalLength) {
|
||||
setter.accept(msg + "长度不合法,总长度不超过8位,小数点后不超过3位");
|
||||
}
|
||||
}
|
||||
} catch (NumberFormatException e) {
|
||||
setter.accept(msg + "必须为数字");
|
||||
this.flag = false;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
// 判断字符串长度是否过长
|
||||
private void isLong(String value, Consumer<String> setter, int maxLength, String msg) {
|
||||
if (value.length() > maxLength) {
|
||||
setter.accept(msg + "长度不能超过" + maxLength + "个字符");
|
||||
this.flag = false;
|
||||
}
|
||||
}
|
||||
// 结果数据生成
|
||||
private String setResult(String result, String value) {
|
||||
if (StringUtils.isEmpty(result)) {
|
||||
return value;
|
||||
} else {
|
||||
return result + "," + value;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 每解析一行都会回调invoke()方法
|
||||
*
|
||||
* @param data 读取后的数据对象
|
||||
* @param context 内容
|
||||
*/
|
||||
@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);
|
||||
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::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);
|
||||
isEmptyAndDoubleAdd(data::getLength, data::setResult, setResult(data.getResult(), "长度"), 5 , 3);
|
||||
isEmptyAndDoubleAdd(data::getWidth, data::setResult, setResult(data.getResult(), "宽度"), 5 , 3);
|
||||
isEmptyAndDoubleAdd(data::getThickness, data::setResult, setResult(data.getResult(), "厚度"), 5 , 3);
|
||||
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 (data.getResult() != null)
|
||||
data.setResult(data.getResult().replace("null,", ""));
|
||||
valueMap.put(context.getCurrentRowNum(), data.getResult());
|
||||
datas.add(data);
|
||||
}
|
||||
|
||||
/**
|
||||
* 读取完后操作
|
||||
*
|
||||
* @param context
|
||||
*/
|
||||
@Override
|
||||
public void doAfterAllAnalysed(AnalysisContext context) {
|
||||
if (this.flag)
|
||||
log.info("PlateExcelListener 所有数据读取完成");
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回数据
|
||||
*
|
||||
* @return 返回读取的数据集合
|
||||
**/
|
||||
public List<PartsImportExcelVO> getDates() {
|
||||
return datas;
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回读取结果
|
||||
*
|
||||
* @return 是否读取成功
|
||||
**/
|
||||
public boolean getFlag() {
|
||||
return flag;
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回错误信息
|
||||
*
|
||||
* @return String
|
||||
**/
|
||||
public Map<Integer, String> getValueMap() {
|
||||
return valueMap;
|
||||
}
|
||||
}
|
||||
+84
@@ -0,0 +1,84 @@
|
||||
package com.cf.imes.module.manage.service.parts;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.validation.*;
|
||||
|
||||
import com.cf.imes.framework.common.pojo.PageResult;
|
||||
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.controller.admin.plate.vo.plate.PlateImportExcelVO;
|
||||
import com.cf.imes.module.manage.controller.admin.plate.vo.plate.PlateImportRespVO;
|
||||
import com.cf.imes.module.manage.dal.dataobject.parts.PartsDO;
|
||||
import org.springframework.boot.system.ApplicationHome;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 配件表 parts_{N} Service 接口
|
||||
*
|
||||
* @author 晨丰科技
|
||||
*/
|
||||
public interface PartsService {
|
||||
|
||||
/**
|
||||
* 创建配件表 parts_{N}
|
||||
*
|
||||
* @param createReqVO 创建信息
|
||||
* @return 编号
|
||||
*/
|
||||
Long create(@Valid PartsSaveReqVO createReqVO);
|
||||
|
||||
/**
|
||||
* 更新配件表 parts_{N}
|
||||
*
|
||||
* @param updateReqVO 更新信息
|
||||
*/
|
||||
void update(@Valid PartsSaveReqVO updateReqVO);
|
||||
|
||||
/**
|
||||
* 删除配件表 parts_{N}
|
||||
*
|
||||
* @param id 编号
|
||||
*/
|
||||
void delete(Long id, Long organId);
|
||||
|
||||
/**
|
||||
* 获得配件表 parts_{N}
|
||||
*
|
||||
* @param id 编号
|
||||
* @return 配件表 parts_{N}
|
||||
*/
|
||||
PartsDO get(Long id, Long organId);
|
||||
|
||||
/**
|
||||
* 获得配件表 parts_{N}分页
|
||||
*
|
||||
* @param pageReqVO 分页查询
|
||||
* @return 配件表 parts_{N}分页
|
||||
*/
|
||||
PageResult<PartsDO> getPage(PartsPageReqVO pageReqVO);
|
||||
|
||||
/**
|
||||
* 生产导入文件模板下载
|
||||
*/
|
||||
void exportTemplate(HttpServletResponse response, String value);
|
||||
|
||||
/**
|
||||
* 批量导入配件
|
||||
*
|
||||
* @param importParts 导入配件列表
|
||||
* @param isUpdateSupport 是否支持更新
|
||||
*/
|
||||
void importPartsList(List<PartsImportExcelVO> importParts, boolean isUpdateSupport , Long organId);
|
||||
|
||||
|
||||
default String getSavePath() {
|
||||
ApplicationHome applicationHome = new ApplicationHome(this.getClass());
|
||||
|
||||
// 保存目录位置根据项目需求可随意更改
|
||||
return applicationHome.getDir().getAbsolutePath() + File.separator + "type";
|
||||
|
||||
}
|
||||
}
|
||||
+209
@@ -0,0 +1,209 @@
|
||||
package com.cf.imes.module.manage.service.parts;
|
||||
|
||||
import com.cf.imes.framework.common.pojo.CommonResult;
|
||||
import com.cf.imes.framework.organ.core.aop.OrganIgnore;
|
||||
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.util.file.FileHelperUtil;
|
||||
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.system.api.organ.OrganApi;
|
||||
import com.cf.imes.module.system.api.permission.PermissionApi;
|
||||
import com.cf.imes.module.system.enums.ErrorCodeConstants;
|
||||
import org.springframework.stereotype.Service;
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
|
||||
import com.cf.imes.framework.common.pojo.PageResult;
|
||||
import com.cf.imes.framework.common.util.object.BeanUtils;
|
||||
|
||||
|
||||
import java.util.ArrayList;
|
||||
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;
|
||||
|
||||
|
||||
/**
|
||||
* 配件表 parts_{N} Service 实现类
|
||||
*
|
||||
* @author 晨丰科技
|
||||
*/
|
||||
@Service
|
||||
@Validated
|
||||
public class PartsServiceImpl implements PartsService {
|
||||
|
||||
@Resource
|
||||
private PartsMapper partsMapper;
|
||||
|
||||
@Resource
|
||||
private OrganApi organApi;
|
||||
|
||||
@Resource
|
||||
private PermissionApi permissionApi;
|
||||
|
||||
private final static String BASE_PARTS_IMPORT_PERMISSION = "base:accessory:import"; // 导入板材
|
||||
private final static String BASE_PARTS_DELETE_PERMISSION = "base:accessory:delete"; // 删除板材信息
|
||||
private final static String BASE_PARTS_CREATE_PERMISSION = "base:accessory:create"; // 创建板材信息
|
||||
private final static String BASE_PARTS_UPDATE_PERMISSION = "base:accessory:update"; // 更新板材信息
|
||||
private final static String BASE_PARTS_QUERY_PERMISSION = "base:accessory:query"; // 获得板材信息
|
||||
|
||||
|
||||
@Override
|
||||
@OrganIgnore
|
||||
public Long create(PartsSaveReqVO createReqVO) {
|
||||
|
||||
PartsDO partsDO = BeanUtils.toBean(createReqVO, PartsDO.class);
|
||||
Long organId = getOrganId(BASE_PARTS_CREATE_PERMISSION, getLoginUser().getId(), partsDO.getOrganId());
|
||||
partsDO.setOrganId(organId).setIsComposite(false);
|
||||
// 判断是否存在--- goodsId
|
||||
if (validateExistsByGoodsId(partsDO.getGoodsId(), organId)) {
|
||||
throw exception(PARTS_GOOD_ID_EXISTS);
|
||||
}
|
||||
|
||||
partsMapper.insert(partsDO);
|
||||
// 返回
|
||||
return partsDO.getId();
|
||||
}
|
||||
|
||||
@Override
|
||||
@OrganIgnore
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void update(PartsSaveReqVO updateReqVO) {
|
||||
Long organId = getOrganId(BASE_PARTS_UPDATE_PERMISSION, getLoginUser().getId(), updateReqVO.getOrganId());
|
||||
// 校验id存在
|
||||
boolean index = validateExistsById(updateReqVO.getId(),organId);
|
||||
|
||||
if (!index) {
|
||||
throw exception(PARTS_NOT_EXISTS);
|
||||
}
|
||||
|
||||
// 校验goodsId是否存在
|
||||
if (!validateExistsExceptGoodsId(updateReqVO.getId(),updateReqVO.getGoodsId(),organId)) {
|
||||
throw exception(PARTS_GOOD_ID_EXISTS);
|
||||
}
|
||||
// 更新
|
||||
updateReqVO.setOrganId(organId);
|
||||
PartsDO updateObj = BeanUtils.toBean(updateReqVO, PartsDO.class);
|
||||
partsMapper.updateById(updateObj);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void delete(Long id, Long organId) {
|
||||
// 校验存在
|
||||
if (!validateExistsById(id, getOrganId(BASE_PARTS_DELETE_PERMISSION, getLoginUser().getId(), organId))) {
|
||||
throw exception(PARTS_NOT_EXISTS);
|
||||
}
|
||||
|
||||
// 删除
|
||||
partsMapper.deleteById(id);
|
||||
}
|
||||
|
||||
private boolean validateExistsById(Long id, Long organId) {
|
||||
if (partsMapper.selectById(id, organId) == null) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private boolean validateExistsByGoodsId(String goodsId, Long organId) {
|
||||
if (partsMapper.selectByGoodID(goodsId, organId) == null) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private boolean validateExistsExceptGoodsId(Long id, String goodsId, Long organId) {
|
||||
if (partsMapper.selectExceptGoodID(id, goodsId, organId) == null) { // 不存在相同的goods_id
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PartsDO get(Long id, Long organId) {
|
||||
organId = getOrganId(BASE_PARTS_QUERY_PERMISSION, getLoginUser().getId(), organId);
|
||||
return partsMapper.selectById(id, organId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PageResult<PartsDO> getPage(PartsPageReqVO pageReqVO) {
|
||||
pageReqVO.setOrganId(getOrganId(BASE_PARTS_QUERY_PERMISSION, getLoginUser().getId(), pageReqVO.getOrganId()));
|
||||
|
||||
return partsMapper.selectPage(pageReqVO);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void exportTemplate(HttpServletResponse response, String value) {
|
||||
String rootPath = getSavePath();
|
||||
FileHelperUtil.getFile(rootPath, response, value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void importPartsList(List<PartsImportExcelVO> importParts, boolean isUpdateSupport, Long organId) {
|
||||
|
||||
// 组织id
|
||||
organId = getOrganId(BASE_PARTS_IMPORT_PERMISSION, getLoginUser().getId(), organId);
|
||||
|
||||
// 批量插入集合
|
||||
List<PartsDO> insertList = new ArrayList<>();
|
||||
// 批量更新集合
|
||||
List<PartsDO> updateList = new ArrayList<>();
|
||||
|
||||
Long finalOrganId = organId;
|
||||
|
||||
importParts.forEach(importPart -> {
|
||||
// 判断如果不存在,在进行插入
|
||||
PartsDO existPlate = partsMapper.selectByGoodID(importPart.getGoodsId(), finalOrganId);
|
||||
if (existPlate == null) { // 不存在
|
||||
insertList.add(BeanUtils.toBean(importPart, PartsDO.class).setOrganId(finalOrganId));
|
||||
return;
|
||||
}
|
||||
// 判断是否允许更新
|
||||
if (!isUpdateSupport) {
|
||||
PartsDO partsDO = BeanUtils.toBean(importPart, PartsDO.class).setOrganId(finalOrganId).setId(existPlate.getId());
|
||||
updateList.add(partsDO);
|
||||
}
|
||||
});
|
||||
// 批量插入,批量更新
|
||||
if (insertList.size() > 0) {
|
||||
partsMapper.insertBatch(insertList);
|
||||
}
|
||||
if (updateList.size() > 0) {
|
||||
partsMapper.updateBatch(updateList);
|
||||
}
|
||||
}
|
||||
|
||||
private void validateOrganExists(Long organId) {
|
||||
CommonResult<Boolean> index = organApi.validOrgan(organId);
|
||||
if (!index.isSuccess()) {
|
||||
throw exception(ErrorCodeConstants.ORGAN_NOT_EXISTS);
|
||||
}
|
||||
}
|
||||
|
||||
// 组织id返回
|
||||
private Long getOrganId(String type, Long userId, Long organId) {
|
||||
|
||||
boolean hasPermission = permissionApi.hasRoles(userId, type).getData();
|
||||
|
||||
Long organIdDefault = OrganContextHolder.getOrganId();
|
||||
|
||||
if (hasPermission && organId != null && organId != 0) {
|
||||
|
||||
validateOrganExists(organId);
|
||||
|
||||
organIdDefault = organId;
|
||||
}
|
||||
|
||||
return organIdDefault;
|
||||
}
|
||||
|
||||
}
|
||||
+2
-2
@@ -6,8 +6,8 @@ import com.cf.imes.module.manage.controller.admin.plate.vo.remain.RemainPlateSav
|
||||
import com.cf.imes.module.manage.dal.dataobject.remainplaten.RemainPlateDO;
|
||||
import com.cf.imes.module.manage.dal.mysql.remainplaten.RemainPlateMapper;
|
||||
import com.cf.imes.framework.common.enums.DeletedCodeEnum;
|
||||
import com.cf.imes.module.manage.enums.RemainPlateStatusEnum;
|
||||
import com.cf.imes.module.manage.enums.RemainPlateUseTypeEnum;
|
||||
import com.cf.imes.module.manage.enums.remainPlate.RemainPlateStatusEnum;
|
||||
import com.cf.imes.module.manage.enums.remainPlate.RemainPlateUseTypeEnum;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
|
||||
+68
@@ -0,0 +1,68 @@
|
||||
package com.cf.imes.module.manage.util.file;
|
||||
|
||||
import com.alibaba.excel.context.AnalysisContext;
|
||||
import com.alibaba.excel.event.AnalysisEventListener;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
|
||||
/**
|
||||
* 文件读取监听
|
||||
*/
|
||||
public class ExcelListener<T> extends AnalysisEventListener<T> {
|
||||
/**
|
||||
* 自定义用于暂时存储data
|
||||
* 可以通过实例获取该值
|
||||
*/
|
||||
private List<T> dates = new ArrayList<>();
|
||||
|
||||
private boolean flag = true;
|
||||
|
||||
private Map<Integer, String> valueMap = new HashMap<>();
|
||||
|
||||
|
||||
@Override
|
||||
public void invoke(T t, AnalysisContext analysisContext) {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 读取完后操作
|
||||
*
|
||||
* @param context
|
||||
*/
|
||||
@Override
|
||||
public void doAfterAllAnalysed(AnalysisContext context) {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回数据
|
||||
*
|
||||
* @return 返回读取的数据集合
|
||||
**/
|
||||
public List<T> getDates() {
|
||||
return dates;
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回读取结果
|
||||
*
|
||||
* @return 是否读取成功
|
||||
**/
|
||||
public boolean getFlag() {
|
||||
return flag;
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回错误信息
|
||||
*
|
||||
* @return String
|
||||
**/
|
||||
public Map<Integer, String> getValueMap() {
|
||||
return valueMap;
|
||||
}
|
||||
}
|
||||
+61
@@ -0,0 +1,61 @@
|
||||
package com.cf.imes.module.manage.util.file;
|
||||
|
||||
import com.alibaba.excel.EasyExcelFactory;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 文件读取
|
||||
*/
|
||||
@Slf4j
|
||||
public final class ExcelReadUtil{
|
||||
|
||||
private String value;
|
||||
private boolean flag;
|
||||
|
||||
public <T> List<T> read(MultipartFile file, Class<T> head, ExcelListener<T> listener) throws IOException {
|
||||
value = "";
|
||||
flag = true;
|
||||
|
||||
if (file.isEmpty()) {
|
||||
value = "文件为空";
|
||||
flag = false;
|
||||
throw new IOException("文件为空");
|
||||
} else if (!(file.getOriginalFilename().endsWith(".xlsx") || file.getOriginalFilename().endsWith(".xls"))) {
|
||||
value = "文件格式不正确";
|
||||
flag = false;
|
||||
throw new IOException("文件格式不正确");
|
||||
} else if (file.getSize() > 1024 * 1024 * 10) {
|
||||
value = "文件大小超过 10M";
|
||||
flag = false;
|
||||
throw new IOException("文件大小超过 10M");
|
||||
} else if (file.getSize() == 0) {
|
||||
value = "文件大小为 0";
|
||||
flag = false;
|
||||
throw new IOException("文件大小为 0");
|
||||
} else {
|
||||
EasyExcelFactory.read(file.getInputStream(), head, listener)
|
||||
.autoCloseStream(true) // 不要自动关闭,交给 Servlet 自己处理
|
||||
.headRowNumber(1).sheet(0).doRead();
|
||||
//获取读取的数据
|
||||
List<T> list = listener.getDates();
|
||||
flag = listener.getFlag();
|
||||
if (!flag) {
|
||||
value = "导入数据有误";
|
||||
}
|
||||
return list;
|
||||
}
|
||||
}
|
||||
|
||||
public String getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
public boolean getFlag() {
|
||||
return flag;
|
||||
}
|
||||
|
||||
}
|
||||
+38
@@ -0,0 +1,38 @@
|
||||
package com.cf.imes.module.manage.util.file;
|
||||
|
||||
import org.springframework.boot.system.ApplicationHome;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.*;
|
||||
import java.net.URLEncoder;
|
||||
|
||||
/**
|
||||
* 文件上传下载相工具类
|
||||
*/
|
||||
public class FileHelperUtil {
|
||||
|
||||
// 文件下载
|
||||
public static void getFile(String route, HttpServletResponse response, String value) {
|
||||
// path是指想要下载的文件的路径
|
||||
File file = new File(route + File.separator + value);
|
||||
// 获取文件名
|
||||
String filename = file.getName();
|
||||
// 将文件写入输入流
|
||||
try (FileInputStream fis = new FileInputStream(file)) {
|
||||
byte[] buffer = new byte[fis.available()];
|
||||
fis.read(buffer);
|
||||
fis.close();
|
||||
|
||||
response.reset();
|
||||
response.setCharacterEncoding("UTF-8");
|
||||
response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename, "UTF-8"));
|
||||
response.addHeader("Content-Length", "" + file.length());
|
||||
OutputStream outputStream = new BufferedOutputStream(response.getOutputStream());
|
||||
response.setContentType("application/octet-stream");
|
||||
outputStream.write(buffer);
|
||||
outputStream.flush();
|
||||
} catch (IOException ex) {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -2,7 +2,7 @@ package com.cf.imes.module.manage.validation.common;
|
||||
|
||||
import javax.validation.ConstraintValidator;
|
||||
import javax.validation.ConstraintValidatorContext;
|
||||
import com.cf.imes.module.manage.enums.RemainPlateStatusEnum;
|
||||
import com.cf.imes.module.manage.enums.remainPlate.RemainPlateStatusEnum;
|
||||
|
||||
/**
|
||||
* 状态校验
|
||||
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
package com.cf.imes.module.manage.validation.parts;
|
||||
|
||||
import javax.validation.Constraint;
|
||||
import javax.validation.Payload;
|
||||
import java.lang.annotation.*;
|
||||
|
||||
/**
|
||||
* 配件主类校验注解
|
||||
*/
|
||||
@Target({
|
||||
ElementType.FIELD,
|
||||
})
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Documented
|
||||
@Constraint(
|
||||
validatedBy = {PartsCategoryValidator.class}
|
||||
)
|
||||
public @interface PartsCategoryValid {
|
||||
|
||||
String message() default "配件主类不合法,1:封边条,2:五金,3:组件";
|
||||
|
||||
Class<?>[] groups() default {};
|
||||
|
||||
Class<? extends Payload>[] payload() default {};
|
||||
|
||||
}
|
||||
+28
@@ -0,0 +1,28 @@
|
||||
package com.cf.imes.module.manage.validation.parts;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.cf.imes.module.manage.enums.parts.CategoryEnum;
|
||||
|
||||
import javax.validation.ConstraintValidator;
|
||||
import javax.validation.ConstraintValidatorContext;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* 配件主类校验
|
||||
*/
|
||||
public class PartsCategoryValidator implements ConstraintValidator<PartsCategoryValid, String> {
|
||||
|
||||
@Override
|
||||
public boolean isValid(String value, ConstraintValidatorContext context) {
|
||||
if (ObjectUtil.isNull(value)) {
|
||||
return true;
|
||||
}
|
||||
for (CategoryEnum categoryEnum : CategoryEnum.values()) {
|
||||
if (Objects.equals(categoryEnum.getValue(), value)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
package com.cf.imes.module.manage.validation.placeStyle;
|
||||
|
||||
import com.cf.imes.module.manage.enums.RemainPlatePlaceStyleEnum;
|
||||
import com.cf.imes.module.manage.enums.remainPlate.RemainPlatePlaceStyleEnum;
|
||||
|
||||
import javax.validation.ConstraintValidator;
|
||||
import javax.validation.ConstraintValidatorContext;
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
package com.cf.imes.module.manage.validation.type;
|
||||
|
||||
import com.cf.imes.module.manage.enums.RemainPlateUseTypeEnum;
|
||||
import com.cf.imes.module.manage.enums.remainPlate.RemainPlateUseTypeEnum;
|
||||
|
||||
import javax.validation.ConstraintValidator;
|
||||
import javax.validation.ConstraintValidatorContext;
|
||||
|
||||
BIN
Binary file not shown.
Reference in New Issue
Block a user