src/main/java/org/springblade/common/utils/SecurityPaperUtil.java
New file @@ -0,0 +1,24 @@ package org.springblade.common.utils; import java.util.Calendar; import java.util.Date; /** * 保安证编号生成 * @author zhongrj * @since 2021-08-11 */ public class SecurityPaperUtil { private final static String pre = "赣洪"; public static String getSecurityPaper(){ //获取当前时间 Date date = new Date(); Calendar instance = Calendar.getInstance(); instance.setTime(date); //获取年份 int year = instance.get(Calendar.YEAR); return pre+year; } } src/main/java/org/springblade/modules/FTP/DataHanlder.java
@@ -2,9 +2,15 @@ import com.alibaba.fastjson.JSON; import org.springblade.common.utils.DesensitizedUtil; import org.springblade.common.utils.SecurityPaperUtil; import org.springblade.core.log.exception.ServiceException; import org.springblade.core.mp.support.Condition; import org.springblade.core.tool.utils.BeanUtil; import org.springblade.modules.dispatcher.entity.Dispatcher; import org.springblade.modules.dispatcher.service.IDispatcherService; import org.springblade.modules.exam.entity.ExamPaper; import org.springblade.modules.exam.entity.ExamScore; import org.springblade.modules.exam.service.ExamScoreService; import org.springblade.modules.experience.entity.Experience; import org.springblade.modules.experience.service.IExperienceService; import org.springblade.modules.securitypaper.entity.SecurityPaper; @@ -13,9 +19,11 @@ import org.springblade.modules.system.entity.User; import org.springblade.modules.system.service.IDeptService; import org.springblade.modules.system.service.IUserService; import org.springblade.modules.system.vo.UserVO; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.util.*; @@ -43,10 +51,13 @@ @Autowired private IDeptService iDeptService; @Autowired private ExamScoreService examScoreService; /** /** * 初始化 */ @PostConstruct @@ -130,6 +141,133 @@ } /** * 考试实操成绩处理 * @param json */ public static void handlerUserExamScore(String json) { Map map = JSON.parseObject(json, Map.class); //取出 key(uuid) String key = map.keySet().toArray()[0].toString(); Object value = map.get(key); //得到考试成绩 ExamScore examScore = JSON.parseObject(value.toString(), ExamScore.class); //处理实操考试成绩 examScoreHandler(examScore); } /** * 实操成绩处理 * @param examScore0 */ private static void examScoreHandler(ExamScore examScore0) { //取第一个 List<ExamScore> examScoreList = hanlder.examScoreService.getExamScoreInfoByIdCardNo(examScore0.getCandidateNo(), new SimpleDateFormat("yyyy-MM-dd").format(examScore0.getExamTime())); if (examScoreList.size()>0) { //遍历集合 examScoreList.forEach(examScore -> { if (null != examScore) { //查询当前保安信息 UserVO user = hanlder.userService.getUserAgeById(Long.parseLong(examScore.getUserId())); //设置实操成绩 examScore.setLearnGrade(examScore0.getLearnGrade()); if (null != examScore.getTheoryGrade()) { if (examScore.getTheoryGrade() >= 60 && examScore.getLearnGrade() >= 60) { //合格 examScore.setQualified(0); //修改制证状态为未制证 user.setUserType(7); //如果已有保安证编号,不更新用户信息 if (null == user.getSecuritynumber() || user.getSecuritynumber().equals("")) { //去生成保安证编号 String pre = SecurityPaperUtil.getSecurityPaper(); //查询当前年份已有的保安证编号 int count = hanlder.userService.getSecurityPaperCount(pre); String result = null; if (count == 0) { result = pre + "00001"; } else { //格式化 DecimalFormat decimalFormat = new DecimalFormat("00000"); count++; result = pre + (decimalFormat.format(count)); } //脱敏处理 user.setSecuritynumber(DesensitizedUtil.desensitizedSecurityNumber(result)); //修改为持证保安 user.setHold("1"); user.setUpdateTime(new Date()); //更新保安数据 hanlder.userService.updateById(user); //生成保安证的同时向保安证管理表中插入一条数据 SecurityPaper securityPaper = new SecurityPaper(); securityPaper.setUserId(user.getId()); securityPaper.setNumber(result); securityPaper.setCreateTime(new Date()); securityPaper.setIdCardNo(user.getCardid()); securityPaper.setPeopleName(user.getRealName()); securityPaper.setExamId(Long.parseLong(examScore.getExamId())); securityPaper.setApplyId(examScore.getApplyId()); securityPaper.setSource(1); hanlder.securityPaperService.save(securityPaper); //内网同步 String s1 = "update blade_user set hold = " + "'" + user.getHold() + "'" + ",securitynumber = " + "'" + DesensitizedUtil.desensitizedSecurityNumber(result) + "'" + ",update_time = " + "'" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(user.getUpdateTime()) + "'" + ",user_type = " + "'" + user.getUserType() + "'" + " " + "where id = " + "'" + user.getId() + "'"; hanlder.myAsyncService.FTP(s1); } } } else { //不合格 examScore.setQualified(1); } //总成绩 if (user.getAge() <= 50) { if (null != examScore.getTheoryGrade()) { examScore.setAllGrade(Math.round((examScore.getTheoryGrade() + examScore0.getLearnGrade()) / 2)); } else { examScore.setAllGrade(Math.round(examScore0.getLearnGrade() / 2)); } } if (user.getAge() > 50) { if (null != examScore.getTheoryGrade()) { examScore.setAllGrade(Integer.parseInt(String.valueOf(Math.round(examScore.getTheoryGrade() * 0.5))) + Integer.parseInt(String.valueOf(Math.round(examScore0.getLearnGrade() * 0.5)))); } else { examScore.setAllGrade(Math.round(examScore0.getLearnGrade() / 2)); } } //外网同步 String s1 = "update exam_score set learn_grade = " + "'" + examScore.getLearnGrade() + "'" + ",all_grade = " + "'" + examScore.getAllGrade() + "'" + ",qualified = " + "'" + examScore.getQualified() + "'" + " " + "where id = " + "'" + examScore.getId() + "'"; hanlder.myAsyncService.FTP(s1); //更新成绩数据 hanlder.examScoreService.updateById(examScore); } }); }else { //根据身份证号查询用户 User user0 = hanlder.userService.getUserInfoByIdCardNo(examScore0.getCandidateNo()); if (null == user0) { String msg = "没有找到用户:[" + examScore0.getCandidateNo() + "]相关考试成绩信息,请检查身份证是否有误!"; //向外网推送 Result result = new Result(200,null,msg); Map<String, Object> map = new HashMap<>(1); map.put("key", result); //向外网发送数据 FtpUtil.objectFileUploadExamScore(map); } } } /** * 数据处理(集合) * @param json */ src/main/java/org/springblade/modules/FTP/FtpUtil.java
@@ -47,6 +47,10 @@ FTPClient ftpClient = null; try { ftpClient = new FTPClient(); //设置超时时间 ftpClient.setDataTimeout(10000); //连接超时为60秒 ftpClient.setConnectTimeout(10000); ftpClient.connect(ftpHost, ftpPort);// 连接FTP服务器 ftpClient.login(ftpUserNameOut, ftpPasswordOut);// 登陆FTP服务器 if (!FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) { @@ -418,6 +422,24 @@ } /** * 执行 对象数据(实操成绩导入反馈) 上传 * @param obj 对象信息 */ public static void objectFileUploadExamScore(Object obj){ String json1 = JSON.toJSONString(obj); String response1 = String.valueOf((new Date()).getTime()); OutJson.createJsonFile(json1, localPath, "ne"+response1); FileInputStream in1 = null; try { in1 = new FileInputStream(new File(localPath + "ne"+response1+".json")); } catch (FileNotFoundException e) { e.printStackTrace(); } FtpUtil.uploadFile(ftpHost, ftpPort, ftpUserNameOut, ftpPasswordOut, ftpPath, "/", "ne"+response1+".json", in1); MysqlCenlint.deletess("ne"+response1+".json"); } /** * 返回报名信息结果 * @param obj */ src/main/java/org/springblade/modules/exam/mapper/ExamScoreMapper.java
@@ -38,4 +38,11 @@ * @return */ List<ExportExamScoreExcel> exportExamScoreList(@Param("examScore")ExamScoreVO examScoreVO); /** * 根据身份证号导入实操成绩 * @param idCardNo 身份证号 * @return */ List<ExamScore> getExamScoreInfoByIdCardNo(@Param("idCardNo")String idCardNo,@Param("startTime")String startTime); } src/main/java/org/springblade/modules/exam/mapper/ExamScoreMapper.xml
@@ -141,4 +141,23 @@ </if> order by es.id desc </select> <!--根据用户身份证号查询考试成绩--> <select id="getExamScoreInfoByIdCardNo" resultType="org.springblade.modules.exam.entity.ExamScore"> select es.* from exam_score es left join blade_user bu on bu.id = es.user_id left join ksxt_exam ke on ke.id = es.exam_id where bu.cardid = #{idCardNo} and DATE_FORMAT(ke.start_time,'%Y-%m-%d') = #{startTime} </select> </mapper> src/main/java/org/springblade/modules/exam/service/ExamScoreService.java
@@ -42,4 +42,12 @@ * @return */ List<ExportExamScoreExcel> exportExamScoreList(ExamScoreVO examScoreVO); /** * 根据时间查看考试成绩 * @param candidateNo * @param time * @return */ List<ExamScore> getExamScoreInfoByIdCardNo(String candidateNo, String time); } src/main/java/org/springblade/modules/exam/service/impl/ExamScoreServiceImpl.java
@@ -133,4 +133,15 @@ public List<ExportExamScoreExcel> exportExamScoreList(ExamScoreVO examScoreVO) { return baseMapper.exportExamScoreList(examScoreVO); } /** * 根据时间查看考试成绩 * @param candidateNo * @param time * @return */ @Override public List<ExamScore> getExamScoreInfoByIdCardNo(String candidateNo, String time) { return baseMapper.getExamScoreInfoByIdCardNo(candidateNo,time); } } src/main/java/org/springblade/modules/quartz/task/Task.java
@@ -69,111 +69,126 @@ } else { for (FTPFile file : files) { fileName = file.getName(); InputStream is = ftp.retrieveFileStream(new String(fileName.getBytes("GBK"), FTP.DEFAULT_CONTROL_ENCODING)); if (null == is) { ftp.disconnect(); } else { String substring1 = fileName.substring(0, 1); String substring1 = fileName.substring(0, 1); if (substring1.equals("w")) { //把文件下载到本地 FtpUtil.downloadFtpFile(ftpHost, ftpUserName, ftpPassword, ftpPort, ftpPath, localPath, fileName); if (substring1.equals("w")) { String s = OutJson.TestJson(fileName); //sql语句 String sql = OutJson.stringReplace(s); String[] split = sql.split(";");//以逗号分割 for (String sqls : split) { //判断是否是新增,删除,修改 String substring = sqls.substring(0, 2); //新增 if (substring.equals("in")) { //运行sql语句 MysqlCenlint.inster(sqls); } //修改 else if (substring.equals("up")) { MysqlCenlint.update(sqls); } //删除 else { MysqlCenlint.delete(sqls); } String s = OutJson.TestJson(fileName); //sql语句 String sql = OutJson.stringReplace(s); String[] split = sql.split(";");//以逗号分割 for (String sqls : split) { //判断是否是新增,删除,修改 String substring = sqls.substring(0, 2); //新增 if (substring.equals("in")) { //运行sql语句 MysqlCenlint.inster(sqls); } //删除本地文件 MysqlCenlint.deletess(fileName); //删除 ftp 文件 // ftp.dele(fileName); FtpUtil.deleteFile(ftpHost, ftpPort, ftpUserName, ftpPassword, "anbao/", fileName); }else if(substring1.equals("o")){ //获取对象字符串 String json = OutJson.TestJson(fileName); //数据处理 DataHanlder.handler(json); //删除本地文件 MysqlCenlint.deletess(fileName); //删除 ftp 文件 // ftp.dele(fileName); FtpUtil.deleteFile(ftpHost, ftpPort, ftpUserName, ftpPassword, "anbao/", fileName); }else if(substring1.equals("l")){ //用户集合数据,批量导入用户 //获取对象字符串 String json = OutJson.TestJson(fileName); //数据处理 DataHanlder.handlerList(json); //删除本地文件 MysqlCenlint.deletess(fileName); //删除 ftp 文件 // ftp.dele(fileName); FtpUtil.deleteFile(ftpHost, ftpPort, ftpUserName, ftpPassword, "anbao/", fileName); }else if(substring1.equals("t")){ //培训报名数据 //获取对象字符串 String json = OutJson.TestJson(fileName); //数据处理 DataHanlder.handlerListTrain(json); //删除本地文件 MysqlCenlint.deletess(fileName); //删除 ftp 文件 // ftp.dele(fileName); FtpUtil.deleteFile(ftpHost, ftpPort, ftpUserName, ftpPassword, "anbao/", fileName); }else if(substring1.equals("s")){ //获取保安员证编号数据 //获取对象字符串 String json = OutJson.TestJson(fileName); //数据处理 DataHanlder.handlerSecurityNumerBit(json); //删除本地文件 MysqlCenlint.deletess(fileName); //删除 ftp 文件 // ftp.dele(fileName); FtpUtil.deleteFile(ftpHost, ftpPort, ftpUserName, ftpPassword, "anbao/", fileName); }else if(substring1.equals("u")){ //保安员审查 //获取对象字符串 String json = OutJson.TestJson(fileName); //数据处理 DataHanlder.handlerUserExamine(json); //删除本地文件 MysqlCenlint.deletess(fileName); //删除 ftp 文件 // ftp.dele(fileName); FtpUtil.deleteFile(ftpHost, ftpPort, ftpUserName, ftpPassword, "anbao/", fileName); //修改 else if (substring.equals("up")) { MysqlCenlint.update(sqls); } //删除 else { MysqlCenlint.delete(sqls); } } else if(substring1.equals("f")){ //把文件下载到本地(图片文件类),测试内外网使用同一台服务器 FtpUtil.downloadFtpFile(ftpHost, ftpUserName, ftpPassword, ftpPort, ftpPath, minioPath, fileName); FtpUtil.deleteFile(ftpHost, ftpPort, ftpUserName, ftpPassword, "anbao/", fileName); // ftp.dele(fileName); } // else { // //把文件下载到本地(图片文件类),ftp 内外网服务器分开时使用 // FtpUtil.downloadFtpFile(ftpHost, ftpUserName, ftpPassword, ftpPort, ftpPath, minioPath, fileName); // FtpUtil.deleteFile(ftpHost, ftpPort, ftpUserName, ftpPassword, "anbao/", fileName); // } //删除本地文件,ftp 文件没有对应读取的不删除 //删除本地文件 MysqlCenlint.deletess(fileName); is.close(); ftp.completePendingCommand(); //删除 ftp 文件 // ftp.dele(fileName); FtpUtil.deleteFile(ftpHost, ftpPort, ftpUserName, ftpPassword, "anbao/", fileName); } if(substring1.equals("o")){ //把文件下载到本地 FtpUtil.downloadFtpFile(ftpHost, ftpUserName, ftpPassword, ftpPort, ftpPath, localPath, fileName); //获取对象字符串 String json = OutJson.TestJson(fileName); //数据处理 DataHanlder.handler(json); //删除本地文件 MysqlCenlint.deletess(fileName); //删除 ftp 文件 // ftp.dele(fileName); FtpUtil.deleteFile(ftpHost, ftpPort, ftpUserName, ftpPassword, "anbao/", fileName); } if(substring1.equals("l")){ //把文件下载到本地 FtpUtil.downloadFtpFile(ftpHost, ftpUserName, ftpPassword, ftpPort, ftpPath, localPath, fileName); //用户集合数据,批量导入用户 //获取对象字符串 String json = OutJson.TestJson(fileName); //数据处理 DataHanlder.handlerList(json); //删除本地文件 MysqlCenlint.deletess(fileName); //删除 ftp 文件 // ftp.dele(fileName); FtpUtil.deleteFile(ftpHost, ftpPort, ftpUserName, ftpPassword, "anbao/", fileName); } if(substring1.equals("t")){ //把文件下载到本地 FtpUtil.downloadFtpFile(ftpHost, ftpUserName, ftpPassword, ftpPort, ftpPath, localPath, fileName); //培训报名数据 //获取对象字符串 String json = OutJson.TestJson(fileName); //数据处理 DataHanlder.handlerListTrain(json); //删除本地文件 MysqlCenlint.deletess(fileName); //删除 ftp 文件 // ftp.dele(fileName); FtpUtil.deleteFile(ftpHost, ftpPort, ftpUserName, ftpPassword, "anbao/", fileName); } if(substring1.equals("s")){ //把文件下载到本地 FtpUtil.downloadFtpFile(ftpHost, ftpUserName, ftpPassword, ftpPort, ftpPath, localPath, fileName); //获取保安员证编号数据 //获取对象字符串 String json = OutJson.TestJson(fileName); //数据处理 DataHanlder.handlerSecurityNumerBit(json); //删除本地文件 MysqlCenlint.deletess(fileName); //删除 ftp 文件 // ftp.dele(fileName); FtpUtil.deleteFile(ftpHost, ftpPort, ftpUserName, ftpPassword, "anbao/", fileName); } if(substring1.equals("u")){ //把文件下载到本地 FtpUtil.downloadFtpFile(ftpHost, ftpUserName, ftpPassword, ftpPort, ftpPath, localPath, fileName); //保安员审查 //获取对象字符串 String json = OutJson.TestJson(fileName); //数据处理 DataHanlder.handlerUserExamine(json); //删除本地文件 MysqlCenlint.deletess(fileName); //删除 ftp 文件 FtpUtil.deleteFile(ftpHost, ftpPort, ftpUserName, ftpPassword, "anbao/", fileName); } //考试实操成绩导入 if(substring1.equals("e")){ //把文件下载到本地 FtpUtil.downloadFtpFile(ftpHost, ftpUserName, ftpPassword, ftpPort, ftpPath, localPath, fileName); //获取对象字符串 String json = OutJson.TestJson(fileName); //考试实操成绩数据处理 DataHanlder.handlerUserExamScore(json); //删除本地文件 MysqlCenlint.deletess(fileName); //删除 ftp 文件 FtpUtil.deleteFile(ftpHost, ftpPort, ftpUserName, ftpPassword, "anbao/", fileName); } if(substring1.equals("f")){ //把文件下载到本地(图片文件类),测试内外网使用同一台服务器 FtpUtil.downloadFtpFile(ftpHost, ftpUserName, ftpPassword, ftpPort, ftpPath, minioPath, fileName); FtpUtil.deleteFile(ftpHost, ftpPort, ftpUserName, ftpPassword, "anbao/", fileName); } //删除本地文件,ftp 文件没有对应读取的不删除 MysqlCenlint.deletess(fileName); // ftp.completePendingCommand(); } return true; } @@ -182,6 +197,11 @@ // FtpUtil.deleteFile(ftpHost, ftpPort, ftpUserName, ftpPassword, "anbao/", fileName); e.printStackTrace(); } finally { try { ftp.logout(); } catch (IOException e) { e.printStackTrace(); } //如果ftp 没有关闭,则关闭ftp if (ftp.isConnected()) { try { src/main/java/org/springblade/modules/system/mapper/UserMapper.java
@@ -143,4 +143,13 @@ * @return */ UserDTO getSecurityInfoByIdCardNo(@Param("user")User user); /** * 通过 身份证号查询用户信息 * @param idCardNo 身份证号 * @return */ User getUserInfoByIdCardNo(String idCardNo); UserVO getUserAgeById(@Param("userId") long id); } src/main/java/org/springblade/modules/system/mapper/UserMapper.xml
@@ -572,4 +572,24 @@ and bu.status = 1 and bu.cardid = #{user.cardid} </select> <!--通过 身份证号查询用户信息--> <select id="getUserInfoByIdCardNo" resultType="org.springblade.modules.system.entity.User"> SELECT id, name, real_name RealName,securitynumber FROM blade_user where 1=1 and is_deleted = 0 and status = 1 and cardid = #{param1} </select> <!--计算保安人员年龄--> <select id="getUserAgeById" resultType="org.springblade.modules.system.vo.UserVO"> select id,real_name realName,ifnull(TIMESTAMPDIFF(YEAR, SUBSTRING(cardid, 7, 8), CURDATE()),0) AS age,securitynumber,cardid from blade_user where id = #{userId} </select> </mapper> src/main/java/org/springblade/modules/system/service/IUserService.java
@@ -275,4 +275,18 @@ * @return */ UserDTO getSecurityInfoByIdCardNo(User user); /** * 根据身份证号查询用户 * @param candidateNo * @return */ User getUserInfoByIdCardNo(String candidateNo); /** * 查询当前保安信息 * @param id * @return */ UserVO getUserAgeById(long id); } src/main/java/org/springblade/modules/system/service/impl/UserServiceImpl.java
@@ -541,4 +541,25 @@ public UserDTO getSecurityInfoByIdCardNo(User user) { return baseMapper.getSecurityInfoByIdCardNo(user); } /** * 根据身份证号查询用户 * @param candidateNo * @return */ @Override public User getUserInfoByIdCardNo(String candidateNo) { return baseMapper.getUserInfoByIdCardNo(candidateNo); } /** * 计算保安人员年龄 * * @param id * @return */ @Override public UserVO getUserAgeById(long id) { return baseMapper.getUserAgeById(id); } } src/main/resources/application-test.yml
@@ -16,13 +16,13 @@ datasource: # MySql url: jdbc:mysql://61.131.136.25:2083/zhba-test?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true url: jdbc:mysql://61.131.136.25:2083/zhba?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true username: root password: ZHba@0112 #ftp 设置 ftp: sqlConnect: jdbc:mysql://61.131.136.25:2083/zhba-test?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true sqlConnect: jdbc:mysql://61.131.136.25:2083/zhba?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true ftpHost: 192.168.0.198 ftpPort: 21 ftpUserName: arsn