.idea/compiler.xml
@@ -2,6 +2,7 @@ <project version="4"> <component name="CompilerConfiguration"> <annotationProcessing> <profile default="true" name="Default" enabled="true" /> <profile name="Maven default annotation processors profile" enabled="true"> <sourceOutputDir name="target/generated-sources/annotations" /> <sourceTestOutputDir name="target/generated-test-sources/test-annotations" /> .idea/libraries/Maven__commons_net_commons_net_3_8_0.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,13 @@ <component name="libraryTable"> <library name="Maven: commons-net:commons-net:3.8.0"> <CLASSES> <root url="jar://$MAVEN_REPOSITORY$/commons-net/commons-net/3.8.0/commons-net-3.8.0.jar!/" /> </CLASSES> <JAVADOC> <root url="jar://$MAVEN_REPOSITORY$/commons-net/commons-net/3.8.0/commons-net-3.8.0-javadoc.jar!/" /> </JAVADOC> <SOURCES> <root url="jar://$MAVEN_REPOSITORY$/commons-net/commons-net/3.8.0/commons-net-3.8.0-sources.jar!/" /> </SOURCES> </library> </component> server/dmvisit_admin/src/main/java/com/doumee/api/business/HkSyncController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,45 @@ package com.doumee.api.business; import com.doumee.api.BaseController; import com.doumee.core.annotation.excel.ExcelExporter; import com.doumee.core.annotation.pr.PreventRepeat; import com.doumee.core.haikang.model.param.request.AcsDeviceListRequest; import com.doumee.core.haikang.service.HKService; import com.doumee.core.model.ApiResponse; import com.doumee.core.model.PageData; import com.doumee.core.model.PageWrap; import com.doumee.dao.business.model.Device; import com.doumee.service.business.DeviceService; import com.doumee.service.business.HkSyncService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse; import java.util.ArrayList; import java.util.List; /** * @author æ±è¹è¹ * @date 2023/11/30 15:33 */ @Api(tags = "æµ·åº·æ°æ®åæ¥æ¥å£") @RestController @RequestMapping("/business/hksync") public class HkSyncController extends BaseController { @Autowired private HkSyncService hkSyncService; @PreventRepeat @ApiOperation("å ¨é忥é¨ç¦è®¾å¤æ¥å£") @PostMapping("/getDevices") @RequiresPermissions("business:hksync:device") public ApiResponse getDevices(@RequestBody AcsDeviceListRequest param) { hkSyncService.syncHkDevices(param); return ApiResponse.success(null); } } server/dmvisit_service/src/main/java/com/doumee/config/mybatis/EasySqlInjector.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,22 @@ package com.doumee.config.mybatis; import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.core.injector.AbstractMethod; import com.baomidou.mybatisplus.core.injector.DefaultSqlInjector; import com.baomidou.mybatisplus.core.metadata.TableInfo; import com.baomidou.mybatisplus.extension.injector.methods.InsertBatchSomeColumn; import java.util.List; public class EasySqlInjector extends DefaultSqlInjector { @Override public List<AbstractMethod> getMethodList(Class<?> mapperClass ) { // 注æï¼æ¤SQLæ³¨å ¥å¨ç»§æ¿äºDefaultSqlInjector(é»è®¤æ³¨å ¥å¨)ï¼è°ç¨äºDefaultSqlInjectorçgetMethodListæ¹æ³ï¼ä¿çäºmybatis-plusçèªå¸¦æ¹æ³ List<AbstractMethod> methodList = super.getMethodList(mapperClass); methodList.add(new InsertBatchSomeColumn(i -> i.getFieldFill() != FieldFill.UPDATE)); return methodList; } } server/dmvisit_service/src/main/java/com/doumee/config/mybatis/MyBatisPlusConfig.java
@@ -20,4 +20,9 @@ interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); return interceptor; } @Bean public EasySqlInjector sqlInjector() { return new EasySqlInjector(); } } server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKConstants.java
@@ -9,6 +9,7 @@ public class HKConstants { private Logger logger = LoggerFactory.getLogger(HKConstants.class); //æµ·åº·å¹³å°æ ¹æ®ç°åºç¯å¢é ç½®httpè¿æ¯https public static final String RESPONSE_SUCCEE = "0"; public static String https ; /** * è½å弿¾å¹³å°çç½ç«è·¯å¾ è·¯å¾ä¸ç¨ä¿®æ¹ï¼å°±æ¯/artemis server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/BaseResponse.java
@@ -4,6 +4,7 @@ @Data public class BaseResponse<T> { /** * è¿åç * 0ï¼æå server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/AcsDeviceListRequest.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,15 @@ package com.doumee.core.haikang.model.param.request; import lombok.Data; @Data public class AcsDeviceListRequest { private String name ;//string False åç§°ï¼æ¨¡ç³æç´¢ï¼æå¤§é¿åº¦32ï¼è¥å å«ä¸æï¼æå¤§é¿åº¦æä¸è¶ è¿æç §æå®ç¼ç çåèé¿åº¦ï¼å³getBytes(âutf-8â).length private String[] regionIndexCodes ;//string[] False åºåç¼å·,å¯ä»¥ä¸ºç©º; String[]ï¼æ¯ææ ¹æ®åºåæ¹éæ¥è¯¢ï¼åºåç¼å·ä¸ªæ°<=1000个ï¼å个é¿åº¦<=64Byteï¼ï¼å¯ä»æ¥è¯¢åºåå表v2æ¥å£è·åè¿ååæ°indexCode private Boolean isSubRegion;// boolean False trueæ¶ï¼æç´¢regionIndexCodesåå ¶åååºåçèµæºï¼ falseæ¶ï¼åªæç´¢ regionIndexCodesçèµæº private Integer pageNo ;//integer True å½å页ç private Integer pageSize;// integer True åé¡µå¤§å° private String[] authCodes ;//string[] False æéç éåï¼è¯¦è§éå½A.3 èµæºæéç ä¸é¨ç¦è®¾å¤å¯¹åºçèµæºæéç } server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/AcsDeviceInfoResponse.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,40 @@ package com.doumee.core.haikang.model.param.respose; import lombok.Data; import java.math.BigDecimal; import java.util.List; @Data public class AcsDeviceInfoResponse { private String indexCode ;//string False èµæºå¯ä¸ç¼ç private String resourceType;// string False èµæºç±»åï¼è¯¦è§éå½A.2 èµæºç±»å private String name;// string False èµæºåç§° private String parentIndexCode;// string False ç¶çº§èµæºç¼å· private String devTypeCode;// string False é¨ç¦è®¾å¤ç±»åç¼ç ï¼è¯¦è§éå½A.7 é¨ç¦è®¾å¤ç±»åä¸é¨ç¦è®¾å¤ç±»åç¼å· private String devTypeDesc;// string False é¨ç¦è®¾å¤ç±»ååå·ï¼è¯¦è§éå½A.7 é¨ç¦è®¾å¤ç±»åä¸é¨ç¦è®¾å¤ç±»å private String deviceCode ;//string False 主å¨è®¾å¤ç¼å· private String manufacturer;// string False åå private String regionIndexCode;// string False æå±åºå private String regionPath ;//string False æå±åºåè·¯å¾,以@符å·åå²ï¼å 嫿¬èç¹ private String treatyType;// string False æ¥å ¥åè®®ï¼è¯¦è§éå½A.6 ç¼ç è®¾å¤æ¥å ¥åè®® private Integer cardCapacity;// number False 设å¤å¡å®¹é private Integer fingerCapacity;// number False æçº¹å®¹é private Integer veinCapacity;// number False æéè容é private Integer faceCapacity ;//number False 人è¸å®¹é private Integer doorCapacity;// number False é¨å®¹é private String deployId ;//string False æ¨ç private String createTime ;//string False å建æ¶é´ private String updateTime ;//string False æ´æ°æ¶é´ private String description;// string False æè¿° private String netZoneId ;//string False æå±ç½å private String acsReaderVerifyModeAbility ;//string False æ¯æè®¤è¯æ¹å¼ï¼æ°æ®ä¸ºåè¿å¶ private String regionName ;//string False åºååç§° private String regionPathName;// string False æå±åºåè·¯å¾åï¼ä»¥"/"åé private String ip ;//string False é¨ç¦è®¾å¤IP private String port;// string False é¨ç¦è®¾å¤ç«¯å£ private String capability;// string False 设å¤è½åé(å«è®¾å¤ä¸çæºè½è½å)ï¼è¯¦è§éå½A.44 设å¤è½åé private String devSerialNum;// string False 设å¤åºåå· private String dataVersion;// string False çæ¬å· } server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/AcsDeviceListResponse.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,15 @@ package com.doumee.core.haikang.model.param.respose; import lombok.Data; import java.util.List; @Data public class AcsDeviceListResponse { private int total;// number False æ¥è¯¢æ°æ®è®°å½æ»æ° private int pageSize;// number False æ¯é¡µè®°å½æ»æ° private int pageNo ;// number False å½å页ç private List<AcsDeviceInfoResponse> list ;// object[] False æéç»å¯¹è±¡å表 } server/dmvisit_service/src/main/java/com/doumee/core/haikang/service/HKService.java
@@ -417,6 +417,24 @@ } return null; } /** *é¨ç¦è®¾å¤æ¥è¯¢ï¼åé¡µï¼ * @return */ public BaseResponse<AcsDeviceListResponse> acsDeviceList(AcsDeviceListRequest param){ log.error("ãæµ·åº·é¨ç¦è®¾å¤æ¥è¯¢ã================å¼å§===="+JSONObject.toJSONString(param)); try { String res = HKTools.acsDeviceList(JSONObject.toJSONString(param)); TypeReference typeReference = new TypeReference< BaseResponse<AcsDeviceListResponse> >(){}; BaseResponse<AcsDeviceListResponse> result = JSONObject.parseObject(res, typeReference.getType()); log.error("ãæµ·åº·é¨ç¦è®¾å¤æ¥è¯¢ã================æå====\n"+res); return result; }catch (Exception e){ log.error("ãæµ·åº·é¨ç¦è®¾å¤æ¥è¯¢ã================失败====ï¼\n"+ e.getMessage()); } return null; } } server/dmvisit_service/src/main/java/com/doumee/core/utils/FtpUtil.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,652 @@ package com.doumee.core.utils; import java.io.*; import java.util.UUID; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.apache.commons.net.PrintCommandListener; 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.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.util.EntityUtils; import sun.misc.BASE64Encoder; /** */ /** * æ¯ææç¹ç»ä¼ çFTPå®ç¨ç±» * * @author BenZhou http://www.bt285.cn * @version 0.1 å®ç°åºæ¬æç¹ä¸ä¼ ä¸è½½ * @version 0.2 å®ç°ä¸ä¼ ä¸è½½è¿åº¦æ±æ¥ * @version 0.3 å®ç°ä¸æç®å½å建å䏿æä»¶åå»ºï¼æ·»å 对äºä¸æçæ¯æ */ @Slf4j public class FtpUtil { public FTPClient ftpClient = new FTPClient(); public FtpUtil() { // 设置å°è¿ç¨ä¸ä½¿ç¨å°çå½ä»¤è¾åºå°æ§å¶å° this.ftpClient.addProtocolCommandListener(new PrintCommandListener( new PrintWriter(System.out))); } public FtpUtil(String hostname, int port, String username, String password) throws IOException { // 设置å°è¿ç¨ä¸ä½¿ç¨å°çå½ä»¤è¾åºå°æ§å¶å° connect(hostname, port, username, password); } /** */ /** * è¿æ¥å°FTPæå¡å¨ * * @param hostname * 主æºå * @param port * ç«¯å£ * @param username * ç¨æ·å * @param password * å¯ç * @return æ¯å¦è¿æ¥æå * @throws IOException */ public boolean connect(String hostname, int port, String username, String password) throws IOException { ftpClient.connect(hostname, port); ftpClient.setControlEncoding("GBK"); if (FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) { if (ftpClient.login(username, password)) { return true; } } disconnect(); return false; } /** */ /** * ä»FTPæå¡å¨ä¸ä¸è½½æä»¶,æ¯ææç¹ç»ä¼ ï¼ä¸ä¼ ç¾åæ¯æ±æ¥ * * @param remote * è¿ç¨æä»¶è·¯å¾ * @param local * æ¬å°æä»¶è·¯å¾ * @return ä¸ä¼ çç¶æ * @throws IOException */ public String download(String remote, String local) throws IOException { // è®¾ç½®è¢«å¨æ¨¡å¼ ftpClient.enterLocalPassiveMode(); // 设置以äºè¿å¶æ¹å¼ä¼ è¾ ftpClient.setFileType(FTP.BINARY_FILE_TYPE); String result; // æ£æ¥è¿ç¨æä»¶æ¯å¦åå¨ FTPFile[] files = ftpClient.listFiles(new String( remote.getBytes("GBK"), "iso-8859-1")); if (files.length != 1) { // System.out.println("è¿ç¨æä»¶ä¸åå¨"); return "è¿ç¨æä»¶ä¸åå¨"; } long lRemoteSize = files[0].getSize(); File f = new File(local); // æ¬å°å卿件ï¼è¿è¡æç¹ä¸è½½ if (f.exists()) { long localSize = f.length(); // 夿æ¬å°æä»¶å¤§å°æ¯å¦å¤§äºè¿ç¨æä»¶å¤§å° if (localSize >= lRemoteSize) { // System.out.println("æ¬å°æä»¶å¤§äºè¿ç¨æä»¶ï¼ä¸è½½ä¸æ¢"); // return "æ¬å°æä»¶å¤§äºè¿ç¨æä»¶ï¼ä¸è½½ä¸æ¢"; } // è¿è¡æç¹ç»ä¼ ï¼å¹¶è®°å½ç¶æ FileOutputStream out = new FileOutputStream(f, true); ftpClient.setRestartOffset(localSize); InputStream in = ftpClient.retrieveFileStream(new String(remote .getBytes("GBK"), "iso-8859-1")); byte[] bytes = new byte[1024]; long step = lRemoteSize / 100; long process = localSize / step; int c; while ((c = in.read(bytes)) != -1) { out.write(bytes, 0, c); localSize += c; long nowProcess = localSize / step; if (nowProcess > process) { process = nowProcess; if (process % 10 == 0) System.out.println("ä¸è½½è¿åº¦ï¼" + process); // TODO æ´æ°æä»¶ä¸è½½è¿åº¦,å¼åæ¾å¨processåéä¸ } } in.close(); out.close(); boolean isDo = ftpClient.completePendingCommand(); if (isDo) { result = "300"; // result = DownloadStatus.Download_From_Break_Success; } else { result = "400"; // result = DownloadStatus.Download_From_Break_Failed; } } else { OutputStream out = new FileOutputStream(f); InputStream in = ftpClient.retrieveFileStream(new String(remote .getBytes("GBK"), "iso-8859-1")); byte[] bytes = new byte[1024]; long step = lRemoteSize / 100; long process = 0; long localSize = 0L; int c; while ((c = in.read(bytes)) != -1) { out.write(bytes, 0, c); localSize += c; long nowProcess = localSize / step; if (nowProcess > process) { process = nowProcess; if (process % 10 == 0) System.out.println("ä¸è½½è¿åº¦ï¼" + process); // TODO æ´æ°æä»¶ä¸è½½è¿åº¦,å¼åæ¾å¨processåéä¸ } } in.close(); out.close(); boolean upNewStatus = ftpClient.completePendingCommand(); if (upNewStatus) { result = "500"; // result = DownloadStatus.Download_New_Success; } else { // result = DownloadStatus.Download_New_Failed; result = "600"; } } return result; } /** */ /** * ä¸ä¼ æä»¶å°FTPæå¡å¨ï¼æ¯ææç¹ç»ä¼ * * @param local * æ¬å°æä»¶åç§°ï¼ç»å¯¹è·¯å¾ * @param remote * è¿ç¨æä»¶è·¯å¾ï¼ä½¿ç¨/home/directory1/subdirectory/file.extææ¯ * http://www.guihua.org /subdirectory/file.ext * æç §Linuxä¸çè·¯å¾æå®æ¹å¼ï¼æ¯æå¤çº§ç®å½åµå¥ï¼æ¯æéå½å建ä¸åå¨çç®å½ç»æ * @return ä¸ä¼ ç»æ * @throws IOException */ public String upload(String local, String remote) throws IOException { // 设置PassiveModeä¼ è¾ ftpClient.enterLocalPassiveMode(); // 设置以äºè¿å¶æµçæ¹å¼ä¼ è¾ ftpClient.setFileType(FTP.BINARY_FILE_TYPE); ftpClient.setControlEncoding("GBK"); String result; // 对è¿ç¨ç®å½çå¤ç String remoteFileName = remote; if (remote.contains(File.separator)) { remoteFileName = remote.substring(remote.lastIndexOf(File.separator) + 1); // å建æå¡å¨è¿ç¨ç®å½ç»æï¼åå»ºå¤±è´¥ç´æ¥è¿å if (StringUtils.equals(CreateDirecroty(remote, ftpClient), "2")) { return "2"; } } // æ£æ¥è¿ç¨æ¯å¦å卿件 FTPFile[] files = ftpClient.listFiles(new String(remoteFileName .getBytes("GBK"), "iso-8859-1")); if (files.length == 1) { long remoteSize = files[0].getSize(); File f = new File(local); long localSize = f.length(); if (remoteSize == localSize) { return "700"; // return UploadStatus.File_Exits; } else if (remoteSize > localSize) { return "800"; // return UploadStatus.Remote_Bigger_Local; } // å°è¯ç§»å¨æä»¶å 读åæé,å®ç°æç¹ç»ä¼ result = uploadFile(remoteFileName, f, ftpClient, remoteSize); // 妿æç¹ç»ä¼ 没ææåï¼åå 餿å¡å¨ä¸æä»¶ï¼éæ°ä¸ä¼ if (StringUtils.equals(result, "1")) { if (!ftpClient.deleteFile(remoteFileName)) { return "1"; } result = uploadFile(remoteFileName, f, ftpClient, 0); } } else { result = uploadFile(remoteFileName, new File(local), ftpClient, 0); } return result; } public int getNumFromStr(String str,char searchstr) { int count = 0; char[] charArray = str.toCharArray(); for (char param : charArray) { if (param == searchstr) { count++; } } return count; } /** */ /** * ä¸ä¼ æä»¶å°FTPæå¡å¨ï¼æ¯ææç¹ç»ä¼ * * @param localFile * æ¬å°æä»¶æµ * @param remote * è¿ç¨æä»¶è·¯å¾ï¼ä½¿ç¨/home/directory1/subdirectory/file.extææ¯ * http://www.guihua.org /subdirectory/file.ext * æç §Linuxä¸çè·¯å¾æå®æ¹å¼ï¼æ¯æå¤çº§ç®å½åµå¥ï¼æ¯æéå½å建ä¸åå¨çç®å½ç»æ * @return ä¸ä¼ ç»æ * @throws IOException */ public String uploadFile(File localFile, String remote) throws IOException { // 设置PassiveModeä¼ è¾ ftpClient.enterLocalPassiveMode(); // 设置以äºè¿å¶æµçæ¹å¼ä¼ è¾ ftpClient.setFileType(FTP.BINARY_FILE_TYPE); ftpClient.setControlEncoding("GBK"); String result; // 对è¿ç¨ç®å½çå¤ç String remoteFileName = remote ; if (remote.contains(File.separator)) { remoteFileName = remote.substring(remote.lastIndexOf(File.separator) + 1); // å建æå¡å¨è¿ç¨ç®å½ç»æï¼åå»ºå¤±è´¥ç´æ¥è¿å if (StringUtils.equals(CreateDirecroty(remote, ftpClient), "2")) { return "2"; } } // æ£æ¥è¿ç¨æ¯å¦å卿件 FTPFile[] files = ftpClient.listFiles(new String(remoteFileName .getBytes("GBK"), "iso-8859-1")); if (files.length == 1) { long remoteSize = files[0].getSize(); long localSize = localFile.length(); if (remoteSize == localSize) { return "700"; // return UploadStatus.File_Exits; } else if (remoteSize > localSize) { return "800"; // return UploadStatus.Remote_Bigger_Local; } // å°è¯ç§»å¨æä»¶å 读åæé,å®ç°æç¹ç»ä¼ result = uploadFile(remoteFileName, localFile, ftpClient, remoteSize); // 妿æç¹ç»ä¼ 没ææåï¼åå 餿å¡å¨ä¸æä»¶ï¼éæ°ä¸ä¼ if (StringUtils.equals(result, "1")) { if (!ftpClient.deleteFile(remoteFileName)) { return "1"; } result = uploadFile(remoteFileName, localFile, ftpClient, 0); } // if (result == UploadStatus.Upload_From_Break_Failed) { // if (!ftpClient.deleteFile(remoteFileName)) { // return UploadStatus.Delete_Remote_Faild; // } // result = uploadFile(remoteFileName, f, ftpClient, 0); // } } else { result = uploadFile(remoteFileName, localFile, ftpClient, 0); } return result; } /** */ /** * æå¼ä¸è¿ç¨æå¡å¨çè¿æ¥ * * @throws IOException */ public void disconnect() throws IOException { if (ftpClient.isConnected()) { ftpClient.disconnect(); } } /** */ /** * éå½å建è¿ç¨æå¡å¨ç®å½ * * @param remote * è¿ç¨æå¡å¨æä»¶ç»å¯¹è·¯å¾ * @param ftpClient * FTPClient对象 * @return ç®å½å建æ¯å¦æå * @throws IOException */ public String CreateDirecroty(String remote, FTPClient ftpClient) throws IOException { String status = "1"; // UploadStatus status = UploadStatus.Create_Directory_Success; String directory = remote.substring(0, remote.lastIndexOf(File.separator) + 1); if (!directory.equalsIgnoreCase(File.separator) && !ftpClient.changeWorkingDirectory(new String(directory .getBytes("GBK"), "iso-8859-1"))) { // 妿è¿ç¨ç®å½ä¸åå¨ï¼åéå½å建è¿ç¨æå¡å¨ç®å½ int start = 0; int end = 0; if (directory.startsWith(File.separator)) { start = 1; } else { start = 0; } end = directory .indexOf(File.separator, start); while (true) { String subDirectory = new String(remote.substring(start, end) .getBytes("GBK"), "iso-8859-1"); if (!ftpClient.changeWorkingDirectory(subDirectory)) { if (ftpClient.makeDirectory(subDirectory)) { ftpClient.changeWorkingDirectory(subDirectory); } else { System.out.println("å建ç®å½å¤±è´¥"); return "2"; // return UploadStatus.Create_Directory_Fail; } } start = end + 1; end = directory.indexOf(File.separator, start); // æ£æ¥ææç®å½æ¯å¦åå»ºå®æ¯ if (end <= start) { break; } } } return status; } /** * ä¸ä¼ æä»¶å°æå¡å¨,æ°ä¸ä¼ åæç¹ç»ä¼ * * @param remoteFile * è¿ç¨æä»¶åï¼å¨ä¸ä¼ ä¹åå·²ç»å°æå¡å¨å·¥ä½ç®å½åäºæ¹å * @param localFile * æ¬å°æä»¶File奿ï¼ç»å¯¹è·¯å¾ * éè¦æ¾ç¤ºçå¤çè¿åº¦æ¥è¿å¼ * @param ftpClient * FTPClientå¼ç¨ * @return * @throws IOException */ public String uploadFile(String remoteFile, File localFile, FTPClient ftpClient, long remoteSize) throws IOException { String status; // æ¾ç¤ºè¿åº¦çä¸ä¼ long step = localFile.length() / 100; step=step ==0?1:step; long process = 0; long localreadbytes = 0L; // System.out.println(remoteFile +"-------------------------"+localFile.getPath().toString()); RandomAccessFile raf = new RandomAccessFile(localFile, "r"); OutputStream out = ftpClient.appendFileStream(new String(remoteFile .getBytes("GBK"), "iso-8859-1")); // æç¹ç»ä¼ if (remoteSize > 0) { ftpClient.setRestartOffset(remoteSize); process = remoteSize / step; raf.seek(remoteSize); localreadbytes = remoteSize; } byte[] bytes = new byte[1024]; int c; while ((c = raf.read(bytes)) != -1) { out.write(bytes, 0, c); localreadbytes += c; if (localreadbytes / step != process) { process = localreadbytes / step; System.out.println("ä¸ä¼ è¿åº¦:" + process); // TODO æ±æ¥ä¸ä¼ ç¶æ } } out.flush(); raf.close(); out.close(); boolean result = ftpClient.completePendingCommand(); if (remoteSize > 0) { status = result ? "0" : "1"; // status = result ? UploadStatus.Upload_From_Break_Success // : UploadStatus.Upload_From_Break_Failed; } else { status = result ? "0" : "1"; // status = result ? UploadStatus.Upload_New_File_Success // : UploadStatus.Upload_New_File_Failed; } return status; } public byte[] getOnlineInputsteam(String url){ try (CloseableHttpClient httpClient = HttpClientBuilder.create().build()) { HttpGet httpGet = new HttpGet(url); CloseableHttpResponse resp = httpClient.execute(httpGet);// è°ç¨æå¡å¨æ¥å£ // return resp.getEntity().getContent(); byte[] data = EntityUtils.toByteArray(resp.getEntity());// å°è¿åçå¾çæè æä»¶è½¬åæåèæ°ç»çå½¢å¼ // BASE64Encoder encoder = new BASE64Encoder(); // String imageBase64 = encoder.encode(data); // String imageBase64 = "data:image/jpg;base64," + encoder.encodeBuffer(data).trim(); // imageBase64 = imageBase64.replaceAll("\n", "").replaceAll("\r", "").replaceAll(" ", "");//å é¤ \r\n return data; } catch (Exception e) { log.error("è·åå¾çå¼å¸¸:{}",e.getMessage()); } return null; } public boolean uploadOnlineFile(String url,String ftpPath, String fileName) throws Exception { byte[] buf = getOnlineInputsteam(url); if(buf == null){ return false; } try { ftpClient.enterLocalPassiveMode();// å¼å¯è¢«å¨æ¨¡å¼ ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE); CreateDirecroty( ftpPath,ftpClient); String printWorkingDirectory = ftpClient.printWorkingDirectory(); System.out.println("è·åå½åç®å½:" + printWorkingDirectory); boolean flag = ftpClient.storeFile(new String(fileName.getBytes("GBK"), "iso-8859-1"), new ByteArrayInputStream(buf)); // éè¿åé QUIT å½ä»¤æ³¨é FTP æå¡å¨ ftpClient.logout(); return flag; } catch (Exception e) { e.printStackTrace(); } finally { if (ftpClient.isConnected()){ ftpClient.disconnect(); } } return false; } /** * å é¤ä¸ä¸ªæä»¶ */ public boolean deleteFile(String filename) { boolean flag = true; try { flag = ftpClient.deleteFile(filename); if (flag) { System.out.println("å 餿件æåï¼"); } else { System.out.println("å é¤æä»¶å¤±è´¥ï¼"); } } catch (IOException ioe) { ioe.printStackTrace(); } return flag; } public static void main(String[] args) throws Exception { try { FtpUtil ftpUtil = new FtpUtil("175.27.187.84", 21, "ftpuser","doumee168" ); ftpUtil.uploadOnlineFile("https://profile-avatar.csdnimg.cn/default.jpg!1", "test"+File.separator, UUID.randomUUID().toString()+"test.jpg"); /*FtpUtil myFtp = new FtpUtil("106.15.54.228", 21, "ftptlg", "tlg168.com"); System.out.println(myFtp.upload("D:\\devices.sql", "/1111/devices.sql")); // myFtp.ftpClient.makeDirectory(new String("çµè§å§".getBytes("GBK"), // "iso-8859-1")); // myFtp.ftpClient.changeWorkingDirectory(new String("çµè§å§" // .getBytes("GBK"), "iso-8859-1")); // myFtp.ftpClient.makeDirectory(new String("走西å£".getBytes("GBK"), // "iso-8859-1")); // System.out.println(myFtp.upload("http://www.5a520.cn /yw.flv", // "/yw.flv", 5)); // System.out.println(myFtp.upload("http://www.5a520.cn /走西å£24.mp4", // "/央è§èµ°è¥¿å£/æ°æµªç½/走西å£24.mp4")); *//** * t.connect("pengtu", "61.191.61.226", 2122, "yangnet", * "yanglong@doumee.com"); File file = new File( * "D:\\lib/commons-net-3.3-bin/commons-net-3.3/NOTICE.txt"); * * *//* System.out.println(myFtp.download("/1/2/NOTICE.txt", "D:\\å.txt")); myFtp.deleteFile("/1/2/NOTICE.txt"); myFtp.disconnect(); System.out.println("javaçæ¬å·ï¼" + System.getProperty("java.version")); // javaçæ¬å· System.out .println("Javaæä¾ååç§°ï¼" + System.getProperty("java.vendor")); // Javaæä¾ååç§° System.out.println("Javaæä¾åç½ç«ï¼" + System.getProperty("java.vendor.url")); // Javaæä¾åç½ç« System.out.println("jreç®å½ï¼" + System.getProperty("java.home")); // Javaï¼å¦ï¼åºè¯¥æ¯jreç®å½ System.out.println("Javaèææºè§èçæ¬å·ï¼" + System.getProperty("java.vm.specification.version")); // Javaèææºè§èçæ¬å· System.out.println("Javaèææºè§èæä¾åï¼" + System.getProperty("java.vm.specification.vendor")); // Javaèææºè§èæä¾å System.out.println("Javaèææºè§èåç§°ï¼" + System.getProperty("java.vm.specification.name")); // Javaèææºè§èåç§° System.out.println("Javaèææºçæ¬å·ï¼" + System.getProperty("java.vm.version")); // Javaèææºçæ¬å· System.out.println("Javaèææºæä¾åï¼" + System.getProperty("java.vm.vendor")); // Javaèææºæä¾å System.out.println("Javaèææºåç§°ï¼" + System.getProperty("java.vm.name")); // Javaèææºåç§° System.out.println("Javaè§èçæ¬å·ï¼" + System.getProperty("java.specification.version")); // Javaè§èçæ¬å· System.out.println("Javaè§èæä¾åï¼" + System.getProperty("java.specification.vendor")); // Javaè§èæä¾å System.out.println("Javaè§èåç§°ï¼" + System.getProperty("java.specification.name")); // Javaè§èåç§° System.out.println("Javaç±»çæ¬å·ï¼" + System.getProperty("java.class.version")); // Javaç±»çæ¬å· System.out.println("Java类路å¾ï¼" + System.getProperty("java.class.path")); // Javaç±»è·¯å¾ System.out.println("Java libè·¯å¾ï¼" + System.getProperty("java.library.path")); // Java libè·¯å¾ System.out.println("Javaè¾å ¥è¾åºä¸´æ¶è·¯å¾ï¼" + System.getProperty("java.io.tmpdir")); // Javaè¾å ¥è¾åºä¸´æ¶è·¯å¾ System.out .println("Javaç¼è¯å¨ï¼" + System.getProperty("java.compiler")); // Javaç¼è¯å¨ System.out.println("Javaæ§è¡è·¯å¾ï¼" + System.getProperty("java.ext.dirs")); // Javaæ§è¡è·¯å¾ System.out.println("æä½ç³»ç»åç§°ï¼" + System.getProperty("os.name")); // æä½ç³»ç»åç§° System.out.println("æä½ç³»ç»çæ¶æï¼" + System.getProperty("os.arch")); // æä½ç³»ç»çæ¶æ System.out.println("æä½ç³»ç»çæ¬å·ï¼" + System.getProperty("os.version")); // æä½ç³»ç»çæ¬å· System.out.println("æä»¶åé符ï¼" + System.getProperty("file.separator")); // æä»¶åé符 System.out.println("è·¯å¾åé符ï¼" + System.getProperty("path.separator")); // è·¯å¾åé符 System.out.println("ç´çº¿åé符ï¼" + System.getProperty("line.separator")); // ç´çº¿åé符 System.out.println("æä½ç³»ç»ç¨æ·åï¼" + System.getProperty("user.name")); // ç¨æ·å System.out.println("æä½ç³»ç»ç¨æ·ç主ç®å½ï¼" + System.getProperty("user.home")); // ç¨æ·ç主ç®å½ System.out.println("å½åç¨åºæå¨ç®å½ï¼" + System.getProperty("user.dir")); // å½åç¨åºæå¨ç®å½*/ } catch (IOException e) { System.out.println("è¿æ¥FTPåºéï¼" + e.getMessage()); } } /*** * @ä¸ä¼ æä»¶å¤¹ * @param localDirectory * å½å°æä»¶å¤¹ * @param remoteDirectoryPath * Ftp æå¡å¨è·¯å¾ 以ç®å½File.separatorç»æ * */ public boolean uploadDirectory(String localDirectory, String remoteDirectoryPath) throws Exception { File src = new File(localDirectory); try { remoteDirectoryPath = remoteDirectoryPath + File.separator; // System.out.println(remoteDirectoryPath+":===============å建ç®å½================="); boolean makeDirFlag = this.ftpClient.makeDirectory(remoteDirectoryPath); }catch (IOException e) { e.printStackTrace(); log.info(remoteDirectoryPath + "ç®å½å建失败"); return false; } File[] allFile = src.listFiles(); for (int currentFile = 0;currentFile < allFile.length;currentFile++) { File f =allFile[currentFile]; String srcName= f.getPath().toString(); // System.out.println(srcName+":====================读åæä»¶======================"); String tPath = remoteDirectoryPath+f.getName(); if (!f.isDirectory()) { // System.out.println(srcName+":====================å¼å§ä¼ è¾æä»¶======================"); int dNum = getNumFromStr(tPath,File.separator.toCharArray()[0]); uploadFile(f, tPath); if(dNum -2>=0){ for (int i = 0; i < dNum-1; i++) { this.ftpClient.changeToParentDirectory(); } } }else{ // System.out.println(srcName+":====================å建åç®å½======================"); uploadDirectory(srcName, tPath+File.separator); } // System.out.println(srcName+":====================ä¸ä¼ 宿¯======================"); } return true; } /*** * @ä¸ä¼ æä»¶å¤¹ * @param pathName * æä»¶å¤¹ * */ public boolean delDirectory(String pathName ) throws Exception { try { this.ftpClient.changeWorkingDirectory( pathName.substring(0, pathName.lastIndexOf(File.separator)) ); ftpClient.removeDirectory(pathName); }catch (IOException e) { e.printStackTrace(); log.info(pathName + "ç®å½å é¤å¤±è´¥"); return false; } return true; } } server/dmvisit_service/src/main/java/com/doumee/dao/business/DeviceMapper.java
@@ -3,10 +3,14 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.doumee.dao.business.model.Device; import java.util.Collection; /** * @author æ±è¹è¹ * @date 2023/11/30 15:33 */ public interface DeviceMapper extends BaseMapper<Device> { Integer insertBatchSomeColumn(Collection<Device> entityList); } server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Device.java
@@ -52,13 +52,13 @@ @ExcelColumn(name="夿³¨") private String remark; @ApiModelProperty(value = "é¢ç®") @ExcelColumn(name="é¢ç®") private String title; @ApiModelProperty(value = "设å«å") @ExcelColumn(name="设å«å") private String name; @ApiModelProperty(value = "海康æ è¯", example = "1") @ExcelColumn(name="海康æ è¯") private Integer hkId; private String hkId; @ApiModelProperty(value = "æµ·åº·åæ¥ç¶æ 0æªåæ¥ 1已忥", example = "1") @ExcelColumn(name="æµ·åº·åæ¥ç¶æ 0æªåæ¥ 1已忥") @@ -79,7 +79,7 @@ @ApiModelProperty(value = "èµæºç±»å", example = "1") @ExcelColumn(name="èµæºç±»å") private BigDecimal resourceType; private String resourceType; @ApiModelProperty(value = "ç¼å·") @ExcelColumn(name="ç¼å·") server/dmvisit_service/src/main/java/com/doumee/service/business/CarEventService.java
@@ -26,7 +26,6 @@ * @param id ä¸»é® */ void deleteById(Integer id); /** * å é¤ * server/dmvisit_service/src/main/java/com/doumee/service/business/DeviceService.java
@@ -1,5 +1,6 @@ package com.doumee.service.business; import com.doumee.core.haikang.model.param.request.AcsDeviceListRequest; import com.doumee.core.model.PageData; import com.doumee.core.model.PageWrap; import com.doumee.dao.business.model.Device; @@ -94,4 +95,5 @@ * @return long */ long count(Device device); } server/dmvisit_service/src/main/java/com/doumee/service/business/HkSyncService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,12 @@ package com.doumee.service.business; import com.doumee.core.haikang.model.param.request.AcsDeviceListRequest; /** * å车åºäºä»¶æ¨éè®°å½è¡¨Serviceå®ä¹ * @author æ±è¹è¹ * @date 2023/11/30 15:33 */ public interface HkSyncService { String syncHkDevices(AcsDeviceListRequest param); } server/dmvisit_service/src/main/java/com/doumee/service/business/impl/DeviceServiceImpl.java
@@ -1,7 +1,16 @@ package com.doumee.service.business.impl; import com.doumee.core.constants.ResponseStatus; import com.doumee.core.exception.BusinessException; import com.doumee.core.haikang.model.HKConstants; import com.doumee.core.haikang.model.param.BaseResponse; import com.doumee.core.haikang.model.param.request.AcsDeviceListRequest; import com.doumee.core.haikang.model.param.respose.AcsDeviceInfoResponse; import com.doumee.core.haikang.model.param.respose.AcsDeviceListResponse; import com.doumee.core.haikang.service.HKService; import com.doumee.core.model.PageData; import com.doumee.core.model.PageWrap; import com.doumee.core.utils.Constants; import com.doumee.core.utils.Utils; import com.doumee.dao.business.DeviceMapper; import com.doumee.dao.business.model.Device; @@ -10,10 +19,14 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import java.util.ArrayList; import java.util.Date; import java.util.List; /** @@ -26,6 +39,9 @@ @Autowired private DeviceMapper deviceMapper; @Autowired private HKService hkService; @Override public Integer create(Device device) { @@ -112,8 +128,8 @@ if (pageWrap.getModel().getRemark() != null) { queryWrapper.lambda().eq(Device::getRemark, pageWrap.getModel().getRemark()); } if (pageWrap.getModel().getTitle() != null) { queryWrapper.lambda().eq(Device::getTitle, pageWrap.getModel().getTitle()); if (pageWrap.getModel().getName() != null) { queryWrapper.lambda().eq(Device::getName, pageWrap.getModel().getName()); } if (pageWrap.getModel().getHkId() != null) { queryWrapper.lambda().eq(Device::getHkId, pageWrap.getModel().getHkId()); @@ -185,4 +201,5 @@ QueryWrapper<Device> wrapper = new QueryWrapper<>(device); return deviceMapper.selectCount(wrapper); } } server/dmvisit_service/src/main/java/com/doumee/service/business/impl/HkSyncServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,175 @@ package com.doumee.service.business.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.doumee.core.constants.ResponseStatus; import com.doumee.core.exception.BusinessException; import com.doumee.core.haikang.model.HKConstants; import com.doumee.core.haikang.model.param.BaseResponse; import com.doumee.core.haikang.model.param.request.AcsDeviceListRequest; import com.doumee.core.haikang.model.param.respose.AcsDeviceInfoResponse; import com.doumee.core.haikang.model.param.respose.AcsDeviceListResponse; import com.doumee.core.haikang.service.HKService; import com.doumee.core.model.PageData; import com.doumee.core.model.PageWrap; import com.doumee.core.utils.Constants; import com.doumee.core.utils.DateUtil; import com.doumee.core.utils.Utils; import com.doumee.dao.business.DeviceMapper; import com.doumee.dao.business.model.Device; import com.doumee.service.business.DeviceService; import com.doumee.service.business.HkSyncService; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Date; import java.util.List; /** * 设å¤ä¿¡æ¯è¡¨Serviceå®ç° * @author æ±è¹è¹ * @date 2023/11/30 15:33 */ @Service public class HkSyncServiceImpl implements HkSyncService { @Autowired private DeviceMapper deviceMapper; @Autowired private HKService hkService; @Override // @Async public String syncHkDevices(AcsDeviceListRequest param){ List<Device> deleteList = new ArrayList<>(); List<Device> addList = new ArrayList<>(); List<Device> editList = new ArrayList<>(); List<AcsDeviceInfoResponse> allHkList = new ArrayList<>(); Date date = new Date(); //æ¥è¯¢å ¨é¨é¨ç¦è®¾å¤æ°æ® List<Device> allList = deviceMapper.selectList(null); boolean hasNext = true; int curTotal = 0; while (hasNext){ //å页éåå¾ªç¯æ¥è¯¢ææé¨ç¦è®¾å¤æ°æ® param = new AcsDeviceListRequest(); param.setPageNo(1); param.setPageSize(10000); BaseResponse<AcsDeviceListResponse> response = hkService.acsDeviceList(param); if(response == null || !StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE)){ throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "对ä¸èµ·ï¼æµ·åº·åæ¥æ°æ®å¤±è´¥~"); } AcsDeviceListResponse r = response.getData(); curTotal += 10000; if(curTotal >= r.getTotal()){ hasNext = false; } List<AcsDeviceInfoResponse> tlist = r.getList(); } //夿è·åå é¤çé¨ç¦è®¾å¤ï¼é»è¾å é¤ getAddAndEditList(allList,allHkList,addList,editList,date); getDeleteList(allList,allHkList,deleteList,date); if(deleteList.size()>0){ //é»è¾å é¤ for(Device d : deleteList){ deviceMapper.updateById(d); } } if(addList.size()>0){ deviceMapper.insertBatchSomeColumn(addList); } if(editList.size()>0){ for(Device d : editList){ deviceMapper.updateById(d); } } return "忥é¨ç¦æ°æ®ï¼æ°å¢ã"+addList.size()+"ãæ¡ï¼æ´æ°ã"+editList.size()+"ãæ¡ï¼å é¤ã"+deleteList.size()+"ãæ¡"; } private void getAddAndEditList(List<Device> allList, List<AcsDeviceInfoResponse> allHkList, List<Device> addList, List<Device> editList, Date date) { if(allHkList!=null && allHkList.size()>0){ for(AcsDeviceInfoResponse device : allHkList){ Device model = getExistedDevice(device,allList); if(model !=null){ //妿已åå¨ï¼åæ´æ°æ°æ® model = initDeviceByHkData(model,device,date); editList.add(model); }else{ //妿ä¸åå¨ï¼åæ°å¢æ°æ® model = new Device(); model = initDeviceByHkData(model,device,date); addList.add(model); } } } } /** * åå§åæµ·åº·å ¥åºæ°æ® * @param model * @param device * @param date * @return */ private Device initDeviceByHkData(Device model, AcsDeviceInfoResponse device,Date date) { model.setIsdeleted(Constants.ZERO); model.setIp(device.getIp()); model.setHkDate(date); model.setCreateDate(DateUtil.StringToDate2(device.getCreateTime())); model.setEditDate(DateUtil.StringToDate2(device.getUpdateTime())); model.setNo(device.getDeviceCode()); model.setHkId(device.getIndexCode()); model.setName(device.getName()); model.setHkStatus(Constants.ONE); model.setType(Constants.ZERO); model.setResourceType(device.getResourceType()); model.setDevTypeCode(device.getDevTypeCode()); model.setManufature(device.getManufacturer()); model.setPort(device.getPort()); return model; } private Device getExistedDevice(AcsDeviceInfoResponse device, List<Device> allList) { if(allList.size()>0){ for(Device r : allList){ if(StringUtils.equals(r.getHkId(), device.getIndexCode())){ //表示æªå é¤ return r; } } } return null; } private void getDeleteList(List<Device> allList, List<AcsDeviceInfoResponse> allHkList,List<Device> deleteList ,Date date) { if(allList!=null && allList.size()>0){ for(Device device : allList){ if(isDeletedDevice(device,allHkList)){ device.setIsdeleted(Constants.ONE); device.setEditDate(date); deleteList.add(device); } } } } private boolean isDeletedDevice(Device device, List<AcsDeviceInfoResponse> allHkList) { if(allHkList.size()>0){ for(AcsDeviceInfoResponse r : allHkList){ if(StringUtils.equals(device.getHkId(), r.getIndexCode())){ //表示æªå é¤ return false; } } } return true; } } server/openapi/src/main/java/com/doumee/model/response/erp/UserListRespone.java
@@ -34,7 +34,7 @@ private Date editDate; @ApiModelProperty(value = "æå±ç»ç»ç¼ç ") private String orgId; @ApiModelProperty(value = "人è¸ç §çå°å") @ApiModelProperty(value = "人è¸ç §çå°å,å¾çå ¬ç½è®¿é®å°å") private String faceImg; @ApiModelProperty(value = "å·¥å·") private String code; server/pom.xml
@@ -271,6 +271,11 @@ <artifactId>artemis-http-client</artifactId> <version>1.1.3</version> </dependency> <dependency> <groupId>commons-net</groupId> <artifactId>commons-net</artifactId> <version>3.8.0</version> </dependency> </dependencies> <build> <plugins>