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.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.Objects; import java.util.regex.Matcher; import java.util.regex.Pattern; import static cn.van.business.util.WXUtil.super_admins; /** * @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); // //} private static String getUrlStr(String msg) { //String urlPattern = "https?://[\\w-\\.]+(\\.[a-z]{2,})?(/[\\w-./?%&=]*)?" String urlPattern = "https?://[^\\s]+?\\.(html|htm)(\\?[^\\s]*?)?"; Pattern pattern = Pattern.compile(urlPattern); Matcher matcher = pattern.matcher(msg); // 检查是否存在URL,如果存在则打印出来 String finallyUrl = null; if (matcher.find()) { finallyUrl = matcher.group(); System.out.println("Extracted URL: " + finallyUrl); } else { System.out.println("No URL found in the given text."); } if (finallyUrl != null && finallyUrl.endsWith("?")) { // 移除最后一个字符(即问号) finallyUrl = finallyUrl.substring(0, finallyUrl.length() - 1); } if (finallyUrl.contains("item.m.jd.com/product")) { finallyUrl = finallyUrl.replace("item.m.jd.com/product", "item.jd.com"); } return finallyUrl; } @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 { Integer msgType = 1; // 做业务处理 //logger.info("处理消息: {}", JSON.toJSONString(wxMessage)); /** * { * "event": 10009, * "wxid": "wxid_nq6r0w9v12612", * "data": { * "type": "recvMsg", * "des": "收到消息", * "data": { * "timeStamp": "1716620300237", * "fromType": 1, * "msgType": 1, * "msgSource": 0, * "fromWxid": "wxid_3sq4tklb6c3121", * "finalFromWxid": "", * "atWxidList": [], * "silence": 0, * "membercount": 0, * "signature": "V1_uKhKVjB1|v1_uKhKVjB1", * "msg": " 你在干嘛呢", * "msgId": "4937897417714063715", * "msgBase64": "IOS9oOWcqOW5suWYm+WRog==" * }, * "timestamp": "1716620300238", * "wxid": "wxid_nq6r0w9v12612", * "port": 8888, * "pid": 3944, * "flag": "7888" * } * } * */ WxMessage.DataSection data = wxMessage.getData(); WxMessage.DataSection.InnerData innerData = data.getData(); Integer event = wxMessage.getEvent(); if (Util.isAnyEmpty(innerData.getMsg(), innerData.getFromWxid())) { logger.info("消息内容为空,不处理"); return; } // 只处理超管的消息 String fromWxid = innerData.getFromWxid(); WXUtil.SuperAdmin superAdmin = super_admins.get(fromWxid); if (Util.isEmpty(superAdmin)){ logger.info("不是超管消息,不处理"); return; } String msg = innerData.getMsg(); //美团 20-7 + https://i.meituan.com/mttouch/page/account?userId=3822095266&token=AgHdIkm2tAGHc9SQSiG7M8xCx1LbTue9D2HPOAun2eYl3ou7BeEw1uGrGZH-DxmEiUgsbA1v9SM4DQAAAAC6HAAAz0rTXmkB_CIHin08hCu68mFv5k6nUc2q6_CfZqEdBcngRK_xD8Sx5fE4rfdq-yAJ, msgbase64=576O5ZuiIDIwLTcgKyBodHRwczovL2kubWVpdHVhbi5jb20vbXR0b3VjaC9wYWdlL2FjY291bnQ/dXNlcklkPTM4MjIwOTUyNjYmdG9rZW49QWdIZElrbTJ0QUdIYzlTUVNpRzdNOHhDeDFMYlR1ZTlEMkhQT0F1bjJlWWwzb3U3QmVFdzF1R3JHWkgtRHhtRWlVZ3NiQTF2OVNNNERRQUFBQUM2SEFBQXowclRYbWtCX0NJSGluMDhoQ3U2OG1GdjVrNm5VYzJxNl9DZlpxRWRCY25nUktfeEQ4U3g1ZkU0cmZkcS15QUo= if (msg.startsWith("转链")) { String wxid; if (Objects.equals(event, fromGR)) { wxid = innerData.getFromWxid(); } else { wxid = innerData.getFinalFromWxid(); } // 使用正则表达式匹配URL //从 转链https://item.m.jd.com/product/100065976064.html?utm_user=plusmember&gx=RnAomTM2bGbfy59DrNFzDHu0uUde7Oc&gxd=RnAoxWMLamXdwpscqIV-D94totD10SY&ad_od=share&utm_source=androidapp&utm_medium=appshare&utm_campaign=t_335139774&utm_term=CopyURL_shareid64b2a4939719b1d3173112851071496926_shangxiang_none // 获取 100065976064 logger.info("处理转链消息"); //String finallyUrl = getUrlStr(msg); //String finallyUrl = extractProductId(msg); //String finallyUrl = msg.substring(2); //if (Util.isNotEmpty(finallyUrl)) { // String transferResultUrl = jdUtils.transfer(finallyUrl); // wxUtil.sendTextMessage(wxid, transferResultUrl, msgType, null); //} } else if (msg.startsWith("京")) { jdUtils.sendOrderToWxByOrderJD(msg.replace("京", ""),fromWxid); } //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 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().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().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().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().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().eq("setting_key", key)); // return value.getSettingValue(); // } else { // return null; // } // } //private boolean isSuperAdminUser(String wxid) { // boolean flag = false; // Setting setting = settingRepository.getOne(new QueryWrapper().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 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 checkYuE(String wxid) { // // HashMap 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 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 "获取用户信息失败"; } } }