From 078c18fec9d5d472e7d530516aa1e57ac6196072 Mon Sep 17 00:00:00 2001 From: dzq Date: Mon, 5 Jan 2026 17:48:14 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E6=9F=9C=E6=9C=BA=E6=A0=BC=E5=8F=A3?= =?UTF-8?q?=E6=93=8D=E4=BD=9C):=20=E6=B7=BB=E5=8A=A0=E5=B8=A6=E5=85=B3?= =?UTF-8?q?=E8=81=94=E4=BF=A1=E6=81=AF=E7=9A=84=E6=93=8D=E4=BD=9C=E8=AE=B0?= =?UTF-8?q?=E5=BD=95=E8=AF=A6=E6=83=85=E6=9F=A5=E8=AF=A2=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增操作记录详情查询接口,包含柜机、商店等关联信息 清空密码时重置备注字段为空 --- .../CabinetCellOperationController.java | 8 ++ .../cell/db/CabinetCellServiceImpl.java | 2 + ...abinetCellOperationApplicationService.java | 6 ++ .../db/CabinetCellOperationMapper.java | 12 +++ .../db/CabinetCellOperationService.java | 10 ++ .../db/CabinetCellOperationServiceImpl.java | 7 ++ .../dto/CabinetCellOperationDTO.java | 91 ++++++++++--------- ...SearchCabinetCellOperationDetailQuery.java | 61 +++++++++++++ doc/sql/cabinet.sql | 24 ++++- 9 files changed, 175 insertions(+), 46 deletions(-) create mode 100644 agileboot-domain/src/main/java/com/agileboot/domain/cabinet/operation/query/SearchCabinetCellOperationDetailQuery.java diff --git a/agileboot-admin/src/main/java/com/agileboot/admin/controller/cabinet/CabinetCellOperationController.java b/agileboot-admin/src/main/java/com/agileboot/admin/controller/cabinet/CabinetCellOperationController.java index f1a698f..3bfee74 100644 --- a/agileboot-admin/src/main/java/com/agileboot/admin/controller/cabinet/CabinetCellOperationController.java +++ b/agileboot-admin/src/main/java/com/agileboot/admin/controller/cabinet/CabinetCellOperationController.java @@ -11,6 +11,7 @@ import com.agileboot.domain.cabinet.operation.command.AddCabinetCellOperationCom import com.agileboot.domain.cabinet.operation.command.UpdateCabinetCellOperationCommand; import com.agileboot.domain.cabinet.operation.db.CabinetCellOperationEntity; import com.agileboot.domain.cabinet.operation.dto.CabinetCellOperationDTO; +import com.agileboot.domain.cabinet.operation.query.SearchCabinetCellOperationDetailQuery; import com.agileboot.domain.cabinet.operation.query.SearchCabinetCellOperationQuery; import io.swagger.v3.oas.annotations.Operation; import java.util.List; @@ -41,6 +42,13 @@ public class CabinetCellOperationController extends BaseController { return ResponseDTO.ok(page); } + @Operation(summary = "柜机格口操作详情列表") + @GetMapping("/page") + public ResponseDTO> listDetail(SearchCabinetCellOperationDetailQuery query) { + PageDTO page = cabinetCellOperationService.getOperationDetailList(query); + return ResponseDTO.ok(page); + } + @Operation(summary = "新增柜机格口操作") @AccessLog(title = "柜机格口操作管理", businessType = BusinessTypeEnum.ADD) @PostMapping 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 df8bf45..bf75dfe 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 @@ -98,6 +98,8 @@ public class CabinetCellServiceImpl extends ServiceImpl updateWrapper = new UpdateWrapper<>(); updateWrapper.set("password", null) .set("password_create_time", null) + // 清空密码时重置备注为空,暂不生效 + .set("remark", "") .set("usage_status", 1) // 空闲 .eq("cell_id", cellId) .eq("deleted", 0); diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/operation/CabinetCellOperationApplicationService.java b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/operation/CabinetCellOperationApplicationService.java index 0daeae3..57b22c1 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/operation/CabinetCellOperationApplicationService.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/operation/CabinetCellOperationApplicationService.java @@ -9,6 +9,7 @@ import com.agileboot.domain.cabinet.operation.db.CabinetCellOperationService; import com.agileboot.domain.cabinet.operation.dto.CabinetCellOperationDTO; import com.agileboot.domain.cabinet.operation.model.CabinetCellOperationModel; import com.agileboot.domain.cabinet.operation.model.CabinetCellOperationModelFactory; +import com.agileboot.domain.cabinet.operation.query.SearchCabinetCellOperationDetailQuery; import com.agileboot.domain.cabinet.operation.query.SearchCabinetCellOperationQuery; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import java.util.List; @@ -54,4 +55,9 @@ public class CabinetCellOperationApplicationService { public CabinetCellOperationEntity getByOperationId(Long operationId) { return cabinetCellOperationService.getById(operationId); } + + public PageDTO getOperationDetailList(SearchCabinetCellOperationDetailQuery query) { + Page page = cabinetCellOperationService.getOperationDetailList(query); + return new PageDTO<>(page.getRecords(), page.getTotal()); + } } \ No newline at end of file diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/operation/db/CabinetCellOperationMapper.java b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/operation/db/CabinetCellOperationMapper.java index d37b468..1fd0c59 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/operation/db/CabinetCellOperationMapper.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/operation/db/CabinetCellOperationMapper.java @@ -1,5 +1,6 @@ package com.agileboot.domain.cabinet.operation.db; +import com.agileboot.domain.cabinet.operation.dto.CabinetCellOperationDTO; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.toolkit.Constants; @@ -25,6 +26,17 @@ public interface CabinetCellOperationMapper extends BaseMapper queryWrapper ); + @Select("SELECT cco.*, cc.cabinet_id, sc.cabinet_name, sc.shop_id, s.shop_name, cc.cell_no, cc.cell_type " + + "FROM cabinet_cell_operation cco " + + "LEFT JOIN cabinet_cell cc ON cco.cell_id = cc.cell_id " + + "LEFT JOIN smart_cabinet sc ON cc.cabinet_id = sc.cabinet_id " + + "LEFT JOIN shop s ON sc.shop_id = s.shop_id " + + "${ew.customSqlSegment}") + Page getOperationDetailList( + Page page, + @Param(Constants.WRAPPER) Wrapper queryWrapper + ); + @Select("SELECT * " + "FROM cabinet_cell_operation " + "WHERE status = '1' " + diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/operation/db/CabinetCellOperationService.java b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/operation/db/CabinetCellOperationService.java index b29a025..35fcbac 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/operation/db/CabinetCellOperationService.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/operation/db/CabinetCellOperationService.java @@ -1,6 +1,8 @@ package com.agileboot.domain.cabinet.operation.db; import com.agileboot.common.core.page.AbstractPageQuery; +import com.agileboot.domain.cabinet.operation.dto.CabinetCellOperationDTO; +import com.agileboot.domain.cabinet.operation.query.SearchCabinetCellOperationDetailQuery; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; @@ -15,4 +17,12 @@ import com.baomidou.mybatisplus.extension.service.IService; public interface CabinetCellOperationService extends IService { Page getOperationList(AbstractPageQuery query); + + /** + * 获取操作记录详情列表(带关联表信息) + * + * @param query 查询条件 + * @return 分页结果 + */ + Page getOperationDetailList(SearchCabinetCellOperationDetailQuery query); } diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/operation/db/CabinetCellOperationServiceImpl.java b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/operation/db/CabinetCellOperationServiceImpl.java index f69e2b4..fd05126 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/operation/db/CabinetCellOperationServiceImpl.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/operation/db/CabinetCellOperationServiceImpl.java @@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; import com.agileboot.common.core.page.AbstractPageQuery; +import com.agileboot.domain.cabinet.operation.dto.CabinetCellOperationDTO; +import com.agileboot.domain.cabinet.operation.query.SearchCabinetCellOperationDetailQuery; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; /** @@ -21,4 +23,9 @@ public class CabinetCellOperationServiceImpl extends ServiceImpl getOperationList(AbstractPageQuery query) { return this.page(query.toPage(), query.toQueryWrapper()); } + + @Override + public Page getOperationDetailList(SearchCabinetCellOperationDetailQuery query) { + return this.baseMapper.getOperationDetailList(query.toPage(), query.toQueryWrapper()); + } } diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/operation/dto/CabinetCellOperationDTO.java b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/operation/dto/CabinetCellOperationDTO.java index aaf747b..30a8701 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/operation/dto/CabinetCellOperationDTO.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/operation/dto/CabinetCellOperationDTO.java @@ -8,16 +8,23 @@ import java.util.Date; import com.agileboot.common.annotation.ExcelColumn; import com.agileboot.common.annotation.ExcelSheet; import com.agileboot.domain.cabinet.operation.db.CabinetCellOperationEntity; +import com.baomidou.mybatisplus.annotation.TableField; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import lombok.EqualsAndHashCode; @ExcelSheet(name = "柜机格口操作记录列表") @Data -public class CabinetCellOperationDTO { +@EqualsAndHashCode(callSuper = true) +public class CabinetCellOperationDTO extends CabinetCellOperationEntity { + + public CabinetCellOperationDTO() { + } public CabinetCellOperationDTO(CabinetCellOperationEntity entity) { if (entity != null) { BeanUtil.copyProperties(entity, this); - + this.statusDesc = convertStatus(entity.getStatus()); this.createTimeStr = DateUtil.format(entity.getCreateTime(), "yyyy-MM-dd HH:mm:ss"); } @@ -25,52 +32,46 @@ public class CabinetCellOperationDTO { private String convertStatus(Integer status) { if (status == null) return "未知状态"; - switch(status) { - case 1: return "正常"; - case 2: return "操作失败"; - default: return "未知状态"; + switch (status) { + case 1: + return "正常"; + case 2: + return "操作失败"; + default: + return "未知状态"; } } - @ExcelColumn(name = "操作流水号") - private Long operationId; - - @ExcelColumn(name = "关联格口ID") - private Long cellId; - - @ExcelColumn(name = "关联商品ID") - private Long goodsId; - - @ExcelColumn(name = "商品名称") - private String goodsName; - - @ExcelColumn(name = "企业微信用户ID") - private String userid; - - @ExcelColumn(name = "是否内部用户") - private Boolean isInternal; - - @ExcelColumn(name = "成员名称") - private String name; - - @ExcelColumn(name = "手机号码") - private String mobile; - - @ExcelColumn(name = "操作类型") - private Integer operationType; - - @ExcelColumn(name = "操作状态") - private Integer status; - - @ExcelColumn(name = "操作状态") + @ApiModelProperty("创建时间字符串") + @TableField(exist = false) private String statusDesc; - @ExcelColumn(name = "操作人") - private String operator; - - @ExcelColumn(name = "创建时间") - private Date createTime; - - @ExcelColumn(name = "创建时间") + @ApiModelProperty("创建时间字符串") + @TableField(exist = false) private String createTimeStr; -} \ No newline at end of file + + @ApiModelProperty("柜机ID") + @TableField(exist = false) + private Long cabinetId; + + @ApiModelProperty("柜机名称") + @TableField(exist = false) + private String cabinetName; + + @ApiModelProperty("商店ID") + @TableField(exist = false) + private Long shopId; + + @ApiModelProperty("商店名称") + @TableField(exist = false) + private String shopName; + + @ApiModelProperty("格口号") + @TableField(exist = false) + private Integer cellNo; + + @ApiModelProperty("格口类型(1小格 2中格 3大格 4超大格)") + @TableField(exist = false) + private Integer cellType; + +} diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/operation/query/SearchCabinetCellOperationDetailQuery.java b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/operation/query/SearchCabinetCellOperationDetailQuery.java new file mode 100644 index 0000000..e527f82 --- /dev/null +++ b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/operation/query/SearchCabinetCellOperationDetailQuery.java @@ -0,0 +1,61 @@ +package com.agileboot.domain.cabinet.operation.query; + +import cn.hutool.core.util.StrUtil; +import com.agileboot.common.core.page.AbstractPageQuery; +import com.agileboot.domain.cabinet.operation.dto.CabinetCellOperationDTO; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import java.util.Date; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 柜机格口操作记录详细查询(带关联表信息) + * + * @author valarchie + */ +@EqualsAndHashCode(callSuper = true) +@Data +public class SearchCabinetCellOperationDetailQuery extends AbstractPageQuery { + + private Long cabinetId; + private Long shopId; + private Long operationId; + private Long cellId; + private Long goodsId; + private Integer cellNo; + private String userid; + private String goodsName; + private Boolean isInternal; + private String name; + private String mobile; + private Integer operationType; + private Integer status; + private Date startTime; + private Date endTime; + + @Override + public QueryWrapper addQueryCondition() { + QueryWrapper queryWrapper = new QueryWrapper<>(); + + queryWrapper + .eq(cabinetId != null, "sc.cabinet_id", cabinetId) + .eq(shopId != null, "s.shop_id", shopId) + .eq(operationId != null, "cco.operation_id", operationId) + .eq(cellId != null, "cco.cell_id", cellId) + .eq(goodsId != null, "cco.goods_id", goodsId) + .eq(cellNo != null, "cc.cell_no", cellNo) + .eq(StrUtil.isNotEmpty(userid), "cco.userid", userid) + .like(StrUtil.isNotEmpty(goodsName), "cco.goods_name", goodsName) + .eq(isInternal != null, "cco.is_internal", isInternal) + .like(StrUtil.isNotEmpty(name), "cco.name", name) + .like(StrUtil.isNotEmpty(mobile), "cco.mobile", mobile) + .eq(operationType != null, "cco.operation_type", operationType) + .eq(status != null, "cco.status", status) + .between(startTime != null && endTime != null, "cco.create_time", startTime, endTime) + .orderByDesc("cco.create_time"); + + this.timeRangeColumn = "cco.create_time"; + + return queryWrapper; + } +} diff --git a/doc/sql/cabinet.sql b/doc/sql/cabinet.sql index 2b8f331..4c12628 100644 --- a/doc/sql/cabinet.sql +++ b/doc/sql/cabinet.sql @@ -109,4 +109,26 @@ CREATE TABLE `cabinet_cell` ( KEY `idx_goods` (`goods_id`), CONSTRAINT `fk_cell_cabinet` FOREIGN KEY (`cabinet_id`) REFERENCES `smart_cabinet` (`cabinet_id`), CONSTRAINT `fk_cell_goods` FOREIGN KEY (`goods_id`) REFERENCES `shop_goods` (`goods_id`) -) ENGINE=InnoDB AUTO_INCREMENT=1268 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='柜机格口信息表'; \ No newline at end of file +) ENGINE=InnoDB AUTO_INCREMENT=1268 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='柜机格口信息表'; + +CREATE TABLE `cabinet_cell_operation` ( + `operation_id` bigint NOT NULL AUTO_INCREMENT COMMENT '操作流水号', + `cell_id` bigint NOT NULL COMMENT '关联格口ID', + `goods_id` bigint DEFAULT NULL COMMENT '关联商品ID', + `goods_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '商品名称', + `userid` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '企业微信用户ID', + `is_internal` tinyint(1) DEFAULT '0' COMMENT '是否内部用户(0否 1是)', + `name` varchar(30) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '成员名称', + `mobile` varchar(30) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '手机号码', + `operation_type` tinyint NOT NULL COMMENT '操作类型(1用户 2管理员)', + `status` tinyint NOT NULL DEFAULT '1' COMMENT '操作状态(1正常 2操作失败)', + `creator_id` bigint NOT NULL DEFAULT '0' COMMENT '创建者ID', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater_id` bigint NOT NULL DEFAULT '0' COMMENT '更新者ID', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '删除标志(0存在 1删除)', + PRIMARY KEY (`operation_id`), + KEY `idx_cell` (`cell_id`), + KEY `idx_user` (`userid`), + KEY `idx_operation_time` (`create_time`) +) ENGINE=InnoDB AUTO_INCREMENT=5717 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='柜机格口操作记录表'; \ No newline at end of file