Commit c27dda31 by 徐高华

好办加好友统计

parent fe4f7e9a
......@@ -112,4 +112,11 @@ public interface HaobanTimerApiService {
*/
public ServiceResponse<Void> groupChatQuitTimer(String params) ;
/**
* 加好友统计
* @param params
*/
public void addFrientMonitorTimer(String params) ;
}
......@@ -161,9 +161,10 @@ public interface MemberUnionidRelatedApiService {
* @param wxEnterpriseId
* @param wxUserId
* @param externalUserId
* from 0 企微加好友通知 1刷新好友
* @return
*/
ExternalUserDTO getExternalUseridInfo(String wxEnterpriseId, String wxUserId, String externalUserId);
ExternalUserDTO getExternalUseridInfo(String wxEnterpriseId, String wxUserId, String externalUserId , int from);
/**
* 清理外部联系人
......
package com.gic.haoban.manage.service.pojo;
public class HBQwMonitorBO {
private String host ;
private String type ;
private int num ;
public String getHost() {
return host;
}
public void setHost(String host) {
this.host = host;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
}
package com.gic.haoban.manage.service.service.out.impl;
import com.gic.haoban.manage.service.service.chat.GroupChatDataService;
import com.gic.haoban.manage.service.util.HBQwMonitorUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......@@ -88,4 +89,9 @@ public class HaobanTimerApiServiceImpl implements HaobanTimerApiService {
this.groupChatDataService.groupChatQuitTimer(params) ;
return ServiceResponse.success();
}
@Override
public void addFrientMonitorTimer(String params) {
HBQwMonitorUtils.addByTimer();
}
}
......@@ -5,6 +5,7 @@ import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import com.gic.haoban.manage.service.util.EventUtils;
import com.gic.haoban.manage.service.util.HBQwMonitorUtils;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.LogManager;
......@@ -925,6 +926,7 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
return null ;
}
if(qwDTO.isSelf()) {
HBQwMonitorUtils.addForFriend(0);
this.updateExternalStatus(dto.getExternalUserid(),dto.getStaffId());
String unionIdJson = qywxUserApiService.getCorpSelfExternalUseridInfo(qwDTO.getDkCorpid(), qwDTO.getSelfSecret(), dto.getExternalUserid(),qwDTO.getUrlHost());
if (StringUtils.isBlank(unionIdJson)) {
......@@ -932,6 +934,7 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
return null;
} else if ("1".equals(unionIdJson)) {
log.info("接口调用被限制");
HBQwMonitorUtils.addForFriend(1);
throw new WxApiLimitException("getCorpSelfExternalUseridInfo接口调用被限制");
}
ExternalUserPojo pojo = getExternalUserPojo(unionIdJson, wxUserId, wxEnterpriseId);
......@@ -960,8 +963,9 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
if (SELF_APP.equals(suiteid)) {
externalUserDTO = this.getCorpSelfExternalUseridInfo(wxEnterpriseId, wxUserId, externalUserid);
} else {
HBQwMonitorUtils.addForFriend(0);
this.updateExternalStatus(externalUserid,dto.getStaffId());
externalUserDTO = this.getExternalUseridInfo(wxEnterpriseId, wxUserId, externalUserid);
externalUserDTO = this.getExternalUseridInfo(wxEnterpriseId, wxUserId, externalUserid,0);
}
checkQywxSettingApiService.saveFriendCallback(wxEnterpriseId, externalUserDTO, dto);
if (externalUserDTO == null) {
......@@ -1375,7 +1379,7 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
}
@Override
public ExternalUserDTO getExternalUseridInfo(String wxEnterpriseId, String wxUserId, String externalUserId) {
public ExternalUserDTO getExternalUseridInfo(String wxEnterpriseId, String wxUserId, String externalUserId , int from) {
log.info("查询第三方:wxEnterpriseId:{},wxUserId:{},externalUserId:{}", wxEnterpriseId, wxUserId, externalUserId);
WxEnterpriseQwDTO qwDTO = this.wxEnterpriseService.getQwInfo(wxEnterpriseId);
if (qwDTO == null) {
......@@ -1399,6 +1403,9 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
return null;
} else if ("1".equals(uJ)) {
log.info("限制次数");
if(from==0) {
HBQwMonitorUtils.addForFriend(1);
}
throw new WxApiLimitException("getExternalUseridInfo接口次数限制");
}
String name = "";
......
......@@ -63,7 +63,7 @@ public class FriendSyncNewOperation implements BaseSyncOperation {
String externalUserId = dataPre.getDataContent();
String staffId = dataPre.getpDataId() ;
ExternalUserDTO externalUserDTO = memberUnionidRelatedApiService.getExternalUseridInfo(wxEnterpriseId, wxUserId, externalUserId);
ExternalUserDTO externalUserDTO = memberUnionidRelatedApiService.getExternalUseridInfo(wxEnterpriseId, wxUserId, externalUserId , 1);
if (externalUserDTO == null) {
logger.info("第三方外部联系人详情查询失败,staffId={},{},{}", staffId,wxUserId,externalUserId);
dealFlag = false;
......
package com.gic.haoban.manage.service.util;
import com.gic.haoban.manage.service.pojo.HBQwMonitorBO;
import com.gic.redis.data.util.RedisUtil;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.redisson.api.RAtomicLong;
import org.springframework.stereotype.Component;
import java.util.Arrays;
import java.util.List;
/**
* 好办统计
*/
@Component
public class HBQwMonitorUtils {
private static Logger logger = LogManager.getLogger(HBQwMonitorUtils.class);
private static final List<String> keyList = Arrays.asList("hbDatakey:qwFriendNotice","hbDataKey:addFriendFail") ;
/**
* @param index 0加好友企微通知数量 1加好友查询企微接口限制数量
*/
public static void addForFriend(int index) {
logger.info("addForFriend");
String key = keyList.get(index) ;
RAtomicLong cache = RedisUtil.getRedisClient().getAtomicLong(key);
long val = cache.addAndGet(1);
}
public static Object query(String sql) {
return InfluxDbMonitorUtils.getInstance().query(sql);
}
public static void addByTimer() {
logger.info("add timer");
for(int i=0;i<keyList.size();i++) {
String key = keyList.get(i) ;
int count = 0 ;
Object countObj = RedisUtil.getCache(key) ;
if(null != countObj) {
count = Integer.valueOf(countObj.toString()) ;
}
RAtomicLong cache = RedisUtil.getRedisClient().getAtomicLong(key);
cache.addAndGet(-count) ;
HBQwMonitorBO bo = new HBQwMonitorBO() ;
bo.setHost("127.0.0.1");
bo.setType(""+i);
bo.setNum(count);
InfluxDbMonitorUtils.getInstance().friendAdd(bo);
}
}
}
package com.gic.haoban.manage.service.util;
import com.gic.haoban.manage.service.pojo.HBQwMonitorBO;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.influxdb.InfluxDB;
import org.influxdb.InfluxDBFactory;
import org.influxdb.dto.Point;
import org.influxdb.dto.Query;
import org.influxdb.dto.QueryResult;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
public class InfluxDbMonitorUtils {
private static Logger logger = LogManager.getLogger(InfluxDbMonitorUtils.class);
private static String url = "http://10.0.2.9:8086";
private static InfluxDB influxDB;
private static final String DB_NAME = "haoban_info";
private static final String RP_NAME = "default";
private static volatile InfluxDbMonitorUtils instance = null;
public static InfluxDbMonitorUtils getInstance() {
if (instance == null) {
synchronized (InfluxDbMonitorUtils.class) {
if (instance == null) {
instance = new InfluxDbMonitorUtils();
}
}
}
return instance;
}
private InfluxDbMonitorUtils() {
influxDB = InfluxDBFactory.connect(url, "inflxudb", "inflxudb");
if (!influxDB.describeDatabases().contains(DB_NAME)) {
influxDB.createDatabase(DB_NAME);
influxDB.createRetentionPolicy(RP_NAME, DB_NAME, "7d", 1, true);
}
influxDB.setDatabase(DB_NAME);
influxDB.setRetentionPolicy(RP_NAME);
}
public InfluxDB getInfluxDB() {
return influxDB;
}
public void friendAdd(HBQwMonitorBO bo) {
influxDB.write(Point.measurement("hb_qw_friend_monitor")
.time(System.currentTimeMillis(), TimeUnit.MILLISECONDS)
.addField("num", bo.getNum())
.tag("host", bo.getHost())
.tag("type", bo.getType())
.build());
}
/**
* 查询
*
* @param command 查询语句
*/
public List<Map<String, Object>> query(String command) {
QueryResult query = influxDB.query(new Query(command, DB_NAME));
return queryResultProcess(query);
}
/**
* @param queryResult
* @desc 查询结果处理
*/
public List<Map<String, Object>> queryResultProcess(QueryResult queryResult) {
List<Map<String, Object>> mapList = new ArrayList<>();
List<QueryResult.Result> resultList = queryResult.getResults();
//把查询出的结果集转换成对应的实体对象,聚合成list
for (QueryResult.Result query : resultList) {
List<QueryResult.Series> seriesList = query.getSeries();
if (seriesList != null && seriesList.size() != 0) {
for (QueryResult.Series series : seriesList) {
List<String> columns = series.getColumns();
String[] keys = columns.toArray(new String[columns.size()]);
List<List<Object>> values = series.getValues();
if (values != null && values.size() != 0) {
for (List<Object> value : values) {
Map<String, Object> map = new HashMap(keys.length);
for (int i = 0; i < keys.length; i++) {
map.put(keys[i], value.get(i));
}
mapList.add(map);
}
}
}
}
}
return mapList;
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment