From 2bf24943839cd355e8b846b4b7c44dad47397798 Mon Sep 17 00:00:00 2001 From: dzq Date: Tue, 1 Jul 2025 11:38:20 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E6=9F=9C=E6=9C=BA=E6=A0=BC=E5=8F=A3):=20?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=8E=B7=E5=8F=96=E6=A0=BC=E5=8F=A3=E6=9C=80?= =?UTF-8?q?=E6=96=B0=E8=AE=A2=E5=8D=95=E4=BF=A1=E6=81=AF=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增CabinetCellLatestOrderDTO类用于存储格口最新订单信息 在CabinetCellService中新增selectLatestOrderInfoByCell方法查询格口最新订单 修改CabinetCellWithOrderCountDTO添加订单相关字段 优化CabinetCellApplicationService.getCabinetCellList方法合并订单信息 --- .../customize/service/job/QywxMessageJob.java | 3 +- .../domain/ab98/user/db/Ab98UserEntity.java | 2 +- .../cell/CabinetCellApplicationService.java | 22 +++++++++- .../cabinet/cell/db/CabinetCellMapper.java | 37 ++++++++++++++++ .../cabinet/cell/db/CabinetCellService.java | 3 ++ .../cell/db/CabinetCellServiceImpl.java | 15 +++++++ .../cell/dto/CabinetCellLatestOrderDTO.java | 44 +++++++++++++++++++ .../dto/CabinetCellWithOrderCountDTO.java | 34 ++++++++++++++ 8 files changed, 156 insertions(+), 4 deletions(-) create mode 100644 agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/dto/CabinetCellLatestOrderDTO.java 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 12042cc..444db29 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 @@ -157,8 +157,7 @@ public class QywxMessageJob { String totag = ""; List articles = new ArrayList<>(); NewsArticle article = new NewsArticle(); - article.setTitle("耗材领用申请通知"); - article.setDescription("领用商品:" + record.getGoodsName()); + article.setTitle("逾期未归还通知"); article.setDescription("你借用的 【" + record.getGoodsName() + "】 已逾期未归还,请及时归还"); article.setPicurl(record.getCoverImg()); article.setUrl("http://wxshop.ab98.cn/shop-api/api/shop/qy/wechatAuth/home"); diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/ab98/user/db/Ab98UserEntity.java b/agileboot-domain/src/main/java/com/agileboot/domain/ab98/user/db/Ab98UserEntity.java index c14286c..3ccfec5 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/ab98/user/db/Ab98UserEntity.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/ab98/user/db/Ab98UserEntity.java @@ -40,7 +40,7 @@ public class Ab98UserEntity extends BaseEntity { private String userid; @ApiModelProperty("真实姓名") - @TableField("`name`") + @TableField("name") private String name; @ApiModelProperty("手机号码") diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/CabinetCellApplicationService.java b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/CabinetCellApplicationService.java index 16f38c3..86144ec 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/CabinetCellApplicationService.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/CabinetCellApplicationService.java @@ -2,6 +2,7 @@ package com.agileboot.domain.cabinet.cell; import com.agileboot.common.core.page.PageDTO; import com.agileboot.domain.cabinet.cell.db.CabinetCellDO; +import com.agileboot.domain.cabinet.cell.dto.CabinetCellLatestOrderDTO; import com.agileboot.domain.cabinet.cell.dto.CabinetCellWithOrderCountDTO; import com.agileboot.domain.cabinet.cell.query.SearchCabinetCellWithOrdersQuery; import com.agileboot.domain.common.command.BulkOperationCommand; @@ -20,6 +21,7 @@ import java.util.List; import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.web.bind.annotation.PathVariable; @@ -33,7 +35,25 @@ public class CabinetCellApplicationService { public PageDTO getCabinetCellList(SearchCabinetCellWithOrdersQuery query) { Page page = cabinetCellService.getCellListWithOrders(query); - return new PageDTO<>(page.getRecords(), page.getTotal()); + List list = page.getRecords(); + + List rentingCells = list.stream() + .filter(cell -> cell.getIsRented().equals(1)) + .collect(Collectors.toList()); + + List cellLatestOrderDTOS = cabinetCellService.selectLatestOrderInfoByCell(rentingCells.stream() + .map(CabinetCellWithOrderCountDTO::getCellId).collect(Collectors.toList())); + + for (CabinetCellWithOrderCountDTO cell : rentingCells) { + cellLatestOrderDTOS.stream() + .filter(order -> order.getCellId().equals(cell.getCellId())) + .findFirst() + .ifPresent(order -> { + BeanUtils.copyProperties(order, cell); + }); + } + + return new PageDTO<>(list, page.getTotal()); } public void addCabinetCell(AddCabinetCellCommand command) { 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 3d10705..0f48a0a 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 @@ -1,5 +1,6 @@ package com.agileboot.domain.cabinet.cell.db; +import com.agileboot.domain.cabinet.cell.dto.CabinetCellLatestOrderDTO; import com.agileboot.domain.cabinet.cell.dto.CabinetCellWithOrderCountDTO; import com.agileboot.domain.cabinet.smartCabinet.db.SmartCabinetDO; import com.baomidou.mybatisplus.core.conditions.Wrapper; @@ -74,4 +75,40 @@ public interface CabinetCellMapper extends BaseMapper { "WHERE cabinet_id = #{cabinetId} AND deleted = 0 " + "ORDER BY cell_id ASC") List selectCabinetCellDOList(@Param("cabinetId") Long cabinetId); + + @Select("SELECT " + + " cc.cell_id, " + + " sog.order_goods_id, " + + " so.order_id, " + + " so.name, " + + " so.mobile, " + + " au.face_img, " + + " au.ab98_user_id " + + "FROM " + + " cabinet_cell cc " + + "INNER JOIN ( " + + " SELECT " + + " sog_inner.order_goods_id, " + + " sog_inner.order_id, " + + " sog_inner.status, " + + " sog_inner.cell_id " + + " FROM ( " + + " SELECT " + + " sog.*, " + + " ROW_NUMBER() OVER ( " + + " PARTITION BY sog.cell_id " + + " ORDER BY sog.create_time DESC, sog.order_goods_id DESC " + + " ) AS rn " + + " FROM shop_order_goods sog " + + " WHERE " + + " sog.deleted = 0 " + + " AND sog.status = 1 " + + " AND sog.cell_id IS NOT NULL " + + " ) sog_inner " + + " WHERE sog_inner.rn = 1 " + + ") sog ON cc.cell_id = sog.cell_id " + + "INNER JOIN shop_order so ON sog.order_id = so.order_id " + + "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); } 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 9cfbd8e..f8b7204 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 @@ -1,6 +1,7 @@ package com.agileboot.domain.cabinet.cell.db; import com.agileboot.common.core.page.AbstractPageQuery; +import com.agileboot.domain.cabinet.cell.dto.CabinetCellLatestOrderDTO; import com.agileboot.domain.cabinet.cell.dto.CabinetCellWithOrderCountDTO; import com.agileboot.domain.cabinet.smartCabinet.dto.CabinetDetailDTO; import com.baomidou.mybatisplus.core.conditions.Wrapper; @@ -37,4 +38,6 @@ public interface CabinetCellService extends IService { Long countLinkedRecord(); List selectCabinetCellDOList(Long cabinetId); + + List selectLatestOrderInfoByCell(List cellIds); } 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 f60e7cc..888d5ac 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 @@ -1,9 +1,11 @@ package com.agileboot.domain.cabinet.cell.db; import com.agileboot.common.core.page.AbstractPageQuery; +import com.agileboot.domain.cabinet.cell.dto.CabinetCellLatestOrderDTO; import com.agileboot.domain.cabinet.cell.dto.CabinetCellWithOrderCountDTO; import com.agileboot.domain.cabinet.smartCabinet.dto.CabinetDetailDTO; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import java.util.List; @@ -61,4 +63,17 @@ public class CabinetCellServiceImpl extends ServiceImpl selectCabinetCellDOList(Long cabinetId) { return baseMapper.selectCabinetCellDOList(cabinetId); } + + @Override + public List selectLatestOrderInfoByCell(List cellIds) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("cc.is_rented", 1) + .eq("cc.deleted", 0) + .eq("so.deleted", 0) + .eq("so.status", 2) + .eq("so.pay_status", 2) + .eq("sog.status", 1) + .in("cc.cell_id", cellIds); + return baseMapper.selectLatestOrderInfoByCell(queryWrapper); + } } diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/dto/CabinetCellLatestOrderDTO.java b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/dto/CabinetCellLatestOrderDTO.java new file mode 100644 index 0000000..11701cf --- /dev/null +++ b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/dto/CabinetCellLatestOrderDTO.java @@ -0,0 +1,44 @@ +package com.agileboot.domain.cabinet.cell.dto; + +import lombok.Data; + +/** + * 柜机格口最新订单信息DTO + */ +@Data +public class CabinetCellLatestOrderDTO { + /** + * 格口ID + */ + private Long cellId; + + /** + * 订单商品ID + */ + private Long orderGoodsId; + + /** + * 订单ID + */ + private Long orderId; + + /** + * 客户姓名 + */ + private String name; + + /** + * 客户手机号 + */ + private String mobile; + + /** + * 人脸照片地址 + */ + private String faceImg; + + /** + * 汇邦云用户ID + */ + private Long ab98UserId; +} diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/dto/CabinetCellWithOrderCountDTO.java b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/dto/CabinetCellWithOrderCountDTO.java index 6ede152..127a0bb 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/dto/CabinetCellWithOrderCountDTO.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/dto/CabinetCellWithOrderCountDTO.java @@ -25,4 +25,38 @@ public class CabinetCellWithOrderCountDTO extends CabinetCellEntity { @ApiModelProperty("关联商品图片") @TableField("cover_img") private String coverImg; + + /** + * 订单商品ID + */ + @ApiModelProperty("订单商品ID") + private Long orderGoodsId; + + /** + * 订单ID + */ + @ApiModelProperty("订单ID") + private Long orderId; + + /** + * 客户姓名 + */ + @ApiModelProperty("客户姓名") + private String name; + + /** + * 客户手机号 + */ + @ApiModelProperty("客户手机号") + private String mobile; + /** + * 人脸照片地址 + */ + @ApiModelProperty("人脸照片地址") + private String faceImg; + /** + * 汇邦云用户ID + */ + @ApiModelProperty("汇邦云用户ID") + private Long ab98UserId; } \ No newline at end of file