diff --git a/domain/src/main/java/com/electromagnetic/industry/software/data/manage/domain/boardservice/indicator/service/impl/EDDataServiceImpl.java b/domain/src/main/java/com/electromagnetic/industry/software/data/manage/domain/boardservice/indicator/service/impl/EDDataServiceImpl.java index d1e4cf1..8770f8a 100644 --- a/domain/src/main/java/com/electromagnetic/industry/software/data/manage/domain/boardservice/indicator/service/impl/EDDataServiceImpl.java +++ b/domain/src/main/java/com/electromagnetic/industry/software/data/manage/domain/boardservice/indicator/service/impl/EDDataServiceImpl.java @@ -4,6 +4,8 @@ package com.electromagnetic.industry.software.data.manage.domain.boardservice.indicator.service.impl; import cn.hutool.core.io.FileUtil; +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.ZipUtil; import cn.hutool.crypto.SecureUtil; import cn.hutool.crypto.symmetric.AES; @@ -25,9 +27,11 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; +import electromagnetic.data.framework.share.constants.ElectromagneticConstants; import electromagnetic.data.framework.share.exception.LoggerConstant; import electromagnetic.data.framework.share.id.IdWorker; import electromagnetic.data.framework.share.model.ElectromagneticResultUtil; +import electromagnetic.data.framework.share.util.EleCommonUtil; import electromagnetic.data.framework.share.util.EleZipUtil; import lombok.extern.slf4j.Slf4j; import org.slf4j.Logger; @@ -45,6 +49,7 @@ import java.nio.file.Path; import java.nio.file.Paths; import java.text.SimpleDateFormat; import java.util.*; +import java.util.regex.Pattern; /** * @author @@ -132,8 +137,9 @@ public class EDDataServiceImpl implements EDDataService { if(categoryParentList.size() > 0){ categoryParent = categoryParentList.get(0); filePathOfFolder = categoryParent.getCategoryId() + FOLDER_NAME_SEPARATOR + categoryParent.getCategoryName(); - if(edDataInfoParent != null){ - filePathOfFolder = filePathOfFolder + File.separator + edDataInfoParent.getDataName(); + if(edDataInfoParent != null) { + String fileType = StrUtil.isEmpty(edDataInfoParent.getFileType()) ? "" : "." + edDataInfoParent.getFileType(); + filePathOfFolder = filePathOfFolder + File.separator + edDataInfoParent.getDataName() + fileType; } } @@ -148,9 +154,13 @@ public class EDDataServiceImpl implements EDDataService { public Boolean createDataInfo(EDDataInfo edDataInfo) throws Exception { // 获取上级目录的名称 + String fileName = edDataInfo.getDataName(); + Assert.isTrue(EleCommonUtil.isFileNameValid(fileName), "文件名不符合规范,只能包含中文字符、下划线、连字符、加号、数字和英文字符且长度小于32。"); + Category categoryParent = new Category(); categoryParent.setCategoryId(edDataInfo.getCategoryId()); List categoryParentList = categoryRepository.selectCategories(categoryParent); + if(categoryParentList.size() < 1) { throw new Exception("上级文件夹不存在"); } @@ -233,13 +243,14 @@ public class EDDataServiceImpl implements EDDataService { EDDataInfo edDataInfo = edDataInfoList.get(0); String filePathOfFolder = getFilePathOfFolder(edDataInfo.getCategoryId()); - String fileStorageFullPath = dataStoragePath + filePathOfFolder + File.separator + edDataInfo.getDataName(); + String fileType = StrUtil.isEmpty(edDataInfo.getFileType()) ? "" : "." + edDataInfo.getFileType(); + String fileStorageFullPath = dataStoragePath + filePathOfFolder + File.separator + edDataInfo.getDataName() + fileType; if (!FileUtil.exist(fileStorageFullPath)){ throw new Exception("文件不存在"); } - String fileNameNew = parames.getName(); + String fileNameNew = parames.getName() + fileType; if(fileNameNew != null && fileNameNew != "" && !fileNameNew.equals(edDataInfo.getDataName())) { FileUtil.rename(Paths.get(fileStorageFullPath) ,fileNameNew,true); } @@ -274,7 +285,7 @@ public class EDDataServiceImpl implements EDDataService { parames.setParentId(edDataInfo.getDataId()); childFileCount += getChildFileCount(parames); } - else if(edDataInfo.getDataType().equals(dataTypeFile)) + else if(edDataInfo.getDataType().equals(dataTypeFile) && edDataInfo.getEffectFlag().equals(1)) { ++childFileCount; } @@ -288,8 +299,7 @@ public class EDDataServiceImpl implements EDDataService { * @param parames * @return */ - public Boolean uploadFile(EDDataParams parames) throws Exception - { + public Boolean uploadFile(EDDataParams parames) throws Exception { // 获取目录编码ID String categoryId = parames.getParentId(); @@ -305,14 +315,10 @@ public class EDDataServiceImpl implements EDDataService { // 获取文件名 String fileFullName = fileInput.getOriginalFilename(); // 获取文件类型 - String fileType = ""; + String fileType = EleCommonUtil.getFileType(fileFullName); // 获取文件名称 - String fileName = ""; - if (fileFullName.lastIndexOf(".") != -1 && fileFullName.lastIndexOf(".") != 0) { - fileType = fileFullName.substring(fileFullName.lastIndexOf(".") + 1); - fileName = fileFullName.substring(fileFullName.lastIndexOf(".")); - } - + String fileName = EleCommonUtil.getFileName(fileFullName); + Assert.isTrue(EleCommonUtil.isFileNameValid(fileName), "文件名不符合规范,只能包含中文字符、下划线、连字符、加号、数字和英文字符且长度小于32。"); // 判断文件名称是否存在 EDDataParams folderParames = new EDDataParams(); folderParames.setParentId(categoryId); @@ -342,7 +348,7 @@ public class EDDataServiceImpl implements EDDataService { edDataInfo.setModifier(parames.getUserId()); edDataInfo.setModifierName(parames.getUserName()); edDataInfo.setCategoryId(parames.getParentId()); - edDataInfo.setDataName(fileFullName); + edDataInfo.setDataName(fileName); edDataInfo.setNote(parames.getNote()); edDataInfo.setFileType(fileType); edDataInfo.setGmtBatchUpload(parames.getGmtBatchUpload()); @@ -561,7 +567,7 @@ public class EDDataServiceImpl implements EDDataService { String dateString = sdf.format(date); zipPathFileName = dataCachePath + "/exportData_" + dateString; - enCodeZipPathFileName = dataCachePath + "/exportData_" + dateString + ".comac"; + enCodeZipPathFileName = dataCachePath + "/exportData_" + dateString + ElectromagneticConstants.EXPORT_FILE_SUFFIX; ZipUtil.zip(exportDataCachePath, zipPathFileName); diff --git a/domain/src/main/java/com/electromagnetic/industry/software/data/manage/domain/boardservice/user/service/impl/UserServiceImpl.java b/domain/src/main/java/com/electromagnetic/industry/software/data/manage/domain/boardservice/user/service/impl/UserServiceImpl.java index 5d6ddeb..e6a23e9 100644 --- a/domain/src/main/java/com/electromagnetic/industry/software/data/manage/domain/boardservice/user/service/impl/UserServiceImpl.java +++ b/domain/src/main/java/com/electromagnetic/industry/software/data/manage/domain/boardservice/user/service/impl/UserServiceImpl.java @@ -8,6 +8,7 @@ import com.electromagnetic.industry.software.data.manage.domain.boardservice.use import com.electromagnetic.industry.software.data.manage.domain.boardservice.user.params.UserDeleteKeyWords; import com.electromagnetic.industry.software.data.manage.domain.boardservice.user.repository.UserRepository; import com.electromagnetic.industry.software.data.manage.domain.boardservice.user.service.UserService; +import electromagnetic.data.framework.share.constants.UserConstants; import electromagnetic.data.framework.share.exception.LoggerConstant; import electromagnetic.data.framework.share.util.SignUtils; import org.slf4j.Logger; @@ -112,6 +113,11 @@ public class UserServiceImpl implements UserService { */ @Override public Boolean deleteUser(UserDeleteKeyWords userDeleteKeyWords) { + + String workNumber = userRepository.getSingleUser(userDeleteKeyWords.getUserId()).getWorkNumber(); + if (UserConstants.ADMIN_WORK_NUMBER.equals(workNumber)) { + throw new RuntimeException("管理员用户无法删除"); + } return userRepository.deleteUser(userDeleteKeyWords)>0; } diff --git a/electromagnetic-framework/src/main/java/electromagnetic/data/framework/share/constants/ElectromagneticConstants.java b/electromagnetic-framework/src/main/java/electromagnetic/data/framework/share/constants/ElectromagneticConstants.java index 85ff251..61f7a87 100644 --- a/electromagnetic-framework/src/main/java/electromagnetic/data/framework/share/constants/ElectromagneticConstants.java +++ b/electromagnetic-framework/src/main/java/electromagnetic/data/framework/share/constants/ElectromagneticConstants.java @@ -38,4 +38,6 @@ public final class ElectromagneticConstants { public static final String TAG_SEGMENT="TagSegment"; public static final String TYPE_SEGMENT="TypeSegment"; + + public static final String EXPORT_FILE_SUFFIX = ".colib"; } \ No newline at end of file diff --git a/electromagnetic-framework/src/main/java/electromagnetic/data/framework/share/constants/UserConstants.java b/electromagnetic-framework/src/main/java/electromagnetic/data/framework/share/constants/UserConstants.java index a535daf..57c1764 100644 --- a/electromagnetic-framework/src/main/java/electromagnetic/data/framework/share/constants/UserConstants.java +++ b/electromagnetic-framework/src/main/java/electromagnetic/data/framework/share/constants/UserConstants.java @@ -28,4 +28,9 @@ public class UserConstants { public static final String LOGIN_USER_NAME = "userName"; public static final String LOGIN_WORK_NUMBER = "workNumber"; public static final String LOGIN_USER_ID = "userId"; + + /** + * 管理员账号 + */ + public static final String ADMIN_WORK_NUMBER = "100000"; } diff --git a/electromagnetic-framework/src/main/java/electromagnetic/data/framework/share/util/EleCommonUtil.java b/electromagnetic-framework/src/main/java/electromagnetic/data/framework/share/util/EleCommonUtil.java new file mode 100644 index 0000000..eb15bc2 --- /dev/null +++ b/electromagnetic-framework/src/main/java/electromagnetic/data/framework/share/util/EleCommonUtil.java @@ -0,0 +1,40 @@ +package electromagnetic.data.framework.share.util; + +import java.util.regex.Pattern; + +public final class EleCommonUtil { + + // 正则表达式模式,匹配中文字符、下划线、连字符、加号、数字和英文字符 + private static final String PATTERN = "^[\\u4e00-\\u9fa5a-zA-Z0-9._\\-+]+$"; + + // 编译正则表达式 + private static final Pattern pattern = Pattern.compile(PATTERN); + + public static String getFileName(String fileFullName) { + if (fileFullName == null) { + return ""; + } + if (!fileFullName.contains(".")) { + return fileFullName; + } + + int index = fileFullName.lastIndexOf("."); + return fileFullName.substring(0, index); + } + + public static String getFileType(String fileFullName) { + if (fileFullName == null || !fileFullName.contains(".")) { + return ""; + } + int index = fileFullName.lastIndexOf("."); + return fileFullName.substring(index + 1); + } + + public static boolean isFileNameValid(String fileFullName) { + if (fileFullName.length() > 32) { + return false; + } + return pattern.matcher(fileFullName).matches(); + } + +} diff --git a/facade/src/main/java/com/electromagnetic/industry/software/data/manage/request/user/UserModiRequest.java b/facade/src/main/java/com/electromagnetic/industry/software/data/manage/request/user/UserModiRequest.java index 2a5276d..94523df 100644 --- a/facade/src/main/java/com/electromagnetic/industry/software/data/manage/request/user/UserModiRequest.java +++ b/facade/src/main/java/com/electromagnetic/industry/software/data/manage/request/user/UserModiRequest.java @@ -1,6 +1,6 @@ package com.electromagnetic.industry.software.data.manage.request.user; -import cn.hutool.core.date.DateTime; +import com.fasterxml.jackson.annotation.JsonFormat; import electromagnetic.data.framework.share.model.BaseRequest; import lombok.Data; @@ -46,7 +46,8 @@ public class UserModiRequest extends BaseRequest implements Serializable { /** * 入职日期 */ - private DateTime joinTime; + @JsonFormat(pattern = "yyyy-MM-dd") + private Date joinTime; /** * 工作状态 @@ -56,5 +57,6 @@ public class UserModiRequest extends BaseRequest implements Serializable { /** * 实习截止日期 */ + @JsonFormat(pattern = "yyyy-MM-dd") private Date internshipEndDate; } diff --git a/facade/src/main/java/com/electromagnetic/industry/software/data/manage/request/user/UserRequest.java b/facade/src/main/java/com/electromagnetic/industry/software/data/manage/request/user/UserRequest.java index b819623..8eee110 100644 --- a/facade/src/main/java/com/electromagnetic/industry/software/data/manage/request/user/UserRequest.java +++ b/facade/src/main/java/com/electromagnetic/industry/software/data/manage/request/user/UserRequest.java @@ -1,6 +1,7 @@ package com.electromagnetic.industry.software.data.manage.request.user; import cn.hutool.core.date.DateTime; +import com.fasterxml.jackson.annotation.JsonFormat; import electromagnetic.data.framework.share.model.BaseRequest; import lombok.Data; @@ -41,7 +42,8 @@ public class UserRequest extends BaseRequest implements Serializable { /** * 入职日期 */ - private DateTime joinTime; + @JsonFormat(pattern="yyyy-MM-dd") + private Date joinTime; /** * 工作状态 @@ -51,6 +53,7 @@ public class UserRequest extends BaseRequest implements Serializable { /** * 实习截止日期 */ + @JsonFormat(pattern="yyyy-MM-dd") private Date internshipEndDate; } diff --git a/facade/src/main/java/com/electromagnetic/industry/software/data/manage/response/user/SingleUserResponse.java b/facade/src/main/java/com/electromagnetic/industry/software/data/manage/response/user/SingleUserResponse.java index 9dfabe8..d6a800e 100644 --- a/facade/src/main/java/com/electromagnetic/industry/software/data/manage/response/user/SingleUserResponse.java +++ b/facade/src/main/java/com/electromagnetic/industry/software/data/manage/response/user/SingleUserResponse.java @@ -1,5 +1,6 @@ package com.electromagnetic.industry.software.data.manage.response.user; +import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; import java.util.Date; @@ -52,6 +53,7 @@ public class SingleUserResponse { /** * 入职日期 */ + @JsonFormat(pattern = "yyyy-MM-dd") private Date joinTime; /** @@ -62,6 +64,7 @@ public class SingleUserResponse { /** * 实习截止日期 */ + @JsonFormat(pattern = "yyyy-MM-dd") private Date internshipEndDate; /** diff --git a/infrastructure/repository/src/main/resources/sqlmapper/CategoryMapper.xml b/infrastructure/repository/src/main/resources/sqlmapper/CategoryMapper.xml index 33c9002..8ef2388 100644 --- a/infrastructure/repository/src/main/resources/sqlmapper/CategoryMapper.xml +++ b/infrastructure/repository/src/main/resources/sqlmapper/CategoryMapper.xml @@ -49,7 +49,7 @@ SELECT LAST_INSERT_ID() - insert into ed_data_info (id, + replace into ed_data_info (id, category_type_id, parent_id, category_id, category_name, category_status, creator, creator_name, gmt_create, diff --git a/infrastructure/repository/src/main/resources/sqlmapper/EdDataInfoMapper.xml b/infrastructure/repository/src/main/resources/sqlmapper/EdDataInfoMapper.xml index 619da42..9519cf3 100644 --- a/infrastructure/repository/src/main/resources/sqlmapper/EdDataInfoMapper.xml +++ b/infrastructure/repository/src/main/resources/sqlmapper/EdDataInfoMapper.xml @@ -38,7 +38,7 @@ SELECT LAST_INSERT_ID() - insert into ed_data_info (category_id, + replace into ed_data_info (category_id, data_id, data_no, data_name, data_type, file_type, version, content, implant_json, data_status, diff --git a/infrastructure/repository/src/main/resources/sqlmapper/UserMapper.xml b/infrastructure/repository/src/main/resources/sqlmapper/UserMapper.xml index ee0c6c3..4adf475 100644 --- a/infrastructure/repository/src/main/resources/sqlmapper/UserMapper.xml +++ b/infrastructure/repository/src/main/resources/sqlmapper/UserMapper.xml @@ -79,7 +79,7 @@ user_title = #{userTitle}, join_time = #{joinTime}, user_status = #{userStatus}, - internship_end_date = #{internshipEndDate}, + internship_end_date = #{internshipEndDate}, modifier = #{modifier}, modifier_name = #{modifierName}, gmt_modified=now() diff --git a/service/src/main/java/com/electromagnetic/industry/software/data/manage/service/facade/EDDataFacadeImpl.java b/service/src/main/java/com/electromagnetic/industry/software/data/manage/service/facade/EDDataFacadeImpl.java index dda5b8a..3023141 100644 --- a/service/src/main/java/com/electromagnetic/industry/software/data/manage/service/facade/EDDataFacadeImpl.java +++ b/service/src/main/java/com/electromagnetic/industry/software/data/manage/service/facade/EDDataFacadeImpl.java @@ -4,6 +4,7 @@ import cn.hutool.core.codec.Base64; import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.IoUtil; import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.ZipUtil; import cn.hutool.crypto.SecureUtil; import cn.hutool.crypto.symmetric.AES; @@ -17,6 +18,7 @@ import com.electromagnetic.industry.software.data.manage.request.indicator.FileC import com.electromagnetic.industry.software.data.manage.request.indicator.FileChunkResultDTO; import com.electromagnetic.industry.software.data.manage.response.indicator.EDDataPageResponse; import com.electromagnetic.industry.software.data.manage.service.mappers.EDDataMappers; +import electromagnetic.data.framework.share.constants.ElectromagneticConstants; import electromagnetic.data.framework.share.id.IdWorker; import electromagnetic.data.framework.share.model.ElectromagneticResult; import electromagnetic.data.framework.share.model.ElectromagneticResultUtil; @@ -193,7 +195,8 @@ public class EDDataFacadeImpl implements EDDataFacade { EDDataInfo edDataInfo = edDataService.getDataInfo(parames); Assert.isTrue(edDataInfo != null, "没有找到该下载文件"); String filePathOfFolder = edDataService.getFilePathOfFolder(edDataInfo.getCategoryId()); - String filePath = storageFilePath + "/" + filePathOfFolder + "/" + edDataInfo.getDataName(); + String fileType = StrUtil.isEmpty(edDataInfo.getFileType()) ? "" : "." + edDataInfo.getFileType(); + String filePath = storageFilePath + "/" + filePathOfFolder + "/" + edDataInfo.getDataName() + fileType; Assert.isTrue(FileUtil.exist(filePath), "下载文件不存在。"); FileSystemResource fileSystemResource = new FileSystemResource(filePath); @@ -228,7 +231,7 @@ public class EDDataFacadeImpl implements EDDataFacade { Map result = new HashMap<>(); List dataIdList = Arrays.asList(dataIdArr.split(",")); - if(dataIdList.size() > 0) { + if(!dataIdList.isEmpty()) { String filePath = edDataService.exportData(dataIdList); Assert.isTrue(FileUtil.exist(filePath), "下载文件不存在。"); @@ -313,13 +316,12 @@ public class EDDataFacadeImpl implements EDDataFacade { return new ArrayList<>(); } - List uploadedFileChunkNums = FileUtil.listFileNames(destPath) + return FileUtil.listFileNames(destPath) .stream() - .filter(e -> !e.endsWith(".comac")) + .filter(e -> !e.endsWith(ElectromagneticConstants.EXPORT_FILE_SUFFIX)) .map(e -> e.replace(UPLOAD_FILE_CHUNK_SUFFIX, "")) .map(Integer::parseInt) .collect(Collectors.toList()); - return uploadedFileChunkNums; } // TODO 需要验证如果一个分片上传一半网络断开,则该分片的存储情况。 diff --git a/service/target/generated-sources/annotations/com/electromagnetic/industry/software/data/manage/service/mappers/UserMappersImpl.java b/service/target/generated-sources/annotations/com/electromagnetic/industry/software/data/manage/service/mappers/UserMappersImpl.java index 124c80f..638cd7e 100644 --- a/service/target/generated-sources/annotations/com/electromagnetic/industry/software/data/manage/service/mappers/UserMappersImpl.java +++ b/service/target/generated-sources/annotations/com/electromagnetic/industry/software/data/manage/service/mappers/UserMappersImpl.java @@ -1,7 +1,6 @@ package com.electromagnetic.industry.software.data.manage.service.mappers; import com.electromagnetic.industry.software.data.manage.domain.boardservice.user.model.User; -import com.electromagnetic.industry.software.data.manage.domain.boardservice.user.model.UserLoginInfo; import com.electromagnetic.industry.software.data.manage.domain.boardservice.user.params.PublishParam; import com.electromagnetic.industry.software.data.manage.domain.boardservice.user.params.SearchKeyWords; import com.electromagnetic.industry.software.data.manage.domain.boardservice.user.params.UserDeleteKeyWords; @@ -13,13 +12,14 @@ import com.electromagnetic.industry.software.data.manage.request.user.UserPublis import com.electromagnetic.industry.software.data.manage.request.user.UserRequest; import com.electromagnetic.industry.software.data.manage.request.user.UserWorkNumRequest; import com.electromagnetic.industry.software.data.manage.response.user.SingleUserResponse; +import electromagnetic.data.framework.share.model.UserLoginInfo; import java.util.ArrayList; import java.util.List; import javax.annotation.Generated; @Generated( value = "org.mapstruct.ap.MappingProcessor", - date = "2024-11-21T15:49:09+0800", + date = "2024-12-05T15:02:06+0800", comments = "version: 1.4.1.Final, compiler: javac, environment: Java 1.8.0_281 (Oracle Corporation)" ) public class UserMappersImpl implements UserMappers { @@ -41,10 +41,6 @@ public class UserMappersImpl implements UserMappers { user.setJoinTime( userRequest.getJoinTime() ); user.setUserStatus( userRequest.getUserStatus() ); user.setInternshipEndDate( userRequest.getInternshipEndDate() ); - user.setCreator( userRequest.getCreator() ); - user.setCreatorName( userRequest.getCreatorName() ); - user.setModifier( userRequest.getModifier() ); - user.setModifierName( userRequest.getModifierName() ); return user; } @@ -58,6 +54,7 @@ public class UserMappersImpl implements UserMappers { UserLoginInfo userLoginInfo = new UserLoginInfo(); userLoginInfo.setWorkNumber( loginRequest.getWorkNumber() ); + userLoginInfo.setUserId( loginRequest.getUserId() ); userLoginInfo.setUserPwd( loginRequest.getUserPwd() ); return userLoginInfo; @@ -107,8 +104,6 @@ public class UserMappersImpl implements UserMappers { if ( list != null ) { publishParam.setUserIds( new ArrayList( list ) ); } - publishParam.setModifier( userPublishRequest.getModifier() ); - publishParam.setModifierName( userPublishRequest.getModifierName() ); return publishParam; } @@ -164,8 +159,6 @@ public class UserMappersImpl implements UserMappers { user.setJoinTime( userModiRequest.getJoinTime() ); user.setUserStatus( userModiRequest.getUserStatus() ); user.setInternshipEndDate( userModiRequest.getInternshipEndDate() ); - user.setModifier( userModiRequest.getModifier() ); - user.setModifierName( userModiRequest.getModifierName() ); return user; } @@ -194,8 +187,6 @@ public class UserMappersImpl implements UserMappers { UserDeleteKeyWords userDeleteKeyWords = new UserDeleteKeyWords(); userDeleteKeyWords.setUserId( userDeleteRequest.getUserId() ); - userDeleteKeyWords.setModifier( userDeleteRequest.getModifier() ); - userDeleteKeyWords.setModifierName( userDeleteRequest.getModifierName() ); return userDeleteKeyWords; }