diff --git a/pjcloud-canteen/pjcloud-canteen-api/src/main/java/com/bsd/pjcloud/canteen/api/feign/RemoteCanteenSpuService.java b/pjcloud-canteen/pjcloud-canteen-api/src/main/java/com/bsd/pjcloud/canteen/api/feign/RemoteCanteenSpuService.java index e7c8483d9..be6fef78e 100644 --- a/pjcloud-canteen/pjcloud-canteen-api/src/main/java/com/bsd/pjcloud/canteen/api/feign/RemoteCanteenSpuService.java +++ b/pjcloud-canteen/pjcloud-canteen-api/src/main/java/com/bsd/pjcloud/canteen/api/feign/RemoteCanteenSpuService.java @@ -86,6 +86,16 @@ public interface RemoteCanteenSpuService { @PostMapping("/canteenSpu/ad/getSpuListByIds") R> getSpuListByIds(@RequestBody List ids); + /** + * 供 Hardware 定时任务等无用户上下文的服务间调用批量查询菜品。 + * + * @param ids 菜品 SPU 主键列表 + * @return 当前租户下命中的菜品列表 + */ + @PostMapping("/canteenSpu/inner/getSpuListByIds") + @NoToken + R> getInnerSpuListByIds(@RequestBody List ids); + /** * 按套餐 SPU ID 批量查询套餐组成,用于跨服务补充只读展示数据。 * diff --git a/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/controller/CanteenSpuController.java b/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/controller/CanteenSpuController.java index 6b7d4a9c1..45bfeb972 100644 --- a/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/controller/CanteenSpuController.java +++ b/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/controller/CanteenSpuController.java @@ -383,7 +383,30 @@ public class CanteenSpuController { @Operation(summary = "通过ids查询" , description = "通过ids查询" ) @PostMapping("/ad/getSpuListByIds" ) public R> getByIds(@RequestBody List ids) { - List list = canteenSpuService.list(new LambdaQueryWrapper().in(CanteenSpuEntity::getId, ids)); + return querySpuByIds(ids); + } + + /** + * 为无用户令牌的 Hardware 服务间调用提供菜品批量查询,保持原管理端接口的鉴权行为不变。 + * + * @param ids 菜品 SPU 主键列表 + * @return 当前租户下命中的菜品列表 + */ + @Inner + @PostMapping("/inner/getSpuListByIds") + public R> getInnerByIds(@RequestBody List ids) { + return querySpuByIds(ids); + } + + /** + * 统一执行菜品 SPU 批量查询,避免管理端和内部端点产生不同的数据筛选口径。 + * + * @param ids 菜品 SPU 主键列表 + * @return 当前租户下命中的菜品列表 + */ + private R> querySpuByIds(List ids) { + List list = canteenSpuService.list(new LambdaQueryWrapper() + .in(CanteenSpuEntity::getId, ids)); return R.ok(list); } diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/order/HardAfterSaleVo.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/order/HardAfterSaleVo.java index cb1fec68d..49b3e4ada 100644 --- a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/order/HardAfterSaleVo.java +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/order/HardAfterSaleVo.java @@ -15,6 +15,24 @@ public class HardAfterSaleVo extends HardAfterSaleEntity implements BaseUserInte */ private String autoRefundTaskStatus; + /** + * 自动退款任务场景编码;10 表示规定时间内用户免审退款,20 表示过期订单自动退款,人工审核时为空。 + * 该字段仅用于管理端列表响应,不对应售后表持久化字段。 + */ + private String autoRefundTaskType; + + /** + * 用户免审退款采用的规则名称,来源于自动退款任务创建时的配置快照;非免审任务为空。 + * 该字段仅用于管理端列表响应,不对应售后表持久化字段。 + */ + private String autoRefundRuleType; + + /** + * 用户免审退款资格截止时间,来源于自动退款任务创建时的规则快照;非免审任务为空。 + * 该字段仅用于管理端列表响应,不对应售后表持久化字段。 + */ + private LocalDateTime autoRefundEligibilityDeadline; + /** * 用户相关 */ diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardAfterSaleServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardAfterSaleServiceImpl.java index 3d8c2bd7d..ead9a8d65 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardAfterSaleServiceImpl.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardAfterSaleServiceImpl.java @@ -143,7 +143,7 @@ public class HardAfterSaleServiceImpl extends ServiceImpl orderList = hardOrderMapper.list(hardOrderDto); HardUtil.convertOrderList(list.getRecords(), CollectionUtils.convertMap(orderList, HardOrderEntity::getId)); } - fillAutoRefundTaskStatus(list.getRecords()); + fillAutoRefundTaskInfo(list.getRecords()); } return list; } @@ -168,7 +168,7 @@ public class HardAfterSaleServiceImpl extends ServiceImpl records) { + private void fillAutoRefundTaskInfo(List records) { List afterSaleIds = records.stream().map(HardAfterSaleVo::getId).filter(Objects::nonNull).distinct().toList(); if (afterSaleIds.isEmpty()) { return; } - Map taskStatusMap = hardAutoRefundTaskService.list( + Map taskMap = hardAutoRefundTaskService.list( new LambdaQueryWrapper() .in(HardAutoRefundTaskEntity::getAfterSaleId, afterSaleIds)) .stream().collect(Collectors.toMap(HardAutoRefundTaskEntity::getAfterSaleId, - HardAutoRefundTaskEntity::getStatus, (first, second) -> first)); - records.forEach(item -> item.setAutoRefundTaskStatus(taskStatusMap.get(item.getId()))); + item -> item, (first, second) -> first)); + records.forEach(item -> { + HardAutoRefundTaskEntity task = taskMap.get(item.getId()); + if (task != null) { + item.setAutoRefundTaskStatus(task.getStatus()); + item.setAutoRefundTaskType(task.getTaskType()); + item.setAutoRefundRuleType(task.getRuleType()); + item.setAutoRefundEligibilityDeadline(task.getEligibilityDeadline()); + } + }); } /** diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardCarServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardCarServiceImpl.java index 0c37f3074..42c6e1068 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardCarServiceImpl.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardCarServiceImpl.java @@ -325,7 +325,7 @@ public class HardCarServiceImpl extends ServiceImpl productList) { List productIds = productList.stream().map(HardCreateCarDto::getProductId).distinct().toList(); - R> response = canteenSpuService.getSpuListByIds(productIds); + R> response = canteenSpuService.getInnerSpuListByIds(productIds); if (response == null || !response.isOk() || response.getData() == null) { String message = response == null || response.getMsg() == null ? "查询每日菜谱商品失败" : response.getMsg(); throw new RuntimeException(message); 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 0c0a55fb9..f2d2a2e12 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 @@ -1914,7 +1914,7 @@ public class HardOrderServiceImpl extends ServiceImpl> result = remoteCanteenSpuService.getSpuListByIds(productIds); + R> result = remoteCanteenSpuService.getInnerSpuListByIds(productIds); if (result == null || !result.isOk() || result.getData() == null) { throw new RuntimeException(result == null ? "查询每日菜谱商品无响应" : StrUtil.blankToDefault(result.getMsg(), "查询每日菜谱商品失败")); @@ -3898,7 +3898,7 @@ public class HardOrderServiceImpl extends ServiceImpl> productResult = remoteCanteenSpuService - .getSpuListByIds(new ArrayList<>(stockChanges.keySet())); + .getInnerSpuListByIds(new ArrayList<>(stockChanges.keySet())); if (productResult == null || !productResult.isOk() || productResult.getData() == null) { throw new RuntimeException(productResult == null ? "查询每日菜谱库存无响应" : StrUtil.blankToDefault(productResult.getMsg(), "查询每日菜谱库存失败")); diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/order/HardCarMapper.xml b/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/order/HardCarMapper.xml index 6dfadd69c..9a586fb9a 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/order/HardCarMapper.xml +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/order/HardCarMapper.xml @@ -57,6 +57,61 @@ + + + ( + select original_car.parent_car_id, + original_car.product_id, + original_car.product_name, + original_car.product_pic, + original_car.product_price, + original_car.create_time, + '0' as del_flag, + greatest(original_car.product_count - ifnull(refund_car.product_count, 0), 0) as product_count, + greatest(original_car.total_price - ifnull(refund_car.total_price, 0), 0) as total_price + from ( + select c.parent_car_id, + c.product_id, + max(c.product_name) as product_name, + max(c.product_pic) as product_pic, + max(c.product_price) as product_price, + min(c.create_time) as create_time, + sum(ifnull(c.product_count, 0)) as product_count, + sum(ifnull(c.total_price, 0)) as total_price + from hard_car c + where c.del_flag = '0' + group by c.parent_car_id, c.product_id + ) original_car + left join ( + select refund_item.parent_car_id, + refund_item.product_id, + sum(ifnull(refund_item.product_count, 0)) as product_count, + sum(ifnull(refund_item.total_price, 0)) as total_price + from hard_after_sale_car refund_item + inner join hard_after_sale refund_order on refund_order.id = refund_item.refund_id + and refund_order.del_flag = '0' and refund_order.status = '50' + where refund_item.del_flag = '0' + group by refund_item.parent_car_id, refund_item.product_id + ) refund_car on refund_car.parent_car_id = original_car.parent_car_id + and refund_car.product_id = original_car.product_id + where original_car.product_count > ifnull(refund_car.product_count, 0) + ) a + + + + + + + + + hard_car a + + + SELECT @@ -219,18 +271,7 @@ AND u.staffing_type = #{query.staffingType} - - - AND EXISTS ( - SELECT 1 - FROM sys_user_identity user_identity - WHERE user_identity.user_id = u.user_id - AND user_identity.identity_type IN - - #{identityType} - - ) - + AND u.lock_flag = #{query.lockFlag} @@ -334,6 +375,7 @@ #{userId} + ORDER BY u.create_time DESC, u.user_id DESC @@ -396,18 +438,7 @@ AND u.dept_id = #{query.deptId} - - - AND EXISTS ( - SELECT 1 - FROM sys_user_identity user_identity - WHERE user_identity.user_id = u.user_id - AND user_identity.identity_type IN - - #{identityType} - - ) - + AND u.staffing_type = #{query.staffingType}