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 b452c75e9..17ed7e017 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 @@ -47,6 +47,7 @@ public class ErrorCodeConstants { public static final ErrorCode ORDER_BODY_NOT_EXISTS = new ErrorCode(1_002_029_004, "当前柜体不存在"); public static final ErrorCode RAW_GOODS_NOT_EXISTS = new ErrorCode(1_002_029_005, "生产单中未用到此板材"); public static final ErrorCode APP_TOKEN_ERROR = new ErrorCode(1_002_029_007, "token获取失败"); + public static final ErrorCode ORDER_NOT_FOUND = new ErrorCode(1_002_029_006, "生产单不存在"); public static final ErrorCode PLATE_PLAN_DATA_ERROR = new ErrorCode(1_002_029_008, "板材生产数据获取错误或此单不存在"); public static final ErrorCode PLATE_PLAN_DATA_NULL = new ErrorCode(1_002_029_008, "板材生产源数据为空"); public static final ErrorCode PARTS_DATA_ERROR = new ErrorCode(1_002_029_009, "配件数据获取错误"); @@ -56,10 +57,13 @@ public class ErrorCodeConstants { public static final ErrorCode ORDER_STATUS_CONFLICT = new ErrorCode(1_002_029_006, "生产单状态冲突,禁止投入生产"); public static final ErrorCode ORDER_READ_ERR = new ErrorCode(1_002_029_006, "订单列表获取失败,请刷新重试"); public static final ErrorCode ORDER_DATE_ERR = new ErrorCode(1_002_029_006, "获取订单列表,时间超出范围,请在30天范围内选择"); + public static final ErrorCode ORDER_DETAIL_DATE_ERR = new ErrorCode(1_002_029_006, "板件造型数据对应有无,请重新上传"); public static final ErrorCode SOURCE_NOT_EXITS_ERROR = new ErrorCode(1_002_029_013, "源数据查询失败"); public static final ErrorCode ORDER_DELETED_ERR = new ErrorCode(1_002_029_006, "生产单删除失败"); public static final ErrorCode ORDER_RESTORE_ERR = new ErrorCode(1_002_029_006, "生产单还原失败"); + public static final ErrorCode DATA_ERR = new ErrorCode(1_002_030_000, "当前正在导入,请稍后"); + public static final ErrorCode LOCK_ERR = new ErrorCode(1_002_030_001, "当前存在导入情况,请稍后"); // ========== 自定义板编号生成 ========== public static final ErrorCode CUSTOM_PLATENO_GENERATE_ORDERNO_RULE_NOT_SUPPORT_RESETMODE = new ErrorCode(1_002_030_001, "自定义版编号生产单序号规则中存在不支持的复位类型:{}"); 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 003ebdee6..2314f0e13 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 @@ -217,48 +217,20 @@ public class OrderController { try { orderId = (Long) identifierGenerator.nextId(null); Long organId = getUserOrganId(); - JSONObject oauth = apiDataAchieve.getApiToken(organId).get(); - String token = oauth.getJSONObject("info").getString("access_token"); - String shopId = oauth.getJSONObject("info").getString("shop_id"); - JSONObject order = apiDataAchieve.getApiOrder(token, shopId, orderNo).get(); - if (!order.getString("err_code").equals("0")) { - throw exception(PLATE_PLAN_DATA_ERROR); - } - if (order.getJSONArray("data") == null) { - throw exception(PLATE_PLAN_DATA_NULL); - } - JSONObject dataPlates = apiDataAchieve.getApiPlateProData(token, orderNo).get(); - JSONObject dataParts = apiDataAchieve.getApiPartsMessage(token, orderNo).get(); - JSONObject dataBody = apiDataAchieve.getApiBodyMessage(token, orderNo).get(); - JSONObject dataGoods = apiDataAchieve.getApiGoodsMessage(token, orderNo).get(); - JSONObject plate = apiDataAchieve.getApiPlateDetailMessage(token, orderNo).get(); - JSONObject dataModule = apiDataAchieve.getApiGroupMessage(token, orderNo).get(); - JSONObject block = apiDataAchieve.getApiBlocksMessage(token, orderNo).get(); - Map listMap = apiTypeRealize.apiPlateDataChange( - token, - order, - dataPlates,//板件生产信息 - dataParts,// 配件信息 - dataBody, // 柜体信息 - dataGoods, // 商品信息 - plate, // 板件明细 - dataModule,// 加工组信息 - block,// 板材数据 - orderNo,// 原始生产单号 - orderId,// 生成生产单号 - organId); - Long id = orderService.importApiData(listMap); + + Long id = orderService.importApiData(apiTypeRealize.apiDataChange(orderNo, orderId, organId)); + return success(String.valueOf(id)); } catch (Exception e) { - log.error(errKey, e); - return success(e.getMessage()); - } finally { // 进行判断,为空,写入时出现了错误,数据库数据回滚,此时删除 ES 里的数据 OrderDO orderDO = orderMapper.selectById(orderId); if (orderDO == null) { orderInputProcessor.deleteByOrderId(orderId, ORDER_PLATE_MODEL); orderInputProcessor.deleteByOrderId(orderId, ORDER_PLATE_MODEL_COMPRESS); } + log.error(errKey, e); + return success(e.getMessage()); + } finally { redisLockUtil.unlock(lockKey); } 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 52e0bf2af..3767ffe48 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 @@ -8,6 +8,7 @@ import com.cf.imes.module.executor.controller.admin.order.vo.product.OrderBodyRe import com.cf.imes.module.executor.controller.admin.order.vo.product.OrderRoomBodyRespVO; import com.cf.imes.module.executor.controller.admin.orderParts.vo.OrderPartsRespVO; import com.cf.imes.module.executor.dal.dataobject.order.OrderDO; +import com.cf.imes.module.executor.util.fileConversion.admin.api.webcad.ApiDataTypeVo; import org.springframework.boot.system.ApplicationHome; import javax.servlet.http.HttpServletResponse; @@ -102,10 +103,10 @@ public interface OrderService { void updateRestoreBody(Long orderId , Set roomId, Long bodyId, Integer status); /** - * @param listMap:生产单号 + * @param apiDataTypeVo:生产单号 * @return Boolean */ - Long importApiData(Map listMap); + Long importApiData(ApiDataTypeVo apiDataTypeVo); /** * 文件数据导入 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 cd3e03035..692bc9589 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 @@ -59,6 +59,7 @@ import com.cf.imes.module.executor.service.plan.PlanService; import com.cf.imes.module.executor.util.deviseData.structure.FieldConstants; import com.cf.imes.module.executor.util.deviseData.structure.PlateDetail; import com.cf.imes.module.executor.util.fileConversion.admin.SnowflakeIdWorker3rd; +import com.cf.imes.module.executor.util.fileConversion.admin.api.webcad.ApiDataTypeVo; import org.springframework.aop.framework.AopContext; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -398,8 +399,8 @@ public class OrderServiceImpl implements OrderService { @Override @Transactional(rollbackFor = Exception.class) - public Long importApiData(Map listMap) { - OrderDO order = (OrderDO) listMap.get(FieldConstants.ORDER); + public Long importApiData(ApiDataTypeVo apiDataTypeVo) { + OrderDO order = apiDataTypeVo.getOrderDO(); if (order != null) { //判断是否已经导入 // if (!validateOrderNoExists(order.getApiOrderId(), OrganContextHolder.getOrganId())) { @@ -415,15 +416,15 @@ public class OrderServiceImpl implements OrderService { order.setSplitter(nickName); } } - List goodsDO = (List) listMap.get(FieldConstants.GOODS); - List rawGoodsDO = (List) listMap.get(FieldConstants.RAW_GOODS); - List bodyDO = (List) listMap.get(FieldConstants.BODY); - List groupDO = (List) listMap.get(FieldConstants.GROUP); - List partsDO = (List) listMap.get(FieldConstants.PARTS); - List plateDO = (List) listMap.get(FieldConstants.PLATE); - List plateDetail = (List) listMap.get(FieldConstants.PLATE_DETAIL); - List itemDO = (List) listMap.get(FieldConstants.ITEM); - List partsRemark = (List) listMap.get(FieldConstants.PARTS_REMARK); + List goodsDO = new ArrayList<>(apiDataTypeVo.getMapGoodsDO().values()); + List rawGoodsDO = new ArrayList<>(apiDataTypeVo.getMapRawGoodsDO().values()); + List bodyDO = new ArrayList<>(apiDataTypeVo.getMapOrderBodyDO().values()); + List groupDO = new ArrayList<>(apiDataTypeVo.getMapOrderGroupDO().values()); + List partsDO = new ArrayList<>(apiDataTypeVo.getMapPartsInfos().values()); + List plateDO = new ArrayList<>(apiDataTypeVo.getMapPlatesInfos().values()); + List plateDetail = new ArrayList<>(apiDataTypeVo.getMapPlateDetails().values()); + List itemDO = apiDataTypeVo.getMapItem(); + List partsRemark = new ArrayList<>(apiDataTypeVo.getMapPartRemarks().values()); Map> map = getPlateGoods(goodsDO);// 检验商品板材信息是否存在 goodsDO = (List) map.get(FieldConstants.GOODS); @@ -448,7 +449,7 @@ public class OrderServiceImpl implements OrderService { // 保存压缩的数据 orderInputProcessor.batchSaveCompressModel(Collections.singletonList(orderModelCompressDO)); } - if (partsRemark != null && !partsRemark.isEmpty()) { + if (!partsRemark.isEmpty()) { orderInputProcessor.batchSaveOrderPartsModel(partsRemark); } diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/deviseData/structure/PlateDetail.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/deviseData/structure/PlateDetail.java index 4d885a8b3..1da19b173 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/deviseData/structure/PlateDetail.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/deviseData/structure/PlateDetail.java @@ -26,9 +26,9 @@ public class PlateDetail{ private String name; // 板id private Long plateId; -// 板编号 +// 设计板编号 private String plateNo; -// 自定义板号 +// 设计板编号 private String customPlateNo; private Integer texture; //纹路 纹路(0正纹1可翻转2反纹) 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/ApiDataAchieve.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/api/webcad/ApiDataAchieve.java index f8f06c6ff..85870da66 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/api/webcad/ApiDataAchieve.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/api/webcad/ApiDataAchieve.java @@ -2,7 +2,6 @@ package com.cf.imes.module.executor.util.fileConversion.admin.api.webcad; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; - import com.cf.imes.module.system.api.application.ApplicationApi; import lombok.extern.slf4j.Slf4j; import org.springframework.scheduling.annotation.Async; @@ -10,15 +9,19 @@ import org.springframework.scheduling.annotation.AsyncResult; import org.springframework.stereotype.Component; import javax.annotation.Resource; - import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.time.temporal.ChronoUnit; -import java.util.List; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; +import java.util.function.BiFunction; import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception; import static com.cf.imes.module.executor.enums.ErrorCodeConstants.*; +import static com.cf.imes.module.executor.enums.ErrorCodeConstants.ORDER_NOT_FOUND; /** @@ -39,9 +42,9 @@ public class ApiDataAchieve { // 重复使用的常量 private static final String ORDER_NO_KEY = "order_no"; private static final String CURR_PAGE_KEY = "curr_page"; - private static final String PAGE_COUNT_KEY = "page_count"; + private static final String PAGE_COUNT_KEY = "page_count"; //请求 private static final String ERR_CODE_KEY = "err_code"; - private static final String PAGECOUNT_KEY = "PageCount"; + private static final String ALL_PAGE_COUNT_KEY = "PageCount"; // 页数 private static final String VALUE_KEY = "value"; private static final String GOODS_ID = "goods_id"; @@ -56,45 +59,35 @@ public class ApiDataAchieve { if (!json.getString("err_msg").equals("success")) { throw exception(APP_TOKEN_ERROR); } -// String token = json.getJSONObject("info").getString("access_token"); return new AsyncResult<>(json); } // 获取板件生产数据信息 - @Async - public Future getApiPlateProData(String token, String orderNo) { + public JSONObject getApiPlateProData(String token, String orderNo) { JSONObject jsonPlatesData = new JSONObject(); jsonPlatesData.put(ORDER_NO_KEY, "N" + orderNo);//生产单号需要传入赋值 jsonPlatesData.put("format", "json"); jsonPlatesData.put("version", "3"); JSONObject dataPlates = apiDataProduction.getApiOrderMessage(token, jsonPlatesData); - return new AsyncResult<>(dataPlates); + return dataPlates; } // 获取配件信息 分页获取 - @Async - public Future getApiPartsMessage(String token, String orderNo) { - JSONObject jsonParts = new JSONObject(); - jsonParts.put(CURR_PAGE_KEY, 1); - jsonParts.put(PAGE_COUNT_KEY, PARTS_PAGE_MAX); - jsonParts.put(ORDER_NO_KEY, "N" + orderNo); + public JSONObject getApiPartsMessage(String token, String orderNo, JSONObject jsonParts) { + JSONObject parts = apiDataProduction.getApiOrderPartsMessage(token, jsonParts); if (!parts.getString(ERR_CODE_KEY).equals("0")) { log.error("配件数据获取错误" + "N" + orderNo); throw exception(PARTS_DATA_ERROR); } - JSONObject dataParts = new JSONObject(); - for (int i = 1; i <= parts.getJSONObject(VALUE_KEY).getInteger(PAGECOUNT_KEY); i++) { - jsonParts.put(CURR_PAGE_KEY, i); - JSONObject value = apiDataProduction.getApiOrderPartsMessage(token, jsonParts); - dataParts = mergeJSONObjects(dataParts, value); + if (parts.getJSONObject(VALUE_KEY).getJSONArray("List") == null || parts.getJSONObject(VALUE_KEY).getJSONArray("List").isEmpty()) { + return null; } - return new AsyncResult<>(dataParts); + return parts; } // 柜体信息转换 - @Async - public Future getApiBodyMessage(String token, String orderNo) { + public JSONObject getApiBodyMessage(String token, String orderNo) { JSONObject jsonBody = new JSONObject(); jsonBody.put(CURR_PAGE_KEY, 1); jsonBody.put(PAGE_COUNT_KEY, PARTS_PAGE_MAX); @@ -105,17 +98,17 @@ public class ApiDataAchieve { throw exception(BODY_DATA_ERROR); } JSONObject dataBody = new JSONObject(); - for (int i = 1; i <= body.getJSONObject(VALUE_KEY).getInteger(PAGECOUNT_KEY); i++) { + for (int i = 1; i <= body.getJSONObject(VALUE_KEY).getInteger(ALL_PAGE_COUNT_KEY); i++) { jsonBody.put(CURR_PAGE_KEY, i); JSONObject value = apiDataProduction.getApiOrderBodyMessage(token, jsonBody); dataBody = mergeJSONObjects(dataBody, value); } - return new AsyncResult<>(dataBody); + return dataBody; } // 商品信息转换 - @Async - public Future getApiGoodsMessage(String token, String orderNo) { + public JSONObject getApiGoodsMessage(String token, String orderNo) { + JSONObject jsonGoods = new JSONObject(); jsonGoods.put(CURR_PAGE_KEY, 1); jsonGoods.put(PAGE_COUNT_KEY, PARTS_PAGE_MAX); @@ -126,47 +119,38 @@ public class ApiDataAchieve { throw exception(GOODS_DATA_ERROR); } JSONObject dataGoods = new JSONObject(); - for (int i = 1; i <= goods.getJSONObject(VALUE_KEY).getInteger(PAGECOUNT_KEY); i++) { + for (int i = 1; i <= goods.getJSONObject(VALUE_KEY).getInteger(ALL_PAGE_COUNT_KEY); i++) { jsonGoods.put(CURR_PAGE_KEY, i); JSONObject value = apiDataProduction.getApiOrderGoodsMessage(token, jsonGoods); dataGoods = mergeJSONObjects(dataGoods, value); } - return new AsyncResult<>(dataGoods); + + return dataGoods; } // 板材明细信息转换 - @Async - public Future getApiPlateDetailMessage(String token, String orderNo) { - JSONObject jsonPlates = new JSONObject(); - jsonPlates.put(CURR_PAGE_KEY, 1); - jsonPlates.put(PAGE_COUNT_KEY, PARTS_PAGE_MAX); - jsonPlates.put(ORDER_NO_KEY, "N" + orderNo); + public JSONObject getApiPlateDetailMessage(String token, String orderNo, JSONObject jsonPlates) { JSONObject plates = apiDataProduction.getApiBlocksDataMessage(token, jsonPlates); if (!plates.getString(ERR_CODE_KEY).equals("0")) { log.error("板材明细获取错误" + "N" + orderNo); throw exception(PLATE_DATA_ERROR); } - JSONObject plate = new JSONObject(); - for (int i = 1; i <= plates.getJSONObject(VALUE_KEY).getInteger(PAGECOUNT_KEY); i++) { - jsonPlates.put(CURR_PAGE_KEY, i); - JSONObject value = apiDataProduction.getApiBlocksDataMessage(token, jsonPlates); - plate = mergeJSONObjects(plate, value); + if (plates.getJSONObject(VALUE_KEY).getJSONArray("List") == null || plates.getJSONObject(VALUE_KEY).getJSONArray("List").isEmpty()) { + return null; } - return new AsyncResult<>(plate); + return plates; } // 加工组信息转换 - @Async - public Future getApiGroupMessage(String token, String orderNo) { + public JSONObject getApiGroupMessage(String token, String orderNo) { JSONObject jsonModule = new JSONObject(); jsonModule.put(ORDER_NO_KEY, "N" + orderNo); JSONObject dataModule = apiDataProduction.getApiModuleTypeDataMessage(token, jsonModule); - return new AsyncResult<>(dataModule); + return dataModule; } // 板材数据信息转换 - @Async - public Future getApiBlocksMessage(String token, String orderNo) { + public JSONObject getApiBlocksMessage(String token, String orderNo) { JSONObject jsonBlocks = new JSONObject(); jsonBlocks.put(CURR_PAGE_KEY, 1); jsonBlocks.put(PAGE_COUNT_KEY, PARTS_PAGE_MAX); @@ -176,12 +160,12 @@ public class ApiDataAchieve { log.error("板材数据获取错误" + "N" + orderNo); } JSONObject block = new JSONObject(); - for (int i = 1; i <= blocks.getJSONObject(VALUE_KEY).getInteger(PAGECOUNT_KEY); i++) { + for (int i = 1; i <= blocks.getJSONObject(VALUE_KEY).getInteger(ALL_PAGE_COUNT_KEY); i++) { jsonBlocks.put(CURR_PAGE_KEY, i); JSONObject value = apiDataProduction.getApiBlocksMessage(token, jsonBlocks); block = mergeJSONObjects(block, value); } - return new AsyncResult<>(block); + return block; } // 商品列表信息转换 @@ -197,14 +181,21 @@ public class ApiDataAchieve { } // 订单获取 - public Future getApiOrder(String token, String shopId, String orderNo) { + public JSONObject getApiOrder(String token, String orderNo) { JSONObject jsonOrders = new JSONObject(); orderNo = "N" +orderNo; JSONArray orderList = new JSONArray(); orderList.add(orderNo.replace(" ", "")); jsonOrders.put(ORDER_NO_KEY, orderList); JSONObject order = apiDataProduction.getApiOrderList(token, jsonOrders); - return new AsyncResult<>(order); + + if (!order.getString(ProduceApiConstants.CODE).equals("0") || + order.getJSONArray(ProduceApiConstants.DATA) == null || + order.getJSONArray(ProduceApiConstants.DATA).isEmpty()) { + throw exception(ORDER_NOT_FOUND); + } + + return order; } // 订单列表 @@ -281,7 +272,6 @@ public class ApiDataAchieve { } mergedObj.put("List", mergedList); -// System.out.println(mergedObj); return mergedObj; @@ -328,7 +318,6 @@ public class ApiDataAchieve { } mergedObj.put("data", mergedList); -// System.out.println(mergedObj); return mergedObj; 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/ApiDataTypeVo.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/api/webcad/ApiDataTypeVo.java new file mode 100644 index 000000000..9dc6cde73 --- /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/ApiDataTypeVo.java @@ -0,0 +1,59 @@ +package com.cf.imes.module.executor.util.fileConversion.admin.api.webcad; + +import com.cf.imes.module.executor.controller.admin.orderParts.vo.OrderPartsRemark; +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.plate.PlateGoodDO; +import com.cf.imes.module.executor.dal.dataobject.rawgoods.RawGoodsDO; +import com.cf.imes.module.executor.util.deviseData.structure.PlateDetail; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; +import java.util.Map; + +/** + * api数据转换中可能用到的数据结构 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class ApiDataTypeVo { + + + public OrderDO orderDO; + + public Map mapRawGoodsDO; + public Map mapGoodsDO; + + public Map mapOrderBodyDO; + + public Map mapOrderGroupDO; // 加工组id 和 加工组信息 + public Map> mapGroupLists;// 加工组id 和 小板配件itemId + + public Map> mapItemByGroup; + public List mapItem; + + public Map mapPartsInfos; + public Map mapPartRemarks; + + public Map mapPlateDetails; // 造型数据 + + public Map mapPlatesInfos; // 小板数据 + // 柜体板块片数,柜体异形板片数 + public Map totalPlateCountMapToBody; + public Map irregularPlateCountMapToBody; + + // 加工组板块片数,加工组异形板片数 + public Map totalPlateCountMapToGroup; + public Map irregularPlateCountMapToGroup; + } + 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 index ee5d01c0e..7b7086ae2 100644 --- 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 @@ -1,4 +1,4 @@ -package com.cf.imes.module.executor.util.fileConversion.admin.api.webcad; +package com.cf.imes.module.executor.util.fileConversion.admin.api.webcad;//package com.cf.imes.module.executor.util.fileConversion.admin.api.webcad; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; @@ -25,9 +25,15 @@ import java.math.BigDecimal; import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.util.*; -import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ExecutionException; import java.util.stream.Collectors; +import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.cf.imes.module.executor.enums.ErrorCodeConstants.*; +import static com.cf.imes.module.executor.enums.ErrorCodeConstants.ORDER_DETAIL_DATE_ERR; + /** * 实现数据格式转换 * 使用自带id @@ -48,6 +54,7 @@ public class ApiTypeRealize { @Resource private ApiDataAchieve apiDataAchieve; + private static final int PARTS_PAGE_MAX = 100; private static final Integer X = 0; private static final Integer Y = 1; @@ -63,438 +70,341 @@ public class ApiTypeRealize { private static String PART_CATEGORY_ONE = "封边条"; private static String PART_CATEGORY_TWO = "五金"; private static String PART_CATEGORY_THREE = "组件"; - /** - * @param dataPlates: 板件生产信息 造型数据 - * @param dataParts: 配件信息 - * @param dataBody: 柜体信息 - * @param dataGoods: 商品信息 - * @param plates: 板件信息 板件明细 - * @param dataModule: 加工组信息 - * @param dataBlocks: 大板信息 - * @return Map> - */ - public Map apiPlateDataChange(String token, - JSONObject order, - JSONObject dataPlates, - JSONObject dataParts, - JSONObject dataBody, - JSONObject dataGoods, - JSONObject plates, - JSONObject dataModule, - JSONObject dataBlocks, - String orderNo, - Long orderId, - Long organId) { - Map map = new HashMap<>(); - List itemsList = new ArrayList<>(); + private static String GROUP_LINK_PLATE = "groupList"; + private static String BODY_PLATE_NUMBER = "totalPlateCountMapToBody"; + private static String BODY_IRREGULAR_PLATE_NUMBER = "irregularPlateCountMapToBody"; + private static String GROUP_PLATE_NUMBER = "totalPlateCountMapToGroup"; + private static String GROUP_IRREGULAR_PLATE_NUMBER = "irregularPlateCountMapToGroup"; + private static String PLATE_DETAILS_REMARKS = "mapPlateDetailsRemarks"; - if (order.getJSONArray(ProduceApiConstants.DATA) == null || order.getJSONArray(ProduceApiConstants.DATA).size() < 1) { - return map; + + // api的转换信息获取 + public ApiDataTypeVo apiDataChange(String orderNo, Long orderId, Long organId) throws ExecutionException, InterruptedException { + // token获取 + JSONObject oauth = apiDataAchieve.getApiToken(organId).get(); + String token = oauth.getJSONObject("info").getString("access_token"); + + // 将orderInfoChange(),goodsInfoChange(),groupInfoChange(),bodyInfoChange(),partsInfoChange(), platesDetailChange()方法使用线程,同时运行,并对每个方法返回的数据进行标识 + ConcurrentHashMap> results = new ConcurrentHashMap<>(); + + // 添加各个API调用到映射中,并指定结果字段名 + results.put("order", CompletableFuture.supplyAsync(() -> orderInfoChange(token, orderId, orderNo, organId))); + results.put("good", CompletableFuture.supplyAsync(() -> goodsInfoChange(token, orderId, orderNo, organId))); + results.put("body", CompletableFuture.supplyAsync(() -> bodyInfoChange(token, orderId, orderNo, organId))); + results.put("group", CompletableFuture.supplyAsync(() -> groupInfoChange(token, orderId, orderNo, organId))); + results.put("part", CompletableFuture.supplyAsync(() -> partsInfoChange(token, orderId, orderNo, organId))); + results.put("plateDetail", CompletableFuture.supplyAsync(() -> platesDetailChange(token, orderId, orderNo, organId))); + results.put("plate", CompletableFuture.supplyAsync(() -> platesInfoChange(token, orderId, orderNo, organId))); + + // 等待所有异步任务完成 + CompletableFuture.allOf(results.values().toArray(new CompletableFuture[7])).join(); + + ApiDataTypeVo order = results.get("order").get(); + ApiDataTypeVo goodsData = results.get("good").get(); + ApiDataTypeVo bodyData = results.get("body").get(); + ApiDataTypeVo groupData = results.get("group").get(); + ApiDataTypeVo partsData = results.get("part").get(); + ApiDataTypeVo plateDetailData = results.get("plateDetail").get(); + ApiDataTypeVo platesData = results.get("plate").get(); + + + // 小板数据补充,order_goods_id添加造型相关数据判断获取,以及配件中添加goods_id + // 用方法实现,小板中添加其他信息,以及更新goods_id + updateSmallBoardInfo(goodsData.getMapGoodsDO(), + plateDetailData.getMapPlateDetails(), + platesData.getMapPlatesInfos(), + plateDetailData.getMapPlateDetails()); + + Map> mapItemList = new HashMap<>(); + mergeMaps(mapItemList, partsData.getMapItemByGroup()); + mergeMaps(mapItemList, platesData.getMapItemByGroup()); + + + // 2、柜体需要添加板的数量, + Map mapOrderBodyDO = bodyData.getMapOrderBodyDO(); // String Box_id + Map totalPlateCountMapToBody = platesData.getTotalPlateCountMapToBody(); + Map irregularPlateCountMapToBody = platesData.getIrregularPlateCountMapToBody(); + + if (totalPlateCountMapToBody.size() > 0) { + mapOrderBodyDO.forEach((k, v) -> v.setPlateNum(totalPlateCountMapToBody.get(k))); + } + if (irregularPlateCountMapToBody.size() > 0) { + mapOrderBodyDO.forEach((k, v) -> v.setUnregularNum(irregularPlateCountMapToBody.get(k))); } - // 生产单数据 - OrderDO orderDO = orderInfoChange(order, orderId, orderNo, organId); - map.put(FieldConstants.ORDER, orderDO); - - - // 商品信息数据 信息以全 - Map goodsInfoChange = rawGoodsInfoChange(dataGoods, orderId, organId, token); - Map rawGoodsDOS = (Map) goodsInfoChange.get(FieldConstants.RAW_GOODS); - Map goodsDOS = (Map) goodsInfoChange.get(FieldConstants.GOODS); - - - // 柜体信息 少异形数量、板材数量 - Map bodyInfoChange = bodyInfoChange(dataBody, orderId, organId); - - // 加工组 少异形数量、板材数量 - Map group = groupInfoChange(dataModule, orderId, bodyInfoChange, organId); - Map orderGroupDO = (Map) group.get("orderGroup"); - Map> groupLists = (Map>) group.get("lists"); // 加工组中包含的板件、配件id - - - // 配件 - Map partsDO = partsInfoChange(dataParts, orderId, goodsDOS, bodyInfoChange, organId, token); - - Map partsRemark = (Map) partsDO.get("remarks"); // 配件备注 - if (partsRemark != null) { - map.put(FieldConstants.PARTS_REMARK, new ArrayList<>(partsRemark.values())); + Map mapOrderGroupDO = groupData.getMapOrderGroupDO(); + Map totalPlateCountMapToGroup = platesData.getTotalPlateCountMapToGroup(); + Map irregularPlateCountMapToGroup = platesData.getIrregularPlateCountMapToGroup(); + if (totalPlateCountMapToGroup.size() > 0) { + mapOrderGroupDO.forEach((k, v) -> v.setPlateNum(totalPlateCountMapToGroup.get(k))); } - - Map orderPartsDO = (Map) partsDO.get("partsInfos"); - if (orderPartsDO != null) { - map.put(FieldConstants.PARTS, new ArrayList<>(orderPartsDO.values())); + if (irregularPlateCountMapToGroup.size() > 0) { + mapOrderGroupDO.forEach((k, v) -> v.setUnregularNum(irregularPlateCountMapToGroup.get(k))); } + // order_group中添加order_body_id + mapOrderGroupDO.forEach((k, v) -> v.setBodyId(mapOrderBodyDO.get(String.valueOf(v.getBodyId())).getId())); - Map partsItems = (Map) partsDO.get("partsItems"); - - partsItems = orderPartsChange(orderGroupDO, groupLists, partsItems);// item补充 - if (partsItems != null) { - itemsList.addAll(partsItems.values()); - } - - - // 板材 写库 - Map platesDO = platesInfoChange(dataPlates, plates, orderId, goodsDOS, bodyInfoChange, dataBlocks, organId); - - Map orderPlatesDO = (Map) platesDO.get("platesInfos"); - if (orderPlatesDO != null) { - // 需要添加自定义板编号 -// plateAddGroupName(orderGroupDO, groupLists, orderPlatesDO); - map.put(FieldConstants.PLATE, new ArrayList<>(orderPlatesDO.values())); - } - - - Map plateDetail = (Map) platesDO.get("plateDetail"); - if (plateDetail != null) { - map.put(FieldConstants.PLATE_DETAIL, new ArrayList<>(plateDetail.values())); - } - - - Map platesItems = (Map) platesDO.get("platesItems"); - - Map bodyItemsPlates = (Map) platesDO.get("bodyInfos"); - - platesItems = orderPartsChange(orderGroupDO, groupLists, platesItems);// item补充 - if (platesItems != null) { - itemsList.addAll(platesItems.values()); - } - - - - if (goodsDOS != null) { - List goodsDO = new ArrayList<>(goodsDOS.values()); // (List) - map.put(FieldConstants.GOODS, goodsDO); - } - - if (rawGoodsDOS != null) { - List rawGoodsDO = new ArrayList<>(rawGoodsDOS.values()); - map.put(FieldConstants.RAW_GOODS, rawGoodsDO); - } - - - map.put(FieldConstants.GROUP, new ArrayList<>(groupAddUnregularNum(itemsList, orderPlatesDO, orderGroupDO).values())); - map.put(FieldConstants.ITEM, itemsList); - if (bodyItemsPlates != null) { - map.put(FieldConstants.BODY, new ArrayList<>(bodyItemsPlates.values())); - } else { - map.put(FieldConstants.BODY, new ArrayList<>(bodyInfoChange.values())); - } - - return map; - } - - /** - * 板件新增加工组名称 - * - */ - public List plateAddGroupName(Map orderGroupDO, - Map> groupLists, - Map orderPlatesDO) { - if (orderGroupDO == null || groupLists == null || orderPlatesDO == null || orderPlatesDO.isEmpty()) { - return Collections.emptyList(); - } - // 遍历groupList - groupLists.forEach((k, v) -> { - // 获取加工组名称 - String groupName = orderGroupDO.get(k).getName(); - // 遍历v,匹配orderPlatesDO - v.forEach(v1 -> { - if (orderPlatesDO.get(v1) != null) { -// orderPlatesDO.get(v1).setProcessGroupName(groupName); - } + // item中添加order_body_id + mapItemList.forEach((k, v) -> { + // 通过DO中的box_id添加order_body_id 和 roomId + v.forEach(itemDO -> { + itemDO.setRoomId(mapOrderBodyDO.get(String.valueOf(itemDO.getBodyId())).getRoomId()); + itemDO.setBodyId(mapOrderBodyDO.get(String.valueOf(itemDO.getBodyId())).getId()); }); + }); - return new ArrayList<>(orderPlatesDO.values()); - } - - /** - * - * @param orderGroupDO: ModuleID group - * @param groupLists: ModuleID 板材、配件id - * @param items: ItemID item - * @return Map - */ - public Map orderPartsChange(Map orderGroupDO, - Map> groupLists, - Map items) { - - AtomicInteger groupNum = new AtomicInteger(0); - groupLists.forEach((k, v) -> { - v.forEach(v1 -> { - if (items.get(v1) != null) { - - if (items.get(v1).getGroupId() == null || items.get(v1).getGroupId() == 0) { - items.get(v1).setGroupId(orderGroupDO.get(k).getId()); - } else { // 如果groupId已存在值(即不为null),则创建一个新的OrderItemDO对象 - OrderItemDO item = OrderItemDO.builder() - .id((Long) identifierGenerator.nextId(null)) - .orderId(items.get(v1).getOrderId()) - .type(items.get(v1).getType()) - .roomId(items.get(v1).getRoomId()) - .bodyId(items.get(v1).getBodyId()) - .planId(items.get(v1).getPlanId()) - .packageId(items.get(v1).getPackageId()) - .groupId(orderGroupDO.get(k).getId()) - .partsId(items.get(v1).getPartsId()) - .plateId(items.get(v1).getPlateId()) - .num(items.get(v1).getNum()) - .build(); - items.put(item.getId(), item); //再复查 + // item中田间order_group_id + mapItemList.values().stream() + .flatMap(List::stream) + .filter(itemDO -> itemDO.getGroupId() != null) + .forEach(itemDO -> { + String groupIdStr = String.valueOf(itemDO.getGroupId()); + OrderGroupDO newGroupDO = mapOrderGroupDO.get(groupIdStr); + if (newGroupDO != null) { + itemDO.setGroupId(newGroupDO.getId()); } + }); - if (items.get(v1).getPlateId() != null) - groupNum.getAndIncrement(); + + List mapItem = mapItemList.values().stream() + .flatMap(List::stream) // 将每个 List 转换为流,并将它们扁平化为一个流 + .collect(Collectors.toList()); // 收集结果到一个新的列表中 + + // item中配件更换id + mapItem.forEach(itemDO -> { + if (itemDO.getPartsId() != null) { + String goodsId = String.valueOf(itemDO.getPartsId()); + OrderPartsDO newPartsDO = partsData.getMapPartsInfos().get(goodsId); + if (newPartsDO != null) { + itemDO.setPartsId(newPartsDO.getId()); } - }); - orderGroupDO.get(k).setPlateNum(groupNum.get()); - groupNum.set(0); + } }); - return items; + // 结果整理 + ApiDataTypeVo apiDataTypeVo = new ApiDataTypeVo(); + apiDataTypeVo.setOrderDO(order.getOrderDO()).setMapGoodsDO(goodsData.getMapGoodsDO()).setMapRawGoodsDO(goodsData.getMapRawGoodsDO()) + .setMapOrderBodyDO(mapOrderBodyDO).setMapOrderGroupDO(mapOrderGroupDO).setMapItem(mapItem) + .setMapPartsInfos(partsData.getMapPartsInfos()).setMapPartRemarks(partsData.getMapPartRemarks()) + .setMapPlateDetails(plateDetailData.getMapPlateDetails()).setMapPlatesInfos(platesData.getMapPlatesInfos()); + + return apiDataTypeVo; } - /** - * 加工组异形板赋值 - */ - public Map groupAddUnregularNum(List itemsList, - Map orderPlatesDO, - Map orderGroupDO) { - - if (itemsList == null || orderGroupDO == null || orderPlatesDO == null) { - return Collections.emptyMap(); + // 用方法实现,小板中添加其他信息,以及更新goods_id + private void updateSmallBoardInfo(Map mapGoodsDO, + Map mapPlateDetails, + Map mapPlatesInfos, + Map mapPlateDetailsRemarks) { + // 第一步判断是否存在需要进行数据添加的小板 + if (mapPlatesInfos.isEmpty()) { + return; } - - Map> groupPlate = itemsList.stream().collect(Collectors.groupingBy(OrderItemDO::getGroupId)); - List orderItemDOList = orderPlatesDO.values().stream().toList(); - Map plateDOMap = orderItemDOList.stream().collect(Collectors.toMap(PlateDO::getId, plate -> plate)); - List orderGroupDOList = orderGroupDO.values().stream().toList(); - Map orderGroupDOMap = orderGroupDOList.stream().collect(Collectors.toMap(OrderGroupDO::getId, v -> v)); - - AtomicInteger specialShapedNum = new AtomicInteger(0); - groupPlate.forEach((k, v) -> { // k 加工组id - - v.forEach(item -> { - if (plateDOMap.get(item.getPlateId()) != null) { - if (Boolean.TRUE.equals(plateDOMap.get(item.getPlateId()).getIsSpecialShaped())) { // 异形相加 - specialShapedNum.getAndIncrement(); - } - } - }); - if (orderGroupDOMap.get(k) != null) {// m 加工组 - orderGroupDOMap.get(k).setUnregularNum(specialShapedNum.get()); + mapPlatesInfos.forEach((k, v) -> { + // 判断是否有造型数据可以进行整合 + if (mapPlateDetails.get(k) == null) { // 使用的blockNO + return; } - specialShapedNum.set(0); + // goods_id更换 + v.setGoodsId(mapGoodsDO.get(String.valueOf(v.getGoodsId())).getId()); + // 添加其他信息 + // 获取小板对应的造型信息 + PlateDetail plateDetail = mapPlateDetails.get(k); + if (plateDetail == null) { + throw exception(ORDER_DETAIL_DATE_ERR); + } + plateDetail.setPlateId(v.getId()) + .setExtraRemark(mapPlateDetailsRemarks.get(k).getExtraRemark()) + .setSpecialRemarkDei(mapPlateDetailsRemarks.get(k).getSpecialRemarkDei()) + .setExtraHandleRemark(mapPlateDetailsRemarks.get(k).getExtraHandleRemark()) + .setDrillsRemark(mapPlateDetailsRemarks.get(k).getDrillsRemark()) + .setInfoRemark(mapPlateDetailsRemarks.get(k).getInfoRemark()) + .setRemarkJsonDei(mapPlateDetailsRemarks.get(k).getRemarkJsonDei()); + + v.setHoleFace(plateDetail.getTypographicFace()) + .setWidth(plateDetail.getPlateWidth()) + .setHeight(plateDetail.getPlateLength()) + .setOffsetX(plateDetail.getOffsetX()) + .setOffsetY(plateDetail.getOffsetY()); + + if (plateDetail.getThroughModelCount() != null + && plateDetail.getThroughModelCount() > 0){ + v.setFilterType(v.getFilterType() + ",1"); + } + if (plateDetail.getThroughHoleCount() != null + && plateDetail.getThroughHoleCount() > 0){ + v.setFilterType(v.getFilterType() + ",2"); + } + if (plateDetail.getHas2DModel() != null + && plateDetail.getHas2DModel()){ + v.setFilterType(v.getFilterType() + ",4"); + } + + BigDecimal splitHeight = v.getSplitHeight(); + BigDecimal splitWidth = v.getSplitWidth(); + BigDecimal splitThickness = v.getSplitThickness(); + + // 拆分尺寸为0,则取成品尺寸 + if (BigDecimal.ZERO.compareTo(splitHeight) == 0 || BigDecimal.ZERO.compareTo(splitWidth) == 0 || BigDecimal.ZERO.compareTo(splitThickness) == 0) { + v.setSplitHeight(v.getHeight()) + .setSplitWidth(v.getWidth()) + .setSplitThickness(v.getThickness()); + } + }); - return orderGroupDO; } - /** - * 加工组 信息转换 + * order信息获取加信息转换 */ - private Map groupInfoChange(JSONObject dataModule, - Long orderId, - Map bodyInfoChange, - Long organId) { - Map map = new HashMap<>(); - Map orderGroupDOs = new HashMap<>();// 加工组id 和 加工组信息 - Map> groupLists = new HashMap<>();// 加工组id 和 详细信息 + public ApiDataTypeVo orderInfoChange(String token, + Long orderId, + String orderNo, + Long organId){ +// System.out.println("开始: " + System.currentTimeMillis()); + // 订单获取 + JSONObject order = apiDataAchieve.getApiOrder(token, orderNo) + .getJSONArray(ProduceApiConstants.DATA).getJSONObject(INDEX); - JSONArray value = dataModule.getJSONArray(ProduceApiConstants.VALUE); - if (value != null && !value.isEmpty()) { - for (int i = 0; i < value.size(); i++) { - JSONObject group = value.getJSONObject(i); - - OrderGroupDO orderGroup = OrderGroupDO.builder() - .id((Long) identifierGenerator.nextId(null)) - .orderId(orderId) - .bodyId(bodyInfoChange.get(group.getLong(ProduceApiConstants.M_BOX_ID)).getId())//group.getLong("BoxID") - .groupTypeId(group.getLong(ProduceApiConstants.M_MODULE_TYPE_ID)) - .groupTypeName(group.getString(ProduceApiConstants.M_MODULE_TYPE_NAME)) - .name(group.getString(ProduceApiConstants.M_MODULE_TYPE_NAME)) - .width(group.getDouble(ProduceApiConstants.M_WIDTH)) - .height(group.getDouble(ProduceApiConstants.M_LENGTH)) - .depth(group.getDouble(ProduceApiConstants.M_THICKNESS)) - .multiNum(0) - .plateNum(0) - .unregularNum(0) - .filename("无") - .remark("无") - .organId(organId) - .build(); - groupLists.put(group.getLong(ProduceApiConstants.M_MODULE_ID), jsonArrayToList(group.getJSONArray(ProduceApiConstants.M_ITEM_ID_LIST))); - orderGroupDOs.put(group.getLong(ProduceApiConstants.M_MODULE_ID), orderGroup); - } - } - - map.put("lists", groupLists); - map.put("orderGroup", orderGroupDOs); - return map; - } - - /** - * 生产单信息转换 - * - */ - public OrderDO orderInfoChange(JSONObject orderJson, - Long orderId, - String orderNo, - Long organId) { - // 获取生产单信息 - JSONObject order = orderJson.getJSONArray(ProduceApiConstants.DATA).getJSONObject(INDEX); // 检验数据合法性 - if (order != null && !order.isEmpty()) { - // 数据校验 - DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); - LocalDate orderDate = LocalDate.parse(order.getString(ProduceApiConstants.OL_START_DATE), formatter); - LocalDate deliveryDate = LocalDate.parse(order.getString(ProduceApiConstants.OL_END_DATE), formatter); - if (deliveryDate.isBefore(orderDate)) { - // 将 deliveryDate 设置为 orderDate 后的第 30 天 - deliveryDate = orderDate.plusMonths(1); - } - String orderRemark = "[" + orderNo + "]; "; - - OrderDO orderDO = OrderDO.builder() - .id(orderId) - .apiOrderId(orderNo) - .parentNo(0L) - .orderDate(orderDate.atStartOfDay()) - .deliveryDate(deliveryDate.atStartOfDay()) - .orderType(OrderTypeEnum.MAIN_ORDER.getStatus()) - .dataType(DataTypeEnum.API_IMPORT.getStatus()) - .customOrderNo(order.getString(ProduceApiConstants.OL_CUSTOM_ORDER_NO)) - .customer(order.getString(ProduceApiConstants.OL_CUSTOMER_NAME)) - .address(order.getString(ProduceApiConstants.OL_CUSTOMER_ADDRESS)) - .phoneNumber(order.getString(ProduceApiConstants.OL_CUSTOMER_PHONE)) - .dealer(order.getString(ProduceApiConstants.OL_STORE_NAME)) - .dealerPhoneNumber(order.getString(ProduceApiConstants.OL_STORE_PHONE)) - .salesman(order.getString(ProduceApiConstants.OL_NICK_NAME)) - .splitter(order.getString(ProduceApiConstants.OL_CD_NICK_NAME)) - .remark(orderRemark + order.getString(ProduceApiConstants.OL_COMMENTS)) - .organId(organId) - .build(); - - Integer submitState = order.getInteger("submit_state"); - if (submitState == 1){ - orderDO.setStatus(OrderStatusEnum.EMPTY.getStatus()); - }else { - orderDO.setStatus(OrderStatusEnum.NEW_ORDER.getStatus()); - } - return orderDO; + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + LocalDate orderDate = LocalDate.parse(order.getString(ProduceApiConstants.OL_START_DATE), formatter); + LocalDate deliveryDate = LocalDate.parse(order.getString(ProduceApiConstants.OL_END_DATE), formatter); + if (deliveryDate.isBefore(orderDate)) { + // 将 deliveryDate 设置为 orderDate 后的第 30 天 + deliveryDate = orderDate.plusMonths(1); } - return null; + String orderRemark = "[" + orderNo + "]; "; + + OrderDO orderDO = OrderDO.builder() + .id(orderId) + .apiOrderId(orderNo) + .parentNo(0L) + .orderDate(orderDate.atStartOfDay()) + .deliveryDate(deliveryDate.atStartOfDay()) + .orderType(OrderTypeEnum.MAIN_ORDER.getStatus()) + .dataType(DataTypeEnum.API_IMPORT.getStatus()) + .customOrderNo(order.getString(ProduceApiConstants.OL_CUSTOM_ORDER_NO)) + .customer(order.getString(ProduceApiConstants.OL_CUSTOMER_NAME)) + .address(order.getString(ProduceApiConstants.OL_CUSTOMER_ADDRESS)) + .phoneNumber(order.getString(ProduceApiConstants.OL_CUSTOMER_PHONE)) + .dealer(order.getString(ProduceApiConstants.OL_STORE_NAME)) + .dealerPhoneNumber(order.getString(ProduceApiConstants.OL_STORE_PHONE)) + .salesman(order.getString(ProduceApiConstants.OL_NICK_NAME)) + .splitter(order.getString(ProduceApiConstants.OL_CD_NICK_NAME)) + .remark(orderRemark + order.getString(ProduceApiConstants.OL_COMMENTS)) + .organId(organId) + .build(); + + Integer submitState = order.getInteger(ProduceApiConstants.OL_ORDER_STATUS); + if (submitState == 1){ + orderDO.setStatus(OrderStatusEnum.EMPTY.getStatus()); + }else { + orderDO.setStatus(OrderStatusEnum.NEW_ORDER.getStatus()); + } + return new ApiDataTypeVo().setOrderDO(orderDO); + + + } /** - * 板材数据转换成 Map + * 设计商品快照 和 设计商品信息 */ - public Map getBlocksDataByGoodsID(JSONObject dataBlocks) { - Map map = new HashMap<>(); - JSONArray ordersArray = dataBlocks.getJSONArray("List"); - if (ordersArray != null && !ordersArray.isEmpty()) { - for (int i = 0; i < ordersArray.size(); i++) { - JSONObject block = ordersArray.getJSONObject(i); - map.put(block.getLong("GoodsID"), block); - } - } - return map; - } + public ApiDataTypeVo goodsInfoChange(String token, + Long orderId, + String orderNo, + Long organId){ +// System.out.println("开始2: " + System.currentTimeMillis()); + JSONObject goodsMessage = apiDataAchieve.getApiGoodsMessage(token, orderNo); // 全部信息 - /** - * raw商品信息转换 和 商品信息转换 - * - * @param dataRawGoods: - * @param orderId: - * @return Map> String 标识 , Long:商品ID标识,RawGoodsDO:商品信息 - */ - public Map rawGoodsInfoChange(JSONObject dataRawGoods, - Long orderId, - Long organId, - String token) { - - JSONArray goodsLists = dataRawGoods.getJSONArray(ProduceApiConstants.LIST); + JSONArray goodsLists = goodsMessage.getJSONArray(ProduceApiConstants.LIST); if (goodsLists == null || goodsLists.isEmpty()) { - return Collections.emptyMap(); + throw exception(GOODS_DATA_ERROR); } - Map map = new HashMap<>(); - Map rawGoodsDOS = new HashMap<>(); - Map goodsDOS = new HashMap<>(); +// Map map = new HashMap<>(); + Map rawGoodsDOS = new HashMap<>(); + Map goodsDOS = new HashMap<>(); for (int i = 0; i < goodsLists.size(); i++) { - JSONObject goods = goodsLists.getJSONObject(i); + JSONObject good = goodsLists.getJSONObject(i); - Long goodsId = goods.getLong(ProduceApiConstants.G_DOOR_ID); + Long goodsId = good.getLong(ProduceApiConstants.G_DOOR_ID); String goodsSn = null; if (goodsId != null) { - goodsSn = getGoodsSn(goods.getLong(ProduceApiConstants.G_DOOR_ID), token); + goodsSn = getGoodsSn(good.getLong(ProduceApiConstants.G_DOOR_ID), token); } RawGoodsDO rawGoodsDO = RawGoodsDO.builder() .id((Long) identifierGenerator.nextId(null)) .orderId(orderId) -// .rawGoodsId(goods.getString(ProduceApiConstants.G_DOOR_ID)) .rawGoodsId(goodsSn) - .goodsName(goods.getString(ProduceApiConstants.G_GOODS_NAME)) - .material(goods.getString(ProduceApiConstants.G_MATERIAL)) - .color(goods.getString(ProduceApiConstants.G_COLOR)) - .texture(getTexture( goods.getJSONObject(ProduceApiConstants.G_EXTRA_PROP))) - .thickness(goods.getDouble(ProduceApiConstants.G_THICKNESS)) - .brand(goods.getString(ProduceApiConstants.G_BRAND)) - .spec(goods.getString(ProduceApiConstants.G_SPEC)) - .price(goods.getDouble(ProduceApiConstants.G_PRICE)) + .goodsName(good.getString(ProduceApiConstants.G_GOODS_NAME)) + .material(good.getString(ProduceApiConstants.G_MATERIAL)) + .color(good.getString(ProduceApiConstants.G_COLOR)) + .colorBlack(good.getString(ProduceApiConstants.G_COLOR)) + .texture(getTexture( good.getJSONObject(ProduceApiConstants.G_EXTRA_PROP))) + .thickness(good.getDouble(ProduceApiConstants.G_THICKNESS)) + .brand(good.getString(ProduceApiConstants.G_BRAND)) + .spec(good.getString(ProduceApiConstants.G_SPEC)) + .price(good.getDouble(ProduceApiConstants.G_PRICE)) .organId(organId) .build(); - rawGoodsDOS.put(goods.getLong(ProduceApiConstants.G_DOOR_ID), rawGoodsDO); + rawGoodsDOS.put(good.getString(ProduceApiConstants.G_DOOR_ID), rawGoodsDO); GoodsDO goodsDO = GoodsDO.builder() .id((Long) identifierGenerator.nextId(null)) .orderId(orderId) .rawGoodsId(String.valueOf(rawGoodsDO.getId())) -// .goodsId(goods.getString(ProduceApiConstants.G_DOOR_ID)) // 先填这个,后面改 .goodsId(goodsSn) - .goodsName(goods.getString(ProduceApiConstants.G_GOODS_NAME)) - .material(goods.getString(ProduceApiConstants.G_MATERIAL)) - .color(goods.getString(ProduceApiConstants.G_COLOR)) - .texture(getTexture( goods.getJSONObject(ProduceApiConstants.G_EXTRA_PROP))) - .width(BigDecimal.valueOf(goods.getDouble(ProduceApiConstants.G_WIDTH))) - .height(BigDecimal.valueOf(goods.getDouble(ProduceApiConstants.G_HEIGHT))) - .thickness(BigDecimal.valueOf(goods.getDouble(ProduceApiConstants.G_THICKNESS))) - .brand(goods.getString(ProduceApiConstants.G_BRAND)) - .spec(goods.getString(ProduceApiConstants.G_SPEC)) - .price(goods.getDouble(ProduceApiConstants.G_PRICE)) + .goodsName(good.getString(ProduceApiConstants.G_GOODS_NAME)) + .material(good.getString(ProduceApiConstants.G_MATERIAL)) + .color(good.getString(ProduceApiConstants.G_COLOR)) + .colorBlack(good.getString(ProduceApiConstants.G_COLOR)) + .texture(getTexture( good.getJSONObject(ProduceApiConstants.G_EXTRA_PROP))) + .width(BigDecimal.valueOf(good.getDouble(ProduceApiConstants.G_WIDTH))) + .height(BigDecimal.valueOf(good.getDouble(ProduceApiConstants.G_HEIGHT))) + .thickness(BigDecimal.valueOf(good.getDouble(ProduceApiConstants.G_THICKNESS))) + .brand(good.getString(ProduceApiConstants.G_BRAND)) + .spec(good.getString(ProduceApiConstants.G_SPEC)) + .price(good.getDouble(ProduceApiConstants.G_PRICE)) .organId(organId) .build(); - goodsDOS.put(goods.getLong(ProduceApiConstants.G_DOOR_ID), goodsDO); + goodsDOS.put(good.getString(ProduceApiConstants.G_DOOR_ID), goodsDO); } - map.put(FieldConstants.RAW_GOODS, rawGoodsDOS); - map.put(FieldConstants.GOODS, goodsDOS); - return map; +// map.put(FieldConstants.RAW_GOODS, rawGoodsDOS); +// map.put(FieldConstants.GOODS, goodsDOS); + return new ApiDataTypeVo().setMapRawGoodsDO(rawGoodsDOS).setMapGoodsDO(goodsDOS); + } - /** - * 柜体信息转换 - * - * @param dataBody: - * @return Map Integer:柜体ID标识,OrderBodyDO:柜体信息(差数据) - */ - private Map bodyInfoChange(JSONObject dataBody, - Long orderId, - Long organId) { - JSONArray bodyLists = dataBody.getJSONArray(ProduceApiConstants.LIST); + /** + * 房间柜体信息获取 + */ + public ApiDataTypeVo bodyInfoChange(String token, + Long orderId, + String orderNo, + Long organId){ + +// System.out.println("开始3: " + System.currentTimeMillis()); + JSONObject bodyMessage = apiDataAchieve.getApiBodyMessage(token, orderNo); + + JSONArray bodyLists = bodyMessage.getJSONArray(ProduceApiConstants.LIST); if (bodyLists == null || bodyLists.isEmpty()) { - return Collections.emptyMap(); + return null; } - Map bodyInfos = new HashMap<>(); + + Map bodyInfos = new HashMap<>(); for (int i = 0; i < bodyLists.size(); i++) { JSONObject body = bodyLists.getJSONObject(i); @@ -510,450 +420,273 @@ public class ApiTypeRealize { .multiNum(0) .plateNum(0) .unregularNum(0) - .filename("") - .remark("") .organId(organId) .build(); - bodyInfos.put(body.getLong(ProduceApiConstants.B_BOX_ID), bodyInfo); + bodyInfos.put(body.getString(ProduceApiConstants.B_BOX_ID), bodyInfo); } - return bodyInfos; + return new ApiDataTypeVo().setMapOrderBodyDO(bodyInfos); } /** - * JSONArray转List + * 加工组信息获取 */ - public List jsonArrayToList(JSONArray jsonArray) { - List list = new ArrayList<>(); - for (int i = 0; i < jsonArray.size(); i++) { - list.add(jsonArray.getLong(i)); + public ApiDataTypeVo groupInfoChange(String token, + Long orderId, + String orderNo, + Long organId) { + +// System.out.println("开始4: " + System.currentTimeMillis()); + JSONObject groupMessage = apiDataAchieve.getApiGroupMessage(token, orderNo); + + // Map map = new HashMap<>(); + Map orderGroupDOs = new HashMap<>();// 加工组id 和 加工组信息 + Map> groupLists = new HashMap<>();// 加工组id 和 详细信息 + + if (groupMessage == null || groupMessage.isEmpty() || groupMessage.getJSONArray(ProduceApiConstants.VALUE).isEmpty()) { + return new ApiDataTypeVo().setMapOrderGroupDO(orderGroupDOs).setMapGroupLists(groupLists); } - return list; + + + + JSONArray value = groupMessage.getJSONArray(ProduceApiConstants.VALUE); + for (int i = 0; i < value.size(); i++) { + JSONObject group = value.getJSONObject(i); + + OrderGroupDO orderGroup = OrderGroupDO.builder() + .id((Long) identifierGenerator.nextId(null)) + .orderId(orderId) + .bodyId(group.getLong(ProduceApiConstants.M_BOX_ID)) + .groupTypeId(group.getLong(ProduceApiConstants.M_MODULE_TYPE_ID)) + .groupTypeName(group.getString(ProduceApiConstants.M_MODULE_TYPE_NAME)) + .name(group.getString(ProduceApiConstants.M_MODULE_TYPE_NAME)) + .width(group.getDouble(ProduceApiConstants.M_WIDTH)) + .height(group.getDouble(ProduceApiConstants.M_LENGTH)) + .depth(group.getDouble(ProduceApiConstants.M_THICKNESS)) + .multiNum(0) + .plateNum(0) + .unregularNum(0) + .organId(organId) + .build(); + groupLists.put(group.getString(ProduceApiConstants.M_MODULE_ID), jsonArrayToList(group.getJSONArray(ProduceApiConstants.M_ITEM_ID_LIST))); + orderGroupDOs.put(group.getString(ProduceApiConstants.M_MODULE_ID), orderGroup); + } + + +// map.put(GROUP_LINK_PLATE, groupLists); +// map.put(FieldConstants.GROUP, orderGroupDOs); + return new ApiDataTypeVo().setMapOrderGroupDO(orderGroupDOs).setMapGroupLists(groupLists); + } - /** - * 配件长宽厚信息转换 - */ - private Map getPartsSize(JSONObject size, JSONObject spec) { - Map map = new HashMap<>(); - if (size != null && !size.isEmpty()) { - map.put(PART_WIDTH, size.getDouble(ProduceApiConstants.PD_WIDTH)); - map.put(PART_LENGTH, size.getDouble(ProduceApiConstants.PD_LENGTH)); - map.put(PART_THICKNESS, size.getDouble(ProduceApiConstants.PD_THICKNESS)); - } else { - map.put(PART_WIDTH, 0.0); - map.put(PART_LENGTH, 0.0); - map.put(PART_THICKNESS, 0.0); - } - if (spec != null && !spec.isEmpty()) { - map.put(PART_COLOR, spec.getString(ProduceApiConstants.PD_PARTS_SPEC_COLOR)); - map.put(PART_MATERIAL, spec.getString(ProduceApiConstants.PD_PARTS_SPEC_MATERIAL)); - } - return map; - } + // 配件相关信息获取 分页获取转换,使用线程 + public ApiDataTypeVo partsInfoChange(String token, + Long orderId, + String orderNo, + Long organId) { - /** - * goods_sn获取 - */ - private String getGoodsSn(Long goodId, String token) { - String goodsSn; - try { - JSONObject jsonGood = apiDataAchieve.getApiGoodsMessage(token, new Long[]{goodId}).get(); +// System.out.println("开始5: " + System.currentTimeMillis()); + // 配件api调用参数生成 + JSONObject jsonParts = new JSONObject(); + jsonParts.put(ProduceApiConstants.CURR_PAGE_KEY, 1); + jsonParts.put(ProduceApiConstants.PAGE_COUNT_KEY, PARTS_PAGE_MAX); + jsonParts.put(ProduceApiConstants.ORDER_NO_KEY, "N" + orderNo); - goodsSn = jsonGood.getJSONArray(ProduceApiConstants.DATA).getJSONObject(0).getString(ProduceApiConstants.GD_GOODS_SN); - } catch (Exception e){ + if (apiDataAchieve.getApiPartsMessage(token, orderNo, jsonParts) == null) { return null; } - return goodsSn; - } + Integer pageCount = apiDataAchieve.getApiPartsMessage(token, orderNo, jsonParts).getJSONObject(ProduceApiConstants.VALUE).getInteger(ProduceApiConstants.PAGE_COUNT); // 获取页码总数 + // 根据总页码总数进行多线程循环 + Map partsInfos = new HashMap<>(); + Map> partsItem = new HashMap<>(); + Map remarks = new HashMap<>(); - // 配件类型转换 - private String changePartType(String objectType, boolean isComposite) { - if (PART_CATEGORY_ONE.equals(objectType)) { - return PART_CATEGORY_ONE; - } else { - if (isComposite) { - return PART_CATEGORY_THREE; - } else { - return PART_CATEGORY_TWO; + + List>> futures = new ArrayList<>(); + for (int i = 1; i <= pageCount; i++) { + JSONObject pageJsonParts = new JSONObject(); + pageJsonParts.put(ProduceApiConstants.CURR_PAGE_KEY, i); + pageJsonParts.put(ProduceApiConstants.PAGE_COUNT_KEY, PARTS_PAGE_MAX); + pageJsonParts.put(ProduceApiConstants.ORDER_NO_KEY, "N" + orderNo); + + CompletableFuture> future = CompletableFuture.supplyAsync(() -> { + JSONObject value = apiDataAchieve.getApiPartsMessage(token, orderNo, pageJsonParts); + return partsInfoChange(value, orderId, organId, token); + }); + + futures.add(future); + } + + // 等待所有异步操作完成,并收集结果 + CompletableFuture.allOf(futures.toArray(new CompletableFuture[pageCount])).join(); + + // 处理每个CompletableFuture的结果 + for (CompletableFuture> future : futures) { + try { + Map result = future.get(); // 获取每个任务的结果 + + // 假设partsInfoChange返回的map包含PARTS、ITEM和PARTS_REMARK三个键 + @SuppressWarnings("unchecked") + Map pagePartsInfos = (Map) result.get(FieldConstants.PARTS); + @SuppressWarnings("unchecked") + Map> pagePartsItem = (Map>) result.get(FieldConstants.ITEM); + @SuppressWarnings("unchecked") + Map pageRemarks = (Map) result.get(FieldConstants.PARTS_REMARK); + + // 判断是否存在相同的key + Set commonKeys = getCommonKeys(pagePartsInfos, partsInfos); + if (!commonKeys.isEmpty()) { // 存在相同的键 + commonKeys.forEach(key -> { + Long idBefore = partsInfos.get(key).getId(); + Long idNew = pagePartsInfos.get(key).getId(); + // 遍历pagePartsItem + pagePartsItem.forEach((k, valueList) -> { + valueList.stream() + .filter(orderItem -> idNew.equals(orderItem.getPartsId())) + .forEach(orderItem -> orderItem.setPartsId(idBefore)); + }); + pagePartsInfos.remove(key); + }); + } + // 合并到最终的结果映射中 + partsInfos.putAll(pagePartsInfos); + partsItem.putAll(pagePartsItem); + remarks.putAll(pageRemarks); + } catch (InterruptedException | ExecutionException e) { + throw new RuntimeException(e); } + } + return new ApiDataTypeVo().setMapPartsInfos(partsInfos).setMapItemByGroup(partsItem).setMapPartRemarks(remarks); } - /** - * 配件信息转存 - * - * @param value: 配件数据 - * @param orderId: - * @param goodsDOMap: - * @return Map Integer指配件的dataId标识id - */ - public Map partsInfoChange(JSONObject value, - Long orderId, - Map goodsDOMap, - Map bodyInfos, - Long organId, - String token) { - Map map = new HashMap<>(); - Map partsInfos = new HashMap<>(); - Map partsItem = new HashMap<>(); - Map remarks = new HashMap<>(); + // 配件数据转换 + private Map partsInfoChange(JSONObject partJSONObject, + Long orderId, + Long organId, + String token) { - map.put("partsInfos", partsInfos); - map.put("partsItems", partsItem); - map.put("remarks", remarks); - - if (value == null || value.isEmpty()) { - return map; + if (partJSONObject == null || partJSONObject.isEmpty() || partJSONObject.getJSONObject(ProduceApiConstants.VALUE).getJSONArray(ProduceApiConstants.LIST).isEmpty()) { + return Collections.emptyMap(); } + Map map = new HashMap<>(); + Map partsInfos = new HashMap<>(); + Map> partsItem = new HashMap<>(); + Map remarks = new HashMap<>(); - - - JSONArray partsLists = value.getJSONArray(ProduceApiConstants.LIST); + JSONArray partsLists = partJSONObject.getJSONObject(ProduceApiConstants.VALUE).getJSONArray(ProduceApiConstants.LIST); for (int i = 0; i < partsLists.size(); i++) { - JSONObject parts = partsLists.getJSONObject(i); + JSONObject part = partsLists.getJSONObject(i); Long partsId = (Long) identifierGenerator.nextId(null); // 这边用的配件详情接口的数据,可能存在多种配件的goodsId相同 // 配件长宽厚颜色赋值 - Map sizeMap = getPartsSize(parts.getJSONObject(ProduceApiConstants.PD_SIZE), parts.getJSONObject(ProduceApiConstants.PD_PARTS_SPEC_OB)); + Map sizeMap = getPartsSize(part.getJSONObject(ProduceApiConstants.PD_SIZE), part.getJSONObject(ProduceApiConstants.PD_PARTS_SPEC_OB)); // goods_id转换,需要调用接口 -// Long goodsId = goodsDOMap.get(parts.getLong(ProduceApiConstants.PD_GOODS_ID)) != null -// ? goodsDOMap.get(parts.getLong(ProduceApiConstants.PD_GOODS_ID)).getId() : parts.getLong(ProduceApiConstants.PD_GOODS_ID); - Long goodsId = parts.getLong(ProduceApiConstants.PD_GOODS_ID); + String goodsId = part.getString(ProduceApiConstants.PD_GOODS_ID); String goodsSn = null; - Long key = parts.getLong(ProduceApiConstants.PD_ITEM_NO); + String key = part.getString(ProduceApiConstants.PD_ITEM_NO); // goods_id不为0时,要判断是否有存相同的goods_id,为0时,新增一条order_parts - if (goodsId != 0) { - goodsSn = getGoodsSn(parts.getLong(ProduceApiConstants.PD_GOODS_ID), token); + if (!goodsId.equals("0")) { + goodsSn = getGoodsSn(part.getLong(ProduceApiConstants.PD_GOODS_ID), token); key = goodsId; } + + // item 明细 + List itemList = new ArrayList<>(); + // 公共属性构建 + OrderItemDO item = OrderItemDO.builder() + .id((Long) identifierGenerator.nextId(null)) + .orderId(orderId) + .type(OrderItemTypeEnum.PARTS_ITEM.getStatus()) + .roomId(part.getLong(ProduceApiConstants.PD_ROOM_ID)) + .bodyId(part.getLong(ProduceApiConstants.PD_BOX_ID)) + .planId(0L) + .packageId(0L) + .partsId(partsId) + .num(part.getDouble(ProduceApiConstants.PD_NUM)) + .organId(organId) + .build(); + + JSONArray moduleIdList = part.getJSONArray(ProduceApiConstants.PD_MODULE_ID_LIST); + if (moduleIdList != null && !moduleIdList.isEmpty()) { + for (int j = 0; j < moduleIdList.size(); j++) { + Long moduleId = moduleIdList.getLong(j); + OrderItemDO moduleItem = copyDO(item) // Assuming toBuilder method exists for OrderItemDO + .setId((Long) identifierGenerator.nextId(null)) + .setGroupId(moduleId); + itemList.add(moduleItem); + } + } else { + // 当没有模块ID列表时,直接使用默认的item对象 + itemList.add(item); + } + partsItem.put(part.getString(ProduceApiConstants.PD_ITEM_ID), itemList); + + if (partsInfos.get(key) != null) { //有存,下一条 + Long finalPartsId = partsInfos.get(key).getId(); + itemList.forEach( + value -> value.setPartsId(finalPartsId) + ); + continue; + } + OrderPartsDO partsInfo = OrderPartsDO.builder() .id(partsId) .orderId(orderId) .goodsId(goodsSn) - .name(parts.getString(ProduceApiConstants.PD_NAME)) -// .material(String.valueOf(goodsDOMap.get(parts.getLong(ProduceApiConstants.PD_GOODS_ID)) != null -// ? goodsDOMap.get(parts.getLong(ProduceApiConstants.PD_GOODS_ID)).getMaterial() : "")) + .name(part.getString(ProduceApiConstants.PD_NAME)) .material((String) sizeMap.get(PART_MATERIAL)) - .category(changePartType(parts.getString(ProduceApiConstants.PD_OBJECT_TYPE), parts.getBoolean(ProduceApiConstants.PD_IS_COMPOSITE))) - .type(changePartType(parts.getString(ProduceApiConstants.PD_OBJECT_TYPE), parts.getBoolean(ProduceApiConstants.PD_IS_COMPOSITE))) -// .type(parts.getString(ProduceApiConstants.PD_OBJECT_TYPE)) - .model(parts.getString(ProduceApiConstants.PD_MODEL)) + .category(changePartType(part.getString(ProduceApiConstants.PD_OBJECT_TYPE), part.getBoolean(ProduceApiConstants.PD_IS_COMPOSITE))) + .type(changePartType(part.getString(ProduceApiConstants.PD_OBJECT_TYPE), part.getBoolean(ProduceApiConstants.PD_IS_COMPOSITE))) + .model(part.getString(ProduceApiConstants.PD_MODEL)) .color((String) sizeMap.get(PART_COLOR)) .width((Double) sizeMap.get(PART_WIDTH)) .length((Double) sizeMap.get(PART_LENGTH)) .thickness((Double) sizeMap.get(PART_THICKNESS)) - .spec(parts.getString(ProduceApiConstants.PD_SPEC)) - .brand(parts.getString(ProduceApiConstants.PD_BRAND)) - .factory(parts.getString(ProduceApiConstants.PD_FACTORY)) - .unit(parts.getString(ProduceApiConstants.PD_UNITS)) - .isComposite(parts.getBoolean(ProduceApiConstants.PD_IS_COMPOSITE)) - .remark(parts.getString(ProduceApiConstants.PD_REMARK)) - .price(parts.getDouble(ProduceApiConstants.PD_PRICE)) + .spec(part.getString(ProduceApiConstants.PD_SPEC)) + .brand(part.getString(ProduceApiConstants.PD_BRAND)) + .factory(part.getString(ProduceApiConstants.PD_FACTORY)) + .unit(part.getString(ProduceApiConstants.PD_UNITS)) + .isComposite(part.getBoolean(ProduceApiConstants.PD_IS_COMPOSITE)) + .remark(part.getString(ProduceApiConstants.PD_REMARK)) + .price(part.getDouble(ProduceApiConstants.PD_PRICE)) .organId(organId) .build(); - // 主分类赋值 -// if (parts.getString(ProduceApiConstants.PD_OBJECT_TYPE).equals(PART_CATEGORY_ONE)) { -// partsInfo.setCategory(PART_CATEGORY_ONE); -// } else { -// if (parts.getBoolean(ProduceApiConstants.PD_IS_COMPOSITE)) { -// partsInfo.setCategory(PART_CATEGORY_THREE); -// } else { -// partsInfo.setCategory(PART_CATEGORY_TWO); -// } -// } - - // item 明细 - OrderItemDO item = OrderItemDO.builder() - .id((Long) identifierGenerator.nextId(null)) - .orderId(orderId) - .type(OrderItemTypeEnum.PARTS_ITEM.getStatus()) - .roomId(bodyInfos.get(parts.getLong(ProduceApiConstants.PD_BOX_ID)).getRoomId()) - .bodyId(bodyInfos.get(parts.getLong(ProduceApiConstants.PD_BOX_ID)).getId()) - .planId(0L) - .packageId(0L) - .groupId(0L) - .partsId(partsId) - .num(parts.getDouble(ProduceApiConstants.PD_NUM)) - .organId(organId) - .build(); - partsItem.put(parts.getLong(ProduceApiConstants.PD_ITEM_NO), item); - - if (partsInfos.get(goodsId) != null) { //有存,下一条 - partsId = partsInfos.get(goodsId).getId(); - partsItem.get(parts.getLong(ProduceApiConstants.PD_ITEM_NO)).setPartsId(partsId); - continue; - } - remarks.put(key, partsRemarkChange(parts, orderId, partsId)); + remarks.put(key, partsRemarkChange(part, orderId, partsId)); partsInfos.put(key, partsInfo); } - -// map.put("partsInfos", partsInfos); -// map.put("partsItems", partsItem); -// map.put("remarks", remarks); + map.put(FieldConstants.PARTS, partsInfos); + map.put(FieldConstants.ITEM, partsItem); + map.put(FieldConstants.PARTS_REMARK, remarks); return map; } - // 配件备注集合 - private OrderPartsRemark partsRemarkChange(JSONObject value, - Long orderId, - Long partsId) { - OrderPartsRemark remark = new OrderPartsRemark(); - if (value != null && !value.isEmpty()) { - remark.setPartsId(partsId); - remark.setOrderId(orderId); - remark.setRemark(value.getString(ProduceApiConstants.PD_REMARK)); - remark.setSpecExtras(value.getString(ProduceApiConstants.PD_SPEC_EXTRAS)); - remark.setSpecialRemark(value.getString(ProduceApiConstants.PD_SPECIAL_REMARK)); - remark.setDoorRemark(value.getString(ProduceApiConstants.PD_DOOR_REMARK)); - remark.setHingeRemark(value.getString(ProduceApiConstants.PD_HINGE_REMARK)); - } - return remark; - } + // 小板造型数据获取 + public ApiDataTypeVo platesDetailChange(String token, + Long orderId, + String orderNo, + Long organId) { +// System.out.println("开始6: " + System.currentTimeMillis()); - /** - * 板材信息转换 写表 Integer指板材的ItemID板id 加一个板材自定义编号 - * value 板材造型数据 - * dataPlates 板材明细 - * dataBlocks 板材数据 - */ - private Map platesInfoChange(JSONObject value, - JSONObject dataPlates, - Long orderId, - Map goodsDOMap, - Map bodyInfos, - JSONObject dataBlocks, - Long organId) { - // 板材 写ES - Map plateDetail = platesDetailChange(value); + JSONObject jsonPlatesDetail = apiDataAchieve.getApiPlateProData(token, orderNo); - // 板材数据 - Map plateMap = getBlocksData(dataBlocks); - - Map map = new HashMap<>(); - Map platesInfos = new HashMap<>(); - Map platesItem = new HashMap<>(); - - map.put("platesInfos", platesInfos); - map.put("platesItems", platesItem); - map.put("plateDetail", plateDetail); - map.put("bodyInfos", bodyInfos); - - if (dataPlates == null || dataPlates.isEmpty()) { - return map; + // 获取板件详情数据 + if (jsonPlatesDetail.getJSONObject(ProduceApiConstants.VALUE) == null) { + return null; } - - JSONArray plateLists = dataPlates.getJSONArray(ProduceApiConstants.LIST); - for (int i = 0; i < plateLists.size(); i++) { - long plateNo = idWorker.nextId(); - long obtainingTime = idWorker.obtainingTime(); - - JSONObject plate = plateLists.getJSONObject(i); - - Integer type = Integer.valueOf(dictDataApi.parseDictData(DictTypeConstants.PLATE_TYPE, - plate.getString(ProduceApiConstants.BD_BOARD_TYPE)) - .getData().getValue()); - Long plateId = (Long) identifierGenerator.nextId(null); - - String remarkJson = plate.getString(ProduceApiConstants.BD_REMARK_JSON).replace("\"", "").trim(); - String remark = !remarkJson.trim().isEmpty() ? remarkJson : ""; - - PlateDO plateInfo = PlateDO.builder() - .id(plateId) - .orderId(orderId) - .name(plate.getString(ProduceApiConstants.BD_BOARD_NAME)) - .plateNo((obtainingTime) + Long.toString(plateNo).substring(2)) - .type(type) - .goodsId(goodsDOMap.get(plate.getLong(ProduceApiConstants.BD_GOODS_ID)) != null ? - goodsDOMap.get(plate.getLong(ProduceApiConstants.BD_GOODS_ID)).getId() : plate.getLong(ProduceApiConstants.BD_GOODS_ID)) - .splitHeight(BigDecimal.valueOf(plate.getDouble(ProduceApiConstants.BD_SPLIT_HEIGHT))) - .splitThickness(BigDecimal.valueOf(plate.getDouble(ProduceApiConstants.BD_SPLIT_THICKNESS))) - .splitWidth(BigDecimal.valueOf(plate.getDouble(ProduceApiConstants.BD_SPLIT_WIDTH))) - .sealLeft(BigDecimal.valueOf(plate.getDouble(ProduceApiConstants.BD_SEALED_LEFT))) - .sealRight(BigDecimal.valueOf(plate.getDouble(ProduceApiConstants.BD_SEALED_RIGHT))) - .sealUp(BigDecimal.valueOf(plate.getDouble(ProduceApiConstants.BD_SEALED_UP))) - .sealDown(BigDecimal.valueOf(plate.getDouble(ProduceApiConstants.BD_SEALED_DOWN))) - .holeArrange(0) // 排孔类型 值无实际含义,默认初始化值 - .unregularPointCount(plate.getInteger(ProduceApiConstants.BD_UN_REGULAR_POINT_COUNT))// - .frontHoleCount(plate.getInteger(ProduceApiConstants.BD_FRONT_HOLE_COUNT)) - .sideHoleCount(plate.getInteger(ProduceApiConstants.BD_BACK_HOLE_COUNT)) - .sideHoleCount(plate.getInteger(ProduceApiConstants.BD_SIDE_HOLE_COUNT)) - .frontModelCount(plate.getInteger(ProduceApiConstants.BD_FRONT_MODEL_COUNT)) - .backModelCount(plate.getInteger(ProduceApiConstants.BD_BACK_MODEL_COUNT)) - .isDoor(plate.getInteger(ProduceApiConstants.BD_OPEN_DOOR_TYPE) != 0) - .openDoorType(plate.getInteger(ProduceApiConstants.BD_OPEN_DOOR_TYPE)) - .isArcAcross(false) - .moduleTypeId(0L) - .isSculpt(plate.getBoolean(ProduceApiConstants.BD_IS_MODEL)) - .isSpecialShaped(plate.getBoolean(ProduceApiConstants.BD_IS_UN_REGULAR)) - .isCancel(false) - .filterType("") - .remark(remark.replace("[", "").replace("]", "")) - .organId(organId) - .roomName(bodyInfos.get(plate.getLong(ProduceApiConstants.BD_BOX_ID)).getRoomName()) - .bodyName(bodyInfos.get(plate.getLong(ProduceApiConstants.BD_BOX_ID)).getName()) - .customPlateNoBuilder(new StringBuilder()) - .build(); - // item 明细 - OrderItemDO itemPlate = OrderItemDO.builder() - .id((Long) identifierGenerator.nextId(null)) - .orderId(orderId) - .type(OrderItemTypeEnum.PLATE_ITEM.getStatus()) - .roomId(bodyInfos.get(plate.getLong(ProduceApiConstants.BD_BOX_ID)).getRoomId()) - .bodyId(bodyInfos.get(plate.getLong(ProduceApiConstants.BD_BOX_ID)).getId()) - .planId(0L) - .packageId(0L) - .groupId(0L) - .partsId(0L) - .plateId(plateId) - .num(1.0) - .organId(organId) - .build(); - - if (plateDetail != null){ - Long blockNo = plate.getLong(ProduceApiConstants.BD_BLOCK_NO); - PlateDetail plateDetailInfo = plateDetail.get(blockNo); - - if (plateDetailInfo != null) { - plateDetailInfo.setPlateId(plateId) - .setExtraRemark(plate.getString(ProduceApiConstants.BD_EXTRA_REMARK).replace("\"", "").trim()) - .setSpecialRemarkDei(plate.getString(ProduceApiConstants.BD_SPECIAL_REMARK).replace("\"", "").trim()) - .setExtraHandleRemark(plate.getString(ProduceApiConstants.BD_EXTRA_HANDLE_REMARK).replace("\"", "").trim()) - .setDrillsRemark(plate.getString(ProduceApiConstants.BD_DRILLS_REMARK).replace("\"", "").trim()) - .setInfoRemark(plate.getString(ProduceApiConstants.BD_INFO_REMARK).replace("\"", "").trim()) - .setRemarkJsonDei(remarkJson); - - plateInfo.setHoleFace(plateDetailInfo.getTypographicFace()) - .setWidth(plateDetailInfo.getPlateWidth()) - .setHeight(plateDetailInfo.getPlateLength()) - .setOffsetX(plateDetailInfo.getOffsetX()) - .setOffsetY(plateDetailInfo.getOffsetY()); - - if (plateDetailInfo.getThroughModelCount() != null - && plateDetailInfo.getThroughModelCount() > 0){ - plateInfo.setFilterType(plateInfo.getFilterType() + ",1"); - } - if (plateDetailInfo.getThroughHoleCount() != null - && plateDetailInfo.getThroughHoleCount() > 0){ - plateInfo.setFilterType(plateInfo.getFilterType() + ",2"); - } - if (plateDetailInfo.getHas2DModel() != null - && plateDetailInfo.getHas2DModel()){ - plateInfo.setFilterType(plateInfo.getFilterType() + ",4"); - } - - } - - if (plateMap.get(blockNo) != null) { - JSONObject jsonObject = plateMap.get(blockNo); - if (plateDetailInfo != null){ - plateDetailInfo.setRemarkJson(jsonObject.getString(ProduceApiConstants.BG_REMARK_JSON).replace("\"", "").trim()) - .setSpecialRemark(jsonObject.getString(ProduceApiConstants.BG_SPECIAL_REMARK).replace("\"", "").trim()); - } - } - } - - if (plateMap != null){ - Long blockNo = plate.getLong(ProduceApiConstants.BD_BLOCK_NO); - if (plateMap.get(blockNo) != null) { - JSONObject jsonObject = plateMap.get(blockNo); - plateInfo.setThickness(BigDecimal.valueOf(jsonObject.getDouble(ProduceApiConstants.BG_THICKNESS))) - .setArea(BigDecimal.valueOf(jsonObject.getDouble(ProduceApiConstants.BG_AREA))) - .setTexture(jsonObject.getInteger(ProduceApiConstants.BG_WAVE)) - .setIsRowHole(jsonObject.getBoolean(ProduceApiConstants.BG_IS_HOLE)); - } - } - - BigDecimal splitHeight = plateInfo.getSplitHeight(); - BigDecimal splitWidth = plateInfo.getSplitWidth(); - BigDecimal splitThickness = plateInfo.getSplitThickness(); - - if (BigDecimal.ZERO.compareTo(splitHeight) == 0 || BigDecimal.ZERO.compareTo(splitWidth) == 0 || BigDecimal.ZERO.compareTo(splitThickness) == 0) { - plateInfo.setSplitHeight(plateInfo.getHeight()) - .setSplitWidth(plateInfo.getWidth()) - .setSplitThickness(plateInfo.getThickness()); - } - - platesInfos.put(plate.getLong(ProduceApiConstants.BD_ITEM_ID), plateInfo); - platesItem.put(plate.getLong(ProduceApiConstants.BD_ITEM_ID), itemPlate); - - } - - - List platesList = platesItem.values().stream().toList(); - List plateDOList = platesInfos.values().stream().toList(); - - Map> platesDetail = platesList.stream() - .collect(Collectors.groupingBy(OrderItemDO::getBodyId)); // 根据柜体分组 - - Map plateDOMap = plateDOList.stream() - .collect(Collectors.toMap(PlateDO::getId, plate -> plate)); // 板件id为key - - // 遍历platesDetail - AtomicInteger NUM = new AtomicInteger(0); - AtomicInteger specialShapedNum = new AtomicInteger(0); - platesDetail.forEach((k, v) -> { - - v.forEach(item -> { - NUM.getAndIncrement(); - - if (Boolean.TRUE.equals(plateDOMap.get(item.getPlateId()).getIsSpecialShaped())) { // 异形相加 - specialShapedNum.getAndIncrement(); - } - }); - bodyInfos.forEach((n, m) -> { - if (k == m.getId()) { - m.setPlateNum(NUM.get()); - m.setUnregularNum(specialShapedNum.get()); - } - }); - NUM.set(0); - specialShapedNum.set(0); - }); - - return map; - } - - /** - * 板材数据转换成 Map - */ - public Map getBlocksData(JSONObject dataBlocks) { - Map map = new HashMap<>(); - JSONArray ordersArray = dataBlocks.getJSONArray(ProduceApiConstants.LIST); - if (ordersArray != null && !ordersArray.isEmpty()) { - for (int i = 0; i < ordersArray.size(); i++) { - JSONObject block = ordersArray.getJSONObject(i); - // 订单号去N - String blockNo = block.getString(ProduceApiConstants.BG_BLOCK_NO).replace("N", ""); - map.put(Long.valueOf(blockNo), block); - } - } -// System.out.println("map 板材 " + map); - return map; - } - - /** - * 板材设计数据转换成PlateDetail Integer指BlockID板id - */ - public Map platesDetailChange(JSONObject dataPlates) { - - if (dataPlates.getJSONObject(ProduceApiConstants.VALUE) == null) { - return Collections.emptyMap(); - } - - Map plateDetails = new HashMap<>(); + Map plateDetails = new HashMap<>(); // 获取 Orders 字段对应的数组 - JSONArray ordersArray = dataPlates.getJSONObject(ProduceApiConstants.VALUE).getJSONArray(ProduceApiConstants.OPD_ORDER); + JSONArray ordersArray = jsonPlatesDetail.getJSONObject(ProduceApiConstants.VALUE).getJSONArray(ProduceApiConstants.OPD_ORDER); if (ordersArray == null || ordersArray.isEmpty()) { - return Collections.emptyMap(); + return null; } for (int i = 0; i < ordersArray.size(); i++) { @@ -962,7 +695,7 @@ public class ApiTypeRealize { // 获取材料信息 JSONArray materialJson = order.getJSONArray(ProduceApiConstants.BPD_MATERIALS); if (materialJson == null || materialJson.isEmpty()) { - return plateDetails; + return new ApiDataTypeVo().setMapPlateDetails(plateDetails); } for (int j = 0; j < materialJson.size(); j++) { JSONObject material = materialJson.getJSONObject(j); @@ -970,12 +703,14 @@ public class ApiTypeRealize { // 板件信息 JSONArray blocks = material.getJSONArray(ProduceApiConstants.BPD_BLOCKS); if (blocks == null || blocks.isEmpty()) { - return plateDetails; + return new ApiDataTypeVo().setMapPlateDetails(plateDetails); } for (int k = 0; k < blocks.size(); k++) { JSONObject block = blocks.getJSONObject(k);// 每块板 PlateDetail plateDetail = PlateDetail.builder() + .organId(organId) + .orderId(orderId) .bodyNo(block.getString(ProduceApiConstants.BPD_BOX_NO)) .plateNo(block.getString(ProduceApiConstants.BPD_BLOCK_NO)) .name(block.getString(ProduceApiConstants.BPD_BLOCK_NAME)) @@ -1021,7 +756,7 @@ public class ApiTypeRealize { .setSideRemark(remarkToMap(block)) .setDrillsInfos(getDrillsInfo(block.getJSONObject(ProduceApiConstants.BPD_EXTRA_REMARK))); } - plateDetails.put(block.getLong(ProduceApiConstants.BPD_BLOCK_NO), plateDetail); + plateDetails.put(block.getString(ProduceApiConstants.BPD_BLOCK_NO), plateDetail); } } @@ -1029,7 +764,291 @@ public class ApiTypeRealize { } - return plateDetails; + return new ApiDataTypeVo().setMapPlateDetails(plateDetails); + } + // 小板,大板,造型,item信息获取 + public ApiDataTypeVo platesInfoChange(String token, + Long orderId, + String orderNo, + Long organId) { + + // 配件api调用参数生成 + JSONObject jsonPlates = new JSONObject(); + jsonPlates.put(ProduceApiConstants.CURR_PAGE_KEY, 1); + jsonPlates.put(ProduceApiConstants.PAGE_COUNT_KEY, PARTS_PAGE_MAX); + jsonPlates.put(ProduceApiConstants.ORDER_NO_KEY, "N" + orderNo); + + if (apiDataAchieve.getApiPlateDetailMessage(token, orderNo, jsonPlates) == null) { + return null; + } + + Integer pageCount = apiDataAchieve.getApiPlateDetailMessage(token, orderNo, jsonPlates).getJSONObject(ProduceApiConstants.VALUE).getInteger(ProduceApiConstants.PAGE_COUNT); // 获取页码总数 + // 根据总页码总数进行多线程循环 + Map plateInfos = new HashMap<>(); + Map> plateItem = new HashMap<>(); + Map plateDetailMap = new HashMap<>(); + + // 柜体板块片数,柜体异形板片数 + Map totalPlateCountMapToBody = new HashMap<>(); + Map irregularPlateCountMapToBody = new HashMap<>(); + + // 加工组板块片数,加工组异形板片数 + Map totalPlateCountMapToGroup = new HashMap<>(); + Map irregularPlateCountMapToGroup = new HashMap<>(); + + List>> futures = new ArrayList<>(); + JSONObject blocksValue = apiDataAchieve.getApiBlocksMessage(token, orderNo); + for (int i = 1; i <= pageCount; i++) { + JSONObject jsonPlate = new JSONObject(); + jsonPlate.put(ProduceApiConstants.CURR_PAGE_KEY, i); + jsonPlate.put(ProduceApiConstants.PAGE_COUNT_KEY, PARTS_PAGE_MAX); + jsonPlate.put(ProduceApiConstants.ORDER_NO_KEY, "N" + orderNo); + + CompletableFuture> future = CompletableFuture.supplyAsync(() -> { + JSONObject value = apiDataAchieve.getApiPlateDetailMessage(token, orderNo, jsonPlate); + + return platesInfoChange(value, blocksValue, orderId, organId); + }); + + futures.add(future); + } + // 等待所有异步操作完成,并收集结果 + CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])).join(); + + // 处理每个CompletableFuture的结果 + for (CompletableFuture> future : futures) { + try { + Map result = future.get(); // 获取每个任务的结果 + + // 假设partsInfoChange返回的map包含PARTS、ITEM和PARTS_REMARK三个键 + @SuppressWarnings("unchecked") + Map pagePlatesInfos = (Map) result.get(FieldConstants.PLATE); + @SuppressWarnings("unchecked") + Map> pagePlatesItem = (Map>) result.get(FieldConstants.ITEM); + @SuppressWarnings("unchecked") + Map plateToBody = (Map) result.get(BODY_PLATE_NUMBER); + @SuppressWarnings("unchecked") + Map irregularPlateToBody = (Map) result.get(BODY_IRREGULAR_PLATE_NUMBER); + @SuppressWarnings("unchecked") + Map plateToGroup = (Map) result.get(GROUP_PLATE_NUMBER); + @SuppressWarnings("unchecked") + Map irregularPlateToGroup = (Map) result.get(GROUP_IRREGULAR_PLATE_NUMBER); + @SuppressWarnings("unchecked") + Map plateDetailMapRemarks = (Map) result.get(PLATE_DETAILS_REMARKS); + + // 合并到最终的结果映射中 + plateInfos.putAll(pagePlatesInfos); + plateItem.putAll(pagePlatesItem); + + totalPlateCountMapToBody.putAll(mergeMap(totalPlateCountMapToBody,plateToBody)); + irregularPlateCountMapToBody.putAll(mergeMap(irregularPlateCountMapToBody,irregularPlateToBody)); + totalPlateCountMapToGroup.putAll(mergeMap(totalPlateCountMapToGroup,plateToGroup)); + irregularPlateCountMapToGroup.putAll(mergeMap(irregularPlateCountMapToGroup,irregularPlateToGroup)); + plateDetailMap.putAll(plateDetailMapRemarks); + } catch (InterruptedException | ExecutionException e) { + throw new RuntimeException(e); + } + + } + return new ApiDataTypeVo().setMapPlatesInfos(plateInfos).setMapItemByGroup(plateItem) + .setTotalPlateCountMapToBody(totalPlateCountMapToBody) + .setIrregularPlateCountMapToBody(irregularPlateCountMapToBody) + .setTotalPlateCountMapToGroup(totalPlateCountMapToGroup) + .setIrregularPlateCountMapToGroup(irregularPlateCountMapToGroup) + .setMapPlateDetails(plateDetailMap); + + } + + // 小板数据转换 + private Map platesInfoChange(JSONObject platesJSONObject, + JSONObject blocksJSONObject, + Long orderId, + Long organId) { +// System.out.println("开始时间 :" + System.currentTimeMillis()); + + if (platesJSONObject == null || platesJSONObject.isEmpty()) { + return Collections.emptyMap(); + } + if (blocksJSONObject == null || blocksJSONObject.isEmpty()) { + return Collections.emptyMap(); + } + // 板材数据 + Map blocksMap = getBlocksData(blocksJSONObject); + + + JSONArray plateLists = platesJSONObject.getJSONObject(ProduceApiConstants.VALUE).getJSONArray(ProduceApiConstants.LIST); +// System.out.println(" 长度 " + plateLists.size()); + + Map map = new HashMap<>(); + Map partsInfos = new HashMap<>(); + List plateList = new ArrayList<>(); + Map> platesItem = new HashMap<>(); + Map plateDetailMap = new HashMap<>(); + + // 柜体板块片数,柜体异形板片数 + Map totalPlateCountMapToBody = new HashMap<>(); + Map irregularPlateCountMapToBody = new HashMap<>(); + + // 加工组板块片数,加工组异形板片数 + Map totalPlateCountMapToGroup = new HashMap<>(); + Map irregularPlateCountMapToGroup = new HashMap<>(); + + for (int i = 0; i < plateLists.size(); i++) { + + long plateNo = idWorker.nextId(); + long obtainingTime = idWorker.obtainingTime(); + + JSONObject plate = plateLists.getJSONObject(i); + + Integer type = Integer.valueOf(dictDataApi.parseDictData(DictTypeConstants.PLATE_TYPE, + plate.getString(ProduceApiConstants.BD_BOARD_TYPE)) + .getData().getValue()); + Long plateId = (Long) identifierGenerator.nextId(null); + + String remarkJson = plate.getString(ProduceApiConstants.BD_REMARK_JSON).replace("\"", "").trim(); + String remark = !remarkJson.trim().isEmpty() ? remarkJson : ""; + + PlateDO plateInfo = PlateDO.builder() + .id(plateId) + .orderId(orderId) + .name(plate.getString(ProduceApiConstants.BD_BOARD_NAME)) + .plateNo((obtainingTime) + Long.toString(plateNo).substring(2)) + .type(type) + .goodsId(plate.getLong(ProduceApiConstants.BD_GOODS_ID)) + .splitHeight(BigDecimal.valueOf(plate.getDouble(ProduceApiConstants.BD_SPLIT_HEIGHT))) + .splitThickness(BigDecimal.valueOf(plate.getDouble(ProduceApiConstants.BD_SPLIT_THICKNESS))) + .splitWidth(BigDecimal.valueOf(plate.getDouble(ProduceApiConstants.BD_SPLIT_WIDTH))) + .sealLeft(BigDecimal.valueOf(plate.getDouble(ProduceApiConstants.BD_SEALED_LEFT))) + .sealRight(BigDecimal.valueOf(plate.getDouble(ProduceApiConstants.BD_SEALED_RIGHT))) + .sealUp(BigDecimal.valueOf(plate.getDouble(ProduceApiConstants.BD_SEALED_UP))) + .sealDown(BigDecimal.valueOf(plate.getDouble(ProduceApiConstants.BD_SEALED_DOWN))) + .holeArrange(0) // 排孔类型 值无实际含义,默认初始化值 + .unregularPointCount(plate.getInteger(ProduceApiConstants.BD_UN_REGULAR_POINT_COUNT))// + .frontHoleCount(plate.getInteger(ProduceApiConstants.BD_FRONT_HOLE_COUNT)) + .sideHoleCount(plate.getInteger(ProduceApiConstants.BD_BACK_HOLE_COUNT)) + .sideHoleCount(plate.getInteger(ProduceApiConstants.BD_SIDE_HOLE_COUNT)) + .frontModelCount(plate.getInteger(ProduceApiConstants.BD_FRONT_MODEL_COUNT)) + .backModelCount(plate.getInteger(ProduceApiConstants.BD_BACK_MODEL_COUNT)) + .isDoor(plate.getInteger(ProduceApiConstants.BD_OPEN_DOOR_TYPE) != 0) + .openDoorType(plate.getInteger(ProduceApiConstants.BD_OPEN_DOOR_TYPE)) + .isArcAcross(false) + .moduleTypeId(0L) + .isSculpt(plate.getBoolean(ProduceApiConstants.BD_IS_MODEL)) + .isSpecialShaped(plate.getBoolean(ProduceApiConstants.BD_IS_UN_REGULAR)) + .isCancel(false) + .filterType("") + .remark(remark) + .organId(organId) +// .roomName(bodyInfos.get(plate.getLong(ProduceApiConstants.BD_BOX_ID)).getRoomName()) + .bodyName(plate.getString(ProduceApiConstants.BD_BOX_ID)) // 之后再改成名称 + .customPlateNoBuilder(new StringBuilder()) + .build(); + partsInfos.put(plate.getString(ProduceApiConstants.BD_BLOCK_NO), plateInfo); + plateList.add(plateInfo); + + String cabinetId = plateInfo.getBodyName(); + boolean isIrregular = plateInfo.getIsSpecialShaped(); + // 柜体 + totalPlateCountMapToBody.put(cabinetId, totalPlateCountMapToBody.getOrDefault(cabinetId, 0) + 1); + if (isIrregular) { + irregularPlateCountMapToBody.put(cabinetId, irregularPlateCountMapToBody.getOrDefault(cabinetId, 0) + 1); + } + + // item 明细 + List itemList = new ArrayList<>(); + // 公共属性构建 + OrderItemDO item = OrderItemDO.builder() + .id((Long) identifierGenerator.nextId(null)) + .orderId(orderId) + .type(OrderItemTypeEnum.PLATE_ITEM.getStatus()) + .roomId(plate.getLong(ProduceApiConstants.BD_BOX_ID)) + .bodyId(plate.getLong(ProduceApiConstants.BD_BOX_ID)) + .planId(0L) + .packageId(0L) + .groupId(0L) + .partsId(0L) + .plateId(plateId) + .num(1.0) + .organId(organId) + .build(); + + JSONArray moduleIdList = plate.getJSONArray(ProduceApiConstants.BD_MODULE_ID_LIST); + if (moduleIdList != null && !moduleIdList.isEmpty()) { + for (int j = 0; j < moduleIdList.size(); j++) { + + String groupId = moduleIdList.getString(j); + // 加工组 + totalPlateCountMapToGroup.put(groupId, totalPlateCountMapToGroup.getOrDefault(groupId, 0) + 1); + if (isIrregular) { + irregularPlateCountMapToGroup.put(groupId, irregularPlateCountMapToGroup.getOrDefault(groupId, 0) + 1); + } + + Long moduleId = moduleIdList.getLong(j); + OrderItemDO moduleItem = copyDO(item) // Assuming toBuilder method exists for OrderItemDO + .setId((Long) identifierGenerator.nextId(null)) + .setGroupId(moduleId); + itemList.add(moduleItem); + } + } else { + // 当没有模块ID列表时,直接使用默认的item对象 + itemList.add(item); + } + platesItem.put(plate.getString(ProduceApiConstants.BD_ITEM_ID), itemList); + + // 造型数据中的备注信息 + PlateDetail plateDetailInfo = new PlateDetail(); + plateDetailInfo + .setExtraRemark(plate.getString(ProduceApiConstants.BD_EXTRA_REMARK).replace("\"", "").trim()) + .setSpecialRemarkDei(plate.getString(ProduceApiConstants.BD_SPECIAL_REMARK).replace("\"", "").trim()) + .setExtraHandleRemark(plate.getString(ProduceApiConstants.BD_EXTRA_HANDLE_REMARK).replace("\"", "").trim()) + .setDrillsRemark(plate.getString(ProduceApiConstants.BD_DRILLS_REMARK).replace("\"", "").trim()) + .setInfoRemark(plate.getString(ProduceApiConstants.BD_INFO_REMARK).replace("\"", "").trim()) + .setRemarkJsonDei(remarkJson); + // 获取板材数据中的 + if (blocksMap.get(plate.getString(ProduceApiConstants.BD_BLOCK_NO)) != null) { + JSONObject jsonObject = blocksMap.get(plate.getString(ProduceApiConstants.BD_BLOCK_NO)); + plateDetailInfo.setRemarkJson(jsonObject.getString(ProduceApiConstants.BG_REMARK_JSON).replace("\"", "").trim()) + .setSpecialRemark(jsonObject.getString(ProduceApiConstants.BG_SPECIAL_REMARK).replace("\"", "").trim()); + + plateInfo.setThickness(BigDecimal.valueOf(jsonObject.getDouble(ProduceApiConstants.BG_THICKNESS))) + .setArea(BigDecimal.valueOf(jsonObject.getDouble(ProduceApiConstants.BG_AREA))) + .setTexture(jsonObject.getInteger(ProduceApiConstants.BG_WAVE)) + .setIsRowHole(jsonObject.getBoolean(ProduceApiConstants.BG_IS_HOLE)); + + } + plateDetailMap.put(plate.getString(ProduceApiConstants.BD_BLOCK_NO), plateDetailInfo); + } + + + + map.put(FieldConstants.PLATE, partsInfos); + map.put(FieldConstants.ITEM, platesItem); + + map.put(BODY_PLATE_NUMBER , totalPlateCountMapToBody); + map.put(BODY_IRREGULAR_PLATE_NUMBER , irregularPlateCountMapToBody); + map.put(GROUP_PLATE_NUMBER , totalPlateCountMapToGroup); + map.put(GROUP_IRREGULAR_PLATE_NUMBER , irregularPlateCountMapToGroup); + map.put(PLATE_DETAILS_REMARKS, plateDetailMap); +// System.out.println( +// " platesItem " + platesItem.size() + +// " totalPlateCountMapToBody " + totalPlateCountMapToBody.size() + +// " irregularPlateCountMapToBody " + irregularPlateCountMapToBody.size() + +// " totalPlateCountMapToGroup " + totalPlateCountMapToGroup.size() + +// " irregularPlateCountMapToGroup " + irregularPlateCountMapToGroup.size() + +// " plateDetailMap " + plateDetailMap.size() +// ); + return map; + } + + + // map中key重复,value累加 + private Map mergeMap(Map allMap, Map map) { + for (Map.Entry entry : map.entrySet()) { + String key = entry.getKey(); + Integer value = entry.getValue(); + allMap.put(key, allMap.getOrDefault(key, 0) + value); + } + return allMap; } @@ -1187,8 +1206,6 @@ public class ApiTypeRealize { } modelDetails.add(ModelDetail.builder() - .id(Integer.valueOf(model.getString(ProduceApiConstants.BPD_MODEL_ID))) - .lineID(Integer.valueOf(model.getString(ProduceApiConstants.BPD_MODEL_LINE_ID))) .depth(Double.valueOf(model.getString(ProduceApiConstants.BPD_MODEL_DEPTH))) .faceType(Integer.valueOf(model.getString(ProduceApiConstants.BPD_MODEL_FACE))) .knifeName(model.getString(ProduceApiConstants.BPD_MODEL_TOOL_NO)) @@ -1261,7 +1278,7 @@ public class ApiTypeRealize { } List contourData = new ArrayList<>(); for (int j = 0; j < element.size(); j++) { - JSONObject point = element.getJSONObject(j); + JSONObject point = element.getJSONObject(i); String[] points = splitAndTrim(point.getString(ProduceApiConstants.BPD_MODEL_ORIGIN_MODELING_HOLES_POS)); Point pointVO = Point.builder() .x(Double.valueOf(points[X])) @@ -1308,7 +1325,6 @@ public class ApiTypeRealize { return strs; } - // 将remark转为map public Map remarkToMap(JSONObject block) { String remark = "Remark"; @@ -1321,30 +1337,162 @@ public class ApiTypeRealize { return map; } - // 将remark转为map - public Map edgeRemarkToMap(JSONObject edgeRemark) { - JSONArray jsonArray = edgeRemark.getJSONArray("edgeRemarks"); - if (jsonArray == null || jsonArray.isEmpty()) { - return null; - } - Map map = new HashMap<>(); - for (int i = 0; i < jsonArray.size(); i++) { - if (jsonArray.getString(i) != null && !jsonArray.getString(i).isEmpty()) { - map.put(String.valueOf(i), jsonArray.getString(i)); + /** + * 配件类型转换 + */ + private String changePartType(String objectType, boolean isComposite) { + if (PART_CATEGORY_ONE.equals(objectType)) { + return PART_CATEGORY_ONE; + } else { + if (isComposite) { + return PART_CATEGORY_THREE; + } else { + return PART_CATEGORY_TWO; } } + } + + /** + * 配件长宽厚信息转换 + */ + private Map getPartsSize(JSONObject size, JSONObject spec) { + Map map = new HashMap<>(); + if (size != null && !size.isEmpty()) { + map.put(PART_WIDTH, size.getDouble(ProduceApiConstants.PD_WIDTH)); + map.put(PART_LENGTH, size.getDouble(ProduceApiConstants.PD_LENGTH)); + map.put(PART_THICKNESS, size.getDouble(ProduceApiConstants.PD_THICKNESS)); + } else { + map.put(PART_WIDTH, 0.0); + map.put(PART_LENGTH, 0.0); + map.put(PART_THICKNESS, 0.0); + } + if (spec != null && !spec.isEmpty()) { + map.put(PART_COLOR, spec.getString(ProduceApiConstants.PD_PARTS_SPEC_COLOR)); + map.put(PART_MATERIAL, spec.getString(ProduceApiConstants.PD_PARTS_SPEC_MATERIAL)); + } return map; } - // 商品数据对应中 纹理解析 - public Boolean getTexture(JSONObject extraProp) { - JSONObject jsonObject = new JSONObject(extraProp); - if (jsonObject.getString(ProduceApiConstants.G_HAS_WAVE) != null){ - String hasWave = jsonObject.getString(ProduceApiConstants.G_HAS_WAVE).trim(); + /** + * 配件备注集合 + */ + private OrderPartsRemark partsRemarkChange(JSONObject value, + Long orderId, + Long partsId) { + OrderPartsRemark remark = new OrderPartsRemark(); + if (value != null && !value.isEmpty()) { + remark.setPartsId(partsId); + remark.setOrderId(orderId); + remark.setRemark(value.getString(ProduceApiConstants.PD_REMARK)); + remark.setSpecExtras(value.getString(ProduceApiConstants.PD_SPEC_EXTRAS)); + remark.setSpecialRemark(value.getString(ProduceApiConstants.PD_SPECIAL_REMARK)); + remark.setDoorRemark(value.getString(ProduceApiConstants.PD_DOOR_REMARK)); + remark.setHingeRemark(value.getString(ProduceApiConstants.PD_HINGE_REMARK)); + } + return remark; + } + + /** + * 加工组中加工组和板件的关联关系 + */ + public List jsonArrayToList(JSONArray jsonArray) { + List list = new ArrayList<>(); + for (int i = 0; i < jsonArray.size(); i++) { + list.add(jsonArray.getString(i)); + } + return list; + } + + /** + * 商品中通过数据库标识id得到编码No + */ + private String getGoodsSn(Long goodId, String token) { + String goodsSn; + try { + JSONObject jsonGood = apiDataAchieve.getApiGoodsMessage(token, new Long[]{goodId}).get(); + + goodsSn = jsonGood.getJSONArray(ProduceApiConstants.DATA).getJSONObject(0).getString(ProduceApiConstants.GD_GOODS_SN); + + return goodsSn; + } catch (Exception e){ + return null; + } + } + + /** + * @param extraProp: 商品中的额外属性 + * @return Boolean: 是否有纹理 + */ + private Boolean getTexture(JSONObject extraProp) { + if (extraProp.getString(ProduceApiConstants.G_HAS_WAVE) != null){ + String hasWave = extraProp.getString(ProduceApiConstants.G_HAS_WAVE).trim(); if (hasWave.equals(ProduceApiConstants.ZERO)){ // 无 return false; } } return true; // 有 } + + /** + * 板材数据转换成 Map + */ + public Map getBlocksData(JSONObject dataBlocks) { + Map map = new HashMap<>(); + JSONArray ordersArray = dataBlocks.getJSONArray(ProduceApiConstants.LIST); + if (ordersArray != null && !ordersArray.isEmpty()) { + for (int i = 0; i < ordersArray.size(); i++) { + JSONObject block = ordersArray.getJSONObject(i); + // 订单号去N + String blockNo = block.getString(ProduceApiConstants.BG_BLOCK_NO); + map.put(blockNo, block); + } + } +// System.out.println("map 板材 " + map); + return map; + } + + public Map> mergeMaps(Map> mergedMap, Map> map) { + + // 处理第一个 Map + for (Map.Entry> entry : map.entrySet()) { + String key = entry.getKey(); + List value = entry.getValue(); + + // 使用 computeIfAbsent 确保键存在,如果不存在则创建一个新的列表 + mergedMap.computeIfAbsent(key, k -> new ArrayList<>()).addAll(value); + } + return mergedMap; + } + + // copy对象 + public OrderItemDO copyDO(OrderItemDO item) { + return OrderItemDO.builder() + .id(item.getId()) + .orderId(item.getOrderId()) + .type(item.getType()) + .roomId(item.getRoomId()) + .bodyId(item.getBodyId()) + .planId(item.getPlanId()) + .packageId(item.getPackageId()) + .groupId(item.getGroupId()) + .partsId(item.getPartsId()) + .plateId(item.getPlateId()) + .num(item.getNum()) + .organId(item.getOrganId()) + .build(); + } + + /** + * 获取两个 Map 中相同的键。 + * + * @param map1 第一个 Map + * @param map2 第二个 Map + * @return 包含相同键的 Set + */ + public Set getCommonKeys(Map map1, Map map2) { + return map1.keySet().stream() + .filter(map2::containsKey) + .collect(Collectors.toSet()); + } + } \ No newline at end of file diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/api/webcad/ProduceApiConstants.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/api/webcad/ProduceApiConstants.java index a998aec16..a39e9dd36 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/api/webcad/ProduceApiConstants.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/api/webcad/ProduceApiConstants.java @@ -11,6 +11,12 @@ public class ProduceApiConstants { public static final String CODE = "err_code"; public static final String ZERO = "0"; public static final String ONE = "1"; + public static final String PAGE_COUNT = "PageCount"; + + // 请求发送 + public static final String ORDER_NO_KEY = "order_no"; + public static final String CURR_PAGE_KEY = "curr_page"; + public static final String PAGE_COUNT_KEY = "page_count"; //请求 // ========== getApiOrderPartsMessage partsList 配件明细模块 ========== public static final String GD_GOODS_SN = "goods_sn"; // 用户自定义配件编号 @@ -156,7 +162,7 @@ public class ProduceApiConstants { public static final String BG_THICKNESS = "Thickness"; // 厚 public static final String BG_AREA = "Area"; // 面积 public static final String BG_WAVE = "Wave"; // 纹路(正纹 = 0, 可翻转 = 1, 反纹 = 2 ) - public static final String BG_SEAL = "Seal"; // 封边信息(格式:左封边,右封边,上封边,下封边) + public static final String BG_SEAL = "Seal"; // 封边信息(格式:左封边,右封边,上封边,下封边) 信息不可以用,信息不全 public static final String BG_IS_UN_REGULAR = "IsUnRegular"; // 是否异形 public static final String BG_IS_MODEL = "IsModel"; // 是否造型 public static final String BG_IS_HOLE = "IsHole"; // 是否有孔