Files
Jarvis_java/src/main/java/cn/van/business/util/WxMessageConsumer.java
2025-03-01 23:39:55 +08:00

787 lines
36 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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.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 != null && 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));
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;
} else {
logger.info("消息内容:{}", innerData.getMsg());
}
String fromWxid = innerData.getFromWxid();
WXUtil.SuperAdmin superAdmin = super_admins.get(fromWxid);
if (Util.isEmpty(superAdmin)) {
logger.info("不是超管消息,不处理");
return;
}
String msg = innerData.getMsg();
if (msg.contains("【京东】")) {
logger.info("消息包含【京东】,处理转链消息");
String wxid;
if (Objects.equals(event, fromGR)) {
wxid = innerData.getFromWxid();
} else {
wxid = innerData.getFinalFromWxid();
}
String finallyUrl = getUrlStr(msg);
if (Util.isNotEmpty(finallyUrl)) {
logger.info("提取到URL{}", finallyUrl);
String transferResultUrl = jdUtils.transfer(finallyUrl);
wxUtil.sendTextMessage(wxid, transferResultUrl, msgType, null);
} else {
logger.info("未提取到URL");
}
return;
} else {
logger.info("消息不包含【京东】");
}
if (msg.startsWith("")) {
logger.info("消息以京开头,处理京东订单消息");
jdUtils.sendOrderToWxByOrderJD(msg.replace("", ""), fromWxid);
return;
} else {
logger.info("消息不以京开头");
}
logger.info("未命中前置指令,开始命中 Default 流程");
jdUtils.sendOrderToWxByOrderDefault(msg, 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时为好友wxidfromType=2时为群wxidfromType=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/envsopenapi是/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 "获取用户信息失败";
}
}
}