| docker-compose.yml | ●●●●● patch | view | raw | blame | history | |
| src/main/java/org/springblade/modules/FTP/DataHandler.java | ●●●●● patch | view | raw | blame | history | |
| src/main/java/org/springblade/modules/FTP/FtpUtil.java | ●●●●● patch | view | raw | blame | history | |
| src/main/java/org/springblade/modules/FTP/Monitor.java | ●●●●● patch | view | raw | blame | history | |
| src/main/java/org/springblade/modules/FTP/MysqlCenlint.java | ●●●●● patch | view | raw | blame | history | |
| src/main/java/org/springblade/modules/system/controller/UserController.java | ●●●●● patch | view | raw | blame | history | |
| src/main/java/org/springblade/modules/system/service/MyAsyncService.java | ●●●●● patch | view | raw | blame | history | |
| src/main/resources/application-test.yml | ●●●●● 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