|
@@ -668,20 +668,21 @@ func GetArticleListByApi(cont context.Context) (err error) {
|
|
|
// 这里直接go出去会出现并发,导致文章md5ID唯一索引限制报错
|
|
|
err = HandleArticleListByApi(v.ArticleId)
|
|
|
if err != nil {
|
|
|
- utils.FileLog.Info("WxGetToken Result:%s ", err.Error())
|
|
|
+ utils.FileLog.Info("HandleArticleListByApi", err.Error())
|
|
|
}
|
|
|
}
|
|
|
return
|
|
|
}
|
|
|
|
|
|
//func init() {
|
|
|
-//allList, err := models.GetArticleAll()
|
|
|
+// allList, err := models.GetArticleAll()
|
|
|
//
|
|
|
-//fmt.Println(err)
|
|
|
-//for _, v := range allList {
|
|
|
-// HandleArticleListByApi(v.ArticleId)
|
|
|
-//}
|
|
|
-//HandleArticleListByApi(7930)
|
|
|
+// fmt.Println(err)
|
|
|
+//
|
|
|
+// for _, v := range allList {
|
|
|
+// HandleArticleListByApi(v.ArticleId)
|
|
|
+// }
|
|
|
+//HandleArticleListByApi(8112)
|
|
|
|
|
|
//}
|
|
|
|
|
@@ -863,7 +864,10 @@ func HandleArticleListByApi(artcleId int) (err error) {
|
|
|
}
|
|
|
}
|
|
|
//是否属于纪要库的数据
|
|
|
- if _, has := summaryMap[v.CategoryId]; has {
|
|
|
+ //if _, has := summaryMap[v.CategoryId]; has {
|
|
|
+ // v.IsSummary = 1
|
|
|
+ //}
|
|
|
+ if v.TypeName == "纪要" {
|
|
|
v.IsSummary = 1
|
|
|
}
|
|
|
//排除不属于纪要库类型的文章
|
|
@@ -1036,6 +1040,7 @@ func HandleArticleListByApi(artcleId int) (err error) {
|
|
|
return err
|
|
|
}
|
|
|
go UpdateResourceData(v.ArticleId, "article", "add", time.Now().Format(utils.FormatDateTime))
|
|
|
+
|
|
|
//fmt.Println(newId)
|
|
|
//报告自动归类,以及推送相关模板消息
|
|
|
if v.ReportType == 2 {
|
|
@@ -1161,15 +1166,17 @@ func HandleArticleListByApi(artcleId int) (err error) {
|
|
|
}
|
|
|
|
|
|
//func init() {
|
|
|
-// DoArticleOnenIdWxTemplateMsg(8081)
|
|
|
+// DoArticleOnenIdWxTemplateMsg(8112)
|
|
|
//}
|
|
|
|
|
|
// 过滤策略平台报告,研选报告重复推送,以及权限勾选的推送
|
|
|
func DoArticleOnenIdWxTemplateMsg(articleId int) (err error) {
|
|
|
+
|
|
|
//策略平台同步过来的文章ID,做微信模板消息推送,同一篇报告12小时只推送一次
|
|
|
cacheKey := fmt.Sprint(utils.CACHE_KEY_ARTICLE_ID_TEMPLATE, ":ArticleId", articleId)
|
|
|
ttlTime := utils.Rc.GetRedisTTL(cacheKey)
|
|
|
if ttlTime > 0 {
|
|
|
+ fmt.Println(ttlTime)
|
|
|
return err
|
|
|
}
|
|
|
var msg string
|
|
@@ -1221,74 +1228,76 @@ func DoArticleOnenIdWxTemplateMsg(articleId int) (err error) {
|
|
|
if chartPermissionId == utils.CE_LUE_ID || chartPermissionId == utils.GU_SHOU_ID {
|
|
|
industryName = reportMapDetail.SubCategoryName
|
|
|
} else {
|
|
|
- detailIndustryNameList, err := models.GetIndustrialManagemenDetailByAaticleID(articleId)
|
|
|
- if err != nil && err.Error() != utils.ErrNoRow() {
|
|
|
- return err
|
|
|
- }
|
|
|
- //如果不存在关联的产业则不推送
|
|
|
- if len(detailIndustryNameList) == 0 {
|
|
|
- return err
|
|
|
- }
|
|
|
- for _, v := range detailIndustryNameList {
|
|
|
- industryName += v.IndustryName + ","
|
|
|
- industrialManagementId += strconv.Itoa(v.IndustrialManagementId) + ","
|
|
|
- }
|
|
|
- industryName = strings.TrimRight(industryName, ",")
|
|
|
- industrialManagementId = strings.TrimRight(industrialManagementId, ",")
|
|
|
-
|
|
|
- //处理勾选了全部行业赛道的用户
|
|
|
- var allIn string
|
|
|
- allIn = DoXzsChooseSend(reportMapDetail.ChartPermissionName)
|
|
|
- if allIn != "" {
|
|
|
- allInList, err := models.GetCygxXzsChooseSendByAllIn(allIn)
|
|
|
+ if articleInfo.ReportType == 2 {
|
|
|
+ detailIndustryNameList, err := models.GetIndustrialManagemenDetailByAaticleID(articleId)
|
|
|
if err != nil && err.Error() != utils.ErrNoRow() {
|
|
|
return err
|
|
|
}
|
|
|
- if len(allInList) > 0 {
|
|
|
- var allInUserId string
|
|
|
- for _, v := range allInList {
|
|
|
- allInUserId += strconv.Itoa(v.UserId) + ","
|
|
|
- }
|
|
|
- allInUserId = strings.TrimRight(allInUserId, ",")
|
|
|
-
|
|
|
- userFllowIndustrialList, err := models.GetUserFllowIndustrialListByUserIdAndIndustrial(allInUserId, industrialManagementId)
|
|
|
- if err != nil && err.Error() != utils.ErrNoRow() {
|
|
|
- return err
|
|
|
- }
|
|
|
- mapUserFllowed := make(map[string]int)
|
|
|
- for _, v := range userFllowIndustrialList {
|
|
|
- //用户ID与其关注的产业组成唯一索引,判断是否存在,如果不存在就进行自动关注
|
|
|
- mapUserFllowed[fmt.Sprint("uid:", v.UserId, "_Industrial:", v.IndustrialManagementId)] = v.UserId
|
|
|
- }
|
|
|
- //获取这些allIN用户的的信息进行遍历生成需要插入的数据
|
|
|
- userList, err := models.GetWxUserListByUserIds(allInUserId)
|
|
|
+ //如果不存在关联的产业则不推送
|
|
|
+ if len(detailIndustryNameList) == 0 {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ for _, v := range detailIndustryNameList {
|
|
|
+ industryName += v.IndustryName + ","
|
|
|
+ industrialManagementId += strconv.Itoa(v.IndustrialManagementId) + ","
|
|
|
+ }
|
|
|
+ industryName = strings.TrimRight(industryName, ",")
|
|
|
+ industrialManagementId = strings.TrimRight(industrialManagementId, ",")
|
|
|
+
|
|
|
+ //处理勾选了全部行业赛道的用户
|
|
|
+ var allIn string
|
|
|
+ allIn = DoXzsChooseSend(reportMapDetail.ChartPermissionName)
|
|
|
+ if allIn != "" {
|
|
|
+ allInList, err := models.GetCygxXzsChooseSendByAllIn(allIn)
|
|
|
if err != nil && err.Error() != utils.ErrNoRow() {
|
|
|
return err
|
|
|
}
|
|
|
- var industryFllowItems []*models.CygxIndustryFllow
|
|
|
- for _, v := range detailIndustryNameList {
|
|
|
- for _, vUser := range userList {
|
|
|
- //如果用户这个用户没有关注这个产业就进行自动关注
|
|
|
- if mapUserFllowed[fmt.Sprint("uid:", vUser.UserId, "_Industrial:", v.IndustrialManagementId)] == 0 {
|
|
|
- item := new(models.CygxIndustryFllow)
|
|
|
- item.IndustrialManagementId = v.IndustrialManagementId
|
|
|
- item.UserId = vUser.UserId
|
|
|
- item.Email = vUser.Email
|
|
|
- item.Mobile = vUser.Mobile
|
|
|
- item.RealName = vUser.RealName
|
|
|
- item.CompanyId = vUser.CompanyId
|
|
|
- item.CompanyName = vUser.CompanyName
|
|
|
- item.Source = 3
|
|
|
- item.Type = 1
|
|
|
- item.CreateTime = time.Now()
|
|
|
- item.ModifyTime = time.Now()
|
|
|
- industryFllowItems = append(industryFllowItems, item)
|
|
|
+ if len(allInList) > 0 {
|
|
|
+ var allInUserId string
|
|
|
+ for _, v := range allInList {
|
|
|
+ allInUserId += strconv.Itoa(v.UserId) + ","
|
|
|
+ }
|
|
|
+ allInUserId = strings.TrimRight(allInUserId, ",")
|
|
|
+
|
|
|
+ userFllowIndustrialList, err := models.GetUserFllowIndustrialListByUserIdAndIndustrial(allInUserId, industrialManagementId)
|
|
|
+ if err != nil && err.Error() != utils.ErrNoRow() {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ mapUserFllowed := make(map[string]int)
|
|
|
+ for _, v := range userFllowIndustrialList {
|
|
|
+ //用户ID与其关注的产业组成唯一索引,判断是否存在,如果不存在就进行自动关注
|
|
|
+ mapUserFllowed[fmt.Sprint("uid:", v.UserId, "_Industrial:", v.IndustrialManagementId)] = v.UserId
|
|
|
+ }
|
|
|
+ //获取这些allIN用户的的信息进行遍历生成需要插入的数据
|
|
|
+ userList, err := models.GetWxUserListByUserIds(allInUserId)
|
|
|
+ if err != nil && err.Error() != utils.ErrNoRow() {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ var industryFllowItems []*models.CygxIndustryFllow
|
|
|
+ for _, v := range detailIndustryNameList {
|
|
|
+ for _, vUser := range userList {
|
|
|
+ //如果用户这个用户没有关注这个产业就进行自动关注
|
|
|
+ if mapUserFllowed[fmt.Sprint("uid:", vUser.UserId, "_Industrial:", v.IndustrialManagementId)] == 0 {
|
|
|
+ item := new(models.CygxIndustryFllow)
|
|
|
+ item.IndustrialManagementId = v.IndustrialManagementId
|
|
|
+ item.UserId = vUser.UserId
|
|
|
+ item.Email = vUser.Email
|
|
|
+ item.Mobile = vUser.Mobile
|
|
|
+ item.RealName = vUser.RealName
|
|
|
+ item.CompanyId = vUser.CompanyId
|
|
|
+ item.CompanyName = vUser.CompanyName
|
|
|
+ item.Source = 3
|
|
|
+ item.Type = 1
|
|
|
+ item.CreateTime = time.Now()
|
|
|
+ item.ModifyTime = time.Now()
|
|
|
+ industryFllowItems = append(industryFllowItems, item)
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
- err = models.AddCygxIndustryFllowMulti(industryFllowItems)
|
|
|
- if err != nil {
|
|
|
- go utils.SendAlarmMsg("用户关注全部赛道,出现新赛道批量添加失败 ,AddCygxIndustryFllowMulti ErrMsg:"+err.Error(), 2)
|
|
|
+ err = models.AddCygxIndustryFllowMulti(industryFllowItems)
|
|
|
+ if err != nil {
|
|
|
+ go utils.SendAlarmMsg("用户关注全部赛道,出现新赛道批量添加失败 ,AddCygxIndustryFllowMulti ErrMsg:"+err.Error(), 2)
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -1314,7 +1323,19 @@ func DoArticleOnenIdWxTemplateMsg(articleId int) (err error) {
|
|
|
if err != nil {
|
|
|
return err
|
|
|
}
|
|
|
- //return
|
|
|
+
|
|
|
+ //四大行业的行业综述报告,对所有开通了对应行业权限的客户都推送。
|
|
|
+ if articleInfo.ReportType == 1 && chartPermissionId != utils.CE_LUE_ID && chartPermissionId != utils.GU_SHOU_ID {
|
|
|
+ for _, item := range openidPowerList {
|
|
|
+ first := "您关注的赛道,有新的报告发布/更新,欢迎查看"
|
|
|
+ keyword1 := "所属赛道:" + articleInfo.SubCategoryName
|
|
|
+ openIditem := new(models.OpenIdList)
|
|
|
+ openIditem.OpenId = item.OpenId
|
|
|
+ openIditem.UserId = item.UserId
|
|
|
+ SendWxMsgWithArticleUpdate(first, keyword1, articleInfo.Title, articleInfo.PublishDate, articleInfo.Abstract, openIditem, articleId)
|
|
|
+ }
|
|
|
+ return err
|
|
|
+ }
|
|
|
for _, v := range openidPowerList {
|
|
|
mapOpenidPower[v.UserId] = v.OpenId
|
|
|
}
|
|
@@ -1449,27 +1470,23 @@ func DoArticleOnenIdWxTemplateMsg(articleId int) (err error) {
|
|
|
if mapOpenidPushed[k] != "" {
|
|
|
continue
|
|
|
}
|
|
|
- chooseSendtList, err := models.GetCygxXzsChooseSend()
|
|
|
- if err != nil {
|
|
|
- return err
|
|
|
- }
|
|
|
mapUserIdChooseSendType := make(map[int]int)
|
|
|
- for _, v := range chooseSendtList {
|
|
|
- if v.IsRefuse == 1 {
|
|
|
+ for _, vS := range chooseSendtList {
|
|
|
+ if vS.IsRefuse == 1 {
|
|
|
continue
|
|
|
}
|
|
|
//获取选择主客观赛道的用户
|
|
|
if reportMapDetail.PermissionType == 1 {
|
|
|
- if v.IsSubjective == 1 {
|
|
|
- mapUserIdChooseSendType[v.UserId] = v.UserId
|
|
|
+ if vS.IsSubjective == 1 {
|
|
|
+ mapUserIdChooseSendType[vS.UserId] = vS.UserId
|
|
|
}
|
|
|
} else if reportMapDetail.PermissionType == 2 {
|
|
|
- if v.IsObjective == 1 {
|
|
|
- mapUserIdChooseSendType[v.UserId] = v.UserId
|
|
|
+ if vS.IsObjective == 1 {
|
|
|
+ mapUserIdChooseSendType[vS.UserId] = vS.UserId
|
|
|
}
|
|
|
} else {
|
|
|
- if v.IsSubjective == 1 || v.IsObjective == 1 {
|
|
|
- mapUserIdChooseSendType[v.UserId] = v.UserId
|
|
|
+ if vS.IsSubjective == 1 || vS.IsObjective == 1 {
|
|
|
+ mapUserIdChooseSendType[vS.UserId] = vS.UserId
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -1515,14 +1532,6 @@ func DoArticleOnenIdWxTemplateMsg(articleId int) (err error) {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- //fmt.Println("openIditem.UserId:", openIditem.UserId)
|
|
|
- //if _,ok := mapActivityUserId[openIditem.UserId]; ok{
|
|
|
- // first = "您预约的调研,有关联的纪要发布/更新了"
|
|
|
- // keyword1 = industryName
|
|
|
- // SendWxMsgWithArticleUpdate(first, keyword1, keyword2, keyword3, keyword4, openIditem, articleId)
|
|
|
- // delete(mapUserIdChooseSendTypeNoPermission, openIditem.UserId)
|
|
|
- // mapAlreadySend[openIditem.UserId] = openIditem.UserId
|
|
|
- //}
|
|
|
}
|
|
|
|
|
|
//如果有权限而且小助手没有提交过信息的 就做正常推送
|
|
@@ -1539,63 +1548,6 @@ func DoArticleOnenIdWxTemplateMsg(articleId int) (err error) {
|
|
|
mapAlreadySend[openIditem.UserId] = openIditem.UserId
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- //获取提交过推送规则的用户的 openid 并推送模版消息
|
|
|
-
|
|
|
- //mapActivityUserId := make(map[int]string)
|
|
|
- //if articleInfo.IsSummary == 1 {
|
|
|
- // sliceSubjectId, _ := models.GetSubjectIds(articleId)
|
|
|
- // if sliceSubjectId != ""{
|
|
|
- // appointmentList, err := models.GetCygxAppointmentSummaryBySubjectId(sliceSubjectId)
|
|
|
- // if err != nil {
|
|
|
- // fmt.Println("GetCygxAppointmentSummaryListBySubjectId Err:", err.Error())
|
|
|
- // return err
|
|
|
- // }
|
|
|
- // if len(appointmentList) > 0 {
|
|
|
- // for _, v := range appointmentList {
|
|
|
- // fmt.Println("mapActivityUserId:", v.UserId)
|
|
|
- // mapActivityUserId[v.UserId] += v.ActivityName + ","
|
|
|
- // first = "您预约的调研,有关联的纪要发布/更新了"
|
|
|
- // keyword1 = industryName
|
|
|
- // if _, ok := mapAlreadySend[openIditem.UserId]; !ok{
|
|
|
- // SendWxMsgWithArticleUpdate(first, keyword1, keyword2, keyword3, keyword4, openIditem, articleId)
|
|
|
- // delete(mapUserIdChooseSendTypeNoPermission, openIditem.UserId)
|
|
|
- // mapAlreadySend[openIditem.UserId] = openIditem.UserId
|
|
|
- // }
|
|
|
- // }
|
|
|
- // }
|
|
|
- // }
|
|
|
- // //fmt.Println("openIditem.UserId:", openIditem.UserId)
|
|
|
- // //if _,ok := mapActivityUserId[openIditem.UserId]; ok{
|
|
|
- // // first = "您预约的调研,有关联的纪要发布/更新了"
|
|
|
- // // keyword1 = industryName
|
|
|
- // // SendWxMsgWithArticleUpdate(first, keyword1, keyword2, keyword3, keyword4, openIditem, articleId)
|
|
|
- // // delete(mapUserIdChooseSendTypeNoPermission, openIditem.UserId)
|
|
|
- // // mapAlreadySend[openIditem.UserId] = openIditem.UserId
|
|
|
- // //}
|
|
|
- //}
|
|
|
-
|
|
|
- //openIditem := new(models.OpenIdList)
|
|
|
- //first := "您关注的赛道,有新的报告发布/更新,欢迎查看"
|
|
|
- //keyword1 := "所属赛道:" + industryName
|
|
|
- //var ids []string
|
|
|
- //for k, _ := range mapUserIdChooseSendTypeNoPermission {
|
|
|
- // ids = append(ids, strconv.Itoa(k))
|
|
|
- //}
|
|
|
- //if len(ids) > 0 {
|
|
|
- // idStr := strings.Join(ids, ",")
|
|
|
- // openidIlist, err := models.GetCygxXzsChooseSendOpenIdByUserIds(idStr)
|
|
|
- // if err != nil {
|
|
|
- // return err
|
|
|
- // }
|
|
|
- // for _, item := range openidIlist {
|
|
|
- // openIditem.OpenId = item.OpenId
|
|
|
- // openIditem.UserId = item.UserId
|
|
|
- // if _, ok := mapAlreadySend[openIditem.UserId]; !ok {
|
|
|
- // SendWxMsgWithArticleUpdate(first, keyword1, keyword2, keyword3, keyword4, openIditem, articleId)
|
|
|
- // }
|
|
|
- // }
|
|
|
- //}
|
|
|
}
|
|
|
utils.Rc.Put(cacheKey, articleId, time.Hour*12)
|
|
|
return
|
|
@@ -1614,7 +1566,7 @@ func GetSpecialArticleDetailUserPower(user *models.WxUserItem, articleInfo *mode
|
|
|
return
|
|
|
}
|
|
|
if reportMapDetail == nil {
|
|
|
- err = errors.New("GetdetailByCategoryIdP,获取详情失败, Err: " + e.Error())
|
|
|
+ err = errors.New("GetdetailByCategoryIdP,获取详情失败, ")
|
|
|
return
|
|
|
}
|
|
|
fmt.Println(permissionStr)
|
|
@@ -1989,3 +1941,32 @@ func GetReportLinkToArticleid(reportLink string) (articleId int, err error) {
|
|
|
}
|
|
|
return
|
|
|
}
|
|
|
+
|
|
|
+// GetArticleStockMap 获取个股标签所对应的文章ID
|
|
|
+func GetArticleStockMap() (mapResp map[string]int, err error) {
|
|
|
+ defer func() {
|
|
|
+ if err != nil {
|
|
|
+ go utils.SendAlarmMsg("获取个股标签所对应的文章ID失败"+err.Error(), 2)
|
|
|
+ }
|
|
|
+ }()
|
|
|
+ list, err := models.GetArticleStock()
|
|
|
+ if err != nil && err.Error() != utils.ErrNoRow() {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ mapResp = make(map[string]int, 0)
|
|
|
+ if len(list) > 0 {
|
|
|
+ //一对一精准匹配
|
|
|
+ for _, v := range list {
|
|
|
+ sliceSubjects := strings.Split(v.Stock, "/")
|
|
|
+ if len(sliceSubjects) > 0 {
|
|
|
+ for _, vSubject := range sliceSubjects {
|
|
|
+ sliceKuohao := strings.Split(vSubject, "(") //过滤括号
|
|
|
+ sliceXiahuaxian := strings.Split(sliceKuohao[0], "-") //过滤下划线
|
|
|
+ subject := sliceXiahuaxian[0]
|
|
|
+ mapResp[subject] = v.ArticleId
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return
|
|
|
+}
|