package org.springblade.modules.quartz.task; import org.apache.commons.net.ftp.FTP; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPFile; import org.apache.commons.net.ftp.FTPReply; import org.springblade.modules.FTP.*; import org.springblade.modules.training.service.TrainingRegistrationService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import org.springframework.web.bind.annotation.GetMapping; import java.io.IOException; import java.io.InputStream; import java.text.SimpleDateFormat; import java.util.Date; import static org.springblade.common.config.FtpConfig.*; import static org.springblade.common.config.FtpConfig.ftpPath; /** * 定时任务 * @author zhongrj * @since 2022-03-10 */ @Component("task") public class Task { @Autowired private TrainingRegistrationService trainingRegistrationService; public void testTask(){ System.out.println("测试定时任务执行-----------------"); } /** * 定时任务,每天凌晨1点执行一次, * 自动处理之前报了名,申请了考试又没有去考试的,做缺考标记,并将报名状态修改为已取消报名 */ // @Scheduled(cron = "0 0 23 * * ?") public void examApplyStatus(){ System.out.println("定时任务1:执行时间:"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); //自动处理之前报了名,申请了考试又没有去考试的,做缺考标记,并将报名状态修改为已取消报名 trainingRegistrationService.examApplyStatus(); } /** * 定时任务,处理考试中的人员 */ // @Scheduled(cron = "0 0 22 * * ?") public void examLoading(){ System.out.println("定时任务2:执行时间:"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); //自动处理之前报了名,考试忘记提交或者中断考试的 trainingRegistrationService.examLoading(); } /** * 读取文件(用户对象)单用户新增 * @return */ public Result readFile() { String uuid = "123-456"; //创建 ftp 对象 FTPClient ftp = new FTPClient(); boolean flag = false; try { //连接 ftp.connect(ftpHost, ftpPort); // 登陆 ftp.login(ftpUserNameIn, ftpPasswordIn); // 检验登陆操作的返回码是否正确 if (!FTPReply.isPositiveCompletion(ftp.getReplyCode())) { ftp.disconnect(); return new Result(400,null,"ftp 连接失败",null); } ftp.enterLocalActiveMode(); // 设置文件类型为二进制,与ASCII有区别 ftp.setFileType(FTP.BINARY_FILE_TYPE); // 设置编码格式 ftp.setControlEncoding("GBK"); // 检验文件是否存在 boolean ftpFile = ftp.changeWorkingDirectory(ftpPath); System.out.println("检验文件是否存在 = " + ftpFile); FTPFile[] files = ftp.listFiles(); System.out.println("files = " + files); System.out.println("开始读取内网回传消息"); if (files.length==0){ System.out.println("未读取到文件"); return new Result(400,null,"未读取到文件",null); } else { System.out.println("-----有读取到文件--------"); for (FTPFile file : files){ String fileName = file.getName(); System.out.println("fileName = " + fileName); InputStream is = ftp.retrieveFileStream(new String(fileName.getBytes("GBK"), FTP.DEFAULT_CONTROL_ENCODING)); String substring1 = fileName.substring(0, 1); System.out.println("substring1 = " + substring1); if (substring1.equals("n")){ System.out.println("-------接收到内网回传的文件: " + substring1); //把文件下载到本地 FtpUtil.downloadFtpFile(ftpHost, ftpUserNameIn, ftpPasswordIn, ftpPort, ftpPath, localPath, fileName); // 解析数据 String s = OutJson.TestJson(fileName); //数据处理 Result result = DataHandler.handler(s,uuid); //删除本地文件 MysqlCenlint.deletess(fileName); FtpUtil.deleteFile(ftpHost, ftpPort, ftpUserNameIn, ftpPasswordIn, ftpPath, fileName); is.close(); ftp.completePendingCommand(); if (result.getCode()==200) { //返回 return new Result(200,null,"新增成功",null); } if (result.getCode()==201) { //返回 return new Result(201,null,"修改成功",null); } if (result.getCode()==202) { //返回 return new Result(202,null,result.getMsg(),null); } if (result.getCode()==203) { //返回 return new Result(203,null,result.getMsg(),null); } } } System.out.println("未读取到对应的文件"); return new Result(400,null,"未读取到对应的文件",null); } } catch (Exception e) { System.out.println("ftp连接失败"); e.printStackTrace(); } finally { if (ftp != null) { try { ftp.disconnect(); } catch (IOException e) { e.printStackTrace(); } } } return new Result(400,null,"失败",null); } }