智慧保安后台管理-外网
Administrator
2022-04-26 6934ffe9ae5aa3e0096a7028d3b70b07e08294aa
ftp 修改
6 files modified
1 files renamed
1 files added
342 ■■■■ changed files
docker-compose.yml 15 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/FTP/DataHandler.java 49 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/FTP/FtpUtil.java 18 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/FTP/Monitor.java 108 ●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/FTP/MysqlCenlint.java 7 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/system/controller/UserController.java 101 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/system/service/MyAsyncService.java 8 ●●●●● patch | view | raw | blame | history
src/main/resources/application-test.yml 36 ●●●● patch | view | raw | blame | history
docker-compose.yml
@@ -5,24 +5,9 @@
#    image: 192.168.0.191/zhbaw/zhbaw:SNAPSHOT-$BUILD_NUMBER
    image: zhbaw:latest
    container_name: zhbaw
#    deploy:
#      replicas: 1
#      update_config:
#        parallelism: 2
#        delay: 30s
#    depends_on:
#      - redis
    ports:
      - "81:81"
    volumes:
      - /home/zhongsong/anbao:/home/zhbaw/anbao
    # 容器停止后会重启
    restart: always
#  redis:
#    image: "redis:alpine"
#    container_name: reids-alpine
#    deploy:
#      replicas: 1
#    ports:
#      - "6379:6379"
#    restart: always
src/main/java/org/springblade/modules/FTP/DataHandler.java
New file
@@ -0,0 +1,49 @@
package org.springblade.modules.FTP;
import org.springblade.core.tool.api.R;
import org.springblade.modules.system.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.util.Arrays;
import java.util.List;
/**
 * ftp 数据处理
 * @author zhongrj
 * @since 2022-04-26
 */
@Component
public class DataHandler {
    @Autowired
    private IUserService userService;
    //申明对象
    private static DataHandler handler;
    /**
     * 初始化
     */
    @PostConstruct
    public void init(){
        handler = this;
        handler.userService = this.userService;
    }
    /**
     * 数据处理
     * @param json json 字符串
     * @param uuid 随机字符串
     * @return
     */
    public static R handler(String json, String uuid){
        //读取数据
        List<String> list = Arrays.asList(json.split(";"));
        list.forEach(s -> {
            System.out.println("s = " + s);
        });
        return R.data(400,null,"未能找到对应数据");
    }
}
src/main/java/org/springblade/modules/FTP/FtpUtil.java
@@ -303,4 +303,22 @@
        MysqlCenlint.deletess("w"+response1+".json");
    }
    /**
     * 执行 对象数据(用户,报名对象信息等) 上传
     * @param obj 对象信息
     */
    public static void objectFileUpload(Object obj){
        String json1 = JSON.toJSONString(obj);
        String response1 = String.valueOf((new Date()).getTime());
        OutJson.createJsonFile(json1, localPath, "o"+response1);
        FileInputStream in1 = null;
        try {
            in1 = new FileInputStream(new File(localPath + "o"+response1+".json"));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        FtpUtil.uploadFile(ftpHost, ftpPort, ftpUserName, ftpPassword, ftpPath, "/",  "o"+response1+".json", in1);
        MysqlCenlint.deletess("o"+response1+".json");
    }
}
src/main/java/org/springblade/modules/FTP/Monitor.java
File was renamed from src/main/java/org/springblade/modules/FTP/monitor.java
@@ -4,6 +4,7 @@
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
import org.springblade.core.tool.api.R;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@@ -12,55 +13,114 @@
import static org.springblade.common.config.FtpConfig.*;
/**
 * FTP读取文件
 * @author
 * @since 2021-04-26 修改
 */
@Component
public class monitor {
public class Monitor {
    @Scheduled(cron = "*/30 * * * * ?")
    public static boolean isFTPFileExist() {
    /**
     * 读取文件(对象)
     * @param uuid 随机数
     * @return
     */
    public static R isFTPFileExist(String uuid) {
        //创建 ftp 对象
        FTPClient ftp = new FTPClient();
        boolean flag = false;
        try {
            // 连接ftp服务器
//            System.out.println("ftpHost = " + ftpHost);
            //连接
            ftp.connect(ftpHost, ftpPort);
            // 登陆
            ftp.login(ftpUserName, ftpPassword);
            // 检验登陆操作的返回码是否正确
            if (!FTPReply.isPositiveCompletion(ftp.getReplyCode())) {
                ftp.disconnect();
                return false;
                return R.data(400,null,"ftp 连接失败");
            }
            ftp.enterLocalActiveMode();
            // 设置文件类型为二进制,与ASCII有区别
            ftp.setFileType(FTP.BINARY_FILE_TYPE);
            // 设置编码格式
            ftp.setControlEncoding("GBK");
            // 提取绝对地址的目录以及文件名
            // 检验文件是否存在
            ftp.changeWorkingDirectory(ftpPath);
            FTPFile[] files = ftp.listFiles();
            if (files.length==0){
                return R.data(400,null,"未读取到文件");
            } else {
                for (FTPFile file : files){
                    String fileName = file.getName();
                    InputStream is = ftp.retrieveFileStream(new String(fileName.getBytes("GBK"), FTP.DEFAULT_CONTROL_ENCODING));
                    String substring1 = fileName.substring(0, 1);
                    if (substring1.equals("n")){
                        //把文件下载到本地
                        FtpUtil.downloadFtpFile(ftpHost, ftpUserName, ftpPassword, ftpPort, ftpPath, localPath, fileName);
                        // 解析数据
                        String s = OutJson.TestJson(fileName);
                        //数据处理
                        R result = DataHandler.handler(s,uuid);
                        //删除本地文件
                        MysqlCenlint.deletess(fileName);
                        FtpUtil.deleteFile(ftpHost, ftpPort, ftpUserName, ftpPassword, ftpPath, fileName);
                        is.close();
                        ftp.completePendingCommand();
                        if (result.getCode()==200) {
                            //返回
                            return R.data(result);
                        }
                    }
                }
                return R.data(400,null,"未读取到对应的文件");
            }
        } catch (Exception e) {
            System.out.println("ftp连接失败");
            e.printStackTrace();
        } finally {
            if (ftp != null) {
                try {
                    ftp.disconnect();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return R.data(400,null,"失败");
    }
            //ftpPath = ftpPath.replace("ftp://" + ftpHost + ":" + ftpPort + "/", "");
    /**
     * 读取文件
     * @return
     */
    //    @Scheduled(cron = "*/30 * * * * ?")
    public static boolean isFTPFileExist() {
        FTPClient ftp = new FTPClient();
        try {
            //连接
            ftp.connect(ftpHost, ftpPort);
            // 登陆
            ftp.login(ftpUserName, ftpPassword);
            // 检验登陆操作的返回码是否正确
            if (!FTPReply.isPositiveCompletion(ftp.getReplyCode())) {
                ftp.disconnect();
                return false;
            }
            //String dir = ftpPath.substring(0, ftpPath.lastIndexOf("/"));
            ftp.enterLocalActiveMode();
            // file = ftpPath.substring(ftpPath.lastIndexOf("/") + 1);
            // 设置文件类型为二进制,与ASCII有区别
            ftp.setFileType(FTP.BINARY_FILE_TYPE);
            // 进入文件所在目录,注意编码格式,以能够正确识别中文目录
            //ftp.changeWorkingDirectory(new String(dir.getBytes("GBK"), FTP.DEFAULT_CONTROL_ENCODING));
            // 设置编码格式
            ftp.setControlEncoding("GBK");
            // 检验文件是否存在
            ftp.changeWorkingDirectory(ftpPath);
src/main/java/org/springblade/modules/FTP/MysqlCenlint.java
@@ -50,9 +50,9 @@
    public static void update(String sql) {
        try {
            int ColumnCount;
            //int RowCount;
            String driver = "com.mysql.jdbc.Driver";
            String url = sqlConnect; //换成要连接的数据库信息
            //换成要连接的数据库信息
            String url = sqlConnect;
            String user = username;
            String password = FtpConfig.password;
            Class.forName ( driver );
@@ -88,7 +88,8 @@
            Connection conn = (Connection) DriverManager.getConnection ( url, user, password );
            if (!conn.isClosed ()) {
                System.out.println ( "数据库连接成功:" );
                String sqls = sql; //sql
                //sql
                String sqls = sql;
                PreparedStatement ps = conn.prepareStatement ( sqls );
                ps.executeUpdate();
                ps.close ();
src/main/java/org/springblade/modules/system/controller/UserController.java
@@ -58,6 +58,7 @@
import org.springblade.core.tool.support.Kv;
import org.springblade.core.tool.utils.*;
import org.springblade.modules.FTP.FtpUtil;
import org.springblade.modules.FTP.Monitor;
import org.springblade.modules.accreditation.entity.AccreditationRecords;
import org.springblade.modules.accreditation.service.AccreditationRecordsService;
import org.springblade.modules.dispatcher.entity.Dispatcher;
@@ -86,6 +87,7 @@
import org.springblade.modules.system.wrapper.UserWrapper;
import org.springblade.modules.training.entity.TrainingRegistration;
import org.springblade.modules.training.service.TrainingRegistrationService;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.scheduling.annotation.Async;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
@@ -142,6 +144,8 @@
    private final SecurityPaperService securityPaperService;
    private final MyAsyncService myAsyncService;
    private final RedisTemplate redisTemplate;
    /**
     * 查询单条
@@ -1283,13 +1287,6 @@
        experience.setPost("保安员");
        experienceService.save(experience);
        //发证日期处理
//        if (user.getPaperTime() == null) {
//            paperTime = "";
//        } else {
//            paperTime = new SimpleDateFormat("yyyy-MM-dd").format(user.getPaperTime());
//        }
        //头像
        if (null != user.getAvatar() && !user.getAvatar().equals("")) {
            user.setAvatar(FtpConfig.ip + user.getAvatar().substring(26));
@@ -1374,6 +1371,96 @@
    }
    /**
     * 保安员新增(外网不能存敏感数据)
     * @since 2022-04-26
     * @param userMap
     */
    @PostMapping("/securitySaves")
    @Transactional(rollbackFor = Exception.class)
    public R securitySaves(@Valid @RequestBody Map<String, Object> userMap) throws Exception {
        //获取user
        User user = JSON.parseObject(JSON.toJSONString(userMap.get("user")), User.class);
        //分配保安角色
        Role role = new Role();
        role.setRoleAlias("保安");
        Role oneRole = roleService.getOne(Condition.getQueryWrapper(role));
        user.setRoleId(oneRole.getId().toString());
        user.setDispatch("1");
        user.setExaminationType("0");
        user.setAccount(user.getCardid());
        //密码加密
        if (Func.isNotEmpty(user.getCardid())) {
            //取身份证号码后6位作为密码
            user.setPassword(DigestUtil.encrypt(user.getCardid().substring(user.getCardid().length() - 6)));
        }
        user.setCreateTime(new Date());
        user.setTenantId("000000");
        //用户新增
//        boolean status = userService.save(user);
        User user1 = user;
        //头像
        if (null != user.getAvatar() && !user.getAvatar().equals("")) {
            user1.setAvatar(FtpConfig.ip + user.getAvatar().substring(26));
        }
        //指纹
        String url = "";
        if (null != user.getFingerprint() && !user.getFingerprint().equals("")) {
            if (user.getFingerprint().length() > 100) {
                String s = uploadBase64String(user);
                String[] split = s.split(",");
                user.setFingerprint(split[0]);
                url = split[1];
                user1.setFingerprint(url);
            }
        }
        //生成随机数
        String uuid = UUID.randomUUID().toString();
        //将 user 存入 redis
        redisTemplate.opsForValue().set(uuid,JSON.toJSONString(user));
        //user1 临时设置uuid 到 reason_for_leav 离职原因字段
        user1.setReasonForLeav(uuid);
        //数据推送
        Map<String, Object> map = new HashMap<>(1);
        map.put("user",user1);
        myAsyncService.FTPObject(map);
        int count = 0;
        boolean flag = false;
        R result = new R();
        //调用ftp获取返回数据
        while (true){
            Thread.sleep(1000);
            //调用ftp获取返回数据
            result = Monitor.isFTPFileExist(uuid);
            //如果返回true,就退处
            if (result.getCode()==200){
                flag = true;
                break;
            }else {
                //计数
                count++;
                //如果超过10s 没有读取到,则退出
                if (count == 10) {
                    break;
                }
            }
        }
        if (flag) {
            //返回
            return R.data(200, null, "新增成功!");
        }else {
            //返回
            return R.data(400, null, "新增失败!");
        }
    }
    /**
     * 修改派遣记录,修改从业记录
     *
     * @param user
src/main/java/org/springblade/modules/system/service/MyAsyncService.java
@@ -106,6 +106,14 @@
    }
    /**
     * FTP 传对象
     * @param obj
     */
    public void FTPObject(Object obj) {
        FtpUtil.objectFileUpload(obj);
    }
    /**
     * FTP
     * @param s sql语句
     */
src/main/resources/application-test.yml
@@ -2,7 +2,7 @@
spring:
  redis:
    ##redis 单机环境配置
    host: 192.168.0.191
    host: 127.0.0.1
    port: 6379
    password:
    database: 0
@@ -13,9 +13,9 @@
    #  commandTimeout: 5000
  datasource:
    # MySql
    url: jdbc:mysql://192.168.0.191:3306/zhbaw?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true
    username: root
    password: root
    url: jdbc:mysql://122.112.189.74:3306/zhbaw?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true
    username: zhbaw
    password: Zhba@0426
    # rabbitmq 设置
#  rabbitmq:
#    host: 192.168.0.191
@@ -36,15 +36,15 @@
    #password: zhbaw@2021
#jedis 配置
#redis:
#  ##redis 单机环境配置
#  host: 192.168.0.191
#  port: 6379
#  password:
#  timeout: 10
#  poolMaxTotal: 1000
#  poolMaxIdle: 500
#  poolMaxWait: 500
redis:
  ##redis 单机环境配置
  host: 127.0.0.1
  port: 6379
  password:
  timeout: 10
  poolMaxTotal: 1000
  poolMaxIdle: 500
  poolMaxWait: 500
#图片批量上传zip
upload:
@@ -54,17 +54,17 @@
#ftp 设置
ftp:
  sqlConnect: jdbc:mysql://61.131.136.25:2083/zhbaw?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true
  ftpHost: 117.40.91.118
  sqlConnect: jdbc:mysql://122.112.189.74:3306/zhbaw?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: zhbain
  ftpPassword: zhbain@123
  ftpUserName: arsn
  ftpPassword: 123456
  ftpPath: anbao/
  localPath: E:\\anbao\\
  ip: http://61.131.136.25:2081
  jsonUrl: E:\\anbao\\
  username: zhbaw
  password: 123456
  password: Zhba@0426
  qfqkBaseApiUrl: http://192.168.0.198:83
#  qfqkBaseApiUrl : http://61.131.136.25:2082/api