已添加3个文件
已修改30个文件
已删除1个文件
486 ■■■■ 文件已修改
server/system_service/src/main/java/com/doumee/dao/timer/scheduler/QuartzManage.java 23 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_timer/src/main/java/com/doumee/config/AsyncPoolConfig.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_timer/src/main/java/com/doumee/jobs/fegin/VisitServiceFegin.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_timer/src/main/resources/application.yml 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_timer/src/main/resources/bootstrap.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/admin_timer/src/main/java/com/doumee/api/DatabaseController.java 64 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/admin_timer/src/main/java/com/doumee/api/DingTalkTokenTimerController.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/admin_timer/src/main/java/com/doumee/api/DuanluqiTimerController.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/admin_timer/src/main/java/com/doumee/api/HkDeviceTimerController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/admin_timer/src/main/java/com/doumee/api/HkEmpowerTimerController.java 62 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/admin_timer/src/main/java/com/doumee/api/HkImageTimerController.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/admin_timer/src/main/java/com/doumee/api/HkNoticeTimerController.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/admin_timer/src/main/java/com/doumee/api/HkParkTimerController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/admin_timer/src/main/java/com/doumee/api/HkPlatformTimerController.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/admin_timer/src/main/java/com/doumee/api/HkSmsEmailTimerController.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/admin_timer/src/main/java/com/doumee/api/HkUsersTimerController.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/admin_timer/src/main/java/com/doumee/api/HkVisitTimerController.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/admin_timer/src/main/java/com/doumee/api/InterfaceLogTimerController.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/admin_timer/src/main/java/com/doumee/api/JkCabinetTimerController.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/admin_timer/src/main/java/com/doumee/api/JkCustomerTimerController.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/admin_timer/src/main/java/com/doumee/api/PlatformJobController.java 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/admin_timer/src/main/java/com/doumee/api/WeatherTimerController.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/admin_timer/src/main/java/com/doumee/api/WxTokenTimerController.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/admin_timer/src/main/java/com/doumee/config/AsyncPoolConfig.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/admin_timer/src/main/resources/bootstrap.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/resources/bootstrap.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/db/BUSINE~1.SQL 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/config/AsyncPoolConfig.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkCabinetLog.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/DeviceRoleServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkCabinetGridServiceImpl.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkSketchServiceImpl.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncEmpowerServiceImpl.java 71 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPushServiceImpl.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/dao/timer/scheduler/QuartzManage.java
@@ -4,6 +4,8 @@
import com.doumee.dao.timer.entity.QuartzJob;
import org.quartz.*;
import org.quartz.CronTrigger;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
@@ -15,6 +17,8 @@
 */
@Component
public class QuartzManage {
    private static final Logger log = LoggerFactory.getLogger(QuartzManage.class);
    private static final String SCHEDULE_NAME = "BOOT_JOB_" ;
@@ -42,8 +46,7 @@
        try {
            return (CronTrigger) this.scheduler.getTrigger(getTriggerKey(jobId)) ;
        }catch (Exception e){
            e.printStackTrace();
//            throw new RuntimeException("createJob Fail",e) ;
            log.error("getCronTrigger失败, jobId={}", jobId, e);
        }
        return null;
    }
@@ -61,7 +64,7 @@
            // æž„建Cron调度器
            CronScheduleBuilder scheduleBuilder = CronScheduleBuilder
                                                .cronSchedule(quartzJob.getCronExpres())
                                                .withMisfireHandlingInstructionDoNothing() ;
                                                .withMisfireHandlingInstructionFireAndProceed() ;
            // ä»»åŠ¡è§¦å‘å™¨
            CronTrigger trigger = TriggerBuilder.newTrigger()
@@ -72,8 +75,7 @@
            // çŠ¶æ€æ ¡éªŒ
            checkStop(quartzJob) ;
        } catch (Exception e){
            e.printStackTrace();
//            throw new RuntimeException("createJob Fail",e) ;
            log.error("createJob失败, jobId={}", quartzJob.getId(), e);
        }
    }
@@ -87,7 +89,7 @@
            // æž„建Cron调度器
            CronScheduleBuilder scheduleBuilder = CronScheduleBuilder
                                                .cronSchedule(quartzJob.getCronExpres())
                                                .withMisfireHandlingInstructionDoNothing();
                                                .withMisfireHandlingInstructionFireAndProceed();
            // ä»»åŠ¡è§¦å‘å™¨
            CronTrigger trigger = getCronTrigger(quartzJob.getId())
                                .getTriggerBuilder().withIdentity(triggerKey)
@@ -97,8 +99,7 @@
            // çŠ¶æ€æ ¡éªŒ
            checkStop(quartzJob) ;
        }catch (Exception e){
            e.printStackTrace();
//            throw new RuntimeException("createJob Fail",e) ;
            log.error("updateJob失败, jobId={}", quartzJob.getId(), e);
        }
    }
@@ -133,8 +134,7 @@
            dataMap.put(QuartzJob.JOB_PARAM_KEY,quartzJob);
            this.scheduler.triggerJob(getJobKey(quartzJob.getId()),dataMap);
        } catch (Exception e){
            e.printStackTrace();
//            throw new RuntimeException("createJob Fail",e) ;
            log.error("run失败, jobId={}", quartzJob.getId(), e);
        }
    }
@@ -147,8 +147,7 @@
                this.scheduler.pauseJob(getJobKey(quartzJob.getId()));
            }
        } catch (Exception e){
            e.printStackTrace();
//            throw new RuntimeException("createJob Fail",e) ;
            log.error("checkStop失败, jobId={}", quartzJob.getId(), e);
        }
    }
server/system_timer/src/main/java/com/doumee/config/AsyncPoolConfig.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,29 @@
package com.doumee.config;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.AsyncConfigurer;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import java.util.concurrent.Executor;
import java.util.concurrent.ThreadPoolExecutor;
@Slf4j
@Configuration
public class AsyncPoolConfig implements AsyncConfigurer {
    @Bean("asyncExecutor")
    @Override
    public Executor getAsyncExecutor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(5);
        executor.setMaxPoolSize(20);
        executor.setQueueCapacity(100);
        executor.setKeepAliveSeconds(60);
        executor.setThreadNamePrefix("async-timer-");
        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
        executor.initialize();
        return executor;
    }
}
server/system_timer/src/main/java/com/doumee/jobs/fegin/VisitServiceFegin.java
@@ -3,14 +3,12 @@
import com.doumee.service.business.third.model.ApiResponse;
import io.swagger.annotations.ApiOperation;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PostMapping;
/**
 * @author jiangping
 */
@Component("visitServiceJob")
@FeignClient(value = "visitsTimer")
public interface VisitServiceFegin {
server/system_timer/src/main/resources/application.yml
@@ -68,6 +68,14 @@
  servlet:
    session:
      timeout: PT3H  #表示12小时
# Feign超时配置
feign:
  client:
    config:
      default:
        connectTimeout: 5000
        readTimeout: 30000
auth:
  jwt:
    enabled: true   #是否开启JWT登录认证功能
server/system_timer/src/main/resources/bootstrap.yml
@@ -1,6 +1,6 @@
spring:
  profiles:
    active: dev
    active: pro
  application:
    name: systemTimer
    # å®‰å…¨é…ç½®
server/visits/admin_timer/src/main/java/com/doumee/api/DatabaseController.java
@@ -10,6 +10,7 @@
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@@ -23,6 +24,7 @@
import java.sql.Statement;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.Executor;
/**
 * @author æ±Ÿè¹„蹄
@@ -35,6 +37,9 @@
public class DatabaseController extends BaseController {
    @Autowired
    @Qualifier("asyncExecutor")
    private Executor asyncExecutor;
    @Autowired
    private PlatformJobService platformJobService;
    @Autowired
    private SystemDictDataBiz systemDictDataBiz;
@@ -43,43 +48,32 @@
    @ApiOperation("数据库备份,保留最近7个备份sql")
    @PostMapping("/backupDatabase")
    public ApiResponse backupDatabase() {
        try {
            String timestamp = DateUtil.getNowLongTime();
//            String path = "/usr/local/jars/db/";
//            String backupPath = path + timestamp + ".sql";
            String path = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.MYSQL_BACKUP_DIR).getCode();
            String code = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.MYSQL_BACKUP_CDOE).getCode() ;
            String backupPath = path + timestamp + ".sql";
            code= code.replace("${param}",backupPath);
            log.error("数据库备份================: " + code);
            ProcessBuilder builder = new ProcessBuilder(code);
            // é‡å®šå‘错误流到标准输出流
            builder.redirectErrorStream(true);
            // stdout
            Process process = builder.start();
            new Thread(new ProcessHandleRunnable(process)).start();
            process.waitFor(); // wait if needed
        log.info("定时任务执行开始:backupDatabase-数据库备份");
        asyncExecutor.execute(() -> {
            try {
                String timestamp = DateUtil.getNowLongTime();
                String path = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.MYSQL_BACKUP_DIR).getCode();
                String code = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.MYSQL_BACKUP_CDOE).getCode() ;
                String backupPath = path + timestamp + ".sql";
                code= code.replace("${param}",backupPath);
                log.info("数据库备份命令: {}", code);
                ProcessBuilder builder = new ProcessBuilder(code);
                builder.redirectErrorStream(true);
                Process process = builder.start();
                new Thread(new ProcessHandleRunnable(process)).start();
                process.waitFor();
      /*      // ä½¿ç”¨mysqldump命令进行数据库备份
            Process process = Runtime.getRuntime().exec(code);
            process.getErrorStream();
            process.getInputStream();
            process.waitFor();*/
            // æ£€æŸ¥å¤‡ä»½æ˜¯å¦æˆåŠŸ
            if (new File(backupPath).exists()) {
                log.info("数据库备份成功: " + backupPath);
                return ApiResponse.success("数据库备份成功: " + backupPath);
            } else {
                log.error("数据库备份失败.");
                if (new File(backupPath).exists()) {
                    log.info("数据库备份成功: {}", backupPath);
                } else {
                    log.error("数据库备份失败.");
                }
                deleteOldFiles(path,7);
            } catch (Exception e) {
                log.error("数据库备份失败", e);
            }
            deleteOldFiles(path,7);//保留最近7个文件
        } catch (Exception e) {
            e.printStackTrace();
            log.error("数据库备份失败."+e.getMessage());
        }
        return ApiResponse.failed("数据库备份失败" );
        });
        return ApiResponse.success("数据库备份已提交");
    }
    public void run() {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
server/visits/admin_timer/src/main/java/com/doumee/api/DingTalkTokenTimerController.java
@@ -6,6 +6,7 @@
import com.doumee.service.system.SystemDictDataService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.PostMapping;
@@ -17,6 +18,7 @@
 * @date 2023/11/30 15:33
 */
@Api(tags = "钉钉token定时器接口")
@Slf4j
@RestController
@RequestMapping("/timer/dingTalkToken")
public class DingTalkTokenTimerController extends BaseController {
@@ -37,6 +39,7 @@
    @ApiOperation("开启定时更新钉钉业务token")
    @PostMapping("/updateDingTalkTokenOrigin")
    public ApiResponse updateDingTalkTokenOrigin() throws Exception {
        log.info("定时任务执行开始:updateDingTalkTokenOrigin-更新钉钉token");
        dingTalk.updTokenInfo();
        return ApiResponse.success("开启定时更新微信公众号accesstoken成功");
    }
server/visits/admin_timer/src/main/java/com/doumee/api/DuanluqiTimerController.java
@@ -11,6 +11,7 @@
import com.doumee.service.system.SystemDictDataService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.mgt.DefaultSecurityManager;
import org.springframework.beans.factory.annotation.Autowired;
@@ -27,6 +28,7 @@
 * @date 2023/11/30 15:33
 */
@Api(tags = "断路器远程控制定时器")
@Slf4j
@RestController
@RequestMapping("/timer/duanluqi")
public class DuanluqiTimerController extends BaseController {
@@ -36,6 +38,7 @@
    @ApiOperation("开启定时远程控制断路器分闸")
    @PostMapping("/autoCloseCmd")
    public ApiResponse autoCloseCmd() {
        log.info("定时任务执行开始:autoCloseCmd-远程控制断路器分闸");
        deviceService.autoCloseCmdTimer();
        return ApiResponse.success("开启定时远程控制断路器分闸成功");
    }
server/visits/admin_timer/src/main/java/com/doumee/api/HkDeviceTimerController.java
@@ -6,6 +6,7 @@
import com.doumee.service.business.impl.hksync.HkSyncDeviceServiceImpl;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
@@ -16,6 +17,7 @@
 * @date 2023/11/30 15:33
 */
@Api(tags = "设备定时器接口")
@Slf4j
@RestController
@RequestMapping("/timer/device")
public class HkDeviceTimerController extends BaseController {
@@ -26,12 +28,14 @@
    @ApiOperation("开启定时查询设备状态")
    @PostMapping("/getAscDeviceStatus")
    public ApiResponse getAscDeviceStatus() {
        log.info("定时任务执行开始:getAscDeviceStatus-查询设备状态");
        hkSyncDeviceService.getAscDeviceStatus();
        return ApiResponse.success("开启定时查询设备状态成功");
    }
    @ApiOperation("更新全部LED屏显内容为默认内容")
    @PostMapping("/allLedDefualtContent")
    public ApiResponse allLedDefualtContent() {
        log.info("定时任务执行开始:allLedDefualtContent-更新LED屏默认内容");
        deviceService.allLedDefualtContent();
        return ApiResponse.success("更新全部LED屏显内容为默认内容");
    }
server/visits/admin_timer/src/main/java/com/doumee/api/HkEmpowerTimerController.java
@@ -5,39 +5,58 @@
import com.doumee.service.business.impl.hksync.fhk.HkSyncVehicleFromHKServiceImpl;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
/**
 * @author æ±Ÿè¹„蹄
 * @date 2023/11/30 15:33
 */
@Api(tags = "人员设备授权定时器接口")
@Slf4j
@RestController
@RequestMapping("/timer/empower")
public class HkEmpowerTimerController extends BaseController {
    @Autowired
    private HkSyncEmpowerServiceImpl hkSyncEmpowerService;
    private final AtomicInteger endId2 = new AtomicInteger(0);
    private final AtomicBoolean dealingDetail = new AtomicBoolean(false);
    public static Integer endId2 = 0;
    @ApiOperation("开启定时查询人员设备授权结果")
    @PostMapping("/syncEmpowerDetailData")
    public ApiResponse syncEmpowerDetailData() {
        if(endId2 ==null){
            endId2 =0;
        log.info("定时任务执行开始:syncEmpowerDetailData-查询人员设备授权结果");
        if(!dealingDetail.compareAndSet(false, true)){
            return ApiResponse.success("syncEmpowerDetailData正在执行,跳过");
        }
        endId2 =  hkSyncEmpowerService.syncEmpowerDetailData(endId2);
        for (int i = 0; i < 9; i++) {
            if(endId2!=null){
                endId2 =  hkSyncEmpowerService.syncEmpowerDetailData(endId2);
        try {
            int current = endId2.get();
            Integer next = hkSyncEmpowerService.syncEmpowerDetailData(current);
            for (int i = 0; i < 9; i++) {
                if(next != null){
                    endId2.set(next);
                    next = hkSyncEmpowerService.syncEmpowerDetailData(next);
                }
            }
            if(next != null){
                endId2.set(next);
            }
        } catch (Exception e){
            log.error("syncEmpowerDetailData异常", e);
        } finally {
            dealingDetail.set(false);
        }
        return ApiResponse.success("开启定时查询人员设备授权结果成功");
    }
    @ApiOperation("开启定时查询人员设备授权下载进度")
    @PostMapping("/syncEmpowerResultData")
    public ApiResponse syncEmpowerResultData() {
        log.info("定时任务执行开始:syncEmpowerResultData-查询授权下载进度");
        hkSyncEmpowerService.syncEmpowerResultData(0);
        return ApiResponse.success("开启定时查询人员设备授权下载进度成功");
    }
@@ -45,24 +64,39 @@
    @ApiOperation("开启定时重新下发失败的授权数据")
    @PostMapping("/syncEmpowerFailData")
    public ApiResponse syncEmpowerFailData() {
        log.info("定时任务执行开始:syncEmpowerFailData-重新下发失败授权");
        hkSyncEmpowerService.syncEmpowerFailData(0);
        return ApiResponse.success("开启定时重新下发失败的授权数据成功");
    }
    public static Integer endId = 0;
    private final AtomicInteger endId = new AtomicInteger(0);
    private final AtomicBoolean dealingEmpower = new AtomicBoolean(false);
    @Autowired
    private HkSyncVehicleFromHKServiceImpl hkSyncVehicleFromHKService;
    @ApiOperation("开启定时刷新人员设备授权")
    @PostMapping("/syncEmpowerData")
    public ApiResponse syncEmpowerData() {
        if(endId ==null){
            endId =0;
        log.info("定时任务执行开始:syncEmpowerData-刷新人员设备授权");
        if(!dealingEmpower.compareAndSet(false, true)){
            return ApiResponse.success("syncEmpowerData正在执行,跳过");
        }
        endId = hkSyncEmpowerService.syncEmpowerData(endId);
        for (int i = 0; i < 9; i++) {
            if(endId!=null){
                endId = hkSyncEmpowerService.syncEmpowerData(endId);
        try {
            int current = endId.get();
            Integer next = hkSyncEmpowerService.syncEmpowerData(current);
            for (int i = 0; i < 9; i++) {
                if(next != null){
                    endId.set(next);
                    next = hkSyncEmpowerService.syncEmpowerData(next);
                }
            }
            if(next != null){
                endId.set(next);
            }
        } catch (Exception e){
            log.error("syncEmpowerData异常", e);
        } finally {
            dealingEmpower.set(false);
        }
        return ApiResponse.success("开启定时刷新人员设备授权成功");
    }
server/visits/admin_timer/src/main/java/com/doumee/api/HkImageTimerController.java
@@ -5,6 +5,7 @@
import com.doumee.service.business.impl.hksync.HkSyncImgServiceImpl;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
@@ -15,6 +16,7 @@
 * @date 2023/11/30 15:33
 */
@Api(tags = "海康事件图片下载定时器接口")
@Slf4j
@RestController
@RequestMapping("/timer/image")
public class HkImageTimerController extends BaseController {
@@ -29,6 +31,7 @@
    @ApiOperation("开启定时下载海康系统图片数据")
    @PostMapping("/downHKImgs")
    public ApiResponse downHKImgs() {
        log.info("定时任务执行开始:downHKImgs-下载海康图片");
        if(dataSyncConfig.getNeedDealImg()!=null && dataSyncConfig.getNeedDealImg()){
            hkSyncImgService.downHKImgs(0);
        }
server/visits/admin_timer/src/main/java/com/doumee/api/HkNoticeTimerController.java
@@ -6,6 +6,7 @@
import com.doumee.service.business.impl.hksync.fhk.HkSyncVisitFromHKServiceImpl;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
@@ -16,6 +17,7 @@
 * @date 2023/11/30 15:33
 */
@Api(tags = "海康代办定时抓取接口")
@Slf4j
@RestController
@RequestMapping("/timer/hkNotice")
public class HkNoticeTimerController extends BaseController {
@@ -29,6 +31,7 @@
    @ApiOperation("开启定时查询最新人员代办数据状态")
    @PostMapping("/getNoticeList")
    public ApiResponse getNoticeList() {
        log.info("定时任务执行开始:getNoticeList-查询海康代办数据");
        hkSyncVisitService.syncVisitData();
        return ApiResponse.success("开启定时下发访客预约申请成功");
    }
server/visits/admin_timer/src/main/java/com/doumee/api/HkParkTimerController.java
@@ -5,6 +5,7 @@
import com.doumee.service.business.impl.hksync.fhk.HkSyncVehicleFromHKServiceImpl;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
@@ -17,6 +18,7 @@
 * @date 2023/11/30 15:33
 */
@Api(tags = "停车场接口")
@Slf4j
@RestController
@RequestMapping("/timer/park")
public class HkParkTimerController extends BaseController {
@@ -29,12 +31,14 @@
    @ApiOperation("开启定时车辆包期授权")
    @PostMapping("/syncParkBookData")
    public ApiResponse syncParkBookData() {
        log.info("定时任务执行开始:syncParkBookData-车辆包期授权");
        hkSyncParkService.syncParkBookData();
        return ApiResponse.success("开启定时车辆包期授权成功");
    }
    @ApiOperation("开启定时查询车辆查询")
    @PostMapping("/syncVehicleUpdateData")
    public ApiResponse syncVehicleUpdateData() {
        log.info("定时任务执行开始:syncVehicleUpdateData-查询车辆");
        hkSyncVehicleFromHKService.syncVehicleUpdateData(new Date(System.currentTimeMillis()-24*60*60*1000));
        return ApiResponse.success("开启定时查询车辆查询成功");
    }
server/visits/admin_timer/src/main/java/com/doumee/api/HkPlatformTimerController.java
@@ -5,6 +5,7 @@
import com.doumee.service.business.impl.hksync.HkSyncPlatformsServiceImpl;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
@@ -15,6 +16,7 @@
 * @date 2023/11/30 15:33
 */
@Api(tags = "设备定时器接口")
@Slf4j
@RestController
@RequestMapping("/timer/platform")
public class HkPlatformTimerController extends BaseController {
@@ -23,6 +25,7 @@
    @ApiOperation("开启定时查询月台状态")
    @PostMapping("/getPlatformStatus")
    public ApiResponse getPlatformStatus() {
        log.info("定时任务执行开始:getPlatformStatus-查询月台状态");
        hkSyncPlatformsService.getPlatformStatus(new PlatformStatusRequest());
        return ApiResponse.success("开启定时查询月台状态成功");
    }
server/visits/admin_timer/src/main/java/com/doumee/api/HkSmsEmailTimerController.java
@@ -4,6 +4,7 @@
import com.doumee.service.business.SmsEmailService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
@@ -14,6 +15,7 @@
 * @date 2023/11/30 15:33
 */
@Api(tags = "短信发送定时任务")
@Slf4j
@RestController
@RequestMapping("/timer/sms")
public class HkSmsEmailTimerController extends BaseController {
@@ -22,6 +24,7 @@
    @ApiOperation("开启定时短信发送定时任务")
    @PostMapping("/sendWaitingSmsNotice")
    public ApiResponse sendWaitingSmsNotice() {
        log.info("定时任务执行开始:sendWaitingSmsNotice-发送等待短信");
        smsEmailService.sendWaitingSmsNotice();
        return ApiResponse.success("开启定时短信发送定时任务成功");
    }
server/visits/admin_timer/src/main/java/com/doumee/api/HkUsersTimerController.java
@@ -66,6 +66,7 @@
    @ApiOperation("开启定时冻结人员")
    @PostMapping("/memberFreeze")
    public ApiResponse memberFreeze() {
        log.info("定时任务执行开始:memberFreeze-冻结人员");
        memberService.memberFreeze();
        return ApiResponse.success("开启定时冻结人员成功");
    }
server/visits/admin_timer/src/main/java/com/doumee/api/HkVisitTimerController.java
@@ -1,27 +1,31 @@
package com.doumee.api;
import com.doumee.service.business.third.model.ApiResponse;
import com.doumee.core.utils.Constants;
import com.doumee.service.business.VisitsService;
import com.doumee.service.business.impl.hksync.HkSyncVisitServiceImpl;
import com.doumee.service.business.impl.hksync.fhk.HkSyncVisitFromHKServiceImpl;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Date;
import java.util.concurrent.atomic.AtomicBoolean;
/**
 * @author æ±Ÿè¹„蹄
 * @date 2023/11/30 15:33
 */
@Api(tags = "访客定时器接口")
@Slf4j
@RestController
@RequestMapping("/timer/visit")
public class HkVisitTimerController extends BaseController {
    private final AtomicBoolean dealingFromHkVisit = new AtomicBoolean(false);
    @Autowired
    private HkSyncVisitServiceImpl hkSyncVisitService;
@@ -33,27 +37,28 @@
    @ApiOperation("开启定时下发访客预约申请")
    @PostMapping("/syncVisitData")
    public ApiResponse syncVisitData() {
        log.info("定时任务执行开始:syncVisitData-下发访客预约申请");
        hkSyncVisitService.syncVisitData();
        return ApiResponse.success("开启定时下发访客预约申请成功");
    }
    @ApiOperation("开启定时查询访客预约状态")
    @PostMapping("/getOutTimeVisitRecord")
    public ApiResponse getOutTimeVisitRecord() {
        log.info("定时任务执行开始:getOutTimeVisitRecord-查询访客预约状态");
        hkSyncVisitService.getOutTimeVisitRecordIccm();
        return ApiResponse.success("开启定时查询访客预约状态成功");
    }
    @ApiOperation("开启定时今日的访客预约数据")
    @PostMapping("/syncVistAppointData")
    public ApiResponse syncVistAppointData() {
        if(!Constants.DEALING_FROM_HK_VISIT){
        log.info("定时任务执行开始:syncVistAppointData-今日访客预约数据");
        if(dealingFromHkVisit.compareAndSet(false, true)){
            try {
                Constants.DEALING_FROM_HK_VISIT =true;
                hkSyncVisitFromHKService.syncVistAppointData(new Date());
                Constants.DEALING_FROM_HK_VISIT =false;
            }catch (Exception e){
                log.error("syncVistAppointData异常", e);
            }finally {
                Constants.DEALING_FROM_HK_VISIT =false;
                dealingFromHkVisit.set(false);
            }
        }
        return ApiResponse.success("开启定时今日的访客预约数据成功");
@@ -62,12 +67,14 @@
    @ApiOperation("访客即将超时预警")
    @PostMapping("/visitTimeOut")
    public ApiResponse visitTimeOut() {
        log.info("定时任务执行开始:visitTimeOut-访客超时预警");
        visitsService.syncTimeOutData();
        return ApiResponse.success("访客即将超时预警");
    }
    @ApiOperation("待审批记录超时自动取消预约")
    @PostMapping("/visitNoCheckCancel")
    public ApiResponse visitNoCheckCancel() {
        log.info("定时任务执行开始:visitNoCheckCancel-超时自动取消预约");
        visitsService.visitNoCheckCancel();
        return ApiResponse.success("待审批记录超时自动取消预约");
    }
server/visits/admin_timer/src/main/java/com/doumee/api/InterfaceLogTimerController.java
@@ -7,6 +7,7 @@
import com.doumee.service.business.PlatformInterfaceLogService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
@@ -17,6 +18,7 @@
 * @date 2023/11/30 15:33
 */
@Api(tags = "日志定时器接口")
@Slf4j
@RestController
@RequestMapping("/timer/log")
public class InterfaceLogTimerController extends BaseController {
@@ -30,6 +32,7 @@
    @ApiOperation("开启定时接口日志清理")
    @PostMapping("/clearThreeMonthLog")
    public ApiResponse clearThreeMonthLog() {
        log.info("定时任务执行开始:clearThreeMonthLog-清理三个月日志");
        interfaceLogService.clearThreeMonthLog();
        wmsInterfaceLogService.clearThreeMonthLog();
        platformInterfaceLogService.clearThreeMonthLog();
server/visits/admin_timer/src/main/java/com/doumee/api/JkCabinetTimerController.java
@@ -6,6 +6,7 @@
import com.doumee.service.business.third.model.ApiResponse;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.mgt.DefaultSecurityManager;
import org.springframework.beans.factory.annotation.Autowired;
@@ -18,6 +19,7 @@
 * @date 2023/11/30 15:33
 */
@Api(tags = "钥匙柜定时器")
@Slf4j
@RestController
@RequestMapping("/timer/jkCabinet")
public class JkCabinetTimerController extends BaseController {
@@ -31,6 +33,7 @@
    @ApiOperation("定时发送钥匙未及时归还通知")
    @PostMapping("/timeOutUnBackAlarm")
    public ApiResponse timeOutUnBackAlarm() {
        log.info("定时任务执行开始:timeOutUnBackAlarm-钥匙未归还通知");
        jkCabinetLogService.timeOutUnBackAlarm(impl);
        return ApiResponse.success("定时发送钥匙未及时归还通知");
    }
server/visits/admin_timer/src/main/java/com/doumee/api/JkCustomerTimerController.java
@@ -11,6 +11,7 @@
import com.doumee.service.system.SystemDictDataService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.mgt.DefaultSecurityManager;
import org.springframework.beans.factory.annotation.Autowired;
@@ -27,6 +28,7 @@
 * @date 2023/11/30 15:33
 */
@Api(tags = "交控中心客户定时器")
@Slf4j
@RestController
@RequestMapping("/timer/jkCustomer")
public class JkCustomerTimerController extends BaseController {
@@ -36,6 +38,7 @@
    @ApiOperation("更新交控中心客户经纬度信息")
    @PostMapping("/getCustomerLocationInfo")
    public ApiResponse getCustomerLocationInfo() {
        log.info("定时任务执行开始:getCustomerLocationInfo-更新客户经纬度");
        DefaultSecurityManager securityManager = new DefaultSecurityManager();
        SecurityUtils.setSecurityManager(securityManager);
        jkCustomerService.checkNullLocation();
server/visits/admin_timer/src/main/java/com/doumee/api/PlatformJobController.java
@@ -11,6 +11,8 @@
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.concurrent.atomic.AtomicBoolean;
/**
 * @author æ±Ÿè¹„蹄
 * @date 2023/11/30 15:33
@@ -24,16 +26,20 @@
    @Autowired
    private PlatformJobService platformJobService;
    private final AtomicBoolean dealingSendNotice = new AtomicBoolean(false);
    @ApiOperation("月台停靠超时报警业务")
    @PostMapping("/platformJobTimer")
    public ApiResponse platformJobTimer() {
        log.info("定时任务执行开始:platformJobTimer-月台停靠超时报警");
        platformJobService.timeOutReport();
        return ApiResponse.success("月台停靠超时报警业务");
    }
    @ApiOperation("月台作业检查电子锁上锁状态")
    @PostMapping("/platformCheckWmsLockStatus")
    public ApiResponse checkWmsLockStatus() {
        log.info("定时任务执行开始:checkWmsLockStatus-检查电子锁上锁状态");
        platformJobService.checkWmsLockStatus();
        return ApiResponse.success("月台停靠超时报警业务");
    }
@@ -42,6 +48,7 @@
    @ApiOperation("月台作业超时报警业务")
    @PostMapping("/platformJobWorkTimeOut")
    public ApiResponse platformJobWorkTimeOut() {
        log.info("定时任务执行开始:platformJobWorkTimeOut-月台作业超时报警");
        platformJobService.timeOutWork();
        return ApiResponse.success("月台作业超时报警业务");
    }
@@ -50,6 +57,7 @@
    @ApiOperation("月台等待作业超时业务")
    @PostMapping("/platformJobWaitTimeOut")
    public ApiResponse platformJobWaitTimeOut() {
        log.info("定时任务执行开始:platformJobWaitTimeOut-月台等待作业超时");
        platformJobService.timeOutCallIn();
        return ApiResponse.success("月台等待作业超时业务");
    }
@@ -59,10 +67,18 @@
    @PreventRepeat(interval = 2000)
    @ApiOperation("月台今日作业未完成通知定时")
    @PostMapping("/sendUnFinishNotice")
    public synchronized ApiResponse sendUnFinishNotice() {
        log.error("========月台今日作业未完成通知定时============开始"+System.currentTimeMillis()+"");
        platformJobService.sendUnFinishNotice();
        log.error("========月台今日作业未完成通知定时============结束"+System.currentTimeMillis()+"");
    public ApiResponse sendUnFinishNotice() {
        if(!dealingSendNotice.compareAndSet(false, true)){
            return ApiResponse.success("sendUnFinishNotice正在执行,跳过");
        }
        try {
            log.info("定时任务执行开始:sendUnFinishNotice-月台作业未完成通知");
            platformJobService.sendUnFinishNotice();
        } catch (Exception e){
            log.error("sendUnFinishNotice异常", e);
        } finally {
            dealingSendNotice.set(false);
        }
        return ApiResponse.success("月台今日作业外完成通知定时");
    }
server/visits/admin_timer/src/main/java/com/doumee/api/WeatherTimerController.java
@@ -7,6 +7,7 @@
import com.doumee.service.system.SystemDictDataService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.PostMapping;
@@ -18,6 +19,7 @@
 * @date 2023/11/30 15:33
 */
@Api(tags = "天气预警同步")
@Slf4j
@RestController
@RequestMapping("/timer/weather")
public class WeatherTimerController extends BaseController {
@@ -33,6 +35,7 @@
    @ApiOperation("定时同步天气预警信息")
    @PostMapping("/syncWeatherInfo")
    public ApiResponse syncWeatherInfo(){
        log.info("定时任务执行开始:syncWeatherInfo-同步天气预警");
        warningService.getWeatherInfo();
        return ApiResponse.success("定时同步天气预警信息");
    }
server/visits/admin_timer/src/main/java/com/doumee/api/WxTokenTimerController.java
@@ -13,6 +13,7 @@
import com.doumee.service.system.SystemDictDataService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.mgt.DefaultSecurityManager;
@@ -30,6 +31,7 @@
 * @date 2023/11/30 15:33
 */
@Api(tags = "微信token定时器接口")
@Slf4j
@RestController
@RequestMapping("/timer/wxtoken")
public class WxTokenTimerController extends BaseController {
@@ -66,6 +68,7 @@
    @ApiOperation("开启定时更新微信公众号accesstoken")
    @PostMapping("/updateWxAccessTokenOrigin")
    public ApiResponse updateWxAccessTokenOrigin() {
        log.info("定时任务执行开始:updateWxAccessTokenOrigin-更新微信token");
       DefaultSecurityManager securityManager = new DefaultSecurityManager();
        SecurityUtils.setSecurityManager(securityManager);
server/visits/admin_timer/src/main/java/com/doumee/config/AsyncPoolConfig.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,29 @@
package com.doumee.config;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.AsyncConfigurer;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import java.util.concurrent.Executor;
import java.util.concurrent.ThreadPoolExecutor;
@Slf4j
@Configuration
public class AsyncPoolConfig implements AsyncConfigurer {
    @Bean("asyncExecutor")
    @Override
    public Executor getAsyncExecutor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(5);
        executor.setMaxPoolSize(20);
        executor.setQueueCapacity(100);
        executor.setKeepAliveSeconds(60);
        executor.setThreadNamePrefix("async-admin-timer-");
        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
        executor.initialize();
        return executor;
    }
}
server/visits/admin_timer/src/main/resources/bootstrap.yml
@@ -1,6 +1,6 @@
spring:
  profiles:
    active: dev
    active: pro
  application:
    name: visitsTimer
    # å®‰å…¨é…ç½®
server/visits/dmvisit_admin/src/main/resources/bootstrap.yml
@@ -1,6 +1,6 @@
spring:
  profiles:
    active: dev
    active: pro
  application:
    name: visitsAdmin
    # å®‰å…¨é…ç½®
server/visits/dmvisit_service/db/BUSINE~1.SQL
server/visits/dmvisit_service/src/main/java/com/doumee/config/AsyncPoolConfig.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,29 @@
package com.doumee.config;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.AsyncConfigurer;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import java.util.concurrent.Executor;
import java.util.concurrent.ThreadPoolExecutor;
@Slf4j
@Configuration
public class AsyncPoolConfig implements AsyncConfigurer {
    @Bean("asyncExecutor")
    @Override
    public Executor getAsyncExecutor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(5);
        executor.setMaxPoolSize(20);
        executor.setQueueCapacity(100);
        executor.setKeepAliveSeconds(60);
        executor.setThreadNamePrefix("async-visit-");
        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
        executor.initialize();
        return executor;
    }
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkCabinetLog.java
@@ -54,7 +54,7 @@
    private Integer gridId;
    @ApiModelProperty(value = "验证方式 0刷脸 1刷卡", example = "1")
    @ExcelColumn(name="校验方式",index = 2,width = 10,valueMapping = "0=人脸;1=刷卡;2=管理授权;")
    @ExcelColumn(name="校验方式",index = 2,width = 10,valueMapping = "0=人脸;1=刷卡;2=管理授权;3=自动;")
    private Integer authType;
    @ApiModelProperty(value = "车辆编码(关联cars)", example = "1")
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/DeviceRoleServiceImpl.java
@@ -29,12 +29,14 @@
import org.apache.shiro.SecurityUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.Executor;
/**
 * é—¨ç¦è§’色信息表Service实现
@@ -55,6 +57,10 @@
    private DeviceMapper deviceMapper;
    @Autowired
    private MemberRoleJoinMapper memberRoleMapper;
    @Autowired
    @Qualifier("asyncExecutor")
    private Executor asyncExecutor;
    @Autowired
    private MemberMapper memberMapper;
@@ -152,17 +158,13 @@
        }
       int t = deviceRoleMapper.updateById(deviceRole);
       if(t>0){
            Thread tt = new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        startUpdateMemberEmpower(model,deviceRole);
                    }catch (Exception e){
                        log.error("======门禁分组修改,更新人员权限失败==="+e.getMessage());
                    }
            asyncExecutor.execute(() -> {
                try {
                    startUpdateMemberEmpower(model,deviceRole);
                }catch (Exception e){
                    log.error("======门禁分组修改,更新人员权限失败===", e);
                }
            });
            tt.start();
       }
    }
    @Override
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkCabinetGridServiceImpl.java
@@ -57,6 +57,9 @@
    private JkKeysMapper jkKeysMapper;
    @Autowired
    private CarsMapper carsMapper;
    @Autowired
    private SystemUserMapper systemUserMapper;
    @Autowired
@@ -1220,11 +1223,19 @@
                    );
                    log.error("钥匙柜信息推送实际钥匙变化:"+jkCabinetGrid.getKeyCode());
                    JkCabinetLog cabinetLog = new JkCabinetLog();
                    cabinetLog.setKeyInfo(jkCabinetGrid.getCarCode() + " " + jkCabinetGrid.getKeyCode());
                    JkKeys jkKeys = jkKeysMapper.selectById(jkCabinetGrid.getKeyId());
                    if(Objects.nonNull(jkKeys)){
                        cabinetLog.setKeyInfo(jkCabinetGrid.getCarCode() + " " + jkKeys.getCode());
                        Cars cars = carsMapper.selectById(jkCabinetGrid.getCarId());
                        if(Objects.nonNull(cars)){
                            cabinetLog.setMemberId(cars.getMemberId());
                        }
                    }
                    cabinetLog.setCabinetId(jkCabinetGrid.getCabinetId());
                    cabinetLog.setGridId(jkCabinetGrid.getId());
                    cabinetLog.setKeyId(jkCabinetGrid.getKeyId());
                    cabinetLog.setCarId(jkCabinetGrid.getCarId());
                    cabinetLog.setKeyInfo(jkCabinetGrid.getCarCode() + " " + jkCabinetGrid.getKeyCode());
                    cabinetLog.setType(Constants.ONE);
                    cabinetLog.setStatus(Constants.ZERO);
                    cabinetLog.setAuthType(3);
@@ -1243,11 +1254,19 @@
                    );
                    log.error("钥匙柜信息推送实际钥匙变化:"+jkCabinetGrid.getKeyCode());
                    JkCabinetLog cabinetLog = new JkCabinetLog();
                    cabinetLog.setKeyInfo(jkCabinetGrid.getCarCode() + " " + jkCabinetGrid.getKeyCode());
                    JkKeys jkKeys = jkKeysMapper.selectById(jkCabinetGrid.getKeyId());
                    if(Objects.nonNull(jkKeys)){
                        cabinetLog.setKeyInfo(jkCabinetGrid.getCarCode() + " " + jkKeys.getCode());
                        Cars cars = carsMapper.selectById(jkCabinetGrid.getCarId());
                        if(Objects.nonNull(cars)){
                            cabinetLog.setMemberId(cars.getMemberId());
                        }
                    }
                    cabinetLog.setCabinetId(jkCabinetGrid.getCabinetId());
                    cabinetLog.setGridId(jkCabinetGrid.getId());
                    cabinetLog.setKeyId(jkCabinetGrid.getKeyId());
                    cabinetLog.setCarId(jkCabinetGrid.getCarId());
                    cabinetLog.setKeyInfo(jkCabinetGrid.getCarCode() + " " + jkCabinetGrid.getKeyCode());
                    cabinetLog.setType(Constants.ONE);
                    cabinetLog.setStatus(Constants.ZERO);
                    cabinetLog.setAuthType(3);
@@ -1257,6 +1276,14 @@
                    cabinetLog.setIsdeleted(Constants.ZERO);
                    cabinetLog.setCreateDate(new Date());
                    jkCabinetLogMapper.insert(cabinetLog);
                    jkCabinetLogMapper.update(null,new UpdateWrapper<JkCabinetLog>().lambda()
                            .set(JkCabinetLog::getCloseLogId,cabinetLog.getId())
                            .eq(JkCabinetLog::getKeyId,cabinetLog.getKeyId())
                            .eq(JkCabinetLog::getType,Constants.ONE)
                            .eq(JkCabinetLog::getKeyStatus,Constants.TWO)
                            .isNull(JkCabinetLog::getCloseLogId));
                }
            }
//            if(StringUtils.isBlank(jkCabinetGrid.getKeyCode())
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkSketchServiceImpl.java
@@ -33,6 +33,7 @@
import netscape.javascript.JSObject;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
@@ -44,6 +45,7 @@
import java.math.BigDecimal;
import java.util.*;
import java.util.Date;
import java.util.concurrent.Executor;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
@@ -56,6 +58,9 @@
@Slf4j
public class JkSketchServiceImpl implements JkSketchService {
    @Autowired
    @Qualifier("asyncExecutor")
    private Executor asyncExecutor;
    @Autowired
    private JkSketchMapper jkSketchMapper;
    @Autowired
@@ -286,7 +291,7 @@
                BigDecimal finalCLongitude = cLongitude;
                log.error("交通规划====线程circle:"+i+"====start:"+start+"===========end:"+end);
                int finalI = i;
                Thread t1=new Thread(() -> {
                asyncExecutor.execute(() -> {
                    try {
                        int index =0;
                        for (int j = start; j < end; j++) {
@@ -311,10 +316,9 @@
                    }
                });
                t1.start();
            }
        }catch (Exception e){
            e.printStackTrace();
            log.error("distanceCustomer异常", e);
        }finally {
        }
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncEmpowerServiceImpl.java
@@ -24,12 +24,14 @@
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.concurrent.Executor;
/**
 * æµ·åº·é—¨ç¦æŽˆæƒä¸šåŠ¡Service实现
@@ -50,12 +52,17 @@
    @Autowired
    private MemberCardMapper memberCardMapper;
    @Autowired
    @Qualifier("asyncExecutor")
    private Executor asyncExecutor;
    /**
     * å®šæ—¶æŸ¥è¯¢æƒé™ä¸‹å‘任务进度执行结果
     */
    @Override
    public  Integer   syncEmpowerDetailData(Integer endId){
        log.error("");
        long startTime = System.currentTimeMillis();
        log.info("syncEmpowerDetailData执行开始, endId={}", endId);
//        if(Constants.DEALING_HK_EMPOWER_DETAIL){
//            return   ;
//        }
@@ -63,13 +70,12 @@
            //查询所有完成下载,待查询结果的数据记录
            List<Empower>  list = getDealListDetail(endId);
           if(list == null || list.size() ==0){
               log.info("syncEmpowerDetailData无待处理数据, è€—æ—¶{}ms", System.currentTimeMillis() - startTime);
               return null;
           }
        Thread t1=new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    for(Empower c : list){
        asyncExecutor.execute(() -> {
            try {
                for(Empower c : list){
                        AuthResultPageRequest param = new AuthResultPageRequest();
                        param.setPageNo(1);
                        param.setPageSize(999);
@@ -201,11 +207,10 @@
                        }
                    }
                }catch (Exception e){
                    e.printStackTrace();
                    log.error("syncEmpowerDetailData执行异常", e);
                }
            }
        });
        t1.start();
         log.info("syncEmpowerDetailData执行结束, è€—æ—¶{}ms", System.currentTimeMillis() - startTime);
         return list.get(list.size()-1).getId();
    }
@@ -345,18 +350,15 @@
     */
    @Override
    public  Integer syncEmpowerResultData(Integer endId){
//        if(Constants.DEALING_HK_EMPOWER_RESULT){
//            return  null ;
//        }
//        Constants.DEALING_HK_EMPOWER_RESULT=true;
        long startTime = System.currentTimeMillis();
        log.info("syncEmpowerResultData执行开始, endId={}", endId);
            //查询所有执行中得数据
         List<Empower>  list = getIngTaskListResult(Constants.formatIntegerNum(endId));
           if(list == null || list.size() ==0){
               log.info("syncEmpowerResultData无待处理数据, è€—æ—¶{}ms", System.currentTimeMillis() - startTime);
               return null;
           }
            Thread t1=new Thread(new Runnable() {
                @Override
                public void run() {
            asyncExecutor.execute(() -> {
                    try {
                        for(Empower c : list){
                            TaskProgressRequest param = new TaskProgressRequest();
@@ -389,13 +391,10 @@
                            }
                        }
                    }catch (Exception e1){
                        e1.printStackTrace();
                    }finally {
                        Constants.DEALING_HK_EMPOWER_RESULT =false;
                        log.error("syncEmpowerResultData执行异常", e1);
                    }
                }
            });
            t1.start();
                });
            log.info("syncEmpowerResultData执行结束, è€—æ—¶{}ms", System.currentTimeMillis() - startTime);
            return list.get(list.size()-1).getId();
    }
@@ -407,6 +406,8 @@
     */
    @Override
    public  Integer syncEmpowerFailData(Integer endId) {
        long startTime = System.currentTimeMillis();
        log.info("syncEmpowerFailData执行开始, endId={}", endId);
        List<Empower> allList =getAllFailDealList( endId);
        if(allList!=null && allList.size()>0){
            Date date = new Date();
@@ -446,6 +447,7 @@
            }
            return allList.get(allList.size()-1).getId();
        }
        log.info("syncEmpowerFailData执行结束, è€—æ—¶{}ms", System.currentTimeMillis() - startTime);
        return null;
    }
    /**
@@ -453,33 +455,28 @@
     */
    @Override
    public  Integer syncEmpowerData(Integer endId) {
//        if(Constants.DEALING_HK_EMPOWER){
//            return  null ;
//        }
//        Constants.DEALING_HK_EMPOWER =true;
        long startTime = System.currentTimeMillis();
        log.info("syncEmpowerData执行开始, endId={}", endId);
            //先删除所有需要取消授权的数据
            if(empowerMapper.selectCount(new QueryWrapper<Empower>().lambda()
                    .eq(Empower::getSendStatus,Constants.EmpowerStatus.ing)) > 1000){
                //如果当前任务大于1000个(大概10个任务)
                log.info("syncEmpowerData任务队列已满(>1000), è·³è¿‡, è€—æ—¶{}ms", System.currentTimeMillis() - startTime);
                return endId;
            }
            List<Empower> allList =getAllWaitDealList( endId);
            if(allList !=null && allList.size()>0){
                //查询所有需要同步的数据,重新下发最新人员权限即可
                Thread t1=new Thread(new Runnable() {
                    @Override
                    public void run() {
                        try {
                            dealAllListTask(allList);
                        }catch (Exception e){
                            log.info("======================下发授权异常:"+e.getMessage());
                            e.printStackTrace();
                        }
                asyncExecutor.execute(() -> {
                    try {
                        dealAllListTask(allList);
                    }catch (Exception e){
                        log.error("======================下发授权异常", e);
                    }
                });
                t1.start();
                log.info("syncEmpowerData提交{}条数据, è€—æ—¶{}ms", allList.size(), System.currentTimeMillis() - startTime);
                return allList.get(allList.size()-1).getId();
            }
        log.info("syncEmpowerData无待处理数据, è€—æ—¶{}ms", System.currentTimeMillis() - startTime);
        return null;
    }
    @Override
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPushServiceImpl.java
@@ -39,6 +39,7 @@
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
@@ -47,6 +48,7 @@
import java.io.IOException;
import java.util.*;
import java.util.Date;
import java.util.concurrent.Executor;
import java.util.stream.Collectors;
/**
@@ -58,6 +60,9 @@
@Slf4j
public class HkSyncPushServiceImpl extends HkSyncBaseServiceImpl {
    @Autowired
    @Qualifier("asyncExecutor")
    private Executor asyncExecutor;
    @Autowired
    private InoutDayCountMapper inoutDayCountMapper;
    @Autowired
@@ -598,9 +603,7 @@
    private void dealNoticeTelecomEvent(EventBaseRequest param,EventBaseInfoRequest request ,List<WarningEvent> list) {
        try {
            log.error("========通知其他三方地址离岗事件开始:"+list.size());
            Thread t1=new Thread(new Runnable() {
                @Override
                public void run() {
            asyncExecutor.execute(() -> {
//                  EventBaseRequest submitParam = new EventBaseRequest();
//                  submitParam.setMethod(param.getMethod());
//                  submitParam.setParams(new EventBaseParamRequest());
@@ -664,11 +667,9 @@
                            log.error("========通知其他三方地址离岗事件已推送,结果:"+s+"\n"+response);
                        }
                    }
                }
            });
            t1.start();
                });
        }catch (Exception e){
            e.printStackTrace();
            log.error("dealNoticeTelecomEvent异常", e);
        }
    }