diff --git a/cf-framework/cf-common/src/main/java/com/cf/imes/framework/common/validation/InEnum.java b/cf-framework/cf-common/src/main/java/com/cf/imes/framework/common/validation/InEnum.java index 129e8ef83..ef3a7c038 100644 --- a/cf-framework/cf-common/src/main/java/com/cf/imes/framework/common/validation/InEnum.java +++ b/cf-framework/cf-common/src/main/java/com/cf/imes/framework/common/validation/InEnum.java @@ -28,6 +28,8 @@ public @interface InEnum { String message() default "inEnum.message"; + String fieldName() default ""; + Class[] groups() default {}; Class[] payload() default {}; diff --git a/cf-framework/cf-common/src/main/java/com/cf/imes/framework/common/validation/InEnumValidator.java b/cf-framework/cf-common/src/main/java/com/cf/imes/framework/common/validation/InEnumValidator.java index d1610e5f7..4dbc8cb78 100644 --- a/cf-framework/cf-common/src/main/java/com/cf/imes/framework/common/validation/InEnumValidator.java +++ b/cf-framework/cf-common/src/main/java/com/cf/imes/framework/common/validation/InEnumValidator.java @@ -18,8 +18,11 @@ public class InEnumValidator implements ConstraintValidator { private List values; + private String fieldName; + @Override public void initialize(InEnum annotation) { + fieldName = annotation.fieldName(); IntArrayValuable[] values = annotation.value().getEnumConstants(); if (values.length == 0) { this.values = Collections.emptyList(); @@ -44,7 +47,7 @@ public class InEnumValidator implements ConstraintValidator { // 校验不通过,自定义提示语句(因为,注解上的 value 是枚举类,无法获得枚举类的实际值) context.disableDefaultConstraintViolation(); // 禁用默认的 message 的值 - context.buildConstraintViolationWithTemplate(defaultConstraintMessageTemplate).addConstraintViolation(); // 重新添加错误提示语句 + context.buildConstraintViolationWithTemplate(fieldName + defaultConstraintMessageTemplate).addConstraintViolation(); // 重新添加错误提示语句 return false; } } diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/enums/common/WhetherEnum.java b/cf-framework/cf-spring-boot-starter-excel/src/main/java/com/cf/imes/framework/excel/core/enums/WhetherEnum.java similarity index 89% rename from cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/enums/common/WhetherEnum.java rename to cf-framework/cf-spring-boot-starter-excel/src/main/java/com/cf/imes/framework/excel/core/enums/WhetherEnum.java index 44049de42..0c98c7e1e 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/enums/common/WhetherEnum.java +++ b/cf-framework/cf-spring-boot-starter-excel/src/main/java/com/cf/imes/framework/excel/core/enums/WhetherEnum.java @@ -1,4 +1,4 @@ -package com.cf.imes.module.system.enums.common; +package com.cf.imes.framework.excel.core.enums; import com.cf.imes.framework.excel.core.convert.BaseBoolValEnum; import lombok.AllArgsConstructor; diff --git a/cf-module-system/cf-module-system-biz/src/test/java/com/cf/imes/module/system/enums/common/WhetherEnumTest.java b/cf-framework/cf-spring-boot-starter-excel/src/test/java/com/cf/imes/framework/excel/core/enums/WhetherEnumTest.java similarity index 94% rename from cf-module-system/cf-module-system-biz/src/test/java/com/cf/imes/module/system/enums/common/WhetherEnumTest.java rename to cf-framework/cf-spring-boot-starter-excel/src/test/java/com/cf/imes/framework/excel/core/enums/WhetherEnumTest.java index 3afd01dff..96e46d3e7 100644 --- a/cf-module-system/cf-module-system-biz/src/test/java/com/cf/imes/module/system/enums/common/WhetherEnumTest.java +++ b/cf-framework/cf-spring-boot-starter-excel/src/test/java/com/cf/imes/framework/excel/core/enums/WhetherEnumTest.java @@ -1,4 +1,4 @@ -package com.cf.imes.module.system.enums.common; +package com.cf.imes.framework.excel.core.enums; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; diff --git a/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/enums/ErrorCodeConstants.java b/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/enums/ErrorCodeConstants.java index 0e368511d..f12c3df2a 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/enums/ErrorCodeConstants.java +++ b/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/enums/ErrorCodeConstants.java @@ -168,4 +168,8 @@ public class ErrorCodeConstants { public static final ErrorCode PLATE_GOODS_ID_NOT_SAME = new ErrorCode(1_003_008_005, "板材商品编号存在,请重新命名商品编号"); public static final ErrorCode PLATE_IS_SOURCE = new ErrorCode(1_003_008_006, "小板:{} 为源小板,无法删除"); public static final ErrorCode PLATE_ATTR_GROUP_EXISTS = new ErrorCode(1_003_008_007, "当前名称、材质、颜色、厚度、品牌的组合已存在,请检查后提交"); + + //=========== 贴皮管理 1-003-009-000 ============ + public static final ErrorCode VENEER_NOT_EXIST = new ErrorCode(1_003_009_000, "veneer.not.exist"); + public static final ErrorCode VENEER_NO_EXIST = new ErrorCode(1_003_009_001, "veneer.no.exist"); } diff --git a/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/enums/manage/parts/CategoryEnum.java b/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/enums/manage/parts/CategoryEnum.java index 4e59dbc1b..c83fc2edd 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/enums/manage/parts/CategoryEnum.java +++ b/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/enums/manage/parts/CategoryEnum.java @@ -8,7 +8,7 @@ import lombok.Getter; */ @Getter @AllArgsConstructor -public enum CategoryEnum implements ObjectEnum{ +public enum CategoryEnum implements ObjectEnum { ASSEMBLY("组件"), HARDWARE("五金"), diff --git a/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/enums/manage/parts/WhetherEnum.java b/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/enums/manage/parts/WhetherEnum.java deleted file mode 100644 index 8402fcbf9..000000000 --- a/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/enums/manage/parts/WhetherEnum.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.cf.imes.module.executor.enums.manage.parts; - -import lombok.AllArgsConstructor; -import lombok.Getter; - -@Getter -@AllArgsConstructor -public enum WhetherEnum implements ObjectEnum { - - TRUE("是"), - FALSE("否"); - - /** - * 类别名称 - */ - private final String value; -} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/veneer/VeneerController.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/veneer/VeneerController.java new file mode 100644 index 000000000..760ed2e27 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/veneer/VeneerController.java @@ -0,0 +1,82 @@ +package com.cf.imes.module.executor.controller.admin.veneer; + +import com.cf.imes.framework.common.pojo.CommonResult; +import com.cf.imes.framework.common.pojo.PageResult; +import com.cf.imes.framework.operatelog.core.annotations.OperateLog; +import com.cf.imes.module.executor.controller.admin.veneer.vo.VeneerPageReqVO; +import com.cf.imes.module.executor.controller.admin.veneer.vo.VeneerRespVO; +import com.cf.imes.module.executor.controller.admin.veneer.vo.VeneerSaveReqVO; +import com.cf.imes.module.executor.service.veneer.VeneerService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import jakarta.validation.Valid; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestPart; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; + +import static com.cf.imes.framework.common.pojo.CommonResult.success; +import static com.cf.imes.framework.operatelog.core.enums.OperateTypeEnum.CREATE; + +/** + * + * + * @author Gqr + * @since 2026/1/4 14:26 + */ +@Tag(name = "生产管理 - 贴皮管理") +@RestController +@RequestMapping("/executor/veneer") +@Validated +public class VeneerController { + + @Resource + private VeneerService veneerService; + + @GetMapping("/page") + @Operation(summary = "分页查询") + public CommonResult> getVeneerPage(@Valid VeneerPageReqVO pageReqVO) { + return success(veneerService.getPage(pageReqVO)); + } + + @GetMapping("/{id}") + @Operation(summary = "根据id获取贴皮") + public CommonResult getVeneer(@PathVariable Long id) { + return success(veneerService.get(id)); + } + + @PutMapping("") + @Operation(summary = "创建贴皮") + public CommonResult createVeneer(@Valid @RequestBody VeneerSaveReqVO reqVO) { + return success(veneerService.create(reqVO)); + } + + @PostMapping("") + @Operation(summary = "编辑贴皮") + public CommonResult updateVeneer(@Valid @RequestBody VeneerSaveReqVO reqVO) { + return success(veneerService.update(reqVO) == 1); + } + + @DeleteMapping("/{id}") + @Operation(summary = "删除贴皮") + public CommonResult deleteVeneer(@PathVariable Long id) { + return success(veneerService.delete(id) == 1); + } + + @PutMapping("/pic") + @Operation(summary = "上传贴皮照片") + @OperateLog(logArgs = false, type = CREATE) + public CommonResult uploadVeneerPic(@RequestPart(value = "file") MultipartFile file) throws IOException { + return success(veneerService.uploadPic(file)); + } +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/veneer/vo/VeneerPageReqVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/veneer/vo/VeneerPageReqVO.java new file mode 100644 index 000000000..b8454c2e0 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/veneer/vo/VeneerPageReqVO.java @@ -0,0 +1,92 @@ +package com.cf.imes.module.executor.controller.admin.veneer.vo; + +import com.cf.imes.framework.common.pojo.PageParam; +import com.cf.imes.framework.common.validation.InEnum; +import com.cf.imes.module.executor.enums.veneer.VeneerProductLevelEnum; +import com.cf.imes.module.executor.enums.veneer.VeneerStatusEnum; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.hibernate.validator.constraints.Length; + +import java.math.BigDecimal; + +/** + * + * + * @author Gqr + * @since 2026/1/4 17:56 + */ +@Schema(description = "生产管理 - 贴皮分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class VeneerPageReqVO extends PageParam { + @Schema(description = "贴皮编号") + @Length(max = 32, message = "{veneer.save.veneerNo.length.max}") + private String veneerNo; + + @Schema(description = "批次号") + @Length(max = 32, message = "{veneer.save.batchNo.length.max}") + private String batchNo; + + @Schema(description = "分类名称") + private String classificationName; + + @Schema(description = "贴皮名称") + @Length(max = 64, message = "{veneer.save.veneerName.length.max}") + private String veneerName; + + @Schema(description = "产品等级,0:A类、1:B类、2:C类") + @InEnum(value = VeneerProductLevelEnum.class, fieldName = "productLevel") + private Integer productLevel; + + @Schema(description = "颜色") + @Length(max = 32, message = "{veneer.save.color.length.max}") + private String color; + + @Schema(description = "材质") + @Length(max = 64, message = "{veneer.save.material.length.max}") + private String material; + + @Schema(description = "宽") + private BigDecimal[] width; + + @Schema(description = "长") + private BigDecimal[] length; + + @Schema(description = "厚") + private BigDecimal[] thickness; + + @Schema(description = "规格") + @Length(max = 64, message = "{veneer.save.spec.length.max}") + private String spec; + + @Schema(description = "厂家") + @Length(max = 128, message = "{veneer.save.factory.length.max}") + private String factory; + + @Schema(description = "数量") + private Integer[] num; + + @Schema(description = "瑕疵") + private Boolean defect; + + @Schema(description = "备注") + @Length(max = 255, message = "{veneer.save.remark.length.max}") + private String remark; + + @Schema(description = "余料") + private Boolean remain; + + @Schema(description = "源排单号") + private Long sourcePlanNo; + + @Schema(description = "使用排单号") + private Long planNo; + + @Schema(description = "状态,0:未使用、1:已使用") + @InEnum(value = VeneerStatusEnum.class, fieldName = "status") + private Integer status; +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/veneer/vo/VeneerRespVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/veneer/vo/VeneerRespVO.java new file mode 100644 index 000000000..08784851a --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/veneer/vo/VeneerRespVO.java @@ -0,0 +1,99 @@ +package com.cf.imes.module.executor.controller.admin.veneer.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.cf.imes.framework.excel.core.annotations.EnumFormat; +import com.cf.imes.framework.excel.core.convert.EnumBoolValConvert; +import com.cf.imes.framework.excel.core.convert.EnumConvert; +import com.cf.imes.framework.excel.core.enums.WhetherEnum; +import com.cf.imes.module.executor.enums.veneer.VeneerProductLevelEnum; +import com.cf.imes.module.executor.enums.veneer.VeneerStatusEnum; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.math.BigDecimal; + +/** + * + * + * @author Gqr + * @since 2026/1/5 8:59 + */ +@Schema(description = "生产管理 - 贴皮管理分页 Response VO") +@Data +@ExcelIgnoreUnannotated +public class VeneerRespVO { + @Schema(description = "贴皮id") + private Long id; + + @Schema(description = "贴皮编号") + @ExcelProperty("veneer.export.head.veneerNo") + private String veneerNo; + + @Schema(description = "分类名称") + @ExcelProperty("veneer.export.head.classificationName") + private String classificationName; + + @Schema(description = "贴皮名称") + @ExcelProperty("veneer.export.head.veneerName") + private String veneerName; + + @Schema(description = "产品等级,0:A类、1:B类、2:C类") + @ExcelProperty(value = "veneer.export.head.productLevel", converter = EnumConvert.class) + @EnumFormat(value = VeneerProductLevelEnum.class) + private Integer productLevel; + + @Schema(description = "批次号") + @ExcelProperty("veneer.export.head.batchNo") + private String batchNo; + + @Schema(description = "颜色") + @ExcelProperty("veneer.export.head.color") + private String color; + + @Schema(description = "材质") + @ExcelProperty("veneer.export.head.material") + private String material; + + @Schema(description = "宽") + @ExcelProperty("veneer.export.head.width") + private BigDecimal width; + + @Schema(description = "长") + @ExcelProperty("veneer.export.head.length") + private BigDecimal length; + + @Schema(description = "厚") + @ExcelProperty("veneer.export.head.thickness") + private BigDecimal thickness; + + @Schema(description = "品牌") + @ExcelProperty("veneer.export.head.brand") + private String brand; + + @Schema(description = "规格") + @ExcelProperty("veneer.export.head.spec") + private String spec; + + @Schema(description = "厂家") + @ExcelProperty("veneer.export.head.factory") + private String factory; + + @Schema(description = "数量") + @ExcelProperty("veneer.export.head.num") + private Integer num; + + @Schema(description = "瑕疵") + @ExcelProperty(value = "veneer.export.head.defect", converter = EnumBoolValConvert.class) + @EnumFormat(value = WhetherEnum.class) + private Boolean defect; + + @Schema(description = "备注") + @ExcelProperty("veneer.export.head.remark") + private String remark; + + @Schema(description = "状态,0:未使用、1:已使用") + @ExcelProperty(value = "veneer.export.head.status", converter = EnumConvert.class) + @EnumFormat(value = VeneerStatusEnum.class) + private Integer status; +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/veneer/vo/VeneerSaveReqVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/veneer/vo/VeneerSaveReqVO.java new file mode 100644 index 000000000..14d6a5fde --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/veneer/vo/VeneerSaveReqVO.java @@ -0,0 +1,90 @@ +package com.cf.imes.module.executor.controller.admin.veneer.vo; + +import com.cf.imes.framework.common.validation.InEnum; +import com.cf.imes.module.executor.enums.veneer.VeneerProductLevelEnum; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +import java.math.BigDecimal; + +/** + * + * + * @author Gqr + * @since 2026/1/4 14:26 + */ +@Schema(description = "生产管理 - 贴皮管理 新增/修改 Request VO") +@Data +public class VeneerSaveReqVO { + @Schema(description = "贴皮id") + private Long id; + + @Schema(description = "贴皮编号", requiredMode = Schema.RequiredMode.REQUIRED) + @NotBlank(message = "{veneer.save.veneerNo.not.null}") + @Length(max = 32, message = "{veneer.save.veneerNo.length.max}") + private String veneerNo; + + @Schema(description = "批次号") + @Length(max = 32, message = "{veneer.save.batchNo.length.max}") + private String batchNo; + + @Schema(description = "分类名称", requiredMode = Schema.RequiredMode.REQUIRED) + @NotBlank(message = "{veneer.save.classificationName.not.null}") + private String classificationName; + + @Schema(description = "产品等级,0:A类、1:B类、2:C类", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "{veneer.save.productLevel.not.null}") + @InEnum(value = VeneerProductLevelEnum.class, fieldName = "productLevel") + private Integer productLevel; + + @Schema(description = "贴皮名称", requiredMode = Schema.RequiredMode.REQUIRED) + @NotBlank(message = "{veneer.save.veneerName.not.null}") + @Length(max = 64, message = "{veneer.save.veneerName.length.max}") + private String veneerName; + + @Schema(description = "数量", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "{veneer.save.num.not.null}") + private Integer num; + + @Schema(description = "宽度", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "{veneer.save.width.not.null}") + private BigDecimal width; + + @Schema(description = "长度", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "{veneer.save.length.not.null}") + private BigDecimal length; + + @Schema(description = "厚度", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "{veneer.save.thickness.not.null}") + private BigDecimal thickness; + + @Schema(description = "颜色") + @Length(max = 32, message = "{veneer.save.color.length.max}") + private String color; + + @Schema(description = "材料") + @Length(max = 64, message = "{veneer.save.material.length.max}") + private String material; + + @Schema(description = "规格") + @Length(max = 64, message = "{veneer.save.spec.length.max}") + private String spec; + + @Schema(description = "品牌") + @Length(max = 64, message = "{veneer.save.brand.length.max}") + private String brand; + + @Schema(description = "厂家") + @Length(max = 128, message = "{veneer.save.factory.length.max}") + private String factory; + + @Schema(description = "备注", example = "备注") + @Length(max = 255, message = "{veneer.save.remark.length.max}") + private String remark; + + @Schema(description = "贴皮照片文件id", requiredMode = Schema.RequiredMode.REQUIRED) + private Long fileId; +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/veneer/VeneerDO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/veneer/VeneerDO.java new file mode 100644 index 000000000..40420fd43 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/veneer/VeneerDO.java @@ -0,0 +1,153 @@ +package com.cf.imes.module.executor.dal.dataobject.veneer; + +import com.baomidou.mybatisplus.annotation.FieldStrategy; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.cf.imes.framework.mybatis.core.dataobject.BaseDO; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.ToString; + +import java.math.BigDecimal; + +/** + * 贴皮表 veneers_{N} DO + * + * @author Gqr + * @since 2026/1/4 14:10 + */ +@TableName("veneers") +@KeySequence("veneers_n_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class VeneerDO extends BaseDO { + /** + * 主键 + */ + private Long id; + + /** + * 贴皮编号 + */ + private String veneerNo; + + /** + * 批次号 + */ + @TableField(updateStrategy = FieldStrategy.ALWAYS) + private String batchNo; + + /** + * 组织ID + */ + private Long organId; + + /** + * 分类名称 + */ + private String classificationName; + + /** + * 贴皮名称 + */ + private String veneerName; + + /** + * 产品等级 + */ + private Integer productLevel; + + /** + * 品牌 + */ + @TableField(updateStrategy = FieldStrategy.ALWAYS) + private String brand; + + /** + * 规格 + */ + @TableField(updateStrategy = FieldStrategy.ALWAYS) + private String spec; + + /** + * 材质 + */ + @TableField(updateStrategy = FieldStrategy.ALWAYS) + private String material; + + /** + * 颜色 + */ + @TableField(updateStrategy = FieldStrategy.ALWAYS) + private String color; + + /** + * 厂家 + */ + @TableField(updateStrategy = FieldStrategy.ALWAYS) + private String factory; + + /** + * 数量 + */ + private Integer num; + + /** + * 是否有瑕疵:0否 1是 + */ + private Boolean defect; + + /** + * 是否余料:0否 1是 + */ + private Boolean remain; + + /** + * 源排单号 + */ + private Long sourcePlanNo; + + /** + * 使用排单号 + */ + private Long planNo; + + /** + * 状态:0未使用 1已使用 + */ + private Integer status; + + /** + * 宽 + */ + private BigDecimal width; + + /** + * 长 + */ + private BigDecimal length; + + /** + * 厚 + */ + private BigDecimal thickness; + + /** + * 备注 + */ + @TableField(updateStrategy = FieldStrategy.ALWAYS) + private String remark; + + /** + * 贴皮文件ID + */ + private Long fileId; +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/veneer/VeneerMapper.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/veneer/VeneerMapper.java new file mode 100644 index 000000000..c9693b0d2 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/veneer/VeneerMapper.java @@ -0,0 +1,47 @@ +package com.cf.imes.module.executor.dal.mysql.veneer; + +import com.cf.imes.framework.common.pojo.PageResult; +import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX; +import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.cf.imes.module.executor.controller.admin.veneer.vo.VeneerPageReqVO; +import com.cf.imes.module.executor.dal.dataobject.veneer.VeneerDO; +import org.apache.ibatis.annotations.Mapper; + + +/** + * 贴皮 Mapper + * + * @author Gqr + * @since 2026/1/4 14:14 + */ +@Mapper +public interface VeneerMapper extends BaseMapperX { + /** + * 分页查询 + * @param reqVO + * @return + */ + default PageResult selectPage(VeneerPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(VeneerDO::getVeneerNo, reqVO.getVeneerNo()) + .eqIfPresent(VeneerDO::getBatchNo, reqVO.getBatchNo()) + .eqIfPresent(VeneerDO::getClassificationName, reqVO.getClassificationName()) + .eqIfPresent(VeneerDO::getVeneerName, reqVO.getVeneerName()) + .eqIfPresent(VeneerDO::getProductLevel, reqVO.getProductLevel()) + .eqIfPresent(VeneerDO::getColor, reqVO.getColor()) + .eqIfPresent(VeneerDO::getMaterial, reqVO.getMaterial()) + .betweenIfPresent(VeneerDO::getLength, reqVO.getLength()) + .betweenIfPresent(VeneerDO::getWidth, reqVO.getWidth()) + .betweenIfPresent(VeneerDO::getThickness, reqVO.getThickness()) + .eqIfPresent(VeneerDO::getSpec, reqVO.getSpec()) + .eqIfPresent(VeneerDO::getFactory, reqVO.getFactory()) + .betweenIfPresent(VeneerDO::getNum, reqVO.getNum()) + .eqIfPresent(VeneerDO::getDefect, reqVO.getDefect()) + .likeIfPresent(VeneerDO::getRemark, reqVO.getRemark()) + .eqIfPresent(VeneerDO::getRemain, reqVO.getRemain()) + .eqIfPresent(VeneerDO::getSourcePlanNo, reqVO.getSourcePlanNo()) + .eqIfPresent(VeneerDO::getPlanNo, reqVO.getPlanNo()) + .eqIfPresent(VeneerDO::getStatus, reqVO.getStatus()) + .orderByDesc(VeneerDO::getId)); + } +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/enums/veneer/VeneerProductLevelEnum.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/enums/veneer/VeneerProductLevelEnum.java new file mode 100644 index 000000000..d0ca51be9 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/enums/veneer/VeneerProductLevelEnum.java @@ -0,0 +1,40 @@ +package com.cf.imes.module.executor.enums.veneer; + +import com.cf.imes.framework.common.core.IntArrayValuable; +import com.cf.imes.framework.excel.core.convert.BaseEnum; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +import java.util.Arrays; + +/** + * 贴皮产品等级枚举 + * + * @author Gqr + * @since 2026/1/4 15:29 + */ +@RequiredArgsConstructor +@Getter +public enum VeneerProductLevelEnum implements IntArrayValuable, BaseEnum { + A(0,"A类"), + B(1,"B类"), + C(2,"C类"); + + public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(VeneerProductLevelEnum::getCode).toArray(); + + @Override + public int[] array() { + return ARRAYS; + } + + /** + * 枚举值 + */ + private final Integer code; + + /** + * 状态名 + */ + private final String desc; + +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/enums/veneer/VeneerStatusEnum.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/enums/veneer/VeneerStatusEnum.java new file mode 100644 index 000000000..4ea893eef --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/enums/veneer/VeneerStatusEnum.java @@ -0,0 +1,38 @@ +package com.cf.imes.module.executor.enums.veneer; + +import com.cf.imes.framework.common.core.IntArrayValuable; +import com.cf.imes.framework.excel.core.convert.BaseEnum; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +import java.util.Arrays; + +/** + * 贴皮状态枚举 + * + * @author Gqr + * @since 2026/1/5 11:22 + */ +@RequiredArgsConstructor +@Getter +public enum VeneerStatusEnum implements IntArrayValuable, BaseEnum { + NOT_USE(0, "未使用"), + USED(1, "已使用"); + + public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(VeneerStatusEnum::getCode).toArray(); + + @Override + public int[] array() { + return ARRAYS; + } + + /** + * 枚举值 + */ + private final Integer code; + + /** + * 状态名 + */ + private final String desc; +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/manage/parts/PartsExcelListener.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/manage/parts/PartsExcelListener.java index 1198f82bb..21dfab48d 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/manage/parts/PartsExcelListener.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/manage/parts/PartsExcelListener.java @@ -2,10 +2,11 @@ package com.cf.imes.module.executor.service.manage.parts; import com.alibaba.excel.context.AnalysisContext; import com.alibaba.nacos.common.utils.StringUtils; +import com.cf.imes.framework.excel.core.convert.BaseBoolValEnum; +import com.cf.imes.framework.excel.core.enums.WhetherEnum; import com.cf.imes.module.executor.controller.admin.manage.parts.vo.PartsImportExcelVO; import com.cf.imes.module.executor.enums.manage.parts.CategoryEnum; import com.cf.imes.module.executor.enums.manage.parts.ObjectEnum; -import com.cf.imes.module.executor.enums.manage.parts.WhetherEnum; import com.cf.imes.module.executor.util.file.ExcelListener; import lombok.extern.slf4j.Slf4j; @@ -92,6 +93,35 @@ public final class PartsExcelListener extends ExcelListener } } + // 非空判断,并判断枚举值是否正确 + private & BaseBoolValEnum> void isEmptyAndBoolEnumAdd(Supplier getter, Consumer setter, String msg, Class enumClass) { + String value = getter.get(); + if (StringUtils.isEmpty(value)) { + setter.accept(msg + "不可为空"); + this.flag = false; + } else { + isNotEmptyToBoolEnum(getter, setter, msg, enumClass); + } + } + + // 不为空,判断枚举值是否正确 + private & BaseBoolValEnum> void isNotEmptyToBoolEnum(Supplier getter, Consumer setter, String msg, Class enumClass) { + String value = getter.get(); + if (!StringUtils.isEmpty(value)) { + boolean isValid = false; + for (BaseBoolValEnum enumValue : enumClass.getEnumConstants()) { + if (Objects.equals(enumValue.getDesc(), value)) { + isValid = true; + break; + } + } + if (!isValid) { + setter.accept(msg + "请使用规范标识填写表格"); + this.flag = false; + } + } + } + // 非空时判断字符串是否可以转换为Double,并判断整数位与小数位是否符合长度要求 private void isEmptyAndDoubleAdd(Supplier getter, Consumer setter, String msg, int integerLength, int decimalLength) { String value = getter.get(); @@ -170,7 +200,7 @@ public final class PartsExcelListener extends ExcelListener } // 三,存在则判断是否符合 - isNotEmptyToEnum(data::getIsComposite, data::setResult, setResult(data.getResult(), "是否复合部件"), WhetherEnum.class); + isEmptyAndBoolEnumAdd(data::getIsComposite, data::setResult, setResult(data.getResult(), "是否复合部件"), WhetherEnum.class); isNotEmptyAndAdd(data::getType, data::setResult, setResult(data.getResult(), "子类型"), 64); isNotEmptyAndAdd(data::getModel, data::setResult, setResult(data.getResult(), "型号"), 64); isNotEmptyAndAdd(data::getColor, data::setResult, setResult(data.getResult(), "颜色"), 64); diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/veneer/VeneerService.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/veneer/VeneerService.java new file mode 100644 index 000000000..9cfdb8b0e --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/veneer/VeneerService.java @@ -0,0 +1,66 @@ +package com.cf.imes.module.executor.service.veneer; + +import com.cf.imes.framework.common.pojo.PageResult; +import com.cf.imes.module.executor.controller.admin.veneer.vo.VeneerPageReqVO; +import com.cf.imes.module.executor.controller.admin.veneer.vo.VeneerRespVO; +import com.cf.imes.module.executor.controller.admin.veneer.vo.VeneerSaveReqVO; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; + +/** + * 贴皮管理 Service接口 + * + * @author Gqr + * @since 2026/1/4 14:24 + */ +public interface VeneerService { + + /** + * 新增贴皮 + * + * @param reqVO + * @return + */ + Long create(VeneerSaveReqVO reqVO); + + /** + * 编辑贴皮 + * + * @param reqVO + * @return + */ + int update(VeneerSaveReqVO reqVO); + + /** + * 删除贴皮 + * + * @param id + * @return + */ + int delete(Long id); + + /** + * 上传贴皮照片 + * + * @param file + * @return + */ + Long uploadPic(MultipartFile file) throws IOException; + + /** + * 分页查询贴皮 + * + * @param pageReqVO + * @return + */ + PageResult getPage(VeneerPageReqVO pageReqVO); + + /** + * 根据id查询贴皮数据 + * + * @param id + * @return + */ + VeneerRespVO get(Long id); +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/veneer/VeneerServiceImpl.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/veneer/VeneerServiceImpl.java new file mode 100644 index 000000000..be315e794 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/veneer/VeneerServiceImpl.java @@ -0,0 +1,176 @@ +package com.cf.imes.module.executor.service.veneer; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.date.LocalDateTimeUtil; +import cn.hutool.core.util.ObjectUtil; +import com.cf.imes.framework.common.exception.ServiceException; +import com.cf.imes.framework.common.pojo.CommonResult; +import com.cf.imes.framework.common.pojo.PageResult; +import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils; +import com.cf.imes.module.executor.controller.admin.veneer.vo.VeneerPageReqVO; +import com.cf.imes.module.executor.controller.admin.veneer.vo.VeneerRespVO; +import com.cf.imes.module.executor.controller.admin.veneer.vo.VeneerSaveReqVO; +import com.cf.imes.module.executor.dal.dataobject.veneer.VeneerDO; +import com.cf.imes.module.executor.dal.mysql.veneer.VeneerMapper; +import com.cf.imes.module.infra.api.file.FileApi; +import com.cf.imes.module.system.api.organ.OrganApi; +import com.cf.imes.module.system.api.organ.dto.OrganizationDTO; +import jakarta.annotation.Resource; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; +import java.time.LocalDateTime; +import java.util.Locale; + +import static cn.hutool.core.date.DatePattern.PURE_DATETIME_PATTERN; +import static com.cf.imes.module.executor.enums.ErrorCodeConstants.VENEER_NOT_EXIST; +import static com.cf.imes.module.executor.enums.ErrorCodeConstants.VENEER_NO_EXIST; + +/** + * 贴皮管理ServiceImpl 实现类 + * + * @author Gqr + * @since 2026/1/4 14:24 + */ +@Service +public class VeneerServiceImpl implements VeneerService { + @Resource + private FileApi fileApi; + + @Resource + private OrganApi organApi; + + @Resource + private VeneerMapper veneerMapper; + + @Override + public Long create(VeneerSaveReqVO reqVO) { + // 1、校验贴皮编号 + boolean validateVeneerNoOnly = validateVeneerNoOnly(reqVO.getVeneerNo(), reqVO.getId()); + if(!validateVeneerNoOnly) { + throw new ServiceException(VENEER_NO_EXIST); + } + + //2、贴皮数据入库 + VeneerDO veneerDO = BeanUtil.copyProperties(reqVO, VeneerDO.class); + veneerMapper.insert(veneerDO); + + return veneerDO.getId(); + } + + @Override + public int update(VeneerSaveReqVO reqVO) { + Long id = reqVO.getId(); + + // 1、校验贴皮是否存在 + if (ObjectUtil.isNull(id) || ObjectUtil.isNull(validateExist(id))) { + throw new ServiceException(VENEER_NOT_EXIST); + } + + // 2、校验贴皮编号 + boolean validateVeneerNoOnly = validateVeneerNoOnly(reqVO.getVeneerNo(), id); + if(!validateVeneerNoOnly) { + throw new ServiceException(VENEER_NO_EXIST); + } + + + //3、贴皮数据入库 + VeneerDO veneerDO = BeanUtil.copyProperties(reqVO, VeneerDO.class); + return veneerMapper.updateById(veneerDO); + } + + @Override + public int delete(Long id) { + // 1、校验贴皮是否存在 + if (ObjectUtil.isNull(validateExist(id))) { + throw new ServiceException(VENEER_NOT_EXIST); + } + + //2、删除贴皮 + return veneerMapper.deleteById(id); + } + + @Override + public Long uploadPic(MultipartFile file) throws IOException { + Long organId = SecurityFrameworkUtils.getUserOrganId(); + + // 获取组织名称 + OrganizationDTO organizationDTO; + CommonResult details = organApi.getOrganDetails(organId); + if (details.isError()) { + throw new ServiceException(details.getCode(), details.getMsg()); + } else { + organizationDTO = details.getData(); + } + return fileApi.createFileAndReturnId(file.getBytes(), String.format("%s-veneer-pic-file-%s.%s", organizationDTO.getName(), LocalDateTimeUtil.format(LocalDateTime.now(), PURE_DATETIME_PATTERN), getFileExtension(file.getOriginalFilename()))); + } + + @Override + public PageResult getPage(VeneerPageReqVO pageReqVO) { + PageResult veneerDOPageResult = veneerMapper.selectPage(pageReqVO); + + PageResult pageResult = new PageResult<>(); + if (veneerDOPageResult.getTotal() != 0) { + pageResult.setList(BeanUtil.copyToList(veneerDOPageResult.getList(), VeneerRespVO.class)); + pageResult.setTotal(veneerDOPageResult.getTotal()); + } + return pageResult; + } + + @Override + public VeneerRespVO get(Long id) { + // 1、校验贴皮是否存在 + VeneerDO veneerDO = validateExist(id); + if (ObjectUtil.isNull(veneerDO)) { + throw new ServiceException(VENEER_NOT_EXIST); + } + return BeanUtil.copyProperties(veneerDO, VeneerRespVO.class); + } + + /** + * 校验贴皮是否存在 + * + * @param id + * @return true:存在、false:不存在 + */ + private VeneerDO validateExist(Long id) { + return veneerMapper.selectById(id); + } + + /** + * 校验贴皮编号是否组织唯一 + * + * @param veneerNo + * @param id + * @return true:唯一、false:不唯一 + */ + private boolean validateVeneerNoOnly(String veneerNo, Long id) { + return veneerMapper.selectCount(new LambdaQueryWrapperX() + .eq(VeneerDO::getVeneerNo, veneerNo) + .neIfPresent(VeneerDO::getId, id)) == 0; + } + + /** + * 截取文件类型 + * + * @param fileName + * @return + */ + public static String getFileExtension(String fileName) { + if (StringUtils.isEmpty(fileName)) { + return ""; + } + + int lastDotIndex = fileName.lastIndexOf('.'); + if (lastDotIndex < 0 || lastDotIndex == fileName.length() - 1) { + // 没有点号,或者点号在最后一位(例如 "file.") + return ""; + } + + // 截取后缀部分并转小写 + return "." + fileName.substring(lastDotIndex + 1).toLowerCase(Locale.ROOT); + } +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/message.properties b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/message.properties new file mode 100644 index 000000000..e604e7ddc --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/message.properties @@ -0,0 +1,17 @@ +veneer.save.batchNo.length.max=批次号不能超过32个字符 +veneer.save.brand.length.max=品牌不能超过64个字符 +veneer.save.classificationName.not.null=分类名称不能为空 +veneer.save.color.length.max=颜色不能超过32个字符 +veneer.save.factory.length.max=厂家不能超过128个字符 +veneer.save.length.not.null=长度不能为空 +veneer.save.material.length.max=材料不能超过64个字符 +veneer.save.num.not.null=数量不能为空 +veneer.save.productLevel.not.null=产品等级不能为空 +veneer.save.remark.length.max=备注不能超过255个字符 +veneer.save.spec.length.max=规格不能超过64个字符 +veneer.save.thickness.not.null=厚度不能为空 +veneer.save.veneerNo.length.max=贴皮编号不能超过32个字符 +veneer.save.veneerNo.not.null=贴皮编号不能为空 +veneer.save.width.not.null=宽度不能为空 +veneer.save.veneerName.not.null=贴皮名称不能为空 +veneer.save.veneerName.length.max=贴皮名称不能超过64个字符 \ No newline at end of file diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/message_cht.properties b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/message_cht.properties new file mode 100644 index 000000000..0fecfcb8a --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/message_cht.properties @@ -0,0 +1,17 @@ +veneer.save.batchNo.length.max=批次號不能超過32個字元 +veneer.save.brand.length.max=品牌不能超過64個字元 +veneer.save.classificationName.not.null=分類名稱不能為空 +veneer.save.color.length.max=顏色不能超過32個字元 +veneer.save.factory.length.max=廠家不能超過128個字元 +veneer.save.length.not.null=長度不能為空 +veneer.save.material.length.max=材質不能超過64個字元 +veneer.save.num.not.null=數量不能為空 +veneer.save.productLevel.not.null=产品等级不能為空 +veneer.save.remark.length.max=備註不能超過255個字元 +veneer.save.spec.length.max=規格不能超過64個字元 +veneer.save.thickness.not.null=厚度不能為空 +veneer.save.veneerNo.length.max=貼皮編號不能超過32個字元 +veneer.save.veneerNo.not.null=貼皮編號不能為空 +veneer.save.width.not.null=寬度不能為空 +veneer.save.veneerName.not.null=貼皮名稱不能為空 +veneer.save.veneerName.length.max=貼皮名稱不能超过64个字符 \ No newline at end of file diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/message_en.properties b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/message_en.properties new file mode 100644 index 000000000..fb8474ef8 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/message_en.properties @@ -0,0 +1,17 @@ +veneer.save.batchNo.length.max=batch no length cannot exceed 32 characters +veneer.save.brand.length.max=brand length cannot exceed 64 characters +veneer.save.classificationName.not.null=classification name cannot be empty +veneer.save.color.length.max=color length cannot exceed 32 characters +veneer.save.factory.length.max=factory length cannot exceed 128 characters +veneer.save.length.not.null=length cannot be empty +veneer.save.material.length.max=material length cannot exceed 64 characters +veneer.save.num.not.null=num cannot be empty +veneer.save.productLevel.not.null=product level cannot be empty +veneer.save.remark.length.max=remark length cannot exceed 255 characters +veneer.save.spec.length.max=spec length cannot exceed 64 characters +veneer.save.thickness.not.null=thickness cannot be empty +veneer.save.veneerNo.length.max=veener no length cannot exceed 32 characters +veneer.save.veneerNo.not.null=veener no cannot be empty +veneer.save.width.not.null=width cannot be empty +veneer.save.veneerName.not.null=veneer name cannot be empty +veneer.save.veneerName.length.max=veneer name length cannot exceed 64 characters \ No newline at end of file diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/message_enum.properties b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/message_enum.properties index e6c82ee58..b63f0a272 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/message_enum.properties +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/message_enum.properties @@ -1,2 +1,20 @@ inEnum.message=必须在指定范围 {0} -inScope.message={0}不合法 \ No newline at end of file +inScope.message={0}不合法 + +veneer.export.head.veneerNo=贴皮编号 +veneer.export.head.classificationName=分类名称 +veneer.export.head.veneerName=贴皮名称 +veneer.export.head.productLevel=产品等级 +veneer.export.head.batchNo=批次号 +veneer.export.head.color=颜色 +veneer.export.head.material=材质 +veneer.export.head.width=宽 +veneer.export.head.length=长 +veneer.export.head.thickness=厚 +veneer.export.head.brand=品牌 +veneer.export.head.spec=规格 +veneer.export.head.factory=厂家 +veneer.export.head.num=数量 +veneer.export.head.defect=瑕疵 +veneer.export.head.remark=备注 +veneer.export.head.status=状态 \ No newline at end of file diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/message_enum_cht.properties b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/message_enum_cht.properties index 1a4d21a65..65aa883ad 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/message_enum_cht.properties +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/message_enum_cht.properties @@ -1,2 +1,20 @@ inEnum.message=必須在指定範圍 {0} -inScope.message={0}不合法 \ No newline at end of file +inScope.message={0}不合法 + +veneer.export.head.veneerNo=貼皮編號 +veneer.export.head.classificationName=分類名稱 +veneer.export.head.veneerName=貼皮名稱 +veneer.export.head.productLevel=產品等級 +veneer.export.head.batchNo=批次號 +veneer.export.head.color=顏色 +veneer.export.head.material=材質 +veneer.export.head.width=寬 +veneer.export.head.length=長 +veneer.export.head.thickness=厚 +veneer.export.head.brand=品牌 +veneer.export.head.spec=規格 +veneer.export.head.factory=廠家 +veneer.export.head.num=數量 +veneer.export.head.defect=瑕疵 +veneer.export.head.remark=備註 +veneer.export.head.status=狀態 \ No newline at end of file diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/message_enum_en.properties b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/message_enum_en.properties index 00e640815..f5b8e70ea 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/message_enum_en.properties +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/message_enum_en.properties @@ -1,2 +1,20 @@ inEnum.message=Must be within the specified range {0} -inScope.message={0} is illegal \ No newline at end of file +inScope.message={0} is illegal + +veneer.export.head.veneerNo=veneerNo +veneer.export.head.classificationName=classificationName +veneer.export.head.veneerName=veneerName +veneer.export.head.productLevel=productLevel +veneer.export.head.batchNo=batchNo +veneer.export.head.color=color +veneer.export.head.material=material +veneer.export.head.width=width +veneer.export.head.length=length +veneer.export.head.thickness=thickness +veneer.export.head.brand=brand +veneer.export.head.spec=spec +veneer.export.head.factory=factory +veneer.export.head.num=num +veneer.export.head.defect=defect +veneer.export.head.remark=remark +veneer.export.head.status=status \ No newline at end of file diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/message_errorcode.properties b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/message_errorcode.properties index a42b45df2..c15bd3676 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/message_errorcode.properties +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/message_errorcode.properties @@ -11,4 +11,7 @@ global.error.no.permission.to.visit.org=您无权访问该组织的数据 global.error.request.organId.notExist=请求的组织标识未传递,请进行排查 global.org.product.not.exist=账号登录异常,套餐信息不存在,请重新登陆 global.org.product.expired=组织产品套餐已过期,请续费后继续使用 -global.not.login=账号未登录 \ No newline at end of file +global.not.login=账号未登录 + +veneer.not.exist=贴皮不存在 +veneer.no.exist=贴皮编号已存在 \ No newline at end of file diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/message_errorcode_cht.properties b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/message_errorcode_cht.properties index 962ad573e..9fc0d1ff8 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/message_errorcode_cht.properties +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/message_errorcode_cht.properties @@ -11,4 +11,7 @@ global.error.no.permission.to.visit.org=您無權訪問該組織的數據 global.error.request.organId.notExist=請求的組織標識未傳遞,請進行排查 global.org.product.not.exist=帳號登入異常,套餐資訊不存在,請重新登入 global.org.product.expired=組織產品套餐已過期,請續費後繼續使用 -global.not.login=賬號未登錄 \ No newline at end of file +global.not.login=賬號未登錄 + +veneer.not.exist=貼皮不存在 +veneer.no.exist=貼皮編號已存在 \ No newline at end of file diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/message_errorcode_en.properties b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/message_errorcode_en.properties index 01406f418..da4d6559f 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/message_errorcode_en.properties +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/message_errorcode_en.properties @@ -11,4 +11,7 @@ global.error.no.permission.to.visit.org=You do not have permission to access thi global.error.request.organId.notExist=The requested organization ID was not provided, please check global.org.product.not.exist=Account login exception: product package does not exist, please log in again global.org.product.expired=The organization's product package has expired, please renew before continuing to use the service -global.not.login=The account is not logged in \ No newline at end of file +global.not.login=The account is not logged in + +veneer.not.exist=veneer not exist +veneer.no.exist=veneer no already exists \ No newline at end of file diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/delay/vo/ProductDelayRespVO.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/delay/vo/ProductDelayRespVO.java index d7dfc143f..75d253df2 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/delay/vo/ProductDelayRespVO.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/funds/delay/vo/ProductDelayRespVO.java @@ -5,7 +5,7 @@ import com.alibaba.excel.annotation.ExcelProperty; import com.cf.imes.framework.excel.core.annotations.EnumFormat; import com.cf.imes.framework.excel.core.convert.EnumBoolValConvert; import com.cf.imes.framework.excel.core.convert.EnumConvert; -import com.cf.imes.module.system.enums.common.WhetherEnum; +import com.cf.imes.framework.excel.core.enums.WhetherEnum; import com.cf.imes.module.system.enums.pay.DurationUnitEnum; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/cf-module-system/cf-module-system-biz/src/main/resources/message_errorcode.properties b/cf-module-system/cf-module-system-biz/src/main/resources/message_errorcode.properties index 24222ab22..5181a8b7b 100644 --- a/cf-module-system/cf-module-system-biz/src/main/resources/message_errorcode.properties +++ b/cf-module-system/cf-module-system-biz/src/main/resources/message_errorcode.properties @@ -1 +1 @@ -global.error.request.param.missing=请求参数缺失:{0} global.error.bad.request=请求参数不正确:{0} global.error.request.param.type.error=请求参数类型错误:{0} global.error.request.not.found=请求未找到:{0} global.error.request.method.error=请求方法不正确:{0} global.error.request.too.many=请求过于频繁,请稍后重试 global.error.request.duplicate.data.error=请求数据已存在,请检查 global.error.default.error=系统繁忙,请稍后再试 global.error.no.permission=没有该操作权限 global.error.no.permission.to.visit.org=您无权访问该组织的数据 global.error.request.organId.notExist=请求的组织标识未传递,请进行排查 global.org.product.not.exist=账号登录异常,套餐信息不存在,请重新登陆 global.org.product.expired=组织产品套餐已过期,请续费后继续使用 global.not.login=账号未登录 auth.login.bad_credentials=登录失败,账号密码不正确 auth.login.user_disabled=登录失败,账号被禁用 auth.login.captcha_code_error=验证码不正确,原因:{0} auth.login.third_not_bind=未绑定账号,需要进行绑定 auth.mobile.not_exists=手机号不存在 auth.mobile.no_change=手机号未发生改变,无需修改 auth.manage_endpoint.login_permission_error=登录失败,管理端账号不存在 menu.name.duplicate=已经存在该名字的菜单 menu.parent.not_exists=父菜单不存在 menu.parent.error=不能设置自己为父菜单 menu.not_exists=菜单不存在 menu.exists_children=存在子菜单,无法删除 menu.parent.not_dir_or_menu=父菜单的类型必须是目录或者菜单 menu.operation_permission_error=管理端菜单操作权限不足 menu.trans_error=菜单翻译异常,error_code :{0} role.not_exists=角色不存在 role.name.duplicate=已经存在名为[{0}]的角色 role.code.duplicate=已经存在编码为[{0}]的角色 role.can_not_update_system_type=不能操作类型为系统内置的角色 role.is_disable=名字为[{0}]的角色已被禁用 role.admin_code_error=编码[{0}]不能使用 role.me_error=不可为自身分配角色 role.not_superadmin_no_organ_id_oper_error=非超管分配权限 role.buildin.modify_permission_error=修改内置角色下菜单权限的权限不足 role.self.modify_permission_error=无法修改自身的角色菜单权限 role.self.modify_error=无法修改自身的角色 user.username.exists=手机号已经存在 user.mobile.exists=手机号已经存在 user.email.exists=邮箱已经存在 user.not_exists=用户不存在 user.import.empty=导入用户数据不能为空! user.password.failed=用户密码校验失败 user.is_disable=名字为[{0}]的用户已被禁用 user.count.max=超过组织用户配额({0}),创建用户失败! user.me.error=不允许操作用户自身 user.password.length_at_least_8=密码长度不少于8位,且包含大小写字母、数字和特殊字符 user.username.multiple_error=存在[{0}]重复用户,请联系系统管理员 user.operate_self_status_error=不允许操作用户自身状态 user.mobile_update_not_allow=该用户已通过手机号认证,如需修改手机号请前往个人中心 dept.name.duplicate=已经存在该名字的部门 dept.parent.not_exists=父级部门不存在 dept.not_found=当前部门不存在 dept.exists_children=存在子部门,无法删除 dept.parent.error=不能设置自己为父部门 dept.exists_user=部门中存在员工,无法删除 dept.parent_is_child=不能设置自己的子部门为父部门 dept.user_oper_not_allow=不允许操作用户自身部门 dept.parent_user_oper_not_allow=不允许操作用户自身部门及其上级部门 dept.disable=部门({0})已被禁用 dept.not_allowed_login=部门({0})已被禁用,无法登录 dept.parent_disable=上级部门({0})已被禁用,请开启后操作或选择其他上级部门 dict_type.not_exists=当前字典类型不存在 dict_type.not_enable=字典类型处于关闭状态,不允许新增或编辑 dict_type.name.duplicate=已经存在该名字的字典类型 dict_type.type.duplicate=已经存在该类型的字典类型 dict_type.has_children=无法删除,该字典类型还有字典数据 dict_data.not_exists=当前字典数据不存在 dict_data.not_enable=字典数据({0})不处于开启状态,不允许选择 dict_data.value.duplicate=已经存在该值的字典数据 dict_data.trans_error=字典数据标签翻译异常,error_code :{0} notice.not_found=当前通知公告不存在 notice.name_unique_error=公告标题已存在,请编辑后重试 notice.buildin.modify_permission_error=内置通知公告编辑权限不足 sms.channel.not_exists=短信渠道不存在 sms.template.not_exists=短信模板不存在 sms.template.code.duplicate=已经存在编码为[{0}]的短信模板 sms.template.api_error=短信 API 模板调用失败,原因是:{0} sms.template.api.audit_checking=短信 API 模版无法使用,原因:审批中 sms.template.api.audit_fail=短信 API 模版无法使用,原因:审批不通过,{0} sms.template.api.not_found=短信 API 模版无法使用,原因:模版不存在 sms.send.mobile.not_exists=手机号不存在 sms.send.mobile.template_param_miss=短信模板参数({0})缺失 sms.send.template.not_exists=短信模板不存在 sms.code.not_found=验证码不存在,请点击获取 sms.code.not_correct=验证码不正确 sms.code.send_too_fast=短信发送过于频率 sms.code.is_valid=验证码在有效期内,5分钟内请勿重复发送! organ.not_exists=组织不存在 organ.disable=[{0}]组织已被禁用 organ.expire=[{0}]组织已过期 organ.can_not_update_system=系统组织不能进行修改、删除等操作! organ.name.duplicate=名字为[{0}]的组织已存在 organ.website.duplicate=域名为[{0}]的组织已存在 organ.data_code.not_exists=组织未配置数据源标识 organ.already_exists=该新增组织已授权机台数量无需重复新增! organ.user_oper.not_allow=不允许操作用户自身组织 organ.contact_mobile.duplicate=手机号为[{0}]的组织已存在 organ.expiretime.product_id_lack=请选择要购买的产品 notify.template.not.exists=站内信模版不存在 notify.template.code.duplicate=已经存在编码为[{}]的站内信模板 notify.send.template.param.miss=站内信模板参数({})缺失 machine.not.exists=机台不存在 machine.template.not.exists=机台模板不存在 default.template.count=默认模板数量异常 the.current.machine.is.already.in.use=当前机台已使用,禁止删除 machine.error=当前机台错误,请重新选择机台 the.current.brand.of.the.machine.exists=当前机台配置的模板中,该品牌已存在,请重新输入品牌名称 the.model.of.the.machine.does.not.exist=该型号的机台模板不存在,请进行配置 the.current.brand=品牌ID错误,或品牌不存在 machine.num.error=当前组织该类型的机台创建已达到最大值,无法继续创建 machine.name.error=当前机台名称已存在,请重新输入机台名称 machinetemplate.name.error=当前机台模板的名称已存在,请重新输入机台模板名称 labelingmachine.related.data.error=当前机台关联的贴标机数据有误,请在高级配置中重新配置贴标机或选择其他模板 drillmachine.related.data.error=当前机台关联的钻孔机数据有误,请在钻孔模块中重新配置钻孔机或选择其他模板 machine.data.error=当前组织还未进行机台授权,请联系组织管理员在基础管理里对当前组织进行机台授权,或联系客服进行授权 machine.num.data.error=组织授权的机台数量不能超过127台 machine.used.already=当前机台在加工方案组中已使用,无法删除 label.template.not.exists=标签模板不存在 label.not.exists=标签不存在 default.label.not.exists=该类型标签默认模板不存在 machine.use.label=当前标签已有机台使用,无法删除 default.not.deleted=默认标签模板无法删除 label.is.use.error=当前标签打包设置中已有用户使用,无法删除 data.source.not.exists=系统数据源不存在 order.parts.import.list.is.empty=生产配件导入数据不可以为空 remain.plate.status.used=余料板正在使用中,禁止修改 remain.plate.status.no.used=余料板未使用 remain.plate.usr.type=余料板使用类型为不可核销类型 remain.plate.id.not.exists=未选中余料板,请选择余料板 remain.plate.count.max=每次新增余料板数量,最大为999 currently.no.configuration.available=当前没有{0}配置信息,请前往设置配置 system.config.not_exists=系统配置不存在 system.config.type_not_support=不支持的系统配置类型 system.config.custom_plate_no.rule_save_format_error=自定义板编号配置:自定义板编号保存格式错误,请检查配置规则 system.config.custom_plate_no.rule_reset_not_support=自定义板编号配置:该规则不支持手动复位/清零 system.config.custom_plate_no.rule_item_not_found=自定义板编号配置:找不到对应的规则项进行手动复位/清零 system.config.custom_plate_no.rule_order_reset_failed=自定义板编号配置:手动复位/清零生产单下序号失败,请联系客服 custom.plate_no.rule.code_empty=规则编码不能为空 custom.plate_no.rule.code_not_match=规则编码[{0}]不合法,请检查配置规则 custom.plate_no.rule.date_format_error=时间格式[{0}]不合法,请检查配置规则 custom.plate_no.rule.custom_value_empty=自定义字符值不能为空,请检查配置规则 custom.plate_no.rule.reset_mode_error=规则[{0}]复位/清零模式不合法,请检查配置规则 custom.plate_no.rule.int_type_empty={0} 下的 {1} 不能为空,请检查配置规则 custom.plate_no.rule.int_type_convert_error={0} 下的数值类型参数 {1}:{2} 转换异常,请检查配置规则 custom.plate_no.rule.bool_type_convert_error={0} 下的布尔类型参数 {1}:{2} 转换异常,请检查配置规则 process.scheme.data_empty=加工方案组的:{0} 为空,无法保存,请进行配置 process.scheme.config.data_empty=加工方案组的:{0} 为空,请检查配置信息 process.scheme.config.field_error=当前方案组的配置异常,请重新配置 process.scheme.config.in_use=当前方案组已在排单中使用,无法删除 process.scheme.config.machine_label_empty=当前方案组对应的解析器的机台的标签数据为空,请检查机台的标签配置信息 config.data_error=当前系统配置的数据有误,请重新尝试排序 process.config.used_already=当前加工分线配置在加工方案组中已使用,无法删除 optimization.config.used_already=当前数据处理配置在加工方案组中已使用,无法删除 sealedge.config.item_empty=第 {0} 条配置中,有字段值为空,请添加数据 sealedge.config.max_value_error=第 {0} 条配置中,{1} 要大于等于 {2},请修改数据 sealedge.config.data_error=当前封边条配置有误,请重新检查后新增 sealedge.config.name_exists=当前配置的名称已存在,请重新命名 sealedge.config.decimal_places_max_three=第 {0} 条配置中,小数位数最大为 3 位,请进行修改 sealedge.config.min_value_gt_zero=第 {0} 条配置中,宽最小值:{1} 要大于 0,请修改数据 sealedge.config.max_value_gt_zero=第 {0} 条配置中,宽最大值:{1} 要大于 0,请修改数据 sealedge.config.value_range_error=第 {0} 条配置中,宽最大值 要大于 宽最小值,请修改数据 token.app_type.exist=当前应用以存在token配置,无法继续新增 token.config.not_exists=当前应用的token配置不存在 token.time.is_expires=当前token已过期,请重新配置或延长时间 token.app_type.no_update=应用名称不允许更改 token.data.is_null=当前token的配置为空,无需删除 token.expires_time.is_null=当前未选择有效时间,请选择再进行新增 token.expires_time.data_error=当前选择的有效时间已过期,请增加有效时间 token.insert.data_error=token新增失败,请重新尝试 invoice.no_exist=当前发票记录有误,请重新查看 invoicing.reject_reason=请填写拒绝开票原因 purchase_record.no_exist=当前发票对应的购买记录有误,请退回组织后重新申请开票 invoice.is_fail=当前发票已开票,无法再次进行开票 products.is_exist=产品[{0}]已存在,请修改产品名称后再次操作 products.no_delete=当前产品已上架,无法删除,请下架后再删除 products.no_update=当前产品已上架,无法进行修改 products.detail.no_update=定价规则对应的产品已上架,无法进行修改 advertisement.time_error=投放时间错误,结束时间应大于开始时间 advertisement.name.is_exist=当前广告名称已存在,请重新命名 advertisement.no_delete=当前广告已经发布,无法删除,请结束发布后再删除 product_promotion.active.name.is_exist=当前优惠活动名称已存在,请修改 product_promotion.purchaseduration.is_exist=当前所选产品下{0}{1}购买时长的优惠活动已存在,请修改 invoice_title.not_exists=发票抬头不存在,请先创建发票抬头 org_invoice.purchase_record.update_num.not_match=当前勾选的购买记录中部分可能已开票,请查询后重新勾选提交开票 org_invoice.agree_file.null=确认开票发票附件不能为空,请上传后再提交 invoice_title.org.exists=组织下已存在发票抬头,请刷新后编辑抬头内容 invoice_title.taxpayerid.exists=统一社会信用代码已存在,请检查 products.not_nolist=当前产品未上架 org_product.purchase.lock=组织下存在购买中的产品操作,请稍后再试 invoice_title.enterprise.taxnumber.empty=企业统一信用代码不能为空 invoice.amount.zero=可开票金额为0,请检查购买记录 invoice.apply.uninvoiceable.exist=当前提交记录中存在不可开票记录,请刷新列表后重新选择提交 pay.channel_not_support=暂不支持的支付渠道,请使用其他支付渠道 pay.order_not_exist=支付订单不存在,支付编号[{0}],请重新发起支付 pay.order_channel_query_not_exist=如果您已确认扫码支付,请稍后刷新页面,支付平台可能存在延迟到账 pay.order_notify_data_parse_error=解析支付回调数据异常 pay.order_status_is_not_waiting=支付订单不处于待支付 pay.order_submit_channel_error=发起渠道支付异常,请联系客服 pay.notify_passback_tradetype_not_support_error=不支持的支付回调tradeType:[{0}],请检查支付渠道 product.no_exist=当前产品不存在 product.detail_no_exist=当前产品的规则不存在 product.detail_duration_exist=当前产品下已存在产品时长[{0}/{1}]的定价规则,请修改后重新操作 product.promotion_no_exist=当前优惠活动不存在 product.detail_duration_unit_not_support=不支持的时长单位,请检查该定价规则的时长单位 org.product_purchase_wait_pay_error=组织下存在当前产品的待支付记录,请确认或取消支付后再次发起软件购买 product.price_null_error=产品建议价格为空,请联系客服 org.product_purchase_not_exist_error=组织订购记录不存在,请检查数据 org.product_purchase_exist_error=组织[{0}]订购记录已存在,请勿重复定义订购机构 advertisement.no_exist=广告不存在 advertisement.status_endtime_expired=当前广告投放结束时间已超期,请重新发布选择投放时间或重新编辑投放时间 advertisement.image_empty_error=广告图片文件为空,请重新上传 advertisement.image_upload_fail=广告图片上传失败,请稍后再试 advertisement.update_status_error=当前广告已经发布,若要编辑请先结束发布 parser.no_exist=当前解析器不存在,请重新选择 parser.template_no_exist=当前解析器模板不存在,请重新选择 product_purchase.no_exist=当前购买记录不存在,请检查 product_purchase.endtime_before_delaytime_error=当前产品订购有效期{0}未超过当前日期,请调整订购时长 product.delay_duration_unit_not_support=不支持的产品延期时长单位 \ No newline at end of file +global.error.request.param.missing=请求参数缺失:{0} global.error.bad.request=请求参数不正确:{0} global.error.request.param.type.error=请求参数类型错误:{0} global.error.request.not.found=请求未找到:{0} global.error.request.method.error=请求方法不正确:{0} global.error.request.too.many=请求过于频繁,请稍后重试 global.error.request.duplicate.data.error=请求数据已存在,请检查 global.error.default.error=系统繁忙,请稍后再试 global.error.no.permission=没有该操作权限 global.error.no.permission.to.visit.org=您无权访问该组织的数据 global.error.request.organId.notExist=请求的组织标识未传递,请进行排查 global.org.product.not.exist=账号登录异常,套餐信息不存在,请重新登陆 global.org.product.expired=组织产品套餐已过期,请续费后继续使用 global.not.login=账号未登录 auth.login.bad_credentials=登录失败,账号密码不正确 auth.login.user_disabled=登录失败,账号被禁用 auth.login.captcha_code_error=验证码不正确,原因:{0} auth.login.third_not_bind=未绑定账号,需要进行绑定 auth.mobile.not_exists=手机号不存在 auth.mobile.no_change=手机号未发生改变,无需修改 auth.manage_endpoint.login_permission_error=登录失败,管理端账号不存在 menu.name.duplicate=已经存在该名字的菜单 menu.parent.not_exists=父菜单不存在 menu.parent.error=不能设置自己为父菜单 menu.not_exists=菜单不存在 menu.exists_children=存在子菜单,无法删除 menu.parent.not_dir_or_menu=父菜单的类型必须是目录或者菜单 menu.operation_permission_error=管理端菜单操作权限不足 menu.trans_error=菜单翻译异常,error_code :{0} role.not_exists=角色不存在 role.name.duplicate=已经存在名为[{0}]的角色 role.code.duplicate=已经存在编码为[{0}]的角色 role.can_not_update_system_type=不能操作类型为系统内置的角色 role.is_disable=名字为[{0}]的角色已被禁用 role.admin_code_error=编码[{0}]不能使用 role.me_error=不可为自身分配角色 role.not_superadmin_no_organ_id_oper_error=非超管分配权限 role.buildin.modify_permission_error=修改内置角色下菜单权限的权限不足 role.self.modify_permission_error=无法修改自身的角色菜单权限 role.self.modify_error=无法修改自身的角色 user.username.exists=手机号已经存在 user.mobile.exists=手机号已经存在 user.email.exists=邮箱已经存在 user.not_exists=用户不存在 user.import.empty=导入用户数据不能为空! user.password.failed=用户密码校验失败 user.is_disable=名字为[{0}]的用户已被禁用 user.count.max=超过组织用户配额({0}),创建用户失败! user.me.error=不允许操作用户自身 user.password.length_at_least_8=密码长度不少于8位,且包含大小写字母、数字和特殊字符 user.username.multiple_error=存在[{0}]重复用户,请联系系统管理员 user.operate_self_status_error=不允许操作用户自身状态 user.mobile_update_not_allow=该用户已通过手机号认证,如需修改手机号请前往个人中心 dept.name.duplicate=已经存在该名字的部门 dept.parent.not_exists=父级部门不存在 dept.not_found=当前部门不存在 dept.exists_children=存在子部门,无法删除 dept.parent.error=不能设置自己为父部门 dept.exists_user=部门中存在员工,无法删除 dept.parent_is_child=不能设置自己的子部门为父部门 dept.user_oper_not_allow=不允许操作用户自身部门 dept.parent_user_oper_not_allow=不允许操作用户自身部门及其上级部门 dept.disable=部门({0})已被禁用 dept.not_allowed_login=部门({0})已被禁用,无法登录 dept.parent_disable=上级部门({0})已被禁用,请开启后操作或选择其他上级部门 dict_type.not_exists=当前字典类型不存在 dict_type.not_enable=字典类型处于关闭状态,不允许新增或编辑 dict_type.name.duplicate=已经存在该名字的字典类型 dict_type.type.duplicate=已经存在该类型的字典类型 dict_type.has_children=无法删除,该字典类型还有字典数据 dict_data.not_exists=当前字典数据不存在 dict_data.not_enable=字典数据({0})不处于开启状态,不允许选择 dict_data.value.duplicate=已经存在该值的字典数据 dict_data.trans_error=字典数据标签翻译异常,error_code :{0} notice.not_found=当前通知公告不存在 notice.name_unique_error=公告标题已存在,请编辑后重试 notice.buildin.modify_permission_error=内置通知公告编辑权限不足 sms.channel.not_exists=短信渠道不存在 sms.template.not_exists=短信模板不存在 sms.template.code.duplicate=已经存在编码为[{0}]的短信模板 sms.template.api_error=短信 API 模板调用失败,原因是:{0} sms.template.api.audit_checking=短信 API 模版无法使用,原因:审批中 sms.template.api.audit_fail=短信 API 模版无法使用,原因:审批不通过,{0} sms.template.api.not_found=短信 API 模版无法使用,原因:模版不存在 sms.send.mobile.not_exists=手机号不存在 sms.send.mobile.template_param_miss=短信模板参数({0})缺失 sms.send.template.not_exists=短信模板不存在 sms.code.not_found=验证码不存在,请点击获取 sms.code.not_correct=验证码不正确 sms.code.send_too_fast=短信发送过于频率 sms.code.is_valid=验证码在有效期内,5分钟内请勿重复发送! organ.not_exists=组织不存在 organ.disable=[{0}]组织已被禁用 organ.expire=[{0}]组织已过期 organ.can_not_update_system=系统组织不能进行修改、删除等操作! organ.name.duplicate=名字为[{0}]的组织已存在 organ.website.duplicate=域名为[{0}]的组织已存在 organ.data_code.not_exists=组织未配置数据源标识 organ.already_exists=该新增组织已授权机台数量无需重复新增! organ.user_oper.not_allow=不允许操作用户自身组织 organ.contact_mobile.duplicate=手机号为[{0}]的组织已存在 organ.expiretime.product_id_lack=请选择要购买的产品 notify.template.not.exists=站内信模版不存在 notify.template.code.duplicate=已经存在编码为[{}]的站内信模板 notify.send.template.param.miss=站内信模板参数({})缺失 machine.not.exists=机台不存在 machine.template.not.exists=机台模板不存在 default.template.count=默认模板数量异常 the.current.machine.is.already.in.use=当前机台已使用,禁止删除 machine.error=当前机台错误,请重新选择机台 the.current.brand.of.the.machine.exists=当前机台配置的模板中,该品牌已存在,请重新输入品牌名称 the.model.of.the.machine.does.not.exist=该型号的机台模板不存在,请进行配置 the.current.brand=品牌ID错误,或品牌不存在 machine.num.error=当前组织该类型的机台创建已达到最大值,无法继续创建 machine.name.error=当前机台名称已存在,请重新输入机台名称 machinetemplate.name.error=当前机台模板的名称已存在,请重新输入机台模板名称 labelingmachine.related.data.error=当前机台关联的贴标机数据有误,请在高级配置中重新配置贴标机或选择其他模板 drillmachine.related.data.error=当前机台关联的钻孔机数据有误,请在钻孔模块中重新配置钻孔机或选择其他模板 machine.data.error=当前组织还未进行机台授权,请联系组织管理员在基础管理里对当前组织进行机台授权,或联系客服进行授权 machine.num.data.error=组织授权的机台数量不能超过127台 machine.used.already=当前机台在加工方案组中已使用,无法删除 label.template.not.exists=标签模板不存在 label.not.exists=标签不存在 default.label.not.exists=该类型标签默认模板不存在 machine.use.label=当前标签已有机台使用,无法删除 default.not.deleted=默认标签模板无法删除 label.is.use.error=当前标签打包设置中已有用户使用,无法删除 data.source.not.exists=系统数据源不存在 order.parts.import.list.is.empty=生产配件导入数据不可以为空 remain.plate.status.used=余料板正在使用中,禁止修改 remain.plate.status.no.used=余料板未使用 remain.plate.usr.type=余料板使用类型为不可核销类型 remain.plate.id.not.exists=未选中余料板,请选择余料板 remain.plate.count.max=每次新增余料板数量,最大为999 currently.no.configuration.available=当前没有{0}配置信息,请前往设置配置 system.config.not_exists=系统配置不存在 system.config.type_not_support=不支持的系统配置类型 system.config.custom_plate_no.rule_save_format_error=自定义板编号配置:自定义板编号保存格式错误,请检查配置规则 system.config.custom_plate_no.rule_reset_not_support=自定义板编号配置:该规则不支持手动复位/清零 system.config.custom_plate_no.rule_item_not_found=自定义板编号配置:找不到对应的规则项进行手动复位/清零 system.config.custom_plate_no.rule_order_reset_failed=自定义板编号配置:手动复位/清零生产单下序号失败,请联系客服 custom.plate_no.rule.code_empty=规则编码不能为空 custom.plate_no.rule.code_not_match=规则编码[{0}]不合法,请检查配置规则 custom.plate_no.rule.date_format_error=时间格式[{0}]不合法,请检查配置规则 custom.plate_no.rule.custom_value_empty=自定义字符值不能为空,请检查配置规则 custom.plate_no.rule.reset_mode_error=规则[{0}]复位/清零模式不合法,请检查配置规则 custom.plate_no.rule.int_type_empty={0} 下的 {1} 不能为空,请检查配置规则 custom.plate_no.rule.int_type_convert_error={0} 下的数值类型参数 {1}:{2} 转换异常,请检查配置规则 custom.plate_no.rule.bool_type_convert_error={0} 下的布尔类型参数 {1}:{2} 转换异常,请检查配置规则 process.scheme.data_empty=加工方案组的:{0} 为空,无法保存,请进行配置 process.scheme.config.data_empty=加工方案组的:{0} 为空,请检查配置信息 process.scheme.config.field_error=当前方案组的配置异常,请重新配置 process.scheme.config.in_use=当前方案组已在排单中使用,无法删除 process.scheme.config.machine_label_empty=当前方案组对应的解析器的机台的标签数据为空,请检查机台的标签配置信息 config.data_error=当前系统配置的数据有误,请重新尝试排序 process.config.used_already=当前加工分线配置在加工方案组中已使用,无法删除 optimization.config.used_already=当前数据处理配置在加工方案组中已使用,无法删除 sealedge.config.item_empty=第 {0} 条配置中,有字段值为空,请添加数据 sealedge.config.max_value_error=第 {0} 条配置中,{1} 要大于等于 {2},请修改数据 sealedge.config.data_error=当前封边条配置有误,请重新检查后新增 sealedge.config.name_exists=当前配置的名称已存在,请重新命名 sealedge.config.decimal_places_max_three=第 {0} 条配置中,小数位数最大为 3 位,请进行修改 sealedge.config.min_value_gt_zero=第 {0} 条配置中,宽最小值:{1} 要大于 0,请修改数据 sealedge.config.max_value_gt_zero=第 {0} 条配置中,宽最大值:{1} 要大于 0,请修改数据 sealedge.config.value_range_error=第 {0} 条配置中,宽最大值 要大于 宽最小值,请修改数据 token.app_type.exist=当前应用已存在token配置,无法继续新增 token.config.not_exists=当前应用的token配置不存在 token.time.is_expires=当前token已过期,请重新配置或延长时间 token.app_type.no_update=应用名称不允许更改 token.data.is_null=当前token的配置为空,无需删除 token.expires_time.is_null=当前未选择有效时间,请选择再进行新增 token.expires_time.data_error=当前选择的有效时间已过期,请增加有效时间 token.insert.data_error=token新增失败,请重新尝试 invoice.no_exist=当前发票记录有误,请重新查看 invoicing.reject_reason=请填写拒绝开票原因 purchase_record.no_exist=当前发票对应的购买记录有误,请退回组织后重新申请开票 invoice.is_fail=当前发票已开票,无法再次进行开票 products.is_exist=产品[{0}]已存在,请修改产品名称后再次操作 products.no_delete=当前产品已上架,无法删除,请下架后再删除 products.no_update=当前产品已上架,无法进行修改 products.detail.no_update=定价规则对应的产品已上架,无法进行修改 advertisement.time_error=投放时间错误,结束时间应大于开始时间 advertisement.name.is_exist=当前广告名称已存在,请重新命名 advertisement.no_delete=当前广告已经发布,无法删除,请结束发布后再删除 product_promotion.active.name.is_exist=当前优惠活动名称已存在,请修改 product_promotion.purchaseduration.is_exist=当前所选产品下{0}{1}购买时长的优惠活动已存在,请修改 invoice_title.not_exists=发票抬头不存在,请先创建发票抬头 org_invoice.purchase_record.update_num.not_match=当前勾选的购买记录中部分可能已开票,请查询后重新勾选提交开票 org_invoice.agree_file.null=确认开票发票附件不能为空,请上传后再提交 invoice_title.org.exists=组织下已存在发票抬头,请刷新后编辑抬头内容 invoice_title.taxpayerid.exists=统一社会信用代码已存在,请检查 products.not_nolist=当前产品未上架 org_product.purchase.lock=组织下存在购买中的产品操作,请稍后再试 invoice_title.enterprise.taxnumber.empty=企业统一信用代码不能为空 invoice.amount.zero=可开票金额为0,请检查购买记录 invoice.apply.uninvoiceable.exist=当前提交记录中存在不可开票记录,请刷新列表后重新选择提交 pay.channel_not_support=暂不支持的支付渠道,请使用其他支付渠道 pay.order_not_exist=支付订单不存在,支付编号[{0}],请重新发起支付 pay.order_channel_query_not_exist=如果您已确认扫码支付,请稍后刷新页面,支付平台可能存在延迟到账 pay.order_notify_data_parse_error=解析支付回调数据异常 pay.order_status_is_not_waiting=支付订单不处于待支付 pay.order_submit_channel_error=发起渠道支付异常,请联系客服 pay.notify_passback_tradetype_not_support_error=不支持的支付回调tradeType:[{0}],请检查支付渠道 product.no_exist=当前产品不存在 product.detail_no_exist=当前产品的规则不存在 product.detail_duration_exist=当前产品下已存在产品时长[{0}/{1}]的定价规则,请修改后重新操作 product.promotion_no_exist=当前优惠活动不存在 product.detail_duration_unit_not_support=不支持的时长单位,请检查该定价规则的时长单位 org.product_purchase_wait_pay_error=组织下存在当前产品的待支付记录,请确认或取消支付后再次发起软件购买 product.price_null_error=产品建议价格为空,请联系客服 org.product_purchase_not_exist_error=组织订购记录不存在,请检查数据 org.product_purchase_exist_error=组织[{0}]订购记录已存在,请勿重复定义订购机构 advertisement.no_exist=广告不存在 advertisement.status_endtime_expired=当前广告投放结束时间已超期,请重新发布选择投放时间或重新编辑投放时间 advertisement.image_empty_error=广告图片文件为空,请重新上传 advertisement.image_upload_fail=广告图片上传失败,请稍后再试 advertisement.update_status_error=当前广告已经发布,若要编辑请先结束发布 parser.no_exist=当前解析器不存在,请重新选择 parser.template_no_exist=当前解析器模板不存在,请重新选择 product_purchase.no_exist=当前购买记录不存在,请检查 product_purchase.endtime_before_delaytime_error=当前产品订购有效期{0}未超过当前日期,请调整订购时长 product.delay_duration_unit_not_support=不支持的产品延期时长单位 \ No newline at end of file