智慧保安后台管理-外网
Administrator
2022-06-09 697391f7977fd6d5b4d52cb49dfdb29a76025505
新增定时任务处理保安员没有插入完的json文件
4 files modified
466 ■■■■ changed files
src/main/java/org/springblade/modules/FTP/Monitor.java 93 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/quartz/task/Task.java 287 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/system/controller/UserController.java 2 ●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/system/service/MyAsyncService.java 84 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/FTP/Monitor.java
@@ -287,99 +287,6 @@
    }
    /**
     * 读取内外推送的文件,每30秒读取一次
     * @return
     */
//    @Scheduled(cron = "*/30 * * * * ?")
    public static boolean isFTPFileExist() {
        FTPClient ftp = new FTPClient();
        try {
            //设置超时时间
            ftp.setDataTimeout(60000);
            //连接超时为60秒
            ftp.setConnectTimeout(60000);
            //连接
            ftp.connect(ftpHost, ftpPort);
            // 登陆
            ftp.login(ftpUserNameIn, ftpPasswordIn);
            // 检验登陆操作的返回码是否正确
            if (!FTPReply.isPositiveCompletion(ftp.getReplyCode())) {
                ftp.disconnect();
                return false;
            }
            ftp.enterLocalActiveMode();
            // 设置文件类型为二进制,与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 (FTPFile file : files) {
                    String fileName = file.getName();
                    if (fileName.contains("nq")) {
                        //把文件下载到本地
                        FtpUtil.downloadFtpFile(ftpHost, ftpUserNameIn, ftpPasswordIn, ftpPort, ftpPath, localPath, fileName);
                        //
                        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);
                            }
                        }
                        //删除本地服务器文件
                        MysqlCenlint.deletess(fileName);
                        //删除 ftp 服务器文件
//                            ftp.dele(fileName);
                        FtpUtil.deleteFile(ftpHost, ftpPort, ftpUserNameIn, ftpPasswordIn, ftpPath, fileName);
                    }
                    ftp.completePendingCommand();
                    ftp.logout();
                }
            }
        } catch (Exception e) {
            System.out.println("ftp连接失败");
            e.printStackTrace();
        } finally {
            if (ftp.isConnected()) {
                try {
                    ftp.disconnect();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return false;
    }
    /**
     * 获取保安证编号位数
     * @param uuid 随机数
     * @return
src/main/java/org/springblade/modules/quartz/task/Task.java
@@ -1,16 +1,20 @@
package org.springblade.modules.quartz.task;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
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.common.utils.DesensitizedUtil;
import org.springblade.core.tool.utils.BeanUtil;
import org.springblade.modules.FTP.*;
import org.springblade.modules.system.entity.User;
import org.springblade.modules.system.service.IUserService;
import org.springblade.modules.system.service.MyAsyncService;
import org.springblade.modules.training.service.TrainingRegistrationService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.GetMapping;
@@ -18,11 +22,11 @@
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.*;
import static org.springblade.common.config.FtpConfig.*;
import static org.springblade.common.config.FtpConfig.ftpPath;
import static org.springblade.modules.FTP.DataHandler.handlerUserInfo;
/**
 * 定时任务
@@ -37,6 +41,9 @@
    @Autowired
    private IUserService userService;
    @Autowired
    private RedisTemplate redisTemplate;
    @Autowired
@@ -68,10 +75,9 @@
    }
    /**
     * 读取内外推送的文件,每30秒读取一次
     * 读取内外推送的sql文件
     * @return
     */
//    @Scheduled(cron = "*/30 * * * * ?")
    public boolean readFile() {
        FTPClient ftp = new FTPClient();
        try {
@@ -110,8 +116,8 @@
                return false;
            }
            else {
                for (FTPFile file : files) {
                    String fileName = file.getName();
                for (int i = files.length-1; i >0 ; i--) {
                    String fileName = files[i].getName();
                    System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())+":读取到文件 = " + fileName);
                    if (fileName.contains("nq")) {
//                        InputStream is = ftp.retrieveFileStream(new String(fileName.getBytes("GBK"), FTP.DEFAULT_CONTROL_ENCODING));
@@ -171,6 +177,274 @@
    }
    /**
     * 读取内外推送的保安员单个新增文件
     * @return
     */
    public boolean readOneSecurityFile() {
        FTPClient ftp = new FTPClient();
        try {
            //设置传输超时时间为60秒
            ftp.setDataTimeout(10000);
            //连接超时为60秒
            ftp.setConnectTimeout(10000);
            //连接
            ftp.connect(ftpHost, ftpPort);
            System.out.println("ftp 连接成功!"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
            // 登陆
            ftp.login(ftpUserNameIn, ftpPasswordIn);
            // 检验登陆操作的返回码是否正确
            if (!FTPReply.isPositiveCompletion(ftp.getReplyCode())) {
                ftp.disconnect();
                return false;
            }
            ftp.enterLocalActiveMode();
            // 设置文件类型为二进制,与ASCII有区别
            ftp.setFileType(FTP.BINARY_FILE_TYPE);
            // 设置编码格式
            ftp.setControlEncoding("GBK");
            // 检验文件是否存在
            ftp.changeWorkingDirectory(ftpPath);
            // Use passive mode as default
            ftp.enterLocalPassiveMode();
            FTPFile[] files = ftp.listFiles();
            //文件个数大于10个时开始处理
            if (files.length==0 || files.length<6){
                ftp.logout();
                return false;
            }
            else {
                for (int i = files.length-1; i >0 ; i--) {
                    String fileName = files[i].getName();
                    System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())+":读取到文件 = " + fileName);
                    if (fileName.contains("ni")) {
//                        InputStream is = ftp.retrieveFileStream(new String(fileName.getBytes("GBK"), FTP.DEFAULT_CONTROL_ENCODING));
                        //把文件下载到本地
                        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);
                        //取出 key/uuid,取出结果
                        String uuid = null;
                        Result result = new Result();
                        for (Map.Entry entry : map.entrySet()) {
                            uuid = entry.getKey().toString();
                            Object value = entry.getValue();
                            //转换
                            result = JSON.parseObject(value.toString(), Result.class);
                        }
                        if (null!=result) {
                            //异步用户处理逻辑
                            myAsyncService.userInfoHandler(uuid,result);
                            //删除本地文件
                            MysqlCenlint.deletess(fileName);
                            //删除 ftp 文件
                            FtpUtil.deleteFile(ftpHost, ftpPort, ftpUserNameIn, ftpPasswordIn, ftpPath, fileName);
                        }
                        //删除本地服务器文件
                        MysqlCenlint.deletess(fileName);
                        //删除 ftp 服务器文件
//                        ftp.dele(fileName);
                        FtpUtil.deleteFile(ftpHost, ftpPort, ftpUserNameIn, ftpPasswordIn, ftpPath, fileName);
                        System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())+":成功删除ftp文件 = " + fileName);
                    }
                }
                //关闭流
                ftp.completePendingCommand();
                ftp.logout();
            }
        } catch (Exception e) {
            System.out.println("ftp连接失败");
            e.printStackTrace();
        } finally {
            if (ftp.isConnected()) {
                try {
                    ftp.disconnect();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return false;
    }
    /**
     * 读取内外推送的保安员单个新增文件
     * @return
     */
    public boolean readSecurityListFile() {
        FTPClient ftp = new FTPClient();
        try {
            //设置传输超时时间为60秒
            ftp.setDataTimeout(10000);
            //连接超时为60秒
            ftp.setConnectTimeout(10000);
            //连接
            ftp.connect(ftpHost, ftpPort);
            System.out.println("ftp 连接成功!"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
            // 登陆
            ftp.login(ftpUserNameIn, ftpPasswordIn);
            // 检验登陆操作的返回码是否正确
            if (!FTPReply.isPositiveCompletion(ftp.getReplyCode())) {
                ftp.disconnect();
                return false;
            }
            ftp.enterLocalActiveMode();
            // 设置文件类型为二进制,与ASCII有区别
            ftp.setFileType(FTP.BINARY_FILE_TYPE);
            // 设置编码格式
            ftp.setControlEncoding("GBK");
            // 检验文件是否存在
            ftp.changeWorkingDirectory(ftpPath);
            // Use passive mode as default
            ftp.enterLocalPassiveMode();
            FTPFile[] files = ftp.listFiles();
            //文件个数大于10个时开始处理
            if (files.length==0 || files.length<10){
                ftp.logout();
                return false;
            }
            else {
                for (int i = files.length-1; i >0 ; i--) {
                    String fileName = files[i].getName();
                    System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())+":读取到文件 = " + fileName);
                    if (fileName.contains("nl")) {
//                        InputStream is = ftp.retrieveFileStream(new String(fileName.getBytes("GBK"), FTP.DEFAULT_CONTROL_ENCODING));
                        //把文件下载到本地
                        long l = System.currentTimeMillis();
                        FtpUtil.downloadFtpFile(ftpHost, ftpUserNameIn, ftpPasswordIn, ftpPort, ftpPath, localPath, fileName);
                        long x = System.currentTimeMillis();
                        System.out.println("下载文件耗时 = " + (x-l)+" 毫秒");
                        //
                        String s = OutJson.TestJson(fileName);
                        //sql语句
                        String sql = OutJson.stringReplace(s);
                        //删除本地服务器文件
                        MysqlCenlint.deletess(fileName);
                        //删除 ftp 服务器文件
//                        ftp.dele(fileName);
                        FtpUtil.deleteFile(ftpHost, ftpPort, ftpUserNameIn, ftpPasswordIn, ftpPath, fileName);
                        System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())+":成功删除ftp文件 = " + fileName);
                    }
                }
                //关闭流
                ftp.completePendingCommand();
                ftp.logout();
            }
        } catch (Exception e) {
            System.out.println("ftp连接失败");
            e.printStackTrace();
        } finally {
            if (ftp.isConnected()) {
                try {
                    ftp.disconnect();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return false;
    }
    /**
     * 读取内外推送的保安员报名信息
     * @return
     */
    public boolean readSecurityApplyFile() {
        FTPClient ftp = new FTPClient();
        try {
            //设置传输超时时间为60秒
            ftp.setDataTimeout(10000);
            //连接超时为60秒
            ftp.setConnectTimeout(10000);
            //连接
            ftp.connect(ftpHost, ftpPort);
            System.out.println("ftp 连接成功!"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
            // 登陆
            ftp.login(ftpUserNameIn, ftpPasswordIn);
            // 检验登陆操作的返回码是否正确
            if (!FTPReply.isPositiveCompletion(ftp.getReplyCode())) {
                ftp.disconnect();
                return false;
            }
            ftp.enterLocalActiveMode();
            // 设置文件类型为二进制,与ASCII有区别
            ftp.setFileType(FTP.BINARY_FILE_TYPE);
            // 设置编码格式
            ftp.setControlEncoding("GBK");
            // 检验文件是否存在
            ftp.changeWorkingDirectory(ftpPath);
            // Use passive mode as default
            ftp.enterLocalPassiveMode();
            FTPFile[] files = ftp.listFiles();
            //文件个数大于10个时开始处理
            if (files.length==0 || files.length<10){
                ftp.logout();
                return false;
            }
            else {
                for (int i = files.length-1; i >0 ; i--) {
                    String fileName = files[i].getName();
                    System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())+":读取到文件 = " + fileName);
                    if (fileName.contains("nt")) {
                        //把文件下载到本地
                        long l = System.currentTimeMillis();
                        FtpUtil.downloadFtpFile(ftpHost, ftpUserNameIn, ftpPasswordIn, ftpPort, ftpPath, localPath, fileName);
                        long x = System.currentTimeMillis();
                        System.out.println("下载文件耗时 = " + (x-l)+" 毫秒");
                        //
                        String s = OutJson.TestJson(fileName);
                        //sql语句
                        String sql = OutJson.stringReplace(s);
                        //删除本地服务器文件
                        MysqlCenlint.deletess(fileName);
                        //删除 ftp 服务器文件
//                        ftp.dele(fileName);
                        FtpUtil.deleteFile(ftpHost, ftpPort, ftpUserNameIn, ftpPasswordIn, ftpPath, fileName);
                        System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())+":成功删除ftp文件 = " + fileName);
                    }
                }
                //关闭流
                ftp.completePendingCommand();
                ftp.logout();
            }
        } catch (Exception e) {
            System.out.println("ftp连接失败");
            e.printStackTrace();
        } finally {
            if (ftp.isConnected()) {
                try {
                    ftp.disconnect();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return false;
    }
    /**
     *  用户审查
     * @return
     */
@@ -192,4 +466,5 @@
        }
    }
}
src/main/java/org/springblade/modules/system/controller/UserController.java
@@ -1678,7 +1678,7 @@
                    boolean b = userService.updateById(users);
                    if (b) {
                        //异步同步到群防群控
                        myAsyncService.updateUserByQfqk(user);
                        myAsyncService.updateUserByQfqk(users);
                    }
                }else {
                    //新增
src/main/java/org/springblade/modules/system/service/MyAsyncService.java
@@ -1,10 +1,13 @@
package org.springblade.modules.system.service;
import com.alibaba.fastjson.JSON;
import net.sf.json.JSONObject;
import org.springblade.common.utils.HttpClientUtils;
import org.springblade.modules.FTP.FtpUtil;
import org.springblade.modules.FTP.Result;
import org.springblade.modules.system.dto.UserDTO;
import org.springblade.modules.system.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
@@ -13,9 +16,13 @@
import java.util.Map;
import static org.springblade.common.config.FtpConfig.qfqkBaseApiUrl;
import static org.springblade.modules.FTP.DataHandler.handlerUserInfo;
@Service
public class MyAsyncService {
    @Autowired
    private IUserService userService;
    /**
     * 用户新增
@@ -204,4 +211,81 @@
    public void FTPSecurityNumberBit(Map<String, Object> map) {
        FtpUtil.getSecurityNumberBit(map);
    }
    /**
     * 用户信息处理
     * @param uuid
     * @param result
     */
    @Async
    public void userInfoHandler(String uuid, Result result){
        //用户数处理
        User users = handlerUserInfo(uuid);
        System.out.println("用户数据 = " + users);
        //判断结果
        if (result.getCode()==200){
            //新增
            users.setId(result.getUserId());
            users.setStatus(1);
            //插入数据库
            boolean save = userService.save(users);
            if (save){
                //异步同步到群防群控
                qfqkUserSave(users);
            }
        }else if (result.getCode()==201) {
            //修改
            users.setId(result.getUserId());
            //先查询当前库是否有改用户?
            User user2 = userService.getById(result.getUserId());
            if (null!=user2) {
                //数据修改
                boolean b = userService.updateById(users);
                if (b) {
                    //异步同步到群防群控
                    updateUserByQfqk(users);
                }
            }else {
                //新增
                boolean save = userService.save(users);
                if (save){
                    //异步同步到群防群控
                    qfqkUserSave(users);
                }
            }
        }else if (result.getCode()==203){
            //保安证编号不匹配,请核实!也可通过提供保安证件信息提交核实申请! 用户为新增
            //新增
            users.setId(result.getUserId());
            //插入数据库
            boolean save = userService.save(users);
            if (save) {
                //异步同步到群防群控
                qfqkUserSave(users);
            }
        }else if (result.getCode()==204){
            //保安证编号不匹配,请核实!也可通过提供保安证件信息提交核实申请! 内网用户已存在情况
            users.setId(result.getUserId());
            //先查询当前库是否有改用户?
            User user2 = userService.getById(result.getUserId());
            //判断
            if (null!=user2) {
                //修改
                //数据修改
                boolean b = userService.updateById(users);
                if (b){
                    //异步同步到群防群控
                    updateUserByQfqk(users);
                }
            }else {
                //新增
                boolean save = userService.save(users);
                if (save){
                    //异步同步到群防群控
                    qfqkUserSave(users);
                }
            }
        }
    }
}