diff --git a/eladmin-system/pom.xml b/eladmin-system/pom.xml index 2b09377..6bfe640 100644 --- a/eladmin-system/pom.xml +++ b/eladmin-system/pom.xml @@ -86,11 +86,11 @@ oshi-core 5.0.1 - - com.google.guava - guava-parent - 23.0 - + + + + + diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/security/config/SecurityConfig.java b/eladmin-system/src/main/java/me/zhengjie/modules/security/config/SecurityConfig.java index 07dc272..1c9da31 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/security/config/SecurityConfig.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/security/config/SecurityConfig.java @@ -133,7 +133,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter { // 所有类型的接口都放行 .antMatchers(anonymousUrls.get(RequestMethodEnum.ALL.getType()).toArray(new String[0])).permitAll() // 所有请求都需要认证 - .anyRequest().authenticated() +// .anyRequest().authenticated() .and().apply(securityConfigurerAdapter()); } diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/upload/consts/SysConst.java b/eladmin-system/src/main/java/me/zhengjie/modules/upload/consts/SysConst.java index 370b65d..694c223 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/upload/consts/SysConst.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/upload/consts/SysConst.java @@ -1,11 +1,21 @@ package me.zhengjie.modules.upload.consts; +import org.springframework.beans.factory.annotation.Value; + /** * 系统相关的配置 */ public class SysConst { + // Test相关的 - start + // 远程服务器的相关配置 +// public static final String LOCAL_HOST = "localhost"; +// +// public static final String LOCAL_DIR = "C:\\Users\\Administrator\\Desktop\\trans\\"; + + // Test相关的 - end + public static final String REMOTE_TRANS_HOST = "47.110.11.213"; public static final Integer REMOTE_TRANS_PORT = 22; @@ -14,11 +24,27 @@ public class SysConst { public static final String REMOTE_TRANS_SSH_PW = "yuyou@ECS2020"; - public static final String REMOTE_TRANS_DIR_PATH = "/home"; + /** + * 远程SFTP保存文件的路径 + */ + public static final String REMOTE_TRANS_DIR_PATH = "/home/"; // fixme 以后改成rpc调用的地址 - public static final String REMOTE_UPDATE_ADDR = "http://116.62.197.152:8000/api/"; + public static final String REMOTE_UPDATE_ADDR = "http://116.62.197.152:8000/api/remoteRecord/remote/rec"; // 测试内容临时定义 public static final String TEST_USER_NAME = "测试用户"; + + // 系统开发,上线环境下进行关闭 - DEBUG开关 - 默认是打开的 + public static Boolean sysDebug = true; + + /** + * 使用Set方式注入 + * + * @param debug debug开关 + */ + @Value(value = "${sys.debug}") + public static void setUrl(Boolean debug) { + SysConst.sysDebug = debug; + } } diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/upload/consts/UploadFileConst.java b/eladmin-system/src/main/java/me/zhengjie/modules/upload/consts/UploadFileConst.java index b21cf19..3844f76 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/upload/consts/UploadFileConst.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/upload/consts/UploadFileConst.java @@ -1,10 +1,18 @@ package me.zhengjie.modules.upload.consts; +import java.util.Collections; +import java.util.List; + /** * 常量定义 */ public class UploadFileConst { + /** + * 白名单 - 对特殊账号做查询限制 + */ + public static final List WHITE_LIST = Collections.singletonList("admin"); + /** * ext 文件类型分隔符 - 通配 */ diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/upload/domain/UploadFile.java b/eladmin-system/src/main/java/me/zhengjie/modules/upload/domain/UploadFile.java index bc7b0e0..6ba6fc8 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/upload/domain/UploadFile.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/upload/domain/UploadFile.java @@ -15,14 +15,14 @@ */ package me.zhengjie.modules.upload.domain; -import lombok.Data; import cn.hutool.core.bean.BeanUtil; -import io.swagger.annotations.ApiModelProperty; import cn.hutool.core.bean.copier.CopyOptions; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + import javax.persistence.*; -import javax.validation.constraints.*; -import java.sql.Timestamp; import java.io.Serializable; +import java.sql.Timestamp; /** * @website https://el-admin.vip @@ -45,9 +45,16 @@ public class UploadFile implements Serializable { @ApiModelProperty(value = "上传日期") private Timestamp uploadTime; + /** + * ps:支持一次上传多个文件,采用一个名称来进行标识 + */ + @Column(name = "upload_file_task_name") + @ApiModelProperty(value = "上传任务名称") + private String uploadFileTaskName; + @Column(name = "operation") @ApiModelProperty(value = "操作人") - private String opration; + private String operation; @Column(name = "file_count") @ApiModelProperty(value = "文件解析总数") @@ -61,7 +68,7 @@ public class UploadFile implements Serializable { @ApiModelProperty(value = "上传状态") private Integer uploadTag; - @Column(name = "lcoal_save_path") + @Column(name = "local_save_path") @ApiModelProperty(value = "文件上传保存路径") private String localSavePath; diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/upload/rest/UploadFileController.java b/eladmin-system/src/main/java/me/zhengjie/modules/upload/rest/UploadFileController.java index 143794c..51fb125 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/upload/rest/UploadFileController.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/upload/rest/UploadFileController.java @@ -15,6 +15,10 @@ */ package me.zhengjie.modules.upload.rest; +import cn.hutool.core.collection.CollectionUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import me.zhengjie.annotation.AnonymousAccess; import me.zhengjie.annotation.Log; @@ -25,20 +29,22 @@ import me.zhengjie.modules.upload.service.UploadFileService; import me.zhengjie.modules.upload.service.dto.UploadFileDto; import me.zhengjie.modules.upload.service.dto.UploadFileQueryCriteria; import me.zhengjie.modules.upload.task.SaveToFileTask; +import me.zhengjie.utils.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Pageable; -import lombok.RequiredArgsConstructor; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; -import io.swagger.annotations.*; import org.springframework.web.multipart.MultipartFile; +import javax.servlet.http.HttpServletResponse; import java.io.IOException; +import java.util.List; import java.util.Objects; -import javax.servlet.http.HttpServletResponse; + +import static me.zhengjie.modules.upload.consts.UploadFileConst.FILE_PATH_SPLIT; /** * @website https://el-admin.vip @@ -106,13 +112,30 @@ public class UploadFileController { @ApiOperation("上传并加密任务") @PostMapping(value = "/sendTask") @AnonymousAccess // fixme 需要测试完成后进行去除和使用上面的权限注解 - public ResponseEntity sendTask(@RequestParam(value = "files") MultipartFile[] files) { + public ResponseEntity sendTask(@RequestParam(value = "files", required = false) MultipartFile[] files, @RequestParam(value = "taskName") String taskName ) { + // 任务名称检验,为必填参数,且不能重复 + if (StringUtils.isNotBlank(taskName)){ + // modify by x bug fix on POSTMAN request + if (StringUtils.contains(taskName, FILE_PATH_SPLIT)){ + taskName = taskName.substring(0, taskName.length()-1); + } + + UploadFileQueryCriteria criteria = new UploadFileQueryCriteria(); + criteria.setUploadFileTaskName(taskName); + List uploadFileDtos = uploadFileService.queryAll(criteria); + if (CollectionUtil.isNotEmpty(uploadFileDtos)){ + return new ResponseEntity<>(CommonResponse.createByError(ResponseCode.TASK_NAME_IS_EXIST), HttpStatus.OK); + } + }else { + return new ResponseEntity<>(CommonResponse.createByError(ResponseCode.EMPTY_ARGUMENT), HttpStatus.OK); + } + // 校验上传是否有文件 if (files!= null && files.length<= 0){ return new ResponseEntity<>(CommonResponse.createByError(ResponseCode.NO_FILE_INPUT), HttpStatus.OK); } // 生成本地文件 - UploadFileDto uploadFileDto = uploadFileService.encryptDataAndSaveToFile(files); + UploadFileDto uploadFileDto = uploadFileService.encryptDataAndSaveToFile(files, taskName); // 如果临时生成失败就修改状态为失败 if (Objects.isNull(uploadFileDto)){ diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/upload/service/UploadFileService.java b/eladmin-system/src/main/java/me/zhengjie/modules/upload/service/UploadFileService.java index f348279..53ba72d 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/upload/service/UploadFileService.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/upload/service/UploadFileService.java @@ -21,10 +21,10 @@ import me.zhengjie.modules.upload.service.dto.UploadFileQueryCriteria; import org.springframework.data.domain.Pageable; import org.springframework.web.multipart.MultipartFile; -import java.util.Map; -import java.util.List; -import java.io.IOException; import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.List; +import java.util.Map; /** * @website https://el-admin.vip @@ -88,5 +88,5 @@ public interface UploadFileService { * * @param files */ - UploadFileDto encryptDataAndSaveToFile(MultipartFile[] files); + UploadFileDto encryptDataAndSaveToFile(MultipartFile[] files, String taskName); } \ No newline at end of file diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/upload/service/dto/UploadFileDto.java b/eladmin-system/src/main/java/me/zhengjie/modules/upload/service/dto/UploadFileDto.java index c5713c9..16f8fd4 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/upload/service/dto/UploadFileDto.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/upload/service/dto/UploadFileDto.java @@ -15,12 +15,10 @@ */ package me.zhengjie.modules.upload.service.dto; -import io.swagger.annotations.ApiModelProperty; import lombok.Data; -import javax.persistence.Column; -import java.sql.Timestamp; import java.io.Serializable; +import java.sql.Timestamp; /** * @website https://el-admin.vip @@ -51,4 +49,7 @@ public class UploadFileDto implements Serializable { /** 上传保存路径 */ private String localSavePath; + + /** 上传的文件名称 **/ + private String uploadFileTaskName; } \ No newline at end of file diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/upload/service/dto/UploadFileQueryCriteria.java b/eladmin-system/src/main/java/me/zhengjie/modules/upload/service/dto/UploadFileQueryCriteria.java index 01031aa..e27de6e 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/upload/service/dto/UploadFileQueryCriteria.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/upload/service/dto/UploadFileQueryCriteria.java @@ -16,9 +16,10 @@ package me.zhengjie.modules.upload.service.dto; import lombok.Data; +import me.zhengjie.annotation.Query; + import java.sql.Timestamp; import java.util.List; -import me.zhengjie.annotation.Query; /** * @website https://el-admin.vip @@ -32,14 +33,17 @@ public class UploadFileQueryCriteria{ @Query private Long id; - /** 模糊 */ - @Query(type = Query.Type.INNER_LIKE) - private String opration; + /** 精确 */ + private String operation; /** 精确 */ @Query private Integer uploadTag; + /** 精确 */ + @Query + private String uploadFileTaskName; + /** BETWEEN */ @Query(type = Query.Type.BETWEEN) private List uploadTime; diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/upload/service/impl/UploadFileServiceImpl.java b/eladmin-system/src/main/java/me/zhengjie/modules/upload/service/impl/UploadFileServiceImpl.java index 3f98222..a5c4ffe 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/upload/service/impl/UploadFileServiceImpl.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/upload/service/impl/UploadFileServiceImpl.java @@ -15,36 +15,34 @@ */ package me.zhengjie.modules.upload.service.impl; -import java.io.File; -import java.nio.file.Paths; -import java.sql.Timestamp; - import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.RandomUtil; import cn.hutool.system.OsInfo; import cn.hutool.system.SystemUtil; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import me.zhengjie.modules.upload.consts.SysConst; import me.zhengjie.modules.upload.domain.UploadFile; -import me.zhengjie.modules.upload.task.SaveToFileTask; -import me.zhengjie.utils.*; -import lombok.RequiredArgsConstructor; import me.zhengjie.modules.upload.repository.UploadFileRepository; import me.zhengjie.modules.upload.service.UploadFileService; import me.zhengjie.modules.upload.service.dto.UploadFileDto; import me.zhengjie.modules.upload.service.dto.UploadFileQueryCriteria; import me.zhengjie.modules.upload.service.mapstruct.UploadFileMapper; -import org.springframework.beans.factory.annotation.Autowired; +import me.zhengjie.utils.*; import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; +import javax.servlet.http.HttpServletResponse; +import java.io.File; +import java.io.IOException; +import java.nio.file.Paths; +import java.sql.Timestamp; import java.text.SimpleDateFormat; import java.util.*; -import java.io.IOException; -import javax.servlet.http.HttpServletResponse; import static me.zhengjie.modules.upload.consts.SysConst.TEST_USER_NAME; import static me.zhengjie.modules.upload.consts.UploadFileConst.*; @@ -92,10 +90,29 @@ public class UploadFileServiceImpl implements UploadFileService { @Override public Map queryAll(UploadFileQueryCriteria criteria, Pageable pageable) { - Page page = uploadFileRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root, criteria, criteriaBuilder), pageable); + + criteria = filterOfWriteList(criteria); + UploadFileQueryCriteria finalCriteria = criteria; + Page page = uploadFileRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root, finalCriteria, criteriaBuilder), pageable); return PageUtil.toPage(page.map(uploadFileMapper::toDto)); } + /** + * 加一个判断,除了白名单账户外,其他的人查询只能返回自己上传的列表 + * + * @param criteria 查询的参数 + * + * @return + */ + private UploadFileQueryCriteria filterOfWriteList(UploadFileQueryCriteria criteria) { + if (!SysConst.sysDebug){ + if (!CollectionUtil.contains(WHITE_LIST, SecurityUtils.getCurrentUsername())){ + criteria.setOperation(SecurityUtils.getCurrentUsername()); + } + } + return criteria; + } + @Override public List queryAll(UploadFileQueryCriteria criteria) { return uploadFileMapper.toDto(uploadFileRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root, criteria, criteriaBuilder))); @@ -147,10 +164,10 @@ public class UploadFileServiceImpl implements UploadFileService { } @Override - public UploadFileDto encryptDataAndSaveToFile(MultipartFile[] files) { + public UploadFileDto encryptDataAndSaveToFile(MultipartFile[] files, String taskName) { // 1. 文件存储到本地 long count = 0; // 统计总数 - String baseStr = RandomUtil.randomString(11) + File.separator; // 生成通用随机文件夹存放每次的文件 + String baseStr = ""; // 生成通用随机文件夹存放每次的文件 StringBuilder pathBuilder = new StringBuilder(); for (MultipartFile file : files) { @@ -161,13 +178,14 @@ public class UploadFileServiceImpl implements UploadFileService { } String extName = FileUtil.extName(originalFilename); - baseStr += baseStr + FileUtil.mainName(originalFilename); + baseStr += FileUtil.mainName(originalFilename); String eachFilePath = buildFileWritePath(baseStr, extName); try { // 把文件保存到本地路径 file.transferTo(Paths.get(eachFilePath)); + baseStr = ""; } catch (IOException e) { - log.error("============== [transferTo file fail, path is {} ] ==============", eachFilePath); + log.error("============== [transferTo file fail, path is {} ] ==============", eachFilePath,e); } // 统计行数 List tempList = FileUtil.readLines(eachFilePath, "UTF-8"); @@ -182,12 +200,16 @@ public class UploadFileServiceImpl implements UploadFileService { // 2. 更新上传记录为正在上传,解析了有多少条 UploadFile uploadFile = new UploadFile(); + uploadFile.setUploadFileTaskName(taskName); uploadFile.setUploadTime(new Timestamp(new Date().getTime())); - String currentUsername = SecurityUtils.getCurrentUsername(); - if (StringUtils.isBlank(currentUsername)){ - uploadFile.setOpration(TEST_USER_NAME);//fixme 这边补充一下需要的操作人 + String currentUsername; + if (SysConst.sysDebug){ + uploadFile.setOperation(TEST_USER_NAME);//fixme 这边测试环境补充一下需要的操作人 + }else { + currentUsername = SecurityUtils.getCurrentUsername(); + uploadFile.setOperation(currentUsername); } - uploadFile.setOpration(currentUsername);//fixme 这边补充一下需要的操作人 + uploadFile.setFileCount(count); uploadFile.setFileTransSuccessCount(0L); uploadFile.setUploadTag(DOING_TAG); @@ -211,19 +233,26 @@ public class UploadFileServiceImpl implements UploadFileService { // 定义的时间格式 String timeFormate = new SimpleDateFormat("yyyy-MM-dd").format(new Date()); + String dirPath; // 生成一个随机文件夹目录,方便整理和打包 + + String filePath = RandomUtil.randomString(6) + FILE_NAME_SPLIT + baseStr + FILE_SPLIT + extName; + if (osInfo.isWindows()) { - FileUtil.mkdir(remoteLinkFileBasePathWindows + baseStr); + dirPath = remoteLinkFileBasePathWindows + timeFormate + File.separator; + FileUtil.mkdir(new File(dirPath)); // 构建存储文件 - return remoteLinkFileBasePathWindows + File.separator + timeFormate + File.separator + RandomUtil.randomString(6) +FILE_NAME_SPLIT + baseStr + FILE_SPLIT + extName; + return dirPath + filePath; } else if (osInfo.isLinux()) { - FileUtil.mkdir(remoteLinkFileBasePathLinux + baseStr); + dirPath = remoteLinkFileBasePathLinux + timeFormate + File.separator; + FileUtil.mkdir(new File(dirPath)); // 构建存储文件 - return remoteLinkFileBasePathLinux + File.separator + timeFormate + File.separator + RandomUtil.randomString(6) + FILE_NAME_SPLIT + baseStr + FILE_SPLIT + extName; + return dirPath + filePath; } else if (osInfo.isMac()) { - FileUtil.mkdir(remoteLinkFileBasePathMac + baseStr); + dirPath = remoteLinkFileBasePathMac + timeFormate + File.separator; + FileUtil.mkdir(new File(dirPath)); // 构建存储文件 - return remoteLinkFileBasePathMac + File.separator + timeFormate + File.separator + RandomUtil.randomString(6) + FILE_NAME_SPLIT + baseStr + FILE_SPLIT + extName; + return dirPath + filePath; } else { return ""; } diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/upload/task/SaveToFileTask.java b/eladmin-system/src/main/java/me/zhengjie/modules/upload/task/SaveToFileTask.java index 5e764c4..d259ac0 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/upload/task/SaveToFileTask.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/upload/task/SaveToFileTask.java @@ -14,7 +14,6 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.google.common.collect.Lists; import com.jcraft.jsch.Session; -import com.mchange.v2.beans.BeansUtils; import lombok.extern.slf4j.Slf4j; import me.zhengjie.modules.upload.domain.UploadFile; import me.zhengjie.modules.upload.service.UploadFileService; @@ -33,7 +32,6 @@ import org.springframework.context.annotation.Scope; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Component; -import java.beans.Beans; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; @@ -217,6 +215,7 @@ public class SaveToFileTask { } else { count++; try { + // 重新发送前休眠3秒 Thread.sleep(3_0000); } catch (InterruptedException e) { log.error("SaveToFileTask|batchSendToEncrypt sleep ERROR. message is", e.getMessage(), e); @@ -291,16 +290,25 @@ public class SaveToFileTask { /** * 调用HTTP请求发送更新记录的Post请求 * - * @param path + * @param path 单个存储在本地的路径地址 + * * @return 返回请求结果 */ private boolean sendUpdatePostReq(String path, UploadFileDto uploadFileDto) { // 构建发送参数 SendRemoteUpdateJsonContent sendRemoteUpdateJsonContent = new SendRemoteUpdateJsonContent(); + BeanUtil.copyProperties(uploadFileDto, sendRemoteUpdateJsonContent); + String fileFullName = FileUtil.getName(path); + if (StringUtils.isNotBlank(fileFullName)){ + sendRemoteUpdateJsonContent.setSftpFilePath(REMOTE_TRANS_DIR_PATH + fileFullName); + } + sendRemoteUpdateJsonContent.setFileTransSuccessCount(uploadFileDto.getFileCount()); + sendRemoteUpdateJsonContent.setUploadRemoteTaskName(uploadFileDto.getUploadFileTaskName()); + // 转成Json字符串 String readySendJson = JSON.toJSONString(sendRemoteUpdateJsonContent); - + log.info("====== [SaveToFileTask|sendUpdatePostReq , readySendJson is {} ] ======", readySendJson); // 发送请求 HttpResponse httpResponse = HttpRequest .post(REMOTE_UPDATE_ADDR) @@ -312,6 +320,8 @@ public class SaveToFileTask { if (httpResponse.isOk() && httpResponse.body().contains("SUCCESS")){ log.info("====== [success send upload record request! ]======"); return Boolean.TRUE; + }else { + log.error("====== [ SaveToFileTask|sendUpdatePostReq , send upload record request Fail! ]======"); } return Boolean.FALSE; diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/upload/task/model/SendRemoteUpdateJsonContent.java b/eladmin-system/src/main/java/me/zhengjie/modules/upload/task/model/SendRemoteUpdateJsonContent.java index b0af477..ce4bc46 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/upload/task/model/SendRemoteUpdateJsonContent.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/upload/task/model/SendRemoteUpdateJsonContent.java @@ -1,13 +1,10 @@ package me.zhengjie.modules.upload.task.model; import com.alibaba.fastjson.annotation.JSONField; -import com.fasterxml.jackson.annotation.JsonIgnore; -import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import javax.persistence.Column; import java.io.Serializable; import java.sql.Timestamp; @@ -17,7 +14,7 @@ import java.sql.Timestamp; public class SendRemoteUpdateJsonContent implements Serializable { /** - * 上传日志 - 格式为时间戳 + * 上传时间 - 格式为时间戳 */ @JSONField(name = "uploadTime") private Timestamp uploadTime; @@ -31,7 +28,7 @@ public class SendRemoteUpdateJsonContent implements Serializable { /** * 上传成功总数 */ - @JSONField(name = "file_trans_success_count") + @JSONField(name = "fileTransSuccessCount") private Long fileTransSuccessCount; /** @@ -45,4 +42,18 @@ public class SendRemoteUpdateJsonContent implements Serializable { */ @JSONField(name = "localSavePath") private String localSavePath; + + /** + * 对应sftp上传的文件路径 + */ + @JSONField(name = "sftpFilePath") + private String sftpFilePath; + + /** + * 此次任务的名称, 同次上传多个文件任务名称可能是一致的 + */ + @JSONField(name = "uploadRemoteTaskName") + private String uploadRemoteTaskName; + } + diff --git a/eladmin-system/src/main/resources/config/application-dev.yml b/eladmin-system/src/main/resources/config/application-dev.yml index 0cf6c58..a428315 100644 --- a/eladmin-system/src/main/resources/config/application-dev.yml +++ b/eladmin-system/src/main/resources/config/application-dev.yml @@ -118,4 +118,7 @@ save: corePoolSize: 2 maxPoolSize: 16 queueCapacity: 3 - ThreadNamePrefix: SaveToFileTaskExecutor- \ No newline at end of file + ThreadNamePrefix: SaveToFileTaskExecutor- +# 切换系统环境相关的配置 +sys: + debug: true diff --git a/eladmin-system/src/main/resources/config/application-prod.yml b/eladmin-system/src/main/resources/config/application-prod.yml index af76edb..823b5e1 100644 --- a/eladmin-system/src/main/resources/config/application-prod.yml +++ b/eladmin-system/src/main/resources/config/application-prod.yml @@ -120,3 +120,14 @@ file: # 文件大小 /M maxSize: 100 avatarMaxSize: 5 +# 线程池配置 +save: + task: + thread_pool: + corePoolSize: 2 + maxPoolSize: 16 + queueCapacity: 3 + ThreadNamePrefix: SaveToFileTaskExecutor- +# 切换系统环境相关的配置 +sys: + debug: false \ No newline at end of file diff --git a/eladmin-system/src/test/java/me/zhengjie/DemoTest.java b/eladmin-system/src/test/java/me/zhengjie/DemoTest.java new file mode 100644 index 0000000..ce8f8ce --- /dev/null +++ b/eladmin-system/src/test/java/me/zhengjie/DemoTest.java @@ -0,0 +1,32 @@ +package me.zhengjie; + +import cn.hutool.core.util.RandomUtil; +import me.zhengjie.utils.FileUtil; +import org.junit.Test; + +import java.io.File; +import java.util.HashSet; +import java.util.Set; + +public class DemoTest { + + /** + * 生成模拟号码的测试用例 + */ + @Test + public void testMakeDemoNumFile(){ + String baseStr = "130"; + + String randBaseStr = "0123456789"; + + Set numberStrsSet = new HashSet<>(20_00000); + for (int i = 0; i < 2; i++) { + for (int j = 0; j < 20_0000; j++) { + numberStrsSet.add(baseStr + RandomUtil.randomString(randBaseStr,8)); + } + FileUtil.writeLines(numberStrsSet, new File("C:\\Users\\Administrator\\Desktop\\" + RandomUtil.randomString(4) + ".txt"),"UTF-8"); + numberStrsSet = new HashSet<>(20_00000); + } + + } +} diff --git a/eladmin-system/src/test/java/me/zhengjie/SimpleTest.java b/eladmin-system/src/test/java/me/zhengjie/SimpleTest.java index 7ee5930..2035cd2 100644 --- a/eladmin-system/src/test/java/me/zhengjie/SimpleTest.java +++ b/eladmin-system/src/test/java/me/zhengjie/SimpleTest.java @@ -1,10 +1,10 @@ package me.zhengjie; import cn.hutool.crypto.SecureUtil; -import cn.hutool.extra.ftp.Ftp; -import cn.hutool.extra.ftp.FtpConfig; import cn.hutool.extra.ssh.JschUtil; import cn.hutool.extra.ssh.Sftp; +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; import com.jcraft.jsch.Session; import me.zhengjie.utils.DateUtil; import me.zhengjie.utils.FileUtil; @@ -13,13 +13,10 @@ import org.junit.Test; import java.io.File; import java.io.IOException; -import java.nio.charset.Charset; import java.text.SimpleDateFormat; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; -import java.util.Arrays; -import java.util.Date; -import java.util.List; +import java.util.*; public class SimpleTest { @@ -108,4 +105,27 @@ public class SimpleTest { System.out.println(FileUtil.mainName(file)); } + + + @Test + public void testCreteFile() throws IOException { + String path = "C:\\Users\\Administrator\\Desktop\\aa\\bb\\"; + +// FileUtil.mkdir(new File(path)); +// +// Files.createFile(Paths.get(path + "1.txt")); + + FileUtil.file(new File("1.txt"),"aa", "bb"); + } + + @Test + public void testPOSTBug(){ + Map map = new HashMap<>(); + map.put("taskName","1"); + HttpResponse httpResponse = HttpRequest + .post("localhost:8000/api/uploadFile/sendTask") + .form(map) + .execute(); + } + } diff --git a/eladmin-system/src/test/java/me/zhengjie/SpringApplicationTest.java b/eladmin-system/src/test/java/me/zhengjie/SpringApplicationTest.java index 9a5b7b5..eaf5466 100644 --- a/eladmin-system/src/test/java/me/zhengjie/SpringApplicationTest.java +++ b/eladmin-system/src/test/java/me/zhengjie/SpringApplicationTest.java @@ -1,15 +1,21 @@ package me.zhengjie; - +import me.zhengjie.modules.upload.service.dto.UploadFileDto; +import me.zhengjie.modules.upload.task.SaveToFileTask; import me.zhengjie.utils.SecurityUtils; import org.junit.Test; import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; +import java.sql.Timestamp; + @RunWith(SpringRunner.class) @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) public class SpringApplicationTest { + @Autowired + private SaveToFileTask saveToFileTask; /** * 获取当前的用户信息 @@ -18,4 +24,27 @@ public class SpringApplicationTest { public void testGetName(){ System.out.println(SecurityUtils.getCurrentUsername()); } + + /** + * 功能测试 - 向远程发送更新记录 + */ + @Test + public void testRemoteRec(){ + String path = "C:\\Users\\Administrator\\Desktop\\c76l.txt"; + + UploadFileDto uploadFileDto = new UploadFileDto(); + uploadFileDto.setUploadTime(new Timestamp(new java.util.Date().getTime())); + uploadFileDto.setOperation("测试用户1"); + uploadFileDto.setFileCount(1000000L); + uploadFileDto.setFileTransSuccessCount(999999L); + uploadFileDto.setUploadFileTaskName("测试任务1"); + + +// System.out.println(saveToFileTask.sendUpdatePostReq(path, uploadFileDto)); + } + + @Test + public void testSFTPTrans(){ +// saveToFileTask.transFileToOtherServer("C:\\Users\\Administrator\\Desktop\\c76l.txt"); + } }