main-business/src/main/java/com/ruoyi/business/controller/ArchiveController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,52 @@ package com.ruoyi.business.controller; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.business.dto.ArchiveDto; import com.ruoyi.business.entity.Archive; import com.ruoyi.business.service.ArchiveService; import com.ruoyi.common.core.domain.R; import lombok.AllArgsConstructor; import org.springframework.web.bind.annotation.*; /** * <p> * æ¡£æ¡ä¿¡æ¯è¡¨ï¼è®°å½ç³»ç»ä¸å类档æ¡çåºæ¬ä¿¡æ¯ å端æ§å¶å¨ * </p> * * @author ruoyi * @since 2025-06-10 */ @RestController @AllArgsConstructor @RequestMapping("/archive") public class ArchiveController { private ArchiveService archiveService; /** * æ¥è¯¢æ¡£æ¡ä¿¡æ¯è¡¨ */ @GetMapping("/list") public R<IPage<Archive>> treeList(Page page, ArchiveDto archiveDto) { IPage<Archive> list = archiveService.selectArchiveList(page, archiveDto); return R.ok(list); } /** * æ¡£æ¡ä¿¡æ¯è¡¨æ°å¢ä¿®æ¹ */ @PostMapping("/addOrEditArchive") public R addOrEditArchive(@RequestBody ArchiveDto archiveDto) { return R.ok(archiveService.addOrEditArchive(archiveDto)); } /** * æ¡£æ¡ä¿¡æ¯è¡¨å é¤ */ @DeleteMapping("/delArchive") public R remove(@RequestBody Long[] ids) { return R.ok(archiveService.delByIds(ids)); } } main-business/src/main/java/com/ruoyi/business/controller/FileController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,21 @@ package com.ruoyi.business.controller; import org.springframework.web.bind.annotation.RequestMapping; import lombok.AllArgsConstructor; import org.springframework.web.bind.annotation.RestController; /** * <p> * ä¸ä¼ æä»¶çåºæ¬ä¿¡æ¯ å端æ§å¶å¨ * </p> * * @author ruoyi * @since 2025-06-10 */ @RestController @AllArgsConstructor @RequestMapping("/business/file") public class FileController { } main-business/src/main/java/com/ruoyi/business/controller/TreeController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,53 @@ package com.ruoyi.business.controller; import com.ruoyi.business.dto.TreeDto; import com.ruoyi.business.service.TreeService; import com.ruoyi.business.vo.TreeVo; import com.ruoyi.common.core.domain.R; import lombok.AllArgsConstructor; import org.springframework.web.bind.annotation.*; import java.util.List; /** * <p> * æ¡£æ¡ä¿¡æ¯è¡¨ï¼è®°å½ç³»ç»ä¸å类档æ¡çåºæ¬ä¿¡æ¯ å端æ§å¶å¨ * </p> * * @author ruoyi * @since 2025-06-10 */ @RestController @AllArgsConstructor @RequestMapping("/tree") public class TreeController { private TreeService treeService; /** * æ¥è¯¢treeå表 */ @GetMapping("/list") public R<List<TreeVo>> treeList(TreeDto treeDto) { return R.ok(treeService.selectTreeList(treeDto)); } /** * treeå表æ°å¢ä¿®æ¹ */ @PostMapping("/addOrEditTree") public R addOrEditTree(@RequestBody TreeDto treeDto) { return R.ok(treeService.addOrEditProduction(treeDto)); } /** * treeå表å é¤ */ @DeleteMapping("/delTree") public R remove(@RequestBody Long[] ids) { return R.ok(treeService.delByIds(ids)); } } main-business/src/main/java/com/ruoyi/business/entity/Archive.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,45 @@ package com.ruoyi.business.entity; import com.baomidou.mybatisplus.annotation.*; import lombok.Data; import com.ruoyi.common.core.domain.MyBaseEntity; /** * æ¡£æ¡ä¿¡æ¯è¡¨ï¼è®°å½ç³»ç»ä¸å类档æ¡çåºæ¬ä¿¡æ¯ å®ä½ç±» * * @author ruoyi * @date 2025-06-10 */ @Data @TableName("archive") public class Archive extends MyBaseEntity { private static final long serialVersionUID = 1L; /** * 主é®ID */ @TableId(value = "id", type = IdType.AUTO) private Long id; /** * å ³ètree ID */ @TableField(value = "tree_id") private Long treeId; /** * æ¡£æ¡åç§° */ @TableField(value = "name") private String name; /** * æ¡£æ¡ç±»åï¼ä¾å¦ï¼ååãæ¥åãè¯ä»¶ç */ @TableField(value = "type") private String type; /** * æ¡£æ¡ç¶æï¼ä¾å¦ï¼ææãè¿æãä½åº */ @TableField(value = "status") private String status; } main-business/src/main/java/com/ruoyi/business/entity/File.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,59 @@ package com.ruoyi.business.entity; import com.baomidou.mybatisplus.annotation.*; import lombok.Data; import com.ruoyi.common.core.domain.MyBaseEntity; /** * ä¸ä¼ æä»¶çåºæ¬ä¿¡æ¯ å®ä½ç±» * * @author ruoyi * @date 2025-06-10 */ @Data @TableName("file") public class File extends MyBaseEntity { private static final long serialVersionUID = 1L; /** * 主é®ID */ @TableId(value = "id", type = IdType.AUTO) private Long id; /** * å ³èçæ¡£æ¡IDï¼å¤é®å¼ç¨ archive.id */ @TableField(value = "archive_id") private Long archiveId; /** * åå§æä»¶åï¼ç¨æ·ä¸ä¼ æ¶çåç§°ï¼ */ @TableField(value = "original_name") private String originalName; /** * é¢è§å°å */ @TableField(value = "preview_url") private String previewUrl; /** * ç³»ç»åå¨çå¯ä¸æä»¶å */ @TableField(value = "file_name") private String fileName; /** * æä»¶å¨æå¡å¨ä¸çåå¨è·¯å¾æè®¿é®URL */ @TableField(value = "file_path") private String filePath; /** * æä»¶MIMEç±»åï¼ä¾å¦ image/pngãapplication/pdf */ @TableField(value = "file_type") private String fileType; /** * æä»¶å¤§å°ï¼åä½ä¸ºåè */ @TableField(value = "file_size") private String fileSize; } main-business/src/main/java/com/ruoyi/business/entity/Tree.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,34 @@ package com.ruoyi.business.entity; import com.baomidou.mybatisplus.annotation.*; import lombok.Data; import com.ruoyi.common.core.domain.MyBaseEntity; /** * æ¡£æ¡ä¿¡æ¯è¡¨ï¼è®°å½ç³»ç»ä¸å类档æ¡çåºæ¬ä¿¡æ¯ å®ä½ç±» * * @author ruoyi * @date 2025-06-10 */ @Data @TableName("tree") public class Tree extends MyBaseEntity { private static final long serialVersionUID = 1L; /** * 主é®ID */ @TableId(value = "id", type = IdType.AUTO) private Long id; /** * */ @TableField(value = "name") private String name; /** * */ @TableField(value = "parent_id") private Long parentId; } main-business/src/main/java/com/ruoyi/business/mapper/ArchiveMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,18 @@ package com.ruoyi.business.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.business.entity.Archive; import org.apache.ibatis.annotations.Mapper; /** * <p> * æ¡£æ¡ä¿¡æ¯è¡¨ï¼è®°å½ç³»ç»ä¸å类档æ¡çåºæ¬ä¿¡æ¯ Mapper æ¥å£ * </p> * * @author ruoyi * @since 2025-06-10 */ @Mapper public interface ArchiveMapper extends BaseMapper<Archive> { } main-business/src/main/java/com/ruoyi/business/mapper/FileMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,18 @@ package com.ruoyi.business.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.business.entity.File; import org.apache.ibatis.annotations.Mapper; /** * <p> * ä¸ä¼ æä»¶çåºæ¬ä¿¡æ¯ Mapper æ¥å£ * </p> * * @author ruoyi * @since 2025-06-10 */ @Mapper public interface FileMapper extends BaseMapper<File> { } main-business/src/main/java/com/ruoyi/business/mapper/TreeMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,18 @@ package com.ruoyi.business.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.business.entity.Tree; import org.apache.ibatis.annotations.Mapper; /** * <p> * æ¡£æ¡ä¿¡æ¯è¡¨ï¼è®°å½ç³»ç»ä¸å类档æ¡çåºæ¬ä¿¡æ¯ Mapper æ¥å£ * </p> * * @author ruoyi * @since 2025-06-10 */ @Mapper public interface TreeMapper extends BaseMapper<Tree> { } main-business/src/main/java/com/ruoyi/business/service/ArchiveService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,24 @@ package com.ruoyi.business.service; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.business.dto.ArchiveDto; import com.ruoyi.business.entity.Archive; import com.baomidou.mybatisplus.extension.service.IService; /** * <p> * æ¡£æ¡ä¿¡æ¯è¡¨ï¼è®°å½ç³»ç»ä¸å类档æ¡çåºæ¬ä¿¡æ¯ æå¡ç±» * </p> * * @author ruoyi * @since 2025-06-10 */ public interface ArchiveService extends IService<Archive> { IPage<Archive> selectArchiveList(Page page, ArchiveDto archiveDto); int addOrEditArchive(ArchiveDto archiveDto); int delByIds(Long[] ids); } main-business/src/main/java/com/ruoyi/business/service/FileService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,16 @@ package com.ruoyi.business.service; import com.ruoyi.business.entity.File; import com.baomidou.mybatisplus.extension.service.IService; /** * <p> * ä¸ä¼ æä»¶çåºæ¬ä¿¡æ¯ æå¡ç±» * </p> * * @author ruoyi * @since 2025-06-10 */ public interface FileService extends IService<File> { } main-business/src/main/java/com/ruoyi/business/service/TreeService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,25 @@ package com.ruoyi.business.service; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.business.dto.TreeDto; import com.ruoyi.business.entity.Tree; import com.ruoyi.business.vo.TreeVo; import java.util.List; /** * <p> * æ¡£æ¡ä¿¡æ¯è¡¨ï¼è®°å½ç³»ç»ä¸å类档æ¡çåºæ¬ä¿¡æ¯ æå¡ç±» * </p> * * @author ruoyi * @since 2025-06-10 */ public interface TreeService extends IService<Tree> { List<TreeVo> selectTreeList(TreeDto treeDto); int addOrEditProduction(TreeDto treeDto); int delByIds(Long[] ids); } main-business/src/main/java/com/ruoyi/business/service/impl/ArchiveServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,64 @@ package com.ruoyi.business.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.business.dto.ArchiveDto; import com.ruoyi.business.entity.Archive; import com.ruoyi.business.mapper.ArchiveMapper; import com.ruoyi.business.service.ArchiveService; import com.ruoyi.common.utils.bean.BeanUtils; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import java.util.Objects; /** * <p> * æ¡£æ¡ä¿¡æ¯è¡¨ï¼è®°å½ç³»ç»ä¸å类档æ¡çåºæ¬ä¿¡æ¯ æå¡å®ç°ç±» * </p> * * @author ruoyi * @since 2025-06-10 */ @Service @RequiredArgsConstructor public class ArchiveServiceImpl extends ServiceImpl<ArchiveMapper, Archive> implements ArchiveService { private final ArchiveMapper archiveMapper; @Override public IPage<Archive> selectArchiveList(Page page, ArchiveDto archiveDto) { LambdaQueryWrapper<Archive> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.orderByDesc(Archive::getCreateTime); return archiveMapper.selectPage(page, queryWrapper); } @Override public int addOrEditArchive(ArchiveDto archiveDto) { Archive archive = new Archive(); BeanUtils.copyProperties(archiveDto, archive); if (Objects.isNull(archiveDto.getId())) { return archiveMapper.insert(archive); } else { return archiveMapper.updateById(archive); } } @Override public int delByIds(Long[] ids) { // æ£æ¥åæ° if (ids == null || ids.length == 0) { return 0; } // æé æ´æ°æ¡ä»¶ UpdateWrapper<Archive> updateWrapper = new UpdateWrapper<>(); updateWrapper.in("id", ids) .set("deleted", 1); // 设置 deleted 为 1 表示已å é¤ // æ§è¡æ¹éé»è¾å é¤ return archiveMapper.update(null, updateWrapper); } } main-business/src/main/java/com/ruoyi/business/service/impl/FileServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,22 @@ package com.ruoyi.business.service.impl; import com.ruoyi.business.entity.File; import com.ruoyi.business.mapper.FileMapper; import com.ruoyi.business.service.FileService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; import lombok.RequiredArgsConstructor; /** * <p> * ä¸ä¼ æä»¶çåºæ¬ä¿¡æ¯ æå¡å®ç°ç±» * </p> * * @author ruoyi * @since 2025-06-10 */ @Service @RequiredArgsConstructor public class FileServiceImpl extends ServiceImpl<FileMapper, File> implements FileService { } main-business/src/main/java/com/ruoyi/business/service/impl/TreeServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,120 @@ package com.ruoyi.business.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.business.dto.TreeDto; import com.ruoyi.business.entity.Tree; import com.ruoyi.business.mapper.TreeMapper; import com.ruoyi.business.service.TreeService; import com.ruoyi.business.vo.TreeVo; import com.ruoyi.common.utils.bean.BeanUtils; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; /** * <p> * æ¡£æ¡ä¿¡æ¯è¡¨ï¼è®°å½ç³»ç»ä¸å类档æ¡çåºæ¬ä¿¡æ¯ æå¡å®ç°ç±» * </p> * * @author ruoyi * @since 2025-06-10 */ @Service @RequiredArgsConstructor public class TreeServiceImpl extends ServiceImpl<TreeMapper, Tree> implements TreeService { private final TreeMapper treeMapper; @Override public List<TreeVo> selectTreeList(TreeDto treeDto) { // æ¥è¯¢æ ¹èç¹ï¼parentId 为 nullï¼ LambdaQueryWrapper<Tree> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.isNull(Tree::getParentId); // 妿æäº§ååç§°æ¡ä»¶ï¼æ·»å å°æ¥è¯¢ä¸ if (treeDto.getName() != null && !treeDto.getName().isEmpty()) { queryWrapper.like(Tree::getName, treeDto.getName()); } // æ¥è¯¢æ ¹èç¹å表 List<Tree> rootTrees = treeMapper.selectList(queryWrapper); // 转æ¢ä¸ºæ èç¹å¹¶éå½æå»ºåæ List<TreeVo> tree = new ArrayList<>(); for (Tree tr : rootTrees) { TreeVo node = convertToTreeDto(tr); node.setChildren(buildChildrenNodes(tr.getId())); tree.add(node); } return tree; } private TreeVo convertToTreeDto(Tree tree) { TreeVo dto = new TreeVo(); BeanUtils.copyProperties(tree, dto); dto.setLabel(tree.getName()); dto.setChildren(new ArrayList<>()); return dto; } // éå½æå»ºåèç¹ private List<TreeVo> buildChildrenNodes(Long parentId) { // æ¥è¯¢å½åç¶èç¹çåèç¹ LambdaQueryWrapper<Tree> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(Tree::getParentId, parentId); List<Tree> childProducts = treeMapper.selectList(queryWrapper); // 转æ¢åèç¹å¹¶éå½æå»ºå®ä»¬çåæ List<TreeVo> children = new ArrayList<>(); for (Tree child : childProducts) { TreeVo childNode = convertToTreeDto(child); childNode.setChildren(buildChildrenNodes(child.getId())); children.add(childNode); } return children; } @Override public int addOrEditProduction(TreeDto treeDto) { if (treeDto.getId() == null) { // æ°å¢treeé»è¾ if (treeDto.getParentId() == null) { // è¥æªæå®ç¶èç¹ï¼é»è®¤ä¸ºæ ¹èç¹ï¼parentId 设为 nullï¼ treeDto.setParentId(null); } else { // æ£æ¥ç¶èç¹æ¯å¦åå¨ï¼å¯éï¼æ ¹æ®ä¸å¡éæ±ï¼ Tree parent = treeMapper.selectById(treeDto.getParentId()); if (parent == null) { throw new IllegalArgumentException("ç¶èç¹ä¸åå¨ï¼æ æ³æ·»å åtree"); } } return treeMapper.insert(treeDto); } else { // ç¼è¾treeé»è¾ Tree existingProduct = treeMapper.selectById(treeDto.getId()); if (existingProduct == null) { throw new IllegalArgumentException("è¦ç¼è¾çtreeä¸åå¨"); } return treeMapper.updateById(treeDto); } } @Override public int delByIds(Long[] ids) { // æ£æ¥åæ° if (ids == null || ids.length == 0) { return 0; } // æé æ´æ°æ¡ä»¶ UpdateWrapper<Tree> updateWrapper = new UpdateWrapper<>(); updateWrapper.in("id", ids) .set("deleted", 1); // 设置 deleted 为 1 表示已å é¤ // æ§è¡æ¹éé»è¾å é¤ return treeMapper.update(null, updateWrapper); } } main-business/src/main/resources/mapper/ArchiveMapper.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,28 @@ <?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.ruoyi.business.mapper.ArchiveMapper"> <!-- éç¨æ¥è¯¢æ å°ç»æ --> <resultMap id="BaseResultMap" type="com.ruoyi.business.entity.Archive"> <id column="id" property="id" /> <result column="deleted" property="deleted" /> <result column="create_by" property="createBy" /> <result column="create_time" property="createTime" /> <result column="update_by" property="updateBy" /> <result column="update_time" property="updateTime" /> <result column="name" property="name" /> <result column="type" property="type" /> <result column="status" property="status" /> </resultMap> <!-- éç¨æ¥è¯¢ç»æå --> <sql id="Base_Column_List"> deleted, create_by, create_time, update_by, update_time, id, name, type, status </sql> </mapper> main-business/src/main/resources/mapper/FileMapper.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,32 @@ <?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.ruoyi.business.mapper.FileMapper"> <!-- éç¨æ¥è¯¢æ å°ç»æ --> <resultMap id="BaseResultMap" type="com.ruoyi.business.entity.File"> <id column="id" property="id" /> <result column="create_time" property="createTime" /> <result column="update_time" property="updateTime" /> <result column="create_by" property="createBy" /> <result column="update_by" property="updateBy" /> <result column="deleted" property="deleted" /> <result column="archive_id" property="archiveId" /> <result column="original_name" property="originalName" /> <result column="preview_url" property="previewUrl" /> <result column="file_name" property="fileName" /> <result column="file_path" property="filePath" /> <result column="file_type" property="fileType" /> <result column="file_size" property="fileSize" /> </resultMap> <!-- éç¨æ¥è¯¢ç»æå --> <sql id="Base_Column_List"> create_time, update_time, create_by, update_by, deleted, id, archive_id, original_name, preview_url, file_name, file_path, file_type, file_size </sql> </mapper> main-business/src/main/resources/mapper/TreeMapper.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,27 @@ <?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.ruoyi.business.mapper.TreeMapper"> <!-- éç¨æ¥è¯¢æ å°ç»æ --> <resultMap id="BaseResultMap" type="com.ruoyi.business.entity.Tree"> <id column="id" property="id" /> <result column="deleted" property="deleted" /> <result column="create_by" property="createBy" /> <result column="create_time" property="createTime" /> <result column="update_by" property="updateBy" /> <result column="update_time" property="updateTime" /> <result column="name" property="name" /> <result column="parent_id" property="parentId" /> </resultMap> <!-- éç¨æ¥è¯¢ç»æå --> <sql id="Base_Column_List"> deleted, create_by, create_time, update_by, update_time, id, name, parent_id </sql> </mapper>