From dd431650ba0a6a88d0ee686b9a229411d45811e7 Mon Sep 17 00:00:00 2001 From: gaoqr <13665037151@163.com> Date: Wed, 24 Dec 2025 17:24:10 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9Ecad=E4=B8=89=E7=BB=B4?= =?UTF-8?q?=E7=9C=8B=E5=9B=BE=E8=83=BD=E5=8A=9B=E7=9B=B8=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/util/servlet/ServletUtils.java | 15 ++ .../imes/module/infra/api/file/FileApi.java | 6 + .../module/infra/api/file/FileApiImpl.java | 6 + .../controller/admin/file/FileController.java | 24 +++ .../infra/service/file/FileService.java | 2 +- .../infra/service/file/FileServiceImpl.java | 8 +- .../vo/order/OrderBodyViewPlatePageReqVO.java | 27 +++ .../admin/order/vo/order/OrderRespVO.java | 3 - .../order/vo/product/OrderBodyRespVO.java | 2 - .../admin/plate/PlateController.java | 12 ++ .../vo/OrderBodyViewPlatePageRespVO.java | 66 ++++++ .../dal/dataobject/order/OrderDO.java | 5 - .../dal/dataobject/orderBody/OrderBodyDO.java | 6 +- .../orderItem/OrderBodyViewPlatesPageDO.java | 79 +++++++ .../dal/dataobject/plate/PlateDO.java | 5 + .../dal/mysql/orderItem/OrderItemMapper.java | 16 ++ .../executor/service/plate/PlateService.java | 16 ++ .../service/plate/PlateServiceImpl.java | 193 +++++++++++------- .../mapper/orderItem/OrderItemMapper.xml | 17 ++ .../webcad/vo/WebCadDataReqVO.java | 5 +- .../plan/dal/dataobject/order/OrderDO.java | 5 - .../plan/dal/dataobject/plate/PlateDO.java | 5 + .../rpc/config/RpcConfiguration.java | 3 +- .../WebCadOrderImportServiceImpl.java | 28 +++ .../consumer/WebCadOrderImportConsumer.java | 14 +- .../WebCadOrderImportAsyncFactory.java | 85 +++++--- .../factory/WebCadOrderImportFactory.java | 25 ++- 27 files changed, 529 insertions(+), 149 deletions(-) create mode 100644 cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/order/vo/order/OrderBodyViewPlatePageReqVO.java create mode 100644 cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plate/vo/OrderBodyViewPlatePageRespVO.java create mode 100644 cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/orderItem/OrderBodyViewPlatesPageDO.java diff --git a/cf-framework/cf-common/src/main/java/com/cf/imes/framework/common/util/servlet/ServletUtils.java b/cf-framework/cf-common/src/main/java/com/cf/imes/framework/common/util/servlet/ServletUtils.java index 08ee0f5cb..0076072f2 100644 --- a/cf-framework/cf-common/src/main/java/com/cf/imes/framework/common/util/servlet/ServletUtils.java +++ b/cf-framework/cf-common/src/main/java/com/cf/imes/framework/common/util/servlet/ServletUtils.java @@ -50,6 +50,21 @@ public class ServletUtils { IoUtil.write(response.getOutputStream(), false, content); } + /** + * 返回附件文本 + * + * @param response 响应 + * @param filename 文件名 + * @param content 附件内容 + */ + public static void writeAttachmentText(HttpServletResponse response, String filename, byte[] content) throws IOException { + // 设置 header 和 contentType + response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename, "UTF-8")); + response.setContentType(MediaType.TEXT_PLAIN_VALUE); + // 输出附件 + IoUtil.write(response.getOutputStream(), false, content); + } + /** * @param request 请求 * @return ua diff --git a/cf-module-infra/cf-module-infra-api/src/main/java/com/cf/imes/module/infra/api/file/FileApi.java b/cf-module-infra/cf-module-infra-api/src/main/java/com/cf/imes/module/infra/api/file/FileApi.java index 8c498d211..53e1f080c 100644 --- a/cf-module-infra/cf-module-infra-api/src/main/java/com/cf/imes/module/infra/api/file/FileApi.java +++ b/cf-module-infra/cf-module-infra-api/src/main/java/com/cf/imes/module/infra/api/file/FileApi.java @@ -8,6 +8,7 @@ import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.Operation; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; @@ -75,6 +76,11 @@ public interface FileApi { @Parameter(name = "path", description = "文件地址", example = "url", required = true) CommonResult deleteFileByPath(String path); + @DeleteMapping(PREFIX + "/{id}") + @Operation(summary = "根据文件id删除文件") + @Parameter(name = "id", description = "文件id", example = "123L", required = true) + CommonResult deleteFileById(@PathVariable Long id); + @PostMapping(PREFIX + "/create/id") @Operation(summary = "保存文件,并返回文件id") CommonResult createFileAndReturnId(@Valid @RequestBody FileCreateReqDTO createReqDTO); diff --git a/cf-module-infra/cf-module-infra-biz/src/main/java/com/cf/imes/module/infra/api/file/FileApiImpl.java b/cf-module-infra/cf-module-infra-biz/src/main/java/com/cf/imes/module/infra/api/file/FileApiImpl.java index 0b3473371..fb075d022 100644 --- a/cf-module-infra/cf-module-infra-biz/src/main/java/com/cf/imes/module/infra/api/file/FileApiImpl.java +++ b/cf-module-infra/cf-module-infra-biz/src/main/java/com/cf/imes/module/infra/api/file/FileApiImpl.java @@ -28,6 +28,12 @@ public class FileApiImpl implements FileApi { return success(fileService.deleteFileByPath(path)); } + @Override + public CommonResult deleteFileById(Long id) { + fileService.deleteFile(id); + return success(true); + } + @Override public CommonResult createFileAndReturnId(FileCreateReqDTO createReqDTO) { return success(fileService.createFileDO(createReqDTO.getName(), createReqDTO.getPath(), diff --git a/cf-module-infra/cf-module-infra-biz/src/main/java/com/cf/imes/module/infra/controller/admin/file/FileController.java b/cf-module-infra/cf-module-infra-biz/src/main/java/com/cf/imes/module/infra/controller/admin/file/FileController.java index 66ee7f0d2..c38c06127 100644 --- a/cf-module-infra/cf-module-infra-biz/src/main/java/com/cf/imes/module/infra/controller/admin/file/FileController.java +++ b/cf-module-infra/cf-module-infra-biz/src/main/java/com/cf/imes/module/infra/controller/admin/file/FileController.java @@ -50,6 +50,14 @@ public class FileController { return success(fileService.createFile(file.getOriginalFilename(), path, IoUtil.readBytes(file.getInputStream()))); } + @PostMapping("/cadview") + @Operation(summary = "上传CAD图纸数据") + @OperateLog(logArgs = false) // 上传文件,没有记录操作日志的必要 + public CommonResult uploadCadViewFile(@RequestPart("file") MultipartFile file) throws Exception { + return success(fileService.createFileDO("cadViewFile", null, file.getBytes())); + } + + @DeleteMapping("/delete") @Operation(summary = "删除文件") @Parameter(name = "id", description = "编号", required = true) @@ -101,6 +109,22 @@ public class FileController { ServletUtils.writeAttachment(response, String.valueOf(id), content); } + @GetMapping("/txt/{id}") + @Operation(summary = "根据文件编号下载文本文件") + @Parameter(name = "id", description = "文件编号", required = true) + @OperateLog(enable = false) + @PermitAll + public void getTxtFileContentById(HttpServletResponse response, + @PathVariable("id") Long id) throws Exception { + byte[] content = fileService.getFileById(id); + if (content == null) { + log.warn("[getFileContent][id({}) 文件不存在]", id); + response.setStatus(HttpStatus.NOT_FOUND.value()); + return; + } + ServletUtils.writeAttachmentText(response, String.valueOf(id), content); + } + @GetMapping("/page") @Operation(summary = "获得文件分页") @PreAuthorize("@ss.hasPermission('infra:file:query')") diff --git a/cf-module-infra/cf-module-infra-biz/src/main/java/com/cf/imes/module/infra/service/file/FileService.java b/cf-module-infra/cf-module-infra-biz/src/main/java/com/cf/imes/module/infra/service/file/FileService.java index c251f2d97..7cf3a6cbf 100644 --- a/cf-module-infra/cf-module-infra-biz/src/main/java/com/cf/imes/module/infra/service/file/FileService.java +++ b/cf-module-infra/cf-module-infra-biz/src/main/java/com/cf/imes/module/infra/service/file/FileService.java @@ -44,7 +44,7 @@ public interface FileService { * * @param id 编号 */ - void deleteFile(Long id) throws Exception; + void deleteFile(Long id); /** * 获得文件内容 diff --git a/cf-module-infra/cf-module-infra-biz/src/main/java/com/cf/imes/module/infra/service/file/FileServiceImpl.java b/cf-module-infra/cf-module-infra-biz/src/main/java/com/cf/imes/module/infra/service/file/FileServiceImpl.java index 05f3a4068..6b8ae792d 100644 --- a/cf-module-infra/cf-module-infra-biz/src/main/java/com/cf/imes/module/infra/service/file/FileServiceImpl.java +++ b/cf-module-infra/cf-module-infra-biz/src/main/java/com/cf/imes/module/infra/service/file/FileServiceImpl.java @@ -105,14 +105,18 @@ public class FileServiceImpl implements FileService { } @Override - public void deleteFile(Long id) throws Exception { + public void deleteFile(Long id) { // 校验存在 FileDO file = validateFileExists(id); // 从文件存储器中删除 FileClient client = fileConfigService.getFileClient(file.getConfigId()); Assert.notNull(client, CLIENT_ERR_NOTIFICATION, file.getConfigId()); - client.delete(file.getPath()); + try { + client.delete(file.getPath()); + } catch (Exception e) { + throw new ServiceException(FILE_REMOVE_FAIL); + } // 删除记录 fileMapper.deleteById(id); diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/order/vo/order/OrderBodyViewPlatePageReqVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/order/vo/order/OrderBodyViewPlatePageReqVO.java new file mode 100644 index 000000000..716150008 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/order/vo/order/OrderBodyViewPlatePageReqVO.java @@ -0,0 +1,27 @@ +package com.cf.imes.module.executor.controller.admin.order.vo.order; + +import com.cf.imes.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.ToString; + +@Schema(description = "管理后台 - 柜体视图板材分组条件") +@Data +@ToString(callSuper = true) +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class OrderBodyViewPlatePageReqVO extends PageParam { + + @Schema(description = "生产单号", example = "1024") + private Long orderId; + + @Schema(description = "房间编号", example = "1024") + private Long roomId; + + @Schema(description = "柜体编号", example = "1024") + 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/order/vo/order/OrderRespVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/order/vo/order/OrderRespVO.java index 624b29348..69aabf4ea 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/order/vo/order/OrderRespVO.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/order/vo/order/OrderRespVO.java @@ -88,7 +88,4 @@ public class OrderRespVO { private LocalDateTime createTime; private Boolean deleted; - - @Schema(description = "cad图纸路径") - private String cadViewPath; } \ 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/order/vo/product/OrderBodyRespVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/order/vo/product/OrderBodyRespVO.java index a956b4ba4..d6472fab1 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/order/vo/product/OrderBodyRespVO.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/order/vo/product/OrderBodyRespVO.java @@ -1,10 +1,8 @@ package com.cf.imes.module.executor.controller.admin.order.vo.product; -import com.cf.imes.module.executor.dal.dataobject.orderItem.OrderItemDO; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; import java.time.LocalDateTime; -import java.util.List; import com.alibaba.excel.annotation.*; diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plate/PlateController.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plate/PlateController.java index 2d543315c..55dea67e2 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plate/PlateController.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plate/PlateController.java @@ -6,6 +6,7 @@ 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.order.vo.order.OrderBodyViewPlatePageReqVO; import com.cf.imes.module.executor.controller.admin.plan.vo.PlateResList; import com.cf.imes.module.executor.controller.admin.plate.vo.*; import com.cf.imes.module.executor.dal.dataobject.plate.PlateDO; @@ -138,5 +139,16 @@ public class PlateController { return success(plateService.createNewPlate(reqVO)); } + @GetMapping("/body/view/page") + @Operation(summary = "获取柜体下的板件视图分页列表数据") + public CommonResult> getBodyViewPlatesPage(@Valid OrderBodyViewPlatePageReqVO orderBodyPageRespVO) { + return success(plateService.getBodyViewPlatesPage(orderBodyPageRespVO)); + } + @GetMapping("/body/view/cadinfo") + @Operation(summary = "获取板件对应柜体下的所有板件视图列表数据") + @Parameter(name = "plateNo", description = "板件id", required = true) + public CommonResult> getBodyViewPlatesCadInfo(@RequestParam(value = "plateNo") Long plateNo) { + return success(plateService.getBodyViewPlatesCadInfo(plateNo)); + } } \ 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/plate/vo/OrderBodyViewPlatePageRespVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plate/vo/OrderBodyViewPlatePageRespVO.java new file mode 100644 index 000000000..e281ec6b3 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plate/vo/OrderBodyViewPlatePageRespVO.java @@ -0,0 +1,66 @@ +package com.cf.imes.module.executor.controller.admin.plate.vo; + +import com.fasterxml.jackson.annotation.JsonInclude; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.math.BigDecimal; + +/** + * + * + * @author Gqr + * @since 2025/12/23 13:40 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@Schema(description = "管理后台 - 柜体对应的板件视图信息") +@JsonInclude(JsonInclude.Include.NON_NULL) +public class OrderBodyViewPlatePageRespVO { + @Schema(description = "板件编号") + private Long id; + + @Schema(description = "板件名称") + private String name; + + @Schema(description = "板件宽度") + private BigDecimal width; + + @Schema(description = "板件高度") + private BigDecimal height; + + @Schema(description = "板件厚度") + private BigDecimal thickness; + + @Schema(description = "板件CAD图纸ID") + private Integer cadViewId; + + @Schema(description = "左封边厚度") + private BigDecimal sealLeft; + + @Schema(description = "右封边厚度") + private BigDecimal sealRight; + + @Schema(description = "上封边厚度") + private BigDecimal sealUp; + + @Schema(description = "下封边厚度") + private BigDecimal sealDown; + + @Schema(description = "材质") + private String material; + + @Schema(description = "颜色") + private String color; + + @Schema(description = "CAD图纸文件ID") + private Long cadViewFileId; + + @Schema(description = "CAD设计板编号") + private String customNumber; +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/order/OrderDO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/order/OrderDO.java index ec749227f..bd519570e 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/order/OrderDO.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/order/OrderDO.java @@ -146,9 +146,4 @@ public class OrderDO extends BaseDO { private Double plannedPlateArea; private int version; - - /** - * cad图纸路径 - */ - private String cadViewPath; } diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/orderBody/OrderBodyDO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/orderBody/OrderBodyDO.java index 7a2ad59b4..8f3df732b 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/orderBody/OrderBodyDO.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/orderBody/OrderBodyDO.java @@ -1,6 +1,5 @@ package com.cf.imes.module.executor.dal.dataobject.orderBody; -import com.cf.imes.framework.organ.core.db.OrganBaseDO; import lombok.*; import com.baomidou.mybatisplus.annotation.*; import com.cf.imes.framework.mybatis.core.dataobject.BaseDO; @@ -82,4 +81,9 @@ public class OrderBodyDO extends BaseDO { * 是否删除 */ private Boolean deleted; + + /** + * cad图纸数据文件id + */ + private Long cadViewFileId; } \ 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/dal/dataobject/orderItem/OrderBodyViewPlatesPageDO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/orderItem/OrderBodyViewPlatesPageDO.java new file mode 100644 index 000000000..b154c0855 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/orderItem/OrderBodyViewPlatesPageDO.java @@ -0,0 +1,79 @@ +package com.cf.imes.module.executor.dal.dataobject.orderItem; + +import lombok.Data; + +import java.math.BigDecimal; + +/** + * 柜体板件视图数据DO + * + * @author Gqr + * @since 2025/12/23 11:54 + */ +@Data +public class OrderBodyViewPlatesPageDO { + /** + * 主键 + */ + private Long id; + + /** + * 板件名称 + */ + private String name; + + /** + * 板件宽度 + */ + private BigDecimal width; + + /** + * 板件高度 + */ + private BigDecimal height; + + /** + * 板件厚度 + */ + private BigDecimal thickness; + + /** + * 板件CAD图纸ID + */ + private Integer cadViewId; + + /** + * 左封边厚度 + */ + private BigDecimal sealLeft; + + /** + * 右封边厚度 + */ + private BigDecimal sealRight; + + /** + * 上封边厚度 + */ + private BigDecimal sealUp; + + /** + * 下封边厚度 + */ + private BigDecimal sealDown; + + /** + * 材质 + */ + private String material; + + /** + * 颜色 + */ + private String color; + + /** + * cad设计板编号 + */ + private String customNumber; +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/plate/PlateDO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/plate/PlateDO.java index 2c38f91e9..0e32efff2 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/plate/PlateDO.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/plate/PlateDO.java @@ -222,4 +222,9 @@ public class PlateDO extends BaseDO { * cad图纸数据 */ private String cadData; + + /** + * cad自定义板编号 + */ + private String cadPlateNo; } \ 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/dal/mysql/orderItem/OrderItemMapper.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/orderItem/OrderItemMapper.java index 9d9e9d5ca..7f1edf956 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/orderItem/OrderItemMapper.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/orderItem/OrderItemMapper.java @@ -10,6 +10,7 @@ import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderGoodsRes import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderPlatesDetailRespVO; import com.cf.imes.module.executor.controller.admin.orderParts.vo.OrderPartsRespVO; import com.cf.imes.module.executor.controller.admin.plate.vo.PlateRespVO; +import com.cf.imes.module.executor.dal.dataobject.orderItem.OrderBodyViewPlatesPageDO; import com.cf.imes.module.executor.dal.dataobject.orderItem.OrderItemDO; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -186,4 +187,19 @@ public interface OrderItemMapper extends BaseMapperX { List selectOrderPackPlateIds(@Param("orderId") Long orderId,@Param("organId") Long organId); + /** + * 分页查询柜体板件视图数据 + * + * @param page + * @param orderId + * @param roomId + * @param bodyId + * @return + */ + IPage selectBodyViewPlatesPage(@Param("page") IPage page, + @Param("orderId") Long orderId, + @Param("roomId") Long roomId, + @Param("bodyId") Long bodyId, + @Param("organId") Long organId, + @Param("cadView") boolean cadView); } \ 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/service/plate/PlateService.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/plate/PlateService.java index cc5ef3671..9ceda7dfe 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/plate/PlateService.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/plate/PlateService.java @@ -2,6 +2,7 @@ package com.cf.imes.module.executor.service.plate; import com.cf.imes.framework.common.pojo.PageResult; import com.cf.imes.module.executor.controller.admin.goods.vo.GoodsSaveReqVO; +import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderBodyViewPlatePageReqVO; import com.cf.imes.module.executor.controller.admin.plan.vo.PlateResList; import com.cf.imes.module.executor.controller.admin.plate.vo.*; import com.cf.imes.module.executor.dal.dataobject.plate.PlateDO; @@ -94,4 +95,19 @@ public interface PlateService { List createNewPlate(List reqVO); + /** + * 获取柜体板件视图分页列表 + * + * @param orderBodyPageRespVO + * @return + */ + PageResult getBodyViewPlatesPage(OrderBodyViewPlatePageReqVO orderBodyPageRespVO); + + /** + * 根据板件id获取柜体下的所有板件cad视图所需信息 + * + * @param plateId + * @return + */ + List getBodyViewPlatesCadInfo(Long plateId); } \ 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/service/plate/PlateServiceImpl.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/plate/PlateServiceImpl.java index 4b15ac007..478b4fc89 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/plate/PlateServiceImpl.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/plate/PlateServiceImpl.java @@ -1,5 +1,6 @@ package com.cf.imes.module.executor.service.plate; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import co.elastic.clients.elasticsearch.ElasticsearchClient; @@ -14,6 +15,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; import com.cf.imes.framework.common.enums.*; import com.cf.imes.framework.common.exception.ServiceException; +import com.cf.imes.framework.common.pojo.PageParam; import com.cf.imes.framework.common.pojo.PageResult; import com.cf.imes.framework.common.util.Assert.AssertUtils; import com.cf.imes.framework.common.util.object.BeanUtils; @@ -21,6 +23,7 @@ import com.cf.imes.framework.id.core.util.SnowflakeIdWorker3rd; import com.cf.imes.framework.mybatis.core.query.MPJLambdaWrapperX; import com.cf.imes.framework.mybatis.core.query.QueryWrapperX; import com.cf.imes.module.executor.controller.admin.goods.vo.GoodsSaveReqVO; +import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderBodyViewPlatePageReqVO; import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderPlanPlateNumAndAreaRespVO; import com.cf.imes.module.executor.controller.admin.plan.vo.OrderGoodsResp; import com.cf.imes.module.executor.controller.admin.plan.vo.PlateResList; @@ -28,6 +31,7 @@ import com.cf.imes.module.executor.controller.admin.plate.vo.*; import com.cf.imes.module.executor.dal.dataobject.goods.GoodsDO; import com.cf.imes.module.executor.dal.dataobject.order.OrderDO; import com.cf.imes.module.executor.dal.dataobject.orderBody.OrderBodyDO; +import com.cf.imes.module.executor.dal.dataobject.orderItem.OrderBodyViewPlatesPageDO; import com.cf.imes.module.executor.dal.dataobject.orderItem.OrderItemDO; import com.cf.imes.module.executor.dal.dataobject.ordermodel.OrderModelDO; import com.cf.imes.module.executor.dal.dataobject.plan.PlanDO; @@ -136,28 +140,28 @@ public class PlateServiceImpl implements PlateService { @Transactional(rollbackFor = Exception.class) public void deletePlate(List plateIds, Long planId) { - if(CollUtil.isEmpty(plateIds)){ + if (CollUtil.isEmpty(plateIds)) { return; } PlanDO planDO = planMapper.selectById(planId); - AssertUtils.notEmpty(planDO,ORDER_PLAN_DATE_ERROR); + AssertUtils.notEmpty(planDO, ORDER_PLAN_DATE_ERROR); List plateDOS = plateMapper.selectBatchIds(plateIds); - AssertUtils.notEmpty(plateDOS,REMAIN_PLATE_NOT_EXISTS); + AssertUtils.notEmpty(plateDOS, REMAIN_PLATE_NOT_EXISTS); for (PlateDO plateDO : plateDOS) { - if(!plateDO.getType().equals(OrderPlateTypeEnum.SELFINCREASINGBOARD.getType())){ - throw new ServiceException(PLATE_IS_SOURCE,plateDO.getPlateNo()); + if (!plateDO.getType().equals(OrderPlateTypeEnum.SELFINCREASINGBOARD.getType())) { + throw new ServiceException(PLATE_IS_SOURCE, plateDO.getPlateNo()); } - if(!plateDO.getIsCutted().equals(OrderPlateCutStatusEnum.NOCUTTING.getStatus())){ + if (!plateDO.getIsCutted().equals(OrderPlateCutStatusEnum.NOCUTTING.getStatus())) { - throw new ServiceException(THIS_PLATE_IS_OPTIMIZE,plateDO.getPlateNo()); + throw new ServiceException(THIS_PLATE_IS_OPTIMIZE, plateDO.getPlateNo()); } } @@ -175,7 +179,7 @@ public class PlateServiceImpl implements PlateService { List orderBodyDOS = orderBodyMapper.selectBatchIds(bodyIds); - orderBodyDOS.forEach(f->{ + orderBodyDOS.forEach(f -> { int plateNum = orderItemDOS.stream().filter(o -> f.getId().equals(o.getBodyId())).toList().size(); f.setPlateNum(f.getPlateNum() - plateNum); @@ -191,7 +195,7 @@ public class PlateServiceImpl implements PlateService { // 删除添加自增板时新增的大板ID List orderGoodsIdList = goodsMapper.selectInsertGoodsIds(orderIds, goodsIds, getUserOrganId()); - if(CollUtil.isNotEmpty(orderGoodsIdList)){ + if (CollUtil.isNotEmpty(orderGoodsIdList)) { goodsMapper.deleteBatchIds(orderGoodsIdList); } @@ -301,8 +305,6 @@ public class PlateServiceImpl implements PlateService { } - - @Override public PageResult getPlatePage(PlatePageReqVO pageReqVO) { return plateMapper.selectPage(pageReqVO); @@ -317,8 +319,6 @@ public class PlateServiceImpl implements PlateService { } - - @Override public PageResult getOrderPlatePage(NoPlanPlatePageReqVO pageReqVO) { @@ -331,14 +331,14 @@ public class PlateServiceImpl implements PlateService { QueryWrapperX queryWrapperX = new QueryWrapperX<>(); queryWrapperX - .eq("o.organ_id",organId) - .eq("o.deleted",false) - .in("o.status",statusList) + .eq("o.organ_id", organId) + .eq("o.deleted", false) + .in("o.status", statusList) .isNotNull("op.id") - .eq("op.deleted",false); + .eq("op.deleted", false); - if(pageReqVO.getPlanId() != null){ + if (pageReqVO.getPlanId() != null) { Long planId = pageReqVO.getPlanId(); @@ -348,7 +348,7 @@ public class PlateServiceImpl implements PlateService { List goodsRespVOS = planMapper.selectPlanGoodsList(planId, organId); - AssertUtils.notEmpty(goodsRespVOS,PLAN_NOT_EXISTS); + AssertUtils.notEmpty(goodsRespVOS, PLAN_NOT_EXISTS); List material = goodsRespVOS.stream().map(OrderGoodsResp::getMaterial).distinct().toList(); @@ -362,7 +362,7 @@ public class PlateServiceImpl implements PlateService { // 混单 - if(planDO.getType().equals(PlanTypeEnum.MIXEDORDERPLAN.getType())){ + if (planDO.getType().equals(PlanTypeEnum.MIXEDORDERPLAN.getType())) { // 混单添加查询条件 mixedInsertQuery(pageReqVO, planDO, material, thickness, queryWrapperX); @@ -381,37 +381,37 @@ public class PlateServiceImpl implements PlateService { else { queryWrapperX - .likeIfPresent(FIELD_OG_MATERIAL,pageReqVO.getMaterial()) - .likeIfPresent(FIELD_OG_BRAND,pageReqVO.getBrand()) - .likeIfPresent(FIELD_OG_COLOR,pageReqVO.getColor()) - .eqIfPresent(FIELD_OP_THICKNESS,pageReqVO.getThickness()); + .likeIfPresent(FIELD_OG_MATERIAL, pageReqVO.getMaterial()) + .likeIfPresent(FIELD_OG_BRAND, pageReqVO.getBrand()) + .likeIfPresent(FIELD_OG_COLOR, pageReqVO.getColor()) + .eqIfPresent(FIELD_OP_THICKNESS, pageReqVO.getThickness()); } queryWrapperX - .inIfPresent("op.goods_id",pageReqVO.getGoodsIdList()) + .inIfPresent("op.goods_id", pageReqVO.getGoodsIdList()) .likeIfPresent("o.id", pageReqVO.getOrderId() != null ? pageReqVO.getOrderId() : null) - .likeIfPresent("op.id",pageReqVO.getPlateId()) - .likeIfPresent("op.name",pageReqVO.getPlateName()) - .likeIfPresent("op.plate_no",pageReqVO.getPlateNo()) - .likeIfPresent("op.custom_plate_no",pageReqVO.getCustomPlateNo()) + .likeIfPresent("op.id", pageReqVO.getPlateId()) + .likeIfPresent("op.name", pageReqVO.getPlateName()) + .likeIfPresent("op.plate_no", pageReqVO.getPlateNo()) + .likeIfPresent("op.custom_plate_no", pageReqVO.getCustomPlateNo()) .betweenIfPresent("op.height", new BigDecimal[]{pageReqVO.getLongMinRang(), pageReqVO.getLongMaxRang()}) .betweenIfPresent("op.width", new BigDecimal[]{pageReqVO.getWidthMinRang(), pageReqVO.getWidthMaxRang()}) .betweenIfPresent(FIELD_OP_THICKNESS, new BigDecimal[]{pageReqVO.getThicknessMinRang(), pageReqVO.getThicknessMaxRang()}) - .eqIfPresent("op.texture",pageReqVO.getTexture()) - .eqIfPresent("op.is_special_shaped",pageReqVO.getIsSpecialShaped()) - .eqIfPresent("op.is_sculpt",pageReqVO.getIsSculpt()) - .eqIfPresent("op.is_row_hole",pageReqVO.getIsRowHole()) - .likeIfPresent("op.remark",pageReqVO.getRemark()) + .eqIfPresent("op.texture", pageReqVO.getTexture()) + .eqIfPresent("op.is_special_shaped", pageReqVO.getIsSpecialShaped()) + .eqIfPresent("op.is_sculpt", pageReqVO.getIsSculpt()) + .eqIfPresent("op.is_row_hole", pageReqVO.getIsRowHole()) + .likeIfPresent("op.remark", pageReqVO.getRemark()) .orderByDesc("o.id, op.id"); Integer pageNo = (pageReqVO.getPageNo() - 1) * pageReqVO.getPageSize(); - List plateResLists = orderMapper.selectNoPlanOrderPlateList(queryWrapperX,pageNo,pageReqVO.getPageSize(),organId); + List plateResLists = orderMapper.selectNoPlanOrderPlateList(queryWrapperX, pageNo, pageReqVO.getPageSize(), organId); - if(CollUtil.isEmpty(plateResLists)){ + if (CollUtil.isEmpty(plateResLists)) { return new PageResult<>(); @@ -420,7 +420,7 @@ public class PlateServiceImpl implements PlateService { queryWrapperX .groupBy("o.id"); - List plateCount = orderMapper.selectNoPlanOrderPlateCount(queryWrapperX,organId); + List plateCount = orderMapper.selectNoPlanOrderPlateCount(queryWrapperX, organId); long sum = plateCount.stream().mapToLong(Long::longValue).sum(); @@ -465,7 +465,7 @@ public class PlateServiceImpl implements PlateService { @Override public PageResult getPlatePageByTerms(PlateTermsPageReqVO pageReqVO) { PageDTO page = new PageDTO<>(pageReqVO.getPageNo(), pageReqVO.getPageSize()); - IPage pageRes = plateMapper.selectProductList(page, pageReqVO.getOrderId(), pageReqVO.getRoomId(), pageReqVO.getBodyId(),getUserOrganId()); + IPage pageRes = plateMapper.selectProductList(page, pageReqVO.getOrderId(), pageReqVO.getRoomId(), pageReqVO.getBodyId(), getUserOrganId()); return new PageResult(pageRes.getRecords(), pageRes.getTotal()); } @@ -487,11 +487,11 @@ public class PlateServiceImpl implements PlateService { @SneakyThrows @Override - public List getPlateModelByPlateId(List bodyIds) { + public List getPlateModelByPlateId(List bodyIds) { List list = plateMapper.selectJoinList(BodyPlateIdDTO.class, new MPJLambdaWrapperX() .selectAs(PlateDO::getId, FIELD_PLATE_ID) .leftJoin(OrderItemDO.class, OrderItemDO::getPlateId, PlateDO::getId) - .eq(OrderItemDO::getOrganId,getUserOrganId()) + .eq(OrderItemDO::getOrganId, getUserOrganId()) .in(OrderItemDO::getBodyId, bodyIds) .select(OrderItemDO::getBodyId) ); @@ -503,18 +503,17 @@ public class PlateServiceImpl implements PlateService { List bodyPlateDetailVOS = new ArrayList<>(); List>> data = new ArrayList<>(); - map.entrySet().forEach(e->{ - bodyPlateDetailVOS.add(BodyPlateDetailVO.builder() - .orderModelList(e.getValue()) - .bodyId(e.getKey()) - .build() - ); + map.entrySet().forEach(e -> { + bodyPlateDetailVOS.add(BodyPlateDetailVO.builder() + .orderModelList(e.getValue()) + .bodyId(e.getKey()) + .build() + ); }); return bodyPlateDetailVOS; } - @Override @Transactional(rollbackFor = Exception.class) public List createNewPlate(List reqVO) { @@ -529,15 +528,15 @@ public class PlateServiceImpl implements PlateService { List orderPlateModelDOS = new ArrayList<>(); - Long planId = Optional.ofNullable(reqVO.get(0).getPlanId()).orElseThrow(()-> new ServiceException(ORDER_PLAN_PLATE_ERROR)); + Long planId = Optional.ofNullable(reqVO.get(0).getPlanId()).orElseThrow(() -> new ServiceException(ORDER_PLAN_PLATE_ERROR)); PlanDO planDO = planMapper.selectById(planId); - AssertUtils.notEmpty(planDO,ORDER_PLAN_DATE_ERROR); + AssertUtils.notEmpty(planDO, ORDER_PLAN_DATE_ERROR); List orderIds = reqVO.stream().map(OptimizationSavePlateReqVO::getOrderId).distinct().toList(); // 查询排单下的orderGoodsId列表 - List goodsId = planMapper.selectPlanOrderGoodsId(planId,orderIds, getUserOrganId()); + List goodsId = planMapper.selectPlanOrderGoodsId(planId, orderIds, getUserOrganId()); List goodsDOS = goodsMapper.selectBatchIds(goodsId); @@ -546,9 +545,9 @@ public class PlateServiceImpl implements PlateService { Map orderGoodsPlanPlateNumAndAreaRespVOMap = new HashMap<>(); // 组装新增数据 - reqVO.forEach(f->{ + reqVO.forEach(f -> { - Map plateIdAndNo = new HashMap<>(); + Map plateIdAndNo = new HashMap<>(); Long orderId = f.getOrderId(); @@ -571,7 +570,7 @@ public class PlateServiceImpl implements PlateService { // 小板ID Long plateId = (Long) identifierGenerator.nextId(null); - plateIdAndNo.put(plateId.toString(),plateNo); + plateIdAndNo.put(plateId.toString(), plateNo); // 计算面积 BigDecimal area = f.getWidth().multiply(f.getHeight()).movePointLeft(6).stripTrailingZeros(); @@ -644,7 +643,7 @@ public class PlateServiceImpl implements PlateService { List orderBodyDOS = orderBodyMapper.selectBatchIds(bodyIds); - orderBodyDOS.forEach(f->{ + orderBodyDOS.forEach(f -> { Integer plateNum = numVOS.stream() .filter(n -> n.getBodyId().equals(f.getId())) @@ -724,7 +723,6 @@ public class PlateServiceImpl implements PlateService { } - public static List mergeOrderBody(List dataList) { if (dataList == null || dataList.isEmpty()) { return Collections.emptyList(); @@ -744,16 +742,12 @@ public class PlateServiceImpl implements PlateService { } - - - - private List buildRespByPlateIds(Collection plateIds, String index) { List fieldValues = plateIds.stream().map(FieldValue::of).toList(); SearchRequest.Builder builder = new SearchRequest.Builder(); builder.index(index); - builder.query(q -> q.terms(b -> b.field(FIELD_PLATE_ID).terms(e->e.value(fieldValues)))); + builder.query(q -> q.terms(b -> b.field(FIELD_PLATE_ID).terms(e -> e.value(fieldValues)))); builder.size(plateIds.size()); try { SearchResponse search = elasticsearchClient.search(builder.build(), OrderModelDO.class); @@ -776,29 +770,28 @@ public class PlateServiceImpl implements PlateService { QueryWrapperX queryWrapperX) { - - if(Boolean.TRUE.equals(pageReqVO.getIsMixed())){ + if (Boolean.TRUE.equals(pageReqVO.getIsMixed())) { throw new ServiceException(PLAN_IS_MIXED_ERROR); } // 相同材质和厚度 - if(planDO.getFilter().equals(MixConfigTypeEnum.SAMEMATERIALANDTHICKNESS.getType())){ + if (planDO.getFilter().equals(MixConfigTypeEnum.SAMEMATERIALANDTHICKNESS.getType())) { queryWrapperX - .inIfPresent(FIELD_OG_MATERIAL,material) - .likeIfPresent(FIELD_OG_BRAND,pageReqVO.getBrand()) - .likeIfPresent(FIELD_OG_COLOR,pageReqVO.getColor()) - .inIfPresent(FIELD_OP_THICKNESS,thickness); + .inIfPresent(FIELD_OG_MATERIAL, material) + .likeIfPresent(FIELD_OG_BRAND, pageReqVO.getBrand()) + .likeIfPresent(FIELD_OG_COLOR, pageReqVO.getColor()) + .inIfPresent(FIELD_OP_THICKNESS, thickness); } // 相同厚度 else { queryWrapperX - .likeIfPresent(FIELD_OG_MATERIAL,pageReqVO.getMaterial()) - .likeIfPresent(FIELD_OG_BRAND,pageReqVO.getBrand()) - .likeIfPresent(FIELD_OG_COLOR,pageReqVO.getColor()) - .inIfPresent(FIELD_OP_THICKNESS,thickness); + .likeIfPresent(FIELD_OG_MATERIAL, pageReqVO.getMaterial()) + .likeIfPresent(FIELD_OG_BRAND, pageReqVO.getBrand()) + .likeIfPresent(FIELD_OG_COLOR, pageReqVO.getColor()) + .inIfPresent(FIELD_OP_THICKNESS, thickness); } @@ -816,14 +809,14 @@ public class PlateServiceImpl implements PlateService { QueryWrapperX queryWrapperX) { // 是否开启混单 - if(Boolean.TRUE.equals(pageReqVO.getIsMixed())){ + if (Boolean.TRUE.equals(pageReqVO.getIsMixed())) { - if(!planDO.getStatus().equals(PlanStatusEnum.NOCUTTING.getStatus())){ + if (!planDO.getStatus().equals(PlanStatusEnum.NOCUTTING.getStatus())) { throw new ServiceException(PLAN_PLATE_IS_CUTTING); } // 相同材质和厚度 混单 - if(pageReqVO.getMixedType().equals(MixConfigTypeEnum.SAMEMATERIALANDTHICKNESS.getType())){ + if (pageReqVO.getMixedType().equals(MixConfigTypeEnum.SAMEMATERIALANDTHICKNESS.getType())) { queryWrapperX .inIfPresent(FIELD_OG_MATERIAL, material) .likeIfPresent(FIELD_OG_BRAND, pageReqVO.getBrand()) @@ -832,7 +825,7 @@ public class PlateServiceImpl implements PlateService { } // 相同厚度 混单 - else{ + else { queryWrapperX .likeIfPresent(FIELD_OG_MATERIAL, pageReqVO.getMaterial()) .likeIfPresent(FIELD_OG_BRAND, pageReqVO.getBrand()) @@ -840,7 +833,7 @@ public class PlateServiceImpl implements PlateService { .inIfPresent(FIELD_OP_THICKNESS, thickness); } - }else { + } else { queryWrapperX .inIfPresent(FIELD_OG_MATERIAL, material) .inIfPresent(FIELD_OG_BRAND, brand) @@ -852,5 +845,53 @@ public class PlateServiceImpl implements PlateService { } + @Override + public PageResult getBodyViewPlatesPage(OrderBodyViewPlatePageReqVO pageReqVO) { + PageDTO page = new PageDTO<>(pageReqVO.getPageNo(), pageReqVO.getPageSize()); + IPage pageRes = orderItemMapper.selectBodyViewPlatesPage(page, pageReqVO.getOrderId(), pageReqVO.getRoomId(), pageReqVO.getBodyId(), getUserOrganId(), false); + return new PageResult(BeanUtil.copyToList(pageRes.getRecords(), OrderBodyViewPlatePageRespVO.class), pageRes.getTotal()); + } + @Override + public List getBodyViewPlatesCadInfo(Long plateId) { + // 匹配板材 + PlateDO plateDO = plateMapper.selectById(plateId); + if (ObjectUtil.isNull(plateDO)) { + throw new ServiceException(PLATE_NOT_EXISTS); + } + + // 匹配orderItem + OrderItemDO orderItemDO = orderItemMapper.selectOne(new LambdaUpdateWrapper() + .eq(OrderItemDO::getPlateId, plateId) + .eq(OrderItemDO::getOrderId, plateDO.getOrderId()) + .eq(OrderItemDO::getOrganId, plateDO.getOrganId())); + if (ObjectUtil.isNull(orderItemDO)) { + throw new ServiceException(PLATE_NOT_EXISTS); + } + + // 匹配柜体 + OrderBodyDO orderBodyDO = orderBodyMapper.selectById(orderItemDO.getBodyId()); + if (ObjectUtil.isNull(orderBodyDO)) { + throw new ServiceException(ORDER_BODY_NOT_EXISTS); + } + + Long cadViewFileId = orderBodyDO.getCadViewFileId(); + + // 查询所有板件的视图所需信息 + PageDTO page = new PageDTO<>(1, PageParam.PAGE_SIZE_NONE); + IPage viewPlatesPage = orderItemMapper.selectBodyViewPlatesPage(page, orderItemDO.getOrderId(), orderItemDO.getRoomId(), orderItemDO.getBodyId(), orderItemDO.getOrganId(), true); + List records = viewPlatesPage.getRecords(); + + List resultList = new ArrayList<>(); + if (CollUtil.isNotEmpty(records)) { + resultList = records.stream().map(item -> { + OrderBodyViewPlatePageRespVO vo = new OrderBodyViewPlatePageRespVO(); + BeanUtil.copyProperties(item, vo); + + vo.setCadViewFileId(cadViewFileId); + return vo; + }).collect(Collectors.toList()); + } + return resultList; + } } \ No newline at end of file diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/orderItem/OrderItemMapper.xml b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/orderItem/OrderItemMapper.xml index a2e5c56d8..625c58c6d 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/orderItem/OrderItemMapper.xml +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/orderItem/OrderItemMapper.xml @@ -533,4 +533,21 @@ and plate_id !=0 + + \ No newline at end of file diff --git a/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/controller/admin/orderimport/webcad/vo/WebCadDataReqVO.java b/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/controller/admin/orderimport/webcad/vo/WebCadDataReqVO.java index d536d3396..4869efe68 100644 --- a/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/controller/admin/orderimport/webcad/vo/WebCadDataReqVO.java +++ b/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/controller/admin/orderimport/webcad/vo/WebCadDataReqVO.java @@ -18,6 +18,9 @@ public class WebCadDataReqVO { @JsonProperty(value = "OrderNo") private String orderNo; + @JsonProperty(value = "CadViewFileId") + private Long cadViewFileId; + @JsonProperty(value = "Materials") private List Materials; @@ -33,6 +36,4 @@ public class WebCadDataReqVO { @JsonProperty(value = "Blocks") private List blocks; - - private String cadViewPath; } diff --git a/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/dal/dataobject/order/OrderDO.java b/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/dal/dataobject/order/OrderDO.java index 56e760472..eab5c3247 100644 --- a/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/dal/dataobject/order/OrderDO.java +++ b/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/dal/dataobject/order/OrderDO.java @@ -157,9 +157,4 @@ public class OrderDO extends BaseDO { * 版本号:乐观锁用 */ private int version; - - /** - * cad图纸路径 - */ - private String cadViewPath; } diff --git a/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/dal/dataobject/plate/PlateDO.java b/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/dal/dataobject/plate/PlateDO.java index 24a3c3d26..9f8c41510 100644 --- a/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/dal/dataobject/plate/PlateDO.java +++ b/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/dal/dataobject/plate/PlateDO.java @@ -301,4 +301,9 @@ public class PlateDO extends BaseDO { * cad图纸数据 */ private String cadData; + + /** + * cad自定义板编号 + */ + private String cadPlateNo; } \ No newline at end of file diff --git a/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/framework/rpc/config/RpcConfiguration.java b/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/framework/rpc/config/RpcConfiguration.java index cddce19c3..8d7321069 100644 --- a/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/framework/rpc/config/RpcConfiguration.java +++ b/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/framework/rpc/config/RpcConfiguration.java @@ -1,5 +1,6 @@ package com.cf.imes.module.plan.framework.rpc.config; +import com.cf.imes.module.infra.api.file.FileApi; import com.cf.imes.module.system.api.customplateno.CustomPlateNoSeqApi; import com.cf.imes.module.system.api.dict.DictDataApi; import com.cf.imes.module.system.api.systemconfig.SystemConfigApi; @@ -11,6 +12,6 @@ import org.springframework.context.annotation.Configuration; * @author there */ @Configuration(proxyBeanMethods = false) -@EnableFeignClients(clients = {AdminUserApi.class, DictDataApi.class, SystemConfigApi.class, CustomPlateNoSeqApi.class,}) +@EnableFeignClients(clients = {AdminUserApi.class, DictDataApi.class, SystemConfigApi.class, CustomPlateNoSeqApi.class, FileApi.class}) public class RpcConfiguration { } diff --git a/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/service/orderImport/WebCadOrderImportServiceImpl.java b/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/service/orderImport/WebCadOrderImportServiceImpl.java index eefdb2b0a..3b5e99188 100644 --- a/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/service/orderImport/WebCadOrderImportServiceImpl.java +++ b/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/service/orderImport/WebCadOrderImportServiceImpl.java @@ -21,6 +21,7 @@ import com.cf.imes.module.executor.enums.OrderImportStatusEnum; import com.cf.imes.module.executor.enums.OrderImportTaskStatusEnum; import com.cf.imes.module.executor.enums.OrderImportTypeEnum; import com.cf.imes.module.executor.enums.OrderStatusEnum; +import com.cf.imes.module.infra.api.file.FileApi; import com.cf.imes.module.plan.controller.admin.orderimport.webcad.vo.WebCadDataReqVO; import com.cf.imes.module.plan.dal.dataobject.order.OrderDO; import com.cf.imes.module.plan.dal.dataobject.orderImport.OrderImportTaskDO; @@ -118,6 +119,9 @@ public class WebCadOrderImportServiceImpl implements WebCadOrderImportService { @Resource private RabbitTemplate rabbitTemplate; + @Resource + private FileApi fileApi; + private static final String REDIS_UNIQUEKEY = "webcad"; @Resource @@ -134,6 +138,8 @@ public class WebCadOrderImportServiceImpl implements WebCadOrderImportService { Long taskId = null; OrderDO orderDO = null; JsonFactory factory = new JsonFactory(); + + Long cadViewFileId = null; try (GZIPInputStream gzipInputStream = new GZIPInputStream(file.getInputStream()); JsonParser parser = factory.createParser(gzipInputStream)) { factory.disable(JsonParser.Feature.AUTO_CLOSE_SOURCE); @@ -165,6 +171,9 @@ public class WebCadOrderImportServiceImpl implements WebCadOrderImportService { WebCadDataReqVO webCadDataReqVO = mapper.readValue(parser, WebCadDataReqVO.class); WebCadOrderImportFactory webCadOrderImportFactory = new WebCadOrderImportFactory(organId, orderDO, snowFlakeGenerator, orderMapper, orderBodyMapper, plateMapper, idWorker, orderInputProcessor, goodsMapper, rawGoodsMapper, customPlateNoGenerateService, systemConfigApi, webCadImportProperties.getCadImportPlateNumThreshold(), jdbcTemplate); + + // cad图纸文件id + cadViewFileId = webCadDataReqVO.getCadViewFileId(); webCadOrderImportFactory.analyzeTempData(webCadDataReqVO); } else { sync = false; @@ -190,11 +199,15 @@ public class WebCadOrderImportServiceImpl implements WebCadOrderImportService { } } } catch (ServiceException se) { + // 删除cad图纸数据 + removeCadFileWhenException(cadViewFileId); // 移除临时文件 removeCacheFileWhenException(sync, taskId); throw se; } catch (Exception e) { + // 删除cad图纸数据 + removeCadFileWhenException(cadViewFileId); // 移除临时文件 removeCacheFileWhenException(sync, taskId); @@ -333,4 +346,19 @@ public class WebCadOrderImportServiceImpl implements WebCadOrderImportService { } } } + + /** + * 删除cad图纸文件数据 + * + * @param cadViewFileId + */ + private void removeCadFileWhenException(Long cadViewFileId) { + try { + if (ObjectUtil.isNotNull(cadViewFileId)) { + fileApi.deleteFileById(cadViewFileId); + } + } catch (IORuntimeException e) { + log.error("删除cad图纸数据文件失败: {}", cadViewFileId, e); + } + } } diff --git a/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/service/orderImport/consumer/WebCadOrderImportConsumer.java b/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/service/orderImport/consumer/WebCadOrderImportConsumer.java index 003e125fd..aa22d0a3f 100644 --- a/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/service/orderImport/consumer/WebCadOrderImportConsumer.java +++ b/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/service/orderImport/consumer/WebCadOrderImportConsumer.java @@ -5,17 +5,16 @@ import com.baomidou.dynamic.datasource.annotation.DS; import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder; import com.cf.imes.framework.common.exception.ServiceException; import com.cf.imes.framework.id.core.util.SnowflakeIdWorker3rd; -import com.cf.imes.framework.mq.rabbitmq.constant.RabbitMqConstants; import com.cf.imes.framework.mybatis.core.generator.SnowFlakeGenerator; import com.cf.imes.framework.organ.core.context.OrganContextHolder; import com.cf.imes.framework.redis.config.ChenfengCacheProperties; import com.cf.imes.framework.redis.constants.RedisKeyConstants; import com.cf.imes.framework.redis.util.RedisLockUtil; +import com.cf.imes.module.infra.api.file.FileApi; import com.cf.imes.module.plan.dal.dataobject.orderImport.OrderImportTaskDO; import com.cf.imes.module.plan.dal.mysql.goods.GoodsMapper; import com.cf.imes.module.plan.dal.mysql.order.OrderMapper; import com.cf.imes.module.plan.dal.mysql.orderBody.OrderBodyMapper; -import com.cf.imes.module.plan.dal.mysql.orderGroup.OrderGroupMapper; import com.cf.imes.module.plan.dal.mysql.orderImport.OrderImportTaskMapper; import com.cf.imes.module.plan.dal.mysql.plate.PlateMapper; import com.cf.imes.module.plan.dal.mysql.rawgoods.RawGoodsMapper; @@ -65,9 +64,6 @@ public class WebCadOrderImportConsumer { @Resource private PlateMapper plateMapper; - @Resource - private OrderGroupMapper orderGroupMapper; - @Resource private SnowflakeIdWorker3rd idWorker; @@ -107,6 +103,9 @@ public class WebCadOrderImportConsumer { @Resource private ChenfengCacheProperties chenfengCacheProperties; + @Resource + private FileApi fileApi; + @RabbitListener(queues = "#{@orderImportWebCadQueueName}") @DS("imes_prod") @Transactional(rollbackFor = Exception.class) @@ -150,8 +149,9 @@ public class WebCadOrderImportConsumer { log.info("====================【webcad异步拆单处理临时数据开始】===================="); WebCadOrderImportAsyncFactory webCadOrderImportAsyncFactory = - new WebCadOrderImportAsyncFactory(organId, orderMapper, snowFlakeGenerator, orderBodyMapper, plateMapper, orderGroupMapper, idWorker, - orderImportTaskMapper, orderInputProcessor, goodsMapper, rawGoodsMapper, customPlateNoGenerateService, systemConfigApi, orderImportTaskDO.getCreator(), cadImportPlateNumThreshold, jdbcTemplate); + new WebCadOrderImportAsyncFactory(organId, orderMapper, snowFlakeGenerator, orderBodyMapper, plateMapper, idWorker, + orderImportTaskMapper, orderInputProcessor, goodsMapper, rawGoodsMapper, customPlateNoGenerateService, systemConfigApi, orderImportTaskDO.getCreator(), + cadImportPlateNumThreshold, jdbcTemplate, fileApi); webCadOrderImportAsyncFactory.analyzeTempData(taskId, webCadImportProperties.getTempFilePath()); log.info("====================【webcad异步拆单处理临时数据结束】===================="); diff --git a/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/service/orderImport/factory/WebCadOrderImportAsyncFactory.java b/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/service/orderImport/factory/WebCadOrderImportAsyncFactory.java index e29bc9577..9b4a2f88a 100644 --- a/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/service/orderImport/factory/WebCadOrderImportAsyncFactory.java +++ b/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/service/orderImport/factory/WebCadOrderImportAsyncFactory.java @@ -1,6 +1,7 @@ package com.cf.imes.module.plan.service.orderImport.factory; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.io.IORuntimeException; import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.BooleanUtil; import cn.hutool.core.util.NumberUtil; @@ -23,6 +24,7 @@ import com.cf.imes.module.executor.enums.DataTypeEnum; import com.cf.imes.module.executor.enums.OrderImportStatusEnum; import com.cf.imes.module.executor.enums.OrderItemTypeEnum; import com.cf.imes.module.executor.enums.OrderStatusEnum; +import com.cf.imes.module.infra.api.file.FileApi; import com.cf.imes.module.plan.controller.admin.orderimport.webcad.vo.WebCadDataBlockRemarkVO; import com.cf.imes.module.plan.controller.admin.orderimport.webcad.vo.WebCadDataBlockReqVO; import com.cf.imes.module.plan.controller.admin.orderimport.webcad.vo.WebCadDataDoubleRoomTreeReqVO; @@ -51,7 +53,6 @@ import com.cf.imes.module.plan.dal.elasticsearch.PointList; import com.cf.imes.module.plan.dal.mysql.goods.GoodsMapper; import com.cf.imes.module.plan.dal.mysql.order.OrderMapper; import com.cf.imes.module.plan.dal.mysql.orderBody.OrderBodyMapper; -import com.cf.imes.module.plan.dal.mysql.orderGroup.OrderGroupMapper; import com.cf.imes.module.plan.dal.mysql.orderImport.OrderImportTaskMapper; import com.cf.imes.module.plan.dal.mysql.plate.PlateMapper; import com.cf.imes.module.plan.dal.mysql.rawgoods.RawGoodsMapper; @@ -113,8 +114,6 @@ public class WebCadOrderImportAsyncFactory { private PlateMapper plateMapper; - private OrderGroupMapper orderGroupMapper; - private SnowflakeIdWorker3rd idWorker; private OrderImportTaskMapper orderImportTaskMapper; @@ -131,6 +130,8 @@ public class WebCadOrderImportAsyncFactory { private JdbcTemplate jdbcTemplate; + private FileApi fileApi; + private Long organId; // 批次id @@ -202,15 +203,14 @@ public class WebCadOrderImportAsyncFactory { private String tempFilePath; - // cad图纸路径 - private String cadViewPath; + // cad图纸文件id + private Long cadViewFileId; public WebCadOrderImportAsyncFactory(Long organId, OrderMapper orderMapper, SnowFlakeGenerator snowFlakeGenerator, OrderBodyMapper orderBodyMapper, PlateMapper plateMapper, - OrderGroupMapper orderGroupMapper, SnowflakeIdWorker3rd idWorker, OrderImportTaskMapper orderImportTaskMapper, OrderInputProcessor orderInputProcessor, @@ -220,13 +220,13 @@ public class WebCadOrderImportAsyncFactory { SystemConfigApi systemConfigApi, String operatorName, int cadImportPlateNumThreshold, - JdbcTemplate jdbcTemplate) { + JdbcTemplate jdbcTemplate, + FileApi fileApi) { this.organId = organId; this.orderMapper = orderMapper; this.snowFlakeGenerator = snowFlakeGenerator; this.orderBodyMapper = orderBodyMapper; this.plateMapper = plateMapper; - this.orderGroupMapper = orderGroupMapper; this.idWorker = idWorker; this.orderImportTaskMapper = orderImportTaskMapper; this.orderInputProcessor = orderInputProcessor; @@ -240,6 +240,7 @@ public class WebCadOrderImportAsyncFactory { sealEdgeConfigList = new ArrayList<>(); this.cadImportPlateNumThreshold = cadImportPlateNumThreshold; this.jdbcTemplate = jdbcTemplate; + this.fileApi = fileApi; } public void analyzeTempData(Long taskId, String webcadJsonCachePath) throws FileNotFoundException { @@ -254,6 +255,9 @@ public class WebCadOrderImportAsyncFactory { performPostProcessing(taskId); } catch (Exception e) { + // 删除cad图纸数据 + removeCadFileWhenException(cadViewFileId); + handleProcessingException(e); throw e; } finally { @@ -272,9 +276,6 @@ public class WebCadOrderImportAsyncFactory { analyzeOrder(reader.readString()); log.debug("====================【cad拆单解析生产单结束】===================="); break; - case "cadViewPath": - cadViewPath = reader.readString(); - break; case "Materials": log.debug("====================【cad拆单解析板材开始】===================="); analyzeMaterials(reader); @@ -296,6 +297,9 @@ public class WebCadOrderImportAsyncFactory { case "Parts": processParts(reader); break; + case "CadViewFileId": + cadViewFileId = reader.readLong(); + break; default: // 跳过未知字段 reader.readObject(); @@ -434,7 +438,7 @@ public class WebCadOrderImportAsyncFactory { .eq("deleted", false)); if (CollUtil.isNotEmpty(orderPlateSumResult)) { Map resultMap = orderPlateSumResult.get(0); - if(ObjectUtil.isNotNull(resultMap)) { + if (ObjectUtil.isNotNull(resultMap)) { currentPlateArea = (BigDecimal) resultMap.get("area"); } } @@ -623,7 +627,7 @@ public class WebCadOrderImportAsyncFactory { reader.startObject(); String roomName = null; Long roomId = null; - + while (reader.hasNext()) { String key = reader.readString(); if ("name".equals(key)) { @@ -646,7 +650,7 @@ public class WebCadOrderImportAsyncFactory { if (existRoomId != null) { return existRoomId; } - + Long roomId = queryExistingRoomId(roomName); if (roomId == null) { roomId = (Long) snowFlakeGenerator.nextId(null); @@ -660,15 +664,15 @@ public class WebCadOrderImportAsyncFactory { */ private Long queryExistingRoomId(String roomName) { List existRoomIds = orderBodyMapper.selectList(new LambdaQueryWrapper() - .select(OrderBodyDO::getRoomId) - .eq(OrderBodyDO::getOrderId, orderId) - .eq(OrderBodyDO::getOrganId, organId) - .eq(OrderBodyDO::getDeleted, false) - .eq(OrderBodyDO::getRoomName, roomName)) + .select(OrderBodyDO::getRoomId) + .eq(OrderBodyDO::getOrderId, orderId) + .eq(OrderBodyDO::getOrganId, organId) + .eq(OrderBodyDO::getDeleted, false) + .eq(OrderBodyDO::getRoomName, roomName)) .stream() .map(OrderBodyDO::getRoomId) .toList(); - + return CollUtil.isNotEmpty(existRoomIds) ? existRoomIds.get(0) : null; } @@ -1390,11 +1394,10 @@ public class WebCadOrderImportAsyncFactory { // 配置不为空时,生成自定义板编号 if (ObjectUtil.isNotNull(plateNoGenerateConfigVO)) { customPlateNoGenerateService.generateCustomPlateNo(orderId, plateDO, plateNoGenerateConfigVO, isFirstPlate); - } else { - // 配置为空的时候,使用cad的板编号 - if (ObjectUtil.isNotNull(cadCustBlockNo)) { - plateDO.setCustomPlateNo(String.valueOf(cadCustBlockNo)); - } + } + // cad的板编号 + if (ObjectUtil.isNotNull(cadCustBlockNo)) { + plateDO.setCadPlateNo(String.valueOf(cadCustBlockNo)); } } @@ -1419,7 +1422,7 @@ public class WebCadOrderImportAsyncFactory { reader.startObject(); String roomName = null; Long roomId = null; - + while (reader.hasNext()) { String key = reader.readString(); if ("name".equals(key)) { @@ -1849,7 +1852,7 @@ public class WebCadOrderImportAsyncFactory { private void orderPlateBatchInsertWithinThreshold(List list, boolean isLast) { // 达到批量的阈值就做一次插入 if (CollUtil.isNotEmpty(list) && (list.size() >= BATCH_THRESHOLD_NUMBER || isLast)) { - String sql = "INSERT INTO order_plate (id,organ_id,order_id,name,plate_no,type,goods_id,width,height,thickness,split_width,split_height,split_thickness,seal_left,seal_right,seal_up,seal_down,area,texture,hole_face,hole_arrange,unregular_point_count,front_hole_count,back_hole_count,side_hole_count,front_model_count,back_model_count,is_door,open_door_type,offset_x,offset_y,is_arc_across,module_type_id,is_special_shaped,is_sculpt,is_side_sculpt,is_2v,is_side_2v,is_row_hole,is_optimized,is_cutted,filter_type,remark,is_cancel,deleted,custom_plate_no,create_time,update_time,creator,updater, cad_view_id, cad_data) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; + String sql = "INSERT INTO order_plate (id,organ_id,order_id,name,plate_no,type,goods_id,width,height,thickness,split_width,split_height,split_thickness,seal_left,seal_right,seal_up,seal_down,area,texture,hole_face,hole_arrange,unregular_point_count,front_hole_count,back_hole_count,side_hole_count,front_model_count,back_model_count,is_door,open_door_type,offset_x,offset_y,is_arc_across,module_type_id,is_special_shaped,is_sculpt,is_side_sculpt,is_2v,is_side_2v,is_row_hole,is_optimized,is_cutted,filter_type,remark,is_cancel,deleted,custom_plate_no,create_time,update_time,creator,updater, cad_view_id, cad_data, cad_plate_no) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() { @Override public void setValues(PreparedStatement ps, int index) throws SQLException { @@ -1922,8 +1925,8 @@ public class WebCadOrderImportAsyncFactory { } } - private void clearPlate(){ - plateDOS = ListUtils.newArrayListWithExpectedSize(BATCH_THRESHOLD_NUMBER); + private void clearPlate() { + plateDOS = ListUtils.newArrayListWithExpectedSize(BATCH_THRESHOLD_NUMBER); } private void orderItemBatchInsertWithinThreshold(List list, boolean isLast) { @@ -1966,8 +1969,8 @@ public class WebCadOrderImportAsyncFactory { } } - private void clearItem(){ - orderItemDOS = ListUtils.newArrayListWithExpectedSize(BATCH_THRESHOLD_NUMBER); + private void clearItem() { + orderItemDOS = ListUtils.newArrayListWithExpectedSize(BATCH_THRESHOLD_NUMBER); } private void orderPartBatchInsertWithinThreshold(List list, boolean isLast) { @@ -2021,8 +2024,8 @@ public class WebCadOrderImportAsyncFactory { } } - private void clearPart(){ - orderPartsDOS = ListUtils.newArrayListWithExpectedSize(BATCH_THRESHOLD_NUMBER); + private void clearPart() { + orderPartsDOS = ListUtils.newArrayListWithExpectedSize(BATCH_THRESHOLD_NUMBER); } /** @@ -2215,7 +2218,6 @@ public class WebCadOrderImportAsyncFactory { .eq(OrderDO::getVersion, version) .set(OrderDO::getPlateNum, currentPlateNum) .set(OrderDO::getArea, currentPlateArea) - .set(OrderDO::getCadViewPath, cadViewPath) .set(OrderDO::getVersion, version + 1)); if (updated == 0) { throw new ServiceException(ErrorCodeConstants.WEBCAD_ORDER_IMPORT_ORDER_UPDATE_CONCURRENCY_ERROR, orderId); @@ -2255,4 +2257,19 @@ public class WebCadOrderImportAsyncFactory { } } } + + /** + * 删除cad图纸文件数据 + * + * @param cadViewFileId + */ + private void removeCadFileWhenException(Long cadViewFileId) { + try { + if (ObjectUtil.isNotNull(cadViewFileId)) { + fileApi.deleteFileById(cadViewFileId); + } + } catch (IORuntimeException e) { + log.error("删除cad图纸数据文件失败: {}", cadViewFileId, e); + } + } } diff --git a/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/service/orderImport/factory/WebCadOrderImportFactory.java b/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/service/orderImport/factory/WebCadOrderImportFactory.java index 1a27d82ff..84fe90ad3 100644 --- a/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/service/orderImport/factory/WebCadOrderImportFactory.java +++ b/cf-module-prod-plan/cf-module-prod-plan-biz/src/main/java/com/cf/imes/module/plan/service/orderImport/factory/WebCadOrderImportFactory.java @@ -189,6 +189,9 @@ public class WebCadOrderImportFactory { // 板件数量是否已达到阈值 private boolean plateNumReachThreshold = false; + // cad图纸文件id + private Long cadViewFileId; + public WebCadOrderImportFactory(Long organId, OrderDO orderDO, SnowFlakeGenerator snowFlakeGenerator, @@ -258,7 +261,9 @@ public class WebCadOrderImportFactory { orderItemBatchInsertWithinThreshold(orderItemDOS, true); log.debug("====================【cad拆单全局保存开始】===================="); + // 保存数据柜体、加工组 + cadViewFileId = webCadDataReqVO.getCadViewFileId(); saveData(); log.debug("====================【cad拆单全局保存结束】===================="); @@ -266,7 +271,7 @@ public class WebCadOrderImportFactory { insertOrUpdatePlateNumGoods(); // 更新生产单板件数量 - updateOrderPlateNum(webCadDataReqVO.getCadViewPath()); + updateOrderPlateNum(); // 所有自定义板编号生成完成后更新配置到生产单 customPlateNoGenerateService.updateCustomPlateNoGenerateConfig(plateNoGenerateConfigVO, orderDO); @@ -1158,11 +1163,10 @@ public class WebCadOrderImportFactory { // 配置不为空时,生成自定义板编号 if (ObjectUtil.isNotNull(plateNoGenerateConfigVO)) { customPlateNoGenerateService.generateCustomPlateNo(orderId, plateDO, plateNoGenerateConfigVO, isFirstPlate); - } else { - // 配置为空的时候,使用cad的板编号 - if (ObjectUtil.isNotNull(cadCustBlockNo)) { - plateDO.setCustomPlateNo(String.valueOf(cadCustBlockNo)); - } + } + // cad的板编号 + if (ObjectUtil.isNotNull(cadCustBlockNo)) { + plateDO.setCadPlateNo(String.valueOf(cadCustBlockNo)); } } @@ -1700,7 +1704,7 @@ public class WebCadOrderImportFactory { private void orderPlateBatchInsertWithinThreshold(List list, boolean isLast) { // 达到批量的阈值就做一次插入 if (CollUtil.isNotEmpty(list) && (list.size() >= BATCH_THRESHOLD_NUMBER || isLast)) { - String sql = "INSERT INTO order_plate (id,organ_id,order_id,name,plate_no,type,goods_id,width,height,thickness,split_width,split_height,split_thickness,seal_left,seal_right,seal_up,seal_down,area,texture,hole_face,hole_arrange,unregular_point_count,front_hole_count,back_hole_count,side_hole_count,front_model_count,back_model_count,is_door,open_door_type,offset_x,offset_y,is_arc_across,module_type_id,is_special_shaped,is_sculpt,is_side_sculpt,is_2v,is_side_2v,is_row_hole,is_optimized,is_cutted,filter_type,remark,is_cancel,deleted,custom_plate_no,create_time,update_time,creator,updater, cad_view_id, cad_data) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; + String sql = "INSERT INTO order_plate (id,organ_id,order_id,name,plate_no,type,goods_id,width,height,thickness,split_width,split_height,split_thickness,seal_left,seal_right,seal_up,seal_down,area,texture,hole_face,hole_arrange,unregular_point_count,front_hole_count,back_hole_count,side_hole_count,front_model_count,back_model_count,is_door,open_door_type,offset_x,offset_y,is_arc_across,module_type_id,is_special_shaped,is_sculpt,is_side_sculpt,is_2v,is_side_2v,is_row_hole,is_optimized,is_cutted,filter_type,remark,is_cancel,deleted,custom_plate_no,create_time,update_time,creator,updater, cad_view_id, cad_data, cad_plate_no) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() { @Override public void setValues(PreparedStatement ps, int index) throws SQLException { @@ -1757,6 +1761,7 @@ public class WebCadOrderImportFactory { ps.setString(50, item.getUpdater()); ps.setInt(51, item.getCadViewId()); ps.setString(52, item.getCadData()); + ps.setString(53, item.getCadPlateNo()); } @Override @@ -1914,7 +1919,7 @@ public class WebCadOrderImportFactory { */ private void saveBody(List> bodyList) { for (List bodys : bodyList) { - String sql = "INSERT INTO order_body (id, organ_id, order_id, room_id, room_name, name, width, height, depth, multi_num, plate_num, unregular_num, filename, remark, deleted,create_time,update_time,creator,updater) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; + String sql = "INSERT INTO order_body (id, organ_id, order_id, room_id, room_name, name, width, height, depth, multi_num, plate_num, unregular_num, filename, remark, deleted,create_time,update_time,creator,updater, cad_view_file_id) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() { @Override public void setValues(PreparedStatement ps, int index) throws SQLException { @@ -1938,6 +1943,7 @@ public class WebCadOrderImportFactory { ps.setTimestamp(17, Timestamp.valueOf(orderBodyDO.getUpdateTime())); ps.setString(18, orderBodyDO.getCreator()); ps.setString(19, orderBodyDO.getUpdater()); + ps.setLong(20, cadViewFileId); } @Override @@ -2016,7 +2022,7 @@ public class WebCadOrderImportFactory { /** * 更新生产单的板件总数 */ - private void updateOrderPlateNum(String cadViewPath) { + private void updateOrderPlateNum() { int version = orderDO.getVersion(); Long orderId = orderDO.getId(); int updated = orderMapper.update(new LambdaUpdateWrapper() @@ -2025,7 +2031,6 @@ public class WebCadOrderImportFactory { .eq(OrderDO::getVersion, version) .set(OrderDO::getPlateNum, currentPlateNum) .set(OrderDO::getArea, currentPlateArea) - .set(OrderDO::getCadViewPath, cadViewPath) .set(OrderDO::getVersion, version + 1)); if (updated == 0) { throw new ServiceException(ErrorCodeConstants.WEBCAD_ORDER_IMPORT_ORDER_UPDATE_CONCURRENCY_ERROR, orderId);