/**
 * 版权所有 ©2019 莱欧有限公司
 * 工程名：dx
 * 文件名：DingDingNotice.java
 * 创建日期：2019年9月28日 下午2:21:20
 * 作者：mt.W
 */
package com.lion.util;


import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.log4j.Logger;
import org.json.JSONObject;

import com.lion.dao.LogDao;

import jodd.util.StringUtil;

/**
 * 类描述
 * @author mt.W
 * @since 2019年9月28日
 */
public class DingDingUtil {
	public static Logger log4j = Logger.getLogger(DingDingUtil.class);
	/**
	 * 
	 * 方法描述   获取钉钉token
	 * @author mt.W
	 * @since 2019年9月28日
	 * @param appkey
	 * @param appsecret
	 * @param logDao
	 * @param userid
	 * @return
	 */
	public static String getAcessToken(String appkey,String appsecret,LogDao logDao,String userid){
		String url = "https://oapi.dingtalk.com/gettoken?appkey=" + appkey + "&appsecret=" + appsecret;// 获取access_token
		String result = HttpUtil.httpGet(url);// 得到access_token返回信息
		log4j.info("获取token返回信息:" + result);
		//logDao.saveLog("调用钉钉获取token请求，appkey=" + appkey + ",appsecret=" + appsecret + ",返回结果：" + result, "获取token",userid);
		if (StringUtil.isNotEmpty(result)) {
			JSONObject json = new JSONObject(result);
			if (json.get("errcode").toString().equals("0")) {// 获得access_token
				return Util.responseString("true", json.get("access_token").toString());
			}else{
				return Util.responseString("false", json.get("errmsg").toString());
			}
		}
		return "";
	}
	/**
	 * 
	 * 方法描述  根据钉钉id同步钉钉上组织架构部门
	 * @author mt.W
	 * @since 2019年9月28日
	 * @param accessToken
	 * @param ddid
	 * @param userid
	 * @param logDao
	 * @return
	 */
	public static String syncOrgdept(String accessToken,String ddid,String userid,LogDao logDao){
		String url = "https://oapi.dingtalk.com/department/list?access_token=" + accessToken+ "&fetch_child=true&id=" + ddid;// 获取部门信息uerl
		String result = HttpUtil.httpGet(url);
		log4j.info("获取同步部门返回信息:" + result);
		logDao.saveLog("调用钉钉同步部门请求，请求地址："+url, "同步部门", userid);
		if (StringUtil.isNotEmpty(result)) {
			JSONObject jsonOrg = new JSONObject(result);
			if (jsonOrg.get("errcode").toString().equals("0")) {// 获取到部门信息
				return Util.responseString("true", jsonOrg.get("department").toString());
			} else {
				return Util.responseString("false", jsonOrg.get("errmsg").toString());
			}
		}
		return "";
	}
	/**
	 * 
	 * 方法描述 根据钉钉id 同步钉钉组织架构人员
	 * @author mt.W
	 * @since 2019年9月28日
	 * @param accessToken
	 * @param ddid
	 * @param userid
	 * @param logDao
	 * @param offset
	 * @return
	 */
	public static String syncOrgUser(String accessToken,String ddid,String userid,LogDao logDao,int offset){
		String url = "https://oapi.dingtalk.com/user/listbypage?access_token=" + accessToken+ "&department_id=" + ddid + "&offset=" + offset + "&size=100";
		String result = HttpUtil.httpGet(url);
		log4j.info("获取部门人员返回信息:" + result);
		logDao.saveLog("调用钉钉同步人员请求，请求地址："+url, "同步部门", userid);
		if (StringUtil.isNotEmpty(result)) {
			JSONObject jsonUinfo = new JSONObject(result);
			if (jsonUinfo.get("errcode").toString().equals("0")) {
				return Util.responseString("true", result);
			} else {
				return Util.responseString("false", jsonUinfo.getString("errmsg"));
			}
		}
		return "";
	}
	/**
	 * 
	 * 方法描述   钉钉发送消息
	 * @author mt.W
	 * @since 2019年9月28日
	 * @param accessToken
	 * @param agentid
	 * @param userlist
	 * @param message
	 */
	public static void sendMessage(String accessToken,String agentid,String userlist,String message){
		String url = "https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2?access_token="+accessToken;
		JSONObject content = new JSONObject();
		content.put("content", message);
		JSONObject msg = new JSONObject();
		msg.put("msgtype", "text");
		msg.put("text", content);
		Map<String,Object> putmap = new HashMap<String, Object>();
		putmap.put("agent_id", agentid);
		putmap.put("userid_list", userlist);
		putmap.put("msg", msg);
		String result = HttpUtil.doPost(url, putmap);
		log4j.info(result);
	}
	/**
	 * 
	 * 方法描述   封装钉钉发送消息数据
	 * @author mt.W
	 * @since 2019年10月12日
	 * @param list
	 * @param message
	 * @param AppKey
	 * @param AppSecret
	 * @param logDao
	 * @param agent_id
	 */
	public static void takeMsg(List<Map<String,Object>> list,String message,String AppKey,String AppSecret,LogDao logDao,String agent_id  ){
		//获取接收消息人员ddid
		String ddids= "";
		for(Map<String,Object> map:list){
			if(StringUtil.isNotEmpty(map.get("ddid").toString())){
				ddids += map.get("ddid").toString()+",";
			}
		}
		if(StringUtil.isNotEmpty(ddids)){//获取到人员ddid
			ddids = ddids.substring(0,ddids.length()-1);
			String accessToken = DingDingUtil.getAcessToken(AppKey, AppSecret, logDao, "");
			if(StringUtil.isNotEmpty(accessToken)){
				JSONObject json = new JSONObject(accessToken);
				if(json.getString("success").equals("true")){
					accessToken = json.getString("message");
					DingDingUtil.sendMessage(accessToken, agent_id, ddids, message);
				}
			}
		}
	}

}
