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 ce4cbf428..1c8a60b2c 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 @@ -561,27 +561,21 @@ public class OrderController { return success(true); } - // 统计 - // 订单超期(工作台) @GetMapping("/getOrderOverdue") - @Operation(summary = "订单超期 (工作台)") + @Operation(summary = " 工作台 - 逾期订单") @PreAuthorize("@ss.hasPermission('homePage:work:be-overdue')") public CommonResult> getOrderOverdue(@Valid PageParam pageParam) { return success(orderService.getOrderOverdue(pageParam)); } - // 订单到期告警 (工作台) @GetMapping("/getOrderWarn") - @Operation(summary = "订单到期告警 (工作台)") + @Operation(summary = "工作台 - 今日要完成订单") @PreAuthorize("@ss.hasPermission('homePage:work:completed-today')") public CommonResult> getOrderNear(@Valid PageParam pageParam) { return success(orderService.getOrderNear(pageParam)); } - - - @GetMapping("/getAllData") @Operation(summary = "获取订单的所有数据") public CommonResult getOrderAllData(@Schema(description = "订单id") @RequestParam(required = false) Long orderId, diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/order/vo/order/OrderOverdueRespVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/order/vo/order/OrderOverdueRespVO.java index c21701346..cee8edc88 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/order/vo/order/OrderOverdueRespVO.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/order/vo/order/OrderOverdueRespVO.java @@ -1,11 +1,11 @@ package com.cf.imes.module.executor.controller.admin.order.vo.order; +import com.fasterxml.jackson.annotation.JsonInclude; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; -import jakarta.validation.constraints.NotEmpty; -import jakarta.validation.constraints.NotNull; import java.time.LocalDateTime; +import java.util.List; @Schema(description = "管理后台 - 订单逾期列表") @Data @@ -13,16 +13,14 @@ import java.time.LocalDateTime; @AllArgsConstructor @NoArgsConstructor @ToString(callSuper = true) +@JsonInclude(JsonInclude.Include.NON_NULL) public class OrderOverdueRespVO { @Schema(description = "订单号") private Long id; @Schema(description = "父单号") - private Long parentNo; - - @Schema(description = "源订单号") - private String apiOrderId; + private Long parentId; @Schema(description = "订单日期", requiredMode = Schema.RequiredMode.REQUIRED) private LocalDateTime orderDate; @@ -33,12 +31,6 @@ public class OrderOverdueRespVO { @Schema(description = "订单类型,1主单 2子单", example = "1") private Integer orderType; - @Schema(description = "订单排序号") - private Integer orderSort; - - @Schema(description = "CAD数据类型,1CAD 2WebCAD 3Excel", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") - private Integer dataType; - @Schema(description = "订单状态,订单状态,0空订单1新单2生产中3生产完成", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") private Integer status; @@ -57,22 +49,12 @@ public class OrderOverdueRespVO { @Schema(description = "经销商", requiredMode = Schema.RequiredMode.REQUIRED) private String dealer; - @Schema(description = "经销商电话", requiredMode = Schema.RequiredMode.REQUIRED) - private String dealerPhoneNumber; - @Schema(description = "业务员") private String salesman; @Schema(description = "拆单员") private String splitter; - @Schema(description = "备注", example = "你猜") - private String remark; - - - @Schema(description = "距离到期时间") - private String becomeDue; - - @Schema(description = "逾期时间") - private String beOverdue; + @Schema(description = "子单列表") + private List child; } diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plan/vo/OrderRespVOCopy.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plan/vo/OrderRespVOCopy.java index 366ecb340..270f57bc0 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plan/vo/OrderRespVOCopy.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plan/vo/OrderRespVOCopy.java @@ -1,6 +1,7 @@ package com.cf.imes.module.executor.controller.admin.plan.vo; import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonInclude; import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Builder; @@ -22,9 +23,14 @@ import static com.cf.imes.framework.common.util.date.DateUtils.*; @Builder @NoArgsConstructor @AllArgsConstructor +@JsonInclude(JsonInclude.Include.NON_NULL) public class OrderRespVOCopy { @Schema(description = "订单id") private Long orderId; + + @Schema(description = "父订单号") + private Long parentId; + @Schema(description = "订单状态") private Integer status; @Schema(description = "自定义单号") @@ -54,4 +60,7 @@ public class OrderRespVOCopy { @Schema(description = "订单对应的板件的信息") private List platePages; + @Schema(description = "子单列表") + private List child; + } \ No newline at end of file diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/order/OrderMapper.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/order/OrderMapper.java index f65ebd7fe..49b914a32 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/order/OrderMapper.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/order/OrderMapper.java @@ -159,12 +159,34 @@ public interface OrderMapper extends BaseMapperX { List selectOrderListByIds(@Param("orderIds") List orderIds, @Param("organId") Long organId); + /** + * 查询今日要完成订单 + * + * @param orderDate + * @param organId + * @param page + * @param orderIds 父级订单数组 + * @return + */ + IPage selectOrderNear(@Param("orderDate") LocalDate orderDate, + @Param("organId") Long organId, + @Param("page") IPage page, + @Param("orderIds") Long... orderIds); - // 订单预警统计 - IPage selectOrderNear(@Param("orderDate") LocalDate orderDate, @Param("organId") Long organId, @Param("page") IPage page); - // 订单逾期统计 - IPage selectOrderOverdue(@Param("today") LocalDate today, @Param("organId") Long organId, @Param("page") IPage page); + /** + * 查询预期订单 + * + * @param today + * @param organId + * @param page + * @param orderIds 父级订单数组 + * @return + */ + IPage selectOrderOverdue(@Param("today") LocalDate today, + @Param("organId") Long organId, + @Param("page") IPage page, + @Param("orderIds") Long... orderIds); /** * 订单数量统计 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 50a9cc50d..f6ec591f9 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 @@ -21,9 +21,19 @@ import java.util.List; @Mapper public interface PlanItemMapper extends BaseMapperX { - - - IPage selectOrderList(@Param("page") IPage page, @Param(Constants.WRAPPER) Wrapper wrapper,@Param("type")int type); + /** + * 未排单订单查询 + * + * @param page + * @param wrapper + * @param type + * @param orderIds 父级订单数组 + * @return + */ + IPage selectOrderList(@Param("page") IPage page, + @Param(Constants.WRAPPER) Wrapper wrapper, + @Param("type") int type, + @Param("orderIds") Long... orderIds); List selectPlanPlateDetailList(@Param("planId") Long planId, @Param("organId") Long organId); 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 3b4da9007..cbc6b9a87 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 @@ -332,7 +332,7 @@ public class OrderServiceImpl implements OrderService { // 4、 回填 child for (OrderDO order : orderDOS) { - order.setChild(childMap.getOrDefault(order.getId(), Collections.emptyList())); + order.setChild(childMap.getOrDefault(order.getId(), null)); } return new PageResult<>(orderDOS, pageResultTotal); } @@ -775,20 +775,74 @@ public class OrderServiceImpl implements OrderService { @Override public PageResult getOrderOverdue(PageParam pageParam) { + Long organId = OrganContextHolder.getOrganId(); + LocalDate todayDate = LocalDate.now(); PageDTO page = new PageDTO<>(pageParam.getPageNo(), pageParam.getPageSize()); // 查询超时单 - IPage orderOverdueVOS = orderMapper.selectOrderOverdue(todayDate, OrganContextHolder.getOrganId(), page); - return new PageResult(orderOverdueVOS.getRecords(), orderOverdueVOS.getTotal()); + IPage orderOverdueVOS = orderMapper.selectOrderOverdue(todayDate, organId, page); + List records = orderOverdueVOS.getRecords(); + long total = orderOverdueVOS.getTotal(); + + // 查询子单 + if (CollUtil.isNotEmpty(records)) { + // 主单id列表 + Long[] mainOrderIds = records.stream().map(OrderOverdueRespVO::getId).toArray(Long[]::new); + PageDTO childPage = new PageDTO<>(pageParam.getPageNo(), PageParam.PAGE_SIZE_NONE); + IPage childOrderOverdueVOS = orderMapper.selectOrderOverdue(todayDate, organId, childPage, mainOrderIds); + + List childList = childOrderOverdueVOS.getRecords(); + + if (CollUtil.isNotEmpty(childList)) { + // 按 parentId 分组 + Map> childMap = childList.stream() + .collect(Collectors.groupingBy(OrderOverdueRespVO::getParentId)); + + // 回填 child + for (OrderOverdueRespVO order : records) { + order.setChild(childMap.getOrDefault(order.getId(), null)); + } + } + return new PageResult<>(records, total); + + } + return new PageResult<>(orderOverdueVOS.getRecords(), total); } @Override public PageResult getOrderNear(PageParam pageParam) { + Long organId = OrganContextHolder.getOrganId(); + PageDTO page = new PageDTO<>(pageParam.getPageNo(), pageParam.getPageSize()); LocalDate tomorrow = LocalDate.now().plus(1, ChronoUnit.DAYS); // 查询预警单 - IPage orderNearVOS = orderMapper.selectOrderNear(tomorrow, OrganContextHolder.getOrganId(), page); - return new PageResult(orderNearVOS.getRecords(), orderNearVOS.getTotal()); + IPage orderNearVOS = orderMapper.selectOrderNear(tomorrow, organId, page); + List records = orderNearVOS.getRecords(); + + // 查询子单 + if (CollUtil.isNotEmpty(records)) { + // 主单id列表 + Long[] mainOrderIds = records.stream().map(OrderOverdueRespVO::getId).toArray(Long[]::new); + PageDTO childPage = new PageDTO<>(pageParam.getPageNo(), PageParam.PAGE_SIZE_NONE); + IPage childOrderNearVOS = orderMapper.selectOrderNear(tomorrow, organId, childPage, mainOrderIds); + + List childList = childOrderNearVOS.getRecords(); + + if (CollUtil.isNotEmpty(childList)) { + // 按 parentId 分组 + Map> childMap = childList.stream() + .collect(Collectors.groupingBy(OrderOverdueRespVO::getParentId)); + + // 回填 child + for (OrderOverdueRespVO order : records) { + order.setChild(childMap.getOrDefault(order.getId(), null)); + } + } + return new PageResult<>(records, orderNearVOS.getTotal()); + + } + + return new PageResult<>(records, orderNearVOS.getTotal()); } @Override 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 245e8fb48..52ba7750e 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 @@ -14,6 +14,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; import com.cf.imes.framework.common.enums.*; import com.cf.imes.framework.common.exception.ServiceException; +import com.cf.imes.framework.common.pojo.PageParam; import com.cf.imes.framework.common.pojo.PageResult; import com.cf.imes.framework.common.util.Assert.AssertUtils; import com.cf.imes.framework.common.util.object.BeanUtils; @@ -550,6 +551,7 @@ public class PlanServiceImpl implements PlanService { @Override public PageResult getOrderPage(OrderPageReqVOCopy pageReqVO) { + Long organId = getUserOrganId(); List statusList = new ArrayList<>(); @@ -566,19 +568,19 @@ public class PlanServiceImpl implements PlanService { List orderIdList = Optional.ofNullable(pageReqVO.getOrderIds()).orElse(new ArrayList<>()); - List goodsDOS = goodsMapper.selectListByGoodsId(orderIdList,goodsId, getUserOrganId()); + List goodsDOS = goodsMapper.selectListByGoodsId(orderIdList, goodsId, organId); ids.addAll(goodsDOS.stream().map(GoodsDO::getId).toList()); type = OrderPlanQueryTypeEnum.GOODS_GROUP.getType(); } QueryWrapperX queryWrapperX = new QueryWrapperX<>(); queryWrapperX - .eq(FIELD_ORGAN_ID,getUserOrganId()) - .eq(FIELD_DELETED,false) - .in(FIELD_STATUS,statusList) + .eq(FIELD_ORGAN_ID, organId) + .eq(FIELD_DELETED, false) + .in(FIELD_STATUS, statusList) - .inIfPresent("og.id",ids) - .inIfPresent("o.id",pageReqVO.getOrderIds()) + .inIfPresent("og.id", ids) + .inIfPresent("o.id", pageReqVO.getOrderIds()) .likeIfPresent("o.id", pageReqVO.getOrderId() != null ? pageReqVO.getOrderId() : null) .likeIfPresent(FIELD_CUSTOMER, pageReqVO.getConsignee()) .likeIfPresent(FIELD_CUSTOM_ORDER_NO, pageReqVO.getDefaultId()) @@ -586,7 +588,32 @@ public class PlanServiceImpl implements PlanService { .betweenIfPresent(FIELD_ORDER_DATE, pageReqVO.getCreateTime()); PageDTO page = new PageDTO<>(pageReqVO.getPageNo(), pageReqVO.getPageSize()); IPage orderList = planItemMapper.selectOrderList(page, queryWrapperX, type); - return new PageResult<>(orderList.getRecords(), orderList.getTotal()); + List mainOrderList = orderList.getRecords(); + long total = orderList.getTotal(); + + // 订单分组查询子单 + if (ObjectUtil.equals(OrderPlanQueryTypeEnum.ORDER_GROUP.getType(), type) && CollUtil.isNotEmpty(mainOrderList)) { + // 主单id列表 + Long[] mainOrderIds = mainOrderList.stream().map(OrderRespVOCopy::getOrderId).toArray(Long[]::new); + PageDTO childPage = new PageDTO<>(pageReqVO.getPageNo(), PageParam.PAGE_SIZE_NONE); + IPage childOrderList = planItemMapper.selectOrderList(childPage, queryWrapperX, type, mainOrderIds); + + List childList = childOrderList.getRecords(); + + if (CollUtil.isNotEmpty(childList)) { + // 按 parentId 分组 + Map> childMap = childList.stream() + .collect(Collectors.groupingBy(OrderRespVOCopy::getParentId)); + + // 回填 child + for (OrderRespVOCopy order : mainOrderList) { + order.setChild(childMap.getOrDefault(order.getOrderId(), null)); + } + } + return new PageResult<>(mainOrderList, total); + } + + return new PageResult<>(mainOrderList, total); } diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/order/OrderMapper.xml b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/order/OrderMapper.xml index a261bd720..76f1f4d9c 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/order/OrderMapper.xml +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/order/OrderMapper.xml @@ -103,58 +103,67 @@ select - - distinct - o.id as orderId, o.plate_num - o.planned_plate_num as num, o.area - o.planned_plate_area as area, + o.parent_id as parentId, sum(og.plate_num - og.planned_plate_num) as num, @@ -46,6 +44,19 @@ ${ew.customSqlSegment} and o.plate_num - o.planned_plate_num > 0 + + + + AND o.parent_id IN + + #{orderId} + + + + AND o.parent_id = 0 + + + and og.plate_num - og.planned_plate_num > 0 group by orderId,orderDate,deliveryDate,customer,address,defineId,status