Merge remote-tracking branch 'origin/master'
This commit is contained in:
commit
5a13e7d71a
6 files changed
+97
No files matched your search
+18
@@ -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;
|
||||
}
|
||||
+17
@@ -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<List<HardOrderDinerCountVo>> 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")
|
||||
|
||||
+12
@@ -188,6 +188,18 @@ public interface HardOrderMapper extends PjcloudBaseMapper<HardOrderEntity> {
|
||||
*/
|
||||
Long appVisibilityCount(@Param("dto") HardOrderDto dto, DataScope dataScope);
|
||||
|
||||
/**
|
||||
* 按 App 可见范围和全部筛选条件分组统计各用餐人的订单数量,供订单页胶囊一次请求取回全部计数。
|
||||
*
|
||||
* <p>与 {@link #appVisibilityCount} 完全同口径,仅增加按实际用餐人分组;
|
||||
* dto.userIds 为目标用餐人集合(已由服务层限定为本人和关系图谱用户)。</p>
|
||||
*
|
||||
* @param dto 订单筛选、App 可见范围及目标用餐人集合条件
|
||||
* @param dataScope 保留的数据范围参数;当前 App 调用传 {@code null}
|
||||
* @return 有订单的用餐人及其数量;无订单的用餐人不返回行,由调用方按 0 处理
|
||||
*/
|
||||
List<HardOrderDinerCountVo> appDinerOrderCount(@Param("dto") HardOrderDto dto, DataScope dataScope);
|
||||
|
||||
List<HardOrderVo> scopeList(@Param("dto") HardOrderDto dto, DataScope dataScope);
|
||||
|
||||
/**
|
||||
|
||||
+10
@@ -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<HardOrderEntity> {
|
||||
*/
|
||||
void configureAppVisibility(HardOrderDto dto, Long viewerUserId);
|
||||
|
||||
/**
|
||||
* App 订单页按实际用餐人分组统计订单数量,供顶部胶囊一次请求取回全部计数;
|
||||
* 计数对象限定为本人和关系图谱用户,查询口径与订单列表 app/page-join 一致。
|
||||
*
|
||||
* @param dto 已由接口层写入可见范围、商户类型与状态筛选,userIds 为请求计数的用餐人集合
|
||||
* @return 有订单的用餐人及其数量;无订单的用餐人不返回行,由调用方按 0 处理
|
||||
*/
|
||||
List<HardOrderDinerCountVo> appDinerOrderCount(HardOrderDto dto);
|
||||
|
||||
/**
|
||||
* 校验当前用户是否可以查看订单。
|
||||
*/
|
||||
|
||||
+27
@@ -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<HardOrderMapper, HardOrder
|
||||
dto.setAppRelatedUserIds(listRelatedUserIds(viewerUserId, false));
|
||||
}
|
||||
|
||||
/**
|
||||
* App 订单页用餐人胶囊计数:与订单列表同口径地按实际用餐人分组统计,
|
||||
* 一次请求返回全部用餐人数量,替代此前前端逐人发起的分页 count 探测。
|
||||
*/
|
||||
@Override
|
||||
public List<HardOrderDinerCountVo> appDinerOrderCount(HardOrderDto dto) {
|
||||
if (ObjectUtil.isEmpty(dto.getUserIds()) || dto.getAppViewerUserId() == null) {
|
||||
return List.of();
|
||||
}
|
||||
// 计数对象限定为本人与关系图谱用户(与胶囊来源同口径),越权 ID 直接剔除;
|
||||
// 可见范围装配时已查询过关系图谱,非空时直接复用,避免同一请求重复远程调用。
|
||||
Set<Long> allowedUserIds = new HashSet<>();
|
||||
allowedUserIds.add(dto.getAppViewerUserId());
|
||||
if (dto.getAppRelatedUserIds() != null) {
|
||||
allowedUserIds.addAll(dto.getAppRelatedUserIds());
|
||||
} else {
|
||||
allowedUserIds.addAll(listRelatedUserIds(dto.getAppViewerUserId(), false));
|
||||
}
|
||||
List<Long> dinerUserIds = dto.getUserIds().stream().filter(allowedUserIds::contains).distinct().toList();
|
||||
if (dinerUserIds.isEmpty()) {
|
||||
return List.of();
|
||||
}
|
||||
dto.setUserIds(dinerUserIds);
|
||||
return baseMapper.appDinerOrderCount(dto, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据父购物车付款人和实际用餐人生成 App 操作权限。
|
||||
*
|
||||
|
||||
+13
@@ -615,6 +615,19 @@
|
||||
</where>
|
||||
</select>
|
||||
|
||||
<!-- App 订单页用餐人胶囊计数:与 appVisibilityCount 完全同口径,仅按实际用餐人分组,一次请求返回全部人数。 -->
|
||||
<select id="appDinerOrderCount" resultType="com.bsd.pjcloud.hard.api.vo.order.HardOrderDinerCountVo">
|
||||
select a.user_id as userId,
|
||||
count(0) as count
|
||||
from hard_order a
|
||||
<where>
|
||||
<include refid="whereA"/>
|
||||
<include refid="appVisibilityWhere"/>
|
||||
<include refid="appRelationFilterWhere"/>
|
||||
</where>
|
||||
group by a.user_id
|
||||
</select>
|
||||
|
||||
<select id="scopeList" resultType="com.bsd.pjcloud.hard.api.vo.order.HardOrderVo">
|
||||
<include refid="pageList"/>
|
||||
</select>
|
||||
|
||||
Reference in new issue
Block a user