feat(柜机格口操作): 添加带关联信息的操作记录详情查询功能
新增操作记录详情查询接口,包含柜机、商店等关联信息 清空密码时重置备注字段为空
This commit is contained in:
parent
91aa34efe9
commit
078c18fec9
|
|
@ -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<PageDTO<CabinetCellOperationDTO>> listDetail(SearchCabinetCellOperationDetailQuery query) {
|
||||
PageDTO<CabinetCellOperationDTO> page = cabinetCellOperationService.getOperationDetailList(query);
|
||||
return ResponseDTO.ok(page);
|
||||
}
|
||||
|
||||
@Operation(summary = "新增柜机格口操作")
|
||||
@AccessLog(title = "柜机格口操作管理", businessType = BusinessTypeEnum.ADD)
|
||||
@PostMapping
|
||||
|
|
|
|||
|
|
@ -98,6 +98,8 @@ public class CabinetCellServiceImpl extends ServiceImpl<CabinetCellMapper, Cabin
|
|||
UpdateWrapper<CabinetCellEntity> 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);
|
||||
|
|
|
|||
|
|
@ -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<CabinetCellOperationDTO> getOperationDetailList(SearchCabinetCellOperationDetailQuery query) {
|
||||
Page<CabinetCellOperationDTO> page = cabinetCellOperationService.getOperationDetailList(query);
|
||||
return new PageDTO<>(page.getRecords(), page.getTotal());
|
||||
}
|
||||
}
|
||||
|
|
@ -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<CabinetCellOperat
|
|||
@Param(Constants.WRAPPER) Wrapper<CabinetCellOperationEntity> 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<CabinetCellOperationDTO> getOperationDetailList(
|
||||
Page<CabinetCellOperationDTO> page,
|
||||
@Param(Constants.WRAPPER) Wrapper<CabinetCellOperationDTO> queryWrapper
|
||||
);
|
||||
|
||||
@Select("SELECT * " +
|
||||
"FROM cabinet_cell_operation " +
|
||||
"WHERE status = '1' " +
|
||||
|
|
|
|||
|
|
@ -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<CabinetCellOperationEntity> {
|
||||
|
||||
Page<CabinetCellOperationEntity> getOperationList(AbstractPageQuery<CabinetCellOperationEntity> query);
|
||||
|
||||
/**
|
||||
* 获取操作记录详情列表(带关联表信息)
|
||||
*
|
||||
* @param query 查询条件
|
||||
* @return 分页结果
|
||||
*/
|
||||
Page<CabinetCellOperationDTO> getOperationDetailList(SearchCabinetCellOperationDetailQuery query);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<CabinetCellOper
|
|||
public Page<CabinetCellOperationEntity> getOperationList(AbstractPageQuery<CabinetCellOperationEntity> query) {
|
||||
return this.page(query.toPage(), query.toQueryWrapper());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Page<CabinetCellOperationDTO> getOperationDetailList(SearchCabinetCellOperationDetailQuery query) {
|
||||
return this.baseMapper.getOperationDetailList(query.toPage(), query.toQueryWrapper());
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
@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;
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<CabinetCellOperationDTO> {
|
||||
|
||||
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<CabinetCellOperationDTO> addQueryCondition() {
|
||||
QueryWrapper<CabinetCellOperationDTO> 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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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='柜机格口信息表';
|
||||
) 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='柜机格口操作记录表';
|
||||
Loading…
Reference in New Issue