Browse Source

定时发送消息分批发送,增加消息工具类(之后调用消息中心的方法统一提取到此类)

dongbw 7 years ago
parent
commit
f97639c64b

+ 8 - 2
src/main/java/com/uas/ps/inquiry/service/impl/InquiryServiceImpl.java

@@ -850,11 +850,17 @@ public class InquiryServiceImpl implements InquiryService {
                             models.add(model);
                             log.info("此次" + company + "公司新增" + remind.getCounts() + "张公共询价(发送信息前)");
                         }
+                        if (models.size() >= 500) {
+                            String res = HttpUtil.doPost(PS_MESSAGE_URL + "/messages", FlexJsonUtils.toJsonDeep(models));
+                            log.info("发送消息" + models.size());
+                            models = new ArrayList<>();
+                        }
                     }
-                    if (!org.springframework.util.CollectionUtils.isEmpty(models)) {
+                    if (!CollectionUtils.isEmpty(models)) {
                         String res = HttpUtil.doPost(PS_MESSAGE_URL + "/messages", FlexJsonUtils.toJsonDeep(models));
+                        log.info("发送消息" + models.size());
                     }
-                    log.info("发送消息完成");
+                    log.info("发送消息全部完成");
                 } catch (Exception e) {
                     e.printStackTrace();
                 }

+ 93 - 0
src/main/java/com/uas/ps/inquiry/util/MessageUtils.java

@@ -0,0 +1,93 @@
+package com.uas.ps.inquiry.util;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.uas.ps.core.util.ContextUtils;
+import com.uas.ps.inquiry.AccessConfiguration;
+import com.uas.ps.inquiry.entity.MessageModel;
+import org.apache.log4j.Logger;
+import org.springframework.http.HttpStatus;
+
+import java.util.HashMap;
+import java.util.List;
+
+/**
+ * 对接公共消息服务的接口
+ *
+ * @author dongbw
+ * 2018-01-22 15:43:41
+ * @version 2018年6月13日 11:28:50 从B2B dongbw
+ */
+public class MessageUtils {
+
+
+    private static final String MESSAGE_PUBLIC_SERVICE_URL = ContextUtils.getBean(AccessConfiguration.class).getPsMessageUrl();
+
+    private static final Logger log = Logger.getLogger(Logger.class);
+
+    /**
+     * 单次请求数据量大小
+     */
+    private static final int ONE_TIME_DATA_SIZE = 500;
+
+    /**
+     * 产生消息
+     * @param models  消息实体List
+     * @return 返回信息
+     */
+    public static String paginationProduceMessage(List<MessageModel> models) throws Exception {
+        if (models.size() < ONE_TIME_DATA_SIZE) {
+            return produceMessage(models);
+        } else {
+            String res = "";
+            for (int i = 0; i < models.size(); i = i + ONE_TIME_DATA_SIZE) {
+                if (i + ONE_TIME_DATA_SIZE < models.size()) {
+                    res = produceMessage(models.subList(i, i + ONE_TIME_DATA_SIZE));
+                } else {
+                    res = produceMessage(models.subList(i, models.size()));
+                }
+            }
+            return res;
+        }
+    }
+
+    /**
+     * 获取当前企业当前用户未读消息数量
+     *
+     * @author dongbw
+     * @param enUU 企业UU
+     * @param userUU 用户UU
+     * @return
+     * @throws Exception
+     */
+    public static Integer getMessageNotReadNum(Long enUU, Long userUU) throws Exception {
+        HashMap<String, Object> params = new HashMap<>();
+        params.put("receiverUu", userUU);
+        params.put("receiverEnuu", enUU);
+        params.put("consumerApp", "B2B");
+        HttpUtil.Response res = HttpUtil.sendGetRequest(MESSAGE_PUBLIC_SERVICE_URL + "/messages/count/unread", params);
+        if (res.getStatusCode() == HttpStatus.OK.value() && null != res.getResponseText()) {
+            JSONObject jsonObject = JSON.parseObject(res.getResponseText());
+            return (Integer) jsonObject.get("count");
+        } else {
+            throw new RuntimeException("获取消息失败");
+        }
+    }
+
+    /**
+     * 产生消息
+     * @param models  消息实体List
+     * @return 返回信息
+     */
+    public static String produceMessage(List<MessageModel> models) throws Exception {
+        try {
+            String res = HttpUtil.doPost(MESSAGE_PUBLIC_SERVICE_URL + "/messages", FlexJsonUtils.toJsonDeep(models));
+            log.info("发送消息" + models.size());
+            return res;
+        } catch (Exception e) {
+            throw  new RuntimeException("本次产生消息失败");
+        }
+    }
+
+    //TODO 调用消息服务的方法都迁移到工具类中
+}