From f847b52ba4402fecacda1bbf1b7316f922a4c5fb Mon Sep 17 00:00:00 2001 From: lym <1994302445@qq.com> Date: Thu, 9 May 2024 15:28:35 +0800 Subject: [PATCH] =?UTF-8?q?api=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../executor/enums/ErrorCodeConstants.java | 3 +- .../admin/order/OrderController.java | 46 +- .../order/vo/order/OrderModuleRespVO.java | 29 + .../admin/process/OrderProcessController.java | 8 +- .../process/vo/OrderProcessSaveReqVO.java | 1 - .../dal/dataobject/orderBody/OrderBodyDO.java | 2 +- .../dataobject/orderGroup/OrderGroupDO.java | 6 +- .../dataobject/orderParts/OrderPartsDO.java | 2 +- .../dataobject/ordermodel/OrderModelDO.java | 46 +- .../dal/dataobject/plate/PlateDO.java | 6 +- .../service/order/ApiOrderService.java | 12 + .../service/order/OrderInputProcessor.java | 89 +- .../executor/service/order/OrderService.java | 26 +- .../service/order/OrderServiceImpl.java | 277 ++----- .../util/deviseData/dataTwo/BoardInfo.java | 10 +- .../util/deviseData/dataTwo/PartsInfo.java | 2 +- .../util/deviseData/dataTwo/PlateDetail.java | 30 +- .../api/webcad/ApiTypeChangeRealize.java | 328 ++++++-- .../admin/api/webcad/ApiTypeRealize.java | 780 ++++++++++++++++++ .../process/ProcessGroupServiceImpl.java | 4 +- 20 files changed, 1332 insertions(+), 375 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/OrderModuleRespVO.java create mode 100644 cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/api/webcad/ApiTypeRealize.java 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 2eb4f9453..121841422 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 @@ -51,8 +51,9 @@ public interface ErrorCodeConstants { ErrorCode RAW_GOODS_NOT_EXISTS = new ErrorCode(1_002_029_005, "生产单中未用到此板材"); ErrorCode ORDER_STATUS_ERROR = new ErrorCode(1_002_029_006, "生产单不允许删除"); ErrorCode APP_TOKEN_ERROR = new ErrorCode(1_002_029_007, "token获取失败"); - ErrorCode PLATE_DATA_ERROR = new ErrorCode(1_002_029_008, "板材数据获取错误"); + ErrorCode PLATE_PLAN_DATA_ERROR = new ErrorCode(1_002_029_008, "板材数据获取错误"); ErrorCode PARTS_DATA_ERROR = new ErrorCode(1_002_029_009, "配件数据获取错误"); ErrorCode BODY_DATA_ERROR = new ErrorCode(1_002_029_010, "柜体数据获取错误"); ErrorCode GOODS_DATA_ERROR = new ErrorCode(1_002_029_011, "商品信息获取错误"); + ErrorCode PLATE_DATA_ERROR = new ErrorCode(1_002_029_012, "板材数据获取错误"); } diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/order/OrderController.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/order/OrderController.java index 6f8bb8fd5..911ebee6d 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/order/OrderController.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/order/OrderController.java @@ -2,6 +2,7 @@ package com.cf.imes.module.executor.controller.admin.order; import com.alibaba.excel.EasyExcel; import com.alibaba.fastjson.JSONObject; +import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderModuleRespVO; import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderPageReqVO; import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderRespVO; import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderSaveReqVO; @@ -63,9 +64,6 @@ public class OrderController { @Resource private OrderService orderService; - @Resource - private ApiOrderService apiOrderService; - private static final Logger log = LoggerFactory.getLogger(OrderController.class); @PostMapping("/create") @@ -101,16 +99,6 @@ public class OrderController { return success(BeanUtils.toBean(order, OrderRespVO.class)); } - // 获取当前条件下所有生产单信息 -// @GetMapping("/allOrder") -// @Operation(summary = "获得所有生产单") -// @PreAuthorize("@ss.hasPermission('executor:order:query')") -// public CommonResult> getAllOrder(@Valid OrderPageReqVO pageReqVO) { -// pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); -// PageResult pageResult = orderService.getOrderPage(pageReqVO); -// return success(BeanUtils.toBean(pageResult, OrderRespVO.class)); -// } - @GetMapping("/page") @Operation(summary = "获得生产单分页") @PreAuthorize("@ss.hasPermission('executor:order:query')") @@ -140,15 +128,9 @@ public class OrderController { fis.read(buffer); fis.close(); - // 清空response response.reset(); - // 设置response的Header response.setCharacterEncoding("UTF-8"); - //Content-Disposition的作用:告知浏览器以何种方式显示响应返回的文件,用浏览器打开还是以附件的形式下载到本地保存 - //attachment表示以附件方式下载 inline表示在线打开 "Content-Disposition: inline; filename=文件名.mp3" - // filename表示文件的默认名称,因为网络传输只支持URL编码的相关支付,因此需要将文件名URL编码后进行传输,前端收到后需要反编码才能获取到真正的名称 response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename, "UTF-8")); - // 告知浏览器文件的大小 response.addHeader("Content-Length", "" + file.length()); OutputStream outputStream = new BufferedOutputStream(response.getOutputStream()); response.setContentType("application/octet-stream"); @@ -221,20 +203,30 @@ public class OrderController { } - // 获得 房间和柜体 信息 @GetMapping("/get-room") - @Operation(summary = "获得房间——柜体 基本信息") + @Operation(summary = "生产单详情-房间、柜体信息") @Parameter(name = "orderId", description = "生产单编号", required = true, example = "1024") @PreAuthorize("@ss.hasPermission('executor:order:query')") - public CommonResult>> getRoom(@RequestParam("orderId") Long orderId) { - Map> orderBodyMap = orderService.getOrderBody(orderId); + public CommonResult> getRoom(@RequestParam("orderId") Long orderId) { + List orderBodyMap = orderService.getOrderBody(orderId); return success(orderBodyMap); } + @GetMapping("/get-module") + @Operation(summary = "生产单详情-模块全部数量信息") + @Parameters({ + @Parameter(name = "orderId", description = "生产单编号", example = "1024"), + @Parameter(name = "roomId", description = "房间编号", example = "1024"), + @Parameter(name = "bodyId", description = "柜体编号", example = "1024") + }) + @PreAuthorize("@ss.hasPermission('executor:order:query')") + public CommonResult> getModule(@RequestParam("orderId") Long orderId) { + List moduleDOList = orderService.getModule(orderId); + return success(moduleDOList); + } - // 获得模组 —— 模块信息 @GetMapping("/get-moduleDetails") - @Operation(summary = "获得模组——模块信息") + @Operation(summary = "生产单详情-模块详细信息")//生产单详情-模块全部数量信息 @Parameters({ @Parameter(name = "orderId", description = "生产单编号", example = "1024"), @Parameter(name = "roomId", description = "房间编号", example = "1024"), @@ -244,7 +236,7 @@ public class OrderController { public CommonResult> getModule(@RequestParam("orderId") Long orderId, @RequestParam(value = "roomId", required = false) Long roomId, @RequestParam(value = "bodyId", required = false) Long bodyId) { - List moduleDOList = orderService.getModule(orderId, roomId, bodyId); + List moduleDOList = orderService.getModuleDetail(orderId, roomId, bodyId); return success(moduleDOList); } @@ -270,7 +262,7 @@ public class OrderController { return success(BeanUtils.toBean(orderService.getBody(orderId), OrderBodyRespVO.class)); } -// 测试接口 + @GetMapping("getApiData") @Operation(summary = "api数据获取") @PreAuthorize("@ss.hasPermission('executor:order:getApiData')") 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/OrderModuleRespVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/order/vo/order/OrderModuleRespVO.java new file mode 100644 index 000000000..8b8434a03 --- /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/OrderModuleRespVO.java @@ -0,0 +1,29 @@ +package com.cf.imes.module.executor.controller.admin.order.vo.order; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Schema(description = "管理后台 - 生产单表 order Response VO") +@Data +@ExcelIgnoreUnannotated +public class OrderModuleRespVO { + + @Schema(description = "生产单号", requiredMode = Schema.RequiredMode.REQUIRED, example = "20230414026120") + private Long id; + + @Schema(description = "房间Id", requiredMode = Schema.RequiredMode.REQUIRED) + private Long roomId; + + @Schema(description = "柜体Id", requiredMode = Schema.RequiredMode.REQUIRED) + private Long bodyId; + + @Schema(description = "加工组Id", requiredMode = Schema.RequiredMode.REQUIRED) + private Long groupId; + + @Schema(description = "柜体板块数量", requiredMode = Schema.RequiredMode.REQUIRED) + private Integer bodyNum; + + @Schema(description = "加工组板块数量", requiredMode = Schema.RequiredMode.REQUIRED) + private Integer groupNum; +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/process/OrderProcessController.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/process/OrderProcessController.java index 00e3580c1..eef28213a 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/process/OrderProcessController.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/process/OrderProcessController.java @@ -39,14 +39,14 @@ public class OrderProcessController { private OrderProcessService orderProcessService; @PostMapping("/create") - @Operation(summary = "创建生产单工序") + @Operation(summary = "创建生产单工序组") @PreAuthorize("@ss.hasPermission('executor:order-process:create')") public CommonResult createOrderProcess(@Valid @RequestBody OrderProcessSaveReqVO createReqVO) { return success(orderProcessService.createOrderProcess(createReqVO)); } @PutMapping("/update") - @Operation(summary = "更新生产单工序") + @Operation(summary = "更新生产单工序组") @PreAuthorize("@ss.hasPermission('executor:order-process:update')") public CommonResult updateOrderProcess(@Valid @RequestBody OrderProcessSaveReqVO updateReqVO) { orderProcessService.updateOrderProcess(updateReqVO); @@ -54,7 +54,7 @@ public class OrderProcessController { } @DeleteMapping("/delete") - @Operation(summary = "删除生产单工序") + @Operation(summary = "删除生产单工序组") @Parameter(name = "id", description = "编号", required = true) @PreAuthorize("@ss.hasPermission('executor:order-process:delete')") public CommonResult deleteOrderProcess(@RequestParam("id") Long id) { @@ -63,7 +63,7 @@ public class OrderProcessController { } @GetMapping("/get") - @Operation(summary = "获得生产单工序") + @Operation(summary = "获得生产单工序组") @Parameter(name = "orderId", description = "生产单编号", required = true, example = "1024") @PreAuthorize("@ss.hasPermission('executor:order-process:query')") public CommonResult getOrderProcess(@RequestParam("orderId") Long orderId) { diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/process/vo/OrderProcessSaveReqVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/process/vo/OrderProcessSaveReqVO.java index c05a85b92..d9603c832 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/process/vo/OrderProcessSaveReqVO.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/process/vo/OrderProcessSaveReqVO.java @@ -9,7 +9,6 @@ import javax.validation.constraints.*; @Data public class OrderProcessSaveReqVO { - @Schema(description = "工序 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "31600") private Long id; @Schema(description = "生产单号", requiredMode = Schema.RequiredMode.REQUIRED) 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 ae68d9caa..ec9e244e1 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 @@ -55,7 +55,7 @@ public class OrderBodyDO extends BaseDO { /** * 模块复制数量 */ - private Double multiNum; + private Integer multiNum; /** * 板材数量 */ diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/orderGroup/OrderGroupDO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/orderGroup/OrderGroupDO.java index 7f64ed0f2..4ff0fc70c 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/orderGroup/OrderGroupDO.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/orderGroup/OrderGroupDO.java @@ -61,15 +61,15 @@ public class OrderGroupDO extends BaseDO { /** * 模块复制数量 */ - private Short multiNum; + private Integer multiNum; /** * 板材数量 */ - private Double plateNum; + private Integer plateNum; /** * 异型数量 */ - private Short unregularNum; + private Integer unregularNum; /** * 文件名 */ diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/orderParts/OrderPartsDO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/orderParts/OrderPartsDO.java index 80222d1f8..08ddcca24 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/orderParts/OrderPartsDO.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/orderParts/OrderPartsDO.java @@ -46,7 +46,7 @@ public class OrderPartsDO extends BaseDO { /** * 配件类型 */ - private Integer type; + private String type; /** * 型号 */ diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/ordermodel/OrderModelDO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/ordermodel/OrderModelDO.java index b75debf4f..aa13a7c47 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/ordermodel/OrderModelDO.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/ordermodel/OrderModelDO.java @@ -1,16 +1,16 @@ package com.cf.imes.module.executor.dal.dataobject.ordermodel; import com.cf.imes.framework.es.core.dal.ESDocument; -import com.cf.imes.module.executor.util.deviseData.HoleDetail; -import com.cf.imes.module.executor.util.deviseData.ModelDetail; -import com.cf.imes.module.executor.util.deviseData.PointDetail; +import com.cf.imes.module.executor.util.deviseData.dataTwo.HoleDetail; +import com.cf.imes.module.executor.util.deviseData.dataTwo.ModelDetail; +import com.cf.imes.module.executor.util.deviseData.dataTwo.PointDetail; import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import org.checkerframework.checker.units.qual.A; +import java.math.BigDecimal; import java.util.List; /** @@ -28,16 +28,34 @@ public class OrderModelDO extends ESDocument { private Long orderId; @Schema(description = "小板id") private Long plateId; - @Schema(description = "轮廓明细列表") - private List contourDetailList; - @Schema(description = "点明细列表") - private List pointDetailList; - @Schema(description = "孔明细列表") - private List holeDetailList; + + @Schema(description = "纹路 纹路(0正纹1可翻转2反纹)") + private Integer texture; + @Schema(description = "排版面 排钻类型(0正面1反面2随意面)") + private Integer typographicFace; + @Schema(description = "开门类型 0非门板,1左开,2右开,3上翻,4下翻") + private Integer openDoorType; // 字典转换 + @Schema(description = "小板类型") + private String boardType; + + @Schema(description = "偏移量X") + private BigDecimal offsetX; + @Schema(description = "偏移量Y") + private BigDecimal offsetY; + + @Schema(description = "是否有二维刀路") + private Boolean has2DModel; + @Schema(description = "是否有三维刀路") + private Boolean has3DModel; + + @Schema(description = "点明细,表示小板外围轮廓的几个转折点(不含封边)") + private List pointDetail; @Schema(description = "原始点明细列表") - private List rawPointDetailList; - @Schema(description = "侧面轮廓明细列表") - private List sideModelDetailList; + private List rawPointDetail; + @Schema(description = "孔明细列表") + private List holeDetail; + @Schema(description = "造型明细") + private List contourDetail; @Schema(description = "侧面孔明细列表") - private List sideHoleDetailList; + private List sideHoleDetail; } 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 890172431..e78eef84b 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 @@ -57,7 +57,7 @@ public class PlateDO extends BaseDO { /** * 商品 ID */ - private String goodsId; + private Long goodsId; /** * 宽度 */ @@ -149,11 +149,11 @@ public class PlateDO extends BaseDO { /** * 异型偏移 x */ - private Double offsetX; + private BigDecimal offsetX; /** * 异型偏移 y */ - private Double offsetY; + private BigDecimal offsetY; /** * 是否孤形对角 */ diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/ApiOrderService.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/ApiOrderService.java index 6bbea1c7b..070a30c44 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/ApiOrderService.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/ApiOrderService.java @@ -9,19 +9,31 @@ import org.springframework.web.bind.annotation.*; @FeignClient(url = "https://chenfeng.tech:7779", name = "apiOrderService") public interface ApiOrderService { +// 登陆token @RequestMapping(value = "/Api-Oauth-token",method = RequestMethod.GET) JSONObject getApiTokenMessage(@RequestParam("appid") String appid, @RequestParam("appsecret") String appsecret); +// 订单板件生产数据 @RequestMapping(value = "/Api-erpOrders-orderPlanData",method = RequestMethod.POST) JSONObject getApiOrderMessage(@RequestParam("token") String token, @RequestBody JSONObject json); +// 配件生产数据 @RequestMapping(value = "/Api-erpOrders-partsList",method = RequestMethod.POST) JSONObject getApiOrderPartsMessage(@RequestParam("token") String token, @RequestBody JSONObject json); +// 房间柜体 @RequestMapping(value = "/Api-erpOrders-boxsList",method = RequestMethod.POST) JSONObject getApiOrderBodyMessage(@RequestParam("token") String token, @RequestBody JSONObject json); +// 商品数据 @RequestMapping(value = "/Api-erpOrders-goodsList",method = RequestMethod.POST) JSONObject getApiOrderGoodsMessage(@RequestParam("token") String token, @RequestBody JSONObject json); +// 加工组数据 + @RequestMapping(value = "/Api-erpOrders-getModuleTypeList",method = RequestMethod.POST) + JSONObject getApiModuleTypeDataMessage(@RequestParam("token") String token, @RequestBody JSONObject json); + +// 板件数据 + @RequestMapping(value = "/Api-erpOrders-blocksList",method = RequestMethod.POST) + JSONObject getApiBlocksDataMessage(@RequestParam("token") String token, @RequestBody JSONObject json); } diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderInputProcessor.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderInputProcessor.java index baeca5a2c..9e13579dc 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderInputProcessor.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderInputProcessor.java @@ -8,6 +8,7 @@ import com.cf.imes.framework.common.util.json.JsonUtils; import com.cf.imes.framework.es.core.service.ESDocumentService; import com.cf.imes.framework.mybatis.core.generator.SnowFlakeGenerator; import com.cf.imes.framework.organ.core.context.OrganContextHolder; +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.orderGroup.OrderGroupDO; import com.cf.imes.module.executor.dal.dataobject.orderItem.OrderItemDO; @@ -16,6 +17,7 @@ import com.cf.imes.module.executor.dal.dataobject.orderParts.OrderPartsDO; import com.cf.imes.module.executor.dal.dataobject.ordermodel.OrderModelDO; import com.cf.imes.module.executor.dal.dataobject.plate.PlateDO; import com.cf.imes.module.executor.dal.dataobject.rawgoods.RawGoodsDO; +import com.cf.imes.module.executor.dal.mysql.order.OrderMapper; import com.cf.imes.module.executor.dal.mysql.orderBody.OrderBodyMapper; import com.cf.imes.module.executor.dal.mysql.orderGroup.OrderGroupMapper; import com.cf.imes.module.executor.dal.mysql.orderItem.OrderItemMapper; @@ -28,6 +30,7 @@ import com.cf.imes.module.executor.util.deviseData.Detail; import com.cf.imes.module.executor.util.deviseData.IBoardProdInfo; import com.cf.imes.module.executor.util.deviseData.PartsModuleExtra; import com.cf.imes.module.executor.util.deviseData.PlateModuleExtra; +import com.cf.imes.module.executor.util.deviseData.dataTwo.PlateDetail; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; @@ -49,6 +52,9 @@ public class OrderInputProcessor { private IdentifierGenerator identifierGenerator; /*private IdentifierGenerator identifierGenerator = new SnowFlakeGenerator(0, 0);*/ + @Resource + private OrderMapper orderMapper; + @Resource private RawGoodsMapper rawGoodsMapper; @@ -105,7 +111,7 @@ public class OrderInputProcessor { .width(e.getWidth()) .height(e.getHeight()) .depth(e.getDepth()) - .multiNum(e.getMultiNum().doubleValue()) +// .multiNum(e.getMultiNum().doubleValue()) .filename("") .remark("") .build(), @@ -195,23 +201,23 @@ public class OrderInputProcessor { if (goodType == 1) { PlateDO plateDO = PlateDO.builder() .id(identifierGenerator.nextId(null).longValue()) - .goodsId(rawGoodsDO.getRawGoodsId()) +// .goodsId(rawGoodsDO.getRawGoodsId()) .orderId(orderId) .name(e.getIBoardProdInfo().getName()) .plateNo(e.getIBoardProdInfo().getPlateNo()) //.type(e.getIBoardProdInfo().) - .goodsId(rawGoodsDO.getRawGoodsId()) - .height(new BigDecimal(e.getIBoardProdInfo().getHeight())) - .width(new BigDecimal(e.getIBoardProdInfo().getWidth())) - .thickness(new BigDecimal(e.getIBoardProdInfo().getThickness().toString())) - .splitHeight(new BigDecimal(e.getIBoardProdInfo().getSplitHeight())) - .splitWidth(new BigDecimal(e.getIBoardProdInfo().getSplitWidth())) - .splitThickness(new BigDecimal(e.getIBoardProdInfo().getThickness().toString())) - .sealLeft(new BigDecimal(e.getIBoardProdInfo().getSealLeft())) - .sealRight(new BigDecimal(e.getIBoardProdInfo().getSealRight())) - .sealUp(new BigDecimal(e.getIBoardProdInfo().getSealUp())) - .sealDown(new BigDecimal(e.getIBoardProdInfo().getSealDown())) - .area(new BigDecimal( String.valueOf(e.getIBoardProdInfo().getWidth())).multiply( new BigDecimal(e.getIBoardProdInfo().getHeight()))) +// .goodsId(rawGoodsDO.getRawGoodsId()) +// .height(new BigDecimal(e.getIBoardProdInfo().getHeight())) +// .width(new BigDecimal(e.getIBoardProdInfo().getWidth())) +// .thickness(new BigDecimal(e.getIBoardProdInfo().getThickness().toString())) +// .splitHeight(new BigDecimal(e.getIBoardProdInfo().getSplitHeight())) +// .splitWidth(new BigDecimal(e.getIBoardProdInfo().getSplitWidth())) +// .splitThickness(new BigDecimal(e.getIBoardProdInfo().getThickness().toString())) +// .sealLeft(new BigDecimal(e.getIBoardProdInfo().getSealLeft())) +// .sealRight(new BigDecimal(e.getIBoardProdInfo().getSealRight())) +// .sealUp(new BigDecimal(e.getIBoardProdInfo().getSealUp())) +// .sealDown(new BigDecimal(e.getIBoardProdInfo().getSealDown())) +// .area(new BigDecimal( String.valueOf(e.getIBoardProdInfo().getWidth())).multiply( new BigDecimal(e.getIBoardProdInfo().getHeight()))) .texture(e.getIBoardProdInfo().getTexture()) .type(0) .holeFace(0) @@ -262,7 +268,7 @@ public class OrderInputProcessor { .price(0.0) .isComposite(false) .remark(e.getIBoardProdInfo().getRemark()) - .type(0) +// .type(0) .build(); orderItemDO.setType(2); orderItemDO.setPartsId(orderPartsDO.getId()); @@ -294,29 +300,40 @@ public class OrderInputProcessor { @Transactional public void batchInsert(Collection rawGoodsDOS, Collection orderBodyDOS, Collection orderGroupDOS, Collection orderPartsDOS, - Collection plateDOS, Collection orderModuleExtraDOS, Collection itemDOS) { + Collection plateDOS, Collection orderModuleExtraDOS, + Collection itemDOS, OrderDO orderDO) { + if (orderDO != null) + orderMapper.insert(orderDO); - for (int i = 0; i < rawGoodsDOS.size(); i += 1000) { - rawGoodsMapper.insertBatch(rawGoodsDOS.stream().skip(i).limit(1000).collect(Collectors.toList())); - } - for (int i = 0; i < orderBodyDOS.size(); i += 1000) { - orderBodyMapper.insertBatch(orderBodyDOS.stream().skip(i).limit(1000).collect(Collectors.toList())); - } - for (int i = 0; i < orderGroupDOS.size(); i += 1000) { - orderGroupMapper.insertBatch(orderGroupDOS.stream().skip(i).limit(1000).collect(Collectors.toList())); - } - for (int i = 0; i < orderPartsDOS.size(); i += 1000) { - orderPartsMapper.insertBatch(orderPartsDOS.stream().skip(i).limit(1000).collect(Collectors.toList())); - } - for (int i = 0; i < plateDOS.size(); i += 1000) { - plateMapper.insertBatch(plateDOS.stream().skip(i).limit(1000).collect(Collectors.toList())); - } - for (int i = 0; i < orderModuleExtraDOS.size(); i += 1000) { - orderModuleExtraMapper.insertBatch(orderModuleExtraDOS.stream().skip(i).limit(1000).collect(Collectors.toList())); - } - for (int i = 0; i < itemDOS.size(); i += 1000) { - orderItemMapper.insertBatch(itemDOS.stream().skip(i).limit(1000).collect(Collectors.toList())); + if (rawGoodsDOS != null) + for (int i = 0; i < rawGoodsDOS.size(); i += 1000) { + rawGoodsMapper.insertBatch(rawGoodsDOS.stream().skip(i).limit(1000).collect(Collectors.toList())); + } + if (orderBodyDOS != null) + for (int i = 0; i < orderBodyDOS.size(); i += 1000) { + orderBodyMapper.insertBatch(orderBodyDOS.stream().skip(i).limit(1000).collect(Collectors.toList())); + } + if (orderGroupDOS != null) + for (int i = 0; i < orderGroupDOS.size(); i += 1000) { + orderGroupMapper.insertBatch(orderGroupDOS.stream().skip(i).limit(1000).collect(Collectors.toList())); + } + if (orderPartsDOS != null) + for (int i = 0; i < orderPartsDOS.size(); i += 1000) { + orderPartsMapper.insertBatch(orderPartsDOS.stream().skip(i).limit(1000).collect(Collectors.toList())); + } + if (plateDOS != null) + for (int i = 0; i < plateDOS.size(); i += 1000) { + plateMapper.insertBatch(plateDOS.stream().skip(i).limit(1000).collect(Collectors.toList())); + } + if (orderModuleExtraDOS != null) { + for (int i = 0; i < orderModuleExtraDOS.size(); i += 1000) { + orderModuleExtraMapper.insertBatch(orderModuleExtraDOS.stream().skip(i).limit(1000).collect(Collectors.toList())); + } } + if (itemDOS != null) + for (int i = 0; i < itemDOS.size(); i += 1000) { + orderItemMapper.insertBatch(itemDOS.stream().skip(i).limit(1000).collect(Collectors.toList())); + } //rawGoodsMapper.insertBatch(rawGoodsDOS); //orderBodyMapper.insertBatch(orderBodyDOS); diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderService.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderService.java index c90e9a59b..9663705e2 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderService.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderService.java @@ -4,15 +4,11 @@ import javax.validation.*; import com.cf.imes.module.executor.controller.admin.order.vo.order.*; import com.cf.imes.module.executor.controller.admin.order.vo.product.OrderBodyRespVO; -import com.cf.imes.module.executor.controller.admin.order.vo.product.ProductRespVO; import com.cf.imes.module.executor.dal.dataobject.order.OrderDO; import com.cf.imes.framework.common.pojo.PageResult; import com.cf.imes.module.executor.dal.dataobject.orderBody.OrderBodyDO; import com.cf.imes.module.executor.dal.dataobject.orderModuleExtra.OrderModuleExtraDO; -import com.cf.imes.module.executor.util.deviseData.Detail; -import org.springframework.web.multipart.MultipartFile; -import java.io.IOException; import java.util.Collection; import java.util.List; import java.util.Map; @@ -62,15 +58,6 @@ public interface OrderService { */ PageResult getOrderPage(OrderPageReqVO pageReqVO); - /** - * 批量导入生产单 - * list 数据转换之后 - * id 生产单id - * orderImportRespVO 返回数据 - * @return OrderImportRespVO - */ - OrderImportRespVO importOrderList(List list , Long id , OrderImportRespVO orderImportRespVO) throws IOException; - /** * 清除生产单表 order_{N} * 清除还没有清除生产单与工序相关、生产单与模块相关、生产单与包裹、余料、补板、相关 @@ -86,17 +73,24 @@ public interface OrderService { /** * @param orderId: 生产单Id - * @return Map> + * @return List */ - Map> getOrderBody(Long orderId); + List getOrderBody(Long orderId); + + /** + * @param orderId: 生产单Id + * @return Map> + */ + List getModule(Long orderId); /** * @param orderId: 生产单id * @param roomId: 房间id * @param bodyId: 柜体id * @return List + * 需要修改返回值 */ - List getModule(Long orderId, Long roomId , Long bodyId); + List getModuleDetail(Long orderId, Long roomId , Long bodyId); /** * 删除柜体 diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderServiceImpl.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderServiceImpl.java index be4852b21..166081e3f 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderServiceImpl.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderServiceImpl.java @@ -9,11 +9,13 @@ import com.cf.imes.module.executor.controller.admin.order.vo.order.*; import com.cf.imes.framework.datapermission.core.util.DataPermissionUtils; import com.cf.imes.module.executor.controller.admin.order.vo.product.OrderBodyRespVO; import com.cf.imes.module.executor.controller.admin.order.vo.product.ProductRespVO; +import com.cf.imes.module.executor.dal.dataobject.goods.GoodsDO; import com.cf.imes.module.executor.dal.dataobject.orderBody.OrderBodyDO; import com.cf.imes.module.executor.dal.dataobject.orderGroup.OrderGroupDO; import com.cf.imes.module.executor.dal.dataobject.orderItem.OrderItemDO; import com.cf.imes.module.executor.dal.dataobject.orderModuleExtra.OrderModuleExtraDO; import com.cf.imes.module.executor.dal.dataobject.orderParts.OrderPartsDO; +import com.cf.imes.module.executor.dal.dataobject.ordermodel.OrderModelDO; import com.cf.imes.module.executor.dal.dataobject.plate.PlateDO; import com.cf.imes.module.executor.dal.dataobject.rawgoods.RawGoodsDO; import com.cf.imes.module.executor.dal.mysql.orderBody.OrderBodyMapper; @@ -27,6 +29,7 @@ import com.cf.imes.module.executor.util.FileTypeChangeUtil; import com.cf.imes.module.executor.util.deviseData.Detail; import com.cf.imes.module.executor.util.deviseData.dataTwo.PlateDetail; import com.cf.imes.module.executor.util.fileConversion.admin.api.webcad.ApiTypeChangeRealize; +import com.cf.imes.module.executor.util.fileConversion.admin.api.webcad.ApiTypeRealize; import com.cf.imes.module.system.api.application.ApplicationApi; import com.cf.imes.module.system.api.organ.OrganApi; import com.cf.imes.module.system.api.user.AdminUserApi; @@ -104,6 +107,12 @@ public class OrderServiceImpl implements OrderService { @Resource private ApiTypeChangeRealize apiTypeChangeRealize; + @Resource + private ApiTypeRealize apiTypeRealize; + + @Resource + private OrderInputProcessor orderInputProcessor; + @Resource private ApplicationApi applicationApi; @@ -165,160 +174,6 @@ public class OrderServiceImpl implements OrderService { return orderMapper.selectPage(pageReqVO); } - @Override - @Transactional(rollbackFor = Exception.class) - public OrderImportRespVO importOrderList(List list , Long id , OrderImportRespVO orderImportRespVO) throws IOException { -// 导入数据区分板材 配件 - HashMap> map = classifyGoods(list); -// 将相同条件的元素归为一个集合 - Map, List> groupedMap = map.get("plate").stream() - .collect(Collectors.groupingBy( - p -> Arrays.asList(p.getIBoardProdInfo().getGoodsId(), - p.getIBoardProdInfo().getGoodsName(), - p.getIBoardProdInfo().getMaterial(), - p.getIBoardProdInfo().getColor(), - p.getIBoardProdInfo().getSpec(), - p.getIBoardProdInfo().getThickness()), - Collectors.toList() - )); - groupedMap.forEach((key, value) -> { - if(value.get(0).getIBoardProdInfo().getThickness() == null){ -// 获取板材厚度 - Pattern pattern = Pattern.compile("\\d+×\\d+×(\\d+)"); - Matcher matcher = pattern.matcher(value.get(0).getIBoardProdInfo().getSpec()); - if (matcher.matches()) { - String number = matcher.group(1); - number = number.trim(); - value.get(0).getIBoardProdInfo().setThickness(Double.valueOf(number)); - } - } -// 板材信息合集,添加生产单id,添加生产单板材设计端商品编码,板材信息写入order_raw_goods - RawGoodsDO rawGoodsDO = BeanUtils.toBean(value.get(0).getIBoardProdInfo(), RawGoodsDO.class).setOrderId(id) - .setRawGoodsId(value.get(0).getIBoardProdInfo().getGoodsId()); - rawGoodsMapper.insert(rawGoodsDO); - Long rawGoodId = rawGoodsDO.getId(); -// 赋值给板件未对应前order_raw_goods的id - for (Detail reqVO : value) { - reqVO.getIBoardProdInfo().setRawGoodsId(rawGoodId); - } - }); - - - -// 小板信息写入 、配件信息写入 - Map> groupedRooms = list.stream() - .collect(Collectors.groupingBy( - order -> order.getIBoardProdInfo().getRoomsName() != null ? order.getIBoardProdInfo().getRoomsName() : " ", - Collectors.toList() - )); -// 根据房间分类 - groupedRooms.forEach((roomName, listRoom) -> { - Long roomId = (Long) snowFlakeGenerator.nextId(null); - Map> groupedCabinetsName = listRoom.stream() - .collect(Collectors.groupingBy( - order -> order.getIBoardProdInfo().getCabinetsName() != null ? order.getIBoardProdInfo().getCabinetsName() : " ", - Collectors.toList() - )); -// 根据柜体名分类 - groupedCabinetsName.forEach((cabinetName, listCabinet) -> { - final Double[] plateCountByCabinetName = {0.0}; - OrderBodyDO orderBodyDO = OrderBodyDO.builder().orderId(id).roomId(roomId) - .roomName(roomName).name(cabinetName).build(); //没有获取柜体的长宽高 - orderBodyMapper.insert(orderBodyDO); - Long bodyId = orderBodyDO.getId(); - - Map> groupedSynthesis = listCabinet.stream()//根据组合类型 - .collect(Collectors.groupingBy( - order -> Optional.ofNullable(order.getIBoardProdInfo().getSynthesis()) - .map(Object::toString) - .orElse(" "), - Collectors.toList() - )); - - List productRespVOS = new ArrayList<>(); -// 根据组合类别分类 - groupedSynthesis.forEach((synthesis, listSynthesis) -> {//根据组合类别 - - Map> groupedCombinationName = listSynthesis.stream() - .collect(Collectors.groupingBy( - order -> order.getIBoardProdInfo().getCombinationName() != null ? order.getIBoardProdInfo().getCombinationName() : " ", - Collectors.toList() - )); -// 根据组合名称分类 - groupedCombinationName.forEach((combinationName, listCombinationName) -> { -// 板数量 - final Double[] plateCountByCombination = {0.0}; - OrderGroupDO orderGroupDO = OrderGroupDO.builder().orderId(id).bodyId(bodyId) - .groupTypeId(Long.valueOf(synthesis)).groupTypeName(listCombinationName.get(0).getIBoardProdInfo().getSynthesisTypeName()).name(combinationName).build(); - - orderGroupMapper.insert(orderGroupDO); - Long groupId = orderGroupDO.getId(); - - listCombinationName.forEach(plateOrParts -> { - - plateCountByCombination[0] = plateCountByCombination[0] + plateOrParts.getIBoardProdInfo().getGoodsNumber(); - if (plateOrParts.getIBoardProdInfo().getGoodType()== 1) { - //板材 - for (int i = 0; i < plateOrParts.getIBoardProdInfo().getGoodsNumber(); i++) { - PlateDO plateDO = BeanUtils.toBean(plateOrParts.getIBoardProdInfo(), PlateDO.class).setOrderId(id).setGoodsId(String.valueOf(plateOrParts.getIBoardProdInfo().getRawGoodsId())) - .setThickness(BigDecimal.valueOf(plateOrParts.getIBoardProdInfo().getSplitThickness())); - - plateMapper.insert(plateDO); - productRespVOS.add(new ProductRespVO().setRoomId(roomId).setRoomName(roomName).setBodyId(bodyId).setBodyName(cabinetName) - .setGroupId(groupId).setGroupTypeId(orderGroupDO.getGroupTypeId()).setGroupTypeName(orderGroupDO.getName()) - .setGoodType(1).setGoodName(plateDO.getName()).setUnits("片").setNum(1.0)); - Long plateId = plateDO.getId(); - orderImportRespVO.getCreateOrder().add(plateDO.getId() + "板材存入生成id"); - - OrderItemDO orderItemDO = OrderItemDO.builder().orderId(id).type(1) - .roomId(roomId).bodyId(bodyId).plateId(plateId) - .num(1.0).groupId(groupId).build(); - orderItemMapper.insert(orderItemDO); -// 写入Detail中的IBoardProdInfo - plateOrParts.getIBoardProdInfo().setPlateId(plateId); - plateOrParts.getIBoardProdInfo().setPlateId(plateId); - } - }else { - //配件 - OrderPartsDO orderPartsDO = BeanUtils.toBean(plateOrParts.getIBoardProdInfo(), OrderPartsDO.class). - setName(plateOrParts.getIBoardProdInfo().getGoodsName()).setType(plateOrParts.getIBoardProdInfo().getGoodType()).setOrderId(id); - orderPartsMapper.insert(orderPartsDO); - orderImportRespVO.getCreateOrder().add(orderPartsDO.getId() + "配件存入生成id"); - OrderItemDO orderItemDO = OrderItemDO.builder().orderId(id).type(Integer.valueOf(plateOrParts.getIBoardProdInfo().getGoodType())) - .roomId(roomId).bodyId(bodyId).partsId(orderPartsDO.getId()).groupId(groupId) - .num(Double.valueOf(plateOrParts.getIBoardProdInfo().getGoodsNumber())).build(); - orderItemMapper.insert(orderItemDO); - productRespVOS.add(new ProductRespVO().setRoomId(roomId).setRoomName(roomName).setBodyId(bodyId).setBodyName(cabinetName) - .setGroupId(groupId).setGroupTypeId(orderGroupDO.getGroupTypeId()).setGroupTypeName(orderGroupDO.getName()) - .setGoodType(1).setGoodName(orderPartsDO.getName()).setUnits(orderPartsDO.getUnit()).setNum(orderItemDO.getNum())); - } - - }); -// 修改group中的板件数量 - orderGroupMapper.updatePlateNumById(groupId, plateCountByCombination[0]); - plateCountByCabinetName[0] = plateCountByCabinetName[0] + plateCountByCombination[0]; - }); - ObjectMapper objectMapper = new ObjectMapper(); - try { - String detailListJson = objectMapper.writeValueAsString(productRespVOS); - OrderModuleExtraDO orderModuleExtraDO = OrderModuleExtraDO.builder().orderId(id).roomId(roomId).id((Long) snowFlakeGenerator.nextId(null)) - .bodyId(bodyId).type(listCabinet.get(0).getIBoardProdInfo().getGoodType()).extraData(detailListJson).build(); - orderModuleExtraMapper.insert(orderModuleExtraDO); - - } catch (JsonProcessingException e) { - throw new RuntimeException(e); - } - }); - orderBodyMapper.updatePlateNumById(bodyId, plateCountByCabinetName[0]); - }); - - - - }); -// fileTypeChangeUtil.fileDataChangeToJson(list, id); - return orderImportRespVO; - } - @Override @Transactional(rollbackFor = Exception.class) public void cleanOrder(Long orderId) { @@ -340,17 +195,21 @@ public class OrderServiceImpl implements OrderService { } @Override - public Map> getOrderBody(Long orderId) { + public List getOrderBody(Long orderId) { // 校验存在 validateOrderExists(orderId); List orderBodyRespVOList = BeanUtils.toBean(orderBodyMapper.selectList(new LambdaQueryWrapper().eq(OrderBodyDO::getOrderId, orderId)), OrderBodyRespVO.class); - Map> groupedByRoomId = orderBodyRespVOList.stream() - .collect(Collectors.groupingBy(OrderBodyRespVO::getRoomId)); - return groupedByRoomId; + return orderBodyRespVOList; } @Override - public List getModule(Long orderId, Long roomId, Long bodyId) { + public List getModule(Long orderId) { + + return null; + } + + @Override + public List getModuleDetail(Long orderId, Long roomId, Long bodyId) { List orderModuleExtraDOS = orderModuleExtraMapper.selectExtraById(orderId, roomId, bodyId); return orderModuleExtraDOS; } @@ -386,20 +245,19 @@ public class OrderServiceImpl implements OrderService { String appSecret = app.getString("appSecret"); JSONObject json = apiOrderService.getApiTokenMessage(appId, appSecret); - System.out.println("json " + json); if (!json.getString("err_msg").equals("success")) { throw exception(APP_TOKEN_ERROR); } String token = json.getJSONObject("info").getString("access_token"); -// 获取板件信息 - JSONObject jsonPlates = new JSONObject(); - jsonPlates.put("order_no", orderNo);//生产单号需要传入赋值 - jsonPlates.put("format", "json"); - JSONObject dataPlates = apiOrderService.getApiOrderMessage(token, jsonPlates); +// 获取板件生产数据信息 + JSONObject jsonPlatesData = new JSONObject(); + jsonPlatesData.put("order_no", orderNo);//生产单号需要传入赋值 + jsonPlatesData.put("format", "json"); + JSONObject dataPlates = apiOrderService.getApiOrderMessage(token, jsonPlatesData); if (!dataPlates.getString("err_code").equals("0")) { - throw exception(PLATE_DATA_ERROR); + throw exception(PLATE_PLAN_DATA_ERROR); } -// 获取配件信息 +// 获取配件信息 分页获取 JSONObject jsonParts = new JSONObject(); jsonParts.put("curr_page", 1); jsonParts.put("page_count", PARTS_PAGE_MAX); @@ -412,7 +270,7 @@ public class OrderServiceImpl implements OrderService { for (int i = 1; i <= parts.getJSONObject("value").getInteger("PageCount"); i++) { jsonParts.put("curr_page", i); JSONObject value = apiOrderService.getApiOrderPartsMessage(token, jsonParts).getJSONObject("value"); - mergeJSONObjects(dataParts, value); + dataParts = mergeJSONObjects(dataParts, value); } // 柜体信息转换 JSONObject jsonBody = new JSONObject(); @@ -424,10 +282,10 @@ public class OrderServiceImpl implements OrderService { throw exception(BODY_DATA_ERROR); } JSONObject dataBody = new JSONObject(); - for (int i = 1; i <= dataBody.getJSONObject("value").getInteger("PageCount"); i++) { + for (int i = 1; i <= body.getJSONObject("value").getInteger("PageCount"); i++) { jsonParts.put("curr_page", i); - JSONObject value = apiOrderService.getApiOrderPartsMessage(token, jsonBody).getJSONObject("value"); - mergeJSONObjects(dataBody, value); + JSONObject value = apiOrderService.getApiOrderBodyMessage(token, jsonBody).getJSONObject("value"); + dataBody = mergeJSONObjects(dataBody, value); } // 商品信息转换 JSONObject jsonGoods = new JSONObject(); @@ -435,45 +293,80 @@ public class OrderServiceImpl implements OrderService { jsonGoods.put("page_count", PARTS_PAGE_MAX); jsonGoods.put("order_no", orderNo); JSONObject goods = apiOrderService.getApiOrderGoodsMessage(token, jsonGoods); + System.err.println("err_code " + goods.getString("err_code").equals("0")); if (!goods.getString("err_code").equals("0")) { throw exception(GOODS_DATA_ERROR); } JSONObject dataGoods = new JSONObject(); - for (int i = 1; i <= dataGoods.getJSONObject("value").getInteger("PageCount"); i++) { + for (int i = 1; i <= goods.getJSONObject("value").getInteger("PageCount"); i++) { jsonParts.put("curr_page", i); JSONObject value = apiOrderService.getApiOrderGoodsMessage(token, jsonGoods).getJSONObject("value"); - mergeJSONObjects(dataGoods, value); + dataGoods = mergeJSONObjects(dataGoods, value); } +// 板材信息转换 + JSONObject jsonPlates = new JSONObject(); + jsonPlates.put("curr_page", 1); + jsonPlates.put("page_count", PARTS_PAGE_MAX); + jsonPlates.put("order_no", orderNo); + JSONObject plates = apiOrderService.getApiBlocksDataMessage(token, jsonGoods); + if (!plates.getString("err_code").equals("0")) { + throw exception(PLATE_DATA_ERROR); + } + JSONObject plate = new JSONObject(); + for (int i = 1; i <= plates.getJSONObject("value").getInteger("PageCount"); i++) { + jsonParts.put("curr_page", i); + JSONObject value = apiOrderService.getApiBlocksDataMessage(token, jsonGoods).getJSONObject("value"); + plate = mergeJSONObjects(plate, value); + } +// 加工组信息转换 + JSONObject jsonModule = new JSONObject(); + jsonModule.put("order_no", orderNo); + JSONObject dataModule = apiOrderService.getApiModuleTypeDataMessage(token, jsonGoods); // 转换 - List plateDetails = (List) apiTypeChangeRealize.apiPlateDataChange(dataPlates.getJSONObject("value"),dataParts,dataBody,dataGoods); -// order_raw_goods List -// List boardInfos = BeanUtils.toBean(apiTypeChangeRealize.goodsInfoChange(dataGoods), RawGoodsDO.class); +// System.out.println(" jsonPlatesData " + dataPlates.getJSONObject("value")+ "\n" +// + " dataParts " + dataParts+ "\n" +// + " dataBody " + dataBody+ "\n" +// + " dataGoods " + dataGoods+ "\n" +// + " plate " + plate+ "\n" +// + " dataModule " + dataModule); + Map> listMap = apiTypeRealize.apiPlateDataChange( + dataPlates.getJSONObject("value"),//板件生产信息 + dataParts,// 配件信息 + dataBody, // 柜体信息 + dataGoods, // 商品信息 + plate, // 板件信息 + dataModule); // 加工组信息 + List order = (List) listMap.get("orderDO"); + List goodsDO = (List) listMap.get("goodsDO"); + List rawGoodsDO = (List) listMap.get("rawGoodsDO"); + List bodyDO = (List) listMap.get("bodyDO"); + List groupDO = (List) listMap.get("groupDO"); + List partsDO = (List) listMap.get("partsDO"); + List plateDO = (List) listMap.get("platesDO"); + List plateDetail = (List) listMap.get("plateDetail"); + List itemDO = (List) listMap.get("itemDO"); - System.out.println(plateDetails); + orderInputProcessor.batchInsert(rawGoodsDO, bodyDO, groupDO, partsDO, plateDO, null, itemDO, order.get(0)); + System.out.println(BeanUtils.toBean(plateDetail, OrderModelDO.class)); + orderInputProcessor.batchSaveModel(BeanUtils.toBean(plateDetail, OrderModelDO.class)); return null; } // 合并两个 JSON 对象的方法 public JSONObject mergeJSONObjects(JSONObject object1, JSONObject object2) { - JSONObject mergedObject = new JSONObject(); - - // 获取第一个 JSON 对象中 "name" 的值 - Object value1 = object1.get("List"); - - // 获取第二个 JSON 对象中 "name" 的值 Object value2 = object2.get("List"); - // 创建一个 JSON 数组,将两个值添加进去 - JSONArray array = new JSONArray(); - array.add(value1); - array.add(value2); - - // 将数组作为值设置到合并后的 JSON 对象中 - mergedObject.put("List", array); - - return mergedObject; + if (object1.getJSONArray("List") == null) { + object1.put("value", object2); + } else { + if (value2 != null) + object1.getJSONArray("List").add(value2); + } + return object1; } + + private void validateOrderBodyExists(Long orderId, Long bodyId) { if (orderBodyMapper.selectCount(new LambdaQueryWrapper().eq(OrderBodyDO::getOrderId, orderId).eq(OrderBodyDO::getId, bodyId)) == 0) { throw exception(ORDER_BODY_NOT_EXISTS); diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/deviseData/dataTwo/BoardInfo.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/deviseData/dataTwo/BoardInfo.java index 3dadd3c87..b88c9630f 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/deviseData/dataTwo/BoardInfo.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/deviseData/dataTwo/BoardInfo.java @@ -5,6 +5,8 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import java.math.BigDecimal; + /** * 板件基本信息 */ @@ -28,10 +30,10 @@ public class BoardInfo { private String unit; //商品单位 private String spec; //商品规格 - private Double height; - private Double width; - private Double length; - private Double thickness;//规格-板厚 板厚,成品和开料都是一样的 + private BigDecimal height; + private BigDecimal width; + private BigDecimal length; + private BigDecimal thickness;//规格-板厚 板厚,成品和开料都是一样的 private Boolean isTexture; // 有无纹路 private Double price; diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/deviseData/dataTwo/PartsInfo.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/deviseData/dataTwo/PartsInfo.java index afd518c39..9b79e0168 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/deviseData/dataTwo/PartsInfo.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/deviseData/dataTwo/PartsInfo.java @@ -21,7 +21,7 @@ public class PartsInfo { // 配件所属信息 private String roomName; //房间名称 private String bodyName; //柜体名 - private String bodyNo; // 柜体编号 + private Integer bodyNo; // 柜体编号 // 柜体成倍拆单的倍数 diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/deviseData/dataTwo/PlateDetail.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/deviseData/dataTwo/PlateDetail.java index 126f91cb5..36c864f97 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/deviseData/dataTwo/PlateDetail.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/deviseData/dataTwo/PlateDetail.java @@ -1,10 +1,12 @@ package com.cf.imes.module.executor.util.deviseData.dataTwo; +import com.cf.imes.framework.es.core.dal.ESDocument; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import java.math.BigDecimal; import java.util.List; import java.util.Map; @@ -15,9 +17,11 @@ import java.util.Map; @Builder @AllArgsConstructor @NoArgsConstructor -public class PlateDetail { +public class PlateDetail{ // 板名称 private String name; +// 板id + private Long id; // 板编号 private String plateNo; // 自定义板号 @@ -49,27 +53,27 @@ public class PlateDetail { private List groupList; // 成品长宽、面积 - private Double plateWidth; - private Double plateLength; - private Double acreage; + private BigDecimal plateWidth; + private BigDecimal plateLength; + private BigDecimal acreage; // 开料长宽、面积 - private Double splitLength; - private Double splitWidth; - private Double sealAcreage; + private BigDecimal splitLength; + private BigDecimal splitWidth; + private BigDecimal sealAcreage; // 是否异形 private Boolean isUnRegular; // 封边,用于矩形 - private Double sealLeft; - private Double sealRight; - private Double sealUp; - private Double sealDown; + private BigDecimal sealLeft; + private BigDecimal sealRight; + private BigDecimal sealUp; + private BigDecimal sealDown; // 偏移量 - private Double offsetX; - private Double offsetY; + private BigDecimal offsetX; + private BigDecimal offsetY; // 大板基本信息 private BoardInfo boardInfo; diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/api/webcad/ApiTypeChangeRealize.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/api/webcad/ApiTypeChangeRealize.java index 9a17d288a..0245ca7e5 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/api/webcad/ApiTypeChangeRealize.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/api/webcad/ApiTypeChangeRealize.java @@ -7,18 +7,12 @@ 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.orderGroup.OrderGroupDO; -import com.cf.imes.module.executor.dal.dataobject.orderItem.OrderItemDO; -import com.cf.imes.module.executor.dal.dataobject.orderModuleExtra.OrderModuleExtraDO; -import com.cf.imes.module.executor.dal.dataobject.orderParts.OrderPartsDO; -import com.cf.imes.module.executor.dal.dataobject.ordermodel.OrderModelDO; import com.cf.imes.module.executor.dal.dataobject.plate.PlateDO; import com.cf.imes.module.executor.dal.dataobject.rawgoods.RawGoodsDO; import com.cf.imes.module.executor.util.deviseData.dataTwo.*; import com.cf.imes.module.system.api.dict.DictDataApi; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; -import org.springframework.stereotype.Service; -import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; import java.math.BigDecimal; @@ -44,14 +38,19 @@ public class ApiTypeChangeRealize { @Resource private DictDataApi dictDataApi; - public Map> apiPlateDataChange(JSONObject dataPlates, JSONObject dataParts, JSONObject dataBody, JSONObject dataGoods) { + public Map> apiPlateDataChange(JSONObject dataPlates, JSONObject dataParts + , JSONObject dataBody, JSONObject dataGoods + , JSONObject plates, JSONObject dataModule) { + // 上产单id + Long orderId = (Long) identifierGenerator.nextId(null); Map> map = new HashMap<>(); - return map; - } - // 板材数据转换 - public List platesInfoChange(JSONObject dataPlates) { + // raw商品数据获取 + Map> rawGoodsMap = rawGoodsInfoChange(dataGoods, orderId); //数据完整 + // 获取柜体数据转换 + Map orderBodyDOMap = bodyInfoChange(dataBody, orderId); // 缺少数量 + // 板材数据转换 List plateDetails = new ArrayList<>(); // 获取 Orders 字段对应的数组 JSONArray ordersArray = dataPlates.getJSONArray("Orders"); @@ -64,7 +63,7 @@ public class ApiTypeChangeRealize { JSONObject order = ordersArray.getJSONObject(i); // 生产单信息 - Long orderId = (Long) identifierGenerator.nextId(null); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); LocalDate orderDate = LocalDate.parse(order.getString("SaleDate"), formatter); LocalDate deliveryDate = LocalDate.parse(order.getString("DeliveryDate"), formatter); @@ -115,7 +114,7 @@ public class ApiTypeChangeRealize { .getData().getValue()); PlateDO orderPartsDO = PlateDO.builder() .id(plateId) - .goodsId(String.valueOf(goodsId)) + .goodsId(Long.valueOf(goodsId)) .orderId(orderId) .name(block.getString("BlockName")) .plateNo(block.getString("CustomNo")) @@ -144,8 +143,8 @@ public class ApiTypeChangeRealize { .isDoor(block.getInteger("OpenDoorType") == 0 ? false : true) .openDoorType(block.getInteger("OpenDoorType")) - .offsetX(block.getDouble("OffsetX")) - .offsetY(block.getDouble("OffsetY")) + .offsetX(block.getBigDecimal("OffsetX")) + .offsetY(block.getBigDecimal("OffsetY")) .isArcAcross(false) .moduleTypeId(0L) @@ -168,22 +167,22 @@ public class ApiTypeChangeRealize { .group(block.getString("ProcessGroupName")) .multiNum(1) // .groupList(getProcessGroup(block)) - .plateWidth(Double.valueOf(block.getString("Width"))) - .plateLength(Double.valueOf(block.getString("Length"))) - .acreage(Double.valueOf(block.getString("Size"))) - .splitWidth(Double.valueOf(block.getString("CuttingWidth"))) - .splitLength(Double.valueOf(block.getString("CuttingLength"))) - .sealAcreage(Double.valueOf(block.getString("CuttingSize"))) - .isUnRegular(Boolean.valueOf(block.getString("IsUnRegular"))) - .sealLeft(Double.valueOf(block.getString("BorderLeft"))) - .sealRight(Double.valueOf(block.getString("BorderRight"))) - .sealUp(Double.valueOf(block.getString("BorderUpper"))) - .sealDown(Double.valueOf(block.getString("BorderUnder"))) - .texture(Integer.valueOf(block.getString("Wave"))) + .plateWidth(block.getBigDecimal("Width")) + .plateLength(block.getBigDecimal("Length")) + .acreage(block.getBigDecimal("Size")) + .splitWidth(block.getBigDecimal("CuttingWidth")) + .splitLength(block.getBigDecimal("CuttingLength")) + .sealAcreage(block.getBigDecimal("CuttingSize")) + .isUnRegular(block.getBoolean("IsUnRegular")) + .sealLeft(block.getBigDecimal("BorderLeft")) + .sealRight(block.getBigDecimal("BorderRight")) + .sealUp(block.getBigDecimal("BorderUpper")) + .sealDown(block.getBigDecimal("BorderUnder")) + .texture(block.getInteger("Wave")) .typographicFace(Integer.valueOf(block.getString("PlaceFace"))) .openDoorType(Integer.valueOf(block.getString("OpenDoorType"))) - .offsetX(Double.valueOf(block.getString("OffsetX"))) - .offsetY(Double.valueOf(block.getString("OffsetY"))) + .offsetX(block.getBigDecimal("OffsetX")) + .offsetY(block.getBigDecimal("OffsetY")) .pointDetail(getPointDetail(block, 1)) .rawPointDetail(getPointDetail(block, 3)) .holeDetail(getHoleDetail(block, 1)) @@ -215,60 +214,275 @@ public class ApiTypeChangeRealize { System.out.println("JSON 数据中没有订单信息(Orders 数组为空)。"); } - return plateDetails; + + return map; } - // 柜体信息转换 - private List bodyInfoChange(JSONObject dataBody) { - List bodyInfos = new ArrayList<>(); + /** + * 生产单信息转换 + * + * @param dataPlates: + * @return OrderDO + * @author Administrator + * @date 2024/4/30 + */ + public OrderDO orderInfoChange(JSONObject dataPlates, Long orderId) { + List plateDetails = new ArrayList<>(); + // 获取 Orders 字段对应的数组 + JSONObject order = dataPlates.getJSONObject("Orders"); + + // 如果 Orders 数组不为空,则获取第一个订单对象 + if (order != null && !order.isEmpty()) { + // 获取生产单信息 + // 使用 DateTimeFormatter 解析日期字符串 + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + LocalDate orderDate = LocalDate.parse(order.getString("SaleDate"), formatter); + LocalDate deliveryDate = LocalDate.parse(order.getString("DeliveryDate"), formatter); + + OrderDO orderDO = OrderDO.builder() + .id(orderId) + .parentNo(0L) + .orderDate(orderDate.atStartOfDay()) + .deliveryDate(deliveryDate.atStartOfDay()) + .orderType(1) + .orderSort(0) + .dataType(2) + .status(0) + .customOrderNo(order.getString("CustomOrderNo")) + .customer(order.getString("Consigee")) + .address(order.getString("ConsigeeAddress")) + .phoneNumber(order.getString("ConsigeePhone")) + .dealer(order.getString("CustomName")) + .dealerPhoneNumber("无") + .salesman(order.getString("SalePerson")) + .splitter("无") + .remark(order.getString("Remark")) + .build(); + return orderDO; + } + return null; + } + + + /** + * raw商品信息转换 和 商品信息转换 + * + * @param dataRawGoods: + * @param orderId: + * @return Map> String 标识 , Integer:商品ID标识,RawGoodsDO:商品信息 + * @author Administrator + * @date 2024/4/30 + */ + public Map> rawGoodsInfoChange(JSONObject dataRawGoods, Long orderId) { + Map> map = new HashMap<>(); + Map rawGoodsDOS = new HashMap<>(); + Map goodsDOS = new HashMap<>(); + + dataRawGoods.getJSONArray("List").forEach(item -> { + JSONObject parts = (JSONObject) item; + RawGoodsDO rawGoodsDO = RawGoodsDO.builder() + .id((Long) identifierGenerator.nextId(null)) + .orderId(orderId) + .rawGoodsId(String.valueOf(parts.getLong("GoodsID"))) + .goodsName(parts.getString("GoodsName")) + .material(parts.getString("Material")) + .color(parts.getString("Color")) + .thickness(parts.getDouble("Thickness")) + .price(parts.getDouble("Price")) + .brand(parts.getString("Brand")) + .spec(parts.getString("Spec")) + .build(); + rawGoodsDOS.put(parts.getInteger("GoodsID"), rawGoodsDO); + + GoodsDO goodsDO = GoodsDO.builder() + .id((Long) identifierGenerator.nextId(null)) + .orderId(orderId) + .rawGoodsId(rawGoodsDO.getId()) + .goodsId(parts.getLong("GoodsID")) + .goodsName(parts.getString("GoodsName")) + .material(parts.getString("Material")) + .color(parts.getString("Color")) + .width(BigDecimal.valueOf(parts.getDouble("Width"))) + .height(BigDecimal.valueOf(parts.getDouble("Height"))) + .thickness(BigDecimal.valueOf(parts.getDouble("Thickness"))) + .price(BigDecimal.valueOf(parts.getDouble("Price"))) + .brand(parts.getString("Brand")) + .spec(parts.getString("Spec")) + .build(); + goodsDOS.put(parts.getInteger("GoodsID"), goodsDO); + }); + map.put("rawGoodsDOS", rawGoodsDOS); + map.put("goodsDOS", goodsDOS); + return map; + } + + /** + * 柜体信息转换 + * + * @param dataBody: + * @return Map Integer:柜体ID标识,OrderBodyDO:柜体信息(差数据) + * @author Administrator + * @date 2024/4/30 + */ + private Map bodyInfoChange(JSONObject dataBody, Long orderId) { + Map bodyInfos = new HashMap<>(); dataBody.getJSONArray("List").forEach(item -> { JSONObject body = (JSONObject) item; OrderBodyDO bodyInfo = OrderBodyDO.builder() .id(Long.valueOf(body.getString("BoxID")))// 差一个BoxID,没有对应的 + .orderId(orderId) .roomId(Long.valueOf(body.getString("RoomID"))) .roomName(body.getString("Room")) .name(body.getString("Name")) - .width(body.getDouble("Width")) .height(body.getDouble("Height")) .depth(body.getDouble("Depth")) + .multiNum(0) + .plateNum(0) + .unregularNum(0) + .filename("无") + .remark("无") .build(); - bodyInfos.add(bodyInfo); + bodyInfos.put(body.getInteger("BoxID"), bodyInfo); }); return bodyInfos; } - // 加工组信息筛选 - private List getProcessGroup(JSONObject block) { - List groupList = new ArrayList<>(); - if (block.getJSONObject("ExtraRemark") != null && !block.getJSONObject("ExtraRemark").isEmpty()) { - JSONObject extraRemark = block.getJSONObject("ExtraRemark"); - if (extraRemark.getJSONObject("extra") != null && !extraRemark.getJSONObject("extra").isEmpty()) { - JSONObject extra = extraRemark.getJSONObject("extra"); - if (extra.getJSONArray("processList") != null && !extra.getJSONArray("processList").isEmpty()) { - for (int i = 0; i < extra.getJSONArray("processList").size(); i++) { - JSONObject process = extra.getJSONArray("processList").getJSONObject(i); - OrderGroupDO group = OrderGroupDO.builder() -// .id - .name(process.getString("name")) - .width(Double.valueOf(process.getJSONObject("size").getString("width"))) - .height(Double.valueOf(process.getJSONObject("size").getString("height"))) - .depth(Double.valueOf(process.getJSONObject("size").getString("depth"))) - .build(); + /** + * 加工组信息转换 + * + * @param dataGroup: JSON 数据 + * @param orderId: + * @param body: 柜体信息 + * @return Map>>> Integer 柜体id , List>> 相同柜体的加工组信息 + * OrderGroupDO:加工组信息 , List:加工组中包含的板材配件信息 + * (差数据) + * @author Administrator + * @date 2024/4/30 + */ + private Map>>> groupInfoChange(JSONObject dataGroup, Long orderId + , Map body) { - groupList.add(group); - } + Map>>> groupInfosAndBodyId = new HashMap<>(); + List>> groupInfosAndItemList = new ArrayList<>(); + Map> groupInfos = new HashMap<>(); - } + dataGroup.getJSONArray("value").forEach(value -> { + JSONObject group = (JSONObject) value; + OrderGroupDO bodyInfo = OrderGroupDO.builder() + .id((Long) identifierGenerator.nextId(null))// 自动生成 + .orderId(orderId) + .bodyId(0L) + .groupTypeId(Long.valueOf(group.getInteger("ModuleTypeID"))) + .groupTypeName("无") + .name(group.getString("ModuleTypeName")) + .width(group.getDouble("Width")) + .height(group.getDouble("Length")) + .depth(group.getDouble("Thickness")) + .multiNum(0) + .plateNum(0) + .unregularNum(0) + .filename("无") + .remark("无") + .build(); + + if (body.get(group.getInteger("BoxID")) != null) { + bodyInfo.setBodyId(body.get(group.getInteger("BoxID")).getId()); + } else { + bodyInfo.setBodyId(-0L); } + groupInfos.put(bodyInfo, jsonArrayToList(group.getJSONArray("ItemIDList"))); + }); + // 遍历groupInfos,以OrderGroupDO中的bodyId为key,将groupInfosAndItemList中的value添加到groupInfosAndBodyId中 + // 遍历 groupInfos + groupInfos.forEach((groupInfo, itemList) -> { + // 获取当前分组信息的 bodyId + Long bodyId = groupInfo.getBodyId(); - } - return groupList; + // 如果 groupInfosAndBodyId 中已经存在该 bodyId,则获取对应的项目列表,否则创建一个新的列表 + List>> existingItemList = groupInfosAndBodyId.getOrDefault(bodyId, new ArrayList<>()); + + // 创建包含当前分组信息及项目列表的 Map + Map> infoAndItemList = new HashMap<>(); + infoAndItemList.put(groupInfo, itemList); + + // 将当前的分组信息及项目列表添加到列表中 + existingItemList.add(infoAndItemList); + + // 更新 groupInfosAndBodyId 中的映射关系 + groupInfosAndBodyId.put(bodyId, existingItemList);// 有问题 + }); + return groupInfosAndBodyId; } + /** + * JSONArray转List + */ + public List jsonArrayToList(JSONArray jsonArray) { + List list = new ArrayList<>(); + for (int i = 0; i < jsonArray.size(); i++) { + list.add(jsonArray.getInteger(i)); + } + return list; + } + + /** + * 配件信息转存 + * + * @param value: JSON数据 + * @param orderId: + * @param group: 加工组信息 + * @return List + * @author Administrator + * @date 2024/4/30 + */ + public List partsInfoChange(JSONObject value, Long orderId, Map> group) { + List partsInfos = new ArrayList<>(); + + if (value != null && !value.isEmpty()) { + JSONArray partsLists = value.getJSONArray("List"); + for (int i = 0; i < partsLists.size(); i++) { + JSONObject parts = partsLists.getJSONObject(i); + PartsInfo partsInfo = PartsInfo.builder() + .id(parts.getString("DataID")) + .name(parts.getString("Name")) + .roomName(parts.getString("RoomName")) + .bodyName(parts.getString("BoxName")) + .bodyNo(parts.getInteger("BoxID")) + .multiNum(Integer.valueOf(parts.getString("MultiNum"))) + .goodsNo(parts.getString("GoodsNo")) + .goodId(Long.valueOf(parts.getString("GoodsID"))) + .material(parts.getString("material")) + .color(parts.getString("color")) + .factory(parts.getString("Factory")) + .brand(parts.getString("Brand")) + .model(parts.getString("Model")) + .unit(parts.getString("Units")) + .price(parts.getDouble("Price")) + .isComposite(Boolean.valueOf(parts.getString("IsComposite"))) + .groupName(parts.getString("GroupName")) + .objectType(parts.getString("ObjectType")) + .objectSpecExtras(parts.getString("SpecExtras")) + .goodsNumber(Double.valueOf(parts.getString("GoodsNumber"))) + .doorRemark(parts.getString("DoorRemark")) + .hingeRemark(parts.getString("HingeRemark")) + .specialRemark(parts.getString("SpecialRemark")) + .remark(parts.getString("Remark")) + .processGroup(parts.getString("ProcessGroup")) + .build(); + partsInfos.add(partsInfo); + } + } + // 配件信息转换成 柜体id,配件信息 + Map> partsInfoMap = partsInfos.stream().collect(Collectors.groupingBy(PartsInfo::getBodyNo)); + System.out.println(" partsInfos " + partsInfos); + return partsInfos; + } + + // 异形板的开料轮廓 (type 为1,不含封边;其他为,含封边) private List getPointDetail(JSONObject block, Integer type) { List pointDetailList = new ArrayList<>(); diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/api/webcad/ApiTypeRealize.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/api/webcad/ApiTypeRealize.java new file mode 100644 index 000000000..da6c13c51 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/api/webcad/ApiTypeRealize.java @@ -0,0 +1,780 @@ +package com.cf.imes.module.executor.util.fileConversion.admin.api.webcad; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator; +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.orderGroup.OrderGroupDO; +import com.cf.imes.module.executor.dal.dataobject.orderItem.OrderItemDO; +import com.cf.imes.module.executor.dal.dataobject.orderParts.OrderPartsDO; +import com.cf.imes.module.executor.dal.dataobject.plate.PlateDO; +import com.cf.imes.module.executor.dal.dataobject.rawgoods.RawGoodsDO; +import com.cf.imes.module.executor.util.deviseData.dataTwo.*; +import com.cf.imes.module.system.api.dict.DictDataApi; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.*; +import java.util.concurrent.atomic.AtomicReference; +import java.util.function.BiConsumer; +import java.util.stream.Collectors; + +/** + * 实现数据格式转换 + * 使用自带id + */ +@Slf4j +@Component +public class ApiTypeRealize { + + @Resource + private IdentifierGenerator identifierGenerator; + + @Resource + private DictDataApi dictDataApi; + + /** + * @param dataPlates: 板件生产信息 + * @param dataParts: 配件信息 + * @param dataBody: 柜体信息 + * @param dataGoods: 商品信息 + * @param plates: 板件信息 + * @param dataModule: 加工组信息 + * @return Map> + * @author Administrator + * @date 2024/5/6 + */ + public Map> apiPlateDataChange(JSONObject dataPlates, JSONObject dataParts + , JSONObject dataBody, JSONObject dataGoods + , JSONObject plates, JSONObject dataModule) { + + Map> map = new HashMap<>(); + + // 生产单id + Long orderId = (Long) identifierGenerator.nextId(null); + + // 生产单数据 + OrderDO orderDO = orderInfoChange(dataPlates, orderId); + List order = new ArrayList<>(); + order.add(orderDO); + // 商品信息数据 信息以全 + Map> goodsInfoChange = rawGoodsInfoChange(dataGoods, orderId); +// System.out.println(" goodsInfoChange " + goodsInfoChange); + List goodsDO = (List) goodsInfoChange.get("goodsDOS").values().stream() + .collect(Collectors.toList()); + map.put("goodsDO", goodsDO); + List rawGoodsDO = (List) goodsInfoChange.get("rawGoodsDOS").values().stream() + .collect(Collectors.toList()); + map.put("rawGoodsDO", rawGoodsDO); + // 柜体信息 少异形数量、板材数量 + Map bodyInfoChange = bodyInfoChange(dataBody, orderId); +// System.out.println(" bodyInfoChange " + bodyInfoChange); + // 加工组 少异形数量、板材数量 + Map> group = groupInfoChange(dataModule, orderId, bodyInfoChange); + Map orderGroupDO = (Map) group.get("orderGroup"); + map.put("groupDO", orderGroupDO.values().stream().collect(Collectors.toList())); + Map> groupLists = (Map>) group.get("lists"); + // 配件 + Map> partsDO = partsInfoChange(dataParts, orderId, + (Map) goodsInfoChange.get("goodsDOS"), bodyInfoChange); + Map orderPartsDO = (Map) partsDO.get("partsInfos"); + map.put("partsDO", orderPartsDO.values().stream().collect(Collectors.toList())); + Map partsItems = (Map) partsDO.get("partsItems"); + + List itemsList = new ArrayList<>(); + partsItems = orderPartsChange(bodyInfoChange, orderGroupDO, groupLists, partsItems);// item补充 + itemsList.addAll(partsItems.values()); + // 板材 写库 + Map> platesDO = platesInfoChange(dataPlates, plates, orderId, + (Map) goodsInfoChange.get("goodsDOS"), bodyInfoChange); + Map orderPlatesDO = (Map) platesDO.get("platesInfos"); + map.put("platesDO", orderPlatesDO.values().stream().collect(Collectors.toList())); + map.put("plateDetail", platesDO.get("plateDetail").values().stream().collect(Collectors.toList())); + Map platesItems = (Map) platesDO.get("platesItems"); + Map bodyItemsPlates= (Map) platesDO.get("bodyInfos"); + platesItems = orderPartsChange(bodyInfoChange, orderGroupDO, groupLists, platesItems);// item补充 + itemsList.addAll(platesItems.values()); +// System.out.println("生产单数据 " + orderDO+ " 商品信息1 " + goodsDO + " 商品信息2 " +// + rawGoodsDO + " 板材信息 " + new ArrayList<>(orderPlatesDO.values()) +// + " 配件信息 " + new ArrayList<>(orderPartsDO.values()) +// + " 柜体信息 " + new ArrayList<>(bodyInfoChange.values()) +// + " 加工组信息 " + orderGroupDO +// + " 配件Item " + partsItems + " 板材Item " + platesItems); + map.put("orderDO", order); + map.put("itemDO", itemsList); + System.out.println(" bodyItemsPlates " + bodyItemsPlates); + map.put("bodyDO", bodyItemsPlates.values().stream().collect(Collectors.toList())); + return map; + } + + + /** + * @param bodyInfoChange: BoxId body + * @param orderGroupDO: ModuleID group + * @param groupLists: ModuleID 板材、配件id + * @param partsItems: ItemID item + * @return Map + * @author Administrator + * @date 2024/5/8 + */ + public Map orderPartsChange(Map bodyInfoChange, Map orderGroupDO, + Map> groupLists, Map partsItems) { + + groupLists.forEach((k, v) -> { + AtomicReference groupNum = new AtomicReference<>(0); + v.forEach(v1 -> { + if (partsItems.get(v1) != null) { + partsItems.get(v1).setGroupId(orderGroupDO.get(k).getId()); + groupNum.getAndSet(groupNum.get() + 1); + } + }); + orderGroupDO.get(k).setPlateNum(groupNum.get()); + }); + +// partsItems.forEach((k, v) -> { +// if (bodyInfoChange.get(Integer.parseInt(String.valueOf(v.getBodyId()))) != null) { +// v.setRoomId(bodyInfoChange.get(Integer.parseInt(String.valueOf(v.getBodyId()))).getRoomId()); +// } +// }); + return partsItems; + } + + /** + * 柜体,加工组板材数量添加 !!!!!!!!!!!!!! + */ + + /** + * 加工组 信息转换 + */ + private Map> groupInfoChange(JSONObject dataModule, Long orderId, Map bodyInfoChange) { + Map> map = new HashMap<>(); + Map orderGroupDOs = new HashMap<>();// 加工组id 和 加工组信息 + Map> groupLists = new HashMap<>();// 加工组id 和 详细信息 + + + if (dataModule.getJSONArray("value") != null && + !dataModule.getJSONArray("value").isEmpty()) { + JSONArray groupsLists = dataModule.getJSONArray("value"); + for (int i = 0; i < groupsLists.size(); i++) { + JSONObject group = groupsLists.getJSONObject(i); + + OrderGroupDO bodyInfo = OrderGroupDO.builder() + .id((Long) identifierGenerator.nextId(null)) + .orderId(orderId) + .bodyId(bodyInfoChange.get(group.getInteger("BoxID")).getId())//group.getLong("BoxID") + .groupTypeId(Long.valueOf(group.getInteger("ModuleTypeID"))) + .groupTypeName("无") + .name(group.getString("ModuleTypeName")) + .width(group.getDouble("Width")) + .height(group.getDouble("Length")) + .depth(group.getDouble("Thickness")) + .multiNum(0) + .plateNum(0) + .unregularNum(0) + .filename("无") + .remark("无") + .build(); + groupLists.put(group.getInteger("ModuleID"), jsonArrayToList(group.getJSONArray("ItemIDList"))); + orderGroupDOs.put(group.getInteger("ModuleID"), bodyInfo); + } + } + + map.put("lists", groupLists); + map.put("orderGroup", orderGroupDOs); + return map; + } + + /** + * 生产单信息转换 + * + * @param dataPlates: + * @return OrderDO + * @author Administrator + * @date 2024/4/30 + */ + public OrderDO orderInfoChange(JSONObject dataPlates, Long orderId) { + // 获取 Orders 字段对应的数组 + JSONObject order = dataPlates.getJSONArray("Orders").getJSONObject(0); + + // 如果 Orders 数组不为空,则获取第一个订单对象 + if (order != null && !order.isEmpty()) { + // 获取生产单信息 + // 使用 DateTimeFormatter 解析日期字符串 + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + LocalDate orderDate = LocalDate.parse(order.getString("SaleDate"), formatter); + LocalDate deliveryDate = LocalDate.parse(order.getString("DeliveryDate"), formatter); + + OrderDO orderDO = OrderDO.builder() + .id(orderId) + .parentNo(0L) + .orderDate(orderDate.atStartOfDay()) + .deliveryDate(deliveryDate.atStartOfDay()) + .orderType(1) + .orderSort(0) + .dataType(2) + .status(0) + .customOrderNo(order.getString("CustomOrderNo")) + .customer(order.getString("Consigee")) + .address(order.getString("ConsigeeAddress")) + .phoneNumber(order.getString("ConsigeePhone")) + .dealer(order.getString("CustomName")) + .dealerPhoneNumber("无") + .salesman(order.getString("SalePerson")) + .splitter("无") + .remark(order.getString("Remark")) + .build(); + return orderDO; + } + return null; + } + + + /** + * raw商品信息转换 和 商品信息转换 + * + * @param dataRawGoods: + * @param orderId: + * @return Map> String 标识 , Integer:商品ID标识,RawGoodsDO:商品信息 + * @author Administrator + * @date 2024/4/30 + */ + public Map> rawGoodsInfoChange(JSONObject dataRawGoods, Long orderId) { + Map> map = new HashMap<>(); + Map rawGoodsDOS = new HashMap<>(); + Map goodsDOS = new HashMap<>(); + + if (dataRawGoods.getJSONObject("value").getJSONArray("List") != null && + !dataRawGoods.getJSONObject("value").getJSONArray("List").isEmpty()) { + JSONArray goodsLists = dataRawGoods.getJSONObject("value").getJSONArray("List"); + for (int i = 0; i < goodsLists.size(); i++) { + JSONObject goods = goodsLists.getJSONObject(i); + + RawGoodsDO rawGoodsDO = RawGoodsDO.builder() + .id((Long) identifierGenerator.nextId(null)) + .orderId(orderId) + .rawGoodsId(String.valueOf(goods.getLong("GoodsID"))) + .goodsName(goods.getString("GoodsName")) + .material(goods.getString("Material")) + .color(goods.getString("Color")) + .thickness(goods.getDouble("Thickness")) + .price(goods.getDouble("Price")) + .brand(goods.getString("Brand")) + .spec(goods.getString("Spec")) + .build(); + rawGoodsDOS.put(goods.getInteger("GoodsID"), rawGoodsDO); + + GoodsDO goodsDO = GoodsDO.builder() + .id((Long) identifierGenerator.nextId(null)) + .orderId(orderId) + .rawGoodsId(rawGoodsDO.getId()) + .goodsId(goods.getLong("GoodsID")) + .goodsName(goods.getString("GoodsName")) + .material(goods.getString("Material")) + .color(goods.getString("Color")) + .width(BigDecimal.valueOf(goods.getDouble("Width"))) + .height(BigDecimal.valueOf(goods.getDouble("Height"))) + .thickness(BigDecimal.valueOf(goods.getDouble("Thickness"))) + .price(BigDecimal.valueOf(goods.getDouble("Price"))) + .brand(goods.getString("Brand")) + .spec(goods.getString("Spec")) + .build(); + goodsDOS.put(goods.getInteger("GoodsID"), goodsDO); + + } + } + + map.put("rawGoodsDOS", rawGoodsDOS); + map.put("goodsDOS", goodsDOS); + return map; + } + + /** + * 柜体信息转换 + * + * @param dataBody: + * @return Map Integer:柜体ID标识,OrderBodyDO:柜体信息(差数据) + * @author Administrator + * @date 2024/4/30 + */ + private Map bodyInfoChange(JSONObject dataBody, Long orderId) { + Map bodyInfos = new HashMap<>(); + + if (dataBody.getJSONObject("value").getJSONArray("List") != null && + !dataBody.getJSONObject("value").getJSONArray("List").isEmpty()) { + JSONArray bodyLists = dataBody.getJSONObject("value").getJSONArray("List"); + for (int i = 0; i < bodyLists.size(); i++) { + JSONObject body = bodyLists.getJSONObject(i); + OrderBodyDO bodyInfo = OrderBodyDO.builder() + .id((Long) identifierGenerator.nextId(null)) + .orderId(orderId) + .roomId(Long.valueOf(body.getString("RoomID"))) + .roomName(body.getString("Room")) + .name(body.getString("Name")) + .width(body.getDouble("Width")) + .height(body.getDouble("Height")) + .depth(body.getDouble("Depth")) + .multiNum(0) + .plateNum(0) + .unregularNum(0) + .filename("无") + .remark("无") + .build(); + bodyInfos.put(body.getInteger("BoxID"), bodyInfo); + + } + } + + return bodyInfos; + } + + + /** + * JSONArray转List + */ + public List jsonArrayToList(JSONArray jsonArray) { + List list = new ArrayList<>(); + for (int i = 0; i < jsonArray.size(); i++) { + list.add(jsonArray.getInteger(i)); + } + return list; + } + + /** + * 配件信息转存 还没有存备注!!!!!!!!!!!!!!!!!!!! + * + * @param value: JSON数据 + * @param orderId: + * @param goodsDOMap: + * @return Map Integer指配件的dataId标识id + * @author Administrator + * @date 2024/4/30 + */ + public Map> partsInfoChange(JSONObject value, Long orderId, Map goodsDOMap, Map bodyInfos) { + Map> map = new HashMap<>(); + Map partsInfos = new HashMap<>(); + Map partsItem = new HashMap<>(); + + if (value != null && !value.isEmpty()) { + JSONArray partsLists = value.getJSONObject("value").getJSONArray("List"); + for (int i = 0; i < partsLists.size(); i++) { + JSONObject parts = partsLists.getJSONObject(i); + Long partsId = (Long) identifierGenerator.nextId(null); + OrderPartsDO partsInfo = OrderPartsDO.builder() + .id(partsId) + .orderId(orderId) + .goodsId(String.valueOf(goodsDOMap.get(parts.getInteger("GoodsID")) != null + ? goodsDOMap.get(parts.getInteger("GoodsID")).getId() : parts.getInteger("GoodsID"))) + .name(parts.getString("Name")) + .material(String.valueOf(goodsDOMap.get(parts.getInteger("GoodsID")) != null + ? goodsDOMap.get(parts.getInteger("GoodsID")).getMaterial() : "")) + .type(parts.getString("ObjectType")) + .model(parts.getString("Model")) + .spec(parts.getString("Spec")) + .brand(parts.getString("Brand")) + .factory(parts.getString("Factory")) + .unit(parts.getString("Units")) + .price(parts.getDouble("Price")) + .isComposite(parts.getBoolean("IsComposite")) + .remark(parts.getString("SpecExtras")) + .build(); + partsInfos.put(parts.getInteger("DataID"), partsInfo); + + // item 明细 + OrderItemDO item = OrderItemDO.builder() + .id((Long) identifierGenerator.nextId(null)) + .orderId(orderId) + .type(2) + .roomId(bodyInfos.get(parts.getInteger("BoxID")).getRoomId()) + .bodyId(bodyInfos.get(parts.getInteger("BoxID")).getId()) + .planId(0L) + .packageId(0L) + .groupId(0L) + .partsId(partsId) + .num(parts.getDouble("Num")) + .build(); + partsItem.put(parts.getInteger("DataID"), item); + } + } + + map.put("partsInfos", partsInfos); + map.put("partsItems", partsItem); + return map; + } + + private Integer num = 0; + /** + * 板材信息转换 写表 Integer指板材的ItemID板id 还没有存备注!!!!!!!!!!!!!!!!!!!! + */ + private Map> platesInfoChange(JSONObject value, JSONObject dataPlates, Long orderId, Map goodsDOMap, Map bodyInfos) { + // 板材 写ES + Map plateDetail = platesDetailChange(value); + + Map> map = new HashMap<>(); + Map platesInfos = new HashMap<>(); + Map platesItem = new HashMap<>(); + + if (dataPlates.getJSONObject("value") != null && + !dataPlates.getJSONObject("value").isEmpty()) { + JSONArray plateLists = dataPlates.getJSONObject("value").getJSONArray("List"); + for (int i = 0; i < plateLists.size(); i++) { + JSONObject plate = plateLists.getJSONObject(i); + + Integer type = Integer.valueOf(dictDataApi.parseDictData("order_plate_type", + plate.getString("BoardType")) + .getData().getValue()); + Long plateId = (Long) identifierGenerator.nextId(null); + PlateDO plateInfo = PlateDO.builder() + .id(plateId) + .orderId(orderId) + .name(plate.getString("BoardName")) + .plateNo(plate.getString("CustBlockNo")) + .type(type) + .goodsId(goodsDOMap.get(plate.getInteger("GoodsID")) != null + ? goodsDOMap.get(plate.getInteger("GoodsID")).getId() : plate.getInteger("GoodsID")) + .width(BigDecimal.valueOf(plate.getDouble("CutWidth"))) + .height(BigDecimal.valueOf(plate.getDouble("CutWidth"))) + .thickness(goodsDOMap.get(plate.getInteger("GoodsID")) != null + ? goodsDOMap.get(plate.getInteger("GoodsID")).getThickness() : BigDecimal.valueOf(0L)) + .splitHeight(BigDecimal.valueOf(plate.getDouble("SpliteHeight"))) + .splitThickness(BigDecimal.valueOf(plate.getDouble("SpliteThickness"))) + .splitWidth(BigDecimal.valueOf(plate.getDouble("SpliteWidth"))) + .sealLeft(BigDecimal.valueOf(plate.getDouble("SealedLeft"))) + .sealRight(BigDecimal.valueOf(plate.getDouble("SealedRight"))) + .sealUp(BigDecimal.valueOf(plate.getDouble("SealedUp"))) + .sealDown(BigDecimal.valueOf(plate.getDouble("SealedDown"))) + .area(plateDetail.get(plate.getInteger("BlockNo")).getSealAcreage()) + .texture(plateDetail.get(plate.getInteger("BlockNo")).getTexture()) + .holeFace(0) + .holeArrange(0) + .unregularPointCount(0) + .frontHoleCount(plate.getInteger("FrontHoleCount")) + .sideHoleCount(plate.getInteger("BackHoleCount")) + .sideHoleCount(plate.getInteger("SideHoleCount")) + .frontModelCount(plate.getInteger("FrontModelCount")) + .backModelCount(plate.getInteger("BackModelCount")) + .isDoor(plateDetail.get(plate.getInteger("BlockNo")).getOpenDoorType() == 0) + .openDoorType(plate.getInteger("OpenDoorType")) + .offsetX(plateDetail.get(plate.getInteger("BlockNo")).getOffsetX()) + .offsetY(plateDetail.get(plate.getInteger("BlockNo")).getOffsetY()) + .isArcAcross(false) + .moduleTypeId(0L) + .isSculpt(plate.getBoolean("IsModel")) + .isSpecialShaped(plate.getBoolean("UnRegular")) + .isCancel(false) + .remark("无") + .build(); + + // item 明细 + OrderItemDO itemPlate = OrderItemDO.builder() + .id((Long) identifierGenerator.nextId(null)) + .orderId(orderId) + .type(1) + .roomId(bodyInfos.get(plate.getInteger("BoxID")).getRoomId()) + .bodyId(bodyInfos.get(plate.getInteger("BoxID")).getId()) + .planId(0L) + .packageId(0L) + .groupId(0L) + .partsId(0L) + .plateId(plateId) + .num(0.0) + .build(); + + if (plateDetail.get(plate.getInteger("BlockNo")) != null) { + plateDetail.get(plate.getInteger("BlockNo")).setId(plateId); + } + platesInfos.put(plate.getInteger("ItemID"), plateInfo); + platesItem.put(plate.getInteger("ItemID"), itemPlate); + + } + } + + List platesList = platesItem.values().stream().collect(Collectors.toList()); + Map> platesDetail = platesList.stream() + .collect(Collectors.groupingBy(OrderItemDO::getBodyId)); + // 遍历platesDetail + + platesDetail.forEach((k, v) -> { + Integer specialShapedNum = 0; + v.forEach(item -> { + num++; + }); + bodyInfos.forEach((n, m) -> { + if (k==m.getId()){ + m.setPlateNum(num); + } + }); + }); + System.err.println(bodyInfos); + map.put("platesInfos", platesInfos); + map.put("platesItems", platesItem); + map.put("plateDetail", plateDetail); + map.put("bodyInfos", bodyInfos); + return map; + } + + /** + * 板材数据转换成PlateDetail Integer指BlockID板id + */ + public Map platesDetailChange(JSONObject dataPlates) { + Map plateDetails = new HashMap<>(); + // 获取 Orders 字段对应的数组 + JSONArray ordersArray = dataPlates.getJSONArray("Orders"); +// System.err.println(dataPlates); + if (ordersArray != null && !ordersArray.isEmpty()) { + for (int i = 0; i < ordersArray.size(); i++) { + JSONObject order = ordersArray.getJSONObject(i); + // 获取材料信息 + if (order.getJSONArray("Materials") != null && !order.getJSONArray("Materials").isEmpty()) { + for (int j = 0; j < order.getJSONArray("Materials").size(); j++) { + JSONObject material = order.getJSONArray("Materials").getJSONObject(j); +// goodsMap.put() + // 板件信息 + if (material.getJSONArray("Blocks") != null && !material.getJSONArray("Blocks").isEmpty()) { + for (int k = 0; k < material.getJSONArray("Blocks").size(); k++) { + JSONObject block = material.getJSONArray("Blocks").getJSONObject(k);// 每块板 + + PlateDetail plateDetail = PlateDetail.builder() + .bodyNo(block.getString("BoxNo")) + .plateNo(block.getString("BlockNo")) + .name(block.getString("BlockName")) + .customPlateNo(block.getString("CustomNo")) + .roomsName(block.getString("RoomName")) + .bodyName(block.getString("BoxName")) + .group(block.getString("ProcessGroupName")) + .multiNum(1) + .plateWidth(block.getBigDecimal("Width")) + .plateLength(block.getBigDecimal("Length")) + .acreage(block.getBigDecimal("Size")) + .splitWidth(block.getBigDecimal("CuttingWidth")) + .splitLength(block.getBigDecimal("CuttingLength")) + .sealAcreage(block.getBigDecimal("CuttingSize")) + .isUnRegular(block.getBoolean("IsUnRegular")) + .sealLeft(block.getBigDecimal("BorderLeft")) + .sealRight(block.getBigDecimal("BorderRight")) + .sealUp(block.getBigDecimal("BorderUpper")) + .sealDown(block.getBigDecimal("BorderUnder")) + .texture(block.getInteger("Wave")) + .typographicFace(Integer.valueOf(block.getString("PlaceFace"))) + .openDoorType(Integer.valueOf(block.getString("OpenDoorType"))) + .offsetX(block.getBigDecimal("OffsetX")) + .offsetY(block.getBigDecimal("OffsetY")) + .pointDetail(getPointDetail(block, 1)) + .rawPointDetail(getPointDetail(block, 3)) + .holeDetail(getHoleDetail(block, 1)) + .sideHoleDetail(getHoleDetail(block, 3)) + .contourDetail(getModelDetail(block)) +// 排钻类型 + .drillsInfos(getDrillsInfo(block)) + .build(); + + if (block.getJSONObject("ExtraRemark") != null) { + if (block.getJSONObject("ExtraRemark").getJSONObject("extra") != null) + plateDetail.setBoardType(block.getJSONObject("ExtraRemark").getJSONObject("extra").getString("boardType")) + .setThroughHoleCount(Double.valueOf(block.getJSONObject("ExtraRemark").getJSONObject("extra").getString("throughHoleCount"))) + .setThroughModelCount(Double.valueOf(block.getJSONObject("ExtraRemark").getJSONObject("extra").getString("throughModelCount"))) + .setHas2DModel(Boolean.valueOf(block.getJSONObject("ExtraRemark").getJSONObject("extra").getString("has2DModel"))) + .setHas3DModel(Boolean.valueOf(block.getJSONObject("ExtraRemark").getJSONObject("extra").getString("has3DModel"))) + .setRemark(remarkToMap(block)) + .setSideRemark(edgeRemarkToMap(block.getJSONObject("ExtraRemark").getJSONObject("extra"))); + } + plateDetails.put(block.getInteger("BlockNo"), plateDetail); + } + } + } + + } +// System.out.println("板块 " + plateDetails); + } + + } else { + System.out.println("JSON 数据中没有订单信息(Orders 数组为空)。"); + } + + return plateDetails; + } + + + // 异形板的开料轮廓 (type 为1,不含封边;其他为,含封边) + private List getPointDetail(JSONObject block, Integer type) { + List pointDetailList = new ArrayList<>(); + + if (type == 1) { // 不含封边 + if (block.getJSONArray("Points") != null && !block.getJSONArray("Points").isEmpty()) { + for (int i = 0; i < block.getJSONArray("Points").size(); i++) { + JSONObject point = block.getJSONArray("Points").getJSONObject(i); + pointDetailList.add(PointDetail.builder() + .pointX(Double.valueOf(point.getString("X"))) + .pointY(Double.valueOf(point.getString("Y"))) + .curve(Double.valueOf(point.getString("Curve"))) + .build()); + } + } + } else { // 含封边 + if (block.getJSONArray("OrgPoints") != null && !block.getJSONArray("OrgPoints").isEmpty()) { + for (int i = 0; i < block.getJSONArray("OrgPoints").size(); i++) { + JSONObject rawPoint = block.getJSONArray("OrgPoints").getJSONObject(i); + pointDetailList.add(PointDetail.builder() + .pointX(Double.valueOf(rawPoint.getString("X"))) + .pointY(Double.valueOf(rawPoint.getString("Y"))) + .curve(Double.valueOf(rawPoint.getString("Curve"))) + .sealSize(Double.valueOf(rawPoint.getString("Edge"))) + .build()); + + } + } + } + return pointDetailList; + } + + // 孔明细板数据解析 (type 为1,正面;3,侧面) + private List getHoleDetail(JSONObject block, Integer type) { + List holeDetails = new ArrayList<>(); + if (type == 1) { // 1,正面 + if (block.getJSONArray("Holes") != null && !block.getJSONArray("Holes").isEmpty()) { + for (int i = 0; i < block.getJSONArray("Holes").size(); i++) { + JSONObject hole = block.getJSONArray("Holes").getJSONObject(i); + holeDetails.add(HoleDetail.builder() + .startX(Double.valueOf(hole.getString("X"))) + .startY(Double.valueOf(hole.getString("Y"))) + .faceType(1) + .radius(Double.valueOf(hole.getString("Diameter")) / 2) + .depth(Double.valueOf(hole.getString("Depth"))) + .build()); + } + } + } else { + if (block.getJSONArray("SideHoles") != null && !block.getJSONArray("SideHoles").isEmpty()) { + for (int i = 0; i < block.getJSONArray("SideHoles").size(); i++) { + JSONObject hole = block.getJSONArray("SideHoles").getJSONObject(i); + String[] startPoints = splitAndTrim(hole.getString("StartPoint")); + String[] endPoints = splitAndTrim(hole.getString("EndPoint")); + try { + holeDetails.add(HoleDetail.builder() + .startX(Double.valueOf(startPoints[0])) + .startY(Double.valueOf(startPoints[1])) + .startZ(Double.valueOf(startPoints[2])) + .endX(Double.valueOf(endPoints[0])) + .endY(Double.valueOf(endPoints[1])) + .endZ(Double.valueOf(endPoints[2])) + .faceType(3) + .radius(Double.valueOf(hole.getString("Diameter")) / 2) + .depth(Double.valueOf(hole.getString("Depth"))) + .build()); + } catch (Exception e) { + System.out.println("HoleDetail " + hole); + } + + } + } + } + + return holeDetails; + } + + // 造型明细板数据解析 (type 为1,正面;3,侧面) + private List getModelDetail(JSONObject block) { + List modelDetails = new ArrayList<>(); + + if (block.getJSONArray("Models") != null && !block.getJSONArray("Models").isEmpty()) { + for (int i = 0; i < block.getJSONArray("Models").size(); i++) { + JSONObject model = block.getJSONArray("Models").getJSONObject(i); + + List pointLists = new ArrayList<>(); + if (model.getJSONArray("Points") != null && !model.getJSONArray("Points").isEmpty()) { + for (int j = 0; j < model.getJSONArray("Points").size(); j++) { + JSONObject point = model.getJSONArray("Points").getJSONObject(j); + String[] points = splitAndTrim(point.getString("Pos")); + pointLists.add(PointList.builder() + .pointX(Double.valueOf(points[0])) + .pointY(Double.valueOf(points[1])) + .pointZ(Double.valueOf(points[2])) + .curve(Double.valueOf(point.getString("Curve"))) + .build()); + } + } + + List offSetLists = new ArrayList<>(); + if (model.getJSONArray("OffsetList") != null && !model.getJSONArray("OffsetList").isEmpty()) { + for (int j = 0; j < model.getJSONArray("OffsetList").size(); j++) { + JSONObject offSet = model.getJSONArray("OffsetList").getJSONObject(j); + offSetLists.add(OffSetList.builder() + .value(Double.valueOf(offSet.getString("Value"))) + .name(offSet.getString("Name")) + .radius(Double.valueOf(offSet.getString("Diameter")) / 2) + .angle(Double.valueOf(offSet.getString("Angle"))) + .depth(Double.valueOf(offSet.getString("Depth"))) + .build()); + } + } + modelDetails.add(ModelDetail.builder() + .depth(Double.valueOf(model.getString("Depth"))) + .faceType(Integer.valueOf(model.getString("Face"))) + .knifeName(model.getString("TooINo")) + .knifeRadius(Double.valueOf(model.getString("Diameter")) / 2) + .pointList(pointLists) + .offSetList(offSetLists) + .build()); + } + } + + return modelDetails; + } + + // 排钻数据 + private List getDrillsInfo(JSONObject block) { + List drillsInfos = new ArrayList<>(); + + if (block.getJSONArray("drills") != null && !block.getJSONArray("drills").isEmpty()) { + for (int i = 0; i < block.getJSONArray("drills").size(); i++) { + JSONObject drill = block.getJSONArray("drills").getJSONObject(i); + drillsInfos.add(DrillsInfo.builder() + .name(drill.getString("name")) + .type(drill.getString("type")) + .face(drill.getString("face")) + .count(Double.valueOf(drill.getString("count"))) + .build()); + } + } + return drillsInfos; + } + + // String[] 以逗号分割,去空格 + public String[] splitAndTrim(String str) { + String[] strs = str.split(","); + for (int i = 0; i < strs.length; i++) { + strs[i] = strs[i].trim(); + } + return strs; + } + + + // 将remark转为map + public Map remarkToMap(JSONObject block) { + Map map = new HashMap<>(); + for (int i = 0; i < 4; i++) { + if (block.getString("remark" + i) != null && !block.getString("remark" + i).isEmpty()) { + map.put("remark" + i, block.getString("remark" + i)); + } + } + return map; + } + + // 将remark转为map + public Map edgeRemarkToMap(JSONObject edgeRemark) { + Map map = new HashMap<>(); + if (edgeRemark.getJSONArray("edgeRemarks") != null && !edgeRemark.getJSONArray("edgeRemarks").isEmpty()) { + for (int i = 0; i < edgeRemark.getJSONArray("edgeRemarks").size(); i++) { + if (edgeRemark.getJSONArray("edgeRemarks").getString(i) != null && !edgeRemark.getJSONArray("edgeRemarks").getString(i).isEmpty()) { + map.put(String.valueOf(i), edgeRemark.getJSONArray("edgeRemarks").getString(i)); + } + } + } + return map; + } +} \ No newline at end of file diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/process/ProcessGroupServiceImpl.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/process/ProcessGroupServiceImpl.java index 57c91ba91..46b9b1654 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/process/ProcessGroupServiceImpl.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/process/ProcessGroupServiceImpl.java @@ -129,7 +129,9 @@ public class ProcessGroupServiceImpl implements ProcessGroupService { List processGroupDOList = processGroupMapper.selectList(new LambdaQueryWrapperX() .likeIfPresent(ProcessGroupDO::getName, name) .eq(ProcessGroupDO::getOrganId, OrganContextHolder.getOrganId()) - .select(ProcessGroupDO::getId, ProcessGroupDO::getName)); + .select(ProcessGroupDO::getId, ProcessGroupDO::getName, + ProcessGroupDO::getIsDefault, ProcessGroupDO::getSort, ProcessGroupDO::getDescription, + ProcessGroupDO::getItems, ProcessGroupDO::getCreateTime, ProcessGroupDO::getUpdateTime)); return BeanUtils.toBean(processGroupDOList, ProcessGroupRespVO.class); }