diff --git a/cf-dependencies/pom.xml b/cf-dependencies/pom.xml
index 2e2cfe5bc..ff852bb97 100644
--- a/cf-dependencies/pom.xml
+++ b/cf-dependencies/pom.xml
@@ -91,6 +91,8 @@
2.1.0
1.0-2
4.1.2
+
+ 1.18
@@ -678,7 +680,6 @@
-
com.monitorjbl
@@ -687,7 +688,6 @@
-
javax.xml.stream
@@ -696,7 +696,6 @@
-
com.aliyun
@@ -754,6 +753,11 @@
xercesImpl
${xercesImpl.version}
+
+ com.hynnet
+ jacob
+ ${jacob.version}
+
diff --git a/cf-gateway/src/main/resources/application.yaml b/cf-gateway/src/main/resources/application.yaml
index f387f4be1..259857593 100644
--- a/cf-gateway/src/main/resources/application.yaml
+++ b/cf-gateway/src/main/resources/application.yaml
@@ -57,7 +57,7 @@ spring:
- Path=/jmreport/**
## manage-server 服务
- id: manage-admin-api
- uri: grayLb://manage-server
+ uri: grayLb://executor-server
predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组
- Path=/admin-api/manage/**
filters:
diff --git a/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/enums/DictTypeConstants.java b/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/enums/DictTypeConstants.java
index abb691764..9448d0450 100644
--- a/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/enums/DictTypeConstants.java
+++ b/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/enums/DictTypeConstants.java
@@ -26,4 +26,10 @@ public class DictTypeConstants {
public static final String UNIT_LENGTH = "length_unit"; // 长度单位
public static final String UNIT_AREA = "area_unit"; // 面积单位
public static final String UNIT_NUMBER = "area_number"; // 个数单位
+
+ public static final String PLATE_TEXTURE = "plate_texture_type";// 板件纹里
+
+ public static final String PART_CATEGORY = "part_category";// 配件主类型
+
+ public static final String BOOLEAN_STRING = "infra_boolean_string"; // Boolean 是否类型
}
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 356a423ee..0d61a360c 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
@@ -95,4 +95,15 @@ public class ErrorCodeConstants {
public static final ErrorCode ORDER_IMPORT_GROUPCODE_NOT_EXIST_VALID_ERROR = new ErrorCode(1_002_031_013, "导入校验异常:板件{}下加工组编码{}不存在于加工组编码列表中");
public static final ErrorCode ORDER_IMPORT_ROOMCODE_NOT_EXIST_VALID_ERROR = new ErrorCode(1_002_031_014, "导入校验异常:板件{}下房间编码{}不存在于房间编码列表中");
public static final ErrorCode ORDER_IMPORT_BODYCODE_NOT_EXIST_VALID_ERROR = new ErrorCode(1_002_031_015, "导入校验异常:板件{}下柜体编码{}不存在于柜体编码列表中");
+
+ // ========== manage配件 1_004_001_000 ==========
+ public static final ErrorCode PARTS_NOT_EXISTS = new ErrorCode(1_004_001_000, "配件不存在");
+ public static final ErrorCode PARTS_GOOD_ID_EXISTS = new ErrorCode(1_004_001_001, "配件编号已存在");
+ public static final ErrorCode PARTS_UNIT_NOT_NULL = new ErrorCode(1_004_001_002, "配件-组件或五金或封边条,单位禁止为空");
+ public static final ErrorCode PARTS_EDGE_NOT_NULL = new ErrorCode(1_004_001_003, "配件-封边条颜色、宽厚禁止为空");
+
+ public static final ErrorCode FILE_NULL = new ErrorCode(1_004_001_004, "上传文件为空");
+ public static final ErrorCode FILE_FORMAT_ERROR = new ErrorCode(1_004_001_005, "导入文件格式有误");
+ public static final ErrorCode FILE_EXCEED_SIZE = new ErrorCode(1_004_001_006, "文件大小超过 10M");
+ public static final ErrorCode FILE_CONTENT_NULL = new ErrorCode(1_004_001_007, "文件大小为空");
}
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
new file mode 100644
index 000000000..4e59dbc1b
--- /dev/null
+++ b/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/enums/manage/parts/CategoryEnum.java
@@ -0,0 +1,23 @@
+package com.cf.imes.module.executor.enums.manage.parts;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * 配件主类的枚举值
+ */
+@Getter
+@AllArgsConstructor
+public enum CategoryEnum implements ObjectEnum{
+
+ ASSEMBLY("组件"),
+ HARDWARE("五金"),
+ EDGING("封边条"),
+ OTHER("其他");
+
+ /**
+ * 类别名称
+ */
+ private final String value;
+
+}
diff --git a/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/enums/manage/parts/ObjectEnum.java b/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/enums/manage/parts/ObjectEnum.java
new file mode 100644
index 000000000..c5f4f839d
--- /dev/null
+++ b/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/enums/manage/parts/ObjectEnum.java
@@ -0,0 +1,6 @@
+package com.cf.imes.module.executor.enums.manage.parts;
+
+public interface ObjectEnum {
+
+ String getValue();
+}
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
new file mode 100644
index 000000000..8402fcbf9
--- /dev/null
+++ b/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/enums/manage/parts/WhetherEnum.java
@@ -0,0 +1,17 @@
+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-api/src/main/java/com/cf/imes/module/executor/enums/manage/remainPlate/RemainPlatePlaceStyleEnum.java b/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/enums/manage/remainPlate/RemainPlatePlaceStyleEnum.java
new file mode 100644
index 000000000..5c94e9a75
--- /dev/null
+++ b/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/enums/manage/remainPlate/RemainPlatePlaceStyleEnum.java
@@ -0,0 +1,32 @@
+package com.cf.imes.module.executor.enums.manage.remainPlate;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * 余料板放置枚举类
+ */
+@Getter
+@AllArgsConstructor
+public enum RemainPlatePlaceStyleEnum {
+
+ ZERO(0, "正面"),
+ ONE(1, "正面右转"),
+ TWO(2, "正面后转"),
+ THREE(3, "正面左转"),
+ FOUR(4, "反面"),
+ FIVE(5, "反面右转"),
+ SIX(6, "反面后转"),
+ SEVEN(7, "反面左转");
+
+ private final Integer status;
+ private String description;
+
+ public boolean equals(Integer status) {
+ return this.status .equals(status) ;
+ }
+
+ public boolean equals(RemainPlatePlaceStyleEnum enableStatusEnum) {
+ return enableStatusEnum != null && enableStatusEnum.status .equals(this.getStatus()) ;
+ }
+}
diff --git a/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/enums/manage/remainPlate/RemainPlateStatusEnum.java b/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/enums/manage/remainPlate/RemainPlateStatusEnum.java
new file mode 100644
index 000000000..0346e14e4
--- /dev/null
+++ b/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/enums/manage/remainPlate/RemainPlateStatusEnum.java
@@ -0,0 +1,22 @@
+package com.cf.imes.module.executor.enums.manage.remainPlate;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@Getter
+@AllArgsConstructor
+public enum RemainPlateStatusEnum {
+ UNUSED(0, "未使用"),
+ USED(1, "已使用");
+
+ private final Integer status;
+ private String description;
+
+ public boolean equals(Integer status) {
+ return this.status .equals(status) ;
+ }
+
+ public boolean equals(RemainPlateStatusEnum enableStatusEnum) {
+ return enableStatusEnum != null && enableStatusEnum.status .equals(this.getStatus()) ;
+ }
+}
diff --git a/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/enums/manage/remainPlate/RemainPlateUseTypeEnum.java b/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/enums/manage/remainPlate/RemainPlateUseTypeEnum.java
new file mode 100644
index 000000000..920bbf79c
--- /dev/null
+++ b/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/enums/manage/remainPlate/RemainPlateUseTypeEnum.java
@@ -0,0 +1,25 @@
+package com.cf.imes.module.executor.enums.manage.remainPlate;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@Getter
+@AllArgsConstructor
+public enum RemainPlateUseTypeEnum {
+
+ TYPE_ZERO(0, ""),
+ TYPE_ONE(1, "核销"),
+ TYPE_TWO(2, "排单"),
+ TYPE_THREE(3, "补板");
+
+ private final Integer status;
+ private String description;
+
+ public boolean equals(Integer status) {
+ return this.status .equals(status) ;
+ }
+
+ public boolean equals(RemainPlateUseTypeEnum enableStatusEnum) {
+ return enableStatusEnum != null && enableStatusEnum.status .equals(this.getStatus()) ;
+ }
+}
diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/pom.xml b/cf-module-prod-executor/cf-module-prod-executor-biz/pom.xml
index 8878e9684..2b0c70176 100644
--- a/cf-module-prod-executor/cf-module-prod-executor-biz/pom.xml
+++ b/cf-module-prod-executor/cf-module-prod-executor-biz/pom.xml
@@ -173,8 +173,11 @@
stax-api
-
-
+
+
+ com.hynnet
+ jacob
+
diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/config/VocieParameters.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/config/VocieParameters.java
new file mode 100644
index 000000000..fb437bdc2
--- /dev/null
+++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/config/VocieParameters.java
@@ -0,0 +1,26 @@
+package com.cf.imes.module.executor.config;
+
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "voices.parameters")
+public class VocieParameters {
+
+ // 设置音频的质量( 越大越好,目前最大好像 22,最小为 4 )
+ private Long quality;
+
+ // 朗读声音大小
+ private Long soundSize;
+
+ // 朗读速度
+ private Long readingSpeed;
+
+ // 音频保存的路径
+ private String path;
+
+
+}
diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/PackController.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/PackController.java
new file mode 100644
index 000000000..ae4fdb073
--- /dev/null
+++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/PackController.java
@@ -0,0 +1,277 @@
+package com.cf.imes.module.executor.controller.admin.manage.pack;
+
+
+import com.cf.imes.framework.common.pojo.CommonResult;
+import com.cf.imes.framework.common.pojo.PageResult;
+import com.cf.imes.module.executor.controller.admin.manage.pack.prePack.PrePackReqVO;
+import com.cf.imes.module.executor.controller.admin.manage.pack.vo.DeleteOtherPartsReqVO;
+import com.cf.imes.module.executor.controller.admin.manage.pack.vo.OrderPackReqVO;
+import com.cf.imes.module.executor.controller.admin.manage.pack.vo.OrderPackRespVO;
+import com.cf.imes.module.executor.controller.admin.manage.pack.vo.OrderPartsReqVO;
+import com.cf.imes.module.executor.controller.admin.manage.pack.vo.OrderPartsRespVO;
+import com.cf.imes.module.executor.controller.admin.manage.pack.vo.OtherPackReqVO;
+import com.cf.imes.module.executor.controller.admin.manage.pack.vo.PackPageReqVO;
+import com.cf.imes.module.executor.controller.admin.manage.pack.vo.PackReqVO;
+import com.cf.imes.module.executor.controller.admin.manage.pack.vo.PackRespVO;
+import com.cf.imes.module.executor.controller.admin.manage.pack.vo.PackageDetailsReqVO;
+import com.cf.imes.module.executor.controller.admin.manage.pack.vo.PackingReqVO;
+import com.cf.imes.module.executor.controller.admin.manage.pack.vo.PlateDetailsRespVO;
+import com.cf.imes.module.executor.controller.admin.manage.pack.vo.PrintOrderPackReqVO;
+import com.cf.imes.module.executor.controller.admin.manage.pack.vo.PrintOrderPackRespVO;
+import com.cf.imes.module.executor.controller.admin.manage.query.vo.pack.OrderPackageVO;
+import com.cf.imes.module.executor.service.manage.pack.PackService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.security.access.prepost.PreAuthorize;
+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.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.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+import java.util.List;
+
+import static com.cf.imes.framework.common.pojo.CommonResult.success;
+
+@Tag(name = "管理后台 - 生产打包 ")
+@RestController
+@RequestMapping("/manage/pack")
+@Validated
+public class PackController {
+
+
+
+ @Resource
+ private PackService packService;
+
+
+
+
+ @GetMapping("/page")
+ @Operation(summary = "打包分页查询")
+ @PreAuthorize("@ss.hasPermission('manage:pack:query')")
+ public CommonResult> getPlatePage(@Valid PackPageReqVO pageReqVO) {
+
+ return CommonResult.success(packService.getPackPage(pageReqVO));
+
+ }
+
+
+ @GetMapping("/getOrderPlate")
+ @Operation(summary = "查看生产订单对应的没有打包的板材信息")
+ @Parameter(name = "orderId", description = "生产单Id", required = true)
+ @PreAuthorize("@ss.hasAnyPermissions('manage:pack:export-lost-plate','manage:pack:pack')")
+ public CommonResult> getOrderPlateList(@Valid @RequestParam("orderId") Long orderId) {
+
+ return success(packService.getOrderPlateList(orderId));
+
+ }
+
+
+ @GetMapping("/getOrderPlateList")
+ @Operation(summary = "查询多个生产单对应的板材信息")
+ @Parameter(name = "orderIds", description = "生产单ID", required = true)
+ @PreAuthorize("@ss.hasAnyPermissions('manage:pack:create','manage:pack:pre-pack','manage:pack:pack')")
+ public CommonResult> getOrdersPlateList(@Valid @RequestParam("orderIds") List orderIds) {
+
+ return success(packService.getOrdersPlateList(orderIds));
+
+ }
+
+
+ @GetMapping("/getOrderPack")
+ @Operation(summary = "查看生产订单对应的包裹信息-未分页")
+ @PreAuthorize("@ss.hasAnyPermissions('manage:pack:export-pack-num','manage:pack:pack')")
+ public CommonResult> getOrderPack(@Valid PackageDetailsReqVO reqVO) {
+
+ return success(packService.getOrderPack(reqVO));
+
+ }
+
+
+ @GetMapping("/getPageOrderPack")
+ @Operation(summary = "查看生产订单对应的包裹信息-分页")
+ @PreAuthorize("@ss.hasPermission('manage:pack:pack-details')")
+ public CommonResult> getPageOrderPack(@Valid PackageDetailsReqVO reqVO) {
+
+ return success(packService.getPageOrderPack(reqVO));
+
+ }
+
+
+
+
+
+ @GetMapping("/getParts")
+ @Operation(summary = "查看配件列表")
+ @PreAuthorize("@ss.hasPermission('manage:pack-parts:query')")
+ public CommonResult> getParts(@Valid OrderPartsReqVO reqVO) {
+
+ return success(packService.getPartsList(reqVO));
+
+
+ }
+
+
+
+
+
+
+ @PutMapping("/updatePack")
+ @Operation(summary = "板材包裹更新-即封包")
+ @PreAuthorize("@ss.hasPermission('manage:pack:update')")
+ public CommonResult updatePack(@Valid @RequestBody OrderPackReqVO packageVO) {
+
+ return success(packService.updatePack(packageVO));
+
+ }
+
+
+
+
+ @PutMapping("/updateParts")
+ @Operation(summary = "配件包裹更新-即封包")
+ @PreAuthorize("@ss.hasPermission('manage:pack:update')")
+ public CommonResult updateParts(@Valid @RequestBody OrderPartsReqVO reqVO) {
+
+ return success(packService.updateParts(reqVO));
+
+
+ }
+
+
+
+
+ @GetMapping("/selectPack")
+ @Operation(summary = "查询包裹")
+ @Parameter(name = "orderId", description = "生产单Id", required = true)
+ @PreAuthorize("@ss.hasPermission('manage:pack:query')")
+ public CommonResult> selectPack(@Valid @RequestParam("orderId") Long orderId) {
+
+ return success(packService.selectPack(orderId));
+
+ }
+
+
+
+ @DeleteMapping("/deletePack")
+ @Operation(summary = "删除包裹及其关联的包裹信息(删除全部)")
+ @PreAuthorize("@ss.hasPermission('manage:pack:delete')")
+ public CommonResult deleteOrderPack (@Valid @RequestBody PackReqVO reqVO) {
+
+ packService.deleteOrderPack(reqVO);
+ return success(true);
+
+ }
+
+
+
+
+ @PutMapping("/unpacking")
+ @Operation(summary = "拆包-更改包裹为未封包")
+ @PreAuthorize("@ss.hasPermission('manage:pack:unpacking')")
+ public CommonResult unpacking(@Valid @RequestBody PackingReqVO reqVO) {
+
+ OrderPackRespVO unpacking = packService.unpacking(reqVO.getPackageId());
+
+ return success(unpacking);
+ }
+
+
+
+
+
+
+// @GetMapping("/print")
+// @Operation(summary = "包裹订单打印")
+// @PreAuthorize("@ss.hasPermission('manage:pack:query')")
+ public CommonResult printOrderPack (@Valid PrintOrderPackReqVO reqVO) {
+
+ return success(packService.printOrderPack(reqVO));
+
+ }
+
+
+
+
+
+// @PostMapping("/insertParts")
+// @Operation(summary = "新增配件包裹")
+// @PreAuthorize("@ss.hasPermission('manage:pack:insert')")
+ public CommonResult addNewPartsPack (@Valid @RequestBody OrderPackReqVO reqVO) {
+
+ return success(packService.addNewPartsPack(reqVO));
+
+ }
+
+
+
+
+ @PostMapping("/insertOtherPack")
+ @Operation(summary = "新增外部配件-即新增一个包裹")
+ @PreAuthorize("@ss.hasPermission('manage:pack:external-parts')")
+ public CommonResult addNewOtherPack(@Valid @RequestBody OtherPackReqVO reqVO) {
+
+ return success(packService.addNewOtherPack(reqVO));
+
+ }
+
+
+ @PutMapping("/insertOther")
+ @Operation(summary = "新增外部配件")
+ @PreAuthorize("@ss.hasPermission('manage:pack:external-parts')")
+ public CommonResult addNewOtherParts (@Valid @RequestBody OtherPackReqVO reqVO) {
+
+ return success(packService.addNewOtherParts(reqVO));
+
+ }
+
+
+
+ @DeleteMapping("/deleteOtherParts")
+ @Operation(summary = "删除包裹中的外部配件")
+ @PreAuthorize("@ss.hasPermission('manage:pack:delete')")
+ public CommonResult deleteOtherParts (@Valid @RequestBody DeleteOtherPartsReqVO reqVO) {
+
+ packService.deleteOtherParts(reqVO);
+ return success(true);
+
+
+ }
+
+
+
+
+ @GetMapping("/getPrePackInfo")
+ @Operation(summary = "查询预打包优化信息")
+ @PreAuthorize("@ss.hasPermission('manage:pack:pre-pack')")
+ public CommonResult getPrePackInfo ( @RequestParam("orderId") Long orderId) {
+
+ return success(packService.getPrePackInfo(orderId));
+
+ }
+
+
+
+
+ @PostMapping("/saveOptimizeInfo")
+ @Operation(summary = "预打包保存优化信息")
+ @PreAuthorize("@ss.hasPermission('manage:pack:pre-pack')")
+ public CommonResult saveOptimizeInfo(@Valid @RequestBody PrePackReqVO reqVO) {
+
+ packService.saveOptimizeInfo(reqVO);
+
+ return success(true);
+
+
+ }
+
+
+}
diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/prePack/PackPlateList.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/prePack/PackPlateList.java
new file mode 100644
index 000000000..6cf1e7cd6
--- /dev/null
+++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/prePack/PackPlateList.java
@@ -0,0 +1,28 @@
+package com.cf.imes.module.executor.controller.admin.manage.pack.prePack;
+
+
+import lombok.Builder;
+import lombok.Data;
+import lombok.ToString;
+
+@Data
+@ToString(callSuper = true)
+@Builder
+public class PackPlateList {
+
+
+ // 包裹ID
+ private Long packId;
+
+ // 包裹编号
+ private String packNo;
+
+ // 板材ID
+ private Long plateId;
+
+ // 板材编号
+ private String plateNo;
+
+
+
+}
diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/prePack/PrePackData.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/prePack/PrePackData.java
new file mode 100644
index 000000000..693848a4b
--- /dev/null
+++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/prePack/PrePackData.java
@@ -0,0 +1,34 @@
+package com.cf.imes.module.executor.controller.admin.manage.pack.prePack;
+
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.ToString;
+
+@Schema(description = "预打包的优化结构")
+@Data
+@ToString(callSuper = true)
+public class PrePackData {
+
+
+ @Schema(description = "包裹编号")
+ private String name;
+
+
+ @Schema(description = "点的位置信息")
+ private Double pointX;
+ private Double pointY;
+
+ @Schema(description = "板材编号")
+ private String plateNo;
+
+ @Schema(description = "板材宽度")
+ private Long plateWidth;
+
+ @Schema(description = "板材高度")
+ private Long plateHeight;
+
+
+
+
+}
diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/prePack/PrePackOptimizeInfo.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/prePack/PrePackOptimizeInfo.java
new file mode 100644
index 000000000..f72e3c91b
--- /dev/null
+++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/prePack/PrePackOptimizeInfo.java
@@ -0,0 +1,105 @@
+package com.cf.imes.module.executor.controller.admin.manage.pack.prePack;
+
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.ToString;
+
+import javax.validation.Valid;
+import java.util.List;
+
+@Schema(description = "预打包的优化结构")
+@Data
+@ToString(callSuper = true)
+public class PrePackOptimizeInfo {
+
+
+ @Schema(description = "分组名称")
+ private String groupName;
+
+
+ @Schema(description = "优化的数据")
+ private List list;
+
+
+
+ @Valid
+ @Data
+ public static class PrePackData {
+
+ @Schema(description = "包裹编号")
+ private String name;
+
+ @Schema(description = "")
+ private List list;
+
+ }
+
+
+ @Valid
+ @Data
+ public static class PrerStoreyNum {
+
+ @Schema(description = "包裹层数名称")
+ private String name;
+
+
+ @Schema(description = "")
+ private Long floor_place_width;
+
+ @Schema(description = "")
+ private Long floor_place_height;
+
+ @Schema(description = "")
+ private List list;
+
+ }
+
+
+ @Valid
+ @Data
+ public static class PrerPlateData {
+
+ @Schema(description = "小板名称")
+ private String name;
+
+
+ @Schema(description = "")
+ private String plateNo;
+
+ @Schema(description = "")
+ private String plateId;
+
+ @Schema(description = "")
+ private PrePlaceInfo placeInfo;
+
+ }
+
+
+ @Valid
+ @Data
+ public static class PrePlaceInfo{
+
+ @Schema(description = "")
+ private String banid;
+
+ @Schema(description = "")
+ private Double line;
+
+ @Schema(description = "")
+ private Double x;
+
+ @Schema(description = "")
+ private Double y;
+
+ @Schema(description = "")
+ private Long pbg;
+
+ @Schema(description = "")
+ private Long pbk;
+
+
+ }
+
+
+}
diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/prePack/PrePackReqVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/prePack/PrePackReqVO.java
new file mode 100644
index 000000000..a5211895a
--- /dev/null
+++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/prePack/PrePackReqVO.java
@@ -0,0 +1,30 @@
+package com.cf.imes.module.executor.controller.admin.manage.pack.prePack;
+
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.ToString;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+@Schema(description = "管理后台 - 预打包保存优化信息")
+@Data
+@ToString(callSuper = true)
+public class PrePackReqVO {
+
+
+ @Schema(description = "生产单ID")
+ @NotNull(message = "优化数据异常,请重新优化")
+ private Long orderId;
+
+
+
+ @Schema(description = "优化信息")
+ @NotBlank(message = "优化数据异常,请重新优化")
+ private String optimizeInfo;
+
+
+
+
+}
diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/DeleteOtherPartsReqVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/DeleteOtherPartsReqVO.java
new file mode 100644
index 000000000..006bdc7f6
--- /dev/null
+++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/DeleteOtherPartsReqVO.java
@@ -0,0 +1,37 @@
+package com.cf.imes.module.executor.controller.admin.manage.pack.vo;
+
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.ToString;
+
+import javax.validation.constraints.NotNull;
+
+@Schema(description = "管理后台 - 删除其他配件 Request VO")
+@Data
+@ToString(callSuper = true)
+public class DeleteOtherPartsReqVO {
+
+
+ @Schema(description = "生产单号", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotNull(message = "生产单号为空,请重新删除配件")
+ private Long orderId;
+
+
+ @Schema(description = "包裹Id", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotNull(message = "包裹号为空,请重新删除配件")
+ private Long packageId;
+
+ @Schema(description = "配件ID", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotNull(message = "配件信息为空,请重新删除配件")
+ private Long partsId;
+
+
+ @Schema(description = "是否是其他类型的配件", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotNull(message = "配件类型为空,请重新删除配件")
+ private Boolean isOtherParts;
+
+
+
+}
+
diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/GroupNameList.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/GroupNameList.java
new file mode 100644
index 000000000..38b68b54d
--- /dev/null
+++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/GroupNameList.java
@@ -0,0 +1,16 @@
+package com.cf.imes.module.executor.controller.admin.manage.pack.vo;
+
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+
+
+@Schema(description = "工序组名称")
+@Data
+public class GroupNameList {
+
+ @Schema(description = "工序组名称")
+ private String name;
+
+}
diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/OrderPackReqVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/OrderPackReqVO.java
new file mode 100644
index 000000000..d58f05f3d
--- /dev/null
+++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/OrderPackReqVO.java
@@ -0,0 +1,57 @@
+package com.cf.imes.module.executor.controller.admin.manage.pack.vo;
+
+
+import com.cf.imes.module.executor.validation.manage.pack.PackTypeValid;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.ToString;
+
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+@Schema(description = "管理后台 - 包裹新增 Request VO")
+@Data
+@ToString(callSuper = true)
+public class OrderPackReqVO {
+
+
+ @Schema(description = "包裹ID", requiredMode = Schema.RequiredMode.REQUIRED)
+ private Long packId;
+
+
+ @Schema(description = "生产单号", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotNull(message = "生产单号为空")
+ private Long orderId;
+
+
+ @Schema(description = "包裹编号", requiredMode = Schema.RequiredMode.REQUIRED)
+ private String packNo;
+
+
+ @Schema(description = "包裹类型", requiredMode = Schema.RequiredMode.REQUIRED)
+ @PackTypeValid
+ private Integer packageType;
+
+
+// @Schema(description = "包裹状态", requiredMode = Schema.RequiredMode.REQUIRED)
+// private Long packStatus;
+
+
+ @Schema(description = "备注")
+ private String remark;
+
+
+ @Schema(description = "新增的板件ID", requiredMode = Schema.RequiredMode.REQUIRED)
+ private List addPlateIdList;
+
+
+ @Schema(description = "移除的板件ID", requiredMode = Schema.RequiredMode.REQUIRED)
+ private List deletePlateIdList;
+
+
+ @Schema(description = "新增的配件包裹ID", requiredMode = Schema.RequiredMode.REQUIRED)
+ private List addPartsIdList;
+
+
+
+}
diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/OrderPackRespVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/OrderPackRespVO.java
new file mode 100644
index 000000000..7b787863c
--- /dev/null
+++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/OrderPackRespVO.java
@@ -0,0 +1,39 @@
+package com.cf.imes.module.executor.controller.admin.manage.pack.vo;
+
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Builder;
+import lombok.Data;
+
+
+@Schema(description = "管理后台 - 生产单包裹表 Response VO")
+@Data
+@Builder
+public class OrderPackRespVO {
+
+ @Schema(description = "包裹ID", requiredMode = Schema.RequiredMode.REQUIRED)
+ private Long id;
+
+ @Schema(description = "生产单号", requiredMode = Schema.RequiredMode.REQUIRED)
+ private Long orderId;
+
+ @Schema(description = "包裹编号", requiredMode = Schema.RequiredMode.REQUIRED)
+ private String packageNo;
+
+ @Schema(description = "包裹类型,-1未定义,0板材,1配件,2其他配件", requiredMode = Schema.RequiredMode.REQUIRED)
+ private Integer packageType;
+
+ @Schema(description = "包裹名", requiredMode = Schema.RequiredMode.REQUIRED)
+ private String name;
+
+ @Schema(description = "包裹状态,0未封包,1已封包,2已入库,3已出库", requiredMode = Schema.RequiredMode.REQUIRED)
+ private Integer status;
+
+ @Schema(description = "组织ID", requiredMode = Schema.RequiredMode.REQUIRED)
+ private Long organId;
+
+ @Schema(description = "备注", requiredMode = Schema.RequiredMode.REQUIRED)
+ private String remark;
+
+
+}
diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/OrderPartsReqVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/OrderPartsReqVO.java
new file mode 100644
index 000000000..7d958e987
--- /dev/null
+++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/OrderPartsReqVO.java
@@ -0,0 +1,39 @@
+package com.cf.imes.module.executor.controller.admin.manage.pack.vo;
+
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.ToString;
+
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+@Schema(description = "管理后台 - 生产单模块表 Request VO")
+@Data
+//@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class OrderPartsReqVO /*extends PageParam*/ {
+
+
+ @Schema(description = "生产单号", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotNull(message = "生产单号为空")
+ private Long orderId;
+
+
+ @Schema(description = "更新配件时传-包裹ID")
+ private Long packId;
+
+
+ @Schema(description = "新增的配件ID")
+ private List addPartsIdList;
+
+
+ @Schema(description = "更新配件时传-删除的配件ID")
+ private List deletePartsIdList;
+
+
+ @Schema(description = "新增的板件ID")
+ private List addPlateIdList;
+
+
+}
diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/OrderPartsRespVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/OrderPartsRespVO.java
new file mode 100644
index 000000000..ae41da5e2
--- /dev/null
+++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/OrderPartsRespVO.java
@@ -0,0 +1,69 @@
+package com.cf.imes.module.executor.controller.admin.manage.pack.vo;
+
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Schema(description = "管理后台 - 配件列表详情 Response VO")
+@Data
+public class OrderPartsRespVO {
+
+
+ @Schema(description = "配件ID", requiredMode = Schema.RequiredMode.REQUIRED)
+ private Long partsId;
+
+ @Schema(description = "配件名称", requiredMode = Schema.RequiredMode.REQUIRED)
+ private String name;
+
+ @Schema(description = "型号", requiredMode = Schema.RequiredMode.REQUIRED)
+ private String model;
+
+ @Schema(description = "规格", requiredMode = Schema.RequiredMode.REQUIRED)
+ private String spec;
+
+ @Schema(description = "数量", requiredMode = Schema.RequiredMode.REQUIRED)
+ private Long num;
+
+ @Schema(description = "单位", requiredMode = Schema.RequiredMode.REQUIRED)
+ private String unit;
+
+ @Schema(description = "品牌", requiredMode = Schema.RequiredMode.REQUIRED)
+ private String brand;
+
+ @Schema(description = "厂家", requiredMode = Schema.RequiredMode.REQUIRED)
+ private String factory;
+
+
+ @Schema(description = "配件类型", requiredMode = Schema.RequiredMode.REQUIRED)
+ private String type;
+
+
+ @Schema(description = "是否复合配件", requiredMode = Schema.RequiredMode.REQUIRED)
+ private Boolean isComposite;
+
+
+ @Schema(description = "备注", requiredMode = Schema.RequiredMode.REQUIRED)
+ private String remark;
+
+
+ @Schema(description = "配件颜色", requiredMode = Schema.RequiredMode.REQUIRED)
+ private String partsColor;
+
+ @Schema(description = "配件宽度", requiredMode = Schema.RequiredMode.REQUIRED)
+ private Double partsWidth;
+
+ @Schema(description = "配件长度", requiredMode = Schema.RequiredMode.REQUIRED)
+ private Double partsLength;
+
+ @Schema(description = "配件厚度", requiredMode = Schema.RequiredMode.REQUIRED)
+ private Double partsThickness;
+
+ @Schema(description = "配件主类:1封边2五金3组件", requiredMode = Schema.RequiredMode.REQUIRED)
+ private String category;
+
+ @Schema(description = "子配件ID列表,复合部件时记录子配件ID,半角逗号分隔", requiredMode = Schema.RequiredMode.REQUIRED)
+ private String subparts;
+
+
+
+}
diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/OrderPlateDetailsRespVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/OrderPlateDetailsRespVO.java
new file mode 100644
index 000000000..6398b9265
--- /dev/null
+++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/OrderPlateDetailsRespVO.java
@@ -0,0 +1,35 @@
+package com.cf.imes.module.executor.controller.admin.manage.pack.vo;
+
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.util.List;
+
+
+
+@Schema(description = "管理后台 - 查看生产单对应的板件信息")
+@Data
+@ExcelIgnoreUnannotated
+public class OrderPlateDetailsRespVO {
+
+
+ @Schema(description = "板件总数", requiredMode = Schema.RequiredMode.REQUIRED)
+ private Long plateNum;
+
+ @Schema(description = "已处理量", requiredMode = Schema.RequiredMode.REQUIRED)
+ private Long plateProcessedNum;
+
+ @Schema(description = "待处理量", requiredMode = Schema.RequiredMode.REQUIRED)
+ private Long pendingNum;
+
+
+// @Schema(description = "当前包裹的板件数", requiredMode = Schema.RequiredMode.REQUIRED)
+// private Long currentPackNum;
+
+ @Schema(description = "生产单对应的板件信息", requiredMode = Schema.RequiredMode.REQUIRED)
+ List plateDetailsRespVO;
+
+
+}
diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/OrderPlateGroupRespVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/OrderPlateGroupRespVO.java
new file mode 100644
index 000000000..dae807be7
--- /dev/null
+++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/OrderPlateGroupRespVO.java
@@ -0,0 +1,23 @@
+package com.cf.imes.module.executor.controller.admin.manage.pack.vo;
+
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+
+@Schema(description = "管理后台 - 板材列表显示 Response VO")
+@Data
+public class OrderPlateGroupRespVO {
+
+
+ @Schema(description = "房间id", requiredMode = Schema.RequiredMode.REQUIRED)
+ private Long roomId;
+
+
+ @Schema(description = "房间名称", requiredMode = Schema.RequiredMode.REQUIRED)
+ private String roomName;
+
+
+
+
+}
diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/OtherPackReqVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/OtherPackReqVO.java
new file mode 100644
index 000000000..f57d0e9db
--- /dev/null
+++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/OtherPackReqVO.java
@@ -0,0 +1,50 @@
+package com.cf.imes.module.executor.controller.admin.manage.pack.vo;
+
+
+import com.cf.imes.framework.common.validation.NumberValid;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.ToString;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+
+@Schema(description = "管理后台 - 新增外部配件 Request VO")
+@Data
+@ToString(callSuper = true)
+public class OtherPackReqVO {
+
+
+ @Schema(description = "生产单号", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotNull(message = "生产单号为空,请重新新增外部配件")
+ private Long orderId;
+
+
+ @Schema(description = "配件名称", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotBlank(message = "配件名称不能为空")
+ @Size(max = 64, message = "配件名称长度不能超过 64 个字符")
+ private String name;
+
+
+ @Schema(description = "配件数量", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NumberValid(name = "配件数量")
+ private Double num;
+
+
+ @Schema(description = "配件单位", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotBlank(message = "配件单位不能为空")
+ @Size(max = 32, message = "配件单位长度不能超过 32 个字符")
+ private String unit;
+
+ @Schema(description = "包裹编号", requiredMode = Schema.RequiredMode.REQUIRED)
+ private String packNo;
+
+
+ @Schema(description = "备注")
+ private String remark;
+
+
+
+
+}
diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/PackDetailsReqVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/PackDetailsReqVO.java
new file mode 100644
index 000000000..6c5880945
--- /dev/null
+++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/PackDetailsReqVO.java
@@ -0,0 +1,28 @@
+package com.cf.imes.module.executor.controller.admin.manage.pack.vo;
+
+
+import com.cf.imes.framework.common.pojo.PageParam;
+import com.cf.imes.module.executor.validation.manage.pack.PackTypeValid;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.ToString;
+
+import javax.validation.constraints.NotNull;
+
+@Schema(description = "管理后台 - 查看包裹详情")
+@Data
+@ToString(callSuper = true)
+public class PackDetailsReqVO extends PageParam {
+
+
+ @Schema(description = "包裹ID", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotNull(message = "包裹数据错误,请重新查看")
+ private Long packageId;
+
+
+ @Schema(description = "包裹类型", requiredMode = Schema.RequiredMode.REQUIRED)
+ @PackTypeValid
+ private Integer type;
+
+
+}
diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/PackPageReqVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/PackPageReqVO.java
new file mode 100644
index 000000000..782427013
--- /dev/null
+++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/PackPageReqVO.java
@@ -0,0 +1,56 @@
+package com.cf.imes.module.executor.controller.admin.manage.pack.vo;
+
+
+import com.cf.imes.framework.common.pojo.PageParam;
+import com.cf.imes.module.executor.validation.manage.pack.OrderPackagedStatusValid;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+import org.hibernate.validator.constraints.Length;
+
+import javax.validation.constraints.Pattern;
+
+@Schema(description = "管理后台 - 打包分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class PackPageReqVO extends PageParam {
+
+
+ @Schema(description = "打包状态(0:未打包,1:已打包)", requiredMode = Schema.RequiredMode.REQUIRED)
+ @OrderPackagedStatusValid
+ private Integer status;
+
+
+ @Schema(description = "订单号")
+ @Pattern(regexp = "^[0-9]*$",message = "生产单号必须为数字")
+ @Length(max = 19,message = "生产单号长度不能超过19")
+ private String orderId;
+
+
+ @Schema(description = "自定义单号")
+ @Length(max = 32,message = "自定义单号数据过长,请重新输入")
+ private String customOrderNo;
+
+
+ @Schema(description = "经销商")
+ @Length(max = 255, message = "经销商数据过长,请重新输入")
+ private String dealer;
+
+
+ @Schema(description = "客户")
+ @Length(max = 255, message = "客户数据过长,请重新输入")
+ private String customer;
+
+
+ @Schema(description = "地址")
+ @Length(max = 255, message = "收货地址数据过长,请重新输入")
+ private String address;
+
+
+ @Schema(description = "是否翻页-true:上,false:下")
+ private Boolean isUp;
+
+
+}
diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/PackReqVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/PackReqVO.java
new file mode 100644
index 000000000..620e71dd0
--- /dev/null
+++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/PackReqVO.java
@@ -0,0 +1,34 @@
+package com.cf.imes.module.executor.controller.admin.manage.pack.vo;
+
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.ToString;
+
+import javax.validation.constraints.NotNull;
+
+@Schema(description = "管理后台 - 删除订单包裹 Request VO")
+@Data
+@ToString(callSuper = true)
+public class PackReqVO {
+
+ @Schema(description = "生产单ID", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotNull(message = "生产单号为空,请重新删除配件")
+ private Long orderId;
+
+
+ @Schema(description = "包裹ID", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotNull(message = "包裹信息为空,请重新删除配件")
+ private Long packageId;
+
+
+ @Schema(description = "包裹编号", requiredMode = Schema.RequiredMode.REQUIRED)
+ private Long packageNo;
+
+
+ @Schema(description = "是否是其他类型的包裹", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotNull(message = "包裹类型为空,请重新删除配件")
+ private Boolean isOther;
+
+
+}
diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/PackRespVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/PackRespVO.java
new file mode 100644
index 000000000..bb5c7a243
--- /dev/null
+++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/PackRespVO.java
@@ -0,0 +1,101 @@
+package com.cf.imes.module.executor.controller.admin.manage.pack.vo;
+
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.Setter;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+
+@Schema(description = "管理后台 - 生产单表 order_{N} Response VO")
+@Data
+@Setter
+public class PackRespVO {
+
+
+ @Schema(description = "生产单号", requiredMode = Schema.RequiredMode.REQUIRED, example = "7788")
+ private Long id;
+
+
+ @Schema(description = "包裹ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "7788")
+ private Long packId;
+
+
+ @Schema(description = "自定义单号", requiredMode = Schema.RequiredMode.REQUIRED,example = "ABCD")
+ private String customOrderNo;
+
+
+ @Schema(description = "经销商电话", requiredMode = Schema.RequiredMode.REQUIRED,example = "ABCD")
+ private String dealerPhoneNumber;
+
+
+ @Schema(description = "经销商", requiredMode = Schema.RequiredMode.REQUIRED,example = "ABCD")
+ private String dealer;
+
+
+ @Schema(description = "订单日期", requiredMode = Schema.RequiredMode.REQUIRED,example = "ABCD")
+ private LocalDateTime orderDate;
+
+
+ @Schema(description = "交付日期", requiredMode = Schema.RequiredMode.REQUIRED,example = "ABCD")
+ private LocalDateTime deliveryDate;
+
+
+ @Schema(description = "打包状态", requiredMode = Schema.RequiredMode.REQUIRED,example = "0")
+ private Integer packaged;
+
+
+ @Schema(description = "客户", requiredMode = Schema.RequiredMode.REQUIRED,example = "张三")
+ private String customer;
+
+
+ @Schema(description = "客户地址", requiredMode = Schema.RequiredMode.REQUIRED,example = "AABB")
+ private String address;
+
+
+ @Schema(description = "客户电话", requiredMode = Schema.RequiredMode.REQUIRED,example = "ABCD")
+ private String phoneNumber;
+
+
+ @Schema(description = "业务员", requiredMode = Schema.RequiredMode.REQUIRED,example = "ABCD")
+ private String salesman;
+
+
+ @Schema(description = "拆单员", requiredMode = Schema.RequiredMode.REQUIRED,example = "ABCD")
+ private String splitter;
+
+
+ @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+ private LocalDateTime createTime;
+
+
+
+ @Schema(description = "已打包数-包裹数")
+ private Long packCount;
+
+
+ @Schema(description = "已打包片数-已处理量")
+ private Long packPieceCount;
+
+
+ @Schema(description = "总片数-板件总数")
+ private Long totalPieceCount;
+
+
+ @Schema(description = "待处理量")
+ private Long pendingNum;
+
+
+ @Schema(description = "生产单对应的板材ID集")
+ private List plateIdList;
+
+ @Schema(description = "生产单对应的包裹ID集")
+ private List packIdList;
+
+// @Schema(description = "生产单对应的板件信息", requiredMode = Schema.RequiredMode.REQUIRED)
+// List plateDetailsRespVO;
+
+
+}
diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/PackageDetailsReqVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/PackageDetailsReqVO.java
new file mode 100644
index 000000000..7f38639da
--- /dev/null
+++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/PackageDetailsReqVO.java
@@ -0,0 +1,42 @@
+package com.cf.imes.module.executor.controller.admin.manage.pack.vo;
+
+
+import com.cf.imes.framework.common.pojo.PageParam;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.ToString;
+import org.hibernate.validator.constraints.Length;
+
+import javax.validation.constraints.Pattern;
+
+
+@Schema(description = "管理后台 - 查看生产单下对应的包裹信息")
+@Data
+@ToString(callSuper = true)
+public class PackageDetailsReqVO extends PageParam {
+
+
+ @Schema(description = "生产单号", requiredMode = Schema.RequiredMode.REQUIRED)
+ @Pattern(regexp = "^[0-9]*$",message = "生产单号必须为数字")
+ @Length(max = 19,message = "生产单号长度不能超过 19 位")
+ private String orderId;
+
+
+ @Schema(description = "板编号")
+ @Pattern(regexp = "^[0-9]*$",message = "板编号必须为数字")
+ @Length(max = 13,message = "板编号长度不能超过 13 位")
+ private String plateNo;
+
+
+ @Schema(description = "包裹状态")
+ private Boolean packStatus;
+
+
+ @Schema(description = "包裹编号")
+ @Pattern(regexp = "^[0-9]*$",message = "包裹编号必须为数字")
+ @Length(max = 13,message = "包裹编号长度不能超过 13 位")
+ private String packageNo;
+
+
+
+}
diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/PackingReqVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/PackingReqVO.java
new file mode 100644
index 000000000..cd827a5ed
--- /dev/null
+++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/PackingReqVO.java
@@ -0,0 +1,21 @@
+package com.cf.imes.module.executor.controller.admin.manage.pack.vo;
+
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.ToString;
+
+import javax.validation.constraints.NotNull;
+
+@Schema(description = "管理后台 - 拆包")
+@Data
+@ToString(callSuper = true)
+public class PackingReqVO {
+
+
+ @Schema(description = "包裹ID", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotNull(message = "包裹异常,请查看是否封包")
+ private Long packageId;
+
+
+}
diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/PlateAndPartIdList.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/PlateAndPartIdList.java
new file mode 100644
index 000000000..c93f63b45
--- /dev/null
+++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/PlateAndPartIdList.java
@@ -0,0 +1,23 @@
+package com.cf.imes.module.executor.controller.admin.manage.pack.vo;
+
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.ToString;
+
+
+@Schema(description = "板材和配件ID")
+@Data
+@ToString(callSuper = true)
+public class PlateAndPartIdList {
+
+
+ @Schema(description = "板材ID")
+ private Long plateId;
+
+
+ @Schema(description = "配件ID")
+ private Long partsId;
+
+
+}
diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/PlateDetailsRespVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/PlateDetailsRespVO.java
new file mode 100644
index 000000000..24d68fea0
--- /dev/null
+++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/PlateDetailsRespVO.java
@@ -0,0 +1,106 @@
+package com.cf.imes.module.executor.controller.admin.manage.pack.vo;
+
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.util.List;
+
+
+@Schema(description = "管理后台 - 板材详情(导出板材表) Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class PlateDetailsRespVO {
+
+ @Schema(description = "包裹ID", requiredMode = Schema.RequiredMode.REQUIRED)
+ private Long packageId;
+
+ @Schema(description = "包裹号", requiredMode = Schema.RequiredMode.REQUIRED)
+ private String packageNo;
+
+ @Schema(description = "房间名称", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("房间名称")
+ private String roomName;
+
+ @Schema(description = "柜体名称", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("柜体名称")
+ private String cabinetName;
+
+ @Schema(description = "房间ID", requiredMode = Schema.RequiredMode.REQUIRED)
+ private String roomId;
+
+ @Schema(description = "柜体ID", requiredMode = Schema.RequiredMode.REQUIRED)
+ private String bodyId;
+
+ @Schema(description = "生产单ID", requiredMode = Schema.RequiredMode.REQUIRED)
+ private String orderId;
+
+ @Schema(description = "板材ID", requiredMode = Schema.RequiredMode.REQUIRED)
+ private String plateId;
+
+ @Schema(description = "自定义板编号", requiredMode = Schema.RequiredMode.REQUIRED)
+ private String customPlateNo;
+
+ @Schema(description = "板编号", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("板编号")
+ private String plateNo;
+
+ @Schema(description = "板名称", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("板名称")
+ private String plateName;
+
+ @Schema(description = "材料", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("材料")
+ private String material;
+
+ @Schema(description = "颜色", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("颜色")
+ private String color;
+
+ @Schema(description = "宽度", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("宽度")
+ private Double width;
+
+ @Schema(description = "长度", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("长度")
+ private Double height;
+
+ @Schema(description = "厚度", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("厚度")
+ private Double thickness;
+
+ @Schema(description = "面积", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("面积")
+ private Double area;
+
+ @Schema(description = "纹路", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("纹路")
+ private Integer texture;
+
+ @Schema(description = "异形", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("异形")
+ private Boolean specialShaped;
+
+ @Schema(description = "造型", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("造型")
+ private Boolean profiling;
+
+ @Schema(description = "排孔", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("排孔")
+ private Boolean rowHole;
+
+ @Schema(description = "加工组", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("加工组")
+ private String processGroup;
+
+ @Schema(description = "备注", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("备注")
+ private String remark;
+
+
+ @Schema(description = "加工组名称集合")
+ private List processGroupNameList;
+
+}
diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/PrintOrderPackReqVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/PrintOrderPackReqVO.java
new file mode 100644
index 000000000..a9df859a4
--- /dev/null
+++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/PrintOrderPackReqVO.java
@@ -0,0 +1,23 @@
+package com.cf.imes.module.executor.controller.admin.manage.pack.vo;
+
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.ToString;
+
+@Schema(description = "管理后台 - 打印生产单的包裹 Request VO")
+@Data
+@ToString(callSuper = true)
+public class PrintOrderPackReqVO {
+
+
+
+ @Schema(description = "生产单号", requiredMode = Schema.RequiredMode.REQUIRED, example = "9822")
+ private Long orderId;
+
+
+ @Schema(description = "包裹id", requiredMode = Schema.RequiredMode.REQUIRED, example = "9822")
+ private Long packageNo;
+
+
+}
diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/PrintOrderPackRespVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/PrintOrderPackRespVO.java
new file mode 100644
index 000000000..b84c8e937
--- /dev/null
+++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/pack/vo/PrintOrderPackRespVO.java
@@ -0,0 +1,46 @@
+package com.cf.imes.module.executor.controller.admin.manage.pack.vo;
+
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.util.List;
+
+@Schema(description = "管理后台 - 包裹打印显示 Response VO")
+@Data
+public class PrintOrderPackRespVO {
+
+ @Schema(description = "自定义单号", requiredMode = Schema.RequiredMode.REQUIRED)
+ private String customOrderNo;
+
+
+ @Schema(description = "经销商", requiredMode = Schema.RequiredMode.REQUIRED,example = "ABCD")
+ private String dealer;
+
+
+ @Schema(description = "订单号", requiredMode = Schema.RequiredMode.REQUIRED, example = "7788")
+ private Long orderId;
+
+
+ @Schema(description = "包裹ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "7788")
+ private Long packNo;
+
+
+ @Schema(description = "包裹序号", requiredMode = Schema.RequiredMode.REQUIRED, example = "7788")
+ private Long packNum;
+
+
+
+ @Schema(description = "客户地址", requiredMode = Schema.RequiredMode.REQUIRED,example = "AABB")
+ private String address;
+
+
+
+ @Schema(description = "板材列表", requiredMode = Schema.RequiredMode.REQUIRED,example = "AABB")
+ private List plateList;
+
+
+
+
+
+}
diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/parts/PartsController.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/parts/PartsController.java
new file mode 100644
index 000000000..c561682ea
--- /dev/null
+++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/parts/PartsController.java
@@ -0,0 +1,179 @@
+package com.cf.imes.module.executor.controller.admin.manage.parts;
+
+import com.cf.imes.framework.common.pojo.CommonResult;
+import com.cf.imes.framework.common.pojo.PageParam;
+import com.cf.imes.framework.common.pojo.PageResult;
+import com.cf.imes.framework.common.util.object.BeanUtils;
+import com.cf.imes.framework.excel.core.util.ExcelUtils;
+import com.cf.imes.framework.operatelog.core.annotations.OperateLog;
+import com.cf.imes.module.executor.controller.admin.manage.parts.vo.PartsCadPageReqVO;
+import com.cf.imes.module.executor.controller.admin.manage.parts.vo.PartsImportExcelVO;
+import com.cf.imes.module.executor.controller.admin.manage.parts.vo.PartsPageReqVO;
+import com.cf.imes.module.executor.controller.admin.manage.parts.vo.PartsRespVO;
+import com.cf.imes.module.executor.controller.admin.manage.parts.vo.PartsSaveReqVO;
+import com.cf.imes.module.executor.dal.dataobject.orderParts.PartsDO;
+import com.cf.imes.module.executor.service.manage.parts.PartsExcelListener;
+import com.cf.imes.module.executor.service.manage.parts.PartsService;
+import com.cf.imes.module.executor.util.file.ExcelReadUtil;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.security.access.prepost.PreAuthorize;
+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.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.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+import javax.validation.constraints.NotEmpty;
+import java.io.IOException;
+import java.util.List;
+
+import static com.cf.imes.framework.common.pojo.CommonResult.success;
+import static com.cf.imes.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
+import static com.cf.imes.framework.operatelog.core.enums.OperateTypeEnum.IMPORT;
+
+
+@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 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 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 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:update','base:accessory:update')")
+ public CommonResult 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('system:accessory:query','base:accessory:query')")
+ public CommonResult> getPage(@Valid PartsPageReqVO pageReqVO) {
+ PageResult pageResult = partsService.getPage(pageReqVO);
+ return success(BeanUtils.toBean(pageResult, PartsRespVO.class));
+ }
+
+ @GetMapping("/webcad/page")
+ @Operation(summary = "获得配件分页")
+ public CommonResult> webCadGetPage(@Valid PartsPageReqVO pageReqVO) {
+ PageResult pageResult = partsService.webCadGetPage(pageReqVO);
+ return success(BeanUtils.toBean(pageResult, PartsRespVO.class));
+ }
+
+ @GetMapping("/export-excel")
+ @Operation(summary = "导出配件文件")
+ @PreAuthorize("@ss.hasAnyPermissions('system:accessory:export','base:accessory:export')")
+ @OperateLog(type = EXPORT)
+ public void exportExcel(@Valid PartsPageReqVO pageReqVO,
+ HttpServletResponse response) throws IOException {
+ pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+ List list = partsService.getPage(pageReqVO).getList();
+ // 导出 Excel
+ ExcelUtils.write(response, "配件表.xls", "数据", PartsRespVO.class,
+ BeanUtils.toBean(list, PartsRespVO.class));
+ }
+
+ @GetMapping("/get-import-template")
+ @Operation(summary = "获得导入配件模板")
+ @Parameter(name = "value", description = "文件类型", required = true, example = "0")
+ @PreAuthorize("@ss.hasAnyPermissions('system:accessory:export-template','base:accessory:export-template')")
+ 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")
+ })
+ @OperateLog(type = IMPORT)
+ @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 list = excelReadUtil.read(file, PartsImportExcelVO.class, listener);
+
+ 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);// 成功,批量导入
+ }
+ }
+ }
+
+ @GetMapping("/cad/page")
+ @Operation(summary = "cad获得配件分页")
+// @PreAuthorize("@ss.hasAnyPermissions('system:accessory:query','base:accessory:query')")
+ public CommonResult> getCadPage(@Valid PartsCadPageReqVO pageReqVO) {
+ PageResult pageResult = partsService.getCadPage(pageReqVO);
+ return success(BeanUtils.toBean(pageResult, PartsRespVO.class));
+ }
+
+ @GetMapping("/webcad/all")
+ @Operation(summary = "获取全部配件信息")
+ public CommonResult> getPlateAll(@RequestParam("category") String category) {
+ List list = partsService.getPartAll(category);
+ return success(BeanUtils.toBean(list, PartsRespVO.class));
+ }
+}
diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/parts/vo/PartsCadPageReqVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/parts/vo/PartsCadPageReqVO.java
new file mode 100644
index 000000000..6a1ecb563
--- /dev/null
+++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/parts/vo/PartsCadPageReqVO.java
@@ -0,0 +1,88 @@
+package com.cf.imes.module.executor.controller.admin.manage.parts.vo;
+
+import com.cf.imes.framework.common.pojo.PageParam;
+import com.cf.imes.module.executor.validation.manage.parts.PartsNumberValid;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+
+import javax.validation.constraints.Size;
+
+/**
+ * cad 传参
+ */
+@Schema(description = "管理后台 - 配件分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class PartsCadPageReqVO extends PageParam {
+
+ @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 = "宽度")
+ @PartsNumberValid(name = "宽度")
+ private Double width;
+
+ @Schema(description = "长度")
+ @PartsNumberValid(name = "长度")
+ private Double length;
+
+ @Schema(description = "厚度")
+ @PartsNumberValid(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 = "备注", example = "你说的对")
+ @Size(max = 255, message = "备注长度不能超过255个字符")
+ private String remark;
+
+ private Long organId;
+
+ @Schema(description = "排序", example = "ascend")
+ private String order;
+
+ @Schema(description = "排序字段", example = "id")
+ private String field;
+
+}
diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/parts/vo/PartsImportExcelVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/parts/vo/PartsImportExcelVO.java
new file mode 100644
index 000000000..d700c0279
--- /dev/null
+++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/parts/vo/PartsImportExcelVO.java
@@ -0,0 +1,74 @@
+package com.cf.imes.module.executor.controller.admin.manage.parts.vo;
+
+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 category;
+
+ @ExcelProperty("复合")
+ private String isComposite;
+
+ @ExcelProperty("子类")
+ private String type;
+
+ @ExcelProperty("物料名称")
+ private String name;
+
+ @ExcelProperty("型号")
+ private String model;
+
+ @ExcelProperty("规格")
+ private String spec;
+
+ @ExcelProperty("材质")
+ private String material;
+
+ @ExcelProperty("颜色")
+ private String color;
+
+ @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("价格")// float(8,3)
+ private String price;
+
+ @ExcelProperty("单位")
+ private String unit;
+
+ @ExcelProperty("上传结果")
+ private String result;
+
+}
diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/parts/vo/PartsPageReqVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/parts/vo/PartsPageReqVO.java
new file mode 100644
index 000000000..b1a2b9b12
--- /dev/null
+++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/parts/vo/PartsPageReqVO.java
@@ -0,0 +1,108 @@
+package com.cf.imes.module.executor.controller.admin.manage.parts.vo;
+
+import com.cf.imes.framework.common.pojo.PageParam;
+import com.cf.imes.module.executor.validation.manage.parts.PartsNumberValid;
+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 = "价格")
+ @PartsNumberValid(name = "价格")
+ private Double[] price;
+
+ @Schema(description = "宽度")
+ @PartsNumberValid(name = "宽度")
+ private Double[] width;
+
+ @Schema(description = "长度")
+ @PartsNumberValid(name = "长度")
+ private Double[] length;
+
+ @Schema(description = "厚度")
+ @PartsNumberValid(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;
+
+}
diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/parts/vo/PartsRespVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/parts/vo/PartsRespVO.java
new file mode 100644
index 000000000..1b13d2c87
--- /dev/null
+++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/parts/vo/PartsRespVO.java
@@ -0,0 +1,111 @@
+package com.cf.imes.module.executor.controller.admin.manage.parts.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.cf.imes.framework.common.validation.NumberValid;
+import com.cf.imes.framework.excel.core.annotations.DictFormat;
+import com.cf.imes.framework.excel.core.convert.DictConvert;
+import com.cf.imes.module.executor.enums.DictTypeConstants;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import javax.validation.constraints.Size;
+import java.time.LocalDateTime;
+
+@Schema(description = "管理后台 - 配件 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class PartsRespVO {
+
+ @Schema(description = "配件 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "11238")
+ @ExcelProperty("配件ID")
+ @ExcelIgnore
+ private Long id;
+
+ @Schema(description = "设计端商品ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "26589")
+ @ExcelProperty("配件编号")
+ private String goodsId;
+
+ @Schema(description = "是否复合部件:0 否 1 是", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty(value = "是否复合部件", converter = DictConvert.class)
+ @DictFormat(DictTypeConstants.BOOLEAN_STRING)
+ private Boolean isComposite;
+
+ @Schema(description = "子配件ID列表,复合部件时记录子配件ID,半角逗号分隔", requiredMode = Schema.RequiredMode.REQUIRED, example = "你说的对")
+// @ExcelProperty("子配件ID列表")
+ @ExcelIgnore
+ private String subparts;
+
+ @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, example = "张三")
+ @ExcelProperty("配件名称")
+ private String name;
+
+ @Schema(description = "型号", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("型号")
+ private String model;
+
+ @Schema(description = "材质:颗粒板、欧松板、多层板、生态板、禾香板、密度板、实木、铝蜂窝板、铝塑板", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("材质")
+ private String material;
+
+ @Schema(description = "颜色", requiredMode = Schema.RequiredMode.REQUIRED)
+ @Size(max = 32, message = "颜色长度不能超过32个字符")
+ @ExcelProperty("颜色")
+ private String color;
+
+ @Schema(description = "单位", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("单位")
+ private String unit;
+
+ @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)
+ @NumberValid(name = "宽度")
+ @ExcelProperty("宽度")
+ private Double width;
+
+ @Schema(description = "长度", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NumberValid(name = "长度")
+ @ExcelProperty("长度")
+ private Double length;
+
+ @Schema(description = "厚度", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NumberValid(name = "厚度")
+ @ExcelProperty("厚度")
+ private Double thickness;
+
+ @Schema(description = "价格", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NumberValid(name = "价格")
+ @ExcelProperty("价格")
+ private Double price;
+
+ @Schema(description = "备注", requiredMode = Schema.RequiredMode.REQUIRED, example = "你说的对")
+ @ExcelProperty("备注")
+ private String remark;
+
+ @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("创建时间")
+ private LocalDateTime createTime;
+
+}
\ No newline at end of file
diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/parts/vo/PartsSaveReqVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/parts/vo/PartsSaveReqVO.java
new file mode 100644
index 000000000..db70e8d7e
--- /dev/null
+++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/parts/vo/PartsSaveReqVO.java
@@ -0,0 +1,100 @@
+package com.cf.imes.module.executor.controller.admin.manage.parts.vo;
+
+import com.cf.imes.framework.common.validation.NumberValid;
+import com.cf.imes.module.executor.validation.manage.parts.PartsCategoryValid;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.Size;
+
+@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 price;
+
+ @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;
+
+}
\ No newline at end of file
diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/plate/PlateManageController.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/plate/PlateManageController.java
new file mode 100644
index 000000000..86f07782d
--- /dev/null
+++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/plate/PlateManageController.java
@@ -0,0 +1,189 @@
+package com.cf.imes.module.executor.controller.admin.manage.plate;
+
+import com.cf.imes.framework.common.pojo.CommonResult;
+import com.cf.imes.framework.common.pojo.PageParam;
+import com.cf.imes.framework.common.pojo.PageResult;
+import com.cf.imes.framework.common.util.object.BeanUtils;
+import com.cf.imes.framework.excel.core.util.ExcelUtils;
+import com.cf.imes.framework.operatelog.core.annotations.OperateLog;
+import com.cf.imes.module.executor.controller.admin.manage.plate.vo.plate.PlateImportExcelVO;
+import com.cf.imes.module.executor.controller.admin.manage.plate.vo.plate.PlatePageReqVO;
+import com.cf.imes.module.executor.controller.admin.manage.plate.vo.plate.PlateRespVO;
+import com.cf.imes.module.executor.controller.admin.manage.plate.vo.plate.PlateSaveReqVO;
+import com.cf.imes.module.executor.dal.dataobject.plate.PlateGoodDO;
+import com.cf.imes.module.executor.service.manage.plate.PlateExcelListener;
+import com.cf.imes.module.executor.service.manage.plate.PlateManageService;
+import com.cf.imes.module.executor.util.file.ExcelReadUtil;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.security.access.prepost.PreAuthorize;
+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.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.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+import java.io.IOException;
+import java.util.List;
+
+import static com.cf.imes.framework.common.pojo.CommonResult.success;
+import static com.cf.imes.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
+import static com.cf.imes.framework.operatelog.core.enums.OperateTypeEnum.IMPORT;
+
+@Tag(name = "管理后台 - 板材库管理")
+@RestController
+@RequestMapping("/manage/plate")
+@Validated
+public class PlateManageController {
+
+ @Resource
+ private PlateManageService plateService;
+
+ final String IMPORT_TEMPLATE = "板材导入模板.xlsx";
+
+ @PostMapping("/create")
+ @Operation(summary = "创建板材信息")
+ @PreAuthorize("@ss.hasAnyPermissions('manage:plate:create','base:plate:create')")
+ public CommonResult createPlate(@Valid @RequestBody PlateSaveReqVO createReqVO) {
+ return success(plateService.createPlate(createReqVO));
+ }
+
+ @PutMapping("/update")
+ @Operation(summary = "更新板材信息")
+ @PreAuthorize("@ss.hasAnyPermissions('manage:plate:update','base:plate:update')")
+ public CommonResult updatePlate(@Valid @RequestBody PlateSaveReqVO updateReqVO) {
+ plateService.updatePlate(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('manage:plate:delete','base:plate:delete')")
+ public CommonResult deletePlate(@RequestParam("id") Long id,
+ @RequestParam(value = "organId",required = false, defaultValue = "0") Long organId) {
+ plateService.deletePlate(id,organId);
+ return success(true);
+ }
+
+ @GetMapping("/get")
+ @Operation(summary = "获得板材信息")
+ @Parameters({
+ @Parameter(name = "id", description = "编号", required = true, example = "1024"),
+ @Parameter(name = "organId", description = "板材所属组织ID", required = true, example = "1024")
+ })
+ @PreAuthorize("@ss.hasAnyPermissions('manage:plate:update','base:plate:update')")
+ public CommonResult getPlate(@RequestParam("id") Long id,
+ @RequestParam("organId") Long organId) {
+ PlateGoodDO plate = plateService.getPlate(id, organId);
+ return success(BeanUtils.toBean(plate, PlateRespVO.class));
+ }
+
+ @GetMapping("/page")
+ @Operation(summary = "获得板材信息分页")
+ @PreAuthorize("@ss.hasAnyPermissions('manage:plate:query','base:plate:query')")
+ public CommonResult> getPlatePage(@Valid PlatePageReqVO pageReqVO) {
+ PageResult pageResult = plateService.getPlatePage(pageReqVO);
+ return success(BeanUtils.toBean(pageResult, PlateRespVO.class));
+ }
+
+ @GetMapping("/webcad/page")
+ @Operation(summary = "webcad获得板材信息分页")
+ public CommonResult> webCadGetPlatePage(@Valid PlatePageReqVO pageReqVO) {
+ PageResult pageResult = plateService.webCadGetPlatePage(pageReqVO);
+ return success(BeanUtils.toBean(pageResult, PlateRespVO.class));
+ }
+
+ @GetMapping("/export")
+ @Operation(summary = "导出板材信息")
+ @PreAuthorize("@ss.hasAnyPermissions('manage:plate:export','base:plate:export')")
+ @OperateLog(type = EXPORT)
+ public void exportPlateExcel(@Valid PlatePageReqVO pageReqVO,
+ HttpServletResponse response) throws IOException {
+ pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+ List list = plateService.getPlatePage(pageReqVO).getList();
+ // 导出 Excel
+ ExcelUtils.write(response, "板材信息表.xls", "数据", PlateRespVO.class,
+ BeanUtils.toBean(list, PlateRespVO.class));
+ }
+
+ @GetMapping("/get-import-template")
+ @Operation(summary = "获得导入用户模板")
+ @PreAuthorize("@ss.hasAnyPermissions('system:plate:export-template','base:plate:export-template')")
+ public void importTemplate(HttpServletResponse response) throws IOException {
+// // 手动创建导出 demo
+// List list = Arrays.asList(
+// PlateImportExcelVO.builder().goodsId("BD10010001").goodsName("18mm-多层板-暖白").material("多层板").width(String.valueOf(1220)).height(String.valueOf(2440))
+// .thickness(String.valueOf(18)).brand("AAA").spec("2440*1220*18").color("暖白").price("120").texture("无").build(),
+// PlateImportExcelVO.builder().goodsId("BD10010002").goodsName("18mm-颗粒板-高级灰").material("多层板").width(String.valueOf(1220)).height(String.valueOf(2750))
+// .thickness(String.valueOf(18)).brand("鸿达树").spec("2750*1220*18").color("高级灰").price("120").texture("无").build()
+// );
+// // 输出
+// ExcelUtils.write(response, IMPORT_TEMPLATE, "板材列表", PlateImportExcelVO.class, list);
+
+ plateService.exportTemplate(response, "excel_plate_add.xlsx");
+ }
+
+// @GetMapping("/get-import-template")
+// @Operation(summary = "获得导入板材模板")
+// @Parameter(name = "value", description = "文件类型", required = true, example = "0")
+// public void importTemplate(HttpServletResponse response, @RequestParam("value") @NotEmpty(message = "文件路径不能为空") String value) {
+// plateService.exportTemplate(response, value);
+// }
+
+ @PostMapping("/import")
+ @Operation(summary = "导入板材")
+ @Parameters({
+ @Parameter(name = "file", description = "Excel 文件", required = true),
+ @Parameter(name = "updateSupport", description = "是否支持更新,默认为 false", example = "true"),
+ @Parameter(name = "organId", description = "板材所属组织ID")
+ })
+ @OperateLog(type = IMPORT)
+// @PreAuthorize("@ss.hasPermission('manage:plate:import')")
+ @PreAuthorize("@ss.hasAnyPermissions('manage:plate:import','base:plate:import')")
+ public void importExcel(@RequestParam("file") MultipartFile file,
+ @RequestParam(value = "updateSupport", required = false, defaultValue = "false") Boolean updateSupport,
+ @RequestParam(value = "organId") Long organId,
+ HttpServletResponse response) throws Exception {
+ ExcelReadUtil excelReadUtil = new ExcelReadUtil();
+ PlateExcelListener listener = new PlateExcelListener();
+ List list = excelReadUtil.read(file, PlateImportExcelVO.class, listener);
+
+// 判断文件是否导入成功
+ if (!excelReadUtil.getFlag())
+ ExcelUtils.write(response, IMPORT_TEMPLATE, "板材列表", PlateImportExcelVO.class, list);
+ else {
+ if (list.isEmpty()){
+ PlateImportExcelVO plateImportExcelVO = PlateImportExcelVO.builder().result("导入失败,请保证导入文件中包含板材数据").build();
+ list.add(plateImportExcelVO);
+ ExcelUtils.write(response, IMPORT_TEMPLATE, "板材列表", PlateImportExcelVO.class, list);
+ }else {
+ plateService.importPlateList(list, updateSupport, organId);// 成功,批量导入
+ }
+ }
+
+// plateExcelUtil.clear();
+ }
+
+
+ @GetMapping("/webcad/all")
+ @Operation(summary = "获取全部板材信息")
+ public CommonResult> webCadGetPlateAll() {
+ List list = plateService.getPlateAll();
+ return success(BeanUtils.toBean(list, PlateRespVO.class));
+ }
+
+}
\ No newline at end of file
diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/plate/RemainPlateManageController.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/plate/RemainPlateManageController.java
new file mode 100644
index 000000000..406f767bf
--- /dev/null
+++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/plate/RemainPlateManageController.java
@@ -0,0 +1,136 @@
+package com.cf.imes.module.executor.controller.admin.manage.plate;
+
+import com.cf.imes.framework.common.pojo.CommonResult;
+import com.cf.imes.framework.common.pojo.PageParam;
+import com.cf.imes.framework.common.pojo.PageResult;
+import com.cf.imes.framework.common.util.object.BeanUtils;
+import com.cf.imes.framework.excel.core.util.ExcelUtils;
+import com.cf.imes.framework.operatelog.core.annotations.OperateLog;
+import com.cf.imes.module.executor.controller.admin.manage.plate.vo.remain.RemainPlatePageReqVO;
+import com.cf.imes.module.executor.controller.admin.manage.plate.vo.remain.RemainPlateRespVO;
+import com.cf.imes.module.executor.controller.admin.manage.plate.vo.remain.RemainPlateSaveReqVO;
+import com.cf.imes.module.executor.controller.admin.manage.plate.vo.remain.RemainPlateUptReqVO;
+import com.cf.imes.module.executor.dal.dataobject.remainplaten.RemainPlateDO;
+import com.cf.imes.module.executor.service.manage.remainplaten.RemainPlateManageService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.security.access.prepost.PreAuthorize;
+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.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.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+import java.io.IOException;
+import java.util.List;
+import java.util.Set;
+
+import static com.cf.imes.framework.common.pojo.CommonResult.success;
+import static com.cf.imes.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
+
+@Tag(name = "管理后台 - 余料管理")
+@RestController
+@RequestMapping("/manage/remain-plate")
+@Validated
+public class RemainPlateManageController {
+
+ @Resource
+ private RemainPlateManageService remainPlateService;
+
+ @PostMapping("/create")
+ @Operation(summary = "添加余料(单个)")
+ @PreAuthorize("@ss.hasAnyPermissions('manage:remain-plate:create','placeorder:optimize')")
+ public CommonResult createRemainPlate(@Valid @RequestBody RemainPlateSaveReqVO createReqVO) {
+ return success(remainPlateService.createRemainPlate(createReqVO));
+ }
+
+ @PostMapping("/createMultiple")
+ @Operation(summary = "创建生产单余料板表(多个)")
+ @PreAuthorize("@ss.hasAnyPermissions('manage:remain-plate:create','placeorder:optimize')")
+ public CommonResult createRemainPlateMultiple(@Valid @RequestBody Set createReqVOS) {
+ return success(remainPlateService.createRemainPlateMultiple(createReqVOS));
+ }
+
+ @PutMapping("/update")
+ @Operation(summary = "余料修改")
+ @PreAuthorize("@ss.hasPermission('manage:remain-plate:update')")
+ public CommonResult updateRemainPlate(@Valid @RequestBody RemainPlateSaveReqVO updateReqVO) {
+ remainPlateService.updateRemainPlate(updateReqVO);
+ return success(true);
+ }
+
+ @PutMapping("/updateStatus")
+ @Operation(summary = "余料板批量核销")
+ @PreAuthorize("@ss.hasAnyPermissions('manage:remain-plate:update','manage:remain-plate:write-off')")
+ public CommonResult updateRemainPlate(@RequestBody RemainPlateUptReqVO updateReqVO) {
+ remainPlateService.updateRemainPlateStatus(updateReqVO.getIds(),
+ updateReqVO.getStatus(),
+ updateReqVO.getUseType(),
+ updateReqVO.getPlanId());
+ return success(true);
+ }
+
+ @PutMapping("/revertUpdate")
+ @Operation(summary = "余料板批量释放")
+ @PreAuthorize("@ss.hasAnyPermissions('manage:remain-plate:update','manage:remain-plate:release')")
+ public CommonResult revertRemainPlate(@RequestBody RemainPlateUptReqVO updateReqVO) {
+ remainPlateService.revertRemainPlateStatus(updateReqVO.getIds(),updateReqVO.getStatus());
+ return success(true);
+ }
+
+ @DeleteMapping("/delete")
+ @Operation(summary = "删除余料")
+ @Parameter(name = "id", description = "编号", required = true)
+ @PreAuthorize("@ss.hasPermission('manage:remain-plate:delete')")
+ public CommonResult deleteRemainPlate(@RequestParam("id") Set ids) {
+ remainPlateService.deleteRemainPlate(ids);
+ return success(true);
+ }
+
+ @GetMapping("/get")
+ @Operation(summary = "获得生产单余料板表")
+ @Parameter(name = "id", description = "编号", required = true, example = "1024")
+ @PreAuthorize("@ss.hasPermission('manage:remain-plate:query')")
+ public CommonResult getRemainPlate(@RequestParam("id") Long id) {
+ RemainPlateDO remainPlate = remainPlateService.getRemainPlate(id);
+ return success(BeanUtils.toBean(remainPlate, RemainPlateRespVO.class));
+ }
+
+ @GetMapping("/page")
+ @Operation(summary = "获得生产单余料板表分页")
+ @PreAuthorize("@ss.hasAnyPermissions('manage:remain-plate:query','placeorder:optimize','placeorder:remain-insert','production:manager-list:calculate')")
+ public CommonResult> getRemainPlatePage(@Valid RemainPlatePageReqVO pageReqVO) {
+ PageResult pageResult = remainPlateService.getRemainPlatePage(pageReqVO);
+ return success(BeanUtils.toBean(pageResult, RemainPlateRespVO.class));
+ }
+
+ @GetMapping("/pageAdd")
+ @Operation(summary = "获得生产单余料板可添加分页")
+ @PreAuthorize("@ss.hasPermission('manage:remain-plate:query')")
+ public CommonResult> getRemainPlatePageToAdd(@Valid RemainPlatePageReqVO pageReqVO) {
+ PageResult pageResult = remainPlateService.getRemainPlatePageToAdd(pageReqVO);
+ return success(BeanUtils.toBean(pageResult, RemainPlateRespVO.class));
+ }
+
+ @GetMapping("/export-excel")
+ @Operation(summary = "导出生产单余料板表Excel")
+ @PreAuthorize("@ss.hasPermission('manage:remain-plate:export')")
+ @OperateLog(type = EXPORT)
+ public void exportRemainPlateExcel(@Valid RemainPlatePageReqVO pageReqVO,
+ HttpServletResponse response) throws IOException {
+ pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+ List list = remainPlateService.getRemainPlatePage(pageReqVO).getList();
+ // 导出 Excel
+ ExcelUtils.write(response, "生产单余料板表 order_remain_plate_{N}.xls", "数据", RemainPlateRespVO.class,
+ BeanUtils.toBean(list, RemainPlateRespVO.class));
+ }
+
+}
\ No newline at end of file
diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/plate/vo/plate/PlateImportExcelVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/plate/vo/plate/PlateImportExcelVO.java
new file mode 100644
index 000000000..d2bdc8bdb
--- /dev/null
+++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/plate/vo/plate/PlateImportExcelVO.java
@@ -0,0 +1,106 @@
+package com.cf.imes.module.executor.controller.admin.manage.plate.vo.plate;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+import javax.validation.constraints.NotEmpty;
+
+/**
+ * 用户 Excel 导入 VO
+ */
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+@Accessors(chain = false) // 设置 chain = false,避免用户导入有问题
+public class PlateImportExcelVO {
+
+ @ExcelProperty("*物料编号")
+ @NotEmpty(message = "物料编号不能为空")
+ private String goodsId;
+
+ @ExcelProperty("*物料名称")
+ @NotEmpty(message = "物料名称不能为空")
+ private String goodsName;
+
+ @ExcelProperty("*材质")
+ @NotEmpty(message = "材质不能为空")
+ private String material;
+
+ @ExcelProperty("*颜色")
+ @NotEmpty(message = "颜色不能为空")
+ private String color;
+
+ @ExcelProperty(value = "纹理")
+ @ColumnWidth(10)
+ private String texture;
+
+ @ExcelProperty("宽度")
+ @ColumnWidth(10)
+ @NotEmpty(message = "宽度不能为空")
+ private String width;
+
+ @ExcelProperty("高度")// float(8,3)
+ @ColumnWidth(10)
+ @NotEmpty(message = "高度不能为空")
+ private String height;
+
+ @ExcelProperty("*厚度")
+ @ColumnWidth(10)
+ @NotEmpty(message = "厚度不能为空")
+ private String thickness;
+
+ @ExcelProperty("规格")
+ @NotEmpty(message = "规格不能为空")
+ private String spec;
+
+ @ExcelProperty("备注")
+ private String remark;
+
+ @ExcelProperty("品牌")
+ @NotEmpty(message = "品牌不能为空")
+ private String brand;
+
+ @ExcelProperty("价格")
+ @NotEmpty(message = "价格不能为空")
+ private String price;
+
+ @ExcelProperty("上传结果")
+ private String result;
+
+ public boolean isValidGoods() {
+ return !(goodsId == null || goodsId.isEmpty() || goodsName == null || goodsName.isEmpty() || material == null ||
+ material.isEmpty() || color == null || color.isEmpty() ||thickness.isEmpty() );
+ }
+
+// 数据长度判断
+ public boolean checkPrecision(Double number) {
+ if (number == null) {
+ return false;
+ }
+ // 将浮点数转换成字符串
+ String numberStr = Double.toString(number);
+
+ // 分割整数部分和小数部分
+ String[] parts = numberStr.split("\\.");
+ String integerPart = parts[0];
+ String decimalPart = parts.length > 1 ? parts[1] : "";
+
+ // 检查整数部分位数
+ if (integerPart.length() > 5) {
+ return false;
+ }
+
+ // 检查小数部分位数
+ if (decimalPart.length() > 3) {
+ return false;
+ }
+
+ return true;
+ }
+}
diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/plate/vo/plate/PlateImportRespVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/plate/vo/plate/PlateImportRespVO.java
new file mode 100644
index 000000000..b65a8b455
--- /dev/null
+++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/plate/vo/plate/PlateImportRespVO.java
@@ -0,0 +1,28 @@
+package com.cf.imes.module.executor.controller.admin.manage.plate.vo.plate;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Builder;
+import lombok.Data;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @projectName: cf_imes_back
+ * @author: 晨丰科技
+ * @date: 2024/2/27 16:36
+ */
+
+@Schema(description = "管理后台 - 板材信息表 plate_{N}导入 Response VO")
+@Data
+@Builder
+public class PlateImportRespVO {
+ @Schema(description = "创建成功的板材数组", requiredMode = Schema.RequiredMode.REQUIRED)
+ private List createPlateNames;
+
+ @Schema(description = "更新成功的板材数组", requiredMode = Schema.RequiredMode.REQUIRED)
+ private List updatePlateNames;
+
+ @Schema(description = "导入失败的板材集合,key 为板材名,value 为失败原因", requiredMode = Schema.RequiredMode.REQUIRED)
+ private Map failurePlateNames;
+}
diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/plate/vo/plate/PlatePageReqVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/plate/vo/plate/PlatePageReqVO.java
new file mode 100644
index 000000000..20149a54f
--- /dev/null
+++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/plate/vo/plate/PlatePageReqVO.java
@@ -0,0 +1,75 @@
+package com.cf.imes.module.executor.controller.admin.manage.plate.vo.plate;
+
+import com.cf.imes.framework.common.pojo.PageParam;
+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 = "管理后台 - 板材信息表 plate_{N}分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class PlatePageReqVO extends PageParam {
+
+ @Schema(description = "客户的商品编号", example = "1")
+ @Size(max = 32, message = "商品编号长度不能超过32个字符")
+ private String goodsId;
+
+ @Schema(description = "商品名称", example = "赵六")
+ @Size(max = 64, message = "商品名称长度不能超过64个字符")
+ private String goodsName;
+
+ @Schema(description = "材质:颗粒板、欧松板、多层板、生态板、禾香板、密度板、实木、铝蜂窝板、铝塑板")
+ @Size(max = 64, message = "材质长度不能超过64个字符")
+ private String material;
+
+ @Schema(description = "颜色")
+ @Size(max = 32, message = "颜色长度不能超过32个字符")
+ private String color;
+
+ @Schema(description = "纹理")
+ private Boolean texture;
+
+ @Schema(description = "宽度")
+ private Double width;
+
+ @Schema(description = "高度")
+ private Double height;
+
+ @Schema(description = "厚度")
+ private Double thickness;
+
+ @Schema(description = "价格", example = "3380")
+ private Double price;
+
+ @Schema(description = "品牌")
+ @Size(max = 64, message = "品牌长度不能超过64个字符")
+ private String brand;
+
+ @Schema(description = "规格")
+ @Size(max = 64, message = "规格长度不能超过64个字符")
+ private String spec;
+
+ @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;
+}
\ No newline at end of file
diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/plate/vo/plate/PlateRespVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/plate/vo/plate/PlateRespVO.java
new file mode 100644
index 000000000..3297be00b
--- /dev/null
+++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/plate/vo/plate/PlateRespVO.java
@@ -0,0 +1,77 @@
+package com.cf.imes.module.executor.controller.admin.manage.plate.vo.plate;
+
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.cf.imes.framework.excel.core.annotations.DictFormat;
+import com.cf.imes.framework.excel.core.convert.DictConvert;
+import com.cf.imes.module.executor.enums.DictTypeConstants;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Schema(description = "管理后台 - 板材信息表 plate_{N} Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class PlateRespVO {
+
+ @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+ @ExcelIgnore
+ private Long id;
+
+ @Schema(description = "客户的商品编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+ @ExcelProperty("商品编号")
+ private String goodsId;
+
+ @Schema(description = "商品名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六")
+ @ExcelProperty("商品名称")
+ private String goodsName;
+
+ @Schema(description = "材质:颗粒板、欧松板、多层板、生态板、禾香板、密度板、实木、铝蜂窝板、铝塑板", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("材质")
+ private String material;
+
+ @Schema(description = "颜色", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("颜色")
+ private String color;
+
+ @Schema(description = "纹理", example = "有")
+ @ExcelProperty(value = "纹理", converter = DictConvert.class)
+ @DictFormat(DictTypeConstants.PLATE_TEXTURE)
+ private Boolean texture;
+
+ @Schema(description = "宽度", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("宽度")
+ private Double width;
+
+ @Schema(description = "高度", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("高度")
+ private Double height;
+
+ @Schema(description = "厚度", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("厚度")
+ private Double thickness;
+
+ @Schema(description = "价格", requiredMode = Schema.RequiredMode.REQUIRED, example = "3380")
+ @ExcelProperty("价格")
+ private Double price;
+
+ @Schema(description = "品牌", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("品牌")
+ private String brand;
+
+ @Schema(description = "规格", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("规格")
+ private String spec;
+
+ @Schema(description = "备注", requiredMode = Schema.RequiredMode.REQUIRED, example = "随便")
+ @ExcelProperty("备注")
+ private String remark;
+
+ @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelIgnore
+ private LocalDateTime createTime;
+
+ private Long organId;
+}
\ No newline at end of file
diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/plate/vo/plate/PlateSaveReqVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/plate/vo/plate/PlateSaveReqVO.java
new file mode 100644
index 000000000..5f06a8577
--- /dev/null
+++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/plate/vo/plate/PlateSaveReqVO.java
@@ -0,0 +1,74 @@
+package com.cf.imes.module.executor.controller.admin.manage.plate.vo.plate;
+
+import com.cf.imes.framework.common.validation.NumberValid;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+
+@Schema(description = "管理后台 - 板材信息表 plate_{N}新增/修改 Request VO")
+@Data
+public class PlateSaveReqVO {
+
+ @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+ private Long id;
+
+ @Schema(description = "客户的商品编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+ @NotEmpty(message = "客户的商品编号不能为空")
+ @Size(max = 32, message = "商品编号长度不能超过32个字符")
+ private String goodsId;
+
+ @Schema(description = "商品名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六")
+ @NotEmpty(message = "商品名称不能为空")
+ @Size(max = 64, message = "商品名称长度不能超过64个字符")
+ private String goodsName;
+
+ @Schema(description = "材质:颗粒板、欧松板、多层板、生态板、禾香板、密度板、实木、铝蜂窝板、铝塑板", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotEmpty(message = "材质:颗粒板、欧松板、多层板、生态板、禾香板、密度板、实木、铝蜂窝板、铝塑板不能为空")
+ @Size(max = 64, message = "材质长度不能超过64个字符")
+ private String material;
+
+ @Schema(description = "颜色", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotEmpty(message = "颜色不能为空")
+ @Size(max = 32, message = "颜色长度不能超过32个字符")
+ private String color;
+
+ @Schema(description = "纹理", requiredMode = Schema.RequiredMode.REQUIRED)
+// @NotNull(message = "纹理不能为空")
+ private Boolean texture;
+
+ @Schema(description = "宽度", requiredMode = Schema.RequiredMode.REQUIRED)
+// @NotNull(message = "宽度不能为空")
+ @NumberValid(name = "宽度")
+ private Double width;
+
+ @Schema(description = "高度", requiredMode = Schema.RequiredMode.REQUIRED)
+// @NotNull(message = "高度不能为空")
+ @NumberValid(name = "高度")
+ private Double height;
+
+ @Schema(description = "厚度", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotNull(message = "厚度不能为空")
+ @NumberValid(name = "厚度")
+ private Double thickness;
+
+ @Schema(description = "价格", example = "3380")
+ @NumberValid(name = "价格")
+ private Double price;
+
+ @Schema(description = "品牌")
+ @Size(max = 64, message = "品牌长度不能超过64个字符")
+ private String brand;
+
+ @Schema(description = "规格")
+ @Size(max = 64, message = "规格长度不能超过64个字符")
+ private String spec;
+
+ @Schema(description = "备注", example = "随便")
+ @Size(max = 255, message = "备注长度不能超过255个字符")
+ private String remark;
+
+ private Long organId;
+}
\ No newline at end of file
diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/plate/vo/remain/RemainPlatePageReqVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/plate/vo/remain/RemainPlatePageReqVO.java
new file mode 100644
index 000000000..5290d5aaa
--- /dev/null
+++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/plate/vo/remain/RemainPlatePageReqVO.java
@@ -0,0 +1,113 @@
+package com.cf.imes.module.executor.controller.admin.manage.plate.vo.remain;
+
+import com.cf.imes.framework.common.pojo.PageParam;
+import com.cf.imes.framework.common.validation.NumberValid;
+import com.cf.imes.module.executor.validation.manage.common.ValidCommonStatus;
+import com.cf.imes.module.executor.validation.manage.placeStyle.ValidPlaceStyle;
+import com.cf.imes.module.executor.validation.manage.type.ValidTypeField;
+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.Pattern;
+import javax.validation.constraints.Size;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+import static com.cf.imes.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 生产单余料板表 order_remain_plate_{N}分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class RemainPlatePageReqVO extends PageParam {
+
+ @Schema(description = "ID", example = "16628")
+ @Pattern(regexp = "^[0-9]*$",message = "余料号应为数字")
+ private String id;
+
+ @Schema(description = "排单 ID", example = "16628")
+ @Pattern(regexp = "^[0-9]*$",message = "使用排单号应为数字")
+ private String planId;
+
+ @Schema(description = "组织id", example = "1")
+ private Long organId;
+
+ @Schema(description = "初始排单 ID", example = "6628")
+ @Pattern(regexp = "^[0-9]*$",message = "排单号应为数字")
+ private String initPlanId;
+
+ @Schema(description = "余料板状态,0未使用,1使用中", example = "0")
+ @ValidCommonStatus
+ private Integer status;
+
+ @Schema(description = "是否为开料添加,0否,1是", example = "0")
+ private Boolean isCutting;
+
+ @Schema(description = "使用类型,0核销,1排单,2补板", example = "0")
+ @ValidTypeField
+ private Integer useType;
+
+ @Schema(description = "商品 ID", example = "7425")
+ @Size(max = 32, message = "商品ID长度不能超过32个字符")
+ private String goodsId;
+
+ @Schema(description = "商品名", example = "晨丰")
+ @Size(max = 255, message = "商品名长度不能超过255个字符")
+ private String name;
+
+ @Schema(description = "材料")
+ @Size(max = 50, message = "材料长度不能超过50个字符")
+ private String material;
+
+ @Schema(description = "颜色")
+ @Size(max = 50, message = "颜色长度不能超过50个字符")
+ private String color;
+
+ @Schema(description = "纹理")
+ private Boolean texture;
+
+ @Schema(description = "宽度")
+ private BigDecimal[] width;
+
+ @Schema(description = "长度")
+ private BigDecimal[] length;
+
+ @Schema(description = "厚度")
+ @NumberValid(name = "厚度")
+ private BigDecimal thickness;
+
+ @Schema(description = "品牌")
+ @Size(max = 50, message = "品牌长度不能超过50个字符")
+ private String brand;
+
+ @Schema(description = "放置样式,0正面,1正面右转,2正面后转,3正面左转,4反面,5反面右转,6反面后转,7反面左转")
+ @ValidPlaceStyle
+ private Integer placeStyle;
+
+ @Schema(description = "仓库名")
+ @Size(max = 64, message = "品牌长度不能超过64个字符")
+ private String store;
+
+ @Schema(description = "数量", example = "18318")
+ private Integer count;
+
+ @Schema(description = "备注", example = "随便")
+ @Size(max = 255, message = "品牌长度不能超过255个字符")
+ private String remark;
+
+ @Schema(description = "轮廊数据,Json 串")
+ private String outLineJson;
+
+ @Schema(description = "创建日期")
+ @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+ private LocalDateTime[] createTime;
+
+ @Schema(description = "排序", example = "ascend")
+ private String order;
+
+ @Schema(description = "排序字段", example = "id")
+ private String field;
+}
\ No newline at end of file
diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/plate/vo/remain/RemainPlateRespVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/plate/vo/remain/RemainPlateRespVO.java
new file mode 100644
index 000000000..d64349b2e
--- /dev/null
+++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/plate/vo/remain/RemainPlateRespVO.java
@@ -0,0 +1,105 @@
+package com.cf.imes.module.executor.controller.admin.manage.plate.vo.remain;
+
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+@Schema(description = "管理后台 - 生产单余料板表 order_remain_plate_{N} Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class RemainPlateRespVO {
+
+ @Schema(description = "余料板 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "16470")
+ @ExcelProperty("余料板 ID")
+ private Long id;
+
+ @Schema(description = "组织id", example = "1")
+ @ExcelIgnore
+ private Long organId;
+
+ @Schema(description = "排单 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "16628")
+ @ExcelProperty("排单 ID")
+ private Long planId;
+
+ @Schema(description = "初始排单 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "6628")
+ @ExcelProperty("初始排单 ID")
+ private Long initPlanId;
+
+ @Schema(description = "余料板状态,0未使用,1使用中", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+ @ExcelProperty("余料板状态,0未使用,1使用中")
+ private Integer status;
+
+ @Schema(description = "是否为开料添加,0否,1是", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+ @ExcelProperty("是否为开料添加,0否,1是")
+ private Boolean isCutting;
+
+ @Schema(description = "使用类型,0核销,1排单,2补板", example = "0")
+ @ExcelProperty("使用类型,0核销,1排单,2补板")
+ private Integer useType;
+
+ @Schema(description = "商品 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "7425")
+ @ExcelProperty("商品 ID")
+ private String goodsId;
+
+ @Schema(description = "商品名", requiredMode = Schema.RequiredMode.REQUIRED, example = "晨丰")
+ @ExcelProperty("商品名")
+ private String name;
+
+ @Schema(description = "材料", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("材料")
+ private String material;
+
+ @Schema(description = "颜色", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("颜色")
+ private String color;
+
+ @Schema(description = "纹理 有 无", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("纹理 有 无")
+ private Boolean texture;
+
+ @Schema(description = "宽度", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("宽度")
+ private BigDecimal width;
+
+ @Schema(description = "长度", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("长度")
+ private BigDecimal length;
+
+ @Schema(description = "厚度", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("厚度")
+ private BigDecimal thickness;
+
+ @Schema(description = "品牌", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("品牌")
+ private String brand;
+
+ @Schema(description = "放置样式,0正面,1正面右转,2正面后转,3正面左转,4反面,5反面右转,6反面后转,7反面左转", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("放置样式,0正面,1正面右转,2正面后转,3正面左转,4反面,5反面右转,6反面后转,7反面左转")
+ private Integer placeStyle;
+
+ @Schema(description = "仓库名", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("仓库名")
+ private String store;
+
+ @Schema(description = "数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "18318")
+ @ExcelProperty("数量")
+ private Integer count;
+
+ @Schema(description = "备注", requiredMode = Schema.RequiredMode.REQUIRED, example = "随便")
+ @ExcelProperty("备注")
+ private String remark;
+
+ @Schema(description = "轮廊数据,Json 串", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("轮廊数据,Json 串")
+ private String outLineJson;
+
+ @Schema(description = "创建日期", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("创建日期")
+ private LocalDateTime createTime;
+
+}
\ No newline at end of file
diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/plate/vo/remain/RemainPlateSaveReqVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/plate/vo/remain/RemainPlateSaveReqVO.java
new file mode 100644
index 000000000..d4cf7df07
--- /dev/null
+++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/plate/vo/remain/RemainPlateSaveReqVO.java
@@ -0,0 +1,102 @@
+package com.cf.imes.module.executor.controller.admin.manage.plate.vo.remain;
+
+import com.cf.imes.framework.common.validation.NumberValid;
+import com.cf.imes.module.executor.validation.manage.common.ValidCommonStatus;
+import com.cf.imes.module.executor.validation.manage.placeStyle.ValidPlaceStyle;
+import com.cf.imes.module.executor.validation.manage.type.ValidTypeField;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+import java.math.BigDecimal;
+
+@Schema(description = "管理后台 - 生产单余料板表 Request VO")
+@Data
+public class RemainPlateSaveReqVO {
+
+ @Schema(description = "余料板 ID")
+ private Long id;
+
+ @Schema(description = "组织id", example = "1")
+ private Long organId;
+
+ @Schema(description = "排单 ID")
+ private Long planId;
+
+ @Schema(description = "初始排单 ID")
+ private Long initPlanId;
+
+ @Schema(description = "余料板状态,0未使用,1已使用", example = "1")
+ @ValidCommonStatus
+ private Integer status;
+
+ @Schema(description = "是否为开料添加,0否,1是", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+ @NotNull(message = "是否为开料添加,0否,1是")
+ private Boolean isCutting;
+
+ @Schema(description = "使用类型,0核销,1排单,2补板", example = "1")
+ @ValidTypeField
+ private Integer useType;
+
+ @Schema(description = "商品 ID", example = "7425")
+ @Size(max = 32, message = "商品ID长度不能超过32个字符")
+ private String goodsId;
+
+ @Schema(description = "商品名", example = "晨丰")
+ @Size(max = 255, message = "商品名长度不能超过255个字符")
+ private String name;
+
+ @Schema(description = "材料", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotEmpty(message = "材料不能为空")
+ @Size(max = 50, message = "材料长度不能超过50个字符")
+ private String material;
+
+ @Schema(description = "颜色", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotEmpty(message = "颜色不能为空")
+ @Size(max = 50, message = "颜色长度不能超过50个字符")
+ private String color;
+
+ @Schema(description = "纹理 有 无", requiredMode = Schema.RequiredMode.REQUIRED)
+ private Boolean texture;
+
+ @Schema(description = "宽度", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotNull(message = "宽度不能为空")
+ @NumberValid(name = "宽度")
+ private BigDecimal width;
+
+ @Schema(description = "长度", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotNull(message = "长度不能为空")
+ @NumberValid(name = "长度")
+ private BigDecimal length;
+
+ @Schema(description = "厚度", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotNull(message = "厚度不能为空")
+ @NumberValid(name = "厚度")
+ private BigDecimal thickness;
+
+ @Schema(description = "品牌")
+ @Size(max = 50, message = "品牌长度不能超过50个字符")
+ private String brand;
+
+ @Schema(description = "放置样式,0正面,1正面右转,2正面后转,3正面左转,4反面,5反面右转,6反面后转,7反面左转", example = "0")
+ @ValidPlaceStyle
+ private Integer placeStyle;
+
+ @Schema(description = "仓库名")
+ @Size(max = 64, message = "仓库名长度不能超过64个字符")
+ private String store;
+
+ @Schema(description = "数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "18318")
+ @NotNull(message = "数量不能为空")
+ private Integer count;
+
+ @Schema(description = "备注", example = "随便")
+ @Size(max = 255, message = "备注长度不能超过255个字符")
+ private String remark;
+
+ @Schema(description = "轮廊数据,Json 串", requiredMode = Schema.RequiredMode.REQUIRED, example = "18318")
+ private String outLineJson;
+
+}
\ No newline at end of file
diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/plate/vo/remain/RemainPlateUpSaveVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/plate/vo/remain/RemainPlateUpSaveVO.java
new file mode 100644
index 000000000..fb9f6cb93
--- /dev/null
+++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/plate/vo/remain/RemainPlateUpSaveVO.java
@@ -0,0 +1,67 @@
+package com.cf.imes.module.executor.controller.admin.manage.plate.vo.remain;
+
+import com.cf.imes.framework.common.validation.NumberValid;
+import com.cf.imes.module.executor.validation.manage.placeStyle.ValidPlaceStyle;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+import java.math.BigDecimal;
+
+/**
+ * 余料修改字段
+ */
+@Schema(description = "管理后台 - 余料修改字段 VO")
+@Data
+public class RemainPlateUpSaveVO {
+
+ @Schema(description = "宽度", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotNull(message = "宽度不能为空")
+ @NumberValid(name = "宽度")
+ private BigDecimal width;
+
+ @Schema(description = "长度", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotNull(message = "长度不能为空")
+ @NumberValid(name = "长度")
+ private BigDecimal length;
+
+ @Schema(description = "厚度", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotNull(message = "厚度不能为空")
+ @NumberValid(name = "厚度")
+ private BigDecimal thickness;
+
+ @Schema(description = "纹理 有 无", requiredMode = Schema.RequiredMode.REQUIRED)
+ private Boolean texture;
+
+ @Schema(description = "材料", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotEmpty(message = "材料不能为空")
+ @Size(max = 50, message = "材料长度不能超过50个字符")
+ private String material;
+
+ @Schema(description = "颜色", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotEmpty(message = "颜色不能为空")
+ @Size(max = 50, message = "颜色长度不能超过50个字符")
+ private String color;
+
+ @Schema(description = "品牌")
+ @Size(max = 50, message = "品牌长度不能超过50个字符")
+ private String brand;
+
+ @Schema(description = "仓库名")
+ @Size(max = 64, message = "品牌长度不能超过64个字符")
+ private String store;
+
+ @Schema(description = "备注", example = "随便")
+ @Size(max = 255, message = "品牌长度不能超过255个字符")
+ private String remark;
+
+ @Schema(description = "放置样式", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotNull(message = "余料放置样式不可为空")
+ @ValidPlaceStyle
+ private Integer placeStyle;
+
+ @Schema(description = "轮廊数据,Json 串", requiredMode = Schema.RequiredMode.REQUIRED)
+ private String outLineJson;
+}
diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/plate/vo/remain/RemainPlateUptReqVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/plate/vo/remain/RemainPlateUptReqVO.java
new file mode 100644
index 000000000..f44cd4b08
--- /dev/null
+++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/plate/vo/remain/RemainPlateUptReqVO.java
@@ -0,0 +1,27 @@
+package com.cf.imes.module.executor.controller.admin.manage.plate.vo.remain;
+
+import com.cf.imes.module.executor.validation.manage.common.ValidCommonStatus;
+import com.cf.imes.module.executor.validation.manage.type.ValidTypeField;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.util.Set;
+
+@Schema(description = "管理后台 - 生产单余料板表 order_remain_plate_{N} Response VO")
+@Data
+public class RemainPlateUptReqVO {
+
+ @Schema(description = "余料板集", example = "16470")
+ private Set ids;
+
+ @Schema(description = "余料板状态,0未使用,1使用中", example = "1")
+ @ValidCommonStatus
+ private Integer status;
+
+ @Schema(description = "使用类型,1核销,2排单,3补板", example = "0")
+ @ValidTypeField
+ private Integer useType;
+
+ @Schema(description = "排单 ID", example = "6628")
+ private Long planId;
+}
diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/process/vo/PlateDetails.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/process/vo/PlateDetails.java
new file mode 100644
index 000000000..7b963acb2
--- /dev/null
+++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/process/vo/PlateDetails.java
@@ -0,0 +1,28 @@
+package com.cf.imes.module.executor.controller.admin.manage.process.vo;
+
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Data
+public class PlateDetails {
+
+
+
+ @Schema(description = "板编号")
+ private Long plateId;
+
+ @Schema(description = "自定义板编号-板号")
+ private Long plateNo;
+
+ @Schema(description = "长")
+ private Long length;
+
+ @Schema(description = "宽")
+ private Long width;
+
+ @Schema(description = "厚")
+ private Long thickness;
+
+
+}
diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/process/vo/ProcessPlateReqVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/process/vo/ProcessPlateReqVO.java
new file mode 100644
index 000000000..21d7fb724
--- /dev/null
+++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/process/vo/ProcessPlateReqVO.java
@@ -0,0 +1,39 @@
+package com.cf.imes.module.executor.controller.admin.manage.process.vo;
+
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.ToString;
+
+@Schema(description = "管理后台 - 查询板件")
+@Data
+@ToString(callSuper = true)
+public class ProcessPlateReqVO {
+
+
+ @Schema(description = "工序类型",requiredMode = Schema.RequiredMode.REQUIRED)
+ private Long processType;
+
+
+ @Schema(description = "生产单号",requiredMode = Schema.RequiredMode.REQUIRED)
+ private Long orderId;
+
+
+// @Schema(description = "工序明细ID",requiredMode = Schema.RequiredMode.REQUIRED)
+// private Long stepItemId;
+
+
+ @Schema(description = "生产单工序步骤ID", requiredMode = Schema.RequiredMode.REQUIRED,example = "11")
+ private Long processStepId;
+
+
+ @Schema(description = "加工项名称", requiredMode = Schema.RequiredMode.REQUIRED,example = "ABCD")
+ private String name;
+
+
+ @Schema(description = "柜体ID")
+ private Long bodyId;
+
+
+
+}
diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/query/vo/pack/OrderPackageVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/query/vo/pack/OrderPackageVO.java
new file mode 100644
index 000000000..bd982749d
--- /dev/null
+++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/query/vo/pack/OrderPackageVO.java
@@ -0,0 +1,64 @@
+package com.cf.imes.module.executor.controller.admin.manage.query.vo.pack;
+
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Schema(description = "管理后台 - 生产单包裹表 Response VO")
+@Data
+public class OrderPackageVO {
+
+
+
+ @Schema(description = "主键-包裹ID", requiredMode = Schema.RequiredMode.REQUIRED)
+ private Long id;
+
+ @Schema(description = "生产单号", requiredMode = Schema.RequiredMode.REQUIRED)
+ private Long orderId;
+
+ @Schema(description = "自定义单号")
+ private String customOrderNo;
+
+ @Schema(description = "客户")
+ private String customer;
+
+ @Schema(description = "客户地址")
+ private String address;
+
+ @Schema(description = "经销商")
+ private String dealer;
+
+ @Schema(description = "包裹编号", requiredMode = Schema.RequiredMode.REQUIRED)
+ private String packageNo;
+
+ @Schema(description = "包裹类型", requiredMode = Schema.RequiredMode.REQUIRED)
+ private Long type;
+
+ @Schema(description = "包裹状态", requiredMode = Schema.RequiredMode.REQUIRED)
+ private Long status;
+
+ @Schema(description = "组织ID", requiredMode = Schema.RequiredMode.REQUIRED)
+ private Long organId;
+
+ @Schema(description = "创建人", requiredMode = Schema.RequiredMode.REQUIRED)
+ private String creator;
+
+ @Schema(description = "包裹备注", requiredMode = Schema.RequiredMode.REQUIRED)
+ private String packRemark;
+
+ @Schema(description = "生产单备注", requiredMode = Schema.RequiredMode.REQUIRED)
+ private String orderRemark;
+
+ @Schema(description = "出库人", requiredMode = Schema.RequiredMode.REQUIRED)
+ private String updater;
+
+ @Schema(description = "出库时间", requiredMode = Schema.RequiredMode.REQUIRED)
+ private LocalDateTime updateTime;
+
+
+ @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+ private LocalDateTime createTime;
+
+}
diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/query/vo/pack/PackageDetailsRespVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/query/vo/pack/PackageDetailsRespVO.java
new file mode 100644
index 000000000..c80507996
--- /dev/null
+++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/query/vo/pack/PackageDetailsRespVO.java
@@ -0,0 +1,127 @@
+package com.cf.imes.module.executor.controller.admin.manage.query.vo.pack;
+
+
+import com.cf.imes.module.executor.controller.admin.manage.pack.vo.GroupNameList;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.util.List;
+
+@Schema(description = "管理后台 - 包裹详情 Response VO")
+@Data
+public class PackageDetailsRespVO {
+
+
+ @Schema(description = "生产单ID", requiredMode = Schema.RequiredMode.REQUIRED)
+ private String orderId;
+
+ @Schema(description = "房间名称-板材类型显示", requiredMode = Schema.RequiredMode.REQUIRED)
+ private String roomName;
+
+ @Schema(description = "柜体名称", requiredMode = Schema.RequiredMode.REQUIRED)
+ private String cabinetName;
+
+
+ @Schema(description = "板材ID", requiredMode = Schema.RequiredMode.REQUIRED)
+ private Long plateId;
+
+ @Schema(description = "板编号", requiredMode = Schema.RequiredMode.REQUIRED)
+ private String plateNo;
+
+ @Schema(description = "板名称", requiredMode = Schema.RequiredMode.REQUIRED)
+ private String plateName;
+
+ @Schema(description = "材料", requiredMode = Schema.RequiredMode.REQUIRED)
+ private String material;
+
+ @Schema(description = "颜色", requiredMode = Schema.RequiredMode.REQUIRED)
+ private String color;
+
+ @Schema(description = "宽度", requiredMode = Schema.RequiredMode.REQUIRED)
+ private Double width;
+
+ @Schema(description = "长度", requiredMode = Schema.RequiredMode.REQUIRED)
+ private Double height;
+
+ @Schema(description = "厚度", requiredMode = Schema.RequiredMode.REQUIRED)
+ private Double thickness;
+
+ @Schema(description = "面积", requiredMode = Schema.RequiredMode.REQUIRED)
+ private Double area;
+
+ @Schema(description = "纹路", requiredMode = Schema.RequiredMode.REQUIRED)
+ private String texture;
+
+ @Schema(description = "是否异型", requiredMode = Schema.RequiredMode.REQUIRED)
+ private Boolean specialShaped;
+
+ @Schema(description = "是否造型", requiredMode = Schema.RequiredMode.REQUIRED)
+ private Boolean profiling;
+
+ @Schema(description = "是否有孔", requiredMode = Schema.RequiredMode.REQUIRED)
+ private Boolean rowHole;
+
+ @Schema(description = "加工组", requiredMode = Schema.RequiredMode.REQUIRED)
+ private String processGroup;
+
+
+ @Schema(description = "备注(板材和配件都要传递)", requiredMode = Schema.RequiredMode.REQUIRED)
+ private String remark;
+
+
+ @Schema(description = "加工组名称集合")
+ private List processGroupNameList;
+
+
+
+ @Schema(description = "配件名称-配件类型显示", requiredMode = Schema.RequiredMode.REQUIRED)
+ private String name;
+
+ @Schema(description = "配件ID", requiredMode = Schema.RequiredMode.REQUIRED)
+ private Long partsId;
+
+ @Schema(description = "型号", requiredMode = Schema.RequiredMode.REQUIRED)
+ private String model;
+
+ @Schema(description = "规格", requiredMode = Schema.RequiredMode.REQUIRED)
+ private String spec;
+
+ @Schema(description = "明细配件类型, 2 五金/配件 3 其他 4 报价配件", requiredMode = Schema.RequiredMode.REQUIRED)
+ private String type;
+
+ @Schema(description = "数量", requiredMode = Schema.RequiredMode.REQUIRED)
+ private Long num;
+
+ @Schema(description = "单位", requiredMode = Schema.RequiredMode.REQUIRED)
+ private String unit;
+
+ @Schema(description = "是否复合部件:0 否 1 是", requiredMode = Schema.RequiredMode.REQUIRED)
+ private Boolean isComposite;
+
+ @Schema(description = "品牌", requiredMode = Schema.RequiredMode.REQUIRED)
+ private String brand;
+
+ @Schema(description = "厂家", requiredMode = Schema.RequiredMode.REQUIRED)
+ private String factory;
+
+
+ @Schema(description = "配件颜色", requiredMode = Schema.RequiredMode.REQUIRED)
+ private String partsColor;
+
+ @Schema(description = "配件宽度", requiredMode = Schema.RequiredMode.REQUIRED)
+ private Double partsWidth;
+
+ @Schema(description = "配件长度", requiredMode = Schema.RequiredMode.REQUIRED)
+ private Double partsLength;
+
+ @Schema(description = "配件厚度", requiredMode = Schema.RequiredMode.REQUIRED)
+ private Double partsThickness;
+
+ @Schema(description = "配件主类:1封边2五金3组件", requiredMode = Schema.RequiredMode.REQUIRED)
+ private String category;
+
+ @Schema(description = "子配件ID列表,复合部件时记录子配件ID,半角逗号分隔", requiredMode = Schema.RequiredMode.REQUIRED)
+ private String subparts;
+
+
+}
diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/query/vo/productionStatus/OrderModuleVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/query/vo/productionStatus/OrderModuleVO.java
new file mode 100644
index 000000000..b3f21d151
--- /dev/null
+++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/query/vo/productionStatus/OrderModuleVO.java
@@ -0,0 +1,27 @@
+package com.cf.imes.module.executor.controller.admin.manage.query.vo.productionStatus;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+
+
+@Schema(description = "管理后台 - 生产单模块表 order_module_{N} Response VO")
+@Data
+public class OrderModuleVO {
+
+ @Schema(description = "柜体 id", requiredMode = Schema.RequiredMode.REQUIRED, example = "嘿嘿")
+ private Long bodyId;
+
+
+ @Schema(description = "加工组 id", example = "嘿嘿")
+ private Long groupId;
+
+
+ @Schema(description = "组合名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "嘿嘿")
+ private String name;
+
+
+ @Schema(description = "加工组名称", example = "嘿嘿")
+ private String groupName;
+
+}
diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/query/vo/productionStatus/OrderPlatePageReqVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/query/vo/productionStatus/OrderPlatePageReqVO.java
new file mode 100644
index 000000000..907ab4dc8
--- /dev/null
+++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/query/vo/productionStatus/OrderPlatePageReqVO.java
@@ -0,0 +1,47 @@
+package com.cf.imes.module.executor.controller.admin.manage.query.vo.productionStatus;
+
+
+import com.cf.imes.framework.common.pojo.PageParam;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+
+import java.util.List;
+
+
+@Schema(description = "管理后台 - 生产单表 order_{N} 分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class OrderPlatePageReqVO extends PageParam {
+
+
+
+ @Schema(description = "生产状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "2,3")
+ private List statusList;
+
+
+ @Schema(description = "订单号")
+ private Long orderNo;
+
+
+ @Schema(description = "自定义单号")
+ private String customOrderNo;
+
+
+ @Schema(description = "客户")
+ private String customer;
+
+
+ @Schema(description = "地址")
+ private String address;
+
+
+ @Schema(description = "经销商")
+ private String dealer;
+
+
+}
+
+
diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/query/vo/productionStatus/OrderPlateRespVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/query/vo/productionStatus/OrderPlateRespVO.java
new file mode 100644
index 000000000..b0b3d651a
--- /dev/null
+++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/query/vo/productionStatus/OrderPlateRespVO.java
@@ -0,0 +1,33 @@
+package com.cf.imes.module.executor.controller.admin.manage.query.vo.productionStatus;
+
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Schema(description = "管理后台 - 板材信息表 Response VO")
+@Data
+public class OrderPlateRespVO {
+
+ @Schema(description = "板编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "9822")
+ private Long id;
+
+ @Schema(description = "板名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "李四")
+ private String name;
+
+
+ @Schema(description = "颜色", requiredMode = Schema.RequiredMode.REQUIRED)
+ private String color;
+
+ @Schema(description = "宽度", requiredMode = Schema.RequiredMode.REQUIRED)
+ private Double width;
+
+ @Schema(description = "高度", requiredMode = Schema.RequiredMode.REQUIRED)
+ private Double height;
+
+ @Schema(description = "厚度", requiredMode = Schema.RequiredMode.REQUIRED)
+ private Double thickness;
+
+ @Schema(description = "材质:颗粒板、欧松板、多层板、生态板、禾香板、密度板、实木、铝蜂窝板、铝塑板", requiredMode = Schema.RequiredMode.REQUIRED)
+ private String material;
+
+}
diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/query/vo/productionStatus/PlatePageVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/query/vo/productionStatus/PlatePageVO.java
new file mode 100644
index 000000000..4d0226d68
--- /dev/null
+++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/query/vo/productionStatus/PlatePageVO.java
@@ -0,0 +1,24 @@
+package com.cf.imes.module.executor.controller.admin.manage.query.vo.productionStatus;
+
+
+import com.cf.imes.framework.common.pojo.PageParam;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+
+@Schema(description = "管理后台 - 板材信息表分页")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class PlatePageVO extends PageParam {
+
+ @Schema(description = "柜体 id",requiredMode = Schema.RequiredMode.REQUIRED)
+ private Long bodyId ;
+
+
+ @Schema(description = "加工组 id")
+ private Long groupId;
+
+
+}
diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/test/TestController.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/test/TestController.java
new file mode 100644
index 000000000..960662b32
--- /dev/null
+++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/manage/test/TestController.java
@@ -0,0 +1,175 @@
+package com.cf.imes.module.executor.controller.admin.manage.test;
+
+import com.cf.imes.module.executor.dal.mysql.manage.test.TestMapper;
+import com.jacob.activeX.ActiveXComponent;
+import com.jacob.com.Dispatch;
+import com.jacob.com.Variant;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.jetbrains.annotations.TestOnly;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import javax.annotation.security.PermitAll;
+import java.io.File;
+import java.util.List;
+import java.util.Random;
+
+
+/**
+ * @author there
+ * 测试 controller
+ */
+@RestController
+@RequestMapping("/manage/test")
+@Tag(name = "测试")
+public class TestController {
+
+ @Resource
+ private TestMapper testMapper;
+
+
+ @GetMapping("/get")
+ @PermitAll
+ @Operation(summary = "测试")
+ public Object get() {
+ return testMapper.selectList();
+ }
+
+
+ public class JacobTestController {
+ /* *
+ * 语音转文字并播放
+ *
+ * @param text
+ */
+ private static void convertTextToSpeech(String text) {
+
+
+ try {
+
+ //jacob.dll没成功安装,执行这一步会出错
+ //构建音频格式 调用注册表应用
+ Dispatch spAudioFormat = new ActiveXComponent("Sapi.SpAudioFormat").getObject();
+ //音频文件输出流
+ Dispatch spFileStream = new ActiveXComponent("Sapi.SpFileStream").getObject();
+ //构建音频对象
+ Dispatch spVoice = new ActiveXComponent("Sapi.SpVoice").getObject();
+
+ //设置spAudioFormat音频流格式类型22
+ Dispatch.put(spAudioFormat, "Type", new Variant(22));
+ //设置spFileStream文件输出流的音频格式
+ Dispatch.putRef(spFileStream, "Format", spAudioFormat);
+
+ //设置spFileStream文件输出流参数地址等
+ Dispatch.call(spFileStream, "Open", new Variant("E:AAAAA\48641486.wav"), new Variant(3), new Variant(true));
+ //设置spVoice声音对象的音频输出流为输出文件对象
+ Dispatch.putRef(spVoice, "AudioOutputStream", spFileStream);
+ //设置spVoice声音对象的音量大小100
+ Dispatch.put(spVoice, "Volume", new Variant(100));
+ //设置spVoice声音对象的速度 0为正常速度,范围【..-2 -1 0 1 2..】
+ Dispatch.put(spVoice, "Rate", new Variant(0));
+ //设置spVoice声音对象中的文本内容
+ Dispatch.call(spVoice, "Speak", new Variant(text));
+ //关闭spFileStream输出文件
+ Dispatch.call(spFileStream, "Close");
+
+ //释放资源
+ spVoice.safeRelease();
+ spAudioFormat.safeRelease();
+ spFileStream.safeRelease();
+
+ } catch (Exception e) {
+ System.out.println(e.getMessage());
+
+ }
+ }
+
+ /* private static XxlJobProperties aabb(){
+
+ XxlJobParameter xxlJobParameter = new XxlJobParameter();
+
+ xxlJobParameter.setEnabled(false);
+ xxlJobParameter.setAccessToken("1122");
+ xxlJobParameter.setAddresses("五阿里乌");
+ xxlJobParameter.setAppName("aaappn");
+ XxlJobProperties bean = BeanUtils.toBean(xxlJobParameter, XxlJobProperties.class);
+ return bean;
+
+ }*/
+
+ }
+
+
+ public static void deleteFiles(List filePaths) {
+ // 检查文件路径集合是否为空
+ if (filePaths == null || filePaths.isEmpty()) {
+ System.out.println("文件路径集合为空");
+ return;
+ }
+
+ for (String filePath : filePaths) {
+ // 检查文件路径是否为空
+ if (filePath == null || filePath.isEmpty()) {
+ System.out.println("文件路径为空");
+ continue;
+ }
+
+ File file = new File(filePath);
+
+ // 检查文件是否存在
+ if (!file.exists()) {
+ System.out.println("文件不存在:" + filePath);
+ continue;
+ }
+
+ // 检查是否是文件
+ if (!file.isFile()) {
+ System.out.println("路径指向的不是文件:" + filePath);
+ continue;
+ }
+
+ // 尝试删除文件
+ if (file.delete()) {
+ System.out.println("文件删除成功:" + filePath);
+ } else {
+ System.out.println("文件删除失败:" + filePath);
+ }
+ }
+ }
+
+
+ public static Integer aacc() {
+
+ RedisTemplate