jiangping
2023-12-15 cc5d567bc58ce9657ce504fac6daa804ef9a15fa
海康接口对接开发
已修改5个文件
222 ■■■■■ 文件已修改
server/dmvisit_admin/src/main/java/com/doumee/task/ScheduleTool.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKConstants.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/core/utils/Constants.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/core/utils/FtpUtil.java 48 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncImgServiceImpl.java 155 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_admin/src/main/java/com/doumee/task/ScheduleTool.java
@@ -1,24 +1,12 @@
package com.doumee.task;
import com.doumee.biz.system.SystemDictDataBiz;
import com.doumee.service.business.impl.hksync.HkSyncImgServiceImpl;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.io.IOException;
import java.net.URI;
import java.util.Date;
import java.util.Map;
/**
 * 定时任务
@@ -47,6 +35,5 @@
    public void downloadHkImg() throws Exception {
        hkSyncImgService.downHKImgs(0);
    }
}
server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKConstants.java
@@ -7,8 +7,8 @@
@Data
public class HKConstants {
    public static final String IMG_INDEX ="HKIMG_" ;
    public static final String IMG_INDEX_ERROR ="HKIMG_ERROR=" ;
    public static final String IMG_INDEX ="HKIMG=" ;
    public static final String IMG_INDEX_ERROR ="HKIMG=ERROR=" ;
    private Logger logger = LoggerFactory.getLogger(HKConstants.class);
    //海康平台根据现场环境配置http还是https
    public static final String RESPONSE_SUCCEE = "0";
server/dmvisit_service/src/main/java/com/doumee/core/utils/Constants.java
@@ -44,6 +44,7 @@
    public static final String FILE_DIR = "";
    // 访客来访配置
    public static final String VISIT_CONFIG = "VISIT_CONFIG";
    public static final String MEMBER_IMG = "MEMBER_IMG";
    // 劳务来访配置
    public static final String LABOR_CONFIG = "LABOR_CONFIG";
    public static final String VISIT_EVENT_IMG = "VISIT_EVENT_IMG";
@@ -54,6 +55,7 @@
    public static final String FTP_PORT ="FTP_PORT" ;
    public static final String FTP_USERNAME ="FTP_USERNAME" ;
    public static final String FTP_PWD ="FTP_PWD" ;
    public static final String FTP_RESOURCE_PATH ="FTP_RESOURCE_PATH" ;
    public static  boolean DEALING_HK_IMG = false;
    // ERP接口配置
    public static final String ERP_CONFIG = "ERP_CONFIG";
server/dmvisit_service/src/main/java/com/doumee/core/utils/FtpUtil.java
@@ -29,6 +29,10 @@
@Slf4j
public class FtpUtil {
    public FTPClient ftpClient = new FTPClient();
    public static String hostname;
    public static int port;
    public static String username;
    public static  String password;
    public FtpUtil() {
        // 设置将过程中使用到的命令输出到控制台
@@ -39,26 +43,22 @@
    public FtpUtil(String hostname, int port, String username, String password)
            throws IOException {
        // 设置将过程中使用到的命令输出到控制台
        connect(hostname, port, username, password);
        FtpUtil.hostname =hostname;
        FtpUtil.port =port;
        FtpUtil.username =username;
        FtpUtil.password =password;
        connect();
    }
    /** */
    /**
     * 连接到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 {
    public boolean connect() throws IOException {
        ftpClient.connect(hostname, port);
        ftpClient.setControlEncoding("GBK");
        if (FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) {
@@ -243,8 +243,8 @@
            ftpClient.setControlEncoding("GBK");
            // 对远程目录的处理
            String remoteFileName = remote;
            if (remote.contains(File.separator)) {
                remoteFileName = remote.substring(remote.lastIndexOf(File.separator) + 1);
            if (remote.contains("/")) {
                remoteFileName = remote.substring(remote.lastIndexOf("/") + 1);
                // 创建服务器远程目录结构,创建失败直接返回
                if (StringUtils.equals(CreateDirecroty(remote, ftpClient), "2")) {
                    log.error("创建ftp目录失败======================="+remote);
@@ -298,8 +298,8 @@
        String result;
        // 对远程目录的处理
        String remoteFileName = remote ;
         if (remote.contains(File.separator)) {
            remoteFileName = remote.substring(remote.lastIndexOf(File.separator) + 1);
         if (remote.contains("/")) {
            remoteFileName = remote.substring(remote.lastIndexOf("/") + 1);
            // 创建服务器远程目录结构,创建失败直接返回
            if (StringUtils.equals(CreateDirecroty(remote, ftpClient), "2")) {
                return "2";
@@ -372,20 +372,20 @@
            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)
        String directory = remote.substring(0, remote.lastIndexOf("/") + 1);
        if (!directory.equalsIgnoreCase("/")
                && !ftpClient.changeWorkingDirectory(new String(directory
                .getBytes("GBK"), "iso-8859-1"))) {
            // 如果远程目录不存在,则递归创建远程服务器目录
            int start = 0;
            int end = 0;
            if (directory.startsWith(File.separator)) {
            if (directory.startsWith("/")) {
                start = 1;
            } else {
                start = 0;
            }
            end = directory
                    .indexOf(File.separator, start);
                    .indexOf("/", start);
            while (true) {
                String subDirectory = new String(remote.substring(start, end)
                        .getBytes("GBK"), "iso-8859-1");
@@ -400,7 +400,7 @@
                }
                start = end + 1;
                end = directory.indexOf(File.separator,
                end = directory.indexOf("/",
                        start);
                // 检查所有目录是否创建完毕
@@ -541,7 +541,7 @@
    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.uploadOnlineFile("https://profile-avatar.csdnimg.cn/default.jpg!1", "test"+"/", 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"));
@@ -631,7 +631,7 @@
            String remoteDirectoryPath) throws Exception {
        File src = new File(localDirectory);
        try {
            remoteDirectoryPath =  remoteDirectoryPath  + File.separator;
            remoteDirectoryPath =  remoteDirectoryPath  + "/";
            boolean makeDirFlag = this.ftpClient.makeDirectory(remoteDirectoryPath);
        }catch (IOException e) {
            e.printStackTrace();
@@ -645,7 +645,7 @@
            String tPath = remoteDirectoryPath+f.getName();
            if (!f.isDirectory()) {
                int dNum = getNumFromStr(tPath,File.separator.toCharArray()[0]);
                int dNum = getNumFromStr(tPath,"/".toCharArray()[0]);
                uploadFile(f, tPath);
                if(dNum -2>=0){
                    for (int i = 0; i < dNum-1; i++) {
@@ -654,7 +654,7 @@
                }
            }else{
                uploadDirectory(srcName,
                        tPath+File.separator);
                        tPath+"/");
            }
        }
        return true;
@@ -666,7 +666,7 @@
     * */
    public boolean delDirectory(String pathName ) throws Exception {
        try {
            this.ftpClient.changeWorkingDirectory( pathName.substring(0, pathName.lastIndexOf(File.separator)) );
            this.ftpClient.changeWorkingDirectory( pathName.substring(0, pathName.lastIndexOf("/")) );
            ftpClient.removeDirectory(pathName);
        }catch (IOException e) {
            e.printStackTrace();
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncImgServiceImpl.java
@@ -51,7 +51,6 @@
    @Autowired
    private SystemDictDataBiz systemDictDataBiz;
    @Override
    @Async
    public  String downHKImgs(int type){
        if(Constants.DEALING_HK_IMG){
            return null ;
@@ -60,13 +59,12 @@
        try {
            //查询所有访客事件记录中所有下载的海康端 抓拍照片 和 照片
            startDealVisitImg();
            //查询所有停车场事件记录中所有下载的海康端 车牌图片 和   车辆图片
            startDealCarImg();
            //查询所有门禁事件记录中所有下载的海康端 抓拍照片 和   身份证图片URL
            startDealDeviceImg();
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            Constants.DEALING_HK_IMG =false;
        }
@@ -76,29 +74,40 @@
    private void startDealDeviceImg() {
        List<DeviceEvent> deviceEventList = deviceEventMapper.selectList(new QueryWrapper<DeviceEvent>().lambda()
                .eq(DeviceEvent::getIsdeleted,Constants.ZERO)
                .and(wrapper ->{wrapper.likeLeft(DeviceEvent::getExtEventPictureURL,HKConstants.IMG_INDEX)
                .and(wrapper ->{wrapper.likeRight(DeviceEvent::getExtEventPictureURL,HKConstants.IMG_INDEX)
                        .or()
                        .likeLeft(DeviceEvent::getExtEventIDCardPictureURL,HKConstants.IMG_INDEX) ;}));
                        .likeRight(DeviceEvent::getExtEventIDCardPictureURL,HKConstants.IMG_INDEX) ;}));
        Date date= new Date();
        if(deviceEventList !=null && deviceEventList.size()>0){
            for(DeviceEvent model:deviceEventList){
                String img1 = model.getExtEventPictureURL();
                String img2 = model.getExtEventIDCardPictureURL();
                String serverIndex = model.getSvrIndexCode();//服务器编码
                String rs1 = downHkImgToFtp(img1,serverIndex,Constants.DEVICE_EVENT_IMG);
                String rs2 = downHkImgToFtp(img2,serverIndex,Constants.DEVICE_EVENT_IMG);
                if(StringUtils.isBlank(serverIndex)){
                    continue;
                }
                String rs1 = null;
                String rs2 = null;
                DeviceEvent event = new DeviceEvent();
                event.setId(model.getId());
                event.setEditDate(date);
                if(StringUtils.isNotBlank(rs1)){
                    event.setExtEventPictureURL(rs1);
                }else{
                    event.setExtEventPictureURL(img1.replace(HKConstants.IMG_INDEX, HKConstants.IMG_INDEX_ERROR));
                if(StringUtils.isNotBlank(model.getExtEventPictureURL())){
                    String img1 = model.getExtEventPictureURL().replace(HKConstants.IMG_INDEX_ERROR, "").replace(HKConstants.IMG_INDEX, "");
                    rs1 = downHkImgToFtp(img1,serverIndex,Constants.DEVICE_EVENT_IMG);
                    if(StringUtils.isNotBlank(rs1)){
                        event.setExtEventPictureURL(rs1);
                    }else{
                        event.setExtEventPictureURL(model.getExtEventPictureURL().replace(HKConstants.IMG_INDEX, HKConstants.IMG_INDEX_ERROR));
                    }
                }
                if(StringUtils.isNotBlank(rs2)){
                    event.setExtEventIDCardPictureURL(rs2);
                }else{
                    event.setExtEventIDCardPictureURL(img2.replace(HKConstants.IMG_INDEX, HKConstants.IMG_INDEX_ERROR));
                if(StringUtils.isNotBlank(model.getExtEventIDCardPictureURL())){
                    String img2 = model.getExtEventIDCardPictureURL().replace(HKConstants.IMG_INDEX_ERROR, "").replace(HKConstants.IMG_INDEX, "");
                    rs2 = downHkImgToFtp(img2,serverIndex,Constants.DEVICE_EVENT_IMG);
                    if(StringUtils.isNotBlank(rs2)){
                        event.setExtEventIDCardPictureURL(rs2);
                    }else{
                        event.setExtEventIDCardPictureURL(model.getExtEventIDCardPictureURL().replace(HKConstants.IMG_INDEX, HKConstants.IMG_INDEX_ERROR));
                    }
                }
                deviceEventMapper.updateById(event);
            }
@@ -109,30 +118,41 @@
    private void startDealCarImg() {
        List<CarEvent> carEventList = carEventMapper.selectList(new QueryWrapper<CarEvent>().lambda()
                .eq(CarEvent::getIsdeleted,Constants.ZERO)
                .and(wrapper ->{wrapper.likeLeft(CarEvent::getPlatePicUrl,HKConstants.IMG_INDEX)
                .and(wrapper ->{wrapper.likeRight(CarEvent::getPlatePicUrl,HKConstants.IMG_INDEX)
                        .or()
                        .likeLeft(CarEvent::getVehiclePicUrl,HKConstants.IMG_INDEX) ;}));
                        .likeRight(CarEvent::getVehiclePicUrl,HKConstants.IMG_INDEX) ;}));
        Date date= new Date();
        if(carEventList !=null && carEventList.size()>0){
            for(CarEvent model:carEventList){
                String img1 = model.getPlatePicUrl();
                String img2 = model.getVehiclePicUrl();
                String serverIndex = model.getSvrIndex();//服务器编码
                String rs1 = downHkImgToFtp(img1,serverIndex,Constants.CAR_EVENT_IMG);
                String rs2 = downHkImgToFtp(img2,serverIndex,Constants.CAR_EVENT_IMG);
                if(StringUtils.isBlank(serverIndex)){
                    continue;
                }
                CarEvent event = new CarEvent();
                event.setId(model.getId());
                event.setEditDate(date);
                if(StringUtils.isNotBlank(rs1)){
                    event.setPlatePicUrl(rs1);
                }else{
                    event.setPlatePicUrl(img1.replace(HKConstants.IMG_INDEX, HKConstants.IMG_INDEX_ERROR));
                String rs1 = null;
                String rs2 = null;
                if(StringUtils.isNotBlank(model.getPlatePicUrl())){
                    String img1 = model.getPlatePicUrl().replace(HKConstants.IMG_INDEX_ERROR, "").replace(HKConstants.IMG_INDEX, "");
                    rs1 = downHkImgToFtp(img1,serverIndex,Constants.CAR_EVENT_IMG);
                    if(StringUtils.isNotBlank(rs1)){
                        event.setPlatePicUrl(rs1);
                    }else{
                        event.setPlatePicUrl(model.getPlatePicUrl().replace(HKConstants.IMG_INDEX, HKConstants.IMG_INDEX_ERROR));
                    }
                }
                if(StringUtils.isNotBlank(rs2)){
                    event.setVehiclePicUrl(rs2);
                }else{
                    event.setVehiclePicUrl(img2.replace(HKConstants.IMG_INDEX, HKConstants.IMG_INDEX_ERROR));
                if(StringUtils.isNotBlank(model.getVehiclePicUrl())){
                    String img2 = model.getVehiclePicUrl().replace(HKConstants.IMG_INDEX_ERROR, "").replace(HKConstants.IMG_INDEX, "");
                    rs2 = downHkImgToFtp(img2,serverIndex,Constants.CAR_EVENT_IMG);
                    if(StringUtils.isNotBlank(rs2)){
                        event.setVehiclePicUrl(rs2);
                    }else{
                        event.setVehiclePicUrl(model.getVehiclePicUrl().replace(HKConstants.IMG_INDEX, HKConstants.IMG_INDEX_ERROR));
                    }
                }
                carEventMapper.updateById(event);
            }
        }
@@ -142,70 +162,89 @@
    private void startDealVisitImg() {
        List<VisitEvent> visitEventList = visitEventMapper.selectList(new QueryWrapper<VisitEvent>().lambda()
                .eq(VisitEvent::getIsdeleted,Constants.ZERO)
                .and(wrapper ->{wrapper.likeLeft(VisitEvent::getCaptureUrl,HKConstants.IMG_INDEX)
                .and(wrapper ->{wrapper.likeRight(VisitEvent::getCaptureUrl,HKConstants.IMG_INDEX)
                        .or()
                        .likeLeft(VisitEvent::getPhotoUrl,HKConstants.IMG_INDEX) ;}));
                        .likeRight(VisitEvent::getPhotoUrl,HKConstants.IMG_INDEX) ;}));
        Date date= new Date();
        if(visitEventList !=null && visitEventList.size()>0){
            for(VisitEvent model:visitEventList){
                String img1 = model.getCaptureUrl();
                String img2 = model.getPhotoUrl();
                String serverIndex = model.getSvrIndexCode();//服务器编码
                String rs1 = downHkImgToFtp(img1,serverIndex,Constants.VISIT_EVENT_IMG);
                String rs2 = downHkImgToFtp(img2,serverIndex,Constants.VISIT_EVENT_IMG);
                if(StringUtils.isBlank(serverIndex)){
                    continue;
                }
                VisitEvent event = new VisitEvent();
                event.setId(model.getId());
                event.setEditDate(date);
                if(StringUtils.isNotBlank(rs1)){
                    event.setCaptureUrl(rs1);
                }else{
                    event.setCaptureUrl(img1.replace(HKConstants.IMG_INDEX, HKConstants.IMG_INDEX_ERROR));
                String rs1 = null;
                String rs2 = null;
                if(StringUtils.isNotBlank(model.getCaptureUrl())){
                    String img1 = model.getCaptureUrl().replace(HKConstants.IMG_INDEX_ERROR, "").replace(HKConstants.IMG_INDEX, "");
                    rs1 = downHkImgToFtp(img1,serverIndex,Constants.VISIT_EVENT_IMG);
                    if(StringUtils.isNotBlank(rs1)){
                        event.setCaptureUrl(rs1);
                    }else{
                        event.setCaptureUrl(model.getCaptureUrl().replace(HKConstants.IMG_INDEX, HKConstants.IMG_INDEX_ERROR));
                    }
                }
                if(StringUtils.isNotBlank(rs2)){
                    event.setPhotoUrl(rs2);
                }else{
                    event.setPhotoUrl(img2.replace(HKConstants.IMG_INDEX, HKConstants.IMG_INDEX_ERROR));
                if(StringUtils.isNotBlank(model.getPhotoUrl())){
                    String img2 = model.getPhotoUrl().replace(HKConstants.IMG_INDEX_ERROR, "").replace(HKConstants.IMG_INDEX, "");
                    rs2 = downHkImgToFtp(img2,serverIndex,Constants.VISIT_EVENT_IMG);
                    if(StringUtils.isNotBlank(rs2)){
                        event.setPhotoUrl(rs2);
                    }else{
                        event.setPhotoUrl(model.getPhotoUrl().replace(HKConstants.IMG_INDEX, HKConstants.IMG_INDEX_ERROR));
                    }
                }
                visitEventMapper.updateById(event);
            }
        }
    }
    private String downHkImgToFtp(String img1, String serverIndex, String folder) {
    public static  FtpUtil ftp  = null;
    private String downHkImgToFtp(String img1, String serverIndex, String folder_code) {
        String folder = systemDictDataBiz.queryByCode(Constants.FTP,folder_code).getCode();
        InputStream is = null;
        if(StringUtils.equals(folder,Constants.CAR_EVENT_IMG)){
        if(StringUtils.equals(folder_code,Constants.CAR_EVENT_IMG)){
            //停车场抓拍图
            CarPictureRequest param = new CarPictureRequest();
            param.setPicUri(img1);
            param.setPicUri(img1.replace(HKConstants.IMG_INDEX_ERROR,"").replace(HKConstants.IMG_INDEX,""));
            param.setAswSyscode(serverIndex);
            is = HKService.getCarPicture(param);
        }else if(StringUtils.equals(folder,Constants.DEVICE_EVENT_IMG)){
        }else if(StringUtils.equals(folder_code,Constants.DEVICE_EVENT_IMG)){
            //门禁事件图片
            DevicePictureRequest param = new DevicePictureRequest();
            param.setPicUri(img1);
            param.setPicUri(img1.replace(HKConstants.IMG_INDEX_ERROR,"").replace(HKConstants.IMG_INDEX,""));
            param.setSvrIndexCode(serverIndex);
            is = HKService.getDevicePicture(param);
        }else if(StringUtils.equals(folder,Constants.VISIT_EVENT_IMG)){
        }else if(StringUtils.equals(folder_code,Constants.VISIT_EVENT_IMG)){
            //访客事件图片
            VisitPictureRequest param = new VisitPictureRequest();
            param.setPicUri(img1);
            param.setPicUri(img1.replace(HKConstants.IMG_INDEX_ERROR,"").replace(HKConstants.IMG_INDEX,""));
            param.setSvrIndexCode(serverIndex);
            is = HKService.getVisitPicture(param);
        }
        if(is ==null){
            return  null;
        }
        //TODO------jiangping---------
        try {
            FtpUtil ftp = new FtpUtil(systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_HOST).getCode(),
                    Integer.parseInt(systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_PORT).getCode()),
                    systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_USERNAME).getCode(),
                    systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_PWD).getCode());
            if(ftp == null){
                 ftp = new FtpUtil(systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_HOST).getCode(),
                        Integer.parseInt(systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_PORT).getCode()),
                        systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_USERNAME).getCode(),
                        systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_PWD).getCode());
            }else{
                ftp.connect();
            }
            String date = DateUtil.getNowShortDate();
            String fName = File.separator+date+File.separator+ UUID.randomUUID().toString()+".jpg";
            String fName =  date+"/"+ UUID.randomUUID().toString()+".jpg";
            String fileName = folder+fName;
            boolean r = ftp.uploadInputstream(is,fileName);//上传
            if(r){
                log.info("【海康图片下载上传FTP失败】======================" );
                log.info("【海康图片下载上传FTP成功】======================" );
                return  fName;
            }else{
                log.error("【海康图片下载上传FTP失败】======================" );