From c5e712f047fb4b2c5ab785b9db1208adaa1cdf4b Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Mon, 28 Sep 2026 16:03:02 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E8=AE=A2=E9=A4=90=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/vo/order/HardOrderDinerCountVo.java | 18 +++++++++++++ .../controller/order/HardOrderController.java | 17 ++++++++++++ .../hard/mapper/order/HardOrderMapper.java | 12 +++++++++ .../hard/service/HardOrderService.java | 10 +++++++ .../impl/order/HardOrderServiceImpl.java | 27 +++++++++++++++++++ .../mapper/order/HardOrderMapper.xml | 13 +++++++++ 6 files changed, 97 insertions(+) create mode 100644 pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/order/HardOrderDinerCountVo.java diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/order/HardOrderDinerCountVo.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/order/HardOrderDinerCountVo.java new file mode 100644 index 00000000..ec578c4d --- /dev/null +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/order/HardOrderDinerCountVo.java @@ -0,0 +1,18 @@ +package com.bsd.pjcloud.hard.api.vo.order; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +/** + * App 订单页用餐人胶囊的数量聚合:按实际用餐人分组统计当前筛选条件下的订单数。 + */ +@Data +@Schema(description = "用餐人订单数量聚合") +public class HardOrderDinerCountVo { + + @Schema(description = "用餐人用户ID") + private Long userId; + + @Schema(description = "符合当前筛选条件的订单数量") + private Long count; +} diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardOrderController.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardOrderController.java index 8085d1fb..bc0ed1df 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardOrderController.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardOrderController.java @@ -43,6 +43,7 @@ import com.bsd.pjcloud.hard.api.dto.order.remote.HardUpdateTakeOutStatusDto; import com.bsd.pjcloud.hard.api.dto.order.remote.DailyMenuNetSoldQueryDTO; import com.bsd.pjcloud.hard.api.entity.order.HardOrderEntity; import com.bsd.pjcloud.hard.api.vo.order.HardOrderVo; +import com.bsd.pjcloud.hard.api.vo.order.HardOrderDinerCountVo; import com.bsd.pjcloud.hard.api.vo.order.HardOrderStatisticsVo; import com.bsd.pjcloud.hard.api.vo.order.HardPendingReservationCountVo; import com.bsd.pjcloud.hard.api.vo.order.DailyMenuNetSoldVO; @@ -301,6 +302,22 @@ public class HardOrderController { return R.ok(result); } + @Operation(summary = "app查询用餐人订单数量", description = "订单页用餐人胶囊计数:按实际用餐人分组一次返回,替代逐人分页探测") + @ApiCryptoAes + @GetMapping("/app/diner-order-count") + public R> appDinerOrderCount(@ParameterObject HardOrderDto dto) { + PjcloudUser user = SecurityUtils.getUser(); + hardwareOrderService.configureAppVisibility(dto, user.getId()); + // 与订单列表同口径:仅食堂与共富商城订单进入胶囊计数。 + dto.setMchTypeCodes( + List.of( + MerchantTypeEnum.CANTEEN.getType(), + MerchantTypeEnum.FARMER.getType() + ) + ); + return R.ok(hardwareOrderService.appDinerOrderCount(dto)); + } + @Operation(summary = "app查询超市订单列表", description = "app查询订单列表") @ApiCryptoAes @GetMapping("/app/sup-page-join") diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/mapper/order/HardOrderMapper.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/mapper/order/HardOrderMapper.java index 67df4595..601534f1 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/mapper/order/HardOrderMapper.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/mapper/order/HardOrderMapper.java @@ -188,6 +188,18 @@ public interface HardOrderMapper extends PjcloudBaseMapper { */ Long appVisibilityCount(@Param("dto") HardOrderDto dto, DataScope dataScope); + /** + * 按 App 可见范围和全部筛选条件分组统计各用餐人的订单数量,供订单页胶囊一次请求取回全部计数。 + * + *

与 {@link #appVisibilityCount} 完全同口径,仅增加按实际用餐人分组; + * dto.userIds 为目标用餐人集合(已由服务层限定为本人和关系图谱用户)。

+ * + * @param dto 订单筛选、App 可见范围及目标用餐人集合条件 + * @param dataScope 保留的数据范围参数;当前 App 调用传 {@code null} + * @return 有订单的用餐人及其数量;无订单的用餐人不返回行,由调用方按 0 处理 + */ + List appDinerOrderCount(@Param("dto") HardOrderDto dto, DataScope dataScope); + List scopeList(@Param("dto") HardOrderDto dto, DataScope dataScope); /** diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardOrderService.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardOrderService.java index 012ea943..417621ab 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardOrderService.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardOrderService.java @@ -32,6 +32,7 @@ import com.bsd.pjcloud.hard.api.vo.order.HardCreateHardQrCodeScanOrderVo; import com.bsd.pjcloud.hard.api.vo.order.HardAggregateOrderCodePayStatusVo; import com.bsd.pjcloud.hard.api.vo.order.HardAggregateOrderCodePayVo; import com.bsd.pjcloud.hard.api.vo.order.HardOrderVo; +import com.bsd.pjcloud.hard.api.vo.order.HardOrderDinerCountVo; import com.bsd.pjcloud.hard.api.vo.order.HardPendingReservationCountVo; import com.bsd.pjcloud.hard.api.vo.order.WardMenuMapDayVo; import com.bsd.pjcloud.hard.api.vo.order.app.HardAppCreateShopOrderVo; @@ -116,6 +117,15 @@ public interface HardOrderService extends IService { */ void configureAppVisibility(HardOrderDto dto, Long viewerUserId); + /** + * App 订单页按实际用餐人分组统计订单数量,供顶部胶囊一次请求取回全部计数; + * 计数对象限定为本人和关系图谱用户,查询口径与订单列表 app/page-join 一致。 + * + * @param dto 已由接口层写入可见范围、商户类型与状态筛选,userIds 为请求计数的用餐人集合 + * @return 有订单的用餐人及其数量;无订单的用餐人不返回行,由调用方按 0 处理 + */ + List appDinerOrderCount(HardOrderDto dto); + /** * 校验当前用户是否可以查看订单。 */ diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderServiceImpl.java index a0f92491..1386cd6c 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderServiceImpl.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderServiceImpl.java @@ -91,6 +91,7 @@ import com.bsd.pjcloud.hard.api.vo.order.HardAggregateOrderCodePayStatusVo; import com.bsd.pjcloud.hard.api.vo.order.HardAggregateOrderCodePayVo; import com.bsd.pjcloud.hard.api.vo.order.HardCreateHardQrCodeScanOrderVo; import com.bsd.pjcloud.hard.api.vo.order.HardOrderVo; +import com.bsd.pjcloud.hard.api.vo.order.HardOrderDinerCountVo; import com.bsd.pjcloud.hard.api.vo.order.WardMenuMapDayVo; import com.bsd.pjcloud.hard.api.vo.order.HardPendingReservationCountVo; import com.bsd.pjcloud.hard.api.vo.order.app.HardAppCreateShopOrderVo; @@ -599,6 +600,32 @@ public class HardOrderServiceImpl extends ServiceImpl appDinerOrderCount(HardOrderDto dto) { + if (ObjectUtil.isEmpty(dto.getUserIds()) || dto.getAppViewerUserId() == null) { + return List.of(); + } + // 计数对象限定为本人与关系图谱用户(与胶囊来源同口径),越权 ID 直接剔除; + // 可见范围装配时已查询过关系图谱,非空时直接复用,避免同一请求重复远程调用。 + Set allowedUserIds = new HashSet<>(); + allowedUserIds.add(dto.getAppViewerUserId()); + if (dto.getAppRelatedUserIds() != null) { + allowedUserIds.addAll(dto.getAppRelatedUserIds()); + } else { + allowedUserIds.addAll(listRelatedUserIds(dto.getAppViewerUserId(), false)); + } + List dinerUserIds = dto.getUserIds().stream().filter(allowedUserIds::contains).distinct().toList(); + if (dinerUserIds.isEmpty()) { + return List.of(); + } + dto.setUserIds(dinerUserIds); + return baseMapper.appDinerOrderCount(dto, null); + } + /** * 根据父购物车付款人和实际用餐人生成 App 操作权限。 * diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/order/HardOrderMapper.xml b/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/order/HardOrderMapper.xml index f35a4477..bc9f0bf3 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/order/HardOrderMapper.xml +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/order/HardOrderMapper.xml @@ -615,6 +615,19 @@ + + +