Parcourir la source

微信订阅消息功能

zxy il y a 1 an
Parent
commit
6cfa948351

+ 17 - 8
naqwzsjtj/naqwzsjtj/src/views/messagePush/MessagePush.vue

@@ -1,12 +1,20 @@
 <template>
   <div style="padding: 10px;">
-    <div>
+    <div style="margin-bottom: 10px">
       <el-button @click="openDialog" type="primary">推送消息</el-button>
     </div>
-    <el-table :data="tableData" style="width: 100%">
-      <el-table-column prop="date" label="日期" width="180"></el-table-column>
-      <el-table-column prop="name" label="姓名" width="180"></el-table-column>
-      <el-table-column prop="address" label="地址"></el-table-column>
+    <el-table :data="tableData" style="width: 100%" :header-cell-style="{background:'#e5e8ed',color:'#666'}">
+      <el-table-column width="180" prop="eventTitle" label="事件标题" :show-overflow-tooltip='true'></el-table-column>
+      <el-table-column prop="templateTitle" label="订阅消息模板标题" :show-overflow-tooltip='true'></el-table-column>
+      <el-table-column prop="templateContent" label="订阅消息模板内容" :show-overflow-tooltip='true'></el-table-column>
+      <el-table-column prop="templateType" label="订阅消息模板类型" :show-overflow-tooltip='true'>
+        <template slot-scope="scope">
+          <el-tag :type="scope.row.templateType == 2 ? 'primary' : 'success'"
+              disable-transitions>{{scope.row.templateType == 2 ? '一次性订阅' : scope.row.templateType == 3 ? '长期订阅' : ''}}</el-tag>
+        </template>
+      </el-table-column>
+      <el-table-column prop="linkUrl" label="外链地址" :show-overflow-tooltip='true'></el-table-column>
+      <el-table-column prop="createTime" label="推送时间" :show-overflow-tooltip='true'></el-table-column>
     </el-table>
     <el-pagination
         @size-change="handleSizeChange"
@@ -43,9 +51,10 @@ export default {
   methods: {
     loadData() {
       let _this = this;
-      /*request.get('api/event/page?page=' + _this.currentPage + "&limit=" + _this.pageSize).then(res => {
-        console.log(res)
-      })*/
+      request.get('api/problem/event/page?page=' + _this.currentPage + "&limit=" + _this.pageSize).then(res => {
+        _this.tableData = res.data.data
+        _this.total = res.data.count
+      })
     },
     handleSizeChange(pageSize) {
       this.pageSize = pageSize

+ 23 - 18
naqwzsjtj/naqwzsjtj/src/views/messagePush/PushMessageDialog.vue

@@ -3,27 +3,29 @@
     <el-dialog
         title="推送订阅消息"
         :visible.sync="dialogVisible"
-        width="70%">
+        width="60%">
       <el-form :model="formData" :rules="rules" ref="pushForm" class="demo-form-inline" label-width='100px'>
         <el-row>
-          <el-col :span="12">
+          <el-col :span="8">
             <el-form-item label="事件标题:" prop="eventTitle">
               <el-input v-model="formData.eventTitle" placeholder="请输入事件标题"></el-input>
             </el-form-item>
           </el-col>
-          <el-col :span="12">
+          <el-col :span="8">
             <el-form-item label="消息模板:" prop="priTmplId">
-              <el-select @change="priTmplIdChange" v-model="formData.priTmplId" placeholder="请选择订阅消息模板">
+              <el-select style="width: 100%;" @change="priTmplIdChange" v-model="formData.priTmplId" placeholder="请选择订阅消息模板">
                 <el-option
                     v-for="item in msgTemplateList"
                     :key="item.priTmplId"
                     :label="item.title"
                     :value="item.priTmplId">
+                  <span style="float: left">{{ item.title }}</span>
+                  <span style="float: right; color: #8492a6; font-size: 13px">{{ item.type == 2 ? '一次性订阅' : item.type == 3 ? '长期订阅' : '' }}</span>
                 </el-option>
               </el-select>
             </el-form-item>
           </el-col>
-          <el-col :span="12">
+          <el-col :span="8">
             <el-form-item label="跳转地址:" prop="urlLink">
               <el-input v-model="formData.urlLink" placeholder="请输入点击跳转地址"></el-input>
             </el-form-item>
@@ -51,7 +53,7 @@ import request from '../../utils/request.js'
 export default {
   name: "PushMessageDialog",
   watch: {
-    //监听dialog关闭清空表单
+    //监听dialog关闭重置表单
     dialogVisible: {
       // eslint-disable-next-line no-unused-vars
       handler(newval, oldval) {
@@ -59,6 +61,7 @@ export default {
           this.formData.fieldList = []
           this.formData.priTmplId = ''
           this.formData.urlLink = ''
+          this.$refs.pushForm.resetFields()
         }
       }
     }
@@ -91,7 +94,7 @@ export default {
   },
   methods: {
     loadMsgTemplateList() {
-      request.get('msg/getMsgTemplate').then(res => {
+      request.get('api/problem/msg/getMsgTemplate').then(res => {
         if (!res.data.result) {
           this.$message.error('订阅消息模板加载失败:' + res.data.msg);
         }
@@ -109,6 +112,8 @@ export default {
         return {'label': label, 'key': key, value: ''}
       })
       _this.formData.fieldList = fieldList
+      _this.formData.templateTitle = msgTemplate.title
+      _this.formData.templateType = msgTemplate.type
       //添加表单验证
       /*_this.formData.fieldList.forEach((t,i) => {
         _this.rules[t.key] = [
@@ -122,18 +127,18 @@ export default {
       _this.formData.templateId = _this.formData.priTmplId
       _this.formData.content = _this.formData.fieldList
       _this.$refs.pushForm.validate((valid) => {
-        if (valid) {
-          request.post('msg/pushMessage',_this.formData).then(res => {
-            if (!res.data.result) {
-              this.$message.error('推送订阅消息失败:' + res.data.msg);
-            } else {
-              this.$message.error('推送订阅消息成功。');
-            }
-          })
-          return true;
-        } else {
-          return false;
+        if (!valid) {
+          return false
         }
+        request.post('api/problem/msg/pushMessage',_this.formData).then(res => {
+          if (!res.data.result) {
+            _this.$message.error('推送订阅消息失败:' + res.data.msg);
+          } else {
+            _this.dialogVisible = false
+            _this.$message.success('推送订阅消息成功。');
+            _this.$parent.loadData()
+          }
+        })
       })
     }
   }

+ 1 - 1
nngkxxdp/src/main/java/com/example/nngkxxdp/program/controller/EventController.java

@@ -13,7 +13,7 @@ import java.util.Map;
 
 @Slf4j
 @RestController()
-@RequestMapping("/api/event")
+@RequestMapping("/api/problem/event")
 public class EventController {
 
     @Resource

+ 1 - 1
nngkxxdp/src/main/java/com/example/nngkxxdp/program/controller/EventPushRecordController.java

@@ -9,7 +9,7 @@ import javax.annotation.Resource;
 
 @Slf4j
 @RestController()
-@RequestMapping("/api/eventPushRecord")
+@RequestMapping("/api/problem/eventPushRecord")
 public class EventPushRecordController {
 
     @Resource

+ 1 - 1
nngkxxdp/src/main/java/com/example/nngkxxdp/program/controller/MessagePushController.java

@@ -8,7 +8,7 @@ import javax.annotation.Resource;
 import java.util.Map;
 
 @RestController
-@RequestMapping("/msg")
+@RequestMapping("/api/problem/msg")
 public class MessagePushController {
 
     @Resource

+ 3 - 2
nngkxxdp/src/main/java/com/example/nngkxxdp/program/dao/EventDao.java

@@ -10,8 +10,8 @@ import java.util.List;
 
 public interface EventDao {
 
-    @Insert("INSERT INTO `nazw`.`t_event` (`event_title`, `template_id`, `template_content`, `link_url`, `create_time`)" +
-            " VALUES (#{eventTitle}, #{templateId}, #{templateContent}, #{linkUrl}, #{createTime})")
+    @Insert("INSERT INTO `nazw`.`t_event` (`event_title`, `template_id`, `template_title`, `template_type`, `template_content`, `link_url`, `create_time`)" +
+            " VALUES (#{eventTitle}, #{templateId}, #{templateTitle}, #{templateType}, #{templateContent}, #{linkUrl}, #{createTime})")
     @SelectKey(statement = "SELECT LAST_INSERT_ID()", keyProperty = "id", keyColumn = "id", before = false, resultType = Integer.class)
     Integer add(Event event);
 
@@ -20,6 +20,7 @@ public interface EventDao {
             "<if test=\"eventTitle != null and eventTitle != ''\">" +
             " AND event_title LIKE CONCAT('%',#{title},'%')" +
             "</if>" +
+            " ORDER BY create_time DESC" +
             " LIMIT #{startRow},#{limit}" +
             "</script>")
     List<Event> page(@Param("startRow") Integer startRow, @Param("limit") Integer limit, @Param("eventTitle") String eventTitle);

+ 4 - 0
nngkxxdp/src/main/java/com/example/nngkxxdp/program/entity/DTO/Field.java

@@ -1,9 +1,13 @@
 package com.example.nngkxxdp.program.entity.DTO;
 
 import lombok.Data;
+import lombok.experimental.Accessors;
 
 @Data
+@Accessors(chain = true)
 public class Field {
+    //订阅消息模板字段label
+    private String label;
     //订阅消息模板字段key
     private String key;
     //订阅消息模板字段value

+ 4 - 0
nngkxxdp/src/main/java/com/example/nngkxxdp/program/entity/DTO/PushMessageDTO.java

@@ -10,6 +10,10 @@ public class PushMessageDTO {
     private String eventTitle;
     //订阅消息模板id
     private String templateId;
+    //订阅消息模板标题
+    private String templateTitle;
+    //订阅消息模板类型 2:一次性订阅 3:长期订阅
+    private Integer templateType;
     //小程序点击跳转地址
     private String urlLink;
     //订阅消息模板内容  json字符串

+ 4 - 0
nngkxxdp/src/main/java/com/example/nngkxxdp/program/entity/Event.java

@@ -16,6 +16,10 @@ public class Event implements Serializable {
 
     private String templateId;
 
+    private String templateTitle;
+
+    private Integer templateType;
+
     private String templateContent;
 
     private String linkUrl;

+ 5 - 1
nngkxxdp/src/main/java/com/example/nngkxxdp/program/util/WxMessageUtil.java

@@ -6,6 +6,7 @@ import cn.hutool.http.HttpRequest;
 import cn.hutool.json.JSONObject;
 import cn.hutool.json.JSONUtil;
 import com.example.nngkxxdp.program.entity.AppletUser;
+import com.example.nngkxxdp.program.entity.DTO.Field;
 import com.example.nngkxxdp.program.entity.DTO.PushMessageDTO;
 import com.example.nngkxxdp.program.entity.Event;
 import com.example.nngkxxdp.program.entity.EventPushRecord;
@@ -17,6 +18,7 @@ import com.example.nngkxxdp.util.SendUtil;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Component;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
@@ -57,7 +59,9 @@ public class WxMessageUtil {
         Event event = new Event();
         event.setEventTitle(pushMessageDTO.getEventTitle());
         event.setTemplateId(pushMessageDTO.getTemplateId());
-        event.setTemplateContent(pushMessageDTO.getContent().toString());
+        event.setTemplateTitle(pushMessageDTO.getTemplateTitle());
+        event.setTemplateType(pushMessageDTO.getTemplateType());
+        event.setTemplateContent(JSONUtil.parseArray(pushMessageDTO.getContent()).toJSONString(0));
         event.setLinkUrl(pushMessageDTO.getUrlLink());
         event.setCreateTime(DateUtil.now());
         eventService.add(event);