档案管理

This commit is contained in:
liang.chao 2025-09-11 18:36:27 +08:00
parent e422008325
commit d8423d7a33
11 changed files with 501 additions and 19 deletions

View File

@ -63,7 +63,7 @@ public class ArchiveController extends BaseController {
@PostMapping
@SysLog(title = "新增档案目录", module = "档案管理->档案目录管理", businessType = OperaType.INSERT, details = "新增档案目录", logType = 1)
@RequiresPermissions("archive:catalogue:add")
public R<List<ArchivalCatalogueDto>> saveArchivalCatalogue(@RequestBody ArchivalCatalogueDto dto) {
public R saveArchivalCatalogue(@RequestBody ArchivalCatalogueDto dto) {
try {
if (dto.getParentId() == null) {
return R.fail("父级有误");

View File

@ -0,0 +1,110 @@
package com.bonus.web.controller.archive;
import com.bonus.common.annotation.RequiresPermissions;
import com.bonus.common.annotation.SysLog;
import com.bonus.common.core.controller.BaseController;
import com.bonus.common.core.domain.R;
import com.bonus.common.core.page.TableDataInfo;
import com.bonus.common.enums.OperaType;
import com.bonus.web.domain.DaKyProFilesContentsDto;
import com.bonus.web.service.FileManageService;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;
/**
* @Authorliang.chao
* @Date2025/9/11 - 13:29
*/
@RestController
@RequestMapping("/fileManage")
@Slf4j
public class FileManagementController extends BaseController {
@Autowired
private FileManageService fileManageService;
@ApiOperation(value = "档案管理")
@GetMapping("getFileManageTree")
@SysLog(title = "档案管理列表", module = "档案管理->档案左侧树", businessType = OperaType.QUERY, details = "档案管理列表", logType = 1)
@RequiresPermissions("file:manage:tree")
public R<List<DaKyProFilesContentsDto>> getFileManageTree(DaKyProFilesContentsDto dto) {
try {
List<DaKyProFilesContentsDto> list = fileManageService.list(dto);
return R.ok(list);
} catch (Exception e) {
log.error(e.toString(), e);
return R.fail("请求出错了");
}
}
@ApiOperation(value = "第四级档案信息")
@GetMapping("getFileManage")
@SysLog(title = "第四级档案信息", module = "档案管理->档案右侧列表", businessType = OperaType.QUERY, details = "第四级档案信息", logType = 1)
@RequiresPermissions("file:manage:list")
public TableDataInfo getFileManage(DaKyProFilesContentsDto dto) {
try {
startPage();
List<DaKyProFilesContentsDto> list = fileManageService.FileManage(dto);
return getDataTable(list);
} catch (Exception e) {
log.error(e.toString(), e);
return getDataTable(new ArrayList<>());
}
}
@ApiOperation(value = "新增档案")
@PostMapping
@SysLog(title = "新增档案目录", module = "档案管理->档案目录管理", businessType = OperaType.INSERT, details = "新增档案目录", logType = 1)
@RequiresPermissions("file:manage:add")
public R saveArchivalCatalogue(@RequestBody DaKyProFilesContentsDto dto) {
try {
if (dto.getParentId() == null) {
return R.fail("父级有误");
}
if (dto.getLevel() == null) {
return R.fail("级别有误");
}
return fileManageService.saveFileManage(dto);
} catch (Exception e) {
log.error(e.toString(), e);
return R.fail("请求出错了");
}
}
@ApiOperation(value = "修改档案")
@PostMapping
@SysLog(title = "修改档案", module = "档案管理->档案目录管理", businessType = OperaType.UPDATE, details = "修改档案", logType = 1)
@RequiresPermissions("file:manage:update")
public R updateFileManage(@RequestBody DaKyProFilesContentsDto dto) {
try {
return fileManageService.updateFileManage(dto);
} catch (Exception e) {
log.error(e.toString(), e);
return R.fail("请求出错了");
}
}
@ApiOperation(value = "删除档案")
@PostMapping
@SysLog(title = "删除档案", module = "档案管理->档案目录管理", businessType = OperaType.DELETE, details = "删除档案", logType = 1)
@RequiresPermissions("file:manage:del")
public R delFileManage(@RequestBody DaKyProFilesContentsDto dto) {
try {
Integer i = fileManageService.delFileManage(dto);
if (i > 0) {
return R.ok();
} else {
return R.fail("删除失败");
}
} catch (Exception e) {
log.error(e.toString(), e);
return R.fail("请求出错了");
}
}
}

View File

@ -1,6 +1,7 @@
package com.bonus.web.controller.tool;
import com.bonus.web.domain.ArchivalCatalogueDto;
import com.bonus.web.domain.DaKyProFilesContentsDto;
import java.util.*;
import java.util.stream.Collectors;
@ -46,4 +47,37 @@ public class TreeBuilder {
return roots;
}
public static List<DaKyProFilesContentsDto> buildTreeDaKyProFilesContents(List<DaKyProFilesContentsDto> list) {
// 过滤已删除的数据del_flag = '0' 表示已删除
List<DaKyProFilesContentsDto> validList = list.stream()
.filter(item -> "1".equals(item.getDelFlag()))
.collect(Collectors.toList());
// 使用 Map 提升查找效率
Map<Integer, DaKyProFilesContentsDto> map = new HashMap<>();
List<DaKyProFilesContentsDto> roots = new ArrayList<>();
// 第一步将所有节点放入 map
for (DaKyProFilesContentsDto item : validList) {
map.put(item.getId(), item);
}
// 第二步构建父子关系
for (DaKyProFilesContentsDto item : validList) {
Integer parentId = item.getParentId();
// 如果 parent_id null则为根节点
if (parentId == null) {
roots.add(item);
} else {
DaKyProFilesContentsDto parent = map.get(parentId);
if (parent != null) {
parent.getChildren().add(item);
}
}
}
return roots;
}
}

View File

@ -2,16 +2,19 @@ package com.bonus.web.domain;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
/**
* @Authorliang.chao
* @Date2025/9/11 - 11:05
*/
@Data
public class DaKyProFilesContents {
public class DaKyProFilesContentsDto {
/**
* id
*/
private String id;
private Integer id;
/**
* 项目id
@ -26,7 +29,7 @@ public class DaKyProFilesContents {
/**
* 父节点id
*/
private String parentId;
private Integer parentId;
/**
* 层级
@ -92,14 +95,40 @@ public class DaKyProFilesContents {
* 修改人ID
*/
private Long updateUserId;
/**
* 业务id
*/
private String businessId;
/**
* 修改人姓名
*/
private String updateUserName;
/**
* 文件地址
*/
private String filePath;
/**
* 文件名称
*/
private String fileName;
/**
* 文件类型
*/
private String fileType;
/**
* 资源类型
*/
private String sourceType;
/**
* 文件源文件名
*/
private String sourceFileName;
/**
* 是否删除 0.删除 1.未删除
*/
private String delFlag;
private List<DaKyProFilesContentsDto> children = new ArrayList<>();
}

View File

@ -0,0 +1,31 @@
package com.bonus.web.mapper;
import com.bonus.web.domain.DaKyProFilesContentsDto;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/**
* @Authorliang.chao
* @Date2025/9/11 - 13:39
*/
@Mapper
public interface FileManageMapper {
List<DaKyProFilesContentsDto> list(DaKyProFilesContentsDto daKyProFilesContentsDto);
List<DaKyProFilesContentsDto> FileManage(DaKyProFilesContentsDto dto);
Integer saveFileManage(DaKyProFilesContentsDto dto);
Integer saveFileSource(DaKyProFilesContentsDto dto);
Integer updateFileManage(DaKyProFilesContentsDto dto);
Integer updateFileSource(DaKyProFilesContentsDto dto);
Integer delFileSource(DaKyProFilesContentsDto dto);
Integer delFileManage(DaKyProFilesContentsDto dto);
Integer selectFileManage(DaKyProFilesContentsDto dto);
}

View File

@ -1,7 +1,7 @@
package com.bonus.web.mapper;
import com.bonus.web.domain.ArchivalCatalogueDto;
import com.bonus.web.domain.DaKyProFilesContents;
import com.bonus.web.domain.DaKyProFilesContentsDto;
import com.bonus.web.domain.ProjectDto;
import org.apache.ibatis.annotations.Mapper;
@ -19,5 +19,5 @@ public interface ProjectMapper {
Integer updateContentsName(ProjectDto projectDto);
Integer insertDakyProFilesContents(DaKyProFilesContents dakyProFilesContents);
Integer insertDakyProFilesContents(DaKyProFilesContentsDto dakyProFilesContentsDto);
}

View File

@ -0,0 +1,22 @@
package com.bonus.web.service;
import com.bonus.common.core.domain.R;
import com.bonus.web.domain.DaKyProFilesContentsDto;
import java.util.List;
/**
* @Authorliang.chao
* @Date2025/9/11 - 13:32
*/
public interface FileManageService {
List<DaKyProFilesContentsDto> list(DaKyProFilesContentsDto daKyProFilesContentsDto);
List<DaKyProFilesContentsDto> FileManage(DaKyProFilesContentsDto dto);
R saveFileManage(DaKyProFilesContentsDto dto);
R updateFileManage(DaKyProFilesContentsDto dto);
Integer delFileManage(DaKyProFilesContentsDto dto);
}

View File

@ -0,0 +1,73 @@
package com.bonus.web.service.impl;
import com.bonus.common.core.domain.R;
import com.bonus.web.controller.tool.TreeBuilder;
import com.bonus.web.domain.DaKyProFilesContentsDto;
import com.bonus.web.mapper.FileManageMapper;
import com.bonus.web.service.FileManageService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import static com.bonus.common.utils.SecurityUtils.getLoginUser;
/**
* @Authorliang.chao
* @Date2025/9/11 - 13:33
*/
@Service
public class FileManageServiceImpl implements FileManageService {
@Autowired
private FileManageMapper fileManageMapper;
@Override
public List<DaKyProFilesContentsDto> list(DaKyProFilesContentsDto daKyProFilesContentsDto) {
List<DaKyProFilesContentsDto> list = fileManageMapper.list(daKyProFilesContentsDto);
// 构建树
List<DaKyProFilesContentsDto> tree = TreeBuilder.buildTreeDaKyProFilesContents(list);
return tree;
}
@Override
public List<DaKyProFilesContentsDto> FileManage(DaKyProFilesContentsDto dto) {
return fileManageMapper.FileManage(dto);
}
@Override
public R saveFileManage(DaKyProFilesContentsDto dto) {
dto.setCreateUserId(getLoginUser().getUserId());
dto.setCreateUserName(getLoginUser().getUsername());
// 查询档案名称是否重复
Integer i = fileManageMapper.selectFileManage(dto);
if (i > 0) {
return R.fail("档案名称重复");
}
if (StringUtils.isNotBlank(dto.getFilePath())) {
fileManageMapper.saveFileSource(dto);
}
return R.ok(fileManageMapper.saveFileManage(dto));
}
@Override
public R updateFileManage(DaKyProFilesContentsDto dto) {
dto.setUpdateUserId(getLoginUser().getUserId());
dto.setUpdateUserName(getLoginUser().getUsername());
Integer i = fileManageMapper.selectFileManage(dto);
if (i > 0) {
return R.fail("档案名称重复");
}
fileManageMapper.updateFileSource(dto);
if (StringUtils.isBlank(dto.getFilePath())) {
dto.setId(null);
}
return R.ok(fileManageMapper.updateFileManage(dto));
}
@Override
public Integer delFileManage(DaKyProFilesContentsDto dto) {
fileManageMapper.delFileSource(dto);
return fileManageMapper.delFileManage(dto);
}
}

View File

@ -2,7 +2,7 @@ package com.bonus.web.service.impl;
import com.bonus.common.core.domain.AjaxResult;
import com.bonus.web.domain.ArchivalCatalogueDto;
import com.bonus.web.domain.DaKyProFilesContents;
import com.bonus.web.domain.DaKyProFilesContentsDto;
import com.bonus.web.domain.ProjectDto;
import com.bonus.web.mapper.ProjectMapper;
import com.bonus.web.service.ProjectService;
@ -41,14 +41,14 @@ public class ProjectServiceImpl implements ProjectService {
Integer num = projectMapper.updateContentsName(projectDto);
if (num > 0) {
// 档案管理中新增一条目录
DaKyProFilesContents dakyProFilesContents = new DaKyProFilesContents();
dakyProFilesContents.setProId(projectDto.getId());
dakyProFilesContents.setContentName(projectDto.getContentsName());
dakyProFilesContents.setLevel("1");
dakyProFilesContents.setSort(0L);
dakyProFilesContents.setCreateUserId(getLoginUser().getUserId());
dakyProFilesContents.setCreateUserName(getLoginUser().getUsername());
projectMapper.insertDakyProFilesContents(dakyProFilesContents);
DaKyProFilesContentsDto dakyProFilesContentsDto = new DaKyProFilesContentsDto();
dakyProFilesContentsDto.setProId(projectDto.getId());
dakyProFilesContentsDto.setContentName(projectDto.getContentsName());
dakyProFilesContentsDto.setLevel("1");
dakyProFilesContentsDto.setSort(0L);
dakyProFilesContentsDto.setCreateUserId(getLoginUser().getUserId());
dakyProFilesContentsDto.setCreateUserName(getLoginUser().getUsername());
projectMapper.insertDakyProFilesContents(dakyProFilesContentsDto);
return AjaxResult.success("配置成功");
} else {
return AjaxResult.error("配置失败");

View File

@ -0,0 +1,170 @@
<?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.bonus.web.mapper.FileManageMapper">
<insert id="saveFileManage">
INSERT INTO da_ky_pro_files_contents
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="id != null and id != ''">id,</if>
<if test="proId != null and proId != ''">pro_id,</if>
<if test="contentName != null and contentName != ''">content_name,</if>
<if test="parentId != null and parentId != ''">parent_id,</if>
<if test="level != null and level != ''">`level`,</if>
<if test="sort != null">sort,</if>
<if test="markCode != null and markCode != ''">mark_code,</if>
<if test="term != null and term != ''">term,</if>
<if test="unitName != null and unitName != ''">unit_name,</if>
<if test="dataSource != null and dataSource != ''">data_source,</if>
<if test="isUnique != null and isUnique != ''">is_unique,</if>
<if test="integrityStatus != null and integrityStatus != ''">integrity_status,</if>
<if test="createTime != null">create_time,</if>
<if test="updateTime != null">update_time,</if>
<if test="createUserId != null">create_user_id,</if>
<if test="createUserName != null and createUserName != ''">create_user_name,</if>
<if test="updateUserId != null">update_user_id,</if>
<if test="updateUserName != null and updateUserName != ''">update_user_name,</if>
</trim>
VALUES
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="id != null and id != ''">#{id},</if>
<if test="proId != null and proId != ''">#{proId},</if>
<if test="contentName != null and contentName != ''">#{contentName},</if>
<if test="parentId != null and parentId != ''">#{parentId},</if>
<if test="level != null and level != ''">#{level},</if>
<if test="sort != null">#{sort},</if>
<if test="markCode != null and markCode != ''">#{markCode},</if>
<if test="term != null and term != ''">#{term},</if>
<if test="unitName != null and unitName != ''">#{unitName},</if>
<if test="dataSource != null and dataSource != ''">#{dataSource},</if>
<if test="isUnique != null and isUnique != ''">#{isUnique},</if>
<if test="integrityStatus != null and integrityStatus != ''">#{integrityStatus},</if>
<if test="createTime != null">#{createTime},</if>
<if test="updateTime != null">#{updateTime},</if>
<if test="createUserId != null">#{createUserId},</if>
<if test="createUserName != null and createUserName != ''">#{createUserName},</if>
<if test="updateUserId != null">#{updateUserId},</if>
<if test="updateUserName != null and updateUserName != ''">#{updateUserName},</if>
</trim>
</insert>
<insert id="saveFileSource" useGeneratedKeys="true" keyProperty="id">
INSERT INTO da_ky_sys_file_source
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="businessId != null and businessId != ''">business_id,</if>
<if test="filePath != null and filePath != ''">file_path,</if>
<if test="sourceFileName != null and sourceFileName != ''">source_file_name,</if>
<if test="fileName != null and fileName != ''">file_name,</if>
<if test="fileType != null and fileType != ''">file_type,</if>
<if test="sourceType != null and sourceType != ''">source_type,</if>
<if test="createUserId != null">create_user_id,</if>
<if test="createUserName != null and createUserName != ''">create_user_name,</if>
createTime
</trim>
VALUES
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="businessId != null and businessId != ''">#{businessId},</if>
<if test="filePath != null and filePath != ''">#{filePath},</if>
<if test="sourceFileName != null and sourceFileName != ''">#{sourceFileName},</if>
<if test="fileName != null and fileName != ''">#{fileName},</if>
<if test="fileType != null and fileType != ''">#{fileType},</if>
<if test="sourceType != null and sourceType != ''">#{sourceType},</if>
<if test="createUserId != null">#{createUserId},</if>
<if test="createUserName != null and createUserName != ''">#{createUserName},</if>
now()
</trim>
</insert>
<update id="updateFileManage">
UPDATE da_ky_pro_files_contents
<set>
id = #{id},
<if test="contentName != null and contentName != ''">content_name = #{contentName},</if>
<if test="parentId != null and parentId != ''">parent_id = #{parentId},</if>
<if test="level != null and level != ''">`level` = #{level},</if>
<if test="sort != null">sort = #{sort},</if>
<if test="markCode != null and markCode != ''">mark_code = #{markCode},</if>
<if test="term != null and term != ''">term = #{term},</if>
<if test="unitName != null and unitName != ''">unit_name = #{unitName},</if>
<if test="dataSource != null and dataSource != ''">data_source = #{dataSource},</if>
<if test="isUnique != null and isUnique != ''">is_unique = #{isUnique},</if>
<if test="integrityStatus != null and integrityStatus != ''">integrity_status = #{integrityStatus},</if>
<if test="updateUserId != null">update_user_id = #{updateUserId},</if>
<if test="updateUserName != null and updateUserName != ''">update_user_name = #{updateUserName},</if>
update_time = now()
</set>
WHERE content_name = #{contentName}
</update>
<update id="updateFileSource">
UPDATE da_ky_sys_file_source
set
file_path = #{filePath},
source_file_name = #{sourceFileName},
file_name = #{fileName},
file_type = #{fileType},
source_type = #{sourceType},
update_user_id = #{updateUserId},
update_user_name = #{updateUserName},
update_time = now()
WHERE id = #{id}
</update>
<delete id="delFileSource">
DELETE FROM da_ky_sys_file_source
WHERE id = #{id}
</delete>
<delete id="delFileManage">
DELETE FROM da_ky_pro_files_contents
WHERE id = #{id}
</delete>
<select id="list" resultType="com.bonus.web.domain.DaKyProFilesContentsDto">
SELECT
dkp.*
FROM
da_ky_pro_files_contents dkp
WHERE
dkp.del_flag = '1' and dkp.pro_id = #{proId} and level in (0,1,2,3)
<if test="keyWord != null and keyWord != ''">
and dkp.content_name like concat('%', #{keyWord}, '%')
</if>
ORDER BY
dkp.`level`, dkp.sort
</select>
<select id="FileManage" resultType="com.bonus.web.domain.DaKyProFilesContentsDto">
SELECT
dkpfc.id AS id,
dkpfc.pro_id AS proId,
dkpfc.content_name AS contentName,
dkpfc.parent_id AS parentId,
dkpfc.level AS level,
dkpfc.sort AS sort,
dkpfc.mark_code AS markCode,
dkpfc.term AS term,
dkpfc.unit_name AS unitName,
dkpfc.data_source AS dataSource,
dkpfc.is_unique AS isUnique,
dkpfc.integrity_status AS integrityStatus,
dkfs.create_time AS createTime,
dkfs.source_file_name AS sourceFileName,
dkfs.create_user_name AS createUserName
FROM
da_ky_pro_files_contents dkpfc
left join da_ky_sys_file_source dkfs on dkpfc.id = dkfs.id
WHERE
dkfs.business_id = #{businessId} and
dkpfc.del_flag = '1' and dkpfc.parent_id = #{parentId} and dkpfc.level = 4
<if test="contentName != null and contentName != ''">
and dkpfc.content_name like concat('%', #{contentName}, '%')
</if>
order by dkpfc.create_time desc
</select>
<select id="selectFileManage" resultType="java.lang.Integer">
SELECT
count(*)
FROM
da_ky_pro_files_contents dkp
WHERE
dkp.del_flag = '1' and level = #{level}
<if test="id != null">
and id != #{id}
</if>
</select>
</mapper>

View File

@ -52,7 +52,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
id = #{id}
</update>
<select id="list" resultType="com.bonus.web.domain.ProjectDto">
<select id="list" resultType="com.bonus.web.domain.ProjectDto">
SELECT
dkp.*,
dksdd.dict_label proTypeName,
@ -60,11 +60,24 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
dksdd3.dict_label proStatusName
FROM
da_ky_project dkp
LEFT JOIN da_ky_sys_dict_data dksdd ON dkp.pro_type = dksdd.dict_code
LEFT JOIN da_ky_sys_dict_data dksdd2 ON dkp.voltage_level = dksdd2.dict_code
LEFT JOIN da_ky_sys_dict_data dksdd3 ON dkp.pro_status = dksdd3.dict_code
LEFT JOIN da_ky_sys_dict_data dksdd ON dkp.pro_type = dksdd.dict_value and dksdd.dict_type = 'pro_type'
LEFT JOIN da_ky_sys_dict_data dksdd2 ON dkp.voltage_level = dksdd2.dict_value and dksdd2.dict_type = 'voltage_level'
LEFT JOIN da_ky_sys_dict_data dksdd3 ON dkp.pro_status = dksdd3.dict_value and dksdd3.dict_type = 'pro_status'
WHERE
dkp.del_flag = '1'
<if test="proName != null and proName != ''">
AND dkp.pro_name LIKE CONCAT('%',#{proName},'%')
</if>
<if test="proType != null and proType != ''">
AND dkp.pro_type = #{proType}
</if>
<if test="voltageLevel != null and voltageLevel != ''">
AND dkp.voltage_level = #{voltageLevel}
</if>
<if test="proStatus != null and proStatus != ''">
AND dkp.pro_status = #{proStatus}
</if>
</select>
<select id="getFileCatalogSelect" resultType="com.bonus.web.domain.ArchivalCatalogueDto">
SELECT