2
0
imndx 3 жил өмнө
parent
commit
c5de3c595b

+ 51 - 2
manage/src/views/modules/wx/wx-msg.vue

@@ -15,6 +15,7 @@
             </el-form-item>
             <el-form-item>
                 <el-button @click="getDataList()">查询</el-button>
+                <el-button @click="showSendMsgDialog = true">发送消息</el-button>
             </el-form-item>
         </el-form>
         <div class="text-gray">
@@ -40,10 +41,25 @@
         </el-pagination>
         <!-- 弹窗, 消息回复 -->
         <wx-msg-reply ref="wxMsgReply" @success="onReplyed"></wx-msg-reply>
+        <el-dialog
+            title="发送文本消息"
+            :close-on-click-modal="false"
+            :visible.sync="showSendMsgDialog">
+            <el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="sendTextMessageContent" label-width="100px">
+                <el-form-item label="消息内容" prop="toSendTextMessageContent">
+                    <el-input v-model="dataForm.toSendTextMessageContent" placeholder="文本消息内容"></el-input>
+                </el-form-item>
+            </el-form>
+            <span slot="footer" class="dialog-footer">
+                <el-button @click="showSendMsgDialog = false">取消</el-button>
+                <el-button type="primary" @click="sendTextMessageContent">发送</el-button>
+            </span>
+        </el-dialog>
     </div>
 </template>
 
 <script>
+import { mapState } from 'vuex'
 const TIME_FORMAT = 'YYYY/MM/DD hh:mm:ss'
 export default {
     data() {
@@ -56,7 +72,13 @@ export default {
             },
             dataForm: {
                 startTime: this.$moment().subtract(1, 'days').format(TIME_FORMAT),
-                msgTypes: ''
+                msgTypes: '',
+                toSendTextMessageContent: '',
+            },
+            dataRule: {
+                toSendTextMessageContent: [
+                    {required: true, message: "消息内容不能为空", trigger: "blur"}
+                ]
             },
             dataList: [],
             userDataList:[],
@@ -64,7 +86,8 @@ export default {
             pageSize: 20,
             totalCount: 0,
             dataListLoading: false,
-            dataListSelections: []
+            dataListSelections: [],
+            showSendMsgDialog: false,
         }
     },
     components: {
@@ -74,6 +97,9 @@ export default {
     activated() {
         this.getDataList()
     },
+    computed: mapState({
+        selectedAppid:state=>state.wxAccount.selectedAppid
+    }),
     methods: {
         // 获取数据列表
         getDataList() {
@@ -153,6 +179,29 @@ export default {
                 inOut : 1,
                 createTime : new Date()
             })
+        },
+        sendTextMessageContent() {
+
+            this.$refs['dataForm'].validate((valid) => {
+                if (valid) {
+                    this.$http({
+                        url: this.$http.adornUrl(`/manage/wxMsg/send/${this.selectedAppid}`),
+                        method: 'post',
+                        data: this.dataForm.toSendTextMessageContent,
+                    }).then(({ data }) => {
+                        if (data && data.code === 200) {
+                            this.$message({
+                                message: '操作成功',
+                                type: 'success',
+                                duration: 1500,
+                                onClose: () => this.getDataList()
+                            })
+                        } else {
+                            this.$message.error(data.msg)
+                        }
+                    })
+                }
+            });
         }
     }
 }

+ 16 - 0
server/src/main/java/com/github/niefy/modules/wx/manage/WxMsgManageController.java

@@ -1,5 +1,7 @@
 package com.github.niefy.modules.wx.manage;
 
+import cn.wildfirechat.pojos.SendMessageResult;
+import cn.wildfirechat.sdk.model.IMResult;
 import com.github.niefy.common.utils.PageUtils;
 import com.github.niefy.common.utils.R;
 import com.github.niefy.modules.wx.entity.WxMsg;
@@ -44,6 +46,20 @@ public class WxMsgManageController {
         return R.ok().put("page", page);
     }
 
+    @PostMapping("/send/{appid}")
+    @RequiresPermissions("wx:wxmsg:save")
+    @ApiOperation(value = "发送")
+    public R send(@PathVariable("appid") String appid, @RequestBody String textMessageContent){
+        IMResult<SendMessageResult> result = wxMsgService.send(appid, textMessageContent);
+        if (result != null){
+            if (result.code == 0){
+                return R.ok();
+            }else {
+                return R.error(result.code, result.msg);
+            }
+        }
+        return R.error(-1, "unknown error");
+    }
 
     /**
      * 信息

+ 4 - 0
server/src/main/java/com/github/niefy/modules/wx/service/WxMsgService.java

@@ -1,5 +1,7 @@
 package com.github.niefy.modules.wx.service;
 
+import cn.wildfirechat.pojos.SendMessageResult;
+import cn.wildfirechat.sdk.model.IMResult;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.github.niefy.common.utils.PageUtils;
 import com.github.niefy.modules.wx.entity.WxMsg;
@@ -20,6 +22,8 @@ public interface WxMsgService extends IService<WxMsg> {
      */
     PageUtils queryPage(Map<String, Object> params);
 
+    IMResult<SendMessageResult> send(String appid, String textMessageContent);
+
     /**
      * 记录msg,异步入库
      * @param msg

+ 21 - 0
server/src/main/java/com/github/niefy/modules/wx/service/impl/WxMsgServiceImpl.java

@@ -1,5 +1,9 @@
 package com.github.niefy.modules.wx.service.impl;
 
+import cn.wildfirechat.messagecontentbuilder.TextMessageContentBuilder;
+import cn.wildfirechat.pojos.SendMessageResult;
+import cn.wildfirechat.sdk.ChannelServiceApi;
+import cn.wildfirechat.sdk.model.IMResult;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -7,7 +11,9 @@ import com.github.niefy.common.utils.PageUtils;
 import com.github.niefy.common.utils.Query;
 import com.github.niefy.modules.wx.dao.WxMsgMapper;
 import com.github.niefy.modules.wx.entity.WxMsg;
+import com.github.niefy.modules.wx.service.WxAccountService;
 import com.github.niefy.modules.wx.service.WxMsgService;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 import org.springframework.util.StringUtils;
@@ -19,6 +25,9 @@ import java.util.Map;
 @Service("wxMsgService")
 public class WxMsgServiceImpl extends ServiceImpl<WxMsgMapper, WxMsg> implements WxMsgService {
 
+    @Autowired
+    WxAccountService wxAccountService;
+
     @Override
     public PageUtils queryPage(Map<String, Object> params) {
         String msgTypes = (String)params.get("msgTypes");
@@ -37,6 +46,18 @@ public class WxMsgServiceImpl extends ServiceImpl<WxMsgMapper, WxMsg> implements
         return new PageUtils(page);
     }
 
+    @Override
+    public IMResult<SendMessageResult> send(String appid, String textMessageContent) {
+        TextMessageContentBuilder builder = TextMessageContentBuilder.newBuilder(textMessageContent);
+            ChannelServiceApi api = wxAccountService.getApi(appid);
+        try {
+            return api.sendMessage(0, null, builder.build());
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
     /**
      * 记录msg,异步入库
      * @param msg