package com.dsk.common.utils;

import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.CollectionUtils;

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

/**
 * 钉钉-工具类
 */
@Slf4j
public class DingTalkUtil {

    /**
     * ty
     * 钉钉机器人发消息地址（配置机器人的webhook）
     * 此处大家可以配置到配置文件等等方式
     */
    private static final String MSG_URL = "https://oapi.dingtalk.com/robot/send?access_token=ab6a16dacc0f7e8051bf5b34d425382ffa22621cf3876d81a5331ab30a1bbb14";

    /**
     * 通知具体人
     *
     * @param content    通知内容
     * @param mobileList 通知具体人的手机号码列表
     */
    public static void sendDingTalkMsg(List<String> mobileList, String content) {
        sendDingTalkMsg(false, mobileList, content);
    }

    /**
     * 通知所有人
     *
     * @param content 通知内容
     */
    public static void sendDingTalkMsg(String content) {
        sendDingTalkMsg(false, null, content);
    }

    /**
     * 发送消息
     *
     * @param content    通知内容
     * @param isAtAll    是否@所有人
     * @param mobileList 通知具体人的手机号码列表
     */
    private static void sendDingTalkMsg(boolean isAtAll, List<String> mobileList, String content) {
        try {
            if (!CollectionUtils.isEmpty(mobileList)) {
                isAtAll = false;
            }
            //消息内容
            Map<String, String> contentMap = new HashMap<>();
            contentMap.put("content", content);

            //通知人
            Map<String, Object> atMap = new HashMap<>();
            //1.是否通知所有人
            atMap.put("isAtAll", isAtAll);
            //2.通知具体人的手机号码列表
            atMap.put("atMobiles", mobileList);

            Map<String, Object> parameter = new HashMap<>();
            parameter.put("msgtype", "text");
            parameter.put("at", atMap);
            parameter.put("text", contentMap);

            //推送消息（http请求）
            String result = HttpUtil.post(MSG_URL, JSONUtil.toJsonStr(parameter));
            log.info("发送钉钉消息-result:{}", result);
        } catch (Exception e) {
            log.error("发送钉钉消息异常", e);
        }
    }
}
