diff --git a/src/main/java/cn/van/business/controller/jd/OrderController.java b/src/main/java/cn/van/business/controller/jd/OrderController.java index d18bba9..7216899 100644 --- a/src/main/java/cn/van/business/controller/jd/OrderController.java +++ b/src/main/java/cn/van/business/controller/jd/OrderController.java @@ -1,7 +1,7 @@ package cn.van.business.controller.jd; import cn.van.business.mq.MessageProducerService; -import cn.van.business.util.JDUtils; +import cn.van.business.util.JDUtil; import com.alibaba.fastjson2.JSONObject; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @@ -21,7 +21,7 @@ public class OrderController { public static String TOKEN = "cc0313"; @Resource - private JDUtils jdUtils; + private JDUtil jdUtils; @Resource private MessageProducerService messageProducerService; diff --git a/src/main/java/cn/van/business/mq/MessageConsumerService.java b/src/main/java/cn/van/business/mq/MessageConsumerService.java index 9ce7719..983fa4b 100644 --- a/src/main/java/cn/van/business/mq/MessageConsumerService.java +++ b/src/main/java/cn/van/business/mq/MessageConsumerService.java @@ -3,17 +3,20 @@ package cn.van.business.mq; import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpRequest; import cn.hutool.json.JSONUtil; +import cn.van.business.util.WxtsUtil; import com.alibaba.fastjson2.JSONObject; import com.google.common.util.concurrent.RateLimiter; import org.apache.rocketmq.spring.annotation.RocketMQMessageListener; import org.apache.rocketmq.spring.core.RocketMQListener; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.nio.charset.StandardCharsets; import java.util.Base64; +import static cn.hutool.core.thread.ThreadUtil.sleep; import static cn.van.business.util.WXUtil.WX_BASE_URL; /** @@ -28,32 +31,41 @@ public class MessageConsumerService implements RocketMQListener { private static final Logger logger = LoggerFactory.getLogger(MessageConsumerService.class); + private final WxtsUtil wxtsUtil; // create a rate limiter of 1 qps RateLimiter rateLimiter = RateLimiter.create(0.5); + @Autowired + public MessageConsumerService(WxtsUtil wxtsUtil) { + this.wxtsUtil = wxtsUtil; + } + @Override public void onMessage(JSONObject jsonObject) { // 处理消息 try { rateLimiter.acquire(); // 请求许可。如果超过速率,则此方法会阻塞 - //logger.info("消费到消息:{}", jsonObject); String body = jsonObject.getString("body"); byte[] decodedBody = Base64.getDecoder().decode(body); String decodedBodyStr = new String(decodedBody, StandardCharsets.UTF_8); JSONObject decodedBodyJson = JSONObject.parseObject(decodedBodyStr); + String jsonStr = JSONUtil.toJsonStr(decodedBodyJson); String responseStr = HttpRequest.post(WX_BASE_URL) - .body(JSONUtil.toJsonStr(decodedBodyJson)) + .body(jsonStr) .execute() .body(); - + logger.info("消费消息:{}", jsonStr); if (ObjectUtil.isNotEmpty(responseStr)) { JSONObject response = JSONObject.parseObject(responseStr); + logger.info("消息成功发送并得到响应:{}", response); if (response.getInteger("code") != 200) { // TODO: 如果需要处理错误,您可以在这里添加逻辑 + wxtsUtil.sendNotify("消息发送失败: " + responseStr); throw new RuntimeException("消息发送失败: " + responseStr); } //logger.info("消息成功发送并得到响应:{}", response); } else { + wxtsUtil.sendNotify("消息发送失败,没有收到响应"); throw new RuntimeException("消息发送失败,没有收到响应"); } } catch (Exception e) { diff --git a/src/main/java/cn/van/business/util/JDUtils.java b/src/main/java/cn/van/business/util/JDUtil.java similarity index 99% rename from src/main/java/cn/van/business/util/JDUtils.java rename to src/main/java/cn/van/business/util/JDUtil.java index 003575a..daefde3 100644 --- a/src/main/java/cn/van/business/util/JDUtils.java +++ b/src/main/java/cn/van/business/util/JDUtil.java @@ -42,7 +42,7 @@ import static cn.van.business.util.WXUtil.super_admins; * @description: */ @Component -public class JDUtils { +public class JDUtil { /** * 密钥配置 */ @@ -67,7 +67,7 @@ public class JDUtils { //accessToken private static final String ACCESS_TOKEN = ""; - private static final Logger logger = LoggerFactory.getLogger(JDUtils.class); + private static final Logger logger = LoggerFactory.getLogger(JDUtil.class); private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); private final StringRedisTemplate redisTemplate; @@ -77,7 +77,7 @@ public class JDUtils { // 通过构造函数注入所有依赖项,Spring将自动注入这些依赖 @Autowired // @Autowired 在构造函数上可以省略,如果类只有一个构造函数 - public JDUtils(StringRedisTemplate redisTemplate, OrderRowRepository orderRowRepository, WXUtil wxUtil, OrderUtil orderUtil) { + public JDUtil(StringRedisTemplate redisTemplate, OrderRowRepository orderRowRepository, WXUtil wxUtil, OrderUtil orderUtil) { this.redisTemplate = redisTemplate; this.orderRowRepository = orderRowRepository; this.wxUtil = wxUtil; @@ -196,7 +196,7 @@ public class JDUtils { if (Util.isAnyEmpty(appKey,secretKey)){ continue; } - logger.info("实时订单 {} ",appKey.substring(appKey.length()-4)); + //logger.info("实时订单 {} ",appKey.substring(appKey.length()-4)); UnionOpenOrderRowQueryResponse response = fetchOrdersForDateTime(lastMinute, true, 1, true,appKey,secretKey); // 真实代表实时订单 if (response != null) { @@ -565,7 +565,7 @@ public class JDUtils { } // 打印方法调用和开始结束时间 - logger.info(" {} --- 拉取订单, 分钟还是秒 {} , 开始时间:{} --- 结束时间:{}", appKey.substring(appKey.length()-4) ,hourMinuteTag, startTime.format(DATE_TIME_FORMATTER), endTime.format(DATE_TIME_FORMATTER)); + //logger.info(" {} --- 拉取订单, 分钟还是秒 {} , 开始时间:{} --- 结束时间:{}", appKey.substring(appKey.length()-4) ,hourMinuteTag, startTime.format(DATE_TIME_FORMATTER), endTime.format(DATE_TIME_FORMATTER)); return unionOpenOrderRowQueryResponse; } catch (Exception e) { diff --git a/src/main/java/cn/van/business/util/WXUtil.java b/src/main/java/cn/van/business/util/WXUtil.java index b748a2b..186eef9 100644 --- a/src/main/java/cn/van/business/util/WXUtil.java +++ b/src/main/java/cn/van/business/util/WXUtil.java @@ -31,6 +31,9 @@ public class WXUtil { public static Map super_admins = new HashMap<>(); public static Map jdidToWxidMap = new HashMap<>(); + private final WxtsUtil wxTsUtil; + private final MessageProducerService messageProducerService; + @Data @AllArgsConstructor @NoArgsConstructor @@ -39,21 +42,21 @@ public class WXUtil { private String name; // 联盟ID private String unionId; - private String appKey ; - private String secretKey ; + private String appKey; + private String secretKey; } // 初始化超级管理员 public void initSuperAdmins() { - SuperAdmin admin1 = new SuperAdmin("wxid_ytpc72mdoskt22", "凡", "2014264913", - "98e21c89ae5610240ec3f5f575f86a59","3dcb6b23a1104639ac433fd07adb6dfb"); + SuperAdmin admin1 = new SuperAdmin("wxid_ytpc72mdoskt22", "凡", "2014264913", "98e21c89ae5610240ec3f5f575f86a59", "3dcb6b23a1104639ac433fd07adb6dfb"); super_admins.put(admin1.getWxid(), admin1); jdidToWxidMap.put(admin1.getUnionId(), admin1.getWxid()); - SuperAdmin admin2 = new SuperAdmin("wxid_yneqf1implxu12", "源", "2025353364" - ,"e3c161242c8a1416fada5b5564d7ee70","41ae9aabf03b41e6ba309682e36b323e"); + SuperAdmin admin2 = new SuperAdmin("wxid_yneqf1implxu12", "源", "2025353364", "e3c161242c8a1416fada5b5564d7ee70", "41ae9aabf03b41e6ba309682e36b323e"); super_admins.put(admin2.getWxid(), admin2); jdidToWxidMap.put(admin2.getUnionId(), admin2.getWxid()); + wxTsUtil.sendNotify("initSuperAdmins 初始化完成"); + // add more admins as needed... } @@ -94,11 +97,12 @@ public class WXUtil { */ public static String WX_BASE_URL; private Environment env; - @Autowired - private MessageProducerService messageProducerService; + @Autowired - public WXUtil(Environment env) { + public WXUtil(Environment env, WxtsUtil wxTsUtil, MessageProducerService messageProducerService) { + this.messageProducerService = messageProducerService; + this.wxTsUtil = wxTsUtil; this.env = env; WX_BASE_URL = env.getProperty("config.WX_BASE_URL"); System.out.println("WX_BASE_URL:" + WX_BASE_URL); diff --git a/src/main/java/cn/van/business/util/WxMessageConsumer.java b/src/main/java/cn/van/business/util/WxMessageConsumer.java index aaae463..4fe270e 100644 --- a/src/main/java/cn/van/business/util/WxMessageConsumer.java +++ b/src/main/java/cn/van/business/util/WxMessageConsumer.java @@ -6,6 +6,7 @@ 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; @@ -61,14 +62,14 @@ public class WxMessageConsumer { private final WxMessageDataForChatRepository wxMessageDataForChatRepository; private final WxUserRepository wxUserRepository; private final SettingRepository settingRepository; - private final JDUtils jdUtils; + private final JDUtil jdUtils; @Autowired public WxMessageConsumer(WXUtil wxUtil, QLUtil qlUtil, @Lazy WxMessageDataForChatRepository wxMessageDataForChatService, @Lazy WxUserRepository wxUserRepository, @Lazy SettingRepository settingRepository, - @Lazy JDUtils jdUtils) { + @Lazy JDUtil jdUtils) { this.wxUtil = wxUtil; this.qlUtil = qlUtil; this.wxMessageDataForChatRepository = wxMessageDataForChatService; @@ -245,7 +246,7 @@ public class WxMessageConsumer { private void handlePrivateMessage(WxMessage wxMessage) throws Exception { Integer msgType = 1; // 做业务处理 - //logger.info("处理消息: {}", JSON.toJSONString(wxMessage)); + logger.info("处理消息: {}", JSON.toJSONString(wxMessage)); /** * { diff --git a/src/main/java/cn/van/business/util/WxtsUtil.java b/src/main/java/cn/van/business/util/WxtsUtil.java new file mode 100644 index 0000000..f8d2755 --- /dev/null +++ b/src/main/java/cn/van/business/util/WxtsUtil.java @@ -0,0 +1,44 @@ +package cn.van.business.util; + +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import cn.hutool.http.HttpUtil; +import com.alibaba.fastjson2.JSON; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import java.util.HashMap; + +/** + * @author Leo + * @version 1.0 + * @create 2025/1/22 10:20 + * @description: 企业微信推送工具类 + */ +@Component +public class WxtsUtil { + private static final Logger logger = LoggerFactory.getLogger(WxtsUtil.class); + public static final String TOKEN = "super_token_b62190c26"; + private static final String SERVER_URL = "https://wxts.van333.cn"; + + + public void sendNotify(String content) { + try { + String url = SERVER_URL + "/wx/send/jd"; + HashMap paramMap = new HashMap<>(); + paramMap.put("title", "JD机器人微信推送"); + content = content.replaceAll("\\n", "
"); + String common = "192.168.8.88 (微信机器人), 信息 : "; + content = common + content + "

"; + paramMap.put("text", content); + HttpResponse execute = HttpRequest.post(url).header("vanToken", TOKEN).header("source", "XZJ_UBUNTU").body(JSON.toJSONString(paramMap)).execute(); + logger.info("企业微信推送结果:{}", execute); + } catch (Exception e) { + logger.error("企业微信推送失败:{}", e.getMessage()); + } + + } + + +} diff --git a/src/main/resources/libs/open-api-sdk-2.0-2024-10-21.jar b/src/main/resources/libs/open-api-sdk-2.0-2024-10-21.jar new file mode 100644 index 0000000..58745e4 Binary files /dev/null and b/src/main/resources/libs/open-api-sdk-2.0-2024-10-21.jar differ