package com.hst.ces.meetingresource.util;
import com.alibaba.fastjson.JSONObject;
import com.hst.ces.common.SpringContextUtil;
import com.hst.ces.common.StringUtils;
import com.hst.ces.service.v2.ISystemParamServiceNew;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
* @author :zy
* @date :Created in 2021/07/23 11:42
* @description:政务微信工具类
* @version: 1.0
*/
@NoArgsConstructor(access = AccessLevel.PRIVATE)
@Slf4j
public class GovernmentWeChatUtil {
/**
* 缓存信息
*/
public static Map<String, String> cache = new ConcurrentHashMap<String, String>();
/**
* 获取部门列表
*
* @param departmentId
*/
public static JSONObject getAddressList(Integer departmentId) {
String request = String.format(Constants.DEPARTMENT_LIST_URL, getToken(), departmentId, Constants.FETCH_CHILD);
return (JSONObject) OkHttpUtil.get(request);
}
/**
* 获取access_token
* 增加缓存微信ACCESS_TOKEN,增加同步锁机制,避免短时间内重复请求
*/
public static String getToken() {
//目前没有redis服务器暂时不使用
// return RedissonUtils.lockAndDeal(1, 30, TimeUnit.SECONDS, () -> {
// //先从缓存中获取access_token
// String access_token = "";
// String accessToken = cache.get("access_token");
// if (StringUtils.isBlank(accessToken)) {
// String request = String.format(Constants.GET_TOKEN_URL, Constants.CORP_ID,
// Constants.CORP_SECRET_JS_SDK);
// JSONObject jsonObject = (JSONObject) OkHttpUtil.get(request);
// access_token = jsonObject.getString("access_token");
// //在存到缓存中
// cache.put("access_token", access_token);
// }
// return access_token;
// },
// false, Constants.APP_WECHAT_ACCESS_TOKEN_LOCK);
//先从缓存中获取access_token
String access_token = "";
access_token = cache.get("access_token");
if (StringUtils.isBlank(access_token)) {
String request = String.format(Constants.GET_TOKEN_URL, Constants.CORP_ID,
Constants.CORP_SECRET_JS_SDK);
JSONObject jsonObject = (JSONObject) OkHttpUtil.get(request);
access_token = jsonObject.getString("access_token");
//在存到缓存中
cache.put("access_token", access_token);
}
return access_token;
}
/**
* 获取指定通讯录下的成员详情
*
* @param departmentId
*/
public static JSONObject getAddressMembers(Integer departmentId) {
String request = String.format(Constants.USER_LIST_URL, getToken(), departmentId, Constants.FETCH_CHILD);
return (JSONObject) OkHttpUtil.get(request);
}
/**
* 推送消息
*/
public static String appChatSend(String json) {
String url = String.format(Constants.APP_CHAT_SEND_URL, getToken());
return OkHttpUtil.post(url, json, String.class);
}
/**
* 获取用户信息
*
* @param userid
*/
public static JSONObject getUserinfo(Integer userid) {
String request = String.format(Constants.USER_GET_URL, getToken(), userid, Constants.AVATAR_ADDR);
return (JSONObject) OkHttpUtil.get(request);
}
public interface Constants {
/**
* 去systemParam表中取域名
*/
String REALM_NAME = SpringContextUtil.getBean(ISystemParamServiceNew.class)
.getParamValue("GOVERNMENT_WECHAT_REALM_NAME");
String CORP_ID = SpringContextUtil.getBean(ISystemParamServiceNew.class)
.getParamValue("CORP_ID");
String CORP_SECRET_JS_SDK = SpringContextUtil.getBean(ISystemParamServiceNew.class)
.getParamValue("CORP_SECRET");
/**
* 获取部门列表
*/
String DEPARTMENT_LIST_URL = REALM_NAME + "/cgi-bin/department/list?access_token=%s&id=%s&no_fetch_child=%s";
/**
* 获取部门成员列表
*/
String USER_LIST_URL = REALM_NAME + "/cgi-bin/user/list?access_token=%s&department_id=%s&fetch_child=%s";
String FETCH_CHILD = "1";
String AVATAR_ADDR = "1";
String APP_WECHAT_ACCESS_TOKEN_LOCK = "APP_WECHAT_ACCESS_TOKEN_LOCK";
/**
* 获取token
*/
String GET_TOKEN_URL = REALM_NAME + "/cgi-bin/gettoken?corpid=%s&corpsecret=%s";
/**
* 推送群聊消息
*/
String APP_CHAT_SEND_URL = REALM_NAME + "/cgi-bin/appchat/send?access_token=%s";
/**
* 获取成员信息
*/
String USER_GET_URL = REALM_NAME + "/cgi-bin/user/get?access_token=%s&userid=%s&avatar_addr=%s";
}
}
使用java自带缓存类ConcurrentHashMap来实现缓存
于 2021-07-23 17:19:15 首次发布