From 65a0ceeb2bbcfe8bd84aff2c6cbfa150d58c2979 Mon Sep 17 00:00:00 2001 From: dzq Date: Thu, 26 Jun 2025 11:39:40 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E6=99=BA=E8=83=BD=E6=9F=9C):=20=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E6=A0=BC=E5=8F=A3=E7=A7=9F=E8=B5=81=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E5=8F=8A=E7=9B=B8=E5=85=B3=E6=9F=A5=E8=AF=A2=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 添加格口租赁价格和租赁状态字段 新增获取租赁柜体详情接口 修改查询条件支持按租赁状态筛选 --- .../api/controller/CabinetCellController.java | 6 +++ .../cabinet/cell/db/CabinetCellEntity.java | 10 +++++ .../cabinet/cell/dto/CabinetCellDTO.java | 6 +++ .../cell/query/SearchCabinetCellQuery.java | 4 ++ .../SearchCabinetCellWithOrdersQuery.java | 6 ++- .../SmartCabinetApplicationService.java | 42 +++++++++++++++++++ .../dto/RentingCabinetDetailDTO.java | 14 +++++++ sql/20250625.sql | 9 ++++ 8 files changed, 96 insertions(+), 1 deletion(-) create mode 100644 agileboot-domain/src/main/java/com/agileboot/domain/cabinet/smartCabinet/dto/RentingCabinetDetailDTO.java create mode 100644 sql/20250625.sql 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 3441baf..18b83c7 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 @@ -16,6 +16,7 @@ import com.agileboot.domain.cabinet.operation.model.CabinetCellOperationModel; import com.agileboot.domain.cabinet.operation.model.CabinetCellOperationModelFactory; import com.agileboot.domain.cabinet.smartCabinet.SmartCabinetApplicationService; import com.agileboot.domain.cabinet.smartCabinet.dto.CabinetDetailDTO; +import com.agileboot.domain.cabinet.smartCabinet.dto.RentingCabinetDetailDTO; import com.agileboot.domain.cabinet.smartCabinet.model.SmartCabinetModel; import com.agileboot.domain.cabinet.smartCabinet.model.SmartCabinetModelFactory; import com.agileboot.domain.mqtt.MqttService; @@ -49,6 +50,11 @@ public class CabinetCellController { return ResponseDTO.ok(smartCabinetApplicationService.getCabinetDetail(shopId)); } + @GetMapping("/detail/renting") + public ResponseDTO> getRentingCabinetDetail(@RequestParam Long shopId) { + return ResponseDTO.ok(smartCabinetApplicationService.getRentingCabinetDetail(shopId)); + } + @Operation(summary = "配置格口商品库存") @PutMapping("/configureGoodsCellsStock/{cellId}/{goodsId}/{stock}") diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/db/CabinetCellEntity.java b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/db/CabinetCellEntity.java index f5f10e5..160d627 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/db/CabinetCellEntity.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/db/CabinetCellEntity.java @@ -6,6 +6,8 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import java.io.Serializable; +import java.math.BigDecimal; + import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; @@ -51,6 +53,14 @@ public class CabinetCellEntity extends BaseEntity { @TableField("stock") private Integer stock; + @ApiModelProperty("格口租用价格") + @TableField("cell_price") + private BigDecimal cellPrice; + + @ApiModelProperty("是否已租用:0-未租用,1-已租用") + @TableField("is_rented") + private Integer isRented; + @ApiModelProperty("格口类型(1小格 2中格 3大格 4超大格)") @TableField("cell_type") private Integer cellType; diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/dto/CabinetCellDTO.java b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/dto/CabinetCellDTO.java index 5b4adc8..d42b34f 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/dto/CabinetCellDTO.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/dto/CabinetCellDTO.java @@ -49,6 +49,12 @@ public class CabinetCellDTO { @ExcelColumn(name = "库存数量") private Integer stock; + @ExcelColumn(name = "格口租用价格") + private BigDecimal cellPrice; + + @ExcelColumn(name = "是否已租用") + private Integer isRented; + @ExcelColumn(name = "订单数量") private Integer orderCount; diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/query/SearchCabinetCellQuery.java b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/query/SearchCabinetCellQuery.java index 15a8b61..61ebcaa 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/query/SearchCabinetCellQuery.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/query/SearchCabinetCellQuery.java @@ -15,6 +15,9 @@ public class SearchCabinetCellQuery extends AbstractPageQuery { private Long cabinetId; private Integer cellNo; private Integer cellType; + + private Integer isRented; + private Integer usageStatus; private Integer availableStatus; private Date startTime; @@ -29,6 +32,7 @@ public class SearchCabinetCellQuery extends AbstractPageQuery { .eq(cabinetId != null, "cabinet_id", cabinetId) .eq(cellNo != null, "cell_no", cellNo) .eq(cellType != null, "cell_type", cellType) + .eq(isRented != null, "is_rented", isRented) .eq(usageStatus != null, "usage_status", usageStatus) .eq(availableStatus != null, "available_status", availableStatus) .eq("deleted", false) diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/query/SearchCabinetCellWithOrdersQuery.java b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/query/SearchCabinetCellWithOrdersQuery.java index 468d66c..50c6b1f 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/query/SearchCabinetCellWithOrdersQuery.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/query/SearchCabinetCellWithOrdersQuery.java @@ -15,6 +15,9 @@ public class SearchCabinetCellWithOrdersQuery extends AbstractPageQuery { private Long cabinetId; private Integer cellNo; private Integer cellType; + + private Integer isRented; + private Integer usageStatus; private Integer availableStatus; private Date startTime; @@ -30,7 +33,8 @@ public class SearchCabinetCellWithOrdersQuery extends AbstractPageQuery { .eq(cabinetId != null, "cc.cabinet_id", cabinetId) .eq(cellNo != null, "cc.cell_no", cellNo) .eq(cellType != null, "cc.cell_type", cellType) - .eq(usageStatus != null, "cc.usage_status", usageStatus) + .eq(isRented != null, "cc.is_rented", isRented) + .eq(usageStatus != null, "cc.usage_status", usageStatus) .eq(availableStatus != null, "cc.available_status", availableStatus) .eq("cc.deleted", false) .like(StringUtils.isNotBlank(goodsName), "sg.goods_name", goodsName) 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 5d37045..7ea5f8d 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 @@ -12,6 +12,7 @@ import com.agileboot.domain.cabinet.mainboard.model.CabinetMainboardModel; import com.agileboot.domain.cabinet.mainboard.model.CabinetMainboardModelFactory; import com.agileboot.domain.cabinet.smartCabinet.db.SmartCabinetDO; import com.agileboot.domain.cabinet.smartCabinet.dto.CabinetDetailDTO; +import com.agileboot.domain.cabinet.smartCabinet.dto.RentingCabinetDetailDTO; import com.agileboot.domain.common.command.BulkOperationCommand; import com.agileboot.domain.cabinet.smartCabinet.command.AddSmartCabinetCommand; import com.agileboot.domain.cabinet.smartCabinet.command.UpdateSmartCabinetCommand; @@ -221,6 +222,47 @@ public class SmartCabinetApplicationService { return result; } + + /** + * 获取所有智能柜的详细信息 + * @return 包含柜体信息、单元格信息和商品信息的列表 + */ + public List getRentingCabinetDetail(Long shopId) { + // 获取所有智能柜、单元格和商品的基础数据 + QueryWrapper smartCabinetEntityQueryWrapper = new QueryWrapper<>(); + smartCabinetEntityQueryWrapper.eq("shop_id", shopId) + .eq("deleted", false); + List smartCabinets = smartCabinetService.list(smartCabinetEntityQueryWrapper); + + QueryWrapper cabinetCellEntityQueryWrapper = new QueryWrapper<>(); + cabinetCellEntityQueryWrapper.in("cabinet_id", + smartCabinets.stream() + .map(SmartCabinetEntity::getCabinetId) + .filter(Objects::nonNull) + .distinct() + .collect(Collectors.toList())) + .eq("is_rented", 0) + .eq("deleted", false); + List cabinetCells = cabinetCellService.list(cabinetCellEntityQueryWrapper); + + List result = new ArrayList<>(); + // 遍历每个智能柜构建详细信息 + for (SmartCabinetEntity cabinet : smartCabinets) { + RentingCabinetDetailDTO rentingCabinetDetailDTO = new RentingCabinetDetailDTO(); + // 设置柜体基础信息 + rentingCabinetDetailDTO.setCabinetId(cabinet.getCabinetId()); + rentingCabinetDetailDTO.setCabinetName(cabinet.getCabinetName()); + rentingCabinetDetailDTO.setLockControlNo(cabinet.getLockControlNo()); + + // 将单元格列表加入柜体信息 + rentingCabinetDetailDTO.setCells(cabinetCells.stream() + .filter(cell -> cell.getCabinetId().equals(cabinet.getCabinetId())) + .collect(Collectors.toList())); + result.add(rentingCabinetDetailDTO); + } + return result; + } + public List createCabinetMainboardByTemplate(SmartCabinetModel cabinetModel) { CabinetTemplateEnum template = CabinetTemplateEnum.getByCode(Integer.parseInt(cabinetModel.getTemplateNo())); if (template == null) { diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/smartCabinet/dto/RentingCabinetDetailDTO.java b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/smartCabinet/dto/RentingCabinetDetailDTO.java new file mode 100644 index 0000000..14d5647 --- /dev/null +++ b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/smartCabinet/dto/RentingCabinetDetailDTO.java @@ -0,0 +1,14 @@ +package com.agileboot.domain.cabinet.smartCabinet.dto; + +import com.agileboot.domain.cabinet.cell.db.CabinetCellEntity; +import lombok.Data; + +import java.util.List; + +@Data +public class RentingCabinetDetailDTO { + private Long cabinetId; + private String cabinetName; + private Integer lockControlNo; + private List cells; +} diff --git a/sql/20250625.sql b/sql/20250625.sql new file mode 100644 index 0000000..b515914 --- /dev/null +++ b/sql/20250625.sql @@ -0,0 +1,9 @@ + +ALTER TABLE `cabinet_cell` +ADD COLUMN `cell_price` decimal(15,2) NOT NULL DEFAULT '0.00' COMMENT '格口租用价格' +AFTER `stock`; + +ALTER TABLE `cabinet_cell` +ADD COLUMN `is_rented` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否已租用:0-未租用,1-已租用' +AFTER `cell_price`; +