feat: 用户自定义筛选列

This commit is contained in:
tangwei 2026-07-20 15:41:37 +08:00
parent c9ff984bd5
commit bbac60655d
9 changed files with 445 additions and 0 deletions

View File

@ -257,6 +257,14 @@ public class SwaggerConfig {
.build(); .build();
} }
@Bean
public GroupedOpenApi groupCusColumnApi() {
return GroupedOpenApi.builder()
.group("5.4 自定义筛选列")
.packagesToScan("com.yfd.platform.qgc_sys.cuscolumn.controller")
.build();
}
@Bean @Bean
public GroupedOpenApi groupLygkApi() { public GroupedOpenApi groupLygkApi() {

View File

@ -0,0 +1,44 @@
package com.yfd.platform.qgc_sys.cuscolumn.controller;
import com.yfd.platform.config.ResponseResult;
import com.yfd.platform.qgc_sys.cuscolumn.domain.MsUsercolumnB;
import com.yfd.platform.qgc_sys.cuscolumn.service.IMsUsercolumnBService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 用户自定义筛选列 控制层
*/
@RestController
@RequestMapping("/sys/usercolumn")
@Tag(name = "用户自定义筛选列")
public class MsUsercolumnBController {
@Resource
private IMsUsercolumnBService msUsercolumnBService;
/**
* 批量保存用户自定义列数据
*/
@PostMapping("/batchSave")
@Operation(summary = "保存用户自定义列数据")
public ResponseResult batchSave(@RequestBody MsUsercolumnB userColumn) {
boolean result = msUsercolumnBService.batchSave(userColumn);
return result ? ResponseResult.success("保存成功") : ResponseResult.error("保存失败");
}
/**
* 获取用户自定义列数据
*/
@PostMapping("/getUserColumnData")
@Operation(summary = "获取用户自定义列数据")
public ResponseResult getUserColumnData(@RequestBody MsUsercolumnB userColumn) {
return ResponseResult.successData(msUsercolumnBService.getUserColumnData(userColumn));
}
}

View File

@ -0,0 +1,90 @@
package com.yfd.platform.qgc_sys.cuscolumn.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* 筛选列配置表
*/
@Data
@TableName("MS_COLUMNCFG_B")
public class MsColumncfgB implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(type = IdType.ASSIGN_UUID)
private String id;
@TableField("FUNCTION_ID")
private String functionId;
@TableField("COLUMN_CFG")
private String columnCfg;
@TableField("ENABLE")
private Integer enable;
@TableField("ORDER_INDEX")
private Integer orderIndex;
@TableField("RECORD_USER")
private String recordUser;
@TableField("RECORD_TIME")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date recordTime;
@TableField("MODIFY_USER")
private String modifyUser;
@TableField("MODIFY_TIME")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date modifyTime;
@TableField("IS_DELETED")
private Integer isDeleted;
@TableField("DEFAULT_CHECKED")
private Integer defaultChecked;
@TableField("DELETE_USER")
private String deleteUser;
@TableField("DELETE_TIME")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date deleteTime;
@TableField("IS_TEMP_STORAGE")
private Integer isTempStorage;
@TableField("COLUMN_EN")
private String columnEn;
@TableField("GROUP_TYPE")
private String groupType;
@TableField("PARENT_ID")
private String parentId;
@TableField("HAS_CHILDREN")
private Integer hasChildren;
@TableField("DESCRIPTION")
private String description;
@TableField("CAN_BE_UPDATED")
private Integer canBeUpdated;
@TableField("WIDTH")
private Integer width;
@TableField("CAN_BE_SORTED")
private Integer canBeSorted;
}

View File

@ -0,0 +1,105 @@
package com.yfd.platform.qgc_sys.cuscolumn.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
/**
* 用户与筛选列映射表
*/
@Data
@TableName("MS_USERCOLUMN_B")
public class MsUsercolumnB implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(type = IdType.ASSIGN_UUID)
private String id;
@TableField("CFG_ID")
@JsonProperty("cfgId")
private String cfgId;
@TableField("CAN_BE_CHECKED")
private Integer canBeChecked;
@TableField("CHECKED")
private Integer checked;
@TableField("DESCRIPTION")
private String description;
@TableField("ENABLE")
private Integer enable;
@TableField("ORDER_INDEX")
private Integer orderIndex;
@TableField("RECORD_USER")
private String recordUser;
@TableField("RECORD_TIME")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date recordTime;
@TableField("MODIFY_USER")
private String modifyUser;
@TableField("MODIFY_TIME")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date modifyTime;
@TableField("IS_DELETED")
private Integer isDeleted;
@TableField("DELETE_USER")
private String deleteUser;
@TableField("DELETE_TIME")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date deleteTime;
@TableField("IS_TEMP_STORAGE")
private Integer isTempStorage;
@TableField("COLUMN_EN")
private String columnEn;
@TableField("COLUMN_NAME")
private String columnName;
/**
* 是否默认配置非数据库字段
*/
@TableField(exist = false)
@JsonProperty("defaultConfig")
private Boolean defaultConfig;
/**
* 分组类型非数据库字段来自关联查询
*/
@TableField(exist = false)
@JsonProperty("groupType")
private String groupType;
/**
* 自定义列宽度非数据库字段来自关联查询
*/
@TableField(exist = false)
@JsonProperty("width")
private Integer width;
/**
* 批量操作时的对象集合非数据库字段
*/
@TableField(exist = false)
private List<MsUsercolumnB> list;
}

View File

@ -0,0 +1,9 @@
package com.yfd.platform.qgc_sys.cuscolumn.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yfd.platform.qgc_sys.cuscolumn.domain.MsColumncfgB;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface MsColumncfgBMapper extends BaseMapper<MsColumncfgB> {
}

View File

@ -0,0 +1,29 @@
package com.yfd.platform.qgc_sys.cuscolumn.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yfd.platform.qgc_sys.cuscolumn.domain.MsUsercolumnB;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@Mapper
public interface MsUsercolumnBMapper extends BaseMapper<MsUsercolumnB> {
/**
* 根据用户ID和模块ID删除用户自定义列数据
*/
void deleteUserColumn(@Param("recordUser") String recordUser,
@Param("cfgId") String cfgId);
/**
* 查询用户自定义列数据LEFT JOIN MS_COLUMNCFG_B优先使用用户配置无用户配置时使用默认配置
*/
List<MsUsercolumnB> getUserColumnList(@Param("recordUser") String recordUser,
@Param("cfgId") String cfgId);
/**
* 根据模块ID查询默认列配置
*/
List<MsUsercolumnB> getUserColumnDefaultList(@Param("cfgId") String cfgId);
}

View File

@ -0,0 +1,19 @@
package com.yfd.platform.qgc_sys.cuscolumn.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yfd.platform.qgc_sys.cuscolumn.domain.MsUsercolumnB;
import java.util.List;
public interface IMsUsercolumnBService extends IService<MsUsercolumnB> {
/**
* 批量保存用户自定义列数据
*/
boolean batchSave(MsUsercolumnB userColumn);
/**
* 获取用户自定义列数据
*/
List<MsUsercolumnB> getUserColumnData(MsUsercolumnB userColumn);
}

View File

@ -0,0 +1,59 @@
package com.yfd.platform.qgc_sys.cuscolumn.service.impl;
import com.yfd.platform.qgc_sys.cuscolumn.domain.MsUsercolumnB;
import com.yfd.platform.qgc_sys.cuscolumn.mapper.MsUsercolumnBMapper;
import com.yfd.platform.qgc_sys.cuscolumn.service.IMsUsercolumnBService;
import com.yfd.platform.utils.SecurityUtils;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import java.util.Date;
import java.util.List;
@Service
public class MsUsercolumnBServiceImpl
extends ServiceImpl<MsUsercolumnBMapper, MsUsercolumnB>
implements IMsUsercolumnBService {
@Resource
private MsUsercolumnBMapper usercolumnBMapper;
@Override
@Transactional(rollbackFor = Exception.class)
public boolean batchSave(MsUsercolumnB userColumn) {
if (!StringUtils.hasText(userColumn.getCfgId())) {
throw new IllegalArgumentException("模块(cfgId)不能为空");
}
String currentUser = SecurityUtils.getCurrentUsername();
List<MsUsercolumnB> list = userColumn.getList();
if (list != null && !list.isEmpty()) {
for (MsUsercolumnB item : list) {
item.setCfgId(userColumn.getCfgId());
item.setRecordUser(currentUser);
item.setRecordTime(new Date());
// 列的中文名称通过COLUMN_EN和MS_COLUMNCFG_B关联查询不额外存储
item.setColumnName(null);
}
// 先删除旧数据
usercolumnBMapper.deleteUserColumn(currentUser, userColumn.getCfgId());
// 批量保存新数据
return this.saveBatch(list);
}
return false;
}
@Override
public List<MsUsercolumnB> getUserColumnData(MsUsercolumnB userColumn) {
String currentUser = SecurityUtils.getCurrentUsername();
return usercolumnBMapper.getUserColumnList(currentUser, userColumn.getCfgId());
}
}

View File

@ -0,0 +1,82 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yfd.platform.qgc_sys.cuscolumn.mapper.MsUsercolumnBMapper">
<resultMap type="com.yfd.platform.qgc_sys.cuscolumn.domain.MsUsercolumnB" id="MsUsercolumnBMap">
<result property="cfgId" column="CFG_ID" jdbcType="VARCHAR"/>
<result property="columnEn" column="COLUMN_EN" jdbcType="VARCHAR"/>
<result property="columnName" column="COLUMN_NAME" jdbcType="VARCHAR"/>
<result property="defaultConfig" column="DEFAULT_CONFIG" jdbcType="INTEGER"/>
<result property="enable" column="ENABLE" jdbcType="INTEGER"/>
<result property="orderIndex" column="ORDER_INDEX" jdbcType="INTEGER"/>
<result property="recordUser" column="RECORD_USER" jdbcType="VARCHAR"/>
<result property="checked" column="CHECKED" jdbcType="INTEGER"/>
<result property="groupType" column="GROUP_TYPE" jdbcType="VARCHAR"/>
<result property="width" column="WIDTH" jdbcType="INTEGER"/>
</resultMap>
<!-- 删除用户自定义列数据 -->
<delete id="deleteUserColumn">
DELETE FROM MS_USERCOLUMN_B
WHERE CFG_ID = #{cfgId}
<if test="recordUser != null and recordUser != ''">
AND RECORD_USER = #{recordUser}
</if>
</delete>
<!--
查询用户自定义列数据
LEFT JOIN MS_COLUMNCFG_B默认配置和 MS_USERCOLUMN_B用户自定义配置
当用户无自定义配置时,使用默认配置的值
-->
<select id="getUserColumnList" resultMap="MsUsercolumnBMap">
SELECT
mcb.FUNCTION_ID AS CFG_ID,
mcb.COLUMN_EN,
mcb.COLUMN_CFG AS COLUMN_NAME,
CASE WHEN mub.COLUMN_EN IS NULL THEN 1 ELSE 0 END AS DEFAULT_CONFIG,
CASE WHEN mub.ENABLE IS NULL THEN mcb.ENABLE ELSE mub.ENABLE END AS ENABLE,
CASE WHEN mub.ORDER_INDEX IS NULL THEN mcb.ORDER_INDEX ELSE mub.ORDER_INDEX END AS ORDER_INDEX,
mub.RECORD_USER,
CASE WHEN mub.CHECKED IS NULL THEN mcb.DEFAULT_CHECKED ELSE mub.CHECKED END AS CHECKED,
mcb.GROUP_TYPE,
mcb.WIDTH
FROM MS_COLUMNCFG_B mcb
LEFT JOIN MS_USERCOLUMN_B mub
ON mcb.FUNCTION_ID = mub.CFG_ID
AND mub.COLUMN_EN = mcb.COLUMN_EN
AND mub.ENABLE = 1
AND mub.IS_DELETED = 0
<if test="recordUser != null and recordUser != ''">
AND mub.RECORD_USER = #{recordUser}
</if>
WHERE mcb.IS_DELETED = 0
AND mcb.HAS_CHILDREN = 0
<if test="cfgId != null and cfgId != ''">
AND mcb.FUNCTION_ID = #{cfgId}
</if>
ORDER BY mcb.ORDER_INDEX
</select>
<!-- 根据模块ID查询默认列配置 -->
<select id="getUserColumnDefaultList" resultMap="MsUsercolumnBMap">
SELECT
mcb.FUNCTION_ID AS CFG_ID,
mcb.COLUMN_EN,
mcb.COLUMN_CFG AS COLUMN_NAME,
mcb.ENABLE,
mcb.ORDER_INDEX,
mcb.RECORD_USER,
NVL(mcb.DEFAULT_CHECKED, 1) AS CHECKED,
mcb.GROUP_TYPE,
mcb.WIDTH
FROM MS_COLUMNCFG_B mcb
WHERE mcb.ENABLE = 1
AND mcb.HAS_CHILDREN = 0
<if test="cfgId != null and cfgId != ''">
AND mcb.FUNCTION_ID = #{cfgId}
</if>
ORDER BY mcb.ORDER_INDEX
</select>
</mapper>