package com.lyms.talkonlineweb.util;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 环信相关API
*/
@Component
@Log4j2
public class HXService {
@Value("${hx.APPKEY}")
private String appKey;
@Value("${hx.ClientID}")
private String clientId;
@Value("${hx.ClientSecret}")
private String clientSecret;
@Value("${hx.org_name}")
private String orgName;
@Value("${hx.app_name}")
private String appName;
private RestTemplate restTemplate=new RestTemplate();
private ResponseEntity<String> resp;
// @Autowired
// private RestTemplate restTemplate;
// @Bean
// public EMService getEMService(){
// EMProperties properties = EMProperties.builder()
// .setAppkey(appKey)
// .setClientId(clientId)
// .setClientSecret(clientSecret)
// .build();
//
// EMService service = new EMService(properties);
// return service;
// }
public String getUrl(){
return String.format("http://a1.easemob.com/%s/%s/",orgName,appName);
}
public String getToken(){
String token="";
Map<String,Object> param=new HashMap<>();
param.put("grant_type","client_credentials");
param.put("client_id",clientId);
param.put("client_secret",clientSecret);
ResponseEntity<String> resp=restTemplate.postForEntity(getUrl()+"token",param,String.class);
System.out.println(resp);
if(resp.getStatusCodeValue()==200) {
token= JSON.parseObject(resp.getBody()).getString("access_token");
}
return token;
}
public JSONObject getUser(String username){
JSONObject user=new JSONObject();
String token=getToken();
HttpHeaders headers=new HttpHeaders();
headers.add("Authorization","Bearer "+token);
HttpEntity param=new HttpEntity(headers);
resp=restTemplate.exchange(getUrl()+"users/"+username, HttpMethod.GET,param,String.class);
if (resp.getStatusCodeValue()==200){
user= JSON.parseObject(resp.getBody());
}
return user;
}
public JSONObject addUser(String username,String passwd){
JSONObject rs=new JSONObject();
Map<String,Object> param=new HashMap<>();
HttpHeaders headers=new HttpHeaders();
headers.add("Authorization","Bearer "+getToken());
List lParam=new ArrayList();
param.clear();
param.put("username",username);
param.put("password",passwd);
lParam.add(param);
HttpEntity entity=new HttpEntity(param,headers);
resp=restTemplate.postForEntity(getUrl()+"users",entity,String.class);
if (resp.getStatusCodeValue()==200){
rs= JSON.parseObject(resp.getBody());
}
log.info(rs);
return rs;
}
/**
* 删除用户
* @param username 环信用户ID
* @return
*/
public JSONObject delUser(String username){
JSONObject user=new JSONObject();
String token=getToken();
HttpHeaders headers=new HttpHeaders();
headers.add("Authorization","Bearer "+token);
HttpEntity param=new HttpEntity(headers);
resp=restTemplate.exchange(getUrl()+"users/"+username, HttpMethod.DELETE,param,String.class);
if (resp.getStatusCodeValue()==200){
user= JSON.parseObject(resp.getBody());
}
return user;
}
public JSONObject sendMsg(String[] target,String msgType,String msgContent,String from){
JSONObject rs=new JSONObject();
Map<String,Object> param=new HashMap<>();
HttpHeaders headers=new HttpHeaders();
headers.add("Authorization","Bearer "+getToken());
List lParam=new ArrayList();
param.put("target",target);
Map<String,Object> msg=new HashMap<>();
msg.put("type",msgType);
msg.put("msg",msgContent);
param.put("msg",msg);
param.put("from",from);
lParam.add(param);
HttpEntity entity=new HttpEntity(param,headers);
resp=restTemplate.postForEntity(getUrl()+"messages",entity,String.class);
if (resp.getStatusCodeValue()==200){
rs= JSON.parseObject(resp.getBody());
}
log.info(rs);
return rs;
}
/**
* 获取聊天记录
* @param time 查询的时间格式为10位数字形式(YYYYMMDDHH)
* @return
*/
public JSONObject getChatMessages(String time){
JSONObject msg=new JSONObject();
String token=getToken();
HttpHeaders headers=new HttpHeaders();
headers.add("Authorization","Bearer "+token);
HttpEntity param=new HttpEntity(headers);
resp=restTemplate.exchange(getUrl()+"chatmessages/"+time, HttpMethod.GET,param,String.class);
if (resp.getStatusCodeValue()==200){
msg= JSON.parseObject(resp.getBody());
log.info(msg);
}
return msg;
}
/**
* 创建聊天室
* @param name
* @param description
* @param owner
* @param members
* @return
*/
public JSONObject addChatRooms(String name,String description,String owner,String[] members){
JSONObject rs=new JSONObject();
Map<String,Object> param=new HashMap<>();
HttpHeaders headers=new HttpHeaders();
headers.add("Authorization","Bearer "+getToken());
List lParam=new ArrayList();
param.put("name",name);
param.put("description",description);
param.put("owner",owner);
param.put("members",members);
lParam.add(param);
HttpEntity entity=new HttpEntity(param,headers);
resp=restTemplate.postForEntity(getUrl()+"chatrooms",entity,String.class);
if (resp.getStatusCodeValue()==200){
rs= JSON.parseObject(resp.getBody());
}
log.info(rs);
return rs;
}
}