Переглянути джерело

Merge branch 'dev2.3.12' of http://192.168.3.207:8080/group3/qmx_admin into dev2.3.12

renjiaojiao 3 роки тому
батько
коміт
bde886206c

+ 2 - 1
src/config.json

@@ -108,5 +108,6 @@
     "password": "Tidb#20220214",
     "address": "192.168.3.109:4000",
     "dbName": "callCenter"
-  }
+  },
+  "smsServiceRpc": "127.0.0.1:932"
 }

+ 1 - 0
src/config/config.go

@@ -52,6 +52,7 @@ type SysConfig struct {
 	Tidb           string                 `json:"tidb"`
 	LookAllMsg     map[string]bool        `json:"lookAllMsg"`
 	CusTidbMysql   map[string]interface{} `json:"cusTidbMysql"`
+	SmsServiceRpc  string                 `json:"smsServiceRpc"`
 }
 
 var SysConfigs SysConfig

+ 42 - 3
src/customerService/newsController.go

@@ -2,10 +2,12 @@ package customerService
 
 import (
 	"config"
-	"github.com/baiy/Cadmin-server-go/admin"
-	"github.com/baiy/Cadmin-server-go/system/utils"
+	"errors"
 	"log"
 	"strconv"
+
+	"github.com/baiy/Cadmin-server-go/admin"
+	"github.com/baiy/Cadmin-server-go/system/utils"
 )
 
 type MsgListParam struct {
@@ -34,8 +36,20 @@ type Message struct {
 	IosUrl        string `form:"iosUrl"`        //ios连接
 	WeChatUrl     string `form:"weChatUrl"`     //微信连接
 }
+type SendMessage struct {
+	UserIds    string `form:"userIds"`
+	MsgType    int    `form:"msgType"`    //消息类型
+	Title      string `form:"title"`      //标题
+	Content    string `form:"content"`    //内容
+	Link       string `form:"link"`       //链接
+	SendMode   int    `form:"sendMode"`   //发送时效 发送模式  1- 定时 2-实时
+	SendTime   string `form:"sendTime"`   // 发送时间
+	AndroidUrl string `form:"androidUrl"` //安卓连接
+	IosUrl     string `form:"iosUrl"`     //ios连接
+	WeChatUrl  string `form:"weChatUrl"`  //微信连接
+}
 
-// MessageDetails 查看消息内容
+//查看消息内容
 func MessageDetails(context *admin.Context) (interface{}, error) {
 	param := new(struct {
 		Id int `form:"id"`
@@ -121,3 +135,28 @@ func GetGroup(context *admin.Context) (interface{}, error) {
 	}
 	return group, nil
 }
+
+//对外提供接口
+func SendMessageApi(context *admin.Context) (interface{}, error) {
+	param := &SendMessage{}
+	err := context.Form(param)
+	if err != nil {
+		return nil, nil
+	}
+	log.Println(param)
+	log.Println(param.UserIds)
+	if param.UserIds == "" {
+		return nil, errors.New("用户id为空,请确认参数是否完整")
+	}
+	//发送状态
+	sendStatus := 1 //
+	if param.SendMode == 2 {
+		sendStatus = 4
+	}
+	//拼接link
+	param.Link = param.Link + "," + param.AndroidUrl + "," + param.IosUrl + "," + param.WeChatUrl
+	status, err := pushMsg(param, sendStatus)
+	return map[string]interface{}{
+		"status": status,
+	}, err
+}

+ 137 - 1
src/customerService/newsService.go

@@ -662,7 +662,7 @@ func SendMsg(param *Message, sendStatus int, loginUserName string, loginUserId i
 			if err != nil {
 				log.Println("迭代数据出错", err)
 			}
-			//log.Println("单条数据:", user.UserId)
+
 			userId := user.UserId
 			if config.SysConfigs.UserIdMap[userId] != "" {
 				userId = config.SysConfigs.UserIdMap[userId]
@@ -673,6 +673,7 @@ func SendMsg(param *Message, sendStatus int, loginUserName string, loginUserId i
 			} else {
 				projectIdMap.Store(userId, true)
 			}
+			log.Println("单条数据用户id:", user.UserId)
 			i++
 			userIds += userId + ","
 
@@ -717,9 +718,12 @@ func SendMsg(param *Message, sendStatus int, loginUserName string, loginUserId i
 			if appVersion > "3.0.3" {
 				go util.AppGrpcPush(dt, otherPushId, jgPushId, phoneType, appPushUrl)
 			}
+			log.Println("用户数量:", i)
 			if i == 100 {
+				log.Println("100用户开始发送消息:", len(userIds))
 				//调用消息中台
 				util.MultipleSaveMessage(msg, userIds, userNames)
+				log.Println("100个用户发送消息完成......")
 				userNames = ""
 				userIds = ""
 				i = 0
@@ -727,8 +731,10 @@ func SendMsg(param *Message, sendStatus int, loginUserName string, loginUserId i
 
 		}
 		if i > 0 {
+			log.Println("最后一批用户开始发送消息:", len(userIds))
 			//调用中台接口
 			util.MultipleSaveMessage(msg, userIds, userNames)
+			log.Println("最后一批用户发送消息:完成")
 			userNames = ""
 			userIds = ""
 			i = 0
@@ -795,3 +801,133 @@ func test_getGroup(ids string) (int, error) {
 	log.Println("获取分组及分组下用户耗时:", tc)
 	return 0, nil
 }
+
+//呼叫中心发送消息
+func pushMsg(param *SendMessage, sendStatus int) (int, error) {
+	var msgLogId string
+	if param.SendMode == 2 {
+		param.SendTime = time.Now().Format(qutil.Date_Full_Layout)
+	}
+	//保存发送的消息
+	log.Println("发送消息发送时间:", param.SendTime)
+	msgId := util.JysqlDB.Insert("message_send_log", map[string]interface{}{
+		"send_usergroup_id":   "",
+		"send_usergroup_name": "",
+		"msg_type":            param.MsgType,
+		"title":               param.Title,
+		"content":             param.Content,
+		"send_mode":           param.SendMode,
+		"send_time":           param.SendTime,
+		"send_status":         sendStatus,
+		"update_time":         time.Now().Format(qutil.Date_Full_Layout),
+		"createtime":          time.Now().Format(qutil.Date_Full_Layout),
+		"link":                param.Link,
+		"isdel":               1,
+		"send_userid":         "hjzx", //呼叫中心
+	})
+	msgLogId = strconv.FormatInt(msgId, 10)
+	//立即发送
+	if param.SendMode == 2 {
+		//j := 0
+		projectIdMap := sync.Map{}
+		orm := util.Tidb.NewSession()
+		err := orm.Begin()
+		if err != nil {
+			log.Println("简历数据库连接出错:", err)
+		}
+		userNames := ""
+		userIds := ""
+		i := 0
+		msgType := strconv.Itoa(param.MsgType)
+		msg := map[string]interface{}{
+			"sendUserId": "hjzx",
+			"sendName":   "呼叫中心",
+			"title":      param.Title,
+			"content":    param.Content,
+			"msgType":    msgType,
+			"link":       param.Link,
+			"appid":      util.AppId,
+			"msgLogId":   msgLogId,
+		}
+		userIdsArr := strings.Split(param.UserIds, ",")
+		for _, v := range userIdsArr {
+
+			userId := v
+
+			if config.SysConfigs.UserIdMap[userId] != "" {
+				userId = config.SysConfigs.UserIdMap[userId]
+			}
+			if _, ok := projectIdMap.Load(userId); ok {
+				log.Println("########################已发送,本次跳过。。。。。。。。。。。。。", userId)
+				continue
+			} else {
+				projectIdMap.Store(userId, true)
+			}
+			i++
+			userIds += userId + ","
+
+			//查询mongo库用户信息
+			userData := &map[string]interface{}{}
+			ok := false
+			var otherPushId, jgPushId, phoneType, name = "", "", "", ""
+			appVersion := ""
+			userData, ok = util.MQFW.FindById("user", userId, `"s_name":1,"s_opushid":1,"s_jpushid":1,"s_appponetype":1,"s_appversion":1`)
+			if userData != nil && len(*userData) > 0 && ok {
+				otherPushId = qutil.ObjToString((*userData)["s_opushid"])
+				jgPushId = qutil.ObjToString((*userData)["s_jpushid"])
+				phoneType = qutil.ObjToString((*userData)["s_appponetype"])
+				name = qutil.ObjToString((*userData)["s_name"])
+				appVersion = qutil.ObjToString((*userData)["s_appversion"])
+			}
+			userNames += name + ","
+			appPushUrl := "/jyapp/frontPage/messageCenter/sess/index"
+			if strings.Contains(phoneType, "iPhone") {
+				if param.IosUrl != "" {
+					appPushUrl = param.IosUrl
+				}
+			} else {
+				if param.AndroidUrl != "" {
+					appPushUrl = param.AndroidUrl
+				}
+			}
+			//实时发送发送时间为当前时间
+			param.SendTime = time.Now().Format(qutil.Date_Full_Layout)
+			dt := map[string]interface{}{
+				"receiveUserId": userId,
+				"receiveName":   name,
+				"sendUserId":    "qmx",
+				"sendName":      "剑鱼后台",
+				"title":         param.Title,
+				"content":       param.Content,
+				"msgType":       msgType,
+				"link":          param.Link,
+				"appid":         util.AppId,
+			}
+			//推送消息
+			if appVersion > "3.0.3" {
+				go util.AppGrpcPush(dt, otherPushId, jgPushId, phoneType, appPushUrl)
+			}
+			if i == 100 {
+				//调用消息中台
+				log.Println("100个用户开始发送消息:", i)
+				util.MultipleSaveMessage(msg, userIds, userNames)
+				log.Println("100个用户发送消息完成")
+				userNames = ""
+				userIds = ""
+				i = 0
+			}
+
+		}
+		if i > 0 {
+			//调用中台接口
+			log.Println("最后一批用户开始发送消息:", i)
+			util.MultipleSaveMessage(msg, userIds, userNames)
+			log.Println("最后一批用户发送消息完成")
+			userNames = ""
+			userIds = ""
+			i = 0
+		}
+		return 1, nil
+	}
+	return 0, errors.New("发送消息出错")
+}

+ 2 - 0
src/customerService/router.go

@@ -3,6 +3,7 @@ package customerService
 import (
 	"errors"
 	"fmt"
+
 	. "github.com/baiy/Cadmin-server-go/admin"
 )
 
@@ -78,6 +79,7 @@ func init() {
 		"Baiy.Cadmin.Message.importUser":             ImportUser,
 		"Baiy.Cadmin.Message.myCustomerList":         MyCustomerList,
 		"Baiy.Cadmin.Message.getUserInfo":            GetUserInfo,
+		"Baiy.Cadmin.Message.sendMessageApi":         SendMessageApi,
 	})
 	RegisterDispatch(SalesDispatcher)
 }

+ 13 - 9
src/github.com/baiy/Cadmin-server-go/system/index/index.go

@@ -246,13 +246,17 @@ func Code(context *admin.Context) (interface{}, error) {
 
 //根据模板发送短信,模板是运营商设定的。
 //第三个参数是可变参数,可以传入多个,但要和模板相匹配
-func SendSMS(tplcode /*模板代码*/, mobile /*手机号码*/ string, param map[string]string) {
-	tmp := []string{}
-	for k, v := range param {
-		tmp = append(tmp, "#"+k+"#="+v)
-	}
-	text := strings.Join(tmp, "&")
-	sms.SendSms(mobile, tplcode, text)
+//func SendSMS(tplcode /*模板代码*/, mobile /*手机号码*/ string, param map[string]string) {
+//	tmp := []string{}
+//	for k, v := range param {
+//		tmp = append(tmp, "#"+k+"#="+v)
+//	}
+//	text := strings.Join(tmp, "&")
+//	sms.SendSms(mobile, tplcode, text)
+//}
+
+func SendSMS(address, mobile string, params ...string) {
+	sms.SendSms(address, "01", mobile, params...)
 }
 
 //发送验证码
@@ -279,8 +283,8 @@ func SendPhoneIdentCode(context *admin.Context, phone string) bool {
 		log.Println("session1保存错误,验证码")
 	}
 	//发送短信
-	param := map[string]string{"code": s_ranNum}
+	//param := map[string]string{"code": s_ranNum}
 	log.Println("短信验证码", phone, s_ranNum)
-	SendSMS("2828060", phone, param)
+	SendSMS(SysConfigs.SmsServiceRpc, phone, s_ranNum)
 	return true
 }

+ 3 - 2
src/github.com/baiy/Cadmin-server-go/system/user/user.go

@@ -1,6 +1,7 @@
 package user
 
 import (
+	. "config"
 	"errors"
 	"github.com/gorilla/sessions"
 	"log"
@@ -147,9 +148,9 @@ func SendPhoneIdentCode(context *admin.Context, phone string) bool {
 		log.Println("session1保存错误,验证码")
 	}
 	//发送短信
-	param := map[string]string{"code": s_ranNum}
+	//param := map[string]string{"code": s_ranNum}
 	log.Println("短信验证码", phone, s_ranNum)
-	index_.SendSMS("2828060", phone, param)
+	index_.SendSMS(SysConfigs.SmsServiceRpc, phone, s_ranNum)
 	return true
 }
 

+ 7 - 1
src/task/task2.go

@@ -401,7 +401,7 @@ func TaskSaveMsg(msgId int, msg *map[string]interface{}, androidUrl, iosUrl stri
 		}
 		//log.Println("单条数据:", user.UserId)
 		userId := user.UserId
-		i++
+
 		if config.SysConfigs.UserIdMap[userId] != "" {
 			userId = config.SysConfigs.UserIdMap[userId]
 		}
@@ -414,6 +414,7 @@ func TaskSaveMsg(msgId int, msg *map[string]interface{}, androidUrl, iosUrl stri
 		} else {
 			projectIdMap.Store(userId, true)
 		}
+		i++
 		userIds += userId + ","
 		//查询mongo库用户信息
 		userData := &map[string]interface{}{}
@@ -456,19 +457,24 @@ func TaskSaveMsg(msgId int, msg *map[string]interface{}, androidUrl, iosUrl stri
 		if appVersion > "3.0.3" {
 			go util.AppGrpcPush(dt, otherPushId, jgPushId, phoneType, appPushUrl)
 		}
+		log.Println("用户数量:", i)
 		if i == 100 {
 			//调用中台接口
+			log.Println("定时发送中100个用户开始发送消息")
 			util.MultipleSaveMessage(msg1, userIds, userNames)
 			userNames = ""
 			userIds = ""
 			i = 0
+			log.Println("定时发送中100个用户发送消息完成")
 		}
 	}
 	if i > 0 {
 		//调用中台接口
+		log.Println("定时发送中最后一批用户开始发送消息")
 		util.MultipleSaveMessage(msg1, userIds, userNames)
 		userNames = ""
 		userIds = ""
+		log.Println("定时发送中最后一批用户发送消息完成")
 	}
 	log.Println("定时任务,获取分组及分组下用户耗时:", time.Since(st))
 	sendStatus := 4

+ 2 - 1
src/util/common.go

@@ -145,7 +145,7 @@ func PurchaseUserBalance(params map[string]interface{}) bool {
 }
 
 func MultipleSaveMessage(msg map[string]interface{}, userIds, userNames string) {
-
+	log.Println("开始调用中台接口保存消息")
 	//log.Println("调用批量保存消息接口")
 	//bs, _ := json.Marshal(saveData)
 	//resp, err := CommonPost(qutil.ObjToString(config.SysConfigs.MessageCenter["MultipleSaveMsgUrl"]), url.Values{
@@ -169,6 +169,7 @@ func MultipleSaveMessage(msg map[string]interface{}, userIds, userNames string)
 	}
 	req.Header.Add("Content-Type", "application/json")
 	res, err := client.Do(req)
+	log.Println("调用中台api返回结果")
 	log.Println(res, err)
 	defer res.Body.Close()