完成工程操作相关接口

This commit is contained in:
chenxudong 2025-06-18 14:54:07 +08:00
parent 3722dfb4f0
commit c5a44bf01c
8 changed files with 138 additions and 17 deletions

View File

@ -3,6 +3,12 @@ package com.electromagnetic.industry.software.manage.controller;
import com.electromagnetic.industry.software.common.annotations.UserOperation;
import com.electromagnetic.industry.software.common.enums.UserOperationModuleEnum;
import com.electromagnetic.industry.software.common.resp.ElectromagneticResult;
import com.electromagnetic.industry.software.common.util.ElectromagneticResultUtil;
import com.electromagnetic.industry.software.manage.service.ImportPrjService;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.core.io.InputStreamResource;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@ -11,18 +17,33 @@ import org.springframework.web.multipart.MultipartFile;
@RestController
public class ImportPrjController {
/**
* 导入本地工程
*
* @param
* @return
*/
@RequestMapping("/importPrj")
@UserOperation(value = "导入本地工程", modelName = UserOperationModuleEnum.SYS_PRJ_DATABASE)
public ElectromagneticResult<?> importPrj(@RequestParam("file") MultipartFile file) {
@Resource
private ImportPrjService importPrjService;
return null;
@RequestMapping("/importPrj")
@UserOperation(value = "导入本地工程", modelName = UserOperationModuleEnum.IMPORT_PFJ)
public ElectromagneticResult<?> importPrj(@RequestParam("file") MultipartFile file) {
return ElectromagneticResultUtil.success(importPrjService.importPrj(file));
}
@RequestMapping("/queryPrjInfo")
@UserOperation(value = "查询导入工程列表", modelName = UserOperationModuleEnum.IMPORT_PFJ)
public ElectromagneticResult<?> queryPrjInfo(@RequestParam("pageNum") Integer pageNum, @RequestParam("pageSize") Integer pageSize) {
return ElectromagneticResultUtil.success(importPrjService.queryPrjInfo(pageNum, pageSize));
}
@RequestMapping("/queryImportFileInfo")
@UserOperation(value = "查询导入工程文件和文件夹信息", modelName = UserOperationModuleEnum.IMPORT_PFJ)
public ElectromagneticResult<?> queryImportFileInfo(@RequestParam("pageNum") Integer pageNum,
@RequestParam("pageSize") Integer pageSize,
@RequestParam("id") String id) {
return ElectromagneticResultUtil.success(importPrjService.queryImportFileInfo(id, pageNum, pageSize));
}
@RequestMapping("/download")
@UserOperation(value = "下载文件", modelName = UserOperationModuleEnum.IMPORT_PFJ)
public ResponseEntity<InputStreamResource> download(@RequestParam("id") String id, HttpServletResponse response) {
return importPrjService.download(id, response);
}
}

View File

@ -0,0 +1,12 @@
package com.electromagnetic.industry.software.manage.pojo.req;
import lombok.Data;
@Data
public class ImportFileDirQueryVO {
private String fileName;
private String id;
}

View File

@ -0,0 +1,37 @@
package com.electromagnetic.industry.software.manage.pojo.req;
import lombok.Data;
import java.util.Date;
@Data
public class ImportFileInfoVO {
/**
* 主键ID
*/
private String id;
/**
* 父目录id
*/
private String parentId;
/**
* 文件类型
*/
private String fileType;
/**
* 文件名
*/
private String fileName;
/**
* 数据类型0-文件夹 1-文件
*/
private Integer dataType;
/**
* 文件大小
*/
private Long fileSize;
private Date createdTime;
}

View File

@ -1,5 +1,8 @@
package com.electromagnetic.industry.software.manage.service;
import com.electromagnetic.industry.software.common.pojo.RespPageVO;
import com.electromagnetic.industry.software.manage.pojo.req.ImportFileDirQueryVO;
import com.electromagnetic.industry.software.manage.pojo.req.ImportFileInfoVO;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.core.io.InputStreamResource;
import org.springframework.http.ResponseEntity;
@ -11,5 +14,8 @@ public interface ImportPrjService {
ResponseEntity<InputStreamResource> download(String id, HttpServletResponse response);
RespPageVO<ImportFileDirQueryVO> queryPrjInfo(Integer pageNum, Integer pageSize);
RespPageVO<ImportFileInfoVO> queryImportFileInfo(String id, Integer pageNo, Integer pageSize);
}

View File

@ -1,5 +1,6 @@
package com.electromagnetic.industry.software.manage.service.serviceimpl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.codec.Base64;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.io.FileUtil;
@ -8,18 +9,21 @@ import cn.hutool.core.text.StrFormatter;
import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.SecureUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.electromagnetic.industry.software.common.cons.ElectromagneticConstants;
import com.electromagnetic.industry.software.common.enums.EffectFlagEnum;
import com.electromagnetic.industry.software.common.enums.EleDataTypeEnum;
import com.electromagnetic.industry.software.common.exception.BizException;
import com.electromagnetic.industry.software.common.pojo.RespPageVO;
import com.electromagnetic.industry.software.common.util.EleCommonUtil;
import com.electromagnetic.industry.software.common.util.IdWorker;
import com.electromagnetic.industry.software.common.util.UserThreadLocal;
import com.electromagnetic.industry.software.manage.config.ElePropertyConfig;
import com.electromagnetic.industry.software.manage.mapper.ImportPrjInfoMapper;
import com.electromagnetic.industry.software.manage.pojo.models.EdFileInfo;
import com.electromagnetic.industry.software.manage.pojo.models.ImportFileInfo;
import com.electromagnetic.industry.software.manage.pojo.req.ImportFileDirQueryVO;
import com.electromagnetic.industry.software.manage.pojo.req.ImportFileInfoVO;
import com.electromagnetic.industry.software.manage.service.ImportPrjService;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletResponse;
@ -39,16 +43,13 @@ import java.util.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import static com.electromagnetic.industry.software.common.cons.ElectromagneticConstants.APPEND_NEW_FILE_NAME;
import static com.electromagnetic.industry.software.common.cons.ElectromagneticConstants.FILE_SEC_PASSWD;
import static com.electromagnetic.industry.software.common.cons.ElectromagneticConstants.*;
@Service
public class ImportPrjServiceImpl extends ServiceImpl<ImportPrjInfoMapper, ImportFileInfo> implements ImportPrjService {
@Resource
private ElePropertyConfig elePropertyConfig;
@Resource
private CommonService commonService;
@Override
@Transactional(rollbackFor = Exception.class)
@ -119,6 +120,10 @@ public class ImportPrjServiceImpl extends ServiceImpl<ImportPrjInfoMapper, Impor
FileUtil.writeFromStream(inputStream, destPath);
EleCommonUtil.encryptFile(destPath, SecureUtil.aes(FILE_SEC_PASSWD.getBytes()));
}
String prjId = items.stream().filter(e -> e.getParentId().equals(PRJ_PARENT_ID)).findFirst().get().getId();
String prjPath = elePropertyConfig.getImportPrjPath() + File.separator + prjId;
FileUtil.writeFromStream(file.getInputStream(), prjPath);
EleCommonUtil.encryptFile(prjPath, SecureUtil.aes(FILE_SEC_PASSWD.getBytes()));
} catch (Exception e) {
throw new BizException("导入工程失败,原因 " + e.getMessage(), e);
} finally {
@ -159,6 +164,36 @@ public class ImportPrjServiceImpl extends ServiceImpl<ImportPrjInfoMapper, Impor
}
}
@Override
public RespPageVO<ImportFileDirQueryVO> queryPrjInfo(Integer pageNum, Integer pageSize) {
Page<ImportFileInfo> importFileInfoPage = this.baseMapper.selectPage(new Page<>(pageNum, pageSize), Wrappers.lambdaQuery(ImportFileInfo.class)
.select(ImportFileInfo::getId, ImportFileInfo::getFileName)
.eq(ImportFileInfo::getEffectFlag, EffectFlagEnum.EFFECT.code)
.eq(ImportFileInfo::getParentId, PRJ_PARENT_ID));
List<ImportFileDirQueryVO> page = BeanUtil.copyToList(importFileInfoPage.getRecords(), ImportFileDirQueryVO.class);
return new RespPageVO<>(importFileInfoPage.getTotal(), page);
}
@Override
public RespPageVO<ImportFileInfoVO> queryImportFileInfo(String id, Integer pageNo, Integer pageSize) {
Page<ImportFileInfo> importFilePage = this.baseMapper.selectPage(new Page<>(pageNo, pageSize), Wrappers.<ImportFileInfo>lambdaQuery()
.eq(ImportFileInfo::getParentId, id)
.eq(ImportFileInfo::getDataType, EleDataTypeEnum.FILE.code)
.eq(ImportFileInfo::getEffectFlag, EffectFlagEnum.EFFECT.code));
List<ImportFileInfoVO> files = BeanUtil.copyToList(importFilePage.getRecords(), ImportFileInfoVO.class);
RespPageVO<ImportFileInfoVO> respPageVO = new RespPageVO<>(importFilePage.getTotal(), files);
// 如果是首页查询则首先查询全部文件夹
if (Objects.equals(pageNo, 1)) {
List<ImportFileInfo> importDirs = this.baseMapper.selectList(Wrappers.<ImportFileInfo>lambdaQuery()
.eq(ImportFileInfo::getParentId, id)
.eq(ImportFileInfo::getDataType, EleDataTypeEnum.FOLDER.code)
.eq(ImportFileInfo::getEffectFlag, EffectFlagEnum.EFFECT.code));
List<ImportFileDirQueryVO> importFileDirQueryVOS = BeanUtil.copyToList(importDirs, ImportFileDirQueryVO.class);
respPageVO.setImportDirs(importFileDirQueryVOS);
}
return respPageVO;
}
public void resetPrjName(ImportFileInfo importFileInfo) {
if (!StrUtil.equals(importFileInfo.getParentId(), ElectromagneticConstants.PRJ_PARENT_ID)) {
return;

View File

@ -5,9 +5,9 @@ spring.servlet.multipart.max-file-size=500MB
spring.servlet.multipart.max-request-size=500MB
spring.mvc.async.request-timeout=3600000
#mysql
spring.datasource.url=jdbc:mariadb://127.0.0.1:3306/em_data_dev?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&sslModel=true&serverTimezone=GMT%2B8&allowMultiQueries=true&rewriteBatchedStatements=true
spring.datasource.url=jdbc:mariadb://127.0.0.1:12345/em_data_dev?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&sslModel=true&serverTimezone=GMT%2B8&allowMultiQueries=true&rewriteBatchedStatements=true
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.datasource.username=em_user_dev
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
#ai
@ -51,6 +51,10 @@ data.user.download.path=user_download/
data.repo.prj.path=repo_project/
data.repo.upload.path=repo_upload/
data.repo.download.path=repo_download/
# import path
data.import.prj.path=import_project/
data.import.upload.path=import_upload/
data.import.download.path=import_download/
prj.folder.max.length=6
# backupFiles
tmp.file.store.hour=48

View File

@ -13,6 +13,8 @@ public enum UserOperationModuleEnum {
REPO_PRJ_DATABASE("repo_prj_database", "库数据管理"),
REPO_PRJ_SETTING("repo_prj_setting", "库数据层级定义"),
IMPORT_PFJ("import_pjr", "导入的工程数据"),
USER_PRJ("user_prj", "个人数据"),
UNKNOWN("unknown", "未分组"),

View File

@ -19,6 +19,8 @@ public class RespPageVO<T> implements Serializable {
private ImportTableInfoVO importTableInfoVO;
private List<?> importDirs;
public RespPageVO(long total, List<T> records) {
this.struct = false;
this.total = total;
@ -29,4 +31,6 @@ public class RespPageVO<T> implements Serializable {
this.struct = true;
this.importTableInfoVO = importTableInfoVO;
}
}