From e48735a463b5213d313ecd47f31150cb44c44eea Mon Sep 17 00:00:00 2001 From: dzq Date: Wed, 2 Jul 2025 11:28:40 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E8=AE=A2=E5=8D=95=E5=92=8C=E6=9C=BA?= =?UTF-8?q?=E6=9F=9C):=20=E6=B7=BB=E5=8A=A0=E7=94=A8=E6=88=B7=E7=A7=9F?= =?UTF-8?q?=E8=B5=81=E6=9C=BA=E6=9F=9C=E6=9F=A5=E8=AF=A2=E5=92=8C=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E7=AD=9B=E9=80=89=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 添加根据用户ID和企业ID查询租赁机柜的功能 在订单查询接口中增加hasReturn参数用于筛选已归还/未归还订单 在QywxMessageJob中添加支付状态检查逻辑 --- .../customize/service/job/QywxMessageJob.java | 4 ++ .../api/controller/CabinetCellController.java | 20 ++++++++++ .../api/controller/OrderController.java | 11 ++++-- .../cabinet/cell/db/CabinetCellMapper.java | 8 ++++ .../cabinet/cell/db/CabinetCellService.java | 2 + .../cell/db/CabinetCellServiceImpl.java | 15 +++++++ .../SmartCabinetApplicationService.java | 39 +++++++++++++++++++ .../shop/order/OrderApplicationService.java | 30 +++++++++++--- 8 files changed, 119 insertions(+), 10 deletions(-) diff --git a/agileboot-admin/src/main/java/com/agileboot/admin/customize/service/job/QywxMessageJob.java b/agileboot-admin/src/main/java/com/agileboot/admin/customize/service/job/QywxMessageJob.java index 444db29..a552364 100644 --- a/agileboot-admin/src/main/java/com/agileboot/admin/customize/service/job/QywxMessageJob.java +++ b/agileboot-admin/src/main/java/com/agileboot/admin/customize/service/job/QywxMessageJob.java @@ -131,6 +131,10 @@ public class QywxMessageJob { log.info("订单[{}]为租赁订单,无需发送逾期提醒", order.getOrderId()); return; } + if (!order.getPayStatus().equals(2)) { + log.info("订单[{}]未支付,无需发送逾期提醒", order.getOrderId()); + return; + } // 6. 获取用户信息 List userList = qyUserApplicationService.getUserByUserId(order.getUserid()); QyUserEntity user = null; diff --git a/agileboot-api/src/main/java/com/agileboot/api/controller/CabinetCellController.java b/agileboot-api/src/main/java/com/agileboot/api/controller/CabinetCellController.java index 18b83c7..394b550 100644 --- a/agileboot-api/src/main/java/com/agileboot/api/controller/CabinetCellController.java +++ b/agileboot-api/src/main/java/com/agileboot/api/controller/CabinetCellController.java @@ -45,16 +45,36 @@ public class CabinetCellController { private final CabinetMainboardModelFactory cabinetMainboardModelFactory; private final CabinetCellApplicationService cabinetCellApplicationService; + /** + * 管理员获取机柜格口列表 + * @param shopId + * @return + */ @GetMapping("/detail") public ResponseDTO> getCabinetDetail(@RequestParam Long shopId) { return ResponseDTO.ok(smartCabinetApplicationService.getCabinetDetail(shopId)); } + /** + * 获取正在出租的机柜格口列表 + * @param shopId + * @return + */ @GetMapping("/detail/renting") public ResponseDTO> getRentingCabinetDetail(@RequestParam Long shopId) { return ResponseDTO.ok(smartCabinetApplicationService.getRentingCabinetDetail(shopId)); } + /** + * 用户获取自己租用的机柜格口列表 + * @param corpid + * @param ab98UserId + * @return + */ + @GetMapping("/detail/user") + public ResponseDTO> getCabinetDetail(@RequestParam String corpid, @RequestParam Long ab98UserId) { + return ResponseDTO.ok(smartCabinetApplicationService.getUserRentedCabinetList(corpid, ab98UserId)); + } @Operation(summary = "配置格口商品库存") @PutMapping("/configureGoodsCellsStock/{cellId}/{goodsId}/{stock}") diff --git a/agileboot-api/src/main/java/com/agileboot/api/controller/OrderController.java b/agileboot-api/src/main/java/com/agileboot/api/controller/OrderController.java index d30c3e5..dd2f47c 100644 --- a/agileboot-api/src/main/java/com/agileboot/api/controller/OrderController.java +++ b/agileboot-api/src/main/java/com/agileboot/api/controller/OrderController.java @@ -84,8 +84,10 @@ public class OrderController extends BaseController { * @return 包含订单列表的响应 */ @GetMapping("/user/{openid}") - public ResponseDTO getOrdersByOpenId(@PathVariable String openid, @RequestParam(required = false) String corpid) { - GetOrdersByOpenIdDTO result = orderApplicationService.getOrdersByOpenId(openid, corpid); + public ResponseDTO getOrdersByOpenId(@PathVariable String openid, + @RequestParam(required = false) String corpid, + @RequestParam(required = false) Integer hasReturn) { + GetOrdersByOpenIdDTO result = orderApplicationService.getOrdersByOpenId(openid, corpid, hasReturn); return ResponseDTO.ok(result); } @@ -94,8 +96,9 @@ public class OrderController extends BaseController { * @return 包含订单列表的响应 */ @GetMapping("/user/qy/{qyUserId}") - public ResponseDTO getOrdersByOpenId(@PathVariable Long qyUserId) { - GetOrdersByOpenIdDTO result = orderApplicationService.getOrdersByQyUserId(qyUserId); + public ResponseDTO getOrdersByOpenId(@PathVariable Long qyUserId, + @RequestParam(required = false) Integer hasReturn) { + GetOrdersByOpenIdDTO result = orderApplicationService.getOrdersByQyUserId(qyUserId, hasReturn); return ResponseDTO.ok(result); } diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/db/CabinetCellMapper.java b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/db/CabinetCellMapper.java index 0f48a0a..4aa266c 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/db/CabinetCellMapper.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/db/CabinetCellMapper.java @@ -111,4 +111,12 @@ public interface CabinetCellMapper extends BaseMapper { "LEFT JOIN ab98_user au ON so.name = au.name AND so.mobile = au.tel AND au.deleted = 0 " + "${ew.customSqlSegment} ") List selectLatestOrderInfoByCell(@Param(Constants.WRAPPER) Wrapper queryWrapper); + + @Select("SELECT cc.* " + + "FROM cabinet_cell cc " + + "INNER JOIN shop_order_goods sog ON cc.cell_id = sog.cell_id AND sog.deleted = 0 " + + "INNER JOIN shop_order so ON sog.order_id = so.order_id AND so.deleted = 0 " + + "INNER JOIN ab98_user au ON so.name = au.name AND so.mobile = au.tel AND au.deleted = 0 " + + "${ew.customSqlSegment}") + List selectRentedCellsByAb98UserIdAndCorpid(@Param(Constants.WRAPPER) Wrapper queryWrapper); } diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/db/CabinetCellService.java b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/db/CabinetCellService.java index f8b7204..fec87c3 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/db/CabinetCellService.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/db/CabinetCellService.java @@ -40,4 +40,6 @@ public interface CabinetCellService extends IService { List selectCabinetCellDOList(Long cabinetId); List selectLatestOrderInfoByCell(List cellIds); + + List selectRentedCellsByAb98UserIdAndCorpid(Long ab98UserId, String corpid); } diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/db/CabinetCellServiceImpl.java b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/db/CabinetCellServiceImpl.java index 888d5ac..67c0f42 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/db/CabinetCellServiceImpl.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/db/CabinetCellServiceImpl.java @@ -76,4 +76,19 @@ public class CabinetCellServiceImpl extends ServiceImpl selectRentedCellsByAb98UserIdAndCorpid(Long ab98UserId, String corpid) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("cc.is_rented", 1) + .eq("cc.deleted", 0) + .eq("so.deleted", 0) + .eq("sog.deleted", 0) + .eq("sog.mode", 3) + .eq("sog.status", 1) + .eq("au.deleted", 0) + .eq("so.corpid", corpid) + .eq("au.ab98_user_id", ab98UserId); + return baseMapper.selectRentedCellsByAb98UserIdAndCorpid(queryWrapper); + } } diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/smartCabinet/SmartCabinetApplicationService.java b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/smartCabinet/SmartCabinetApplicationService.java index 6f40a21..ce0cc67 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/smartCabinet/SmartCabinetApplicationService.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/smartCabinet/SmartCabinetApplicationService.java @@ -323,4 +323,43 @@ public class SmartCabinetApplicationService { public List getConsumablesCabinetList() { return smartCabinetService.selectSmartCabinetDOList(); } + + public List getUserRentedCabinetList(String corpid, Long ab98UserId) { + List cabinetCells = cabinetCellService.selectRentedCellsByAb98UserIdAndCorpid(ab98UserId, corpid); + // 获取所有智能柜、单元格和商品的基础数据 + QueryWrapper smartCabinetEntityQueryWrapper = new QueryWrapper<>(); + smartCabinetEntityQueryWrapper.in("cabinet_id", cabinetCells.stream() + .map(CabinetCellEntity::getCabinetId).filter(Objects::nonNull).distinct().collect(Collectors.toList())) + .eq("deleted", false); + List smartCabinets = smartCabinetService.list(smartCabinetEntityQueryWrapper); + + List result = new ArrayList<>(); + // 遍历每个智能柜构建详细信息 + for (SmartCabinetEntity cabinet : smartCabinets) { + CabinetDetailDTO cabinetDetailDTO = new CabinetDetailDTO(); + // 设置柜体基础信息 + cabinetDetailDTO.setCabinetId(cabinet.getCabinetId()); + cabinetDetailDTO.setCabinetName(cabinet.getCabinetName()); + cabinetDetailDTO.setLockControlNo(cabinet.getLockControlNo()); + + // 处理柜体下的所有单元格 + List cellInfoList = cabinetCells.stream() + .filter(cell -> cell.getCabinetId().equals(cabinet.getCabinetId())) + .map(cell -> { + CabinetDetailDTO.CellInfoDTO cellInfo = new CabinetDetailDTO.CellInfoDTO(); + // 设置单元格基础信息 + cellInfo.setCellId(cell.getCellId()); + cellInfo.setCellNo(cell.getCellNo()); + cellInfo.setPinNo(cell.getPinNo()); + cellInfo.setStock(cell.getStock()); + + return cellInfo; + }).collect(Collectors.toList()); + + // 将单元格列表加入柜体信息 + cabinetDetailDTO.setCells(cellInfoList); + result.add(cabinetDetailDTO); + } + return result; + } } diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/OrderApplicationService.java b/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/OrderApplicationService.java index 3891728..538c10c 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/OrderApplicationService.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/OrderApplicationService.java @@ -54,10 +54,7 @@ import com.agileboot.domain.shop.paymentOperationLog.command.AddPaymentOperation import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import java.math.BigDecimal; import java.math.RoundingMode; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Objects; +import java.util.*; import java.util.stream.Collectors; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -413,7 +410,7 @@ public class OrderApplicationService { * @param corpid 企业微信 ID * @return 包含订单列表、订单商品列表和商品列表的 DTO 对象 */ - public GetOrdersByOpenIdDTO getOrdersByOpenId(String openid, String corpid) { + public GetOrdersByOpenIdDTO getOrdersByOpenId(String openid, String corpid, Integer hasReturn) { // 根据 openid 获取 Ab98 用户信息 Ab98UserEntity ab98User = ab98UserService.getByOpenid(openid); @@ -440,15 +437,28 @@ public class OrderApplicationService { } } // 根据查询条件获取订单列表 + if (Integer.valueOf(1).equals(hasReturn)) { + orderQueryWrapper.eq("pay_status", 2); + } List orderList = orderService.list(orderQueryWrapper); // 构建订单商品查询条件 QueryWrapper orderGoodsQueryWrapper = new QueryWrapper<>(); // 添加订单 ID 作为查询条件,查询属于这些订单的商品 orderGoodsQueryWrapper.in("order_id", orderList.stream().map(ShopOrderEntity::getOrderId).collect(Collectors.toList())); + if (Integer.valueOf(1).equals(hasReturn)) { + orderGoodsQueryWrapper.eq("status", 2); + } else if (Integer.valueOf(0).equals(hasReturn)) { + orderGoodsQueryWrapper.eq("status", 1); + } // 根据查询条件获取订单商品列表 List orderGoods = orderGoodsService.list(orderGoodsQueryWrapper); + Set orderIds = orderGoods.stream().map(ShopOrderGoodsEntity::getOrderId).collect(Collectors.toSet()); + orderList = orderList.stream() + .filter(order -> orderIds.contains(order.getOrderId())) + .collect(Collectors.toList()); + // 构建商品查询条件 QueryWrapper goodsQueryWrapper = new QueryWrapper<>(); // 添加商品 ID 作为查询条件,查询这些商品信息 @@ -466,7 +476,7 @@ public class OrderApplicationService { * @param qyUserId 企业微信用户 ID * @return 包含订单列表、订单商品列表和商品列表的 DTO 对象 */ - public GetOrdersByOpenIdDTO getOrdersByQyUserId(Long qyUserId) { + public GetOrdersByOpenIdDTO getOrdersByQyUserId(Long qyUserId, Integer hasReturn) { // 校验 qyUserId 是否为空,为空则抛出异常 if (qyUserId == null) { throw new ApiException(ErrorCode.Client.COMMON_REQUEST_PARAMETERS_INVALID, "qyUserId不能为空"); @@ -497,6 +507,9 @@ public class OrderApplicationService { } } // 根据查询条件获取订单列表 + if (Integer.valueOf(1).equals(hasReturn)) { + orderQueryWrapper.eq("pay_status", 2); + } List orderList = orderService.list(orderQueryWrapper); // 构建订单商品查询条件 @@ -508,6 +521,11 @@ public class OrderApplicationService { // 添加订单 ID 作为查询条件,查询属于这些订单的商品 QueryWrapper orderGoodsQueryWrapper = new QueryWrapper<>(); orderGoodsQueryWrapper.in("order_id", orderList.stream().map(ShopOrderEntity::getOrderId).collect(Collectors.toList())); + if (Integer.valueOf(1).equals(hasReturn)) { + orderGoodsQueryWrapper.eq("status", 2); + } else if (Integer.valueOf(0).equals(hasReturn)) { + orderGoodsQueryWrapper.eq("status", 1); + } List orderGoods = orderGoodsService.list(orderGoodsQueryWrapper); QueryWrapper goodsQueryWrapper = new QueryWrapper<>();