diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plan/bo/OrderIds.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plan/bo/OrderIds.java index 125005e52..eccc24004 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plan/bo/OrderIds.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plan/bo/OrderIds.java @@ -1,12 +1,11 @@ package com.cf.imes.module.executor.controller.admin.plan.bo; - +import com.fasterxml.jackson.annotation.JsonInclude; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; - - @Data +@JsonInclude(JsonInclude.Include.NON_NULL) public class OrderIds { diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plan/vo/OrderGoodsResp.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plan/vo/OrderGoodsResp.java index da14115c1..48d801627 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plan/vo/OrderGoodsResp.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plan/vo/OrderGoodsResp.java @@ -1,41 +1,53 @@ package com.cf.imes.module.executor.controller.admin.plan.vo; - import com.cf.imes.module.executor.controller.admin.plan.bo.OrderIds; +import com.fasterxml.jackson.annotation.JsonInclude; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import java.math.BigDecimal; +import java.util.ArrayList; import java.util.List; @Data +@JsonInclude(JsonInclude.Include.NON_NULL) public class OrderGoodsResp { - @Schema(description = "订单id") - private List orderIds; + private List orderIds = new ArrayList<>(); + @Schema(description = "商品id-商品编号") private String goodsId; + @Schema(description = "商品名称") private String goodsName; + @Schema(description = "商品材质") private String material; + @Schema(description = "商品颜色") private String color; + @Schema(description = "宽") private BigDecimal width; + @Schema(description = "高") private BigDecimal height; + @Schema(description = "厚") private BigDecimal thickness; + @Schema(description = "商品纹理") private Boolean texture; + @Schema(description = "商品品牌") private String brand; + @Schema(description = "商品规格") private String spec; + @Schema(description = "面积") private BigDecimal area; diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/planitem/PlanItemMapper.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/planitem/PlanItemMapper.java index f6ec591f9..94da82d90 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/planitem/PlanItemMapper.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/planitem/PlanItemMapper.java @@ -46,10 +46,25 @@ public interface PlanItemMapper extends BaseMapperX { Long selectPlateCountByPlateIds(@Param(Constants.WRAPPER) Wrapper wrapper); + /** + * 查询订单、房间、柜体下未排单大板 + * + * @param page + * @param wrapper + * @param organId + * @return + */ + IPage selectNoPlanGoodsByRoomAndBodyIds(@Param("page") IPage page, @Param(Constants.WRAPPER) Wrapper wrapper,@Param("organId") Long organId); - IPage selectNoPlanGoodsByRoomAndBodyIds(@Param("page") IPage page, @Param(Constants.WRAPPER) Wrapper wrapper,@Param("organId") Long organId); - - IPage selectNoPlanGoodsList(@Param("page") IPage page, @Param(Constants.WRAPPER) Wrapper wrapper,@Param("organId") Long organId); + /** + * 查询订单下未排单大板 + * + * @param page + * @param wrapper + * @param organId + * @return + */ + IPage selectNoPlanGoodsList(@Param("page") IPage page, @Param(Constants.WRAPPER) Wrapper wrapper, @Param("organId") Long organId); List selectNoOrderGoodsIdList(@Param(Constants.WRAPPER) Wrapper wrapper, @Param("organId") Long organId, @Param("type") int type); diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/plan/PlanService.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/plan/PlanService.java index 173be594e..6caa463a0 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/plan/PlanService.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/plan/PlanService.java @@ -55,8 +55,20 @@ public interface PlanService { List getPlanList(); + /** + * 未排订单分页查询 + * + * @param pageReqVO + * @return + */ PageResult getOrderPage(OrderPageReqVOCopy pageReqVO); + /** + * 未排订单大板分页查询 + * + * @param pageReqVO + * @return + */ PageResult getOrderGoodsPage(OrderPageReqVOCopy pageReqVO); diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/plan/PlanServiceImpl.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/plan/PlanServiceImpl.java index 7a593d397..afbcdf1d7 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/plan/PlanServiceImpl.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/plan/PlanServiceImpl.java @@ -641,7 +641,7 @@ public class PlanServiceImpl implements PlanService { .inIfPresent("oi.order_id", pageReqVO.getOrderIds()) .inIfPresent("oi.room_id", pageReqVO.getRoomId()) .inIfPresent("oi.body_id", pageReqVO.getBodyId()); - orderGoodsResps = planItemMapper.selectNoPlanGoodsByRoomAndBodyIds(page,queryWrapperX,getUserOrganId()); + orderGoodsResps = planItemMapper.selectNoPlanGoodsByRoomAndBodyIds(page, queryWrapperX, getUserOrganId()); type = OrderPlanQueryTypeEnum.GOODS_ROOMBODY_QUERY.getType(); }else { queryWrapperX @@ -664,19 +664,24 @@ public class PlanServiceImpl implements PlanService { return new PageResult<>(); } + // 整理商品名称 List goodsName = records.stream().map(OrderGoodsResp::getGoodsName).distinct().toList(); + // 整理材料 List material = records.stream().map(OrderGoodsResp::getMaterial).distinct().toList(); + // 整理颜色 List color = records.stream().map(OrderGoodsResp::getColor).distinct().toList(); + // 整理厚度 List thickness = records.stream().map(OrderGoodsResp::getThickness).distinct().toList(); + // 整理品牌 List brand = records.stream().map(OrderGoodsResp::getBrand).distinct().toList(); + // 整理纹理 List texture = records.stream().map(OrderGoodsResp::getTexture).distinct().toList(); - queryWrapperX .inIfPresent("og.goods_name",goodsName) .inIfPresent("og.material",material) @@ -685,11 +690,13 @@ public class PlanServiceImpl implements PlanService { .inIfPresent("og.brand",brand) .inIfPresent("og.texture", texture); + // 查询带订单列表的商品分组 List orderGoodsIdList = planItemMapper.selectNoOrderGoodsIdList(queryWrapperX, getUserOrganId(), type); + // 订单列表匹配到商品上 mergeOrderGoodsLists(records, orderGoodsIdList); - return new PageResult<>(orderGoodsResps.getRecords(), orderGoodsResps.getTotal()); + return new PageResult<>(records, orderGoodsResps.getTotal()); } @@ -1796,36 +1803,48 @@ public class PlanServiceImpl implements PlanService { } + /** + * 订单列表匹配到商品上 + * + * @param list1 商品列表 + * @param list2 带订单列表的商品分组 + */ + public void mergeOrderGoodsLists(List list1, List list2) { + Map list1Map = new HashMap<>(list1.size()); + long sort = 1; - public static void mergeOrderGoodsLists(List list1, List list2) { - Map list1Map = new HashMap<>(); + // list1构建key分组 for (OrderGoodsResp item1 : list1) { - String key = generateKey(item1); - list1Map.put(key, item1); + item1.setSort(String.valueOf(sort++)); + list1Map.put(generateKey(item1), item1); } - AtomicLong sort = new AtomicLong(System.currentTimeMillis()); + // list2按key分组 + Map> list2Map = + list2.stream().collect(Collectors.groupingBy(this::generateKey)); - for (OrderGoodsResp item2 : list2) { - String key = generateKey(item2); - OrderGoodsResp matchedItem = list1Map.get(key); - if (matchedItem != null) { - if (matchedItem.getOrderIds() == null) { - matchedItem.setOrderIds(new ArrayList<>()); - matchedItem.setSort(String.valueOf(sort.get())); - } - if (item2.getOrderIds() != null) { - matchedItem.getOrderIds().addAll(item2.getOrderIds()); - matchedItem.setSort(String.valueOf(sort.get())); + // key匹配的情况下,把list2的orderIds加到list1中 + for (var entry : list2Map.entrySet()) { + OrderGoodsResp target = list1Map.get(entry.getKey()); + + if (target == null) continue; + + for (OrderGoodsResp item : entry.getValue()) { + if (CollUtil.isNotEmpty(item.getOrderIds())) { + target.getOrderIds().addAll(item.getOrderIds()); } } - sort.addAndGet(1); - } } - private static String generateKey(OrderGoodsResp item) { + /** + * 构建key + * + * @param item + * @return + */ + private String generateKey(OrderGoodsResp item) { return String.join("|", Objects.toString(item.getGoodsName(), ""), Objects.toString(item.getMaterial(), ""), diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/planitem/PlanItemMapper.xml b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/planitem/PlanItemMapper.xml index 01e2e6356..00ffc50a9 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/planitem/PlanItemMapper.xml +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/planitem/PlanItemMapper.xml @@ -60,7 +60,7 @@ and og.plate_num - og.planned_plate_num > 0 - group by orderId,orderDate,deliveryDate,customer,address,defineId,status + group by orderId, orderDate, deliveryDate, customer, address, defineId, status order by o.id desc; @@ -233,7 +233,6 @@ - @@ -250,14 +249,14 @@ @@ -281,8 +282,7 @@ og.thickness as thickness, og.brand as brand, og.texture as texture, - sum(og.plate_num - og.planned_plate_num) as num, - sum(og.area - og.planned_plate_area) as area + sum(og.plate_num - og.planned_plate_num) as num from orders o join order_goods og on o.id = og.order_id and og.organ_id = #{organId} @@ -291,7 +291,7 @@ and og.plate_num - og.planned_plate_num > 0 and og.deleted = false group by og.color, og.goods_name, og.material, og.thickness, og.brand, og.texture - order by thickness desc + order by thickness desc