diff --git a/dsSzxy/.idea/workspace.xml b/dsSzxy/.idea/workspace.xml index 3e49de9d..e9b4a894 100644 --- a/dsSzxy/.idea/workspace.xml +++ b/dsSzxy/.idea/workspace.xml @@ -1,15 +1,19 @@ -<<<<<<< HEAD - - -======= + + + + + + + + + - - ->>>>>>> origin/master + + -<<<<<<< HEAD - - - -======= ->>>>>>> origin/master true @@ -142,4 +123,15 @@ + + + + + file://$PROJECT_DIR$/Business/ImRelate/ImRelateDao/ImRelateDao.go + 2 + + + + \ No newline at end of file diff --git a/dsSzxy/Business/ImRelate/ImRelateController/ImRelateController.go b/dsSzxy/Business/ImRelate/ImRelateController/ImRelateController.go index ad0004db..19598fcd 100644 --- a/dsSzxy/Business/ImRelate/ImRelateController/ImRelateController.go +++ b/dsSzxy/Business/ImRelate/ImRelateController/ImRelateController.go @@ -18,6 +18,30 @@ func Routers(r *gin.RouterGroup) { rr.GET("/GetPersonInfoList", GetPersonInfoList) rr.POST("/CreateGroup", CreateGroup) rr.POST("/SyncRongYunUser", SyncRongYunUser) + rr.POST("/SendSystemMsg", SendSystemMsg) +} + +/** +功能:发送系统消息 +作者:吴缤 +日期:2021-09-17 +*/ +func SendSystemMsg(c *gin.Context) { + //发送方Id。 + fromId := c.PostForm("fromId") + //接收方Id。 + toId := c.PostForm("toId") + //内容 + content := c.PostForm("content") + + err := ImRelateDao.SendSystemMsg(fromId, toId, content) + + if err != nil { + c.JSON(http.StatusOK, gin.H{"success": false, "info": err.Error()}) + return + } + + c.JSON(http.StatusOK, gin.H{"success": true, "info": "发送系统成功!"}) } /** @@ -135,11 +159,11 @@ func SaveChatRecord(c *gin.Context) { bodyString := string(bodyJsonObj) saveErr := ImRelateDao.SaveChatRecord("chat_record", bodyString) if saveErr != nil { - c.JSON(http.StatusOK, gin.H{"success": false, "info": "聊天记录保存失败!"}) + c.JSON(http.StatusOK, gin.H{"success": false, "info": "保存聊天记录失败!"}) return } - c.JSON(http.StatusOK, gin.H{"success": true, "info": "发送消息成功!"}) + c.JSON(http.StatusOK, gin.H{"success": true, "info": "保存聊天记录成功!"}) } /** diff --git a/dsSzxy/Business/ImRelate/ImRelateDao/ImRelateDao.go b/dsSzxy/Business/ImRelate/ImRelateDao/ImRelateDao.go index c73d28fd..00aca44b 100644 --- a/dsSzxy/Business/ImRelate/ImRelateDao/ImRelateDao.go +++ b/dsSzxy/Business/ImRelate/ImRelateDao/ImRelateDao.go @@ -15,8 +15,11 @@ import ( "github.com/xormplus/xorm" "strconv" "strings" + "time" ) +var db = DbUtil.Engine + //人员信息结构 type Person struct { Success bool `json:"success"` @@ -447,3 +450,159 @@ func AddGroupMember(groupId string, personList string, personIdCookie string, id return nil } + +/** +功能:向融云同步人员 +作者:吴缤 +日期:2021-09-13 +*/ +func SyncRongYunUser() { + ts, inc := getRongYunSync("person") + sql := "select person_id,person_name,last_update_time from t_base_person where b_use=1 and identity_id=5 and ((last_update_time=? and person_id>?) or last_update_time>?) order by last_update_time,person_id limit 200" + res, _ := db.QueryString(sql, ts, inc, ts) + count := len(res) - 1 + for i, v := range res { + personId := v["person_id"] + personName := v["person_name"] + updateTs := v["last_update_time"] + RongYunGetToken(personId, "5", personName, "") + if i == count { + updateRongYunSync("person", updateTs, personId) + } + } + + // 每1分钟执行一次 + time.AfterFunc(1*time.Minute, SyncRongYunUser) +} + +/** +功能:向融云同步群组和人员关系 +作者:吴缤 +日期:2021-09-13 +*/ +func SyncRongYunGroup() { + ts, inc := getRongYunSync("group") + sql := "select t1.id,t1.group_id,t2.group_name,t1.person_id,t1.identity_id,t1.last_update_time from t_base_group_member_new t1 inner join t_base_group_new t2 on t1.group_id=t2.id where t1.identity_id=5 and t1.state_id=1 and t1.b_use=1 and ((t1.last_update_time=? and t1.id>?) or t1.last_update_time>?) order by t1.last_update_time,t1.id limit 200" + res, _ := db.QueryString(sql, ts, inc, ts) + count := len(res) - 1 + for i, v := range res { + personId := v["person_id"] + identityId := v["identity_id"] + groupId := v["group_id"] + groupName := v["group_name"] + updateTs := v["last_update_time"] + id := v["id"] + RongYunJoinGroup(personId, identityId, groupId, groupName) + if i == count { + updateRongYunSync("group", updateTs, id) + } + } + + // 每1分钟执行一次 + time.AfterFunc(1*time.Minute, SyncRongYunGroup) +} + +/** +功能:融云加入群组 +作者:吴缤 +日期:2021-09-13 +*/ +func RongYunJoinGroup(personId, identityId, groupId, groupName string) error { + //获取云平台配置文件中的融云AK和SK + configMap, configErr := CommonUtil.GetRongYunConfig() + if configErr != nil { + return configErr + } + ak := configMap["app_key"] + sk := configMap["app_secret"] + suffix := configMap["rong_server_name"] + + rc := sdk.NewRongCloud(ak, sk) + + group := []sdk.Group{sdk.Group{ID: groupId + suffix, Name: groupName}} + err := rc.GroupSync( + personId+"_"+identityId+suffix, + group, + ) + return err + +} + +/** +功能:根据分类获取时间戳和自增ID +作者:吴缤 +日期:2021-09-13 +*/ +func getRongYunSync(classify string) (string, string) { + record := make(xorm.Record) + sql := "select ts,inc from t_dsmin_rongyun_sync where classify=?" + db.SQL(sql, classify).Get(&record) + ts := record["ts"].String() + inc := record["inc"].String() + return ts, inc +} + +/** +功能:更新时间戳和自增ID +作者:吴缤 +日期:2021-09-13 +*/ +func updateRongYunSync(classify, ts, inc string) { + sql := "update t_dsmin_rongyun_sync set ts=?,inc=? where classify=?" + db.Exec(sql, ts, inc, classify) +} + +/** +功能:发送系统消息 +作者:吴缤 +日期:2021-09-17 +*/ +func SendSystemMsg(fromId, toId, content string) error { + req := httplib.Post(fmt.Sprintf("%s/message/system/publish.json", ConfigUtil.RongYunApiUri)) + + addHeader(req) + + req.Param("fromUserId", fromId) + req.Param("toUserId", toId) + req.Param("objectName", "RC:TxtMsg") + req.Param("content", content) + + resStr, err := req.String() + if err != nil { + return err + } + + resMap := make(map[string]interface{}) + + errJson := json.Unmarshal([]byte(resStr), &resMap) + if errJson != nil { + return errJson + } + if resMap["code"].(float64) != 200 { + return errors.New(resMap["errorMessage"].(string)) + } + return nil +} + +/** +功能:调用融云API时增加头信息 +作者:吴缤 +日期:2021-09-17 +*/ +func addHeader(req *httplib.BeegoHTTPRequest) { + configMap, configErr := CommonUtil.GetRongYunConfig() + if configErr != nil { + fmt.Println("获取融云配置文件失败!") + return + } + ak := configMap["app_key"] + sk := configMap["app_secret"] + + nonce := CommonUtil.GetSixRandom() + timestamp := CommonUtil.GetTimeStamp() + + req.Header("RC-App-Key", ak) + req.Header("RC-Nonce", nonce) + req.Header("RC-Timestamp", timestamp) + req.Header("RC-Signature", CommonUtil.SHA1(sk+nonce+timestamp)) +} diff --git a/dsSzxy/Config/Config.ini b/dsSzxy/Config/Config.ini index c2f9bd60..484e99ff 100644 --- a/dsSzxy/Config/Config.ini +++ b/dsSzxy/Config/Config.ini @@ -61,6 +61,7 @@ path = /usr/local/dsMin/dsSzxy/files/ [rongyun] #config_path = /usr/local/tomcat7/webapps/dsideal_yy/WEB-INF/classes/config.properties config_path = c:/1/config.properties +api_uri = https://api-cn.ronghub.com [videoThumb] thumb = data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNjI5NDQ3MDA4MTUxIiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDE1MTIgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjE5MzU3IiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgd2lkdGg9IjIyLjE0ODQzNzUiIGhlaWdodD0iMTUiPjxkZWZzPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PC9zdHlsZT48L2RlZnM+PHBhdGggZD0iTTY2LjU2MjEzMiAxNDMuMzI1MzU3bTE2OS4wODMxMTcgMGwzNTAuOTE3NiAwcTE2OS4wODMxMTcgMCAxNjkuMDgzMTE3IDE2OS4wODMxMTdsMCAzNTAuOTE3NnEwIDE2OS4wODMxMTctMTY5LjA4MzExNyAxNjkuMDgzMTE3bC0zNTAuOTE3NiAwcS0xNjkuMDgzMTE3IDAtMTY5LjA4MzExNy0xNjkuMDgzMTE3bDAtMzUwLjkxNzZxMC0xNjkuMDgzMTE3IDE2OS4wODMxMTctMTY5LjA4MzExN1oiIGZpbGw9IiNGRkM4OEIiIG9wYWNpdHk9Ii40IiBwLWlkPSIxOTM1OCI+PC9wYXRoPjxwYXRoIGQ9Ik04ODkuMjgwMjg1IDQ1MC4xMjMyM0w2MjYuODU3MTY3IDI5OC4zODE5NzFBNDMuNjA5NjczIDQzLjYwOTY3MyAwIDAgMCA1NjEuMDYwMTE3IDMzNi4zODEwNDN2MzAyLjk3MjQ2M2E0My4zNTQ2NDUgNDMuMzU0NjQ1IDAgMCAwIDY1LjI4Njk5NSAzNy43NDQwNDRsMjYyLjQyMzExOC0xNTEuNDg2MjMyYTQzLjM1NDY0NSA0My4zNTQ2NDUgMCAwIDAgMC41MTAwNTUtNzUuNDg4MDg4eiIgZmlsbD0iI0ZGQzg4QiIgcC1pZD0iMTkzNTkiPjwvcGF0aD48cGF0aCBkPSJNOTkuNzE1Njg0IDc3MC40Mzc1NTFtLTk5LjcxNTY4NCAwYTk5LjcxNTY4NCA5OS43MTU2ODQgMCAxIDAgMTk5LjQzMTM2OSAwIDk5LjcxNTY4NCA5OS43MTU2ODQgMCAxIDAtMTk5LjQzMTM2OSAwWiIgZmlsbD0iI0ZGQzg4QiIgcC1pZD0iMTkzNjAiPjwvcGF0aD48cGF0aCBkPSJNMTM4My4yNjgyMTUgNDIxLjMwNTE0Mm0tNTguNDAxMjU4IDBhNTguNDAxMjU4IDU4LjQwMTI1OCAwIDEgMCAxMTYuODAyNTE2IDAgNTguNDAxMjU4IDU4LjQwMTI1OCAwIDEgMC0xMTYuODAyNTE2IDBaIiBmaWxsPSIjRkZDODhCIiBwLWlkPSIxOTM2MSI+PC9wYXRoPjxwYXRoIGQ9Ik0yNDEuMjU1ODUgMG0xNjkuMDgzMTE3IDBsNjM3LjU2ODMxNSAwcTE2OS4wODMxMTcgMCAxNjkuMDgzMTE3IDE2OS4wODMxMTdsMCA2MzcuNTY4MzE0cTAgMTY5LjA4MzExNy0xNjkuMDgzMTE3IDE2OS4wODMxMTdsLTYzNy41NjgzMTUgMHEtMTY5LjA4MzExNyAwLTE2OS4wODMxMTctMTY5LjA4MzExN2wwLTYzNy41NjgzMTRxMC0xNjkuMDgzMTE3IDE2OS4wODMxMTctMTY5LjA4MzExN1oiIGZpbGw9IiNGRkM4OEIiIHAtaWQ9IjE5MzYyIj48L3BhdGg+PHBhdGggZD0iTTg4OS4yODAyODUgNDUwLjEyMzIzTDYyNi44NTcxNjcgMjk4LjM4MTk3MUE0My42MDk2NzMgNDMuNjA5NjczIDAgMCAwIDU2MS4wNjAxMTcgMzM2LjM4MTA0M3YzMDIuOTcyNDYzYTQzLjM1NDY0NSA0My4zNTQ2NDUgMCAwIDAgNjUuMjg2OTk1IDM3Ljc0NDA0NGwyNjIuNDIzMTE4LTE1MS40ODYyMzJhNDMuMzU0NjQ1IDQzLjM1NDY0NSAwIDAgMCAwLjUxMDA1NS03NS40ODgwODh6IiBmaWxsPSIjRkZGRkZGIiBwLWlkPSIxOTM2MyI+PC9wYXRoPjwvc3ZnPg== diff --git a/dsSzxy/Utils/CommonUtil/CommonUtil.go b/dsSzxy/Utils/CommonUtil/CommonUtil.go index 3ad912c3..ba6f74c8 100644 --- a/dsSzxy/Utils/CommonUtil/CommonUtil.go +++ b/dsSzxy/Utils/CommonUtil/CommonUtil.go @@ -279,3 +279,4 @@ func AddCookie(req *httplib.BeegoHTTPRequest, personIdCookie string, identityIdC Domain: ConfigUtil.DsidealYyDomain, }) } + diff --git a/dsSzxy/Utils/ConfigUtil/ConfigUtil.go b/dsSzxy/Utils/ConfigUtil/ConfigUtil.go index df37d2f9..59a1c31b 100644 --- a/dsSzxy/Utils/ConfigUtil/ConfigUtil.go +++ b/dsSzxy/Utils/ConfigUtil/ConfigUtil.go @@ -53,6 +53,7 @@ var ( //融云配置文件位置 RongYunConfigPath string + RongYunApiUri string //SSDB SSDBIp string @@ -150,6 +151,7 @@ func init() { //融云配置文件位置 RongYunConfigPath = iniParser.GetString("rongyun", "config_path") + RongYunApiUri = iniParser.GetString("rongyun", "api_uri") //SSDB SSDBIp = iniParser.GetString("ssdb", "ip") diff --git a/dsSzxy/go.mod b/dsSzxy/go.mod index 0f1022b7..bb4be22e 100644 --- a/dsSzxy/go.mod +++ b/dsSzxy/go.mod @@ -40,7 +40,6 @@ require ( github.com/rongcloud/server-sdk-go/v3 v3.2.5 // indirect github.com/satori/go.uuid v1.2.0 github.com/siddontang/go v0.0.0-20180604090527-bdc77568d726 // indirect - github.com/siddontang/ledisdb v0.0.0-20181029004158-becf5f38d373 // indirect github.com/spf13/viper v1.8.1 github.com/swaggo/gin-swagger v1.3.1 // indirect github.com/swaggo/swag v1.7.1 // indirect diff --git a/dsSzxy/go.sum b/dsSzxy/go.sum index 735055c5..0e8f101a 100644 --- a/dsSzxy/go.sum +++ b/dsSzxy/go.sum @@ -70,6 +70,7 @@ github.com/DataDog/zstd v1.3.5/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t github.com/Knetic/govaluate v3.0.0+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= github.com/KyleBanks/depth v1.2.1 h1:5h8fQADFrWtarTdtDudMmGsC7GPbOAu6RVB3ffsVFHc= github.com/KyleBanks/depth v1.2.1/go.mod h1:jzSb9d0L43HxTQfT+oSA1EEp2q+ne2uh6XgeJcm8brE= +github.com/OwnLocal/goes v1.0.0 h1:81QQ3z6dvLhgXlkNpLkaYhk8jiKS7saFG01xy039KaU= github.com/OwnLocal/goes v1.0.0/go.mod h1:8rIFjBGTue3lCU0wplczcUgt9Gxgrkkrw7etMIcn8TM= github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI= @@ -591,6 +592,7 @@ github.com/shiena/ansicolor v0.0.0-20151119151921-a422bbe96644/go.mod h1:nkxAfR/ github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/siddontang/go v0.0.0-20170517070808-cb568a3e5cc0/go.mod h1:3yhqj7WBBfRhbBlzyOC3gUxftwsU0u8gqevxwIHQpMw= +github.com/siddontang/go v0.0.0-20180604090527-bdc77568d726 h1:xT+JlYxNGqyT+XcU8iUrN18JYed2TvG9yN5ULG2jATM= github.com/siddontang/go v0.0.0-20180604090527-bdc77568d726/go.mod h1:3yhqj7WBBfRhbBlzyOC3gUxftwsU0u8gqevxwIHQpMw= github.com/siddontang/goredis v0.0.0-20150324035039-760763f78400/go.mod h1:DDcKzU3qCuvj/tPnimWSsZZzvk9qvkvrIL5naVBPh5s= github.com/siddontang/ledisdb v0.0.0-20181029004158-becf5f38d373/go.mod h1:mF1DpOSOUiJRMR+FDqaqu3EBqrybQtrDDszLUZ6oxPg= diff --git a/dsSzxy/main.go b/dsSzxy/main.go index f753975a..6a1a37ca 100644 --- a/dsSzxy/main.go +++ b/dsSzxy/main.go @@ -49,6 +49,9 @@ func main() { r.Use(Utils.Cors()) //参数有效性验证拦截器 r.Use(Handler.ParameterHandler()) + //向融云同步数据 + //go ImRelateDao.SyncRongYunUser() + //go ImRelateDao.SyncRongYunGroup() //主路由 Router.GinRouter(r) // 监听并在 0.0.0.0:8006 上启动服务