package cn.van.business.util;


import cn.van.business.enums.FromType;
import cn.van.business.model.wx.WxMessage;
import cn.van.business.repository.SettingRepository;
import cn.van.business.repository.WxMessageDataForChatRepository;
import cn.van.business.repository.WxUserRepository;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;

import java.math.BigDecimal;
import java.util.HashMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import static cn.van.business.util.WXUtil.*;


/**
 * @author Leo
 * @version 1.0
 * @create 2023/12/19 0019 上午 11:03
 * @description：
 */
@Component
public class WxMessageConsumer {

    private static final String meituanCookie = "meituanCookie";
    /**
     * key开头的为 setting 的 key
     */
    private static final String key_caiDan_user = "用户菜单";
    private static final String key_caiDan_admin = "管理员菜单";
    /**
     * order 开头的是接受的指令
     */
    private static final String order_caiDan = "菜单";
    private static final String order_admin = "管理员";
    /**/
    private static final Logger logger = LoggerFactory.getLogger(WxMessageConsumer.class);

    /**
     * 临时参数
     * 每次扣费
     */
    private static final BigDecimal priceOfMT20 = new BigDecimal("0.2");
    private static final Integer fromGR = 10008;
    private static final String SERVER_URL = "https://api.jd.com/routerjson";
    private static final String accessToken = "";
    private static final String appKey = "98e21c89ae5610240ec3f5f575f86a59";
    private static final String appSecret = "3dcb6b23a1104639ac433fd07adb6dfb";
    private final WXUtil wxUtil;
    private final QLUtil qlUtil;
    private final WxMessageDataForChatRepository wxMessageDataForChatRepository;
    private final WxUserRepository wxUserRepository;
    private final SettingRepository settingRepository;
    private final JDUtil jdUtils;

    @Autowired
    public WxMessageConsumer(WXUtil wxUtil, QLUtil qlUtil,
                             @Lazy WxMessageDataForChatRepository wxMessageDataForChatService,
                             @Lazy WxUserRepository wxUserRepository,
                             @Lazy SettingRepository settingRepository,
                             @Lazy JDUtil jdUtils) {
        this.wxUtil = wxUtil;
        this.qlUtil = qlUtil;
        this.wxMessageDataForChatRepository = wxMessageDataForChatService;
        this.wxUserRepository = wxUserRepository;
        this.settingRepository = settingRepository;
        this.jdUtils = jdUtils;
    }

    /**
     * 从京东商品 URL 中提取产品 ID
     *
     * @param url 需要解析的 URL
     * @return 提取出的产品 ID
     */
    public static String extractProductId(String url) {
        // 使用正则表达式匹配 pattern 包含 /product/ 后跟一系列数字，结束于 .html
        Pattern pattern = Pattern.compile("/product/(\\d+)\\.html");
        Matcher matcher = pattern.matcher(url);

        if (matcher.find()) {
            return matcher.group(1); // 返回第一个捕获组（产品 ID）
        }
        return null; // 如果没有找到匹配项，返回 null
    }

    //private Boolean heiMingDan(String wxid) {
    //    // 0 正常 1 黑名单
    //    //
    //    boolean flag = false;
    //    WxUser wxUser = wxUserRepository.getOne(Wrappers.query(new WxUser()).eq("wxid", wxid));
    //    if (Util.isNotEmpty(wxUser)) {
    //        if (wxUser.getStatus().equals(1)) {
    //            flag = true;
    //        }
    //    }
    //    return flag;
    //}


    //private Boolean isNew(String wxid) {
    //    // 0 是 1 不是
    //    boolean flag = false;
    //    WxUser wxUser = wxUserRepository.getOne(Wrappers.query(new WxUser()).eq("wxid", wxid));
    //    if (Util.isNotEmpty(wxUser)) {
    //        if (wxUser.getIsnew().equals(0)) {
    //            flag = true;
    //        }
    //    }
    //    return flag;
    //}

    //private Boolean isNew(Integer isNew) {
    //    // 0 是 1 不是
    //    boolean flag = false;
    //    if (isNew.equals(0)) {
    //        flag = true;
    //    }
    //    return flag;
    //}

    /**
     * @param wxMessage
     * @return
     * @throws
     * @description
     */
    //private void handleTransferEvent(WxMessage wxMessage) {
    //    Integer msgType = 1;
    //
    //    /**
    //     * {
    //     *         "fromWxid": "wxid_ytpc72mdoskt22", 	对方wxid
    //     *         "msgSource": 1, 	1|收到转账 2|对方接收转账 3|发出转账 4|自己接收转账 5|对方退还 6|自己退还
    //     *         "transType": 1, 1|即时到账 2|延时到账
    //     *         "money": "2.00", 	金额，单位元
    //     *         "memo": "", 转账备注
    //     *         "transferid": "1000050001202312250424037787039", 转账ID
    //     *         "invalidtime": "1703577220" 	10位时间戳
    //     *     }*/
    //    JSONObject data = wxMessage.getData().getJSONObject("data");
    //    if (data == null) {
    //        return;
    //    }
    //    WxMessageDataForTransfer wxMessageDataForTransfer = data.to(WxMessageDataForTransfer.class);
    //
    //    String result = null;
    //    String wxid = wxMessageDataForTransfer.getFromwxid();
    //
    //
    //
    //    if (heiMingDan(wxid)) {
    //        result = "您已被拉黑，请联系客服！";
    //    } else {
    //        if (wxMessageDataForTransfer.getTranstype().equals(2)) {
    //            result = "请勿使用延时到账功能。累计三次将永久拉黑！";
    //        } else {
    //
    //            JSONObject shouKuanResult = wxUtil.queRenShouKuan(wxid, wxMessageDataForTransfer.getTransferid());
    //            if (shouKuanResult == null) {
    //                result = "查询转账失败，请稍后再试。";
    //            }
    //            if (shouKuanResult != null && shouKuanResult.getInteger("code") == 200) {
    //                BigDecimal money = wxMessageDataForTransfer.getMoney();
    //                if (money.compareTo(BigDecimal.ZERO) > 0) {
    //                    WxUser wxUser = wxUserService.getOne(Wrappers.query(new WxUser()).eq("wxid", wxid));
    //                    wxUser.setMoneyLeiji(wxUser.getMoneyLeiji().add(money));
    //                    wxUser.setMoneyShengyu(wxUser.getMoneyShengyu().add(money));
    //                    wxUser.setCountChongzhi(wxUser.getCountChongzhi().add(BigDecimal.ONE));
    //                    wxUserService.updateById(wxUser);
    //                    result = "收到转账" + money + "元，已成功存入账户。感谢您的使用。";
    //                }
    //            }
    //
    //        }
    //
    //    }
    //    wxUtil.sendTextMessage(wxid, result, msgType, null);
    //
    //}
    @Async("threadPoolTaskExecutor")
    public void consume(WxMessage wxMessage) throws Exception {
        //logger.info("接收到消息 : {}", wxMessage);
        if (wxMessage.getEvent() == null) {
            return;
        }
        /**
         * 需要处理 私聊 和 转账消息
         * 其他消息暂时不处理
         * 私聊需要解析是否美团领券
         * 转账需要对接会员系统
         *
         * */
        //WxMessage.DataSection data = wxMessage.getData();
        if (FromType.PRIVATE.getKey().equals(wxMessage.getEvent())) {
            handlePrivateMessage(wxMessage);
        } else if (FromType.GROUP.getKey().equals(wxMessage.getEvent())) {
            handleGroupMessage(wxMessage);
        }
        //if (event.equals(EventType.TRANSFER_EVENT.getKey())) {
        //    handleTransferEvent(wxMessage);
        //}

    }

    /**
     * 处理私聊消息
     *
     * @param wxMessage
     */
    private void handlePrivateMessage(WxMessage wxMessage) throws Exception {
        logger.info("处理私聊消息： {}", JSON.toJSONString(wxMessage));

        WxMessage.DataSection data = wxMessage.getData();
        WxMessage.DataSection.InnerData innerData = data.getData();
        if (Util.isAnyEmpty(innerData.getMsg(), innerData.getFromWxid())) {
            logger.info("消息内容为空，不处理");
            return;
        } else {
            logger.info("消息内容：{}", innerData.getMsg());
        }

        String fromWxid = innerData.getFromWxid();
        WXUtil.SuperAdmin superAdmin = getSuperAdmins(fromWxid).get(0);
        if (Util.isEmpty(superAdmin)) {
            logger.info("不是超管消息，不处理");
            return;
        }

        String msg = innerData.getMsg();
        if (msg.startsWith("京")) {
            logger.info("消息以京开头，处理京东指令消息");
            jdUtils.sendOrderToWxByOrderJD(msg.replace("京", ""), fromWxid);
            return;
        } else {
            logger.info("消息不以京开头");
        }
        if (msg.startsWith("拼")) {
            logger.info("消息以拼开头，处理拼多多指令消息");
            jdUtils.sendOrderToWxByOrderPDD(msg.replace("拼", ""), fromWxid);
            return;
        }
        if (msg.startsWith("单")) {
            logger.info("消息以单开头，处理单指令消息");
            jdUtils.sendOrderToWxByOrderD(msg.replace("单", ""), fromWxid);
            return;
        }
        //if (msg.startsWith("评")){
        //    logger.info("消息以评开头，处理评价指令消息");
        //    jdUtils.sendOrderToWxByOrderP(msg.replace("评", ""), fromWxid);
        //    return;
        //}
        logger.info("未命中前置指令，开始命中 Default 流程");
        jdUtils.sendOrderToWxByOrderDefault(msg, fromWxid);
    }

    private void handleGroupMessage(WxMessage wxMessage) {
        logger.info("处理群聊消息： {}", JSON.toJSONString(wxMessage));

        WxMessage.DataSection data = wxMessage.getData();
        WxMessage.DataSection.InnerData innerData = data.getData();
        if (Util.isAnyEmpty(innerData.getMsg(), innerData.getFromWxid())) {
            logger.info("消息内容为空，不处理");
            return;
        } else {
            logger.info("消息内容：{}", innerData.getMsg());
        }

        String fromWxid = innerData.getFromWxid();
        String msg = innerData.getMsg();

        if (chatRoom_xb.containsKey(fromWxid)) {
            logger.info("线报群消息");
            jdUtils.xb(msg,fromWxid);
            return;
        }
        if (!chatRoom_admin.contains(fromWxid)) {
            logger.info("不是白名单群聊，不处理");
            return;
        }
        if (msg.startsWith("评")){
            if (("47484514467@chatroom".equals(fromWxid))){
            logger.info("消息以评开头，处理评价指令消息");
            jdUtils.sendOrderToWxByOrderP(msg.replace("评", ""), fromWxid);
            return;
        }
        if (msg.startsWith("拼")) {
            logger.info("消息以拼开头，处理拼多多指令消息");
            jdUtils.sendOrderToWxByOrderPDD(msg.replace("拼", ""), fromWxid);
            return;
        }
        if (msg.startsWith("单")) {
            logger.info("消息以单开头，处理单指令消息");
            jdUtils.sendOrderToWxByOrderD(msg.replace("单", ""), fromWxid);
            return;
        }
        logger.info("未命中前置指令，开始命中 Default 流程");
        jdUtils.sendOrderToWxByOrderDefault(msg, fromWxid);
        /**
         * {
         *     "event": 10008,
         *     "wxid": "wxid_nq6r0w9v12612",
         *     "data": {
         *         "type": "recvMsg",
         *         "des": "收到消息",
         *         "data": {
         *             "timeStamp": "1716619844146",
         *             "fromType": 2,
         *             "msgType": 1,
         *             "msgSource": 0,
         *             "fromWxid": "34457730396@chatroom",
         *             "finalFromWxid": "wxid_3sq4tklb6c3121",
         *             "atWxidList": ["wxid_nq6r0w9v12612", "wxid_s4icha2bm2zg12"],
         *             "silence": 0,
         *             "membercount": 3,
         *             "signature": "V1_1YiTEwOY|v1_1YiTEwOY",
         *             "msg": "@忆白\\u2005@小鹿\\uD83D\\uDE00\\uD83D\\uDE00摸\\u2005你好\\uD83E\\uDD23世界",
         *             "msgId": "7053704521966022857",
         *             "sendId": ""
         *         },
         *         "timestamp": "1716619844147",
         *         "wxid": "wxid_nq6r0w9v12612",
         *         "port": 8888,
         *         "pid": 3944,
         *         "flag": "7888"
         *     }
         * }*/
    }
    //else if (msg.startsWith("美团 ")) {
    //    logger.info("处理美团的消息");
    //    msg = msg.substring(msg.indexOf("https://i.meituan.com/mttouch/page/account"));
    //    String[] all = msg.split("\\?");
    //
    //    if (all.length == 2) {
    //        String wxid = null;
    //        if (wxMessage.getFromtype().equals(fromGR)) {
    //            wxid = wxMessage.getFromid();
    //        } else {
    //            wxid = wxMessage.getFromgid();
    //        }
    //        String httpData = all[1];
    //        String[] httpDataArr = httpData.split("&");
    //        if (httpDataArr.length == 2) {
    //            // 调用美团
    //            //String result = mt20(wxid, httpDataArr[0].split("=")[1], httpDataArr[1].split("=")[1]);
    //
    //            //wxUtil.sendTextMessage(wxid, result, msgType, null);
    //        } else {
    //
    //            wxUtil.sendTextMessage(wxid, "请检查提交的数据格式是否正确。", msgType, null);
    //        }
    //    }
    //} else if ("余额".equals(msg)) {
    //    String wxid = null;
    //    if (wxMessageDataForChat.getFromtype() == 1) {
    //        wxid = wxMessageDataForChat.getFromwxid();
    //    } else if (wxMessageDataForChat.getFromtype() == 2) {
    //        wxid = wxMessageDataForChat.getFinalfromwxid();
    //    }
    //    WxUser wxUser = wxUserService.getOne(Wrappers.query(new WxUser()).eq("wxid", wxid));
    //    String result = "";
    //    if (Util.isNotEmpty(wxUser)) {
    //        result = "您的余额为：" + wxUser.getMoneyLeiji() + "元\r";
    //        result = result + " 您的消费次数为：" + wxUser.getCountXiaofei() + "次\r";
    //        result = result + " 您的充值次数为：" + wxUser.getCountChongzhi() + "次\r";
    //        result = result + " 您的累计充值为：" + wxUser.getMoneyLeiji() + "元";
    //    } else {
    //        result = "暂未查询到充值记录。\r";
    //    }
    //
    //
    //    wxUtil.sendTextMessage(wxid, result, msgType, null);
    //} else if ("体验".equals(msg)) {
    //    String wxid = null;
    //    if (wxMessageDataForChat.getFromtype() == 1) {
    //        wxid = wxMessageDataForChat.getFromwxid();
    //    } else if (wxMessageDataForChat.getFromtype() == 2) {
    //        wxid = wxMessageDataForChat.getFinalfromwxid();
    //    }
    //    String result = "";
    //    if (heiMingDan(wxid)) {
    //        result = "黑名单！";
    //    } else {
    //        WxUser wxUser = wxUserService.getOne(Wrappers.query(new WxUser()).eq("wxid", wxid));
    //        if (isNew(wxUser.getIsnew())) {
    //            wxUser.setMoneyLeiji(wxUser.getMoneyLeiji().add(new BigDecimal(1)));
    //            wxUser.setMoneyShengyu(wxUser.getMoneyShengyu().add(new BigDecimal(1)));
    //            wxUser.setCountChongzhi(wxUser.getCountChongzhi().add(BigDecimal.ONE));
    //            wxUser.setIsnew(1);
    //            wxUserService.updateById(wxUser);
    //            result = "体验成功，您已成功充值" + 1.00 + "元，已成功存入账户。感谢您的使用。";
    //        } else {
    //            result = "您已体验过，请勿重复体验。";
    //        }
    //
    //    }
    //
    //    wxUtil.sendTextMessage(wxid, result, msgType, null);
    //
    //}// 用户返回用户菜单
    //else if (order_caiDan.equals(msg)) {
    //    String wxid = null;
    //    if (wxMessageDataForChat.getFromtype() == 1) {
    //        wxid = wxMessageDataForChat.getFromwxid();
    //    } else if (wxMessageDataForChat.getFromtype() == 2) {
    //        wxid = wxMessageDataForChat.getFinalfromwxid();
    //    }
    //    String result = "";
    //    String puTong = getSetting(key_caiDan_user);
    //    String chaoJi = getSetting(key_caiDan_admin);
    //    if (isSuperAdminUser(wxid)) {
    //        result = "用户菜单：" + puTong + " 管理员菜单：" + chaoJi;
    //    } else {
    //        result = "用户菜单：" + puTong;
    //    }
    //
    //    wxUtil.sendTextMessage(wxid, result, msgType, wxMessageDataForChat.getFromwxid());
    //}
    //    wxMessageDataForChatService.save(wxMessageDataForChat);


    /**
     * @param wxMessage
     * @return
     * @throws
     * @description 处理群聊消息
     */
//        private void handleGroupMessage (WxMessage wxMessage){
//            Integer msgType = 2;
//            /**
//             *  接收到消息 : WxMessage(event=10009, wxid=wxid_kr145nk7l0an31, data={"type":"D0003","des":"收到消息","data":{"timeStamp":"1703128368100","fromType":1,"msgT两次ype":1,"msgSource":0,"fromWxid":"wxid_ytpc72mdoskt22","finalFromWxid":"","atWxidList":[],"silence":0,"membercount":0,"signature":"v1_vXrWK/iB","msg":"嗨鲁个迷紫123","msgBase64":"5Zeo6bKB5Liq6L+357SrMTIz"},"timestamp":"1703128368112","wxid":"wxid_kr145nk7l0an31","port":16888,"pid":10468,"flag":"7777"})
//             *  需要get 两次 data 字段*/
//            JSONObject data = wxMessage.getData().getJSONObject("data");
//            if (data == null) {
//                return;
//            }
//
//
//            /**{"type":"D0003","des":"收到消息","data":{"timeStamp":"1702957325031","fromType":1,"msgType":1,"msgSource":0,"fromWxid":"wxid_ytpc72mdoskt22","finalFromWxid":"","atWxidList":[],"silence":0,"membercount":0,"signature":"v1_OJXJYpvM","msg":"在不","msgBase64":"5Zyo5LiN"},"timestamp":"1702957325041","wxid":"wxid_kr145nk7l0an31","port":16888,"pid":10468,"flag":"7777"}
//             * */
//            WxMessageDataForChat wxMessageDataForChat = data.to(WxMessageDataForChat.class);
//
//            // 做业务处理
//            logger.info("处理消息： {}", wxMessageDataForChat.toString());
//
//            /**
//             * timeStamp	收到这条消息的13位现行时间戳
//             * fromType	来源类型：1|私聊 2|群聊 3|公众号
//             * msgType	消息类型：1|文本 3|图片 34|语音 42|名片 43|视频 47|动态表情 48|地理位置 49|分享链接或附件 2001|红包 2002|小程序 2003|群邀请 10000|系统消息
//             * msgSource	消息来源：0|别人发送 1|自己手机发送
//             * fromWxid	fromType=1时为好友wxid，fromType=2时为群wxid，fromType=3时公众号wxid
//             * finalFromWxid	仅fromType=2时有效，为群内发言人wxid
//             * atWxidList	仅fromType=2，且msgSource=0时有效，为消息中艾特人wxid列表
//             * silence	仅fromType=2时有效，0
//             * membercount	仅fromType=2时有效，群成员数量
//             * signature	消息签名
//             * msg	消息内容
//             * msgBase64	消息内容的Base64
//             * */
//            if (Util.isAnyEmpty(wxMessageDataForChat.getMsg(), wxMessageDataForChat.getFromwxid(), wxMessageDataForChat.getFromtype())) {
//                logger.info("消息内容为空，不处理");
//                return;
//            }
//            String atwxidlist = wxMessageDataForChat.getAtwxidlist();
//            if (Util.isNotEmpty((atwxidlist))) {
//                JSONObject wxList = wxUtil.getWxList();
//                JSONObject wxBotInfo = (JSONObject) wxList.getJSONArray("result").get(0);
//                String botWxid = wxBotInfo.getString("wxid");
//
//                if (atwxidlist.contains(botWxid)) {
//                    String[] split = wxMessageDataForChat.getMsg().split(" ");
//                    String msg;
//                    if (split.length == 2) {
//                        msg = split[1];
//                    } else {
//                        String[] newArray = new String[split.length - 1];
//                        System.arraycopy(split, 1, newArray, 0, newArray.length);
//                        StringBuilder stringBuilder = new StringBuilder();
//                        Iterator<String> iterator = Arrays.stream(newArray).iterator();
//                        while (iterator.hasNext()) {
//                            String s = iterator.next();
//                            stringBuilder.append(s).append(" ");
//                        }
//                        msg = stringBuilder.toString();
//                    }
//
////美团 20-7 + https://i.meituan.com/mttouch/page/account?userId=3822095266&token=AgHdIkm2tAGHc9SQSiG7M8xCx1LbTue9D2HPOAun2eYl3ou7BeEw1uGrGZH-DxmEiUgsbA1v9SM4DQAAAAC6HAAAz0rTXmkB_CIHin08hCu68mFv5k6nUc2q6_CfZqEdBcngRK_xD8Sx5fE4rfdq-yAJ, msgbase64=576O5ZuiIDIwLTcgKyBodHRwczovL2kubWVpdHVhbi5jb20vbXR0b3VjaC9wYWdlL2FjY291bnQ/dXNlcklkPTM4MjIwOTUyNjYmdG9rZW49QWdIZElrbTJ0QUdIYzlTUVNpRzdNOHhDeDFMYlR1ZTlEMkhQT0F1bjJlWWwzb3U3QmVFdzF1R3JHWkgtRHhtRWlVZ3NiQTF2OVNNNERRQUFBQUM2SEFBQXowclRYbWtCX0NJSGluMDhoQ3U2OG1GdjVrNm5VYzJxNl9DZlpxRWRCY25nUktfeEQ4U3g1ZkU0cmZkcS15QUo=
//                    if (msg.startsWith("美团 20-7 ")) {
//                        logger.info("处理美团的消息");
//                        msg = msg.substring(msg.indexOf("https://i.meituan.com/mttouch/page/account"));
//                        String[] all = msg.split("\\?");
//
//                        if (all.length == 2) {
//                            String wxid = null;
//                            if (wxMessageDataForChat.getFromtype() == 1) {
//                                wxid = wxMessageDataForChat.getFromwxid();
//                            } else if (wxMessageDataForChat.getFromtype() == 2) {
//                                wxid = wxMessageDataForChat.getFinalfromwxid();
//                            }
//                            String httpData = all[1];
//                            String[] httpDataArr = httpData.split("&");
//                            if (httpDataArr.length == 2) {
//                                String result = mt20(wxMessageDataForChat.getFinalfromwxid(), httpDataArr[0].split("=")[1], httpDataArr[1].split("=")[1]);
//
//                                wxUtil.sendTextMessage(wxMessageDataForChat.getFinalfromwxid(), result, msgType, wxMessageDataForChat.getFromwxid());
//                            } else {
//
//                                wxUtil.sendTextMessage(wxMessageDataForChat.getFinalfromwxid(), "请检查提交的数据格式是否正确。", msgType, wxMessageDataForChat.getFromwxid());
//                            }
//
//                        }
//                    } else if ("[转账待你接收，可在手机上查看]".equals(msg)) {
//
//                        wxUtil.sendTextMessage(wxMessageDataForChat.getFinalfromwxid(), "暂不支持群内转账功能，请私聊进行转账充值。", msgType, wxMessageDataForChat.getFromwxid());
//                    } else if ("余额".equals(msg)) {
//                        String wxid = null;
//                        if (wxMessageDataForChat.getFromtype() == 1) {
//                            wxid = wxMessageDataForChat.getFromwxid();
//                        } else if (wxMessageDataForChat.getFromtype() == 2) {
//                            wxid = wxMessageDataForChat.getFinalfromwxid();
//                        }
//                        WxUser wxUser = wxUserService.getOne(Wrappers.query(new WxUser()).eq("wxid", wxid));
//                        String result = "";
//                        if (Util.isNotEmpty(wxUser)) {
//                            result = "您的余额为：" + wxUser.getMoneyLeiji() + "元\r";
//                            result = result + " 您的消费次数为：" + wxUser.getCountXiaofei() + "次\r";
//                            result = result + " 您的充值次数为：" + wxUser.getCountChongzhi() + "次\r";
//                            result = result + " 您的累计充值为：" + wxUser.getMoneyLeiji() + "元";
//                        } else {
//                            result = "暂未查询到充值记录。\r";
//                        }
//
//
//                        wxUtil.sendTextMessage(wxid, result, msgType, wxMessageDataForChat.getFromwxid());
//                    } else if ("体验".equals(msg)) {
//                        String wxid = null;
//                        if (wxMessageDataForChat.getFromtype() == 1) {
//                            wxid = wxMessageDataForChat.getFromwxid();
//                        } else if (wxMessageDataForChat.getFromtype() == 2) {
//                            wxid = wxMessageDataForChat.getFinalfromwxid();
//                        }
//                        String result = "";
//                        if (heiMingDan(wxid)) {
//                            result = "黑名单！";
//                        } else {
//                            WxUser wxUser = wxUserService.getOne(Wrappers.query(new WxUser()).eq("wxid", wxid));
//                            if (isNew(wxUser.getIsnew())) {
//                                wxUser.setMoneyLeiji(wxUser.getMoneyLeiji().add(new BigDecimal(1)));
//                                wxUser.setMoneyShengyu(wxUser.getMoneyShengyu().add(new BigDecimal(1)));
//                                wxUser.setCountChongzhi(wxUser.getCountChongzhi().add(BigDecimal.ONE));
//                                wxUser.setIsnew(1);
//                                wxUserService.updateById(wxUser);
//                                result = "体验成功，您已成功充值" + 1.00 + "元，已成功存入账户。感谢您的使用。";
//                            } else {
//                                result = "您已体验过，请勿重复体验。";
//                            }
//
//                        }
//
//                        wxUtil.sendTextMessage(wxid, result, msgType, wxMessageDataForChat.getFromwxid());
//
//                    } else if (msg.startsWith("S")) {
//                        logger.info("处理超级管理员的消息");
//                        String wxid = null;
//                        if (wxMessageDataForChat.getFromtype() == 1) {
//                            wxid = wxMessageDataForChat.getFromwxid();
//                        } else if (wxMessageDataForChat.getFromtype() == 2) {
//                            wxid = wxMessageDataForChat.getFinalfromwxid();
//                        }
//                        if (!isSuperAdminUser(wxid)) {
//                            return;
//                        }
//
//                        String result = "";
//                        if (heiMingDan(wxid)) {
//                            result = "黑名单！";
//                        } else {
//                            String[] split1 = msg.split("\\+");
//                            String superAdminOrder = split1[1];
//                            if ("设置普通菜单".equals(superAdminOrder)) {
//                                if (split1.length == 3) {
//                                    String value = split1[2];
//                                    Setting setting = settingService.getOne(new QueryWrapper<Setting>().eq("setting_key", key_caiDan_admin));
//                                    setting.setSettingValue(value);
//                                    settingService.saveOrUpdate(setting);
//                                    result = "设置成功！";
//                                } else {
//                                    result = "设置失败！";
//                                }
//                            } else if ("设置超级菜单".equals(superAdminOrder)) {
//                                if (split1.length == 3) {
//                                    String value = split1[2];
//                                    Setting setting = settingService.getOne(new QueryWrapper<Setting>().eq("setting_key", key_caiDan_admin));
//                                    setting.setSettingValue(value);
//                                    settingService.saveOrUpdate(setting);
//                                    result = "设置成功！";
//                                } else {
//                                    result = "设置失败！";
//                                }
//                            } else if ("查询管理员".equals(superAdminOrder)) {
//                                result = getSetting(order_admin);
//                            } else if ("添加管理员".equals(superAdminOrder)) {
//                                if (split1.length == 3) {
//                                    String value = split1[2];
//                                    Setting setting = settingService.getOne(new QueryWrapper<Setting>().eq("setting_key", order_admin));
//                                    setting.setSettingValue(value.concat(",").concat(setting.getSettingValue()));
//                                    settingService.saveOrUpdate(setting);
//                                    result = "设置成功！";
//                                } else {
//                                    result = "设置失败！";
//                                }
//                            } else if ("删除管理员".equals(superAdminOrder)) {
//                                if (split1.length == 3) {
//                                    String value = split1[2];
//                                    Setting setting = settingService.getOne(new QueryWrapper<Setting>().eq("setting_key", order_admin));
//                                    setting.setSettingValue(setting.getSettingValue().replace(value, ""));
//                                    settingService.saveOrUpdate(setting);
//                                    result = "设置成功！";
//                                } else {
//                                    result = "设置失败！";
//                                }
//                            }
//                            //
//                            //if ()
//
//                            wxUtil.sendTextMessage(wxid, result, msgType, wxMessageDataForChat.getFromwxid());
//                        }
//                    }
//                    // 管理员返回两种菜单
//                    else if (order_caiDan.equals(msg)) {
//                        String wxid = null;
//                        if (wxMessageDataForChat.getFromtype() == 1) {
//                            wxid = wxMessageDataForChat.getFromwxid();
//                        } else if (wxMessageDataForChat.getFromtype() == 2) {
//                            wxid = wxMessageDataForChat.getFinalfromwxid();
//                        }
//                        String result = "";
//                        String puTong = getSetting(key_caiDan_user);
//                        String chaoJi = getSetting(key_caiDan_admin);
//                        if (isSuperAdminUser(wxid)) {
//                            result = "用户菜单：" + puTong + " 管理员菜单：" + chaoJi;
//                        } else {
//                            result = "用户菜单：" + puTong;
//                        }
//
//                        wxUtil.sendTextMessage(wxid, result, msgType, wxMessageDataForChat.getFromwxid());
//                    }
//                }
//                wxMessageDataForChatService.save(wxMessageDataForChat);
//
//            }
//
//        }
//    private String getSetting(String key) {
//        if (Util.isNotEmpty(key)) {
//            Setting value = settingRepository.getOne(new QueryWrapper<Setting>().eq("setting_key", key));
//            return value.getSettingValue();
//        } else {
//            return null;
//        }
//    }

    //private boolean isSuperAdminUser(String wxid) {
    //    boolean flag = false;
    //    Setting setting = settingRepository.getOne(new QueryWrapper<Setting>().eq("setting_key", "管理员"));
    //    if (Util.isNotEmpty(setting)) {
    //        if (setting.getSettingValue().contains(wxid)) {
    //            flag = true;
    //        }
    //    }
    //    return flag;
    //}

    /**
     * @param userId
     * @param token
     * @return
     * @throws
     * @description
     */
    //private String mt20(String wxid, String userId, String token) {
    //    /**
    //     * 1 查询用户余额
    //     * 2 调用青龙的添加环境变量
    //     * 3 执行美团领券
    //     * 4 删除环境变量
    //     * 5 改写返回的消息内容返回给用户
    //     * */
    //    logger.info("查询用户余额");
    //    HashMap<String, Object> checkYuE = checkYuE(wxid);
    //    Boolean isRun = (Boolean) checkYuE.get("isRun");
    //    String info = (String) checkYuE.get("info");
    //    BigDecimal yuE = (BigDecimal) checkYuE.get("yuE");
    //    //isRun = true;
    //
    //    // 余额可以支持一次扣费
    //    if (isRun) {
    //        // 调用青龙 成功
    //        return runQL(token, wxid, 1);
    //
    //    } else {
    //        // 调用青龙 失败
    //        logger.info("余额不支持一次扣费");
    //        return info;
    //    }
    //
    //}

    /**
     * @param wxid
     * @return
     * @throws
     * @description 根据 wxid 查询余额
     */
    //private HashMap<String, Object> checkYuE(String wxid) {
    //
    //    HashMap<String, Object> result = new HashMap<>();
    //    BigDecimal yuE = BigDecimal.ZERO;
    //    String info = "";
    //    Boolean isRun = false;
    //    WxUser wxUser = wxUserRepository.getOne(Wrappers.query(new WxUser()).eq("wxid", wxid));
    //    if (Util.isEmpty(wxUser)) {
    //        info = "未进行过充值，请先充值后使用。";
    //    } else {
    //        // 如果余额小于等于零
    //        if (wxUser.getMoneyShengyu().compareTo(BigDecimal.ZERO) <= 0) {
    //            info = "账户余额不足，请先充值后使用。";
    //        }
    //
    //        if (wxUser.getMoneyShengyu().compareTo(priceOfMT20) < 0) {
    //            info = "剩余余额不足以支持本次扣费，请先充值后使用。";
    //        } else {
    //            isRun = true;
    //        }
    //    }
    //
    //    // 返回结果
    //    result.put("yuE", yuE);
    //    result.put("info", info);
    //    result.put("isRun", isRun);
    //    return result;
    //}

    /**
     * @param wxid
     * @param time  调用次数，后期可以改成包月还是一次 ，目前都是 1
     * @param token
     * @return
     * @throws
     * @description
     */
    private String runQL(String token, String wxid, Integer time) {

        /**
         * 1. 在系统设置 -> 应用设置 -> 添加应用，权限目前支持5个模块，可以选择多个模块。选择一个模块之后，可读写此模块的所有接口。
         * 2. 使用生成的 client_id 和 client_secret 请求获取token接口 http://localhost:5700/open/auth/token?client_id=xxxxxx&client_secret=xxxxxxxx
         * 3. 上面接口返回的token有效期为30天，可用于请求青龙的接口 curl 'http://localhost:5700/open/envs?searchValue=&t=1630032278171' -H 'Authorization: Bearer
         * 接口返回的token'
         * 4. openapi的接口与系统正常接口的区别就是青龙里的是/api/envs，openapi是/open/envs，即就是青龙接口中的api换成open
         * */

        //String responseStr = HttpRequest.post(QL_BASE_URL + getToken())
        //        .body(JSON.toJSONString(jsonMap))//头信息，多个头信息多次调用此方法即可
        //        .execute().body();

        /*
         * 1.查询有没有这个环境变量
         * 2.没有就创建
         * 3.有就修改 环境变量名 需要 wxid + 手机号
         * 4.执行crons
         * 5.如果是一次性的，time = 1 ，就删除环境变量（考虑改成禁用）
         * 6.拿到青龙的结果
         * */
        //new QLUtil().getEnv(remark)


        HashMap<String, String> loginedUserInfo = qlUtil.getLoginedUserInfo(token);
        if (Util.isNotEmpty(loginedUserInfo)) {
            String mobile = loginedUserInfo.get("mobile");
            String nickName = loginedUserInfo.get("nickName");
            String remark = wxid + "+" + mobile + "+" + nickName;
            JSONArray env = qlUtil.getEnv(token);
            logger.info("1 查询环境变量 env = " + env);
            // 第一次用 token 查询
            if (env.size() == 0) {
                env = qlUtil.getEnv(wxid + "+" + mobile);
            }
            // 第二次用 wxid + mobile 查询，如果不存在就直接创建
            if (env.size() == 0) {
                Boolean addEnv = qlUtil.addEnv(token, meituanCookie, remark);
                logger.info("2 使用token查询不存在环境变量，向青龙添加变量 addEnv = " + addEnv);
            } else {
                // 如果存在则说明 需要更新token
                logger.info("3 环境变量已存在{}", env);
            }
            // 这时候已经有了环境变量，可以执行crons
            qlUtil.getCron("美团");
            //logger.info("查询crons cron = " + cron);


            return "runQL 调用成功";

        } else {

            return "获取用户信息失败";
        }


    }


}
