diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/RedisKeys.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/RedisKeys.java
index 04db67cfed..05e5c200a4 100644
--- a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/RedisKeys.java
+++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/RedisKeys.java
@@ -10,6 +10,8 @@ package com.epmet.commons.tools.redis;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.constant.StrConstant;
+import com.epmet.commons.tools.exception.EpmetErrorCode;
+import com.epmet.commons.tools.exception.EpmetException;
import com.epmet.commons.tools.utils.DateUtils;
import org.apache.commons.lang3.StringUtils;
@@ -763,4 +765,16 @@ public class RedisKeys {
public static String getNextAreaCodeKey(String areaCode) {
return rootPrefix.concat("areaCode:parentCode:").concat(areaCode);
}
+
+ /**
+ * desc:获取分布式锁key
+ * @param methodName
+ * @return
+ */
+ public static String getLockByMethodName(String methodName) {
+ if (StringUtils.isBlank(methodName)){
+ throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(),"参数错误");
+ }
+ return rootPrefix.concat("lock:").concat(methodName);
+ }
}
diff --git a/epmet-module/open-data-worker/open-data-worker-server/src/main/java/com/epmet/OpenDataApplication.java b/epmet-module/open-data-worker/open-data-worker-server/src/main/java/com/epmet/OpenDataApplication.java
index 532877cf4b..c786abb9ba 100644
--- a/epmet-module/open-data-worker/open-data-worker-server/src/main/java/com/epmet/OpenDataApplication.java
+++ b/epmet-module/open-data-worker/open-data-worker-server/src/main/java/com/epmet/OpenDataApplication.java
@@ -5,7 +5,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
-import org.springframework.context.annotation.ComponentScan;
+import org.springframework.scheduling.annotation.EnableScheduling;
/**
* @Description OpenData服务启动类
@@ -14,6 +14,7 @@ import org.springframework.context.annotation.ComponentScan;
* @author wxz
* @date 2021.10.13 15:16:05
*/
+@EnableScheduling
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
diff --git a/epmet-module/open-data-worker/open-data-worker-server/src/main/java/com/epmet/opendata/dao/GriderOnlineNumDao.java b/epmet-module/open-data-worker/open-data-worker-server/src/main/java/com/epmet/opendata/dao/GriderOnlineNumDao.java
new file mode 100644
index 0000000000..9f4080c054
--- /dev/null
+++ b/epmet-module/open-data-worker/open-data-worker-server/src/main/java/com/epmet/opendata/dao/GriderOnlineNumDao.java
@@ -0,0 +1,33 @@
+/**
+ * Copyright 2018 人人开源 https://www.renren.io
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+package com.epmet.opendata.dao;
+
+import com.epmet.commons.mybatis.dao.BaseDao;
+import com.epmet.opendata.entity.GriderOnlineNumEntity;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 在线网格员人数
+ *
+ * @author generator generator@elink-cn.com
+ * @since v1.0.0 2021-10-14
+ */
+@Mapper
+public interface GriderOnlineNumDao extends BaseDao {
+
+}
diff --git a/epmet-module/open-data-worker/open-data-worker-server/src/main/java/com/epmet/opendata/entity/GriderOnlineNumEntity.java b/epmet-module/open-data-worker/open-data-worker-server/src/main/java/com/epmet/opendata/entity/GriderOnlineNumEntity.java
new file mode 100644
index 0000000000..ca707865cf
--- /dev/null
+++ b/epmet-module/open-data-worker/open-data-worker-server/src/main/java/com/epmet/opendata/entity/GriderOnlineNumEntity.java
@@ -0,0 +1,61 @@
+/**
+ * Copyright 2018 人人开源 https://www.renren.io
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+package com.epmet.opendata.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.epmet.commons.mybatis.entity.BaseEpmetEntity;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.Date;
+
+/**
+ * 用户巡查主记录
+ *
+ * @author generator generator@elink-cn.com
+ * @since v1.0.0 2021-10-14
+ */
+@Data
+@EqualsAndHashCode(callSuper=false)
+@TableName("grider_online_num")
+public class GriderOnlineNumEntity extends BaseEpmetEntity {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 客户Id
+ */
+ private String customerId;
+
+ private String qxGridId;
+
+ /**
+ * 推送时间
+ */
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ private Date pushTime;
+
+ /**
+ * 在线数
+ */
+ private Integer onlineNum;
+
+
+
+}
diff --git a/epmet-module/open-data-worker/open-data-worker-server/src/main/java/com/epmet/opendata/service/GriderOnlineNumService.java b/epmet-module/open-data-worker/open-data-worker-server/src/main/java/com/epmet/opendata/service/GriderOnlineNumService.java
new file mode 100644
index 0000000000..55112c1d8d
--- /dev/null
+++ b/epmet-module/open-data-worker/open-data-worker-server/src/main/java/com/epmet/opendata/service/GriderOnlineNumService.java
@@ -0,0 +1,38 @@
+/**
+ * Copyright 2018 人人开源 https://www.renren.io
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+package com.epmet.opendata.service;
+
+import com.epmet.commons.mybatis.service.BaseService;
+import com.epmet.opendata.entity.GriderOnlineNumEntity;
+
+/**
+ * 用户巡查主记录
+ *
+ * @author generator generator@elink-cn.com
+ * @since v1.0.0 2021-10-14
+ */
+public interface GriderOnlineNumService extends BaseService {
+
+ /**
+ * desc:插入巡查中的网格员数据
+ * @return boolean
+ */
+ Boolean insertData(String agencyId);
+
+
+}
diff --git a/epmet-module/open-data-worker/open-data-worker-server/src/main/java/com/epmet/opendata/service/impl/GriderOnlineNumServiceImpl.java b/epmet-module/open-data-worker/open-data-worker-server/src/main/java/com/epmet/opendata/service/impl/GriderOnlineNumServiceImpl.java
new file mode 100644
index 0000000000..b024c1436e
--- /dev/null
+++ b/epmet-module/open-data-worker/open-data-worker-server/src/main/java/com/epmet/opendata/service/impl/GriderOnlineNumServiceImpl.java
@@ -0,0 +1,69 @@
+/**
+ * Copyright 2018 人人开源 https://www.renren.io
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+package com.epmet.opendata.service.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.epmet.commons.mybatis.service.impl.BaseServiceImpl;
+import com.epmet.commons.tools.constant.NumConstant;
+import com.epmet.commons.tools.constant.StrConstant;
+import com.epmet.commons.tools.utils.Result;
+import com.epmet.dto.form.PatrolCountFormDTO;
+import com.epmet.dto.result.PatrolCountResultDTO;
+import com.epmet.feign.EpmetUserOpenFeignClient;
+import com.epmet.opendata.dao.GriderOnlineNumDao;
+import com.epmet.opendata.entity.GriderOnlineNumEntity;
+import com.epmet.opendata.service.GriderOnlineNumService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+
+
+/**
+ * 用户巡查主记录
+ *
+ * @author generator generator@elink-cn.com
+ * @since v1.0.0 2021-10-14
+ */
+@Slf4j
+@Service
+public class GriderOnlineNumServiceImpl extends BaseServiceImpl implements GriderOnlineNumService {
+@Autowired
+private EpmetUserOpenFeignClient epmetUserOpenFeignClient;
+ @Override
+ public Boolean insertData(String agencyId) {
+ PatrolCountFormDTO param = new PatrolCountFormDTO();
+ param.setAgencyId(agencyId);
+ Result patrolCountResult = epmetUserOpenFeignClient.patrolCount(param);
+
+ log.debug("insertData patrolCountResult return:{}", JSON.toJSONString(patrolCountResult));
+ if (patrolCountResult == null || !patrolCountResult.success()) {
+ log.warn("insertData patrolCount fail,return null");
+ return false;
+ }
+ PatrolCountResultDTO data = patrolCountResult.getData();
+ int count = data.getPatrollingCount() == null ? NumConstant.ZERO : data.getPatrollingCount();
+ GriderOnlineNumEntity entity = new GriderOnlineNumEntity();
+ entity.setCustomerId(StrConstant.PY_CUSTOMER);
+ entity.setPushTime(new Date());
+ entity.setOnlineNum(count);
+ baseDao.insert(entity);
+ return true;
+ }
+}
diff --git a/epmet-module/open-data-worker/open-data-worker-server/src/main/java/com/epmet/opendata/task/ExtractBizDataToOpenData.java b/epmet-module/open-data-worker/open-data-worker-server/src/main/java/com/epmet/opendata/task/ExtractBizDataToOpenData.java
new file mode 100644
index 0000000000..ebcd5aa27d
--- /dev/null
+++ b/epmet-module/open-data-worker/open-data-worker-server/src/main/java/com/epmet/opendata/task/ExtractBizDataToOpenData.java
@@ -0,0 +1,71 @@
+package com.epmet.opendata.task;
+
+import com.epmet.commons.tools.constant.NumConstant;
+import com.epmet.commons.tools.constant.StrConstant;
+import com.epmet.commons.tools.distributedlock.DistributedLock;
+import com.epmet.commons.tools.redis.RedisKeys;
+import com.epmet.commons.tools.utils.DateUtils;
+import com.epmet.opendata.service.GriderOnlineNumService;
+import lombok.extern.slf4j.Slf4j;
+import org.redisson.api.RLock;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.util.Date;
+
+/**
+ * desc:
+ *
+ * @author: LiuJanJun
+ * @date: 2022/4/12 4:21 下午
+ * @version: 1.0
+ */
+@Slf4j
+@Component
+public class ExtractBizDataToOpenData {
+
+ @Autowired
+ private DistributedLock distributedLock;
+
+ @Autowired
+ private GriderOnlineNumService griderOnlineNumService;
+
+ @Scheduled(cron = "0 30 */2 * * *")
+ //@Scheduled(cron = "0/15 * * * * *")
+ public void extractGridMemberPatrollingCount() {
+ String currentTime = DateUtils.format(new Date(), DateUtils.DATE_TIME_PATTERN);
+ log.info("extractGridMemberPatrollingCount start,date:{}", currentTime);
+ RLock rLock = null;
+ try {
+ rLock = distributedLock.tryLock(RedisKeys.getLockByMethodName("extractGridMemberPatrollingCount"));
+ if (rLock == null || !rLock.isLocked()) {
+ log.warn("tryLock method extractGridMemberPatrollingCount fail");
+ return;
+ }
+ boolean patrolCountResult;
+ int retryTime = NumConstant.THREE;
+ do {
+ //StrConstant.PY_ROOT_AGENCY
+ patrolCountResult = griderOnlineNumService.insertData(StrConstant.PY_ROOT_AGENCY);
+ if (!patrolCountResult) {
+ break;
+ }
+ //如果 重试次数为1了 就让歇个 5分钟
+ if (retryTime == 1) {
+ Thread.sleep(NumConstant.FIVE * NumConstant.SIXTY * NumConstant.ONE_THOUSAND);
+ }
+ } while (retryTime-- > 0);
+ if (!patrolCountResult) {
+ log.error("插入网格员在线人数失败,请检查原因,时间:{}", currentTime);
+ }
+
+ } catch (Exception e) {
+ log.warn("tryLock method extractGridMemberPatrollingCount fail");
+ } finally {
+ distributedLock.unLock(rLock);
+ }
+ log.info("extractGridMemberPatrollingCount end");
+ }
+
+}
diff --git a/epmet-module/open-data-worker/open-data-worker-server/src/main/resources/db/migration/V0.0.1__add_grider_online_num.sql b/epmet-module/open-data-worker/open-data-worker-server/src/main/resources/db/migration/V0.0.1__add_grider_online_num.sql
new file mode 100644
index 0000000000..d4fd9ca93f
--- /dev/null
+++ b/epmet-module/open-data-worker/open-data-worker-server/src/main/resources/db/migration/V0.0.1__add_grider_online_num.sql
@@ -0,0 +1,13 @@
+CREATE TABLE `grider_online_num` (
+ `ID` varchar(64) NOT NULL COMMENT '主键',
+ `CUSTOMER_ID` varchar(64) NOT NULL COMMENT '客户Id',
+ `ONLINE_NUM` int(11) NOT NULL COMMENT '在线人数',
+ `PUSH_TIME` datetime NOT NULL COMMENT '推送时间',
+ `DEL_FLAG` bigint(1) NOT NULL DEFAULT '0' COMMENT '删除标识 0.未删除 1.已删除',
+ `REVISION` int(11) NOT NULL COMMENT '乐观锁',
+ `CREATED_BY` varchar(64) NOT NULL COMMENT '创建人',
+ `CREATED_TIME` datetime NOT NULL COMMENT '创建时间',
+ `UPDATED_BY` varchar(64) NOT NULL COMMENT '更新人',
+ `UPDATED_TIME` datetime NOT NULL COMMENT '更新时间',
+ PRIMARY KEY (`ID`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='网格员在线人数';
diff --git a/epmet-module/open-data-worker/open-data-worker-server/src/main/resources/mapper/GriderOnlineNumDao.xml b/epmet-module/open-data-worker/open-data-worker-server/src/main/resources/mapper/GriderOnlineNumDao.xml
new file mode 100644
index 0000000000..27c636d525
--- /dev/null
+++ b/epmet-module/open-data-worker/open-data-worker-server/src/main/resources/mapper/GriderOnlineNumDao.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+