From 8b375fe00a241b3a769b82fe3dac8d1c9dce8a02 Mon Sep 17 00:00:00 2001
From: Administrator <admin>
Date: Thu, 16 Jun 2022 14:36:07 +0800
Subject: [PATCH] 模拟考试修改

---
 src/main/java/org/springblade/modules/quartz/task/Task.java |  271 ++++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 250 insertions(+), 21 deletions(-)

diff --git a/src/main/java/org/springblade/modules/quartz/task/Task.java b/src/main/java/org/springblade/modules/quartz/task/Task.java
index aa0287e..62a5861 100644
--- a/src/main/java/org/springblade/modules/quartz/task/Task.java
+++ b/src/main/java/org/springblade/modules/quartz/task/Task.java
@@ -9,6 +9,10 @@
 import org.apache.commons.net.ftp.FTPReply;
 import org.springblade.common.utils.DesensitizedUtil;
 import org.springblade.modules.FTP.*;
+import org.springblade.modules.exam.entity.ExamAnswerRecord;
+import org.springblade.modules.exam.entity.ExamScore;
+import org.springblade.modules.exam.service.ExamAnswerRecordService;
+import org.springblade.modules.exam.service.ExamScoreService;
 import org.springblade.modules.log.entity.HandlerLog;
 import org.springblade.modules.log.service.HandlerLogService;
 import org.springblade.modules.system.entity.User;
@@ -57,6 +61,13 @@
 	@Autowired
 	private MyAsyncService myAsyncService;
 
+
+	@Autowired
+	private ExamAnswerRecordService examAnswerRecordService;
+
+	@Autowired
+	private ExamScoreService examScoreService;
+
 	public void testTask(){
         System.out.println("测试定时任务执行-----------------");
     }
@@ -88,6 +99,7 @@
 	 */
 	public boolean readFile() {
 		FTPClient ftp = new FTPClient();
+		String fileName = null;
 		try {
 			//设置传输超时时间为60秒
 			ftp.setDataTimeout(10000);
@@ -104,7 +116,8 @@
 				return false;
 			}
 
-			ftp.enterLocalActiveMode();
+			//主动模式
+//			ftp.enterLocalActiveMode();
 
 			// 设置文件类型为二进制,与ASCII有区别
 			ftp.setFileType(FTP.BINARY_FILE_TYPE);
@@ -115,17 +128,16 @@
 			// 检验文件是否存在
 			ftp.changeWorkingDirectory(ftpPath);
 
-			// Use passive mode as default
+			// Use passive mode as default 被动模式
 			ftp.enterLocalPassiveMode();
 
 			FTPFile[] files = ftp.listFiles();
 			if (files.length==0){
-				ftp.logout();
 				return false;
 			}
 			else {
 				for (int i = files.length-1; i >=0 ; i--) {
-					String fileName = files[i].getName();
+					fileName = files[i].getName();
 					String substring1 = fileName.substring(0, 2);
 					System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())+":读取到文件 = " + fileName);
 					if (substring1.contains("nq")) {
@@ -166,13 +178,19 @@
 					}
 				}
 				//关闭流
-				ftp.completePendingCommand();
-				ftp.logout();
+//				ftp.completePendingCommand();
+//				ftp.logout();
 			}
 		} catch (Exception e) {
-			System.out.println("ftp连接失败");
+			//发生异常删除文件,有可能是空文件
+			FtpUtil.deleteFile(ftpHost, ftpPort, ftpUserNameIn, ftpPasswordIn, ftpPath, fileName);
 			e.printStackTrace();
 		} finally {
+			try {
+				ftp.logout();
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
 			if (ftp.isConnected()) {
 				try {
 					ftp.disconnect();
@@ -206,7 +224,7 @@
 				return false;
 			}
 
-			ftp.enterLocalActiveMode();
+//			ftp.enterLocalActiveMode();
 
 			// 设置文件类型为二进制,与ASCII有区别
 			ftp.setFileType(FTP.BINARY_FILE_TYPE);
@@ -224,7 +242,7 @@
 			//文件个数大于10个时开始处理
 //			if (files.length==0 || files.length<10){
 			if (files.length==0){
-				ftp.logout();
+//				ftp.logout();
 				return false;
 			}
 			else {
@@ -269,13 +287,18 @@
 					}
 				}
 				//关闭流
-				ftp.completePendingCommand();
-				ftp.logout();
+//				ftp.completePendingCommand();
+//				ftp.logout();
 			}
 		} catch (Exception e) {
 			System.out.println("ftp连接失败");
 			e.printStackTrace();
 		} finally {
+			try {
+				ftp.logout();
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
 			if (ftp.isConnected()) {
 				try {
 					ftp.disconnect();
@@ -309,7 +332,7 @@
 				return false;
 			}
 
-			ftp.enterLocalActiveMode();
+//			ftp.enterLocalActiveMode();
 
 			// 设置文件类型为二进制,与ASCII有区别
 			ftp.setFileType(FTP.BINARY_FILE_TYPE);
@@ -326,7 +349,7 @@
 			FTPFile[] files = ftp.listFiles();
 			//文件个数大于10个时开始处理
 			if (files.length==0){
-				ftp.logout();
+
 				return false;
 			}
 			else {
@@ -368,14 +391,116 @@
 					}
 				}
 				//关闭流
-				ftp.completePendingCommand();
+//				ftp.completePendingCommand();
+//				ftp.logout();
+			}
+		} catch (Exception e) {
+			System.out.println("ftp连接失败");
+			e.printStackTrace();
+		} finally {
+			try {
 				ftp.logout();
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+			if (ftp.isConnected()) {
+				try {
+					ftp.disconnect();
+				} catch (IOException e) {
+					e.printStackTrace();
+				}
+			}
+		}
+		return false;
+	}
+
+
+	/**
+	 * 读取内外推送的管理员导入的保安员返回文件(带保安证编号)
+	 * @return
+	 */
+	public boolean readPaperListFile() {
+		FTPClient ftp = new FTPClient();
+		try {
+			//设置传输超时时间为60秒
+			ftp.setDataTimeout(10000);
+			//连接超时为60秒
+			ftp.setConnectTimeout(10000);
+			//连接
+			ftp.connect(ftpHost, ftpPort);
+			System.out.println("定时任务:读取内外推送的管理员导入的保安员返回文件(带保安证编号)!"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
+			// 登陆
+			ftp.login(ftpUserNameIn, ftpPasswordIn);
+			// 检验登陆操作的返回码是否正确
+			if (!FTPReply.isPositiveCompletion(ftp.getReplyCode())) {
+				ftp.disconnect();
+				return false;
+			}
+
+			// 设置文件类型为二进制,与ASCII有区别
+			ftp.setFileType(FTP.BINARY_FILE_TYPE);
+
+			// 设置编码格式
+			ftp.setControlEncoding("GBK");
+
+			// 检验文件是否存在
+			ftp.changeWorkingDirectory(ftpPath);
+
+			// Use passive mode as default
+			ftp.enterLocalPassiveMode();
+
+			FTPFile[] files = ftp.listFiles();
+			//文件处理
+			if (files.length==0){
+				return false;
+			}
+			else {
+				for (int i = files.length-1; i >=0 ; i--) {
+					String fileName = files[i].getName();
+					String substring = fileName.substring(0, 2);
+					System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())+":读取到文件 = " + fileName);
+					if (substring.contains("np")) {
+						//把文件下载到本地
+						long l = System.currentTimeMillis();
+						FtpUtil.downloadFtpFile(ftpHost, ftpUserNameIn, ftpPasswordIn, ftpPort, ftpPath, localPath, fileName);
+						long x = System.currentTimeMillis();
+						System.out.println("下载文件耗时 = " + (x-l)+" 毫秒");
+						//数据转换
+						String json = OutJson.TestJson(fileName);
+						//取出map
+						Map<String,Object> map = JSON.parseObject(json, Map.class);
+						Result result = new Result();
+						for (Map.Entry entry : map.entrySet()) {
+							Object value = entry.getValue();
+							//转换
+							result = JSON.parseObject(value.toString(), Result.class);
+						}
+						if (null!=result) {
+							try {
+								paperListInfoHandler(result);
+							}catch (Exception e) {
+								//异步用户处理逻辑
+								e.printStackTrace();
+							}
+						}
+						//删除本地文件
+						MysqlCenlint.deletess(fileName);
+						//删除 ftp 文件
+						FtpUtil.deleteFile(ftpHost, ftpPort, ftpUserNameIn, ftpPasswordIn, ftpPath, fileName);
+						System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())+":成功删除ftp文件 = " + fileName);
+					}
+				}
 			}
 		} catch (Exception e) {
 			System.out.println("ftp连接失败");
 			e.printStackTrace();
 		} finally {
 			if (ftp.isConnected()) {
+				try {
+					ftp.logout();
+				} catch (IOException e) {
+					e.printStackTrace();
+				}
 				try {
 					ftp.disconnect();
 				} catch (IOException e) {
@@ -390,7 +515,8 @@
 	 * 用户集合信息处理
 	 * @param result
 	 */
-	private void userListInfoHandler(Result result) {
+	@Async
+	public void userListInfoHandler(Result result) {
 		//获取 result
 		List<Result> data1 = result.getData();
 		System.out.println("批量导入数据 = " + data1);
@@ -484,6 +610,62 @@
 	}
 
 	/**
+	 * 管理员导入用户集合信息处理
+	 * @param result
+	 */
+	@Async
+	public void paperListInfoHandler(Result result) {
+		//获取 result
+		List<Result> data1 = result.getData();
+		System.out.println("批量导入数据 = " + data1);
+		if (data1.size()>0){
+			for (Result result1 : data1) {
+				// 取出 Msg ,此 msg 存的对应的 uuid
+				String[] split = result1.getMsg().split(",");
+				String uuid = split[0];
+				//从redis 中获取用户数据
+				Object o1 = redisTemplate.opsForValue().get(uuid);
+				User user0 = JSON.parseObject(o1.toString(), User.class);
+				// 从redis 中获取对应的用户信息,脱敏处理过
+				User user = handlerUserInfo(uuid);
+				if (result1.getCode()==200){
+					user.setId(result1.getUserId());
+					user.setSecuritynumber(split[1]);
+					user.setHold("1");
+					user.setExaminationType("0");
+					boolean save = userService.save(user);
+					if (save){
+						//数据异步同步到群防群控
+						myAsyncService.qfqkUserSave(user);
+					}
+				}
+				if (result1.getCode()==202){
+					//已在其他单位存在
+					HandlerLog handlerLog = new HandlerLog();
+					handlerLog.setCreateTime(new Date());
+					handlerLog.setDeptId(user.getDeptId());
+					handlerLog.setOperatorTime(user.getCreateTime());
+					handlerLog.setRemark("用户["+DesensitizedUtil.desensitizedIdNumberBy4(user0.getCardid())+"]已在其他单位存在");
+					handlerLog.setType(2);
+					//插入记录
+					handlerLogService.save(handlerLog);
+				}
+				if (result1.getCode()==205){
+					//审查异常
+					HandlerLog handlerLog = new HandlerLog();
+					handlerLog.setCreateTime(new Date());
+					handlerLog.setDeptId(user.getDeptId());
+					handlerLog.setOperatorTime(user.getCreateTime());
+					handlerLog.setRemark("用户["+DesensitizedUtil.desensitizedIdNumberBy4(user0.getCardid())+"]导入失败,该人员审查异常!");
+					handlerLog.setType(2);
+					//插入记录
+					handlerLogService.save(handlerLog);
+				}
+			}
+		}
+	}
+
+	/**
 	 * 读取内外推送的保安员报名信息
 	 * @return
 	 */
@@ -505,7 +687,7 @@
 				return false;
 			}
 
-			ftp.enterLocalActiveMode();
+//			ftp.enterLocalActiveMode();
 
 			// 设置文件类型为二进制,与ASCII有区别
 			ftp.setFileType(FTP.BINARY_FILE_TYPE);
@@ -514,7 +696,7 @@
 			ftp.setControlEncoding("GBK");
 
 			// 检验文件是否存在
-			ftp.changeWorkingDirectory(ftpPath);
+//			ftp.changeWorkingDirectory(ftpPath);
 
 			// Use passive mode as default
 			ftp.enterLocalPassiveMode();
@@ -522,7 +704,7 @@
 			FTPFile[] files = ftp.listFiles();
 			//文件个数大于10个时开始处理
 			if (files.length==0){
-				ftp.logout();
+//				ftp.logout();
 				return false;
 			}
 			else {
@@ -560,13 +742,18 @@
 					}
 				}
 				//关闭流
-				ftp.completePendingCommand();
-				ftp.logout();
+//				ftp.completePendingCommand();
+//				ftp.logout();
 			}
 		} catch (Exception e) {
 			System.out.println("ftp连接失败");
 			e.printStackTrace();
 		} finally {
+			try {
+				ftp.logout();
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
 			if (ftp.isConnected()) {
 				try {
 					ftp.disconnect();
@@ -582,7 +769,8 @@
 	 * 报名信息处理
 	 * @param result
 	 */
-	private void applyHandler(String uuid,Result result) {
+	@Async
+	public void applyHandler(String uuid,Result result) {
 		//取出培训学校id
 		//从redis 中获取用户数据
 		String s = redisTemplate.opsForValue().get(uuid).toString();
@@ -844,5 +1032,46 @@
 		}
 	}
 
+	/**
+	 * 考试成绩同步
+	 * @return
+	 */
+	public void examScoreSync() {
+		System.out.println("考试成绩同步"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
+		//查询当天的考试成绩
+		List<ExamScore> examScoreList = examScoreService.getExamScoreList();
+		if (examScoreList.size()>0) {
+			//遍历计算成绩
+			for (ExamScore examScore : examScoreList) {
+				ExamAnswerRecord record = new ExamAnswerRecord();
+				record.setScoreId(examScore.getId());
+				List<ExamAnswerRecord> list = examAnswerRecordService.list(new QueryWrapper<>(record));
+				if (list.size()>0){
+					int num = 0;
+					for (ExamAnswerRecord examAnswerRecord : list) {
+						num = num + examAnswerRecord.getAnswerScore();
+						examScore.setExamEndTime(examAnswerRecord.getAnswerTime());
+					}
+					examScore.setTheoryGrade(num);
+					examScore.setAllGrade(Math.round(num/2));
+					//设置状态
+					if (num >= 60) {
+						examScore.setQualified(2);
+					} else {
+						examScore.setQualified(1);
+					}
+					String s1 =
+						"update exam_score set exam_id = " + examScore.getExamId() +
+							",theory_grade = " + "'" + examScore.getTheoryGrade() + "'" +
+							",all_grade = " + "'" + examScore.getAllGrade() + "'" +
+							",exam_end_time = " + "'" + new SimpleDateFormat("yyyy-MM-dd HH:mm:dd").format(examScore.getExamEndTime()) + "'" +
+							",qualified = " + "'" + examScore.getQualified() + "'" +
+							" " + "where id = " + "'" + examScore.getId() + "'";
+					myAsyncService.FTP(s1);
+				}
+			}
+		}
+	}
+
 
 }

--
Gitblit v1.9.3