Browse Source

Merge remote-tracking branch 'origin/dev_optimize' into dev_optimize

master
zhaoqifeng 4 years ago
parent
commit
5cc5be57d7
  1. 14
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/RedisKeys.java
  2. 3
      epmet-module/open-data-worker/open-data-worker-server/src/main/java/com/epmet/OpenDataApplication.java
  3. 33
      epmet-module/open-data-worker/open-data-worker-server/src/main/java/com/epmet/opendata/dao/GriderOnlineNumDao.java
  4. 61
      epmet-module/open-data-worker/open-data-worker-server/src/main/java/com/epmet/opendata/entity/GriderOnlineNumEntity.java
  5. 38
      epmet-module/open-data-worker/open-data-worker-server/src/main/java/com/epmet/opendata/service/GriderOnlineNumService.java
  6. 69
      epmet-module/open-data-worker/open-data-worker-server/src/main/java/com/epmet/opendata/service/impl/GriderOnlineNumServiceImpl.java
  7. 71
      epmet-module/open-data-worker/open-data-worker-server/src/main/java/com/epmet/opendata/task/ExtractBizDataToOpenData.java
  8. 13
      epmet-module/open-data-worker/open-data-worker-server/src/main/resources/db/migration/V0.0.1__add_grider_online_num.sql
  9. 6
      epmet-module/open-data-worker/open-data-worker-server/src/main/resources/mapper/GriderOnlineNumDao.xml

14
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);
}
}

3
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

33
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
* <p>
* 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.
* <p>
* 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.
* <p>
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
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<GriderOnlineNumEntity> {
}

61
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
* <p>
* 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.
* <p>
* 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.
* <p>
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
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;
}

38
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
* <p>
* 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.
* <p>
* 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.
* <p>
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
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<GriderOnlineNumEntity> {
/**
* desc:插入巡查中的网格员数据
* @return boolean
*/
Boolean insertData(String agencyId);
}

69
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
* <p>
* 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.
* <p>
* 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.
* <p>
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
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<GriderOnlineNumDao, GriderOnlineNumEntity> implements GriderOnlineNumService {
@Autowired
private EpmetUserOpenFeignClient epmetUserOpenFeignClient;
@Override
public Boolean insertData(String agencyId) {
PatrolCountFormDTO param = new PatrolCountFormDTO();
param.setAgencyId(agencyId);
Result<PatrolCountResultDTO> 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;
}
}

71
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");
}
}

13
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='网格员在线人数';

6
epmet-module/open-data-worker/open-data-worker-server/src/main/resources/mapper/GriderOnlineNumDao.xml

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.epmet.opendata.dao.GriderOnlineNumDao">
</mapper>
Loading…
Cancel
Save