Răsfoiți Sursa

Merge branch 'cygx_check_table' of http://8.136.199.33:3000/hongze/hongze_cygx into debug

xingzai 1 an în urmă
părinte
comite
733d5d7e45
73 a modificat fișierele cu 2743 adăugiri și 748 ștergeri
  1. 39 24
      controllers/activity.go
  2. 65 42
      controllers/article.go
  3. 177 0
      controllers/collection.go
  4. 265 241
      controllers/home.go
  5. 3 0
      controllers/morning_meeting.go
  6. 10 1
      controllers/product_interior.go
  7. 11 8
      controllers/report.go
  8. 89 1
      controllers/report_selection.go
  9. 1 0
      controllers/tactics.go
  10. 19 3
      controllers/tag.go
  11. 50 1
      controllers/user.go
  12. 30 2
      models/activity_video.go
  13. 20 0
      models/activity_voice.go
  14. 5 5
      models/admin.go
  15. 77 0
      models/apply_collection.go
  16. 3 0
      models/apply_record.go
  17. 5 0
      models/article.go
  18. 0 16
      models/article_category_mapping.go
  19. 17 17
      models/company.go
  20. 1 1
      models/company/company_approval.go
  21. 1 1
      models/company/company_contract.go
  22. 11 12
      models/company_activity_trip.go
  23. 3 2
      models/company_product.go
  24. 2 2
      models/company_report_permission.go
  25. 29 27
      models/crm_company.go
  26. 33 12
      models/cygx_tag.go
  27. 15 2
      models/db.go
  28. 18 0
      models/industrial_article_group_management.go
  29. 15 0
      models/industrial_article_group_subject.go
  30. 28 0
      models/industry_fllow_log.go
  31. 12 12
      models/micro_roadshow.go
  32. 6 4
      models/product_interior.go
  33. 4 2
      models/report.go
  34. 64 0
      models/report_mapping_category_group.go
  35. 1 2
      models/report_mapping_cygx.go
  36. 32 0
      models/report_mapping_group.go
  37. 4 0
      models/report_selection.go
  38. 24 0
      models/report_selection_log.go
  39. 63 0
      models/report_selection_log_apply.go
  40. 37 0
      models/resource_data.go
  41. 136 0
      models/resource_data_industrial_group_management.go
  42. 5 5
      models/seller.go
  43. 22 22
      models/send_company_user.go
  44. 38 30
      models/user.go
  45. 5 4
      models/user_invitee.go
  46. 2 1
      models/user_label.go
  47. 66 52
      models/user_record.go
  48. 2 2
      models/user_template_record.go
  49. 1 1
      models/wechat.go
  50. 45 17
      models/wx_template_msg.go
  51. 82 63
      models/wx_user.go
  52. 38 39
      models/wx_user_code.go
  53. 2 2
      models/wx_user_log.go
  54. 14 12
      models/wx_user_white.go
  55. 45 0
      routers/commentsRouter.go
  56. 5 0
      routers/router.go
  57. 43 20
      services/activity.go
  58. 53 9
      services/activity_special.go
  59. 61 0
      services/activity_video.go
  60. 42 7
      services/article.go
  61. 94 0
      services/collection.go
  62. 31 0
      services/industry_fllow.go
  63. 1 1
      services/init_10.5.1.go
  64. 55 7
      services/product_interior.go
  65. 147 0
      services/report_mapping_category_group.go
  66. 70 0
      services/report_selection.go
  67. 153 1
      services/resource_data.go
  68. 144 0
      services/tag.go
  69. 3 3
      services/task.go
  70. 1 1
      services/user_label.go
  71. 21 1
      services/wx_template_msg.go
  72. 9 7
      utils/config.go
  73. 18 1
      utils/constants.go

+ 39 - 24
controllers/activity.go

@@ -536,16 +536,23 @@ func (this *ActivityCoAntroller) Detail() {
 		//处理按钮是否展示问题
 		resp.Detail = services.ActivityButtonShow(activityInfo)
 	} else {
-		hasPermission, sellerName, sellerMobile, popupMsg, err := services.GetUserHasPermissionActivity(user, activityInfo)
-		if err != nil {
-			br.Msg = "获取信息失败"
-			br.ErrMsg = "判断是否已申请过试用失败,Err:" + err.Error()
-			return
+		//用户未登录(绑定登录信息)的时候也能展示 v12.2.1
+		if user.UserId == 0 {
+			resp.HasPermission = 1
+			resp.Detail = services.ActivityButtonShow(activityInfo)
+		} else {
+			hasPermission, sellerName, sellerMobile, popupMsg, err := services.GetUserHasPermissionActivity(user, activityInfo)
+			if err != nil {
+				br.Msg = "获取信息失败"
+				br.ErrMsg = "判断是否已申请过试用失败,Err:" + err.Error()
+				return
+			}
+			resp.PopupMsg = popupMsg
+			resp.HasPermission = hasPermission
+			resp.SellerName = sellerName
+			resp.SellerMobile = sellerMobile
 		}
-		resp.PopupMsg = popupMsg
-		resp.HasPermission = hasPermission
-		resp.SellerName = sellerName
-		resp.SellerMobile = sellerMobile
+
 	}
 
 	collectCount1, err := models.GetActivityVoiceCollectCount(uid, activityId)
@@ -1783,9 +1790,12 @@ func (this *ActivityCoAntroller) ActivityListNew() {
 
 		conditioninit += ` AND IF (	 art.active_state = 3, art.chart_permission_id != ` + strconv.Itoa(utils.CHART_PERMISSION_ID_YANXUAN) + `, 1 = 1 ) ` //V 11.0 研选活动结束后就不在已结束页面展示了
 	}
-	//行业名称
+
+	//行业名称 易董过来的会,按照 副行业来筛选
 	if len(chartPermissionIds) > 0 {
-		conditioninit += ` AND art.chart_permission_id  IN (` + chartPermissionIds + `)`
+		//conditioninit += ` AND art.chart_permission_id  IN (` + chartPermissionIds + `)`
+		conditioninit += `  AND IF ( art.yidong_activity_id != '' , art.chart_permission_id_deputy  IN (` + chartPermissionIds + `) ,1=1 ) `
+		conditioninit += `  AND IF ( art.yidong_activity_id = '' , art.chart_permission_id  IN (` + chartPermissionIds + `) ,1=1 ) `
 	}
 	//哪一天
 	if whichDay != "" {
@@ -2288,8 +2298,11 @@ func (this *ActivityCoAntroller) LabelTypeListV5() {
 		conditioninit += ` AND IF (	 art.active_state = 3, art.chart_permission_id != ` + strconv.Itoa(utils.CHART_PERMISSION_ID_YANXUAN) + `, 1 = 1 ) ` //V 11.0 研选活动结束后就不在已结束页面展示了
 	}
 	//行业名称
+	//易董过来的会,按照 副行业来筛选
 	if len(chartPermissionIds) > 0 {
-		conditioninit += ` AND art.chart_permission_id  IN (` + chartPermissionIds + `)`
+		//conditioninit += ` AND art.chart_permission_id  IN (` + chartPermissionIds + `)`
+		conditioninit += `  AND IF ( art.yidong_activity_id != '' , art.chart_permission_id_deputy  IN (` + chartPermissionIds + `) ,1=1 ) `
+		conditioninit += `  AND IF ( art.yidong_activity_id = '' , art.chart_permission_id  IN (` + chartPermissionIds + `) ,1=1 ) `
 	}
 	//哪一天
 	if whichDay != "" {
@@ -3802,7 +3815,7 @@ func (this *ActivityCoAntroller) ActivityListSearch() {
 	if source == 1 {
 		condition += ` AND art.yidong_activity_id = '' `
 	}
-	condition += ` AND art.is_limit_people = 1 AND art.publish_status = 1 ` + conditionActivity
+	condition += ` AND art.publish_status = 1 ` + conditionActivity
 	list, total, err := services.GetActivitySpecialSearcheList(user, condition, startSize, pageSize, keyWord)
 	if err != nil {
 		br.Msg = "获取失败"
@@ -3857,7 +3870,7 @@ func (this *ActivityCoAntroller) OverActivityList() {
 		whichDay = ""
 	}
 	resp := new(models.GetCygxActivityLabelListRep)
-	if user.CompanyId <= 1 {
+	if user.CompanyId <= 1 && user.UserId > 0 {
 		resp.List = make([]*models.CygxActivityLabelList, 0)
 		br.Ret = 200
 		br.Success = true
@@ -3927,16 +3940,18 @@ func (this *ActivityCoAntroller) OverActivityList() {
 	sortTime = ` activity_time DESC `
 	//如果是永续的就按照普通的权限逻辑来查,如果不是就按照升级的逻辑来查
 
-	companyDetail, err := models.GetCompanyDetailByIdGroupTrip(user.CompanyId)
-	if err != nil {
-		br.Msg = "获取失败"
-		br.ErrMsg = "获取失败,Err:" + err.Error()
-		return
-	}
-	if companyDetail.Status == "永续" {
-		conditionSpecial, err = services.HandleActivityLabelSpecialPermission(user)
-	} else {
-		conditionSpecial, _, err = services.HandleActivityLabelSpecialTripPermission(user)
+	if user.UserId > 0 { // v12.2.1
+		companyDetail, err := models.GetCompanyDetailByIdGroupTrip(user.CompanyId)
+		if err != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取失败,Err:" + err.Error()
+			return
+		}
+		if companyDetail.Status == "永续" {
+			conditionSpecial, err = services.HandleActivityLabelSpecialPermission(user)
+		} else {
+			conditionSpecial, _, err = services.HandleActivityLabelSpecialTripPermission(user)
+		}
 	}
 	if err != nil {
 		br.Msg = "获取失败"

+ 65 - 42
controllers/article.go

@@ -66,6 +66,7 @@ func (this *ArticleController) Detail() {
 		return
 	}
 	detail := new(models.ArticleDetail)
+	//detailInit := new(models.ArticleDetail) // 初始化的文章信息,用来处理body 内容回显
 	hasPermission := 0
 	var haveResearch bool
 	//判断是否已经申请过
@@ -82,6 +83,20 @@ func (this *ArticleController) Detail() {
 		br.ErrMsg = "获取信息失败,Err:" + err.Error()
 		return
 	}
+
+	detail.PublishDate = utils.TimeRemoveHms2(detail.PublishDate)
+	detail.Body = html.UnescapeString(detail.Body)
+	detail.Body = strings.Replace(detail.Body, "<p data-f-id=\"pbf\" style=\"text-align: center; font-size: 14px; margin-top: 30px; opacity: 0.65; font-family: sans-serif;\">Powered by <a href=\"https://www.froala.com/wysiwyg-editor?pb=1\" title=\"Froala Editor\">Froala Editor</a></p>", "", -1)
+	detail.Body = strings.Replace(detail.Body, "pre", "div", -1)
+	detail.Abstract = html.UnescapeString(detail.Abstract)
+	//detail.Abstract, _ = services.GetReportContentTextSubNew(detail.Abstract)
+	//作者头像
+	if detail.DepartmentId > 0 {
+		departmentDetail, err := models.GetArticleDepartmentDateilById(detail.DepartmentId)
+		if err == nil {
+			detail.DepartmentImgUrl = departmentDetail.ImgUrl
+		}
+	}
 	lyjhTypeMap, _ := services.GetLyjhTypeMap()
 	if _, ok := lyjhTypeMap[detail.CategoryId]; ok {
 		detail.IsRoadShow = true
@@ -117,6 +132,7 @@ func (this *ArticleController) Detail() {
 	}
 	articleCollectMap, _ := services.GetCygxArticleCollectMap(user.UserId)
 	detail.IsCollect = articleCollectMap[detail.ArticleId]
+	//detailInit = detail
 	if isSendWx == 1 {
 		var condition string
 		var pars []interface{}
@@ -195,12 +211,6 @@ func (this *ArticleController) Detail() {
 			return
 		}
 
-		detail.PublishDate = utils.TimeRemoveHms2(detail.PublishDate)
-		detail.Body = html.UnescapeString(detail.Body)
-		detail.Body = strings.Replace(detail.Body, "<p data-f-id=\"pbf\" style=\"text-align: center; font-size: 14px; margin-top: 30px; opacity: 0.65; font-family: sans-serif;\">Powered by <a href=\"https://www.froala.com/wysiwyg-editor?pb=1\" title=\"Froala Editor\">Froala Editor</a></p>", "", -1)
-		detail.Body = strings.Replace(detail.Body, "pre", "div", -1)
-		//detail.Abstract = html.UnescapeString(detail.Abstract)
-		detail.Abstract, _ = services.GetReportContentTextSubNew(detail.Abstract)
 		if companyPermission == "" {
 			if applyCount > 0 {
 				hasPermission = 5
@@ -209,7 +219,7 @@ func (this *ArticleController) Detail() {
 			}
 			goto Loop
 		} else {
-			var articlePermissionPermissionName string
+			var articlePermissionName string
 			if detail.CategoryId > 0 {
 				articlePermission, err := models.GetArticlePermission(detail.CategoryId)
 				if err != nil {
@@ -222,13 +232,13 @@ func (this *ArticleController) Detail() {
 					br.ErrMsg = "报告权限不存在,Err:" + strconv.Itoa(uid) + ";articleId" + strconv.Itoa(articleId)
 					return
 				}
-				articlePermissionPermissionName = articlePermission.PermissionName
+				articlePermissionName = articlePermission.PermissionName
 			} else {
-				articlePermissionPermissionName = detail.CategoryName
+				articlePermissionName = detail.CategoryName
 			}
 
 			var hasPersion bool
-			slice := strings.Split(articlePermissionPermissionName, ",")
+			slice := strings.Split(articlePermissionName, ",")
 			for _, v := range slice {
 				if strings.Contains(companyPermission, v) {
 					hasPersion = true
@@ -246,30 +256,35 @@ func (this *ArticleController) Detail() {
 			if userType == 1 && strings.Contains(detail.CategoryName, "研选") {
 				hasPersion = false
 			}
-			if detail.IsReport == 1 {
-				detailCategory, err := models.GetdetailByCategoryIdSando(detail.CategoryId)
-				if err != nil && err.Error() != utils.ErrNoRow() {
-					br.Msg = "获取信息失败"
-					br.ErrMsg = "获取信息失败,Err:" + err.Error() + "categoryID 不存在:" + strconv.Itoa(detail.CategoryId)
-					return
-				}
-				permissionStr, err := models.GetCompanyPermissionByUser(user.CompanyId)
-				if err != nil {
-					br.Msg = "获取信息失败"
-					br.ErrMsg = "获取客户信息失败,Err:" + err.Error()
-					return
-				}
-				if detailCategory != nil {
-					if detailCategory.PermissionType == 1 {
-						if !strings.Contains(permissionStr, detailCategory.ChartPermissionName+"(主观)") {
-							hasPersion = false
-						}
-					} else if detailCategory.PermissionType == 2 {
-						if !strings.Contains(permissionStr, detailCategory.ChartPermissionName+"(客观)") {
-							hasPersion = false
-						}
-					}
-				}
+			//if detail.IsReport == 1 {
+			//detailCategory, err := models.GetdetailByCategoryIdSando(detail.CategoryId)
+			//if err != nil && err.Error() != utils.ErrNoRow() {
+			//	br.Msg = "获取信息失败"
+			//	br.ErrMsg = "获取信息失败,Err:" + err.Error() + "categoryID 不存在:" + strconv.Itoa(detail.CategoryId)
+			//	return
+			//}
+			//permissionStr, err := models.GetCompanyPermissionByUser(user.CompanyId)
+			//if err != nil {
+			//	br.Msg = "获取信息失败"
+			//	br.ErrMsg = "获取客户信息失败,Err:" + err.Error()
+			//	return
+			//}
+			//if detailCategory != nil {
+			//	if detailCategory.PermissionType == 1 {
+			//		if !strings.Contains(permissionStr, detailCategory.ChartPermissionName+"(主观)") {
+			//			hasPersion = false
+			//		}
+			//	} else if detailCategory.PermissionType == 2 {
+			//		if !strings.Contains(permissionStr, detailCategory.ChartPermissionName+"(客观)") {
+			//			hasPersion = false
+			//		}
+			//	}
+			//}
+			//}
+
+			//大行业通过权限校验,再校验主客观权限。只有医药、消费、科技、智造,才会校验主客观权限
+			if hasPersion && utils.InArrayByStr([]string{utils.YI_YAO_NAME, utils.XIAO_FEI_NAME, utils.KE_JI_NAME, utils.ZHI_ZAO_NAME}, articlePermissionName) {
+				hasPersion = services.CheckArticlePermissionType(articleId, user)
 			}
 			if hasPersion {
 				hasPermission = 1
@@ -330,13 +345,7 @@ func (this *ArticleController) Detail() {
 			}
 		}
 		detail.SellerList = sellerList
-		//作者头像
-		if detail.DepartmentId > 0 {
-			departmentDetail, err := models.GetArticleDepartmentDateilById(detail.DepartmentId)
-			if err == nil {
-				detail.DepartmentImgUrl = departmentDetail.ImgUrl
-			}
-		}
+
 	} else { //潜在客户
 		if applyCount > 0 {
 			hasPermission = 5
@@ -345,7 +354,7 @@ func (this *ArticleController) Detail() {
 		}
 	}
 Loop:
-	if hasPermission != 1 {
+	if hasPermission != 1 && user.UserId > 0 {
 		detail.Body = ""
 		detail.BodyText = ""
 	} else {
@@ -428,6 +437,20 @@ Loop:
 	}
 	resp.HasPermission = hasPermission
 	resp.HaveResearch = haveResearch
+	if user.UserId == 0 {
+		resp.HasPermission = 1
+		if detail.UpdateFrequency == "daily" {
+			detail.Frequency = "日度"
+		} else if detail.UpdateFrequency == "weekly" {
+			detail.Frequency = "周度"
+		} else if detail.UpdateFrequency == "monthly" {
+			detail.Frequency = "月度"
+		} else if detail.UpdateFrequency == "quarterly" {
+			detail.Frequency = "季度"
+		} else if detail.UpdateFrequency == "yearly" {
+			detail.Frequency = "年度"
+		}
+	}
 	resp.Detail = detail
 	if user.Mobile != "" {
 		resp.Mobile = user.Mobile

+ 177 - 0
controllers/collection.go

@@ -0,0 +1,177 @@
+package controllers
+
+import (
+	"encoding/json"
+	"hongze/hongze_cygx/models"
+	"hongze/hongze_cygx/services"
+	"hongze/hongze_cygx/utils"
+	"time"
+)
+
+// Collection
+type CollectionController struct {
+	BaseAuthController
+}
+
+// @Title 精选看板、路演banner列表
+// @Description 精选看板、路演banner列表接口
+// @Success Ret=200 {object} cygx.CollectionBannerListResp
+// @router /banner/list [get]
+func (this *CollectionController) BannerList() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	user := this.User
+	if user == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+
+	resp := new(models.CollectionBannerListResp)
+	var listA []*models.CollectionBannerResp
+	listB := new(models.CollectionBannerResp)
+	listA = []*models.CollectionBannerResp{
+		&models.CollectionBannerResp{Title: "", IndexImg: "https://hzstatic.hzinsights.com/cygx/banner/xcx/lyhf.png", Path: "/reportPages/internalDetials/internalDetials?id=43"},
+	}
+	listB.Title = ""
+	listB.IndexImg = "https://hzstatic.hzinsights.com/cygx/banner/xcx/jxkb.png"
+	listB.IsShowSustainable = true
+	resp.ListA = listA
+	resp.ListB = listB
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+}
+
+// @Title 精选看板跳转详情地址
+// @Description 精选看板跳转详情地址接口
+// @Success Ret=200 {object} cygx.CollectionBannerListResp
+// @router /detail [get]
+func (this *CollectionController) Detail() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	user := this.User
+	if user == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+	resp := new(models.CollectionDetailResp)
+	if user.Mobile != "" {
+		userTokenByMobile, _ := services.GetUserTokenByMobile(user.Mobile)
+		resp.HttpUrl = utils.COLLECTIONS_INFO_HTTP_URL + "?token=" + userTokenByMobile
+	} else {
+		resp.HttpUrl = utils.COLLECTIONS_INFO_HTTP_URL
+	}
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+}
+
+// @Title 提交精选看板申请接口
+// @Description 提交精选看板申请接口
+// @Param	request	body cygx.CygxBannerIdReq true "type json string"
+// @Success 200 Ret=200 提交成功
+// @router /apply/add [post]
+func (this *CollectionController) ApplyAdd() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	user := this.User
+	if user == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,用户信息为空"
+		br.Ret = 408
+		return
+	}
+	var req models.ApplyCollectionReq
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+	content := req.Content
+	if content == "" {
+		br.Msg = "内容不能为空"
+		br.ErrMsg = "内容不能为空"
+		return
+	}
+	item := new(models.CygxApplyCollection)
+	item.UserId = user.UserId
+	item.CreateTime = time.Now()
+	item.ModifyTime = time.Now()
+	item.Mobile = user.Mobile
+	item.Email = user.Email
+	item.CompanyId = user.CompanyId
+	item.CompanyName = user.CompanyName
+	item.Content = content
+	item.RegisterPlatform = utils.REGISTER_PLATFORM
+	sellerItem, err := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		return
+	}
+	item.RealName = user.RealName
+	if sellerItem != nil {
+		item.SellerName = sellerItem.RealName
+	}
+	newId, err := models.AddCygxApplyCollection(item)
+	services.SendCygxApplyCollectionTemplateMsg(user, content, int(newId))
+	if err != nil {
+		br.Msg = "申请失败"
+		br.ErrMsg = "申请失败,Err:" + err.Error()
+		return
+	}
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "记录成功"
+}
+
+// @Title  获取申请详情
+// @Description 获取申请详情接口
+// @Param   ApplyCollectionId   query   int  true       "ID"
+// @Success Ret=200 {object} cygx.CygxApplyCollectionDetailResp
+// @router /apply/detail [get]
+func (this *CollectionController) ApplyDetail() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	user := this.User
+	if user == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,用户信息为空"
+		br.Ret = 408
+		return
+	}
+	resp := new(models.CygxApplyCollectionDetailResp)
+	applyCollectionId, _ := this.GetInt("ApplyCollectionId")
+	if applyCollectionId < 1 {
+		br.Msg = "请输入详情ID"
+		return
+	}
+	detail, err := models.GetCygxApplyCollectionDetail(applyCollectionId)
+	if err != nil {
+		br.Msg = "详情不存在"
+		br.ErrMsg = "获取失败,Err:" + err.Error()
+		return
+	}
+	resp.Detail = detail
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+}

+ 265 - 241
controllers/home.go

@@ -625,226 +625,251 @@ func (this *HomeController) NewList() {
 		return
 	}
 
-	var articleTypes, activityTypes, industries, subjectNames string
-	articleTypeCondSlice := make([]string, 0)
-	activityTypesCondSlice := make([]string, 0)
-	industriesCondSlice := make([]string, 0)
-	subjectNamesSlice := make([]string, 0)
-	articleTypeSlice := make([]string, 0)
-	if tagIds != "" {
-		tags := strings.Split(tagIds, ",")
-		for _, tagIdStr := range tags {
-			tagId, err := strconv.Atoi(tagIdStr)
-			if err != nil {
-				br.Msg = "转换失败"
-				br.ErrMsg = "tagid转换失败,Err:" + err.Error()
-				return
-			}
-			tagInfo, err := models.GetCygxTagByTagId(tagId)
-			if err != nil && err.Error() != utils.ErrNoRow() {
-				br.Msg = "获取失败"
-				br.ErrMsg = "GetCygxTagByTagId,Err:" + err.Error()
-				return
-			}
-			// 只有AB或CD的情况
-			if (tagInfo.ActivityTypes == "" && tagInfo.ArticleTypes == "") || (tagInfo.Industries == "" && tagInfo.SubjectNames == "") {
-				if tagInfo.ActivityTypes != "" {
-					activityTypes += tagInfo.ActivityTypes + ","
-				}
-				if tagInfo.ArticleTypes != "" {
-					articleTypes += tagInfo.ArticleTypes + ","
-				}
-				if tagInfo.Industries != "" {
-					industries += tagInfo.Industries + ","
-				}
-				if tagInfo.SubjectNames != "" {
-					subjectNames += tagInfo.SubjectNames + ","
-				}
-			} else {
-				// ABCD都有的情况
-				// 每一个tag都单独处理
-				var articleType, activityType, industry, subjectName string
-
-				if tagInfo.ActivityTypes != "" {
-					activityType = tagInfo.ActivityTypes
-				}
-				if tagInfo.ArticleTypes != "" {
-					articleType = tagInfo.ArticleTypes
-				}
-				if tagInfo.Industries != "" {
-					industry = tagInfo.Industries
-				}
-				if tagInfo.SubjectNames != "" {
-					subjectName = tagInfo.SubjectNames
-				}
-				articleTypeCond := ``
-				var articleTypeStr string
-				if articleType != "" {
-					articleTypeSlice := strings.Split(articleType, ",")
-					newArticleTypeSlice := make([]string, 0)
-					for _, s := range articleTypeSlice {
-						newArticleTypeSlice = append(newArticleTypeSlice, "'"+s+"'")
-					}
-					articleTypeStr = strings.Join(newArticleTypeSlice, ",")
-					articleTypeStr = strings.TrimRight(articleTypeStr, ",")
-					articleTypeCond += ` AND (art.sub_category_name In (` + articleTypeStr + `) OR (art.article_type_name In (` + articleTypeStr + `) AND art.article_type_name <> '路演精华' AND art.article_type_id <> 0 ) ) `
-				}
-				activityTypesCond := ``
-				if activityType != "" {
-					activityTypeSlice := strings.Split(activityType, ",")
-					newActivityTypeSlice := make([]string, 0)
-					for _, s := range activityTypeSlice {
-						newActivityTypeSlice = append(newActivityTypeSlice, "'"+s+"'")
-					}
-					activityTypeStr := strings.Join(newActivityTypeSlice, ",")
-					activityTypeStr = strings.TrimRight(activityTypeStr, ",")
-					activityTypesCond += ` AND act.activity_type_name In (` + activityTypeStr + `) `
-				}
-				industriesCond := ``
-				var industryStr string
-				if industry != "" {
-					industrieSlice := strings.Split(industry, ",")
-					newIndustrieSlice := make([]string, 0)
-					for _, s := range industrieSlice {
-						newIndustrieSlice = append(newIndustrieSlice, "'"+s+"'")
-					}
-					industryStr = strings.Join(newIndustrieSlice, ",")
-					industryStr = strings.TrimRight(industryStr, ",")
-					industriesCond += ` AND im.industry_name In (` + industryStr + `) `
-				}
-				subjectNamesCond := ``
-				var subjectNameStr string
-				if subjectName != "" {
-					subjectNameSlice := strings.Split(subjectName, ",")
-					newSubjectNameSlice := make([]string, 0)
-					for _, s := range subjectNameSlice {
-						newSubjectNameSlice = append(newSubjectNameSlice, "'"+s+"'")
-					}
-					subjectNameStr = strings.Join(newSubjectNameSlice, ",")
-					subjectNameStr = strings.TrimRight(subjectNameStr, ",")
-					subjectNamesCond += ` AND cis.subject_name In (` + subjectNameStr + `) `
-				}
-				articleTypeCondSlice = append(articleTypeCondSlice, articleTypeCond)
-				activityTypesCondSlice = append(activityTypesCondSlice, activityTypesCond)
-				industriesCondSlice = append(industriesCondSlice, industryStr)
-				subjectNamesSlice = append(subjectNamesSlice, subjectNameStr)
-				articleTypeSlice = append(articleTypeSlice, articleType)
-			}
-
-		}
-	}
+	//var articleTypes, activityTypes, industries, subjectNames string
+	//articleTypeCondSlice := make([]string, 0)
+	//activityTypesCondSlice := make([]string, 0)
+	//industriesCondSlice := make([]string, 0)
+	//subjectNamesSlice := make([]string, 0)
+	//articleTypeSlice := make([]string, 0)
+	//if tagIds != "" {
+	//	tags := strings.Split(tagIds, ",")
+	//	for _, tagIdStr := range tags {
+	//		tagId, err := strconv.Atoi(tagIdStr)
+	//		if err != nil {
+	//			br.Msg = "转换失败"
+	//			br.ErrMsg = "tagid转换失败,Err:" + err.Error()
+	//			return
+	//		}
+	//		tagInfo, err := models.GetCygxTagByTagId(tagId)
+	//		if err != nil && err.Error() != utils.ErrNoRow() {
+	//			br.Msg = "获取失败"
+	//			br.ErrMsg = "GetCygxTagByTagId,Err:" + err.Error()
+	//			return
+	//		}
+	//		// 只有AB或CD的情况
+	//		if (tagInfo.ActivityTypes == "" && tagInfo.ArticleTypes == "") || (tagInfo.Industries == "" && tagInfo.SubjectNames == "") {
+	//			if tagInfo.ActivityTypes != "" {
+	//				activityTypes += tagInfo.ActivityTypes + ","
+	//			}
+	//			if tagInfo.ArticleTypes != "" {
+	//				articleTypes += tagInfo.ArticleTypes + ","
+	//			}
+	//			if tagInfo.Industries != "" {
+	//				industries += tagInfo.Industries + ","
+	//			}
+	//			if tagInfo.SubjectNames != "" {
+	//				subjectNames += tagInfo.SubjectNames + ","
+	//			}
+	//		} else {
+	//			// ABCD都有的情况
+	//			// 每一个tag都单独处理
+	//			var articleType, activityType, industry, subjectName string
+	//
+	//			if tagInfo.ActivityTypes != "" {
+	//				activityType = tagInfo.ActivityTypes
+	//			}
+	//			if tagInfo.ArticleTypes != "" {
+	//				articleType = tagInfo.ArticleTypes
+	//			}
+	//			if tagInfo.Industries != "" {
+	//				industry = tagInfo.Industries
+	//			}
+	//			if tagInfo.SubjectNames != "" {
+	//				subjectName = tagInfo.SubjectNames
+	//			}
+	//			articleTypeCond := ``
+	//			var articleTypeStr string
+	//			if articleType != "" {
+	//				articleTypeSlice := strings.Split(articleType, ",")
+	//				newArticleTypeSlice := make([]string, 0)
+	//				for _, s := range articleTypeSlice {
+	//					newArticleTypeSlice = append(newArticleTypeSlice, "'"+s+"'")
+	//				}
+	//				articleTypeStr = strings.Join(newArticleTypeSlice, ",")
+	//				articleTypeStr = strings.TrimRight(articleTypeStr, ",")
+	//				articleTypeCond += ` AND (art.sub_category_name In (` + articleTypeStr + `) OR (art.article_type_name In (` + articleTypeStr + `) AND art.article_type_name <> '路演精华' AND art.article_type_id <> 0 ) ) `
+	//			}
+	//			activityTypesCond := ``
+	//			if activityType != "" {
+	//				activityTypeSlice := strings.Split(activityType, ",")
+	//				newActivityTypeSlice := make([]string, 0)
+	//				for _, s := range activityTypeSlice {
+	//					newActivityTypeSlice = append(newActivityTypeSlice, "'"+s+"'")
+	//				}
+	//				activityTypeStr := strings.Join(newActivityTypeSlice, ",")
+	//				activityTypeStr = strings.TrimRight(activityTypeStr, ",")
+	//				activityTypesCond += ` AND act.activity_type_name In (` + activityTypeStr + `) `
+	//			}
+	//			industriesCond := ``
+	//			var industryStr string
+	//			if industry != "" {
+	//				industrieSlice := strings.Split(industry, ",")
+	//				newIndustrieSlice := make([]string, 0)
+	//				for _, s := range industrieSlice {
+	//					newIndustrieSlice = append(newIndustrieSlice, "'"+s+"'")
+	//				}
+	//				industryStr = strings.Join(newIndustrieSlice, ",")
+	//				industryStr = strings.TrimRight(industryStr, ",")
+	//				industriesCond += ` AND im.industry_name In (` + industryStr + `) `
+	//			}
+	//			subjectNamesCond := ``
+	//			var subjectNameStr string
+	//			if subjectName != "" {
+	//				subjectNameSlice := strings.Split(subjectName, ",")
+	//				newSubjectNameSlice := make([]string, 0)
+	//				for _, s := range subjectNameSlice {
+	//					newSubjectNameSlice = append(newSubjectNameSlice, "'"+s+"'")
+	//				}
+	//				subjectNameStr = strings.Join(newSubjectNameSlice, ",")
+	//				subjectNameStr = strings.TrimRight(subjectNameStr, ",")
+	//				subjectNamesCond += ` AND cis.subject_name In (` + subjectNameStr + `) `
+	//			}
+	//			articleTypeCondSlice = append(articleTypeCondSlice, articleTypeCond)
+	//			activityTypesCondSlice = append(activityTypesCondSlice, activityTypesCond)
+	//			industriesCondSlice = append(industriesCondSlice, industryStr)
+	//			subjectNamesSlice = append(subjectNamesSlice, subjectNameStr)
+	//			articleTypeSlice = append(articleTypeSlice, articleType)
+	//		}
+	//
+	//	}
+	//}
+	//
+	//// 先拿abdc都有的tag取合集的ids。。。
+	//soloTagArticleIds, soloTagActivityIds, soloMmIds, err := models.GetCygxCygxArticleListByConditionSoloTag(articleTypeCondSlice, activityTypesCondSlice, industriesCondSlice, subjectNamesSlice, articleTypeSlice)
+	//if err != nil && err.Error() != utils.ErrNoRow() {
+	//	br.Msg = "获取失败"
+	//	br.ErrMsg = "获取活动权限数据失败,Err:" + err.Error()
+	//	return
+	//}
+	//
+	//articleTypes = strings.TrimRight(articleTypes, ",")
+	//activityTypes = strings.TrimRight(activityTypes, ",")
+	//industries = strings.TrimRight(industries, ",")
+	//subjectNames = strings.TrimRight(subjectNames, ",")
+	//
+	//articleTypesCond := ``
+	//var articleTypeStr string
+	//if articleTypes != "" {
+	//	articleTypeSlice := strings.Split(articleTypes, ",")
+	//	newArticleTypeSlice := make([]string, 0)
+	//	for _, s := range articleTypeSlice {
+	//		newArticleTypeSlice = append(newArticleTypeSlice, "'"+s+"'")
+	//	}
+	//	articleTypeStr = strings.Join(newArticleTypeSlice, ",")
+	//	articleTypeStr = strings.TrimRight(articleTypeStr, ",")
+	//	articleTypesCond += ` AND (art.sub_category_name In (` + articleTypeStr + `) OR (art.article_type_name In (` + articleTypeStr + `) AND art.article_type_name <> '路演精华' AND art.article_type_id <> 0 ) ) `
+	//}
+	//activityTypesCond := ``
+	//if activityTypes != "" {
+	//	activityTypeSlice := strings.Split(activityTypes, ",")
+	//	newActivityTypeSlice := make([]string, 0)
+	//	for _, s := range activityTypeSlice {
+	//		newActivityTypeSlice = append(newActivityTypeSlice, "'"+s+"'")
+	//	}
+	//	activityTypeStr := strings.Join(newActivityTypeSlice, ",")
+	//	activityTypeStr = strings.TrimRight(activityTypeStr, ",")
+	//	activityTypesCond += ` AND act.activity_type_name In (` + activityTypeStr + `) `
+	//}
+	//industriesCond := ``
+	//var industryStr string
+	//if industries != "" {
+	//	industrieSlice := strings.Split(industries, ",")
+	//	newIndustrieSlice := make([]string, 0)
+	//	for _, s := range industrieSlice {
+	//		newIndustrieSlice = append(newIndustrieSlice, "'"+s+"'")
+	//	}
+	//	industryStr = strings.Join(newIndustrieSlice, ",")
+	//	industryStr = strings.TrimRight(industryStr, ",")
+	//	industriesCond += ` AND im.industry_name In (` + industryStr + `) `
+	//}
+	//subjectNamesCond := ``
+	//var subjectNameStr string
+	//if subjectNames != "" {
+	//	subjectNameSlice := strings.Split(subjectNames, ",")
+	//	newSubjectNameSlice := make([]string, 0)
+	//	for _, s := range subjectNameSlice {
+	//		newSubjectNameSlice = append(newSubjectNameSlice, "'"+s+"'")
+	//	}
+	//	subjectNameStr = strings.Join(newSubjectNameSlice, ",")
+	//	subjectNameStr = strings.TrimRight(subjectNameStr, ",")
+	//	subjectNamesCond += ` AND cis.subject_name In (` + subjectNameStr + `) `
+	//}
+	//
+	//var tagArticleIds, tagActivityIds, mmIds string
+	//if articleTypesCond != "" || activityTypesCond != "" || industryStr != "" || subjectNameStr != "" {
+	//	tagArticleIds, tagActivityIds, mmIds, err = models.GetCygxCygxArticleListByCondition(articleTypesCond, activityTypesCond, industryStr, subjectNameStr, articleTypeStr)
+	//	if err != nil && err.Error() != utils.ErrNoRow() {
+	//		br.Msg = "获取失败"
+	//		br.ErrMsg = "获取单个标签ids失败,Err:" + err.Error()
+	//		return
+	//	}
+	//}
+	//
+	//if soloTagArticleIds != "" {
+	//	if tagArticleIds != "" {
+	//		tagArticleIds += "," + soloTagArticleIds
+	//	} else {
+	//		tagArticleIds = soloTagArticleIds
+	//	}
+	//}
+	//if soloTagActivityIds != "" {
+	//	if tagActivityIds != "" {
+	//		tagActivityIds += "," + soloTagActivityIds
+	//	} else {
+	//		tagActivityIds = soloTagActivityIds
+	//	}
+	//}
+	//if soloMmIds != "" {
+	//	if mmIds != "" {
+	//		mmIds += "," + soloMmIds
+	//	} else {
+	//		mmIds = soloMmIds
+	//	}
+	//}
 
-	// 先拿abdc都有的tag取合集的ids。。。
-	soloTagArticleIds, soloTagActivityIds, soloMmIds, err := models.GetCygxCygxArticleListByConditionSoloTag(articleTypeCondSlice, activityTypesCondSlice, industriesCondSlice, subjectNamesSlice, articleTypeSlice)
-	if err != nil && err.Error() != utils.ErrNoRow() {
-		br.Msg = "获取失败"
-		br.ErrMsg = "获取活动权限数据失败,Err:" + err.Error()
-		return
-	}
+	//fmt.Println("condition:",condition)
 
-	articleTypes = strings.TrimRight(articleTypes, ",")
-	activityTypes = strings.TrimRight(activityTypes, ",")
-	industries = strings.TrimRight(industries, ",")
-	subjectNames = strings.TrimRight(subjectNames, ",")
-
-	articleTypesCond := ``
-	var articleTypeStr string
-	if articleTypes != "" {
-		articleTypeSlice := strings.Split(articleTypes, ",")
-		newArticleTypeSlice := make([]string, 0)
-		for _, s := range articleTypeSlice {
-			newArticleTypeSlice = append(newArticleTypeSlice, "'"+s+"'")
-		}
-		articleTypeStr = strings.Join(newArticleTypeSlice, ",")
-		articleTypeStr = strings.TrimRight(articleTypeStr, ",")
-		articleTypesCond += ` AND (art.sub_category_name In (` + articleTypeStr + `) OR (art.article_type_name In (` + articleTypeStr + `) AND art.article_type_name <> '路演精华' AND art.article_type_id <> 0 ) ) `
-	}
-	activityTypesCond := ``
-	if activityTypes != "" {
-		activityTypeSlice := strings.Split(activityTypes, ",")
-		newActivityTypeSlice := make([]string, 0)
-		for _, s := range activityTypeSlice {
-			newActivityTypeSlice = append(newActivityTypeSlice, "'"+s+"'")
-		}
-		activityTypeStr := strings.Join(newActivityTypeSlice, ",")
-		activityTypeStr = strings.TrimRight(activityTypeStr, ",")
-		activityTypesCond += ` AND act.activity_type_name In (` + activityTypeStr + `) `
-	}
-	industriesCond := ``
-	var industryStr string
-	if industries != "" {
-		industrieSlice := strings.Split(industries, ",")
-		newIndustrieSlice := make([]string, 0)
-		for _, s := range industrieSlice {
-			newIndustrieSlice = append(newIndustrieSlice, "'"+s+"'")
-		}
-		industryStr = strings.Join(newIndustrieSlice, ",")
-		industryStr = strings.TrimRight(industryStr, ",")
-		industriesCond += ` AND im.industry_name In (` + industryStr + `) `
-	}
-	subjectNamesCond := ``
-	var subjectNameStr string
-	if subjectNames != "" {
-		subjectNameSlice := strings.Split(subjectNames, ",")
-		newSubjectNameSlice := make([]string, 0)
-		for _, s := range subjectNameSlice {
-			newSubjectNameSlice = append(newSubjectNameSlice, "'"+s+"'")
-		}
-		subjectNameStr = strings.Join(newSubjectNameSlice, ",")
-		subjectNameStr = strings.TrimRight(subjectNameStr, ",")
-		subjectNamesCond += ` AND cis.subject_name In (` + subjectNameStr + `) `
-	}
-
-	var tagArticleIds, tagActivityIds, mmIds string
-	if articleTypesCond != "" || activityTypesCond != "" || industryStr != "" || subjectNameStr != "" {
-		tagArticleIds, tagActivityIds, mmIds, err = models.GetCygxCygxArticleListByCondition(articleTypesCond, activityTypesCond, industryStr, subjectNameStr, articleTypeStr)
-		if err != nil && err.Error() != utils.ErrNoRow() {
+	if tagIds != "" {
+		conditionTagIdsInit, err := services.GetConditionInitByTagIds(tagIds)
+		if err != nil {
 			br.Msg = "获取失败"
-			br.ErrMsg = "获取单个标签ids失败,Err:" + err.Error()
+			br.ErrMsg = "获取活动权限数据失败,GetConditionInitByTagIds Err:" + err.Error()
 			return
 		}
+		conditionInit += conditionTagIdsInit
+	} else {
+		//查询近一个月的数据
+		conditionInit = " AND publish_date  >   '" + time.Now().AddDate(0, 0, -30).Format(utils.FormatDateTime) + "'"
 	}
 
-	if soloTagArticleIds != "" {
-		if tagArticleIds != "" {
-			tagArticleIds += "," + soloTagArticleIds
-		} else {
-			tagArticleIds = soloTagArticleIds
-		}
-	}
-	if soloTagActivityIds != "" {
-		if tagActivityIds != "" {
-			tagActivityIds += "," + soloTagActivityIds
-		} else {
-			tagActivityIds = soloTagActivityIds
-		}
-	}
-	if soloMmIds != "" {
-		if mmIds != "" {
-			mmIds += "," + soloMmIds
-		} else {
-			mmIds = soloMmIds
-		}
-	}
-
-	//fmt.Println("condition:",condition)
-
-	//查询近一个月的数据
-	conditionInit = " AND publish_date  >   '" + time.Now().AddDate(0, 0, -30).Format(utils.FormatDateTime) + "'"
 	//conditionInit += `  AND source IN ('newchart')`
 	if user.CompanyId <= 1 || totalRai == 0 {
-		condition += " AND source IN ('roadshow','article') "
-		startSize = 0
-		pageSize = 4
+		//condition += " AND source IN ('roadshow','article') "
+		condition += " AND source NOT IN ('activityspecial') "
+		listActivityYiDong, err := models.GetActivityListHomeNew("  AND art.yidong_activity_id != '' ", 0, 1000)
+		if err != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取可见活动数据失败,Err:" + err.Error()
+			return
+		}
+		//易董的活动不查看  v12.2.1
+		var yiDongactivityIds []int
+		for _, v := range listActivityYiDong {
+			yiDongactivityIds = append(yiDongactivityIds, v.ActivityId)
+		}
+		lenyiDongactivityIds := len(yiDongactivityIds)
+		condition += `  AND IF ( source = 'activity' , source_id  NOT IN (` + utils.GetOrmInReplace(lenyiDongactivityIds) + `) ,1=1 ) `
+		pars = append(pars, yiDongactivityIds)
 	} else {
 		condition += ` AND source NOT IN ('activity','activityspecial','newchart') ` + conditionInit
-		conditionActivity, err := services.GetActivityonditionList(user, "", "", "", "1,2,3", "", 0, 0, "", 0, 1)
+		//conditionActivity, err := services.GetActivityonditionList(user, "", "", "", "1,2,3", "", 0, 0, "", 0, 1)
+		conditionActivity, err := services.ActivityConditioninitSql(user, "", 0)
 		if err != nil && err.Error() != utils.ErrNoRow() {
 			br.Msg = "获取失败"
 			br.ErrMsg = "获取活动权限数据失败,Err:" + err.Error()
 			return
 		}
-		conditionActivity += ` AND art.is_limit_people = 1 AND art.publish_status = 1 `
+		conditionActivity += ` AND art.publish_status = 1 `
 		var conditionOrder string
 		conditionOrder = ` ORDER BY art.activity_time DESC ,  art.active_state ASC   `
 		conditionActivity += conditionOrder
@@ -878,44 +903,44 @@ func (this *HomeController) NewList() {
 		}
 		lenActivityspecialIds := len(activityspecialIds)
 
-		if tagIds != "" {
-			if tagArticleIds != "" {
-				condition = ` AND ((source = 'article' AND source_id IN (` + tagArticleIds + `) ) `
-				if mmIds != "" {
-					condition += ` OR ( source = 'meetingreviewchapt' AND source_id IN (` + mmIds + `) )   `
-				}
-				if tagActivityIds != "" && lenActivityIds > 0 {
-					condition += ` OR (source = 'activity' AND source_id IN (` + tagActivityIds + `) AND source_id IN (` + utils.GetOrmInReplace(lenActivityIds) + `) )) `
-					pars = append(pars, activityIds)
-				} else {
-					// 无可见活动
-					condition += ` OR (source = 'activity' AND source_id IN (0))) `
-				}
-			} else if tagActivityIds != "" {
-				condition = ` AND ((source = 'article' AND source_id IN (0))  `
-				if mmIds != "" {
-					condition += ` OR ( source = 'meetingreviewchapt' AND source_id IN (` + mmIds + `) )   `
-				}
-				if tagActivityIds != "" && lenActivityIds > 0 {
-					condition += ` OR (source = 'activity' AND source_id IN (` + tagActivityIds + `) AND source_id IN (` + utils.GetOrmInReplace(lenActivityIds) + `))) `
-					pars = append(pars, activityIds)
-				} else {
-					// 无可见活动
-					condition += ` OR (source = 'activity' AND source_id IN (0))) `
-				}
-			} else if mmIds != "" {
-				condition = ` AND ( source = 'meetingreviewchapt' AND source_id IN (` + mmIds + `) )   `
-			} else {
-				condition += ` AND ((source = 'article' AND source_id IN (0)) OR (source = 'activity' AND source_id IN (0))) `
-			}
-		}
+		//if tagIds != "" {
+		//	if tagArticleIds != "" {
+		//		condition = ` AND ((source = 'article' AND source_id IN (` + tagArticleIds + `) ) `
+		//		if mmIds != "" {
+		//			condition += ` OR ( source = 'meetingreviewchapt' AND source_id IN (` + mmIds + `) )   `
+		//		}
+		//		if tagActivityIds != "" && lenActivityIds > 0 {
+		//			condition += ` OR (source = 'activity' AND source_id IN (` + tagActivityIds + `) AND source_id IN (` + utils.GetOrmInReplace(lenActivityIds) + `) )) `
+		//			pars = append(pars, activityIds)
+		//		} else {
+		//			// 无可见活动
+		//			condition += ` OR (source = 'activity' AND source_id IN (0))) `
+		//		}
+		//	} else if tagActivityIds != "" {
+		//		condition = ` AND ((source = 'article' AND source_id IN (0))  `
+		//		if mmIds != "" {
+		//			condition += ` OR ( source = 'meetingreviewchapt' AND source_id IN (` + mmIds + `) )   `
+		//		}
+		//		if tagActivityIds != "" && lenActivityIds > 0 {
+		//			condition += ` OR (source = 'activity' AND source_id IN (` + tagActivityIds + `) AND source_id IN (` + utils.GetOrmInReplace(lenActivityIds) + `))) `
+		//			pars = append(pars, activityIds)
+		//		} else {
+		//			// 无可见活动
+		//			condition += ` OR (source = 'activity' AND source_id IN (0))) `
+		//		}
+		//	} else if mmIds != "" {
+		//		condition = ` AND ( source = 'meetingreviewchapt' AND source_id IN (` + mmIds + `) )   `
+		//	} else {
+		//		condition += ` AND ((source = 'article' AND source_id IN (0)) OR (source = 'activity' AND source_id IN (0))) `
+		//	}
+		//}
 
-		if lenActivityIds > 0 && tagIds == "" {
+		if lenActivityIds > 0 {
 			condition += ` OR ( source = 'activity' AND source_id IN (` + utils.GetOrmInReplace(lenActivityIds) + `) ` + conditionInit + ` )    `
 			pars = append(pars, activityIds)
 		}
 
-		if lenActivityspecialIds > 0 && tagIds == "" {
+		if lenActivityspecialIds > 0 {
 			condition += ` OR ( source = 'activityspecial' AND source_id IN (` + utils.GetOrmInReplace(lenActivityspecialIds) + `) ` + conditionInit + ` )   `
 			pars = append(pars, activityspecialIds)
 		}
@@ -927,10 +952,9 @@ func (this *HomeController) NewList() {
 		br.ErrMsg = "获取数据失败,Err:" + err.Error()
 		return
 	}
-
-	if user.Mobile == "" && user.Email == "" {
-		total = pageSize
-	}
+	//if user.Mobile == "" && user.Email == "" {
+	//	total = pageSize
+	//}
 
 	page := paging.GetPaging(currentIndex, pageSize, total)
 	//Source      string    `description:"资源类型 报告 :article 、图表 :newchart、微路演 :roadshow、活动 :activity、活动视频:activityvideo、活动音频:activityvoice、专项调研活动:activityspecial"`

+ 3 - 0
controllers/morning_meeting.go

@@ -127,6 +127,9 @@ func (this *MorningMeetingController) GatherDetail() {
 		br.Msg = "获取信息失败"
 		br.ErrMsg = "获取用户权限信息失败,Err:" + err.Error()
 	}
+	if user.UserId == 0 {
+		hasPermission = 1 //用户未登录(绑定登录信息)的时候也能展示 v12.2.1
+	}
 	resp.HasPermission = hasPermission
 	if hasPermission != 1 {
 		br.Ret = 200

+ 10 - 1
controllers/product_interior.go

@@ -107,6 +107,11 @@ func (this *ProductInteriorController) Detail() {
 		br.Msg = "获取信息失败"
 		br.ErrMsg = "获取用户权限信息失败,Err:" + err.Error()
 	}
+
+	if user.UserId == 0 {
+		hasPermission = 1 //用户未登录(绑定登录信息)的时候也能展示 v12.2.1
+	}
+
 	//未设置全部可见的只能给弘则内部查看
 	if detail.VisibleRange == 1 || user.CompanyId == utils.HZ_COMPANY_ID {
 		resp.IsShow = true
@@ -121,7 +126,11 @@ func (this *ProductInteriorController) Detail() {
 	}
 	detail.PublishTime = utils.TimeRemoveHms2(detail.PublishTime)
 	resp.Detail = detail
-	detail.BodySlice = services.GetProductInteriorUrlBody(detail.Body)
+	detail.BodySlice, err = services.GetProductInteriorUrlBody(detail.Body, user)
+	if err != nil {
+		br.Msg = "获取信息失败"
+		br.ErrMsg = "获取用户权限信息失败,Err:" + err.Error()
+	}
 	go services.AddCygxProductInteriorHistory(user, productInteriorId)
 	br.Ret = 200
 	br.Success = true

+ 11 - 8
controllers/report.go

@@ -834,15 +834,16 @@ func (this *ReportController) Fllow() {
 	if countUser == 0 {
 		resp.GoFollow = true
 	}
+	item := new(models.CygxIndustryFllow)
+	item.IndustrialManagementId = industrialManagementId
+	item.UserId = uid
+	item.Email = user.Email
+	item.Mobile = user.Mobile
+	item.RealName = user.RealName
+	item.Source = utils.REGISTER_PLATFORM
+	item.CompanyId = user.CompanyId
+	item.CompanyName = user.CompanyName
 	if count == 0 {
-		item := new(models.CygxIndustryFllow)
-		item.IndustrialManagementId = industrialManagementId
-		item.UserId = uid
-		item.Email = user.Email
-		item.Mobile = user.Mobile
-		item.RealName = user.RealName
-		item.CompanyId = user.CompanyId
-		item.CompanyName = user.CompanyName
 		item.Type = 1
 		item.CreateTime = time.Now()
 		item.ModifyTime = time.Now()
@@ -854,6 +855,7 @@ func (this *ReportController) Fllow() {
 		}
 		resp.Status = 1
 	} else {
+		item.Type = 2
 		err = models.RemoveCygxIndustryFllow(uid, industrialManagementId)
 		if err != nil {
 			br.Msg = "操作失败"
@@ -864,6 +866,7 @@ func (this *ReportController) Fllow() {
 
 	go services.IndustryFllowWithTrack(industrialManagementId, count, uid)       //处理是否关注全部赛道字段
 	go services.IndustryFllowUserLabelLogAdd(industrialManagementId, count, uid) //处理用户标签
+	go services.AddCygxIndustryFllowLog(item)                                    //添加操作日志记录
 	br.Msg = "操作成功"
 	br.Ret = 200
 	br.Success = true

+ 89 - 1
controllers/report_selection.go

@@ -138,8 +138,14 @@ func (this *ReportSelectionController) Detail() {
 						br.ErrMsg = "获取信息失败,Err:" + err.Error()
 						return
 					}
-					listSonLog[k2].OverviewArticleId = articleStockMap[v2.SubjectName]
+					//后台如果勾了隐藏那么这里就不展示  V11.3  2023-08-17
+					if listSonLog[k2].IsShowOverviewArticle == 1 {
+						listSonLog[k2].OverviewArticleId = articleStockMap[v2.SubjectName]
+					} else {
+						listSonLog[k2].OverviewArticleId = 0
+					}
 					listSonLog[k2].List = listIndustrial
+					//listSonLog[k2].IsShowApplyButton = true
 					if v2.Label != "" {
 						v2.CompanyLabel = strings.Split(v2.Label, "{|}")
 					}
@@ -396,3 +402,85 @@ func (this *ReportSelectionController) List() {
 	br.Msg = "获取成功"
 	br.Data = resp
 }
+
+// @Title 报告精选申请路演
+// @Description 报告精选申请路演
+// @Param	request	body cygx.CygxBannerIdReq true "type json string"
+// @Success 200 Ret=200 提交成功
+// @router /report_selection_log/apply [post]
+func (this *ReportSelectionController) ReportSelectionLogApply() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	user := this.User
+	if user == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,用户信息为空"
+		br.Ret = 408
+		return
+	}
+	var req models.CygxReportSelectionLogApplyReq
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+	articleId := req.ArticleId
+	subjectName := req.SubjectName
+
+	var condition string
+	var pars []interface{}
+	condition += ` AND  article_id = ? AND subject_name = ? AND user_id = ?  `
+	pars = append(pars, articleId, subjectName, user.UserId)
+	totalApply, err := models.GetCygxReportSelectionLogApplyCount(condition, pars)
+	if err != nil {
+		br.Msg = "申请失败!"
+		br.ErrMsg = "申请失败,Err:" + err.Error()
+		return
+	}
+	if totalApply > 0 {
+		br.Msg = "您已提交过此公司的路演申请,请等待销售与您联系!"
+		return
+	}
+
+	logDetail, err := models.GetCygxReportSelectionLogDetail(articleId, subjectName)
+	if err != nil {
+		br.Msg = "申请失败!"
+		br.ErrMsg = "申请失败,Err:" + err.Error()
+		return
+	}
+
+	item := new(models.CygxReportSelectionLogApply)
+	item.UserId = user.UserId
+	item.CreateTime = time.Now()
+	item.ModifyTime = time.Now()
+	item.Mobile = user.Mobile
+	item.Email = user.Email
+	item.CompanyId = user.CompanyId
+	item.CompanyName = user.CompanyName
+	item.ArticleId = logDetail.ArticleId
+	item.SubjectName = logDetail.SubjectName
+	item.IndustrialSubjectId = logDetail.IndustrialSubjectId
+	item.RegisterPlatform = utils.REGISTER_PLATFORM
+	sellerItem, err := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		return
+	}
+	item.RealName = user.RealName
+	if sellerItem != nil {
+		item.SellerName = sellerItem.RealName
+	}
+	_, err = models.AddCygxReportSelectionLogApply(item)
+	if err != nil {
+		br.Msg = "申请失败"
+		br.ErrMsg = "申请失败,Err:" + err.Error()
+		return
+	}
+	go services.SendCygxReportSelectionLogApplyTemplateMsg(user, logDetail.SubjectName)
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "记录成功"
+}

+ 1 - 0
controllers/tactics.go

@@ -97,6 +97,7 @@ func (this *TacticsController) List() {
 				list[k].IsRed = true
 			}
 		}
+		list[k].Abstract, _ = services.GetReportContentTextSub(v.Abstract)
 	}
 	if categoryId > 0 {
 		detail, errCategory := models.GetCygxReportMappingCygxByCategoryId(categoryId)

+ 19 - 3
controllers/tag.go

@@ -10,7 +10,6 @@ type TagController struct {
 	BaseAuthController
 }
 
-
 // @Title 获取标签列表-自定义顺序
 // @Description 获取标签列表-自定义顺序接口
 // @Success 200 {object} cygx.ChartPermissionResp
@@ -47,8 +46,25 @@ func (this *TagController) TagCustomizeList() {
 		return
 	}
 
-
 	list, err := models.GetCygxTagList(condition)
+	for _, v := range list {
+		if v.ArticleTypes != "" {
+			v.Atag = true
+			v.CheckList = append(v.CheckList, "A")
+		}
+		if v.ActivityTypes != "" {
+			v.Btag = true
+			v.CheckList = append(v.CheckList, "B")
+		}
+		if v.Industries != "" {
+			v.Ctag = true
+			v.CheckList = append(v.CheckList, "C")
+		}
+		if v.SubjectNames != "" {
+			v.Dtag = true
+			v.CheckList = append(v.CheckList, "D")
+		}
+	}
 	if err != nil {
 		br.Msg = "获取标签失败"
 		br.ErrMsg = "获取标签信息失败,Err:" + err.Error()
@@ -96,4 +112,4 @@ func (this *TagController) History() {
 	br.Ret = 200
 	br.Success = true
 	br.Msg = "记录成功"
-}
+}

+ 50 - 1
controllers/user.go

@@ -244,6 +244,31 @@ func (this *UserController) Detail() {
 			return
 		}
 
+		totalCollect, err := models.GetArticleUserCollectCount(uid) // 文章收藏数量
+		if err != nil {
+			br.Msg = "获取数据失败"
+			br.ErrMsg = "GetArticleUserCollectCount,Err:" + err.Error()
+			return
+		}
+
+		totalHistory, err := models.GetArticleUserHistoryNum(uid) // 足迹数量
+		if err != nil {
+			br.Msg = "获取数据失败"
+			br.ErrMsg = "GetArticleUserHistoryNum,Err:" + err.Error()
+			return
+		}
+
+		totalSchedule, err := models.GetArticleUserScheduleNum(uid) // 我的日程数量
+		if err != nil {
+			br.Msg = "获取数据失败"
+			br.ErrMsg = "GetArticleUserScheduleNum,Err:" + err.Error()
+			return
+		}
+
+		detail.ConNum = totalCollect
+		detail.HistoryNum = totalHistory
+		detail.ScheduleNum = totalSchedule
+
 		userRecord, _ := models.GetUserRecordByUserId(uid, utils.WxPlatform)
 		if userRecord != nil {
 			detail.NickName = userRecord.NickName
@@ -882,8 +907,12 @@ func (this *UserController) ApplyTryOut() {
 	uid := user.UserId
 
 	var title string
+	var sourceId int
+	var source string
 	tryType := req.TryType
 	detailId := req.DetailId
+	sourceId = detailId
+	source = tryType
 	var isResearch bool // 是否属于研选
 	if tryType == "Article" {
 		detail, err := models.GetArticleDetailById(detailId)
@@ -916,6 +945,19 @@ func (this *UserController) ApplyTryOut() {
 			return
 		}
 		title = microAudio.VoiceName
+		sourceId = microAudio.ActivityId
+		source = "activityvoice"
+	} else if tryType == "ActivityVideo" {
+		// 活动视频
+		activityVideo, e := models.GetCygxActivityVideoById(detailId)
+		if e != nil {
+			br.Msg = "操作失败"
+			br.ErrMsg = "微路演音频信息有误, 不存在的VoiceId: " + strconv.Itoa(detailId)
+			return
+		}
+		title = activityVideo.VideoName
+		sourceId = activityVideo.ActivityId
+		source = "activityvideo"
 	} else if tryType == "MicroVideo" {
 		// 微路演视频
 		microVideo, e := models.GetMicroRoadshowVideoById(detailId)
@@ -925,6 +967,7 @@ func (this *UserController) ApplyTryOut() {
 			return
 		}
 		title = microVideo.VideoName
+		source = "roadshow"
 	} else if tryType == "Researchsummary" {
 		// 本周研究汇总
 		ResearchSummaryInfo, e := models.GetCygxResearchSummaryInfoById(detailId)
@@ -934,6 +977,7 @@ func (this *UserController) ApplyTryOut() {
 			return
 		}
 		title = ResearchSummaryInfo.Title
+		source = "researchsummary"
 	} else if tryType == "Minutessummary" {
 		// 上周纪要汇总
 		MinutesSummaryInfo, e := models.GetCygxMinutesSummaryInfoById(detailId)
@@ -943,6 +987,7 @@ func (this *UserController) ApplyTryOut() {
 			return
 		}
 		title = MinutesSummaryInfo.Title
+		source = "minutessummary"
 	} else if tryType == "ReportSelection" {
 		// 报告精选
 		ReportSelectionInfo, e := models.GetCygxReportSelectionInfoById(detailId)
@@ -952,6 +997,7 @@ func (this *UserController) ApplyTryOut() {
 			return
 		}
 		title = ReportSelectionInfo.Title
+		source = "reportselection"
 	} else if tryType == "ProductInterior" {
 		// 产品内测
 		ProductInteriorDetail, e := models.GetCygxProductInteriorDetail(detailId)
@@ -961,9 +1007,9 @@ func (this *UserController) ApplyTryOut() {
 			return
 		}
 		title = ProductInteriorDetail.Title
+		source = "productinterior"
 	}
 
-	fmt.Println(title)
 	//缓存校验
 	cacheKey := fmt.Sprint("xygx:apply_record:add:", uid)
 	ttlTime := utils.Rc.GetRedisTTL(cacheKey)
@@ -1151,6 +1197,9 @@ func (this *UserController) ApplyTryOut() {
 		//如果是潜在客户就标记来源
 		item.InviteCompanySource = 2
 	}
+	item.Title = title
+	item.SourceId = sourceId
+	item.Source = strings.ToLower(source)
 	item.RegisterPlatform = utils.REGISTER_PLATFORM
 	err = models.AddApplyRecord(item)
 	if err != nil {

+ 30 - 2
models/activity_video.go

@@ -14,6 +14,8 @@ type CygxActivityVideo struct {
 	VideoCounts   int    `description:"播放量"`
 	VideoUrl      string `description:"视频地址"`
 	CreateTime    string `description:"创建时间"`
+	BackgroundImg string `description:"封面图片"`
+	ShareImg      string `description:"分享图片"`
 }
 
 type CygxActivityVideoResp struct {
@@ -26,12 +28,15 @@ type CygxActivityVideoResp struct {
 	VideoCounts       int    `description:"播放量"`
 	VideoUrl          string `description:"视频地址"`
 	CreateTime        string `description:"创建时间"`
+	BackgroundImg     string `description:"封面图片"`
+	ShareImg          string `description:"分享图片"`
 }
 
 type CygxActivityVideoReq struct {
 	VideoName     string `description:"视频名称"`
 	VideoDuration string `description:"视频时长"`
 	VideoUrl      string `description:"视频地址"`
+	ActivityId    int    ` description:"活动ID"`
 }
 
 // string `orm:"column(label)";description:"主题"`
@@ -76,13 +81,20 @@ func GetCygxActivityVideoByActivityId(activityId int) (item *CygxActivityVideo,
 	return
 }
 
-// GetCygxActivityVideoById 获取活动视频
-func GetCygxActivityVideoById(activityId int) (item *CygxActivityVideo, err error) {
+// GetCygxActivityVideoByActivityId 获取活动视频
+func GetCygxActivityVideoReqByActivityId(activityId int) (item *CygxActivityVideoReq, err error) {
 	sql := `SELECT * FROM cygx_activity_video WHERE video_id = ? LIMIT 1 `
 	err = orm.NewOrm().Raw(sql, activityId).QueryRow(&item)
 	return
 }
 
+// GetCygxActivityVideoById 获取活动视频
+func GetCygxActivityVideoById(videoId int) (item *CygxActivityVideo, err error) {
+	sql := `SELECT * FROM cygx_activity_video WHERE video_id = ? LIMIT 1 `
+	err = orm.NewOrm().Raw(sql, videoId).QueryRow(&item)
+	return
+}
+
 // 列表
 func GetActivityVideoList(condition string, pars []interface{}, startSize, pageSize int) (items []*CygxActivityVideoResp, err error) {
 	o := orm.NewOrm()
@@ -109,3 +121,19 @@ func GetActivityVideoActivityIds() (activityIds string, err error) {
 	err = o.Raw(sql).QueryRow(&activityIds)
 	return
 }
+
+// 修改
+func UpdateCygxActivityVideo(item *CygxActivityVideo) (err error) {
+	to := orm.NewOrm()
+	updateParams := make(map[string]interface{})
+	updateParams["BackgroundImg"] = item.BackgroundImg
+	updateParams["ShareImg"] = item.ShareImg
+	ptrStructOrTableName := "cygx_activity_video"
+	whereParam := map[string]interface{}{"activity_id": item.ActivityId}
+	qs := to.QueryTable(ptrStructOrTableName)
+	for expr, exprV := range whereParam {
+		qs = qs.Filter(expr, exprV)
+	}
+	_, err = qs.Update(updateParams)
+	return
+}

+ 20 - 0
models/activity_voice.go

@@ -16,6 +16,8 @@ type CygxActivityVoice struct {
 	VoiceCounts      int       `description:"播放量"`
 	ModifyTime       string    `description:"更新时间"`
 	CreateTime       time.Time `description:"创建时间"`
+	BackgroundImg    string    `description:"封面图片"`
+	ShareImg         string    `description:"分享图片"`
 }
 
 // ActivityVoice 活动语音表结构体
@@ -31,6 +33,8 @@ type CygxActivityVoiceResp struct {
 	ChartPermissionId   int    `description:"权限id"`
 	ChartPermissionName string `description:"行业名称"`
 	ActivityTime        string `description:"活动时间"`
+	BackgroundImg       string `description:"封面图片"`
+	ShareImg            string `description:"分享图片"`
 }
 
 // ActivityVoiceReq 音频数据
@@ -125,3 +129,19 @@ func GetActivityVoiceActivityIds() (activityIds string, err error) {
 	err = o.Raw(sql).QueryRow(&activityIds)
 	return
 }
+
+// 修改
+func UpdateCygxActivityVoice(item *CygxActivityVoice) (err error) {
+	to := orm.NewOrm()
+	updateParams := make(map[string]interface{})
+	updateParams["BackgroundImg"] = item.BackgroundImg
+	updateParams["ShareImg"] = item.ShareImg
+	ptrStructOrTableName := "cygx_activity_voice"
+	whereParam := map[string]interface{}{"activity_id": item.ActivityId}
+	qs := to.QueryTable(ptrStructOrTableName)
+	for expr, exprV := range whereParam {
+		qs = qs.Filter(expr, exprV)
+	}
+	_, err = qs.Update(updateParams)
+	return
+}

+ 5 - 5
models/admin.go

@@ -11,7 +11,7 @@ type AdminMobileResp struct {
 
 // 获取销售所能查看到的手机号
 func GetAdminByRole() (items []*AdminMobileResp, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := ` SELECT mobile  FROM admin  WHERE role = 'admin' `
 	_, err = o.Raw(sql).QueryRows(&items)
 	return
@@ -56,21 +56,21 @@ type Admin struct {
 
 func GetSysAdminById(adminId int) (item *Admin, err error) {
 	sql := `SELECT * FROM admin WHERE admin_id=? `
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	err = o.Raw(sql, adminId).QueryRow(&item)
 	return
 }
 
 func GetSysAdminByMobile(mobile string) (item *Admin, err error) {
 	sql := `SELECT * FROM admin WHERE mobile=? LIMIT 1 `
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	err = o.Raw(sql, mobile).QueryRow(&item)
 	return
 }
 
 // 获取权益内部人员手机号
 func GetRaiAdmin() (items []*AdminMobileResp, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := ` SELECT
 	mobile
 FROM
@@ -92,7 +92,7 @@ type GetSellerUserMobileResp struct {
 
 // 获取销售所能查看到的手机号
 func GetSellerUserMobile(adminId int) (items []*GetSellerUserMobileResp, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := ` SELECT mobile FROM user_seller_relation WHERE seller_id  = ? `
 	_, err = o.Raw(sql, adminId).QueryRows(&items)
 	return

+ 77 - 0
models/apply_collection.go

@@ -0,0 +1,77 @@
+package models
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+type CollectionBannerResp struct {
+	Title             string `description:"标题"`
+	IndexImg          string `description:"小程序封面图"`
+	Path              string `description:"小程序路径"`
+	IsShowSustainable bool   `description:"是否展示限免标签"`
+}
+
+type CollectionBannerListResp struct {
+	ListA []*CollectionBannerResp
+	ListB *CollectionBannerResp
+}
+
+type CollectionDetailResp struct {
+	HttpUrl string `description:"跳转地址"`
+}
+
+type ApplyCollectionReq struct {
+	Content string `description:"内容"`
+}
+
+// 精选看板申请表
+type CygxApplyCollection struct {
+	ApplyCollectionId int       `orm:"column(apply_collection_id);pk" description:"主键ID"`
+	UserId            int       `description:"用户ID"`         // 用户ID
+	Mobile            string    `description:"手机号"`          // 手机号
+	Email             string    `description:"邮箱"`           // 邮箱
+	CompanyId         int       `description:"公司ID"`         // 公司ID
+	CompanyName       string    `description:"公司名称"`         // 公司名称
+	RealName          string    `description:"用户实际名称"`       // 用户实际名称
+	SellerName        string    `description:"所属销售"`         // 所属销售
+	CreateTime        time.Time `description:"创建时间"`         // 创建时间
+	ModifyTime        time.Time `description:"修改时间"`         // 修改时间
+	RegisterPlatform  int       `description:"来源 1小程序,2:网页"` // 来源 1小程序,2:网页
+	Content           string    `description:" 内容"`          // 内容
+}
+
+// 精选看板申请表
+type CygxApplyCollectionResp struct {
+	ApplyCollectionId int       `gorm:"column:"`
+	UserId            int       `gorm:"column:"`                    // 用户ID
+	Mobile            string    `gorm:"column:"`                    // 手机号
+	Email             string    `gorm:"column:"`                    // 邮箱
+	CompanyId         int       `gorm:"column:;default:0"`          // 公司ID
+	CompanyName       string    `gorm:"column:"`                    // 公司名称
+	RealName          string    `gorm:"column:"`                    // 用户实际名称
+	SellerName        string    `gorm:"column:"`                    // 所属销售
+	CreateTime        time.Time `gorm:"column:"`                    // 创建时间
+	ModifyTime        time.Time `gorm:"column:"`                    // 修改时间
+	RegisterPlatform  int       `gorm:"column:;default:1;NOT NULL"` // 来源 1小程序,2:网页
+	Content           string    `gorm:"column:;NOT NULL"`           // 内容
+}
+
+// 添加信息
+func AddCygxApplyCollection(item *CygxApplyCollection) (lastId int64, err error) {
+	o := orm.NewOrm()
+	lastId, err = o.Insert(item)
+	return
+}
+
+// 通过ID获取详情
+func GetCygxApplyCollectionDetail(applyCollectionId int) (item *CygxApplyCollectionResp, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM cygx_apply_collection  WHERE apply_collection_id=?  `
+	err = o.Raw(sql, applyCollectionId).QueryRow(&item)
+	return
+}
+
+type CygxApplyCollectionDetailResp struct {
+	Detail *CygxApplyCollectionResp
+}

+ 3 - 0
models/apply_record.go

@@ -19,6 +19,9 @@ type CygxApplyRecord struct {
 	ApplyMethod         int       `description:"1:已付费客户申请试用,2:非客户申请试用"`
 	RegisterPlatform    int       `description:"来源 1小程序,2:网页"`
 	InviteCompanySource int       `description:"来源 1小程序,2:网页"`
+	SourceId            int       `description:"资源ID"`
+	Source              string    `description:"资源类型 报告 :article 、图表 :newchart、微路演 :roadshow、活动 :activity、活动视频:activityvideo、活动音频:activityvoice、专项调研活动:activityspecial"`
+	Title               string    `description:"标题"`
 }
 
 type CygxApplyRecordResp struct {

+ 5 - 0
models/article.go

@@ -177,7 +177,12 @@ type ArticleDetail struct {
 	IsRoadShow               bool   `description:"是否是路演精华"`
 	ReportType               int    `description:"报告类型,1行业报告,2产业报告,0无"`
 	FieldName                string `description:"策略平台的领域字段名称"`
+	TypeName                 string `description:"策略平台类型字段名称"`
 	IsApplyAppointmentExpert bool   `description:"是否属于专家访谈"`
+	ArticleTypeName          string `description:"权限名称"`
+	MatchTypeName            string `description:"匹配类型"`
+	Stock                    string `description:"个股标签"`
+	Frequency                string `description:"更新周期(策略平台字段)"`
 }
 
 type ArticleDetailFileLink struct {

+ 0 - 16
models/article_category_mapping.go

@@ -2,7 +2,6 @@ package models
 
 import (
 	"github.com/beego/beego/v2/client/orm"
-	"time"
 	//"time"
 )
 
@@ -30,21 +29,6 @@ func AddCygxArticleCategoryMapping(item *CygxArticleCategoryMapping) (lastId int
 	return
 }
 
-type CygxReportMappingGroup struct {
-	Id              int       `orm:"column(id);pk" description:"id"`
-	IdCygx          int       `description:"分类ID"`
-	CategoryIdCelue int       `description:"分类ID"`
-	CreateTime      time.Time `description:"创建时间"`
-	ModifyTime      time.Time `description:"更新时间"`
-}
-
-// 添加
-func AddCygxReportMappingGroup(item *CygxReportMappingGroup) (lastId int64, err error) {
-	o := orm.NewOrm()
-	lastId, err = o.Insert(item)
-	return
-}
-
 // 添加
 func AddCygxReportMappingCygx(item *CygxReportMappingCygx) (lastId int64, err error) {
 	o := orm.NewOrm()

+ 17 - 17
models/company.go

@@ -28,7 +28,7 @@ func GetCompanyDetailById(companyId int) (item *CompanyDetail, err error) {
 			LEFT JOIN admin AS c ON b.seller_id=c.admin_id
 			WHERE a.company_id=? AND cp.cygx_auth=1
 			OR (a.company_id = ? AND  cp.permission_name = '策略' ) ORDER BY  b.product_id  DESC LIMIT 1` // 兼容永续状态
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	err = o.Raw(sql, companyId, companyId).QueryRow(&item)
 	return
 }
@@ -43,7 +43,7 @@ func GetCompanyDetailByIdGroup(companyId int) (item *CompanyDetail, err error) {
 			WHERE a.company_id=? AND b.product_id = 2 
 			OR (a.company_id = ? AND  cp.permission_name = '策略' ) 
 			ORDER BY b.product_id DESC  LIMIT 0,1 `
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	err = o.Raw(sql, companyId, companyId).QueryRow(&item)
 	return
 }
@@ -56,7 +56,7 @@ func GetCountCompanyDetailByIdGroup(companyId int) (count int, err error) {
 			INNER JOIN chart_permission AS cp ON cp.chart_permission_id = p.chart_permission_id
 			LEFT JOIN admin AS c ON b.seller_id=c.admin_id
 			WHERE a.company_id=? AND b.product_id = 2    OR (a.company_id = ? AND  cp.permission_name = '策略' )   `
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	err = o.Raw(sql, companyId, companyId).QueryRow(&count)
 	return
 }
@@ -86,7 +86,7 @@ func GetCompanyPermission(companyId int) (permission string, err error) {
             AND b.cygx_auth=1
 			AND c.status IN('正式','试用','永续')
 			AND a.status IN('正式','试用','永续') `
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	err = o.Raw(sql, companyId).QueryRow(&permission)
 	return
 }
@@ -101,7 +101,7 @@ func GetCompanyPermissionName(companyId int) (permission string, err error) {
             AND b.cygx_auth=1
 			AND c.status IN('正式','试用','永续')
 			AND a.status IN('正式','试用','永续') `
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	err = o.Raw(sql, companyId).QueryRow(&permission)
 	return
 }
@@ -116,7 +116,7 @@ func GetCompanyPermissionByUser(companyId int) (permission string, err error) {
             AND b.cygx_auth=1
 			AND c.status IN('正式','试用','永续')
 			AND a.status IN('正式','试用','永续') `
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	err = o.Raw(sql, companyId).QueryRow(&permission)
 	return
 }
@@ -138,7 +138,7 @@ func GetCompanyPermissionList(companyId int) (items []*PermissionItem, err error
             AND b.cygx_auth=1
 			AND c.status IN('正式','试用','永续')
 			AND a.status IN('正式','试用','永续')   ORDER BY b.sort ASC `
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	_, err = o.Raw(sql, companyId).QueryRows(&items)
 	return
 }
@@ -152,7 +152,7 @@ func GetCompanyPermissionByUserNoStatus(companyId int) (permission string, err e
 			WHERE  a.company_id=?
 			AND c.is_suspend=0
             AND b.cygx_auth=1`
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	err = o.Raw(sql, companyId).QueryRow(&permission)
 	return
 }
@@ -167,7 +167,7 @@ func GetCompanyPermissionByUserZhengShi(companyId int) (permission string, err e
 			AND c.is_suspend=0
             AND b.cygx_auth=1
 			AND a.status IN('正式') `
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	err = o.Raw(sql, companyId).QueryRow(&permission)
 	return
 }
@@ -195,7 +195,7 @@ func GetCompanyDetailAllById(companyId int) (item *CompanyDetail, err error) {
 			WHERE a.company_id=? AND cp.cygx_auth=1
 			OR (a.company_id = ? AND  cp.permission_name = '策略' )` // 兼容永续状态
 	//WHERE a.company_id=?  AND b.status IN('正式','试用','永续')`
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	err = o.Raw(sql, companyId, companyId).QueryRow(&item)
 	return
 }
@@ -210,7 +210,7 @@ func GetSellerDetailAllByCompanyId(companyId int) (item *CompanyDetail, err erro
 			WHERE
 			b.product_id = 2 
 			AND a.company_id = ? LIMIT 1`
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	err = o.Raw(sql, companyId).QueryRow(&item)
 	return
 }
@@ -222,7 +222,7 @@ func GetCompanySellerName(companyId int) (sellerName string, err error) {
 			company_product AS p
 		WHERE
 			p.company_id = ? `
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	err = o.Raw(sql, companyId).QueryRow(&sellerName)
 	return
 }
@@ -239,14 +239,14 @@ type CompanyProductDetial struct {
 // 获取对应销售以及销售的手机号
 func GetCompanyProductDetail(companyId, productId int) (item *CompanyProductDetial, err error) {
 	sql := ` SELECT * FROM company_product WHERE company_id = ? AND product_id = ?; `
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	err = o.Raw(sql, companyId, productId).QueryRow(&item)
 	return
 }
 
 // 获取公司详情详情
 func GetCompanyByName(companyName string) (item *Company, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := `SELECT *  FROM company WHERE company_name = ? LIMIT 1`
 	err = o.Raw(sql, companyName).QueryRow(&item)
 	return
@@ -254,7 +254,7 @@ func GetCompanyByName(companyName string) (item *Company, err error) {
 
 // 获取公司详情详情
 func GetCompanyById(companyId int) (item *Company, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := `SELECT *  FROM company WHERE company_id = ? LIMIT 1`
 	err = o.Raw(sql, companyId).QueryRow(&item)
 	return
@@ -262,7 +262,7 @@ func GetCompanyById(companyId int) (item *Company, err error) {
 
 // 获取公司详情详情
 func GetCompanyByThirdName(tripartiteCompanyCode string) (item *Company, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := `SELECT *  FROM company WHERE tripartite_company_code = ? LIMIT 1`
 	err = o.Raw(sql, tripartiteCompanyCode).QueryRow(&item)
 	return
@@ -270,7 +270,7 @@ func GetCompanyByThirdName(tripartiteCompanyCode string) (item *Company, err err
 
 // 更新机构互动量
 func UpdateComapanyInteractionNum(interactionNum, companyId int) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := `UPDATE company SET interaction_num = ? WHERE company_id=? `
 	_, err = o.Raw(sql, interactionNum, companyId).Exec()
 	return

+ 1 - 1
models/company/company_approval.go

@@ -27,7 +27,7 @@ type CompanyApproval struct {
 
 func GetCompanyApprovalById(companyId int) (item *CompanyApproval, err error) {
 	sql := `SELECT * FROM company_approval WHERE company_id=? AND product_id=2 AND approve_status='已审批' order by company_approval_id desc LIMIT 1 `
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	err = o.Raw(sql, companyId).QueryRow(&item)
 	return
 }

+ 1 - 1
models/company/company_contract.go

@@ -19,7 +19,7 @@ type CompanyContractPermission struct {
 }
 
 func GetCompanyContractPermissionCheck(companyContractId, permissionId int) (count int, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := `SELECT COUNT(1) AS count FROM company_contract_permission AS a WHERE a.company_contract_id=? AND a.chart_permission_id=? `
 	err = o.Raw(sql, companyContractId, permissionId).QueryRow(&count)
 	return

+ 11 - 12
models/company_activity_trip.go

@@ -3,7 +3,7 @@ package models
 import "github.com/beego/beego/v2/client/orm"
 
 func GetCountCompanyDetailByIdGroupTrip(companyId int) (count int, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := ` SELECT
 	COUNT( 1 ) AS count 
 FROM
@@ -26,7 +26,7 @@ WHERE
 }
 
 func GetCompanyDetailByIdGroupTrip(companyId int) (item *CompanyDetail, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := ` SELECT a.company_id,a.company_name,b.status,b.seller_id,b.seller_name,c.mobile ,b.is_suspend
             FROM company AS a
 			INNER JOIN company_product AS b ON a.company_id=b.company_id
@@ -40,7 +40,7 @@ func GetCompanyDetailByIdGroupTrip(companyId int) (item *CompanyDetail, err erro
 }
 
 func GetCompanyPermissionByUserTrip(companyId int) (permission string, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := ` SELECT
 			GROUP_CONCAT( DISTINCT b.remark ORDER BY b.sort ASC SEPARATOR ',' ) AS permission 
 		FROM
@@ -70,14 +70,14 @@ func GetCompanyPermissionByUserZhengShiTrip(companyId int) (permission string, e
 			AND c.is_suspend=0
             AND b.cygx_auth=1
 			AND ( a.is_upgrade = 1 AND c.STATUS = '正式' OR c.STATUS = '永续' ) `
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	err = o.Raw(sql, companyId).QueryRow(&permission)
 	return
 }
 
 // GetCompanyReportPermissionUpgrade 获取升级的权限类型
 func GetCompanyReportPermissionUpgrade(companyId, productId int) (items []*CompanyReportPermission, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := `SELECT
 	re.*
 FROM
@@ -103,14 +103,14 @@ func GetChartPermissionByIds(permissionIds []string) (list []*ChartPermission, e
 	sql := qb.String()
 
 	// 执行 SQL 语句
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	_, err = o.Raw(sql).QueryRows(&list)
 	return
 }
 
 // GetCompanyPermissionNameCheck 通过名称判断客户是否开了某一类型的权限
 func GetCompanyPermissionNameCheck(companyId, productId int, permissionName string) (count int, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := `SELECT
 			COUNT( 1 ) AS count 
 		FROM
@@ -125,10 +125,9 @@ func GetCompanyPermissionNameCheck(companyId, productId int, permissionName stri
 	return
 }
 
-
 // GetCompanyReportPermissionByCompanyIdAndProductId 获取权限类型
 func GetCompanyReportPermissionByCompanyIdAndProductId(companyId, productId int) (items []*CompanyReportPermission, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := `SELECT
 	re.*
 FROM
@@ -144,7 +143,7 @@ WHERE
 
 // GetCompanyReportPermissionByCompanyIdAndProductIdForInit 获取权限类型-初始化用,去掉正式的判断
 func GetCompanyReportPermissionByCompanyIdAndProductIdForInit(companyId, productId int) (items []*CompanyReportPermission, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := `SELECT
 	re.*
 FROM
@@ -160,7 +159,7 @@ WHERE
 
 // GetCompanyReportPermissionByCompanyIdAndProductIdForInit 获取权限类型-初始化total用,去掉权限的判断
 func GetCompanyReportPermissionByCompanyIdAndProductIdForInit2(companyId, productId int) (items []*CompanyReportPermission, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := `SELECT
 	re.*
 FROM
@@ -172,4 +171,4 @@ WHERE
 	 `
 	_, err = o.Raw(sql, companyId, productId).QueryRows(&items)
 	return
-}
+}

+ 3 - 2
models/company_product.go

@@ -6,14 +6,15 @@ import (
 
 // 获取是否属于权益客户
 func GetCountCompanyProductCompanyId(companyId, productId int) (count int, err error) {
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := `SELECT  COUNT(1) AS count FROM company_product WHERE company_id = ?  AND product_id = ?  `
-	err = orm.NewOrm().Raw(sql, companyId, productId).QueryRow(&count)
+	err = o.Raw(sql, companyId, productId).QueryRow(&count)
 	return
 }
 
 // 获取列表
 func GetCompanyProductList(condition string, pars []interface{}) (items []*CompanyProduct, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := `SELECT *  FROM company_product WHERE 1= 1 `
 	if condition != "" {
 		sql += condition

+ 2 - 2
models/company_report_permission.go

@@ -28,7 +28,7 @@ func GetCompanyReportPermissionDetailByCondition(condition string, pars []interf
 	if condition == "" {
 		return
 	}
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := `SELECT * FROM company_report_permission  WHERE 1 = 1  ` + condition
 	err = o.Raw(sql, pars).QueryRow(&item)
 	return
@@ -36,7 +36,7 @@ func GetCompanyReportPermissionDetailByCondition(condition string, pars []interf
 
 // 列表
 func GetCompanyReportPermissionList(condition string, pars []interface{}) (items []*CompanyReportPermission, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := `SELECT * FROM company_report_permission  WHERE 1= 1 `
 	if condition != "" {
 		sql += condition

+ 29 - 27
models/crm_company.go

@@ -182,23 +182,25 @@ type CompanySource struct {
 	SourceName string `description:"来源名称"`
 }
 
-//判断公司名称是否存在
+// 判断公司名称是否存在
 func GetCompanyCountByName(companyName string) (count int, err error) {
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := `SELECT  COUNT(1) AS count FROM company WHERE company_name = ?`
-	err = orm.NewOrm().Raw(sql, companyName).QueryRow(&count)
+	err = o.Raw(sql, companyName).QueryRow(&count)
 	return
 }
 
-//判断三方公司公司名称是否存在
+// 判断三方公司公司名称是否存在
 func GetCompanyCountByThirdName(tripartiteCompanyCode string) (count int, err error) {
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := `SELECT  COUNT(1) AS count FROM company WHERE tripartite_company_code = ?`
-	err = orm.NewOrm().Raw(sql, tripartiteCompanyCode).QueryRow(&count)
+	err = o.Raw(sql, tripartiteCompanyCode).QueryRow(&count)
 	return
 }
 
-//获取来源详情
+// 获取来源详情
 func GetCompanySourceByName(companyName string) (item *CompanySource, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := `SELECT *  FROM company_source WHERE source_name = ?`
 	err = o.Raw(sql, companyName).QueryRow(&item)
 	return
@@ -206,7 +208,7 @@ func GetCompanySourceByName(companyName string) (item *CompanySource, err error)
 
 func GetCompanyCode() (companyCode string, err error) {
 	var num int
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := `SELECT COUNT(1) AS num FROM company WHERE created_time >=? `
 	err = o.Raw(sql, time.Now().Format(utils.FormatDate)).QueryRow(&num)
 	if err != nil {
@@ -216,74 +218,74 @@ func GetCompanyCode() (companyCode string, err error) {
 	return
 }
 
-//新增客户
+// 新增客户
 func AddCompany(item *Company) (lastId int64, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	lastId, err = o.Insert(item)
 	return
 }
 
-//更新客户基础信息
+// 更新客户基础信息
 func (company *Company) Update(cols []string) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	_, err = o.Update(company, cols...)
 	fmt.Println(company)
 	fmt.Println(err)
 	return
 }
 
-//新增客户产品
+// 新增客户产品
 func AddCompanyProduct(item *CompanyProduct) (newId int64, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	newId, err = o.Insert(item)
 	return
 }
 
-//新增客户产品
+// 新增客户产品
 func AddCompanyProductLog(item *CompanyProductLog) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	_, err = o.Insert(item)
 	return
 }
 
 func GetCompanyReportPermissionCount(companyId, productId int) (count int, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := `SELECT COUNT(1) AS count FROM company_report_permission WHERE company_id=? AND product_id=? `
 	err = o.Raw(sql, companyId, productId).QueryRow(&count)
 	return
 }
 
 func DeleteCompanyReportPermission(companyId, productId int) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := ` DELETE FROM company_report_permission WHERE company_id=? AND product_id=? `
 	_, err = o.Raw(sql, companyId, productId).Exec()
 	return
 }
 
-//新增客户权限
+// 新增客户权限
 func AddCompanyReportPermission(item *CompanyReportPermission) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	_, err = o.Insert(item)
 	return
 }
 
-//新增客户权限日志
+// 新增客户权限日志
 func AddCompanyPermissionLog(item *CompanyPermissionLog) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	_, err = o.Insert(item)
 	return
 }
 
-//新增客户操作记录
+// 新增客户操作记录
 func AddCompanyOperationRecord(item *CompanyOperationRecord) (lastId int64, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	lastId, err = o.Insert(item)
 	return
 }
 
-//新增客户产品
+// 新增客户产品
 func AddCompanyLog(item *CompanyLog) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	_, err = o.Insert(item)
 	return
 }
@@ -301,9 +303,9 @@ type UserSellerRelation struct {
 	CreateTime time.Time `description:"创建时间"`
 }
 
-//添加销售员与员工的关系
+// 添加销售员与员工的关系
 func AddUserSellerRelation(userId int64, companyId, sellerId, productId int, seller, mobile, email string) (lastId int64, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	relation := UserSellerRelation{
 		UserId:     int(userId),
 		SellerId:   sellerId,

+ 33 - 12
models/cygx_tag.go

@@ -34,20 +34,41 @@ func (m *CygxTag) Update(cols []string) (err error) {
 }
 
 type CygxTagList struct {
-	TagId         int64  `orm:"column(tag_id);pk"`
-	TagName       string `orm:"column(tag_name);NOT NULL"`       // 标签名
-	ArticleTypes  string `orm:"column(article_types);NOT NULL"`  // 报告系列
-	ActivityTypes string `orm:"column(activity_types);NOT NULL"` // 活动类型
-	Industries    string `orm:"column(industries);NOT NULL"`     // 产业
-	SubjectNames  string `orm:"column(subject_names);NOT NULL"`  // 标的
-	Sort          int    `orm:"column(sort);"`                   // 优先级
-	ModifyTime    string `orm:"column(modify_time)"`             // 修改时间
-	CreateTime    string `orm:"column(create_time)"`             // 创建时间
-	OnlineTime    string `orm:"column(online_time)"`             // 上线时间
-	OfflineTime   string `orm:"column(offline_time)"`            // 下线时间
-	Status        int    `orm:"column(status);NOT NULL"`         // 状态:0-禁用 1-启用
+	TagId         int64    `orm:"column(tag_id);pk"`
+	TagName       string   `orm:"column(tag_name);NOT NULL"`       // 标签名
+	ArticleTypes  string   `orm:"column(article_types);NOT NULL"`  // 报告系列
+	ActivityTypes string   `orm:"column(activity_types);NOT NULL"` // 活动类型
+	Industries    string   `orm:"column(industries);NOT NULL"`     // 产业
+	SubjectNames  string   `orm:"column(subject_names);NOT NULL"`  // 标的
+	Sort          int      `orm:"column(sort);"`                   // 优先级
+	ModifyTime    string   `orm:"column(modify_time)"`             // 修改时间
+	CreateTime    string   `orm:"column(create_time)"`             // 创建时间
+	OnlineTime    string   `orm:"column(online_time)"`             // 上线时间
+	OfflineTime   string   `orm:"column(offline_time)"`            // 下线时间
+	Status        int      `orm:"column(status);NOT NULL"`         // 状态:0-禁用 1-启用
+	Atag          bool     // A标签是否有值
+	Btag          bool     // A标签是否有值
+	Ctag          bool     // A标签是否有值
+	Dtag          bool     // A标签是否有值
+	CheckList     []string // ABCD勾选了哪几列
 }
 
+// 列表
+func GetCygxTagListCondition(condition string, pars []interface{}, startSize, pageSize int) (items []*CygxTagList, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM cygx_tag as a WHERE 1= 1 `
+	if condition != "" {
+		sql += condition
+	}
+	if startSize+pageSize > 0 {
+		sql += ` LIMIT ?,?  `
+		_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
+	} else {
+		_, err = o.Raw(sql, pars).QueryRows(&items)
+	}
+
+	return
+}
 
 // 获取tag列表
 func GetCygxTagList(cond string) (items []*CygxTagList, err error) {

+ 15 - 2
models/db.go

@@ -10,11 +10,18 @@ import (
 
 func init() {
 
-	_ = orm.RegisterDataBase("default", "mysql", utils.MYSQL_URL)
+	_ = orm.RegisterDataBase("default", "mysql", utils.MYSQL_URL_CYGX)
 	orm.SetMaxIdleConns("default", 50)
 	orm.SetMaxOpenConns("default", 100)
 
-	db, _ := orm.GetDB("default")
+	cygx_db, _ := orm.GetDB("default")
+	cygx_db.SetConnMaxLifetime(10 * time.Minute)
+
+	_ = orm.RegisterDataBase("weekly_report", "mysql", utils.MYSQL_URL)
+	orm.SetMaxIdleConns("weekly_report", 50)
+	orm.SetMaxOpenConns("weekly_report", 100)
+
+	db, _ := orm.GetDB("weekly_report")
 	db.SetConnMaxLifetime(10 * time.Minute)
 
 	_ = orm.RegisterDataBase("rddp", "mysql", utils.MYSQL_URL_RDDP)
@@ -156,9 +163,15 @@ func init() {
 		new(CygxActivityPointsBill),
 		new(CygxActivityPointsCompany),
 		new(CygxTagHistory),
+		new(CygxReportMappingCategoryGroup),
 		new(CygxActivitySpecialInheritPointsCompany),
+		new(CygxApplyCollection),
 		new(CygxArticleApplyAppointmentExpert),
 		new(CygxBannerYxSurvey),
+		new(CygxReportSelectionLogApply),
+		new(CygxResourceDataIndustrialGroupManagement),
+		new(CygxResourceDataIndustrialGroupSubject),
+		new(CygxIndustryFllowLog),
 		new(CygxYanxuanSpecialRecord),
 		new(CygxYanxuanSpecialCollect),
 		new(CygxYanxuanSpecial),

+ 18 - 0
models/industrial_article_group_management.go

@@ -78,3 +78,21 @@ func GetIndustrialArticleGroupManagementList(condition string, pars []interface{
 	_, err = orm.NewOrm().Raw(sql, pars).QueryRows(&list)
 	return
 }
+
+// 列表
+func GetIndustrialArticleGroupManagementListByArticleId(articleId int) (items []*CygxIndustrialArticleGroupManagement, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT
+			p.permission_name,
+			p.chart_permission_id,
+			m.industrial_management_id,
+			m.industry_name 
+			FROM
+			cygx_industrial_article_group_management AS am
+			INNER JOIN cygx_industrial_management AS m ON m.industrial_management_id = am.industrial_management_id
+			INNER JOIN chart_permission AS p ON p.chart_permission_id = m.chart_permission_id 
+			WHERE
+			am.article_id = ?`
+	_, err = o.Raw(sql, articleId).QueryRows(&items)
+	return
+}

+ 15 - 0
models/industrial_article_group_subject.go

@@ -64,3 +64,18 @@ func GetIndustrialArticleGroupSubjectListByHz(IndustrialManagementId int) (items
 	_, err = o.Raw(sql, IndustrialManagementId).QueryRows(&items)
 	return
 }
+
+// 列表
+func GetSubjectArticleGroupManagementListByArtcileId(articleId int) (items []*SubjectActivityGroupManagementRep, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT
+			s.subject_name,
+			s.industrial_subject_id 
+			FROM
+			cygx_industrial_article_group_subject AS ag
+			INNER JOIN cygx_industrial_subject AS s ON s.industrial_subject_id = ag.industrial_subject_id 
+			WHERE
+			ag.article_id = ?`
+	_, err = o.Raw(sql, articleId).QueryRows(&items)
+	return
+}

+ 28 - 0
models/industry_fllow_log.go

@@ -0,0 +1,28 @@
+package models
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+type CygxIndustryFllowLog struct {
+	Id                     int       `orm:"column(id);pk"`
+	IndustrialManagementId int       `description:"产业D"`
+	UserId                 int       `description:"用户ID"`
+	Mobile                 string    `description:"手机号"`
+	Email                  string    `description:"邮箱"`
+	CompanyId              int       `description:"公司id"`
+	CompanyName            string    `description:"公司名称"`
+	Type                   int       `description:"操作方式,1报名,2取消报名"`
+	CreateTime             time.Time `description:"创建时间"`
+	ModifyTime             time.Time `description:"更新时间"`
+	RealName               string    `description:"用户实际名称"`
+	Source                 int       `description:"来源1查研观向,2查研观向小助手,3勾选全部赛道的用户进行自动关注"`
+}
+
+// 添加
+func AddCygxIndustryFllowLog(item *CygxIndustryFllowLog) (lastId int64, err error) {
+	o := orm.NewOrm()
+	lastId, err = o.Insert(item)
+	return
+}

+ 12 - 12
models/micro_roadshow.go

@@ -102,10 +102,10 @@ func GetMicroRoadShowVideoPageListV8(startSize, pageSize int, condition string,
 			art.chart_permission_id,
 			art.chart_permission_name,
 			"" AS play_seconds,
-			"" AS background_img,
+			v.background_img,
 			"" AS industry_name,
 			"",
-			"" AS share_img,
+			v.share_img,
 			v.activity_id
 		FROM
 			cygx_activity_video as v
@@ -129,10 +129,10 @@ func GetMicroRoadShowVideoPageListV8(startSize, pageSize int, condition string,
 			b.chart_permission_id,
 			b.chart_permission_name,
 			a.voice_play_seconds AS play_seconds,
-			a.img_url AS background_img,
+			a.background_img,
 			"" AS industry_name,
 			"",
-			"" AS share_img,
+			a.share_img,
 			a.activity_id 
 		FROM
 			cygx_activity_voice AS a
@@ -187,9 +187,9 @@ func CountMicroRoadShowVideoPageList(condition string, pars []interface{}, condi
 			art.chart_permission_id,
 			art.chart_permission_name,
 			"" AS play_seconds,
-			"" AS background_img,
+			v.background_img,
 			"" AS industry_name,
-			"" AS share_img,
+			v.share_img,
 			v.activity_id
 		FROM
 			cygx_activity_video as v
@@ -208,9 +208,9 @@ func CountMicroRoadShowVideoPageList(condition string, pars []interface{}, condi
 			b.chart_permission_id,
 			b.chart_permission_name,
 			a.voice_play_seconds AS play_seconds,
-			a.img_url AS background_img,
+			a.background_img,
 			"" AS industry_name,
-			"" AS share_img,
+			a.share_img,
 			a.activity_id 
 		FROM
 			cygx_activity_voice AS a
@@ -266,9 +266,9 @@ func GetMicroRoadShowVideoPageListIkWord(startSize, pageSize int, condition stri
 			art.chart_permission_id,
 			art.chart_permission_name,
 			"" AS play_seconds,
-			"" AS background_img,
+			v.background_img,
 			"" AS industry_name,
-			"" AS share_img,
+			v.share_img,
 			v.activity_id
 		FROM
 			cygx_activity_video as v
@@ -292,9 +292,9 @@ func GetMicroRoadShowVideoPageListIkWord(startSize, pageSize int, condition stri
 			b.chart_permission_id,
 			b.chart_permission_name,
 			a.voice_play_seconds AS play_seconds,
-			a.img_url AS background_img,
+			a.background_img,
 			"" AS industry_name,
-			"" AS share_img,
+			a.share_img,
 			a.activity_id 
 		FROM
 			cygx_activity_voice AS a

+ 6 - 4
models/product_interior.go

@@ -88,10 +88,12 @@ type CygxProductInteriorResp struct {
 }
 
 type ProductInteriorUrlResp struct {
-	ChartPermissionId int    `description:"行业id"`
-	SourceId          int    `description:"资源ID"`
-	Type              int    `description:"类型:1普通文本,2:文章、3:活动、4:产业"`
-	Body              string `description:"内容"`
+	ChartPermissionId int                     `description:"行业id"`
+	SourceId          int                     `description:"资源ID"`
+	Type              int                     `description:"类型:1普通文本,2:文章、3:活动、4:产业"`
+	Body              string                  `description:"内容"`
+	ActivityVideo     *CygxActivityVideoReq   //活动视频
+	AuthInfo          *UserPermissionAuthInfo // 权限
 }
 
 // 获取数量

+ 4 - 2
models/report.go

@@ -122,7 +122,7 @@ func GetReportAndproductInteriorIndustrialList(pars []interface{}, categoryId, i
 			INNER JOIN cygx_industrial_article_group_management AS man_g ON man_g.article_id = art.article_id 
 		WHERE
 			art.publish_status = 1 
-			AND category_id IN ( SELECT category_id_celue FROM cygx_report_mapping_group WHERE id_cygx = ` + strconv.Itoa(categoryId) + ` ) 
+			AND art.article_id IN ( SELECT article_id FROM cygx_report_mapping_category_group WHERE id_cygx = ` + strconv.Itoa(categoryId) + ` ) 
 			AND art.is_class = 1 
 			AND man_g.industrial_management_id =` + strconv.Itoa(industrialManagementId) + ` 
 		GROUP BY
@@ -157,16 +157,18 @@ func GetReportAndproductIndustrylList(categoryId, startSize, pageSize int) (item
 	sql := `SELECT
 			art.article_id,
 			art.title,
+			art.abstract,
 			art.publish_date,
 			1 AS resource 
 		FROM
 			cygx_article AS art 
 		WHERE
 			art.publish_status = 1 
-			AND category_id IN ( SELECT category_id_celue FROM cygx_report_mapping_group WHERE id_cygx = ` + strconv.Itoa(categoryId) + ` ) UNION ALL
+			AND art.article_id IN ( SELECT article_id FROM cygx_report_mapping_category_group WHERE id_cygx = ` + strconv.Itoa(categoryId) + ` ) UNION ALL
 		SELECT
 			art.product_interior_id AS article_id,
 			art.title,
+			"" as abstract,
 			art.publish_time AS publish_date,
 			2 AS resource 
 		FROM

+ 64 - 0
models/report_mapping_category_group.go

@@ -0,0 +1,64 @@
+package models
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+type CygxReportMappingCategoryGroup struct {
+	Id                int       `orm:"column(id);pk" description:"id"`
+	ChartPermissionId int       `description:"行业ID"`
+	IdCygx            int       `description:"表cygx_report_mapping_cygx 主键ID"`
+	ArticleId         int       `description:"报告Id"`
+	CreateTime        time.Time `description:"创建时间"`
+	ModifyTime        time.Time `description:"更新时间"`
+	PermissionType    int       `description:"1主观,2客观 ,0不限制"`
+}
+
+type CygxReportMappingCategoryGroupResp struct {
+	Id                int       `orm:"column(id);pk" description:"id"`
+	ChartPermissionId int       `description:"行业ID"`
+	IdCygx            int       `description:"表cygx_report_mapping_cygx 主键ID"`
+	ArticleId         int       `description:"报告Id"`
+	CreateTime        time.Time `description:"创建时间"`
+	ModifyTime        time.Time `description:"更新时间"`
+	PermissionType    int       `description:"1主观,2客观 ,0不限制"`
+}
+
+// AddCygxReportMappingCategoryGroupMulti 批量添加
+func AddCygxReportMappingCategoryGroupMulti(items []*CygxReportMappingCategoryGroup, articleId int) (err error) {
+	o, err := orm.NewOrm().Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		if err == nil {
+			o.Commit()
+		} else {
+			o.Rollback()
+		}
+	}()
+	//删除原有数据
+	sql := ` DELETE FROM cygx_report_mapping_category_group WHERE article_id = ? AND is_by_hand = 0  `
+	_, err = o.Raw(sql, articleId).Exec()
+	if err != nil {
+		return
+	}
+	//批量插入新的关联数据
+	if len(items) > 0 {
+		//批量添加流水信息
+		_, err = o.InsertMulti(len(items), items)
+	}
+	return
+}
+
+// 列表
+func GetCygxReportMappingCategoryGroupList(condition string, pars []interface{}) (items []*CygxReportMappingCategoryGroupResp, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM cygx_report_mapping_category_group as art WHERE 1= 1 `
+	if condition != "" {
+		sql += condition
+	}
+	_, err = o.Raw(sql, pars).QueryRows(&items)
+	return
+}

+ 1 - 2
models/report_mapping_cygx.go

@@ -19,13 +19,12 @@ type CygxReportMappingCygx struct {
 }
 
 // 列表
-func GetCygxReportMappingCygxByCon(condition string, pars []interface{}, startSize, pageSize int) (items []*CygxReportMappingCygx, err error) {
+func GetCygxReportMappingCygxByCon(condition string, pars []interface{}) (items []*CygxReportMappingCygx, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT * FROM cygx_report_mapping_cygx as art WHERE 1= 1 `
 	if condition != "" {
 		sql += condition
 	}
-	//sql += ` LIMIT ?,?  `
 	_, err = o.Raw(sql, pars).QueryRows(&items)
 	return
 }

+ 32 - 0
models/report_mapping_group.go

@@ -0,0 +1,32 @@
+package models
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+type CygxReportMappingGroup struct {
+	Id              int       `orm:"column(id);pk" description:"id"`
+	IdCygx          int       `description:"分类ID"`
+	CategoryIdCelue int       `description:"分类ID"`
+	CreateTime      time.Time `description:"创建时间"`
+	ModifyTime      time.Time `description:"更新时间"`
+}
+
+// 添加
+func AddCygxReportMappingGroup(item *CygxReportMappingGroup) (lastId int64, err error) {
+	o := orm.NewOrm()
+	lastId, err = o.Insert(item)
+	return
+}
+
+// 列表
+func GetCygxReportMappingGroupList(condition string, pars []interface{}) (items []*CygxReportMappingGroup, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM cygx_report_mapping_group  WHERE 1= 1 `
+	if condition != "" {
+		sql += condition
+	}
+	_, err = o.Raw(sql, pars).QueryRows(&items)
+	return
+}

+ 4 - 0
models/report_selection.go

@@ -16,6 +16,8 @@ type CygxReportSelectionRep struct {
 	IsRed             bool   `description:"是否标记红点"`
 	ReadNum           int    `description:"阅读次数"`
 	SubjectName       string `description:"标的名称"`
+	Periods           string `description:"期数"`
+	MarketStrategy    string `description:"市场策略核心逻辑汇总"`
 }
 
 type CygxReportSelectionListPublicRep struct {
@@ -73,11 +75,13 @@ type CygxReportSelectionLogDetail struct {
 	IndustrialManagementId string   `description:"产业Id"`
 	IndustrialSubjectId    int      `description:"标的ID"`
 	SubjectName            string   `description:"标的名称"`
+	IsShowApplyButton      bool     `description:"是否展示申请路由按钮"`
 	IsNew                  bool     `description:"是否展示新标签"`
 	Body                   string   `description:"内容"`
 	CompanyLabel           []string `description:"公司标签"`
 	Label                  string   `description:"公司标签"`
 	OverviewArticleId      int      `description:"综述报告Id"`
+	IsShowOverviewArticle  int      `description:"是否展示综述报告 1展示,0隐藏"`
 	List                   []*IndustriaReportSelection
 }
 type IndustriaReportSelection struct {

+ 24 - 0
models/report_selection_log.go

@@ -21,6 +21,22 @@ type CygxReportSelectionLog struct {
 	OverviewArticleId      int       `description:"综述报告Id"`
 }
 
+type CygxReportSelectionLogResp struct {
+	ArticleSunId           int       `description:"子级报告id"`
+	ArticleId              int       `description:"父级报告Id"`
+	ChartPermissionId      int       `description:"行业ID"`
+	PermissionName         string    `description:"行业ID"`
+	CreateTime             time.Time `description:"创建时间"`
+	Body                   string    `description:"内容"`
+	IndustrialSubjectId    int       `description:"标的ID"`
+	IndustrialManagementId string    `description:"产业资源包Id  多个用 , 隔开"`
+	SubjectName            string    `description:"标的名称"`
+	IcoLink                string    `orm:"column(image_url)"description:"图标链接"`
+	CompanyLabel           []string  `description:"公司标签"`
+	Label                  string    `description:"公司标签"`
+	OverviewArticleId      int       `description:"综述报告Id"`
+}
+
 // 列表
 func GetCygxReportSelectionLog(condition string, pars []interface{}, startSize, pageSize int) (items []*CygxReportSelectionLog, err error) {
 	o := orm.NewOrm()
@@ -32,3 +48,11 @@ func GetCygxReportSelectionLog(condition string, pars []interface{}, startSize,
 	_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
 	return
 }
+
+// 通过ID获取详情
+func GetCygxReportSelectionLogDetail(articleId int, subjectName string) (item *CygxReportSelectionLogResp, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM cygx_report_selection_log  WHERE article_id=? AND subject_name = ?  LIMIT 1 `
+	err = o.Raw(sql, articleId, subjectName).QueryRow(&item)
+	return
+}

+ 63 - 0
models/report_selection_log_apply.go

@@ -0,0 +1,63 @@
+package models
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+type CygxReportSelectionLogApply struct {
+	ReportSelectionLogApplyId int `orm:"column(report_selection_log_apply_id);pk"`
+	UserId                    int
+	CreateTime                time.Time
+	Mobile                    string    `description:"手机号"`
+	Email                     string    `description:"邮箱"`
+	CompanyId                 int       `description:"公司id"`
+	CompanyName               string    `description:"公司名称"`
+	ModifyTime                time.Time `description:"修改时间"`
+	RealName                  string    `description:"用户实际名称"`
+	SellerName                string    `description:"所属销售"`
+	RegisterPlatform          int       `description:"来源 1小程序,2:网页"`
+	ArticleId                 int       `description:"报告Id"`
+	IndustrialSubjectId       int       `description:"标的ID"`
+	SubjectName               string    `description:"标的名称"`
+}
+
+type CygxReportSelectionLogApplyReq struct {
+	ArticleId   int    `description:"报告Id"`
+	SubjectName string `description:"标的ID"`
+}
+
+// 添加信息
+func AddCygxReportSelectionLogApply(item *CygxReportSelectionLogApply) (lastId int64, err error) {
+	o, err := orm.NewOrm().Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		if err == nil {
+			o.Commit()
+		} else {
+			o.Rollback()
+		}
+	}()
+
+	//更新申请数量
+	sql := ` UPDATE cygx_report_selection SET  apply_total= 1 + apply_total WHERE  article_id  = ?`
+	_, err = o.Raw(sql, item.ArticleId).Exec()
+	if err != nil {
+		return
+	}
+	lastId, err = o.Insert(item)
+	return
+}
+
+// 获取数量
+func GetCygxReportSelectionLogApplyCount(condition string, pars []interface{}) (count int, err error) {
+	sqlCount := ` SELECT COUNT(1) AS count  FROM cygx_report_selection_log_apply as art WHERE 1= 1  `
+	if condition != "" {
+		sqlCount += condition
+	}
+	o := orm.NewOrm()
+	err = o.Raw(sqlCount, pars).QueryRow(&count)
+	return
+}

+ 37 - 0
models/resource_data.go

@@ -15,6 +15,7 @@ type CygxResourceData struct {
 	CreateTime  time.Time `description:"创建时间"`
 	PublishDate string    `description:"发布时间"`
 	Abstract    string    `description:"摘要"`
+	SearchTag   string    `description:"搜索标签"`
 }
 
 type CygxResourceDataResp struct {
@@ -36,6 +37,7 @@ type CygxResourceDataResp struct {
 	Meetingreviewchapt *CygxMorningMeetingGatherDetailListResp `description:"晨会精华"`
 	ProductInterior    *CygxProductInteriorResp                `description:"产品内测"`
 	IndustrialResource *IndustrialManagementHotResp            `description:"产业资源包"`
+	ReportSelection    *CygxReportSelectionRep                 `description:"重点公司(原报告精选)"`
 }
 
 // Source      string    `description:"资源类型 报告 :article 、图表 :newchart、微路演 :roadshow、活动 :activity、活动视频:activityvideo、活动音频:activityvoice、专项调研活动:activityspecial"`
@@ -87,6 +89,25 @@ func UpdateResourceData(sourceId int, source, publishDate string) (err error) {
 	return
 }
 
+// 修改
+func UpdateResourceDataByItem(item *CygxResourceData) (err error) {
+	o := orm.NewOrm()
+	updateParams := make(map[string]interface{})
+	updateParams["PublishDate"] = item.PublishDate
+	updateParams["SearchTag"] = item.SearchTag
+	ptrStructOrTableName := "cygx_resource_data"
+	whereParam := map[string]interface{}{"source_id": item.SourceId, "source": item.Source}
+	qs := o.QueryTable(ptrStructOrTableName)
+	for expr, exprV := range whereParam {
+		qs = qs.Filter(expr, exprV)
+	}
+	_, err = qs.Update(updateParams)
+	if err != nil {
+		return
+	}
+	return
+}
+
 // 批量删除
 func DeleteResourceDataList(condition string, pars []interface{}) (err error) {
 	if condition == "" {
@@ -97,3 +118,19 @@ func DeleteResourceDataList(condition string, pars []interface{}) (err error) {
 	_, err = o.Raw(sql, pars).Exec()
 	return
 }
+
+// 获取数量
+func GetCygxReportSelectionBySourceAndId(sourceId int, source string) (count int, err error) {
+	o := orm.NewOrm()
+	sqlCount := ` SELECT COUNT(1) AS count  FROM cygx_resource_data  WHERE  source_id = ? AND source =?  `
+	err = o.Raw(sqlCount, sourceId, source).QueryRow(&count)
+	return
+}
+
+// 通过ID跟资源获取详情
+func GetCygxResourceDataByIdAndSource(sourceId int, source string) (item *CygxResourceData, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM cygx_resource_data WHERE  source_id = ? AND source =?  `
+	err = o.Raw(sql, sourceId, source).QueryRow(&item)
+	return
+}

+ 136 - 0
models/resource_data_industrial_group_management.go

@@ -0,0 +1,136 @@
+package models
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+// 首页资源表与产业的关系
+type CygxResourceDataIndustrialGroupManagement struct {
+	Id                     int       `orm:"column(id);pk" description:"主键ID"`
+	ResourceDataId         int       `description:"cygx_resource_data 主键ID"`
+	SourceId               int       `description:"资源ID"`
+	Source                 string    `description:"资源类型 报告 :article 、图表 :newchart、微路演 :roadshow、活动 :activity、活动视频:activityvideo、活动音频:activityvoice、专项调研活动:activityspecial"`
+	IndustrialManagementId int       `description:"cygx_industrial_management表的主键ID"`
+	CreateTime             time.Time `description:"创建时间"`
+}
+
+// 首页资源表与产业的关系
+type CygxResourceDataIndustrialGroupSubject struct {
+	Id                  int       `orm:"column(id);pk" description:"主键ID"`
+	ResourceDataId      int       `description:"cygx_resource_data 主键ID"`
+	SourceId            int       `description:"资源ID"`
+	Source              string    `description:"资源类型 报告 :article 、图表 :newchart、微路演 :roadshow、活动 :activity、活动视频:activityvideo、活动音频:activityvoice、专项调研活动:activityspecial"`
+	IndustrialSubjectId int       `description:"cygx_industrial_subject表的主键ID"`
+	CreateTime          time.Time `description:"创建时间"`
+}
+
+// 关联产业列表
+func GetCygxResourceDataIndustrialGroupManagementList(condition string, pars []interface{}, startSize, pageSize int) (items []*CygxResourceDataIndustrialGroupManagement, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM cygx_resource_data_industrial_group_management as a WHERE 1= 1 `
+	if condition != "" {
+		sql += condition
+	}
+	if startSize+pageSize > 0 {
+		sql += ` LIMIT ?,?  `
+		_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
+	} else {
+		_, err = o.Raw(sql, pars).QueryRows(&items)
+	}
+
+	return
+}
+
+// 关联标的列表
+func GetCygxResourceDataIndustrialGroupSubjectList(condition string, pars []interface{}, startSize, pageSize int) (items []*CygxResourceDataIndustrialGroupSubject, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM cygx_resource_data_industrial_group_subject as a WHERE 1= 1 `
+	if condition != "" {
+		sql += condition
+	}
+	if startSize+pageSize > 0 {
+		sql += ` LIMIT ?,?  `
+		_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
+	} else {
+		_, err = o.Raw(sql, pars).QueryRows(&items)
+	}
+
+	return
+}
+
+// 添加
+func AddCygxResourceDataGroup(sourceId int, source string, industrialItems []*CygxResourceDataIndustrialGroupManagement, subjectItems []*CygxResourceDataIndustrialGroupSubject) (err error) {
+	o := orm.NewOrm()
+	to, err := o.Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		if err != nil {
+			_ = to.Rollback()
+		} else {
+			_ = to.Commit()
+		}
+	}()
+	//删除关联产业
+	sql := `	DELETE FROM cygx_resource_data_industrial_group_management WHERE source_id = ? AND source =? `
+	_, err = to.Raw(sql, sourceId, source).Exec()
+	if err != nil {
+		return
+	}
+	//删除关联标的
+	sql = `	DELETE FROM cygx_resource_data_industrial_group_subject WHERE source_id = ? AND source =? `
+	_, err = to.Raw(sql, sourceId, source).Exec()
+	if err != nil {
+		return
+	}
+
+	//批量插入关联产业
+	if len(industrialItems) > 0 {
+		_, err = to.InsertMulti(len(industrialItems), industrialItems)
+		if err != nil {
+			return
+		}
+	}
+
+	//批量插入关联标的
+	if len(subjectItems) > 0 {
+		_, err = to.InsertMulti(len(subjectItems), subjectItems)
+		if err != nil {
+			return
+		}
+	}
+
+	return
+}
+
+// 删除
+func DeleteCygxResourceDataGroup(sourceId int, source string) (err error) {
+	o := orm.NewOrm()
+	to, err := o.Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		if err != nil {
+			_ = to.Rollback()
+		} else {
+			_ = to.Commit()
+		}
+	}()
+	//删除关联产业
+	sql := `	DELETE FROM cygx_resource_data_industrial_group_management WHERE source_id = ? AND source =? `
+	_, err = to.Raw(sql, sourceId, source).Exec()
+	if err != nil {
+		return
+	}
+	//删除关联标的
+	sql = `	DELETE FROM cygx_resource_data_industrial_group_subject WHERE source_id = ? AND source =? `
+	_, err = to.Raw(sql, sourceId, source).Exec()
+	if err != nil {
+		return
+	}
+
+	return
+}

+ 5 - 5
models/seller.go

@@ -21,7 +21,7 @@ type AdminItem struct {
 }
 
 func GetSellerByCompanyId(companyId int) (item *AdminItem, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := ` SELECT b.*,c.open_id,c.user_id,a.company_name FROM company_product AS a
 			INNER JOIN admin AS b ON a.seller_id=b.admin_id
 			LEFT JOIN wx_user AS c ON b.mobile=c.mobile
@@ -31,7 +31,7 @@ func GetSellerByCompanyId(companyId int) (item *AdminItem, err error) {
 }
 
 func GetSellerByCompanyIdCheckFicc(companyId, productId int) (item *AdminItem, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := ` SELECT b.*,c.open_id,c.user_id,a.company_name FROM company_product AS a
 			INNER JOIN admin AS b ON a.seller_id=b.admin_id
 			LEFT JOIN wx_user AS c ON b.mobile=c.mobile
@@ -41,7 +41,7 @@ func GetSellerByCompanyIdCheckFicc(companyId, productId int) (item *AdminItem, e
 }
 
 func GetSellerByName(userName string) (item *AdminItem, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := ` SELECT * FROM admin WHERE real_name=? `
 	err = o.Raw(sql, userName).QueryRow(&item)
 	return
@@ -54,9 +54,9 @@ func GetSellerByAdminId(adminId int) (item *AdminItem, err error) {
 	return
 }
 
-//获取本组的销售ID
+// 获取本组的销售ID
 func GetSelleridWhichGroup(companyId, productId int) (adminId string, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := ` SELECT
 			GROUP_CONCAT( DISTINCT admin_id SEPARATOR ',' ) AS adminId
 			FROM

+ 22 - 22
models/send_company_user.go

@@ -62,16 +62,16 @@ type CompanyUnJsonList struct {
 	SyncData []CompanyJson `json:"sync_data"`
 }
 
-//删除用户
+// 删除用户
 type ShangHaiCrmUserDeleteResp struct {
 	Social string `json:"social"`
 	Mobile string `json:"phone"`
 	Name   string `json:"name"`
 }
 
-//获取公司
+// 获取公司
 func GetSendCompanyList(condition string) (items []*CompanyJson, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := ` SELECT
 			c.company_name,
 			c.company_id as cid, 
@@ -122,7 +122,7 @@ type PermissionDataResp struct {
 }
 
 func GetSendCompanyPermissionDataList(condition string, pars []interface{}) (items []*PermissionDataResp, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := ` SELECT
 				company_id,
 				c.permission_name,
@@ -140,9 +140,9 @@ func GetSendCompanyPermissionDataList(condition string, pars []interface{}) (ite
 	return
 }
 
-//获取FICC公司
+// 获取FICC公司
 func GetSendCompanyFiccList(condition string) (items []*CompanyJson, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := ` SELECT
 			c.company_name,
 			c.company_id AS cid,
@@ -209,9 +209,9 @@ func GetSendCompanyFiccList(condition string) (items []*CompanyJson, err error)
 	return
 }
 
-//获取用户
+// 获取用户
 func GetSendUserList(condition string) (items []*UserJson, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := ` SELECT
 			c.credit_code,
 			u.real_name,
@@ -272,9 +272,9 @@ type WxUserOpLogDeleteResp struct {
 	RealName         string `description:"真实姓名"`
 }
 
-//获取指定时间内更新的用户
+// 获取指定时间内更新的用户
 func GetWxUserOpLog(createTime string) (items []*WxUserOpLogResp, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := ` SELECT
 			u.company_id 
 		FROM
@@ -286,9 +286,9 @@ func GetWxUserOpLog(createTime string) (items []*WxUserOpLogResp, err error) {
 	return
 }
 
-//获取指定时间内删除的用户
+// 获取指定时间内删除的用户
 func GetWxUserOpLogDelete(createTime string) (items []*WxUserOpLogDeleteResp, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := `SELECT
 			l.*,
 			c.credit_code 
@@ -299,9 +299,9 @@ func GetWxUserOpLogDelete(createTime string) (items []*WxUserOpLogDeleteResp, er
 	return
 }
 
-//获取指定时间内被暂停的客户
+// 获取指定时间内被暂停的客户
 func GetWxUserOpLogSuspend(createTime string) (items []*WxUserOpLogDeleteResp, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := `SELECT
 				* 
 			FROM
@@ -313,9 +313,9 @@ func GetWxUserOpLogSuspend(createTime string) (items []*WxUserOpLogDeleteResp, e
 	return
 }
 
-//获取指定时间内被移动的客户
+// 获取指定时间内被移动的客户
 func GetCompanyOperationRecord(createTime string) (items []*WxUserOpLogDeleteResp, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := `SELECT
 				* 
 			FROM
@@ -327,25 +327,25 @@ func GetCompanyOperationRecord(createTime string) (items []*WxUserOpLogDeleteRes
 	return
 }
 
-//获取指定时间内试用转冻结,冻结转流失的客户
+// 获取指定时间内试用转冻结,冻结转流失的客户
 func GetCompanyFreezeAndLoss(createTime string) (items []*WxUserOpLogResp, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := ` SELECT * FROM  company_operation_record WHERE status IN ('冻结','流失') AND  create_time >  '` + createTime + `'  GROUP BY company_id `
 	_, err = o.Raw(sql).QueryRows(&items)
 	return
 }
 
-//获取指定时间内被移动的用户
+// 获取指定时间内被移动的用户
 func GetWxUserOpLogList(startDate, endDate string) (items []*WxUserOpLogResp, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := ` SELECT company_id,user_id,mobile FROM wx_user_op_log WHERE  log_type IN ('move','add') AND create_time >=  '` + startDate + `' AND create_time <=  '` + endDate + `'    GROUP BY user_id `
 	_, err = o.Raw(sql).QueryRows(&items)
 	return
 }
 
-//获取指定时间内被删除的用户
+// 获取指定时间内被删除的用户
 func GetWxUserOpLogDeleteList(startDate, endDate string) (items []*WxUserOpLogResp, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := ` SELECT company_id,user_id,mobile FROM wx_user_op_log WHERE  log_type IN ('delete') AND create_time >=  '` + startDate + `' AND create_time <=  '` + endDate + `'   GROUP BY user_id `
 	_, err = o.Raw(sql).QueryRows(&items)
 	return

+ 38 - 30
models/user.go

@@ -29,22 +29,25 @@ type UserDetail struct {
 }
 
 func GetUserDetailByUserId(userId int) (item *UserDetail, err error) {
-	o := orm.NewOrm()
-	sql := `SELECT *,
-	( SELECT SUM(count) AS count FROM (
-			SELECT COUNT(1) AS count FROM cygx_article_collect AS a 
-			INNER JOIN cygx_article as art ON art.article_id = a.article_id 
-			WHERE a.user_id=? AND art.publish_status = 1  
-			UNION ALL
-			SELECT COUNT(1) AS count FROM cygx_yanxuan_special_collect AS a
-			INNER JOIN cygx_yanxuan_special as b ON b.id = a.yanxuan_special_id 
-			WHERE a.user_id=? AND b.status = 3) AS c  ) AS con_num,
-	(SELECT	COUNT( 1 ) AS count FROM
-		( SELECT count(*) FROM cygx_article_history_record AS a WHERE a.user_id = ?  GROUP BY a.article_id ) b ) AS history_num ,
-	( SELECT COUNT( 1 ) AS count FROM	cygx_my_schedule AS a INNER JOIN cygx_activity AS art ON art.activity_id = a.activity_id WHERE
-		a.user_id = ? AND art.publish_status = 1 AND art.active_state != 3 ) AS schedule_num
+	o := orm.NewOrmUsingDB("weekly_report")
+	sql := `SELECT *
 	FROM wx_user WHERE user_id = ? `
-	err = o.Raw(sql, userId, userId, userId, userId, userId).QueryRow(&item)
+	err = o.Raw(sql, userId).QueryRow(&item)
+	return
+}
+
+// 足迹数量
+func GetArticleUserHistoryNum(userId int) (count int, err error) {
+	sql := `SELECT	count(*) AS count FROM	( SELECT count(*) FROM cygx_article_history_record AS a WHERE a.user_id = ? GROUP BY a.article_id ) AS c  `
+	err = orm.NewOrm().Raw(sql, userId).QueryRow(&count)
+	return
+}
+
+// 我的日程数量
+func GetArticleUserScheduleNum(userId int) (count int, err error) {
+	sql := `SELECT COUNT( 1 ) AS count FROM	cygx_my_schedule AS a INNER JOIN cygx_activity AS art ON art.activity_id = a.activity_id WHERE
+		a.user_id = ? AND art.publish_status = 1 AND art.active_state != 3  `
+	err = orm.NewOrm().Raw(sql, userId).QueryRow(&count)
 	return
 }
 
@@ -64,6 +67,7 @@ type LoginReq struct {
 
 func PcBindMobile(unionId, mobile string, userId, loginType int) (wxUserId int, err error) {
 	//loginType  登录方式:1:手机,2:邮箱
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := ``
 	if loginType == 1 {
 		sql = `SELECT * FROM wx_user WHERE mobile = ? `
@@ -71,7 +75,7 @@ func PcBindMobile(unionId, mobile string, userId, loginType int) (wxUserId int,
 		sql = "SELECT * FROM wx_user WHERE email = ? "
 	}
 	user := new(WxUser)
-	o := orm.NewOrm()
+
 	err = o.Raw(sql, mobile).QueryRow(&user)
 
 	if err != nil && err.Error() != utils.ErrNoRow() {
@@ -212,7 +216,7 @@ func GetArticleUserCollectList(startSize, pageSize, userId int) (items []*Articl
 	1 = 1  AND a.status = 3	AND c.user_id=? 		
 	ORDER BY create_time DESC 
 LIMIT ?,? `
-	_, err = orm.NewOrm().Raw(sql, userId, userId,userId, startSize, pageSize).QueryRows(&items)
+	_, err = orm.NewOrm().Raw(sql, userId, userId, userId, startSize, pageSize).QueryRows(&items)
 	return
 }
 
@@ -283,7 +287,7 @@ type CountryCodeItem struct {
 }
 
 func AddCountryCode(CountryCode string, user *WxUserItem) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	if user.OutboundCountryCode == "" {
 		sql := `UPDATE wx_user SET country_code=?,outbound_mobile=?,outbound_country_code=?  WHERE user_id=? `
 		_, err = o.Raw(sql, CountryCode, user.OutboundMobile, user.OutboundCountryCode, user.UserId).Exec()
@@ -302,7 +306,7 @@ type OutboundMobileItem struct {
 }
 
 func AddOutboundMobile(item *OutboundMobileItem, userId int) (err error) {
-	o, err := orm.NewOrm().Begin()
+	o, err := orm.NewOrmUsingDB("weekly_report").Begin()
 	if err != nil {
 		return
 	}
@@ -328,7 +332,7 @@ func AddOutboundMobile(item *OutboundMobileItem, userId int) (err error) {
 
 // 用户绑定手机号时同时绑定外呼手机号
 func BindUserOutboundMobile(mobile, countryCode string, userId int) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := `UPDATE wx_user SET outbound_mobile=? ,outbound_country_code = ?, country_code= ? WHERE user_id=? `
 	_, err = o.Raw(sql, mobile, countryCode, countryCode, userId).Exec()
 	return
@@ -336,7 +340,7 @@ func BindUserOutboundMobile(mobile, countryCode string, userId int) (err error)
 
 // 已经绑定手机号,没有绑定外呼手机号的的用户,预约外呼的时候,将外呼手机号同步成手机号
 func BindUserOutboundMobileByMobile(mobile, countryCode string, userId int) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := `UPDATE wx_user SET outbound_mobile=? ,outbound_country_code = ? WHERE user_id=? `
 	_, err = o.Raw(sql, mobile, countryCode, userId).Exec()
 	return
@@ -344,7 +348,7 @@ func BindUserOutboundMobileByMobile(mobile, countryCode string, userId int) (err
 
 // 将手机号为11位的用户,区号默认设置为86
 func ChangeUserOutboundMobileByMobile(userId int) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := `UPDATE wx_user SET country_code = 86 WHERE user_id=? `
 	_, err = o.Raw(sql, userId).Exec()
 	return
@@ -367,6 +371,7 @@ type UserWhiteListRep struct {
 
 // 获取正式试用用户白名单
 func GetFormalUserWhiteList(fieldStr, condition string) (items []*UserWhiteList, err error) {
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := `SELECT ` + fieldStr + `
 		(SELECT cp.seller_name FROM company_product  AS cp WHERE cp.company_id = u.company_id ORDER BY cp.product_id DESC  LIMIT 0,1 ) as seller_name,
 		GROUP_CONCAT( DISTINCT b.chart_permission_name SEPARATOR '/' ) AS permission
@@ -380,12 +385,13 @@ func GetFormalUserWhiteList(fieldStr, condition string) (items []*UserWhiteList,
 		AND b.product_id = 2
 		AND u.company_id >1 ` + condition + `
 		GROUP BY u.user_id`
-	_, err = orm.NewOrm().Raw(sql).QueryRows(&items)
+	_, err = o.Raw(sql).QueryRows(&items)
 	return
 }
 
 // 获取永续用户白名单
 func GetSustainableUserWhiteList(fieldStr, condition string) (items []*UserWhiteList, err error) {
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := `SELECT ` + fieldStr + `
 			(SELECT cp.seller_name FROM company_product  AS cp WHERE cp.company_id = u.company_id ORDER BY cp.product_id DESC  LIMIT 0,1 ) as seller_name,
 			(SELECT
@@ -406,7 +412,7 @@ func GetSustainableUserWhiteList(fieldStr, condition string) (items []*UserWhite
 			WHERE 1 = 1
 			AND u.company_id > 1  ` + condition + `
 			GROUP BY u.user_id `
-	_, err = orm.NewOrm().Raw(sql).QueryRows(&items)
+	_, err = o.Raw(sql).QueryRows(&items)
 	return
 }
 
@@ -426,6 +432,7 @@ type GetSendEmailAllUserWithRAIRep struct {
 }
 
 func GetSendEmailAllUserWithRAI() (items []*GetSendEmailAllUserWithRAIRep, err error) {
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := `SELECT
 			c.company_name,
 			c.credit_code,
@@ -453,7 +460,7 @@ func GetSendEmailAllUserWithRAI() (items []*GetSendEmailAllUserWithRAIRep, err e
 			c.company_id 
 		ORDER BY
 			c.company_id DESC`
-	_, err = orm.NewOrm().Raw(sql).QueryRows(&items)
+	_, err = o.Raw(sql).QueryRows(&items)
 	return
 }
 
@@ -469,6 +476,7 @@ type GetSendEmailAllUserWithCompanyRep struct {
 }
 
 func GetSendEmailAllUserWithCompany() (items []*GetSendEmailAllUserWithCompanyRep, err error) {
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := `SELECT
 			u.real_name,
 			u.mobile,
@@ -487,7 +495,7 @@ func GetSendEmailAllUserWithCompany() (items []*GetSendEmailAllUserWithCompanyRe
 			u.user_id 
 		ORDER BY
 			c.company_id ASC`
-	_, err = orm.NewOrm().Raw(sql).QueryRows(&items)
+	_, err = o.Raw(sql).QueryRows(&items)
 	return
 }
 
@@ -500,7 +508,7 @@ type UserEmail struct {
 
 // 更改用户手机号
 func UpdateUserHeadimgurl(headimgurl string, userId int) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := `UPDATE wx_user SET headimgurl = ? WHERE user_id=? `
 	_, err = o.Raw(sql, headimgurl, userId).Exec()
 	return
@@ -508,7 +516,7 @@ func UpdateUserHeadimgurl(headimgurl string, userId int) (err error) {
 
 // 更改用户邮箱号
 func UpdateUserEmail(email string, userId int) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := `UPDATE wx_user SET email = ? WHERE user_id=? `
 	_, err = o.Raw(sql, email, userId).Exec()
 	return
@@ -516,7 +524,7 @@ func UpdateUserEmail(email string, userId int) (err error) {
 
 // 更新用户标签
 func UpdateUserLabel(userLabel string, userId int) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := `UPDATE wx_user SET user_label = ? WHERE user_id=? `
 	_, err = o.Raw(sql, userLabel, userId).Exec()
 	return
@@ -524,7 +532,7 @@ func UpdateUserLabel(userLabel string, userId int) (err error) {
 
 // 更新用户互动量
 func UpdateUserInteractionNum(interactionNum, userId int) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := `UPDATE wx_user SET interaction_num = ? WHERE user_id=? `
 	_, err = o.Raw(sql, interactionNum, userId).Exec()
 	return

+ 5 - 4
models/user_invitee.go

@@ -18,16 +18,17 @@ type UserInvitee struct {
 	InviteeEmail      string    `description:"邀请人邮箱"`
 }
 
-//添加收藏信息
+// 添加收藏信息
 func AddUserInvite(item *UserInvitee) (lastId int64, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	lastId, err = o.Insert(item)
 	return
 }
 
-//获取数量
+// 获取数量
 func GetUserInviteeCount(userId int) (count int, err error) {
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := `SELECT COUNT(1) AS count FROM user_invitee WHERE inviteed_user_id=? `
-	err = orm.NewOrm().Raw(sql, userId).QueryRow(&count)
+	err = o.Raw(sql, userId).QueryRow(&count)
 	return
 }

+ 2 - 1
models/user_label.go

@@ -31,7 +31,8 @@ type CygxUserLabel struct {
 
 // 获取数量
 func GetCygxUserLabelCount(condition string, pars []interface{}) (count int, err error) {
-	sqlCount := ` SELECT COUNT(1) AS count  FROM cygx_user_label as art WHERE 1= 1   AND modify_time > DATE_SUB(CURDATE(), INTERVAL 3 MONTH)  `
+	//sqlCount := ` SELECT COUNT(1) AS count  FROM cygx_user_label as art WHERE 1= 1   AND modify_time > DATE_SUB(CURDATE(), INTERVAL 3 MONTH)  `
+	sqlCount := ` SELECT COUNT(1) AS count  FROM cygx_user_label as art WHERE 1= 1   `
 	if condition != "" {
 		sqlCount += condition
 	}

+ 66 - 52
models/user_record.go

@@ -27,14 +27,15 @@ type UserRecord struct {
 
 // 根据openid获取用户关系
 func GetUserRecordByOpenId(openId string) (item *UserRecord, err error) {
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := `SELECT * FROM user_record WHERE open_id=? `
-	err = orm.NewOrm().Raw(sql, openId).QueryRow(&item)
+	err = o.Raw(sql, openId).QueryRow(&item)
 	return
 }
 
 // 根据openid解除绑定用户关系
 func UnBindUserRecordByOpenid(openId string) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	msql := ` UPDATE user_record SET user_id = 0,bind_account="" WHERE open_id = ? `
 	_, err = o.Raw(msql, openId).Exec()
 	return
@@ -42,37 +43,22 @@ func UnBindUserRecordByOpenid(openId string) (err error) {
 
 // 根据用户id和平台id获取用户关系
 func GetUserRecordByUserId(userId, platform int) (item *UserRecord, err error) {
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := `SELECT * FROM user_record WHERE user_id=? AND create_platform = ?`
-	err = orm.NewOrm().Raw(sql, userId, platform).QueryRow(&item)
-	return
-}
-
-// 根据用户id和平台id获取用户关系
-func GetUserRecordByUserIdByXzs(mobile string, platform int) (item *OpenIdList, err error) {
-	sql := `SELECT
-			cr.open_id,
-			u.user_id
-		FROM
-			wx_user AS u
-			INNER JOIN user_record AS r ON r.user_id = u.user_id
-			INNER JOIN cygx_user_record AS cr ON cr.union_id = r.union_id 
-		WHERE
-			u.mobile = ? 
-			AND create_platform = ?`
-	err = orm.NewOrm().Raw(sql, mobile, platform).QueryRow(&item)
+	err = o.Raw(sql, userId, platform).QueryRow(&item)
 	return
 }
 
 // 添加用户关系
 func AddUserRecord(record *UserRecord) (recordId int64, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	recordId, err = o.Insert(record)
 	return
 }
 
 // 根据openid绑定用户关系
 func BindUserRecordByOpenid(userId int, openId, bindAccount string) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	msql := " UPDATE user_record SET user_id = ?,bind_account=? WHERE open_id = ? "
 	_, err = o.Raw(msql, userId, bindAccount, openId).Exec()
 	return
@@ -80,7 +66,7 @@ func BindUserRecordByOpenid(userId int, openId, bindAccount string) (err error)
 
 // 修改用户微信信息
 func ModifyUserRecordInfo(openId, nickName, headimgUrl, city, province, country, sessionKey string, sex, userId int) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := `UPDATE user_record SET nick_name=?,headimgurl=?,sex=?,city=?,province=?,country=?,session_key=? WHERE user_id=? and open_id=? `
 	_, err = o.Raw(sql, nickName, headimgUrl, sex, city, province, country, sessionKey, userId, openId).Exec()
 	return
@@ -88,7 +74,7 @@ func ModifyUserRecordInfo(openId, nickName, headimgUrl, city, province, country,
 
 // 修改用户微信信息
 func ModifyUserRecordByDetail(openId, unionId, nickName, headimgUrl, city, province, country string, sex, userId int) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := `UPDATE user_record SET union_id=?, nick_name=?,headimgurl=?,sex=?,city=?,province=?,country=? WHERE user_id=? and open_id=? `
 	_, err = o.Raw(sql, unionId, nickName, headimgUrl, sex, city, province, country, userId, openId).Exec()
 	return
@@ -96,7 +82,7 @@ func ModifyUserRecordByDetail(openId, unionId, nickName, headimgUrl, city, provi
 
 // 修改用户微信信息
 func ModifyUserRecordSessionKey(openId, sessionKey string) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := `UPDATE user_record SET session_key=? WHERE open_id=? `
 	_, err = o.Raw(sql, sessionKey, openId).Exec()
 	return
@@ -121,8 +107,9 @@ func GetUserRecordByMobile(platform int, bindAccount string) (item *OpenIdList,
 
 // 获取该用户第一个的 三方信息(微信头像信息)
 func GetUserThirdRecordByUserId(userId int) (item *UserRecord, err error) {
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := `SELECT * FROM user_record WHERE user_id = ? order by user_record_id asc`
-	err = orm.NewOrm().Raw(sql, userId).QueryRow(&item)
+	err = o.Raw(sql, userId).QueryRow(&item)
 	return
 }
 
@@ -137,50 +124,77 @@ func GetUserRecordListByMobile(platform int, bindAccount string) (items []*OpenI
 	//	platform = 1
 	//	sql = `SELECT open_id,user_id FROM	user_record  WHERE create_platform =? AND bind_account IN (` + bindAccount + `)`
 	//}
-	sql = `SELECT cr.open_id,user_id FROM user_record  as u 
-			INNER JOIN cygx_user_record AS cr ON cr.union_id = u.union_id 
-			WHERE create_platform=? AND bind_account IN (` + bindAccount + `)`
+	sql = `SELECT
+			cr.open_id,
+			cr.cygx_user_id as  user_id 
+		FROM
+		  cygx_user_record  as cr 
+		WHERE 1= 1	AND cygx_bind_account IN (` + bindAccount + `)`
 	_, err = orm.NewOrm().Raw(sql, platform).QueryRows(&items)
 	return
 }
 
-// 获取单个用户openid
-func GetOpenIdDetailByMobile(platform int, bindAccount string) (item *OpenIdList, err error) {
-	o := orm.NewOrm()
-	var sql string
-	sql = `SELECT cr.open_id,wu.user_id FROM user_record  as u 
-			INNER JOIN cygx_user_record AS cr ON cr.union_id = u.union_id 
-			INNER JOIN wx_user AS wu ON wu.mobile = u.bind_account 
-			WHERE create_platform=? AND u.bind_account = ?`
-	err = o.Raw(sql, platform, bindAccount).QueryRow(&item)
-	return
-}
+//// 获取单个用户openid
+//func GetOpenIdDetailByMobile(platform int, bindAccount string) (item *OpenIdList, err error) {
+//	o := orm.NewOrm()
+//	var sql string
+//	sql = `SELECT cr.open_id,wu.user_id FROM user_record  as u
+//			INNER JOIN cygx_user_record AS cr ON cr.union_id = u.union_id
+//			INNER JOIN wx_user AS wu ON wu.mobile = u.bind_account
+//			WHERE create_platform=? AND u.bind_account = ?`
+//	err = o.Raw(sql, platform, bindAccount).QueryRow(&item)
+//	return
+//}
 
 func GetOpenIdByUserIds(ids string) (item []*OpenIdList, err error) {
 	o := orm.NewOrm()
 	var sql string
-	sql = `SELECT cr.open_id,wu.user_id FROM user_record  as u 
-			INNER JOIN cygx_user_record AS cr ON cr.union_id = u.union_id 
-			INNER JOIN wx_user AS wu ON wu.mobile = u.bind_account 
-			WHERE create_platform=4 AND u.user_id IN (` + ids + `)`
+	sql = ` SELECT
+			cr.open_id,
+			cr.cygx_user_id as  user_id 
+		FROM
+		  cygx_user_record  as cr 
+		WHERE 1= 1	AND cygx_user_id IN (` + ids + `)`
 	_, err = o.Raw(sql).QueryRows(&item)
 	return
 }
 
+//// 根据手机号获取用户的openid
+//func GetUserRecordListByMobileArr(bindAccount []string) (items []*OpenIdList, err error) {
+//	lenarr := len(bindAccount)
+//	if lenarr == 0 {
+//		return
+//	}
+//	var condition string
+//	var pars []interface{}
+//	condition = ` AND u.bind_account IN (` + utils.GetOrmInReplace(lenarr) + `)`
+//	pars = append(pars, bindAccount)
+//	sql := `SELECT cr.open_id,u.user_id
+//			FROM user_record  as u
+//			INNER JOIN cygx_user_record AS cr ON cr.union_id = u.union_id
+//			WHERE u.create_platform=4 ` + condition
+//	_, err = orm.NewOrm().Raw(sql, pars).QueryRows(&items)
+//	return
+//}
+
 // 根据手机号获取用户的openid
-func GetUserRecordListByMobileArr(bindAccount []string) (items []*OpenIdList, err error) {
-	lenarr := len(bindAccount)
+func GetUserRecordListByMobileArr(mobiles []string) (items []*OpenIdList, err error) {
+	o := orm.NewOrm()
+	lenarr := len(mobiles)
 	if lenarr == 0 {
 		return
 	}
 	var condition string
 	var pars []interface{}
-	condition = ` AND u.bind_account IN (` + utils.GetOrmInReplace(lenarr) + `)`
-	pars = append(pars, bindAccount)
-	sql := `SELECT cr.open_id,u.user_id
-			FROM user_record  as u 
-			INNER JOIN cygx_user_record AS cr ON cr.union_id = u.union_id 
-			WHERE u.create_platform=4 ` + condition
-	_, err = orm.NewOrm().Raw(sql, pars).QueryRows(&items)
+	condition = ` AND u.cygx_bind_account IN (` + utils.GetOrmInReplace(lenarr) + `)`
+	pars = append(pars, mobiles)
+	sql := `SELECT
+			u.open_id,
+			u.cygx_user_id AS user_id 
+		FROM
+			cygx_user_record AS u 
+		WHERE
+			1 = 1  ` + condition
+	_, err = o.Raw(sql, pars).QueryRows(&items)
 	return
 }

+ 2 - 2
models/user_template_record.go

@@ -15,9 +15,9 @@ type UserTemplateRecord struct {
 	SendType   int
 }
 
-//添加banner
+// 添加
 func AddUserTemplateRecord(item *UserTemplateRecord) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	_, err = o.Insert(item)
 	return
 }

+ 1 - 1
models/wechat.go

@@ -44,7 +44,7 @@ type ReturnBodyRule struct {
 }
 
 func GetWxAccessToken() (accessTokenStr string, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := `SELECT * FROM wx_token LIMIT 1`
 	wxToken := new(WxToken)
 	err = o.Raw(sql).QueryRow(&wxToken)

+ 45 - 17
models/wx_template_msg.go

@@ -14,9 +14,11 @@ type SendTemplateResponse struct {
 type OpenIdList struct {
 	OpenId string
 	UserId int
+	Mobile string `description:"手机号"`
 }
 
 func GetOpenIdList() (items []*OpenIdList, err error) {
+	o := orm.NewOrmUsingDB("weekly_report")
 	openIdstr := WxUsersGet()
 	sql := `SELECT open_id FROM wx_user AS wu 
           INNER JOIN company AS c ON c.company_id = wu.company_id 
@@ -24,15 +26,20 @@ func GetOpenIdList() (items []*OpenIdList, err error) {
 	if openIdstr != "" {
 		sql += ` AND open_id in (` + openIdstr + `) `
 	}
-	_, err = orm.NewOrm().Raw(sql).QueryRows(&items)
+	_, err = o.Raw(sql).QueryRows(&items)
 	return
 }
 
 func GetWxOpenIdByMobileList(mobile string) (items []*OpenIdList, err error) {
 	//sql := `SELECT * FROM user_record WHERE bind_account IN (` + utils.WxMsgTemplateIdAskMsgMobile + `) AND create_platform = 1`
-	sql := `SELECT cr.*,user_id FROM user_record  as c
-			INNER JOIN cygx_user_record AS cr ON cr.union_id = c.union_id
-			WHERE bind_account IN (` + mobile + `) AND create_platform = 4`
+	//sql := `SELECT cr.*,user_id FROM user_record  as c
+	//		INNER JOIN cygx_user_record AS cr ON cr.union_id = c.union_id
+	//		WHERE bind_account IN (` + mobile + `) AND create_platform = 4`
+
+	sql := ` SELECT
+				union_id,
+				cygx_user_id AS user_id
+				FROM cygx_user_record	WHERE	1 = 1	AND cygx_bind_account IN (` + mobile + `)`
 	_, err = orm.NewOrm().Raw(sql).QueryRows(&items)
 	return
 }
@@ -46,30 +53,51 @@ type AdminOpenIdList struct {
 
 // GetAdminOpendidByCompany 通过用户公司ID获取对应销售的openid
 func GetAdminOpendidByCompany(condition string, pars []interface{}) (list []*AdminOpenIdList, err error) {
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := `SELECT
-			cr.open_id,a.mobile,p.company_id,cr.union_id
+			a.mobile,
+			p.company_id 
 		FROM
 			company_product AS p
 			INNER JOIN admin AS a ON a.admin_id = p.seller_id 
-			INNER JOIN user_record  as c ON c.bind_account = a.mobile
-			INNER JOIN cygx_user_record AS cr ON cr.union_id = c.union_id
 		WHERE
 			1 = 1 
-			AND p.product_id = 2
-			AND create_platform = 4 ` + condition
-	_, err = orm.NewOrm().Raw(sql, pars).QueryRows(&list)
+			AND p.product_id = 2 ` + condition
+	_, err = o.Raw(sql, pars).QueryRows(&list)
 	return
 }
 
+//func GetWxOpenIdByMobileSliceList(mobiles []string) (items []*OpenIdList, err error) {
+//	itemsLen := len(mobiles)
+//	if itemsLen == 0 {
+//		return
+//	}
+//	o := orm.NewOrm()
+//	sql := `SELECT cr.*,user_id FROM user_record  as c
+//			INNER JOIN cygx_user_record AS cr ON cr.union_id = c.union_id
+//			WHERE bind_account IN (` + utils.GetOrmInReplace(itemsLen) + `) AND create_platform = 4`
+//	_, err = o.Raw(sql, mobiles).QueryRows(&items)
+//	return
+//}
+
+// 根据手机号获取用户的openid
 func GetWxOpenIdByMobileSliceList(mobiles []string) (items []*OpenIdList, err error) {
-	itemsLen := len(mobiles)
-	if itemsLen == 0 {
+	o := orm.NewOrm()
+	lenarr := len(mobiles)
+	if lenarr == 0 {
 		return
 	}
-	o := orm.NewOrm()
-	sql := `SELECT cr.*,user_id FROM user_record  as c
-			INNER JOIN cygx_user_record AS cr ON cr.union_id = c.union_id
-			WHERE bind_account IN (` + utils.GetOrmInReplace(itemsLen) + `) AND create_platform = 4`
-	_, err = o.Raw(sql, mobiles).QueryRows(&items)
+	var condition string
+	var pars []interface{}
+	condition = ` AND u.cygx_bind_account IN (` + utils.GetOrmInReplace(lenarr) + `)`
+	pars = append(pars, mobiles)
+	sql := `SELECT
+			u.open_id,
+			u.cygx_user_id AS user_id 
+		FROM
+			cygx_user_record AS u 
+		WHERE
+			1 = 1  ` + condition
+	_, err = o.Raw(sql, pars).QueryRows(&items)
 	return
 }

+ 82 - 63
models/wx_user.go

@@ -90,23 +90,19 @@ type WxUserItem struct {
 }
 
 func GetWxUserItemByUnionid(unionid string) (item *WxUserItem, err error) {
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := `SELECT * FROM wx_user WHERE union_id=? `
-	err = orm.NewOrm().Raw(sql, unionid).QueryRow(&item)
+	err = o.Raw(sql, unionid).QueryRow(&item)
 	return
 }
 
 // 根据用户ID获取相关信息
 func GetWxUserItemByUserId(userId int) (item *WxUserItem, err error) {
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := `SELECT a.*,b.company_name FROM wx_user AS a
 			LEFT JOIN company AS b on a.company_id=b.company_id
 			WHERE a.user_id=? `
-	err = orm.NewOrm().Raw(sql, userId).QueryRow(&item)
-	return
-}
-
-func GetWxUserItemByOpenId(openId string) (item *WxUserItem, err error) {
-	sql := `SELECT * FROM wx_user WHERE open_id=? `
-	err = orm.NewOrm().Raw(sql, openId).QueryRow(&item)
+	err = o.Raw(sql, userId).QueryRow(&item)
 	return
 }
 
@@ -132,7 +128,7 @@ type WxGetUserInfoReq struct {
 
 // 修改用户会话key
 func ModifyWxUserSessionKey(sessionKey string, userId int) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := `UPDATE wx_user SET session_key=? WHERE user_id=? `
 	_, err = o.Raw(sql, sessionKey, userId).Exec()
 	return
@@ -140,7 +136,7 @@ func ModifyWxUserSessionKey(sessionKey string, userId int) (err error) {
 
 // 添加用户信息
 func ModifyWxUserInfo(unionId, nickName, province, city, country, avatar string, gender, userId int) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := `UPDATE wx_user SET union_id=?,unionid=?,nick_name=?,sex=?,province=?,city=?,country=?,headimgurl=? WHERE user_id=? `
 	_, err = o.Raw(sql, unionId, unionId, nickName, gender, province, city, country, avatar, userId).Exec()
 	return
@@ -148,7 +144,7 @@ func ModifyWxUserInfo(unionId, nickName, province, city, country, avatar string,
 
 // 修改用户会话key
 func DeleteWxUserByUserId(userId int) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := `DELETE FROM wx_user WHERE user_id=? `
 	_, err = o.Raw(sql, userId).Exec()
 	return
@@ -177,7 +173,7 @@ type WxGetPhoneNumberReq struct {
 }
 
 func ModifyUsersMobile(usersId int, phoneNumber string) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := `UPDATE wx_user SET mobile=? WHERE user_id=? `
 	_, err = o.Raw(sql, phoneNumber, usersId).Exec()
 	return
@@ -191,48 +187,50 @@ type WxGetPhoneNumberResp struct {
 
 // 根据用户手机号获取相关信息
 func GetWxUserItemByMobile(mobile string) (item *WxUserItem, err error) {
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := `SELECT a.*,b.company_name FROM wx_user AS a
 			LEFT JOIN company AS b on a.company_id=b.company_id
 			WHERE a.mobile=  '` + mobile + `'  ORDER BY a.company_id DESC LIMIT 1 `
-	err = orm.NewOrm().Raw(sql).QueryRow(&item)
+	err = o.Raw(sql).QueryRow(&item)
 	return
 }
 
 // 根据用户手机号获取相关信息
 func GetWxUserAouthByMobile(mobile string) (item *WxUserItem, err error) {
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := `SELECT
 			a.*,
-			s.mobile,
 			b.company_name 
 		FROM
-			cygx_session_mobile AS s
-			LEFT JOIN wx_user AS a ON a.mobile = s.mobile
+		    wx_user AS a 
 			LEFT JOIN company AS b ON a.company_id = b.company_id 
 		WHERE
-			s.mobile = ?
+			a.mobile = ?
 		ORDER BY
 			a.company_id DESC 
 			LIMIT 1`
-	err = orm.NewOrm().Raw(sql, mobile).QueryRow(&item)
+	err = o.Raw(sql, mobile).QueryRow(&item)
 	return
 }
 
 func GetWxUserItemByEmail(email string) (item *WxUserItem, err error) {
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := `SELECT * FROM wx_user WHERE email=? `
-	err = orm.NewOrm().Raw(sql, email).QueryRow(&item)
+	err = o.Raw(sql, email).QueryRow(&item)
 	return
 }
 
 func ModifyReportLastViewTime(uid int) (err error) {
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := ` UPDATE wx_user SET report_last_view_time=NOW()
 			WHERE user_id=? `
-	_, err = orm.NewOrm().Raw(sql, uid).Exec()
+	_, err = o.Raw(sql, uid).Exec()
 	return
 }
 
 // 变更联系人是否已注册状态
 func ModifyWxUserRegisterStatus(userId int) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := `UPDATE wx_user SET is_register=?,source=3,register_time=NOW() WHERE user_id = ? `
 	_, err = o.Raw(sql, 1, userId).Exec()
 	return
@@ -240,7 +238,7 @@ func ModifyWxUserRegisterStatus(userId int) (err error) {
 
 // 修改用户是否绑定外呼手机号弹窗
 func ModifyWxUserIsMsgOutboundMobile(userId int) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := `UPDATE wx_user SET is_msg_outbound_mobile=1 WHERE user_id=? `
 	_, err = o.Raw(sql, userId).Exec()
 	return
@@ -248,7 +246,7 @@ func ModifyWxUserIsMsgOutboundMobile(userId int) (err error) {
 
 // 列表
 func GetUserListAll() (items []*WxUserItem, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := `SELECT * FROM wx_user  WHERE mobile <>'' AND outbound_mobile = ''`
 	_, err = o.Raw(sql).QueryRows(&items)
 	return
@@ -256,7 +254,7 @@ func GetUserListAll() (items []*WxUserItem, err error) {
 
 // 修改手机号区号  8位号码+852,9位号码+886,10位号码+1,11位及以上号码+86
 func UPdateUserCountryCode(item *WxUserItem) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	if item.CountryCode == "" && len(item.Mobile) >= 11 {
 		sql := ` UPDATE wx_user SET  outbound_mobile= ? , outbound_country_code=86 , country_code=86  WHERE user_id = ?`
 		_, err = o.Raw(sql, item.Mobile, item.UserId).Exec()
@@ -279,42 +277,47 @@ func UPdateUserCountryCode(item *WxUserItem) (err error) {
 
 // 判断公司下用户名称是否存在
 func GetUserCountByName(companyId int, name string) (count int, err error) {
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := `SELECT  COUNT(1) AS count FROM wx_user WHERE company_id = ? AND real_name = ?`
-	err = orm.NewOrm().Raw(sql, companyId, name).QueryRow(&count)
+	err = o.Raw(sql, companyId, name).QueryRow(&count)
 	return
 }
 
 // 判断这个用户是否被设置消息提醒
 func GetUserRemind(uid int) (count int, err error) {
+	o := orm.NewOrm()
 	sql := `SELECT  COUNT(1) AS count FROM cygx_user_remind WHERE user_id = ? `
-	err = orm.NewOrm().Raw(sql, uid).QueryRow(&count)
+	err = o.Raw(sql, uid).QueryRow(&count)
 	return
 }
 
 // 判断公司下用户名称是否存在
 func GetUserCountByThirdName(companyId int, name string) (count int, err error) {
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := `SELECT  COUNT(1) AS count FROM wx_user WHERE company_id = ? AND tripartite_code = ?`
-	err = orm.NewOrm().Raw(sql, companyId, name).QueryRow(&count)
+	err = o.Raw(sql, companyId, name).QueryRow(&count)
 	return
 }
 
 // 获取公司下一共有多少用户
 func GetUserCountByCompanyId(companyId int) (count int, err error) {
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := `SELECT  COUNT(1) AS count FROM wx_user WHERE company_id = ? `
-	err = orm.NewOrm().Raw(sql, companyId).QueryRow(&count)
+	err = o.Raw(sql, companyId).QueryRow(&count)
 	return
 }
 
 func UpdateUserMobile(uid int, mobile string) (err error) {
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := ` UPDATE wx_user SET mobile=?
 			WHERE user_id=? `
-	_, err = orm.NewOrm().Raw(sql, mobile, uid).Exec()
+	_, err = o.Raw(sql, mobile, uid).Exec()
 	return
 }
 
 // 获取公司下用户详情详情详情
 func GetUserByName(companyId int, name string) (item *WxUser, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := `SELECT *  FROM wx_user WHERE company_id = ? AND real_name = ? `
 	err = o.Raw(sql, companyId, name).QueryRow(&item)
 	return
@@ -322,45 +325,61 @@ func GetUserByName(companyId int, name string) (item *WxUser, err error) {
 
 // 获取公司下用户详情详情详情
 func GetUserByThirdName(companyId int, name string) (item *WxUser, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := `SELECT *  FROM wx_user WHERE company_id = ? AND tripartite_code = ? `
 	err = o.Raw(sql, companyId, name).QueryRow(&item)
 	return
 }
 
+// 获取所有注册的权益用户
+//func GetUserRegisterList() (items []*WxUser, err error) {
+//	o := orm.NewOrmUsingDB("weekly_report")
+//	sql := `SELECT
+//			u.user_id,
+//			u.company_id,
+//			u.mobile,
+//			u.email,
+//			u.real_name,
+//			u.is_register,
+//			u.is_maker,
+//			u.register_time
+//		FROM
+//			wx_user AS u
+//			INNER JOIN company AS c ON c.company_id = u.company_id
+//			INNER JOIN company_product AS cp ON cp.company_id = c.company_id
+//		WHERE
+//			u.company_id IN (
+//			SELECT
+//				a.company_id
+//			FROM
+//				company AS a
+//				INNER JOIN company_product AS b ON a.company_id = b.company_id
+//			WHERE
+//				a.enabled = 1
+//				AND b.STATUS IN ( '正式', '试用', '冻结' )
+//				AND cp.product_id = 2
+//			)
+//			AND cp.product_id = 2
+//		GROUP BY
+//			u.user_id `
+//	_, err = o.Raw(sql).QueryRows(&items)
+//	//AND u.register_time IS NOT NULL OR u.report_last_view_time <>'' 统计阅读时间与注册时间不为空的用户
+//	return
+//}
+
 // 获取所有注册的权益用户
 func GetUserRegisterList() (items []*WxUser, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT
-			u.user_id,
-			u.company_id,
-			u.mobile,
-			u.email,
-			u.real_name,
-			u.is_register,
-			u.is_maker,
-			u.register_time 
-		FROM
-			wx_user AS u
-			INNER JOIN company AS c ON c.company_id = u.company_id
-			INNER JOIN company_product AS cp ON cp.company_id = c.company_id 
-		WHERE
-			u.company_id IN (
-			SELECT
-				a.company_id 
+				* 
 			FROM
-				company AS a
-				INNER JOIN company_product AS b ON a.company_id = b.company_id 
+				cygx_page_history_record 
 			WHERE
-				a.enabled = 1 
-				AND b.STATUS IN ( '正式', '试用', '冻结' ) 
-				AND cp.product_id = 2 
-			)
-			AND cp.product_id = 2
-		GROUP BY
-			u.user_id `
+				user_id > 0 
+				AND company_id > 0 
+				AND create_time > DATE_SUB( DATE( NOW()), INTERVAL 1 DAY ) 
+			GROUP BY user_id `
 	_, err = o.Raw(sql).QueryRows(&items)
-	//AND u.register_time IS NOT NULL OR u.report_last_view_time <>'' 统计阅读时间与注册时间不为空的用户
 	return
 }
 
@@ -560,14 +579,14 @@ func GetCygxCompanyUserUserInteraction(userIds string) (items []*CygxUserInterac
 				man.activity_id IN ( SELECT activity_id FROM cygx_activity_signup AS f WHERE f.user_id = u.user_id  AND label != '') 
 			) AS activity_label
 		FROM
-			wx_user AS u WHERE  u.user_id IN( ` + userIds + `) `
+			cygx_page_history_record AS u WHERE  u.user_id IN( ` + userIds + `)  	GROUP BY u.user_id  `
 	_, err = o.Raw(sql).QueryRows(&items)
 	return
 }
 
 // GetWxUserListByUserIds 根据用户ID集合获取用户
 func GetWxUserListByUserIds(userIds string) (list []*WxUserItem, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := ` SELECT u.*, c.company_name FROM wx_user AS u
 			INNER JOIN company AS c ON c.company_id = u.company_id 
 			WHERE user_id IN (` + userIds + `) `
@@ -582,7 +601,7 @@ func GetWxUserByMobiles(mobiles []string) (items []*WxUser, err error) {
 		return
 	}
 	sql := `SELECT* FROM wx_user  WHERE mobile in (` + utils.GetOrmInReplace(lenmobiles) + `)  `
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	_, err = o.Raw(sql, mobiles).QueryRows(&items)
 	return
 }
@@ -594,13 +613,13 @@ func GetWxUserByOutboundMobiles(mobiles []string) (items []*WxUser, err error) {
 		return
 	}
 	sql := `SELECT* FROM wx_user  WHERE outbound_mobile in (` + utils.GetOrmInReplace(lenmobiles) + `)  `
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	_, err = o.Raw(sql, mobiles).QueryRows(&items)
 	return
 }
 
 func UserSubscribe(subscribeTime string, userId int) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := `UPDATE wx_user SET cygx_subscribe=1,cygx_subscribe_time=? WHERE user_id = ? `
 	_, err = o.Raw(sql, subscribeTime, userId).Exec()
 	return
@@ -611,7 +630,7 @@ func GetWxUserOutboundMobiles(mobiles []string) (item []*WxUserOutboundMobile, e
 	if lenmobiles == 0 {
 		return
 	}
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := `SELECT u.real_name,u.mobile,u.outbound_mobile,u.company_id,p.company_name ,GROUP_CONCAT( DISTINCT p.seller_name SEPARATOR '/' ) AS seller_name
 			FROM wx_user as u 
 			INNER JOIN company_product AS p ON p.company_id = u.company_id 

+ 38 - 39
models/wx_user_code.go

@@ -16,25 +16,24 @@ type WxUserCode struct {
 	CreateTime     time.Time
 }
 
-//添加联系人日志信息
+// 添加联系人日志信息
 func AddWxUserCode(item *WxUserCode) (lastId int64, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	lastId, err = o.Insert(item)
 	return
 }
 
 func GetWxUserCode(wxCode string) (item *WxUserCode, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := `SELECT * FROM wx_user_code WHERE wx_code=? `
 	err = o.Raw(sql, wxCode).QueryRow(&item)
 	return
 }
 
-//获取所有有权限的用户的opid
+// 获取所有有权限的用户的手机号
 func GetCygxUserRecordPower(condition string, pars []interface{}) (items []*OpenIdList, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := `SELECT
-			cr.open_id,
 			u.user_id,
 			u.company_id,
 			u.real_name,
@@ -43,75 +42,75 @@ func GetCygxUserRecordPower(condition string, pars []interface{}) (items []*Open
 			company_report_permission AS p
 			INNER JOIN wx_user AS u ON u.company_id = p.company_id
 			INNER JOIN user_record AS r ON r.user_id = u.user_id
-			INNER JOIN cygx_user_record AS cr ON cr.union_id = r.union_id 
 		WHERE
-			 r.create_platform = 4 ` + condition + ` AND p.STATUS IN ('正式','试用','永续')  GROUP BY cr.open_id`
+			r.create_platform = 4 ` + condition + `
+			AND p.STATUS IN ( '正式', '试用', '永续' ) 
+			GROUP BY u.mobile `
 	_, err = o.Raw(sql, pars).QueryRows(&items)
 	return
 }
 
-//获取关注这个文章对应产业的用户的 openid
+// 获取关注这个文章对应产业的用户的 openid
 func GetCygxUserFllowOpenid(articleId int) (items []*OpenIdList, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT
-			cr.open_id,
+			f.mobile,
 			f.user_id 
 		FROM
 			cygx_xzs_choose_send AS s
 			INNER JOIN cygx_industry_fllow AS f ON f.user_id = s.user_id
-			INNER JOIN user_record AS r ON r.user_id = f.user_id
-			INNER JOIN cygx_user_record AS cr ON cr.union_id = r.union_id 
-			INNER JOIN cygx_industrial_article_group_management as mg  ON mg.industrial_management_id = f.industrial_management_id
+			INNER JOIN cygx_industrial_article_group_management AS mg ON mg.industrial_management_id = f.industrial_management_id 
 		WHERE
-			r.create_platform = 4 
-			AND mg.article_id  = ?`
+			1 = 1 
+			AND mg.article_id = ? 
+			GROUP BY f.user_id `
 	_, err = o.Raw(sql, articleId).QueryRows(&items)
 	return
 }
 
-//获取拒绝接收推送的的用户的 openid
+// 获取拒绝接收推送的的用户的 openid
 func GetCygxUserRefusetOpenid() (items []*OpenIdList, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT
 			cr.open_id,
-			s.user_id
-			FROM
+			cr.cygx_user_id AS user_id 
+		FROM
 			cygx_xzs_choose_send AS s
-			INNER JOIN user_record AS r ON r.user_id = s.user_id
-			INNER JOIN cygx_user_record AS cr ON cr.union_id = r.union_id
-			WHERE
-			r.create_platform = 4
+			INNER JOIN cygx_user_record AS cr ON cr.cygx_user_id = s.user_id 
+		WHERE
+			1 = 1 
 			AND s.is_refuse = 1`
 	_, err = o.Raw(sql).QueryRows(&items)
 	return
 }
 
-//获取选择策略推送的用户的openid openid
+// 获取选择策略推送的用户的openid openid
 func GetCygxUserFllowCeLueOpenid(categoryId int) (items []*OpenIdList, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT
 			cr.open_id,
-			f.user_id 
+			cr.cygx_user_id AS user_id 
 		FROM
 			cygx_xzs_choose_send AS s
 			INNER JOIN cygx_xzs_choose_category AS f ON f.user_id = s.user_id
-			INNER JOIN user_record AS r ON r.user_id = f.user_id
-			INNER JOIN cygx_user_record AS cr ON cr.union_id = r.union_id 
+			INNER JOIN cygx_user_record AS cr ON cr.cygx_user_id = s.user_id 
 		WHERE
-			r.create_platform = 4
-			AND s.is_refuse = 0
-			AND (s.is_subjective = 1 OR s.is_objective = 1)
-			AND f.category_id = ?`
+			1 = 1 
+			AND s.is_refuse = 0 
+			AND ( s.is_subjective = 1 OR s.is_objective = 1 ) 
+			AND f.category_id = ?
+		GROUP BY
+			s.user_id `
 	_, err = o.Raw(sql, categoryId).QueryRows(&items)
 	return
 }
 
-//获取提交过推送规则用户的userId
-func GetCygxXzsChooseSendOpenIdByUserIds(idStr string) (items []*OpenIdList, err error) {
-	o := orm.NewOrm()
-	sql := `SELECT ur.user_id, cr.open_id FROM user_record AS ur
-INNER JOIN cygx_user_record AS cr
-WHERE ur.user_id IN (` + idStr + `) AND create_platform=4 AND ur.union_id=cr.union_id `
-	_, err = o.Raw(sql).QueryRows(&items)
-	return
-}
+// 获取提交过推送规则用户的userId
+//func GetCygxXzsChooseSendOpenIdByUserIds(idStr string) (items []*OpenIdList, err error) {
+//	o := orm.NewOrm()
+//	sql := `SELECT ur.user_id, cr.open_id FROM user_record AS ur
+//INNER JOIN cygx_user_record AS cr
+//WHERE ur.user_id IN (` + idStr + `) AND create_platform=4 AND ur.union_id=cr.union_id `
+//	_, err = o.Raw(sql).QueryRows(&items)
+//	return
+//}

+ 2 - 2
models/wx_user_log.go

@@ -17,9 +17,9 @@ type WxUserLog struct {
 	CreateTime time.Time
 }
 
-//添加联系人日志信息
+// 添加联系人日志信息
 func AddWxUserLog(item *WxUserLog) (lastId int64, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	lastId, err = o.Insert(item)
 	return
 }

+ 14 - 12
models/wx_user_white.go

@@ -20,14 +20,14 @@ type WxUserWhite struct {
 	SellerName          string `description:"销售"`
 }
 
-//添加
+// 添加
 func AddWxUserWhite(item *WxUserWhite) (lastId int64, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	lastId, err = o.Insert(item)
 	return
 }
 
-//获取用户手机号白名单
+// 获取用户手机号白名单
 func GetWxUserWhiteMobile() (mobileStr string, err error) {
 	sql := ` SELECT
 			GROUP_CONCAT( DISTINCT u.mobile SEPARATOR ',' ) AS mobileStr 
@@ -43,12 +43,12 @@ func GetWxUserWhiteMobile() (mobileStr string, err error) {
 				AND u.mobile NOT IN ( SELECT mobile FROM wx_user_white ) 
 				AND u.mobile != ''
 				AND cp.status IN ( '正式', '试用' ) `
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	err = o.Raw(sql).QueryRow(&mobileStr)
 	return
 }
 
-//获取用户外呼手机号白名单
+// 获取用户外呼手机号白名单
 func GetWxUserWhiteOutboundMobile() (mobileStr string, err error) {
 	sql := ` SELECT
 			GROUP_CONCAT( DISTINCT u.outbound_mobile SEPARATOR ',' ) AS outboundmobileStr 
@@ -66,13 +66,14 @@ func GetWxUserWhiteOutboundMobile() (mobileStr string, err error) {
 				AND cp.status IN ( '正式', '试用' )
 				AND u.mobile != ''
 				AND u.mobile !=  u.outbound_mobile `
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	err = o.Raw(sql).QueryRow(&mobileStr)
 	return
 }
 
-//获取冻结用户白名单
+// 获取冻结用户白名单
 func GetFrozenUserWhiteList() (items []*WxUserWhite, err error) {
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := `SELECT
 				* 
 			FROM
@@ -94,12 +95,13 @@ func GetFrozenUserWhiteList() (items []*WxUserWhite, err error) {
 					AND mobile != '' 
 				) 
 				AND w.outbound_mobile = '' ` //OR w.outbound_mobile NOT IN ( SELECT outbound_mobile FROM wx_user )`
-	_, err = orm.NewOrm().Raw(sql).QueryRows(&items)
+	_, err = o.Raw(sql).QueryRows(&items)
 	return
 }
 
-//获取冻结用户白名单外呼号
+// 获取冻结用户白名单外呼号
 func GetFrozenUserWhiteListOutbound() (items []*WxUserWhite, err error) {
+	o := orm.NewOrmUsingDB("weekly_report")
 	sql := `SELECT
 				* 
 			FROM
@@ -120,13 +122,13 @@ func GetFrozenUserWhiteListOutbound() (items []*WxUserWhite, err error) {
 					AND cp.STATUS IN ( '正式', '试用' ) 
 					AND outbound_mobile != '') 
             AND w.mobile = ''`
-	_, err = orm.NewOrm().Raw(sql).QueryRows(&items)
+	_, err = o.Raw(sql).QueryRows(&items)
 	return
 }
 
-//删除数据
+// 删除数据
 func DeleteWxUserWhite(item *WxUserWhite) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("weekly_report")
 	if item.Mobile != "" {
 		sql := ` DELETE FROM wx_user_white WHERE mobile = ?`
 		_, err = o.Raw(sql, item.Mobile).Exec()

+ 45 - 0
routers/commentsRouter.go

@@ -691,6 +691,42 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:CollectionController"] = append(beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:CollectionController"],
+        beego.ControllerComments{
+            Method: "ApplyAdd",
+            Router: `/apply/add`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:CollectionController"] = append(beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:CollectionController"],
+        beego.ControllerComments{
+            Method: "ApplyDetail",
+            Router: `/apply/detail`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:CollectionController"] = append(beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:CollectionController"],
+        beego.ControllerComments{
+            Method: "BannerList",
+            Router: `/banner/list`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:CollectionController"] = append(beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:CollectionController"],
+        beego.ControllerComments{
+            Method: "Detail",
+            Router: `/detail`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:ConfigController"] = append(beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:ConfigController"],
         beego.ControllerComments{
             Method: "AboutUsAdd",
@@ -1168,6 +1204,15 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:ReportSelectionController"] = append(beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:ReportSelectionController"],
+        beego.ControllerComments{
+            Method: "ReportSelectionLogApply",
+            Router: `/report_selection_log/apply`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:ResearchController"] = append(beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:ResearchController"],
         beego.ControllerComments{
             Method: "ArticleHotList",

+ 5 - 0
routers/router.go

@@ -170,6 +170,11 @@ func init() {
 				&controllers.YanxuanSpecialController{},
 			),
 		),
+		web.NSNamespace("/collection",
+			web.NSInclude(
+				&controllers.CollectionController{},
+			),
+		),
 	)
 	web.AddNamespace(ns)
 }

+ 43 - 20
services/activity.go

@@ -172,13 +172,7 @@ func SendEmailFileToExpert(cont context.Context) (err error) {
 	defer func() {
 		if err != nil {
 			fmt.Println("err:", err)
-			go utils.SendAlarmMsg("发送附件模版消息失败", 2)
-			go utils.SendEmail("发送附件模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format(utils.FormatDateTime), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
-			utils.FileLog.Info("发送附件模版消息失败,Err:%s", err.Error())
-		}
-		if msg != "" {
-			fmt.Println(msg)
-			utils.FileLog.Info("发送模版消息失败,msg:%s", msg)
+			go utils.SendAlarmMsg("预约外呼名单,会前1小时自动发送邮件给专家组失败"+msg, 2)
 		}
 	}()
 	endDate := time.Now().Add(+time.Minute * 60).Format(utils.FormatDateTime)
@@ -207,7 +201,7 @@ func SendEmailFileToExpert(cont context.Context) (err error) {
 	//}
 
 	for _, v := range listActivity {
-		time.Sleep(30 * time.Second) //延时30秒,避免邮件发送不成功
+		//time.Sleep(30 * time.Second) //延时30秒,避免邮件发送不成功
 		activityInfo, _ := models.GetAddActivityInfoById(v.ActivityId)
 		if activityInfo == nil {
 			msg = "活动不存在,Err:activityId:" + strconv.Itoa(v.ActivityId)
@@ -294,18 +288,32 @@ func SendEmailFileToExpert(cont context.Context) (err error) {
 		} else if strings.Contains(activityInfo.ChartPermissionName, "研选") {
 			touser = utils.EmailExpert
 		}
-		sendResult := utils.SendEmailByHongze(title, content, touser, fileName, title+".xlsx")
-		if sendResult {
-			errFile = models.UPdateActivityIdToSendFile(v.ActivityId)
-			if errFile != nil {
-				msg = "获取失败,Err:" + errFile.Error()
-				return
+
+		sub := strings.Index(touser, ";")
+		if sub >= 0 {
+			spArr := strings.Split(touser, ";")
+			for _, v := range spArr {
+				utils.SendEmailByHongze(title, content, v, fileName, title+".xlsx")
 			}
-			os.Remove(downLoadnFilePath)
-		} else {
-			go utils.SendAlarmMsg("发送附件模版消息失败"+activityInfo.ActivityName, 2)
-			utils.FileLog.Info("发送附件模版消息失败,Err:%s", activityInfo.ActivityName)
 		}
+		os.Remove(downLoadnFilePath)
+		err = models.UPdateActivityIdToSendFile(v.ActivityId)
+		if err != nil {
+			go utils.SendAlarmMsg("UPdateActivityIdToSendFile err"+msg, 2)
+		}
+
+		//sendResult := utils.SendEmailByHongze(title, content, touser, fileName, title+".xlsx")
+		//if sendResult {
+		//	errFile = models.UPdateActivityIdToSendFile(v.ActivityId)
+		//	if errFile != nil {
+		//		msg = "获取失败,Err:" + errFile.Error()
+		//		return
+		//	}
+		//	os.Remove(downLoadnFilePath)
+		//} else {
+		//	go utils.SendAlarmMsg("发送附件模版消息失败"+activityInfo.ActivityName, 2)
+		//	utils.FileLog.Info("发送附件模版消息失败,Err:%s", activityInfo.ActivityName)
+		//}
 	}
 	return
 }
@@ -1172,6 +1180,11 @@ func GetActivityonditionList(user *models.WxUserItem, activityTypeId, chartPermi
 
 // 根据用户身份处理活动可见
 func ActivityConditioninitSql(user *models.WxUserItem, condition string, isPower int) (conditionActivity string, err error) {
+	//未登录的用户也可以查看所有活动v12.2.1
+	if user.UserId == 0 {
+		conditionActivity = ` AND art.publish_status = 1   AND art.yidong_activity_id = ''  ` + condition
+		return
+	}
 	// cygx_10.9 未绑定联系方式的客户可以看到部分活动
 	if user.UserId == 0 || user.CompanyId == 1 {
 		conditionActivity = ` AND art.publish_status = 1  AND art.visible_range != 1 AND (art.is_limit_people = 0 OR (art.is_limit_people=1 AND art.is_all_customer_type=1))   ` + condition
@@ -1180,7 +1193,7 @@ func ActivityConditioninitSql(user *models.WxUserItem, condition string, isPower
 	condition += `   AND art.publish_status = 1 `
 	conditionActivity = condition
 	//弘则可以查看所有活动
-	if GetBelongingRai(user.Mobile) && user.CompanyId == utils.HZ_COMPANY_ID {
+	if (GetBelongingRai(user.Mobile) && user.CompanyId == utils.HZ_COMPANY_ID) || user.UserId == 0 {
 		return
 	}
 	adminIds, err := models.GetSelleridWhichGroup(user.CompanyId, 2)
@@ -2285,10 +2298,20 @@ func DoActivityOnenIdWxTemplateMsg(cont context.Context) (err error) {
 	}()
 	var condition string
 	var pars []interface{}
-	openidPowerList, err := models.GetCygxUserRecordPower(condition, pars)
+	openidPowerListMobile, err := models.GetCygxUserRecordPower(condition, pars)
 	if err != nil {
 		return err
 	}
+
+	var mobileArr []string
+	for _, v := range openidPowerListMobile {
+		mobileArr = append(mobileArr, v.Mobile)
+	}
+	openidPowerList, err := models.GetWxOpenIdByMobileSliceList(mobileArr)
+	if err != nil {
+		return err
+	}
+
 	first := "近期所有行业活动预告,欢迎参与"
 	keyword1 := "下周活动预告"
 	keyword2 := "已发布"

+ 53 - 9
services/activity_special.go

@@ -733,6 +733,9 @@ func GetActivitySpecialSearcheList(user *models.WxUserItem, condition string, st
 	var conditionSpecil string
 	var pars, parsSpecil []interface{}
 	keyword := keywords
+	if user.UserId == 0 {
+		conditionSpecil += `  AND  art.activity_id	= 0 ` // 未登录的用户不查看专项调研活动 v12.2.1
+	}
 	if keywords != "" {
 		keywords = "%" + keywords + "%"
 		conditionSpecil += ` AND art.days > 0 AND (art.research_theme LIKE ? OR art.label LIKE ? OR art.industrial_name LIKE ? OR art.industrial_subject_name LIKE ? ) `
@@ -1105,6 +1108,7 @@ func SendWxMsgActivitySpecialTwoDays(cont context.Context) (err error) {
 			condition = ` AND p.company_id IN (` + utils.GetOrmInReplace(companyIdsLen) + `)  GROUP BY  p.company_id  `
 			pars = append(pars, companyIds)
 
+			//获取销售的手机号
 			listSeller, e := models.GetAdminOpendidByCompany(condition, pars)
 			if e != nil && e.Error() != utils.ErrNoRow() {
 				err = errors.New("GetAdminOpendidByCompany, Err: " + e.Error())
@@ -1113,13 +1117,34 @@ func SendWxMsgActivitySpecialTwoDays(cont context.Context) (err error) {
 			if len(listSeller) == 0 {
 				continue
 			}
+			var mobileArr []string
+			for _, v := range listSeller {
+				if v.Mobile != "" {
+					mobileArr = append(mobileArr, v.Mobile)
+				}
+			}
+			mobileLen := len(mobileArr)
+			if mobileLen == 0 {
+				return
+			}
+			//获取手机号对应的Openid
+			listSellerOpenid, e := models.GetWxOpenIdByMobileSliceList(mobileArr)
+			if e != nil && e.Error() != utils.ErrNoRow() {
+				err = errors.New("GetWxOpenIdByMobileSliceList, Err: " + e.Error())
+				return
+			}
+			mapMobileOpenid := make(map[string]string)
+			for _, v := range listSellerOpenid {
+				mapMobileOpenid[v.Mobile] = v.OpenId
+			}
+
 			mapSller := make(map[string]string)
 			mapSllerOpenid := make(map[string]string)
 			for _, vS := range listSeller {
 				for _, vT := range listSpecialTrip {
 					if vT.CompanyId == vS.CompanyId {
 						mapSller[vS.Mobile] += "【" + vT.RealName + "--" + vT.CompanyName + "】"
-						mapSllerOpenid[vS.Mobile] = vS.OpenId
+						mapSllerOpenid[vS.Mobile] = mapMobileOpenid[vS.Mobile]
 					}
 				}
 			}
@@ -1231,8 +1256,28 @@ func SendWxMsgActivitySpecialCancel(cont context.Context) (err error) {
 				err = errors.New("GetAdminOpendidByCompany, Err: " + e.Error())
 				return
 			}
-			if len(listSeller) > 0 {
-				for _, vOpenid := range listSeller {
+
+			if len(listSeller) == 0 {
+				continue
+			}
+			var mobileArr []string
+			for _, v := range listSeller {
+				if v.Mobile != "" {
+					mobileArr = append(mobileArr, v.Mobile)
+				}
+			}
+			mobileLen := len(mobileArr)
+			if mobileLen == 0 {
+				return
+			}
+			//获取手机号对应的Openid
+			listSellerOpenid, e := models.GetWxOpenIdByMobileSliceList(mobileArr)
+			if e != nil && e.Error() != utils.ErrNoRow() {
+				err = errors.New("GetWxOpenIdByMobileSliceList, Err: " + e.Error())
+				return
+			}
+			if len(listSellerOpenid) > 0 {
+				for _, vOpenid := range listSellerOpenid {
 					openIdArr = append(openIdArr, vOpenid.OpenId)
 				}
 			}
@@ -1390,7 +1435,6 @@ func GetChartPermissionSpecialSurplusByCompany(companyId int) (userType int, tri
 	return
 }
 
-
 // 清零初始化用-去掉了正式用户的判断
 func GetChartPermissionSpecialSurplusByCompanyForInit(companyId int) (userType int, tripRemaining int, mapChartName map[string]int, err error) {
 	companyDetail, e := models.GetCompanyDetailByIdGroup(companyId)
@@ -1405,7 +1449,7 @@ func GetChartPermissionSpecialSurplusByCompanyForInit(companyId int) (userType i
 	//}
 
 	//chartMap := map[int]string{utils.YI_YAO_ID:utils.YI_YAO_NAME, utils.XIAO_FEI_ID:utils.XIAO_FEI_NAME, utils.KE_JI_ID:utils.KE_JI_NAME, utils.ZHI_ZAO_ID:utils.ZHI_ZAO_NAME}
-	chartNumMap := map[int]int{utils.YI_YAO_ID:0, utils.XIAO_FEI_ID:0, utils.KE_JI_ID:0, utils.ZHI_ZAO_ID:0}
+	chartNumMap := map[int]int{utils.YI_YAO_ID: 0, utils.XIAO_FEI_ID: 0, utils.KE_JI_ID: 0, utils.ZHI_ZAO_ID: 0}
 	//var packageType int
 	userType, _, _ = GetUserType(companyId)
 	var condition string
@@ -1490,7 +1534,7 @@ func GetChartPermissionSpecialSurplusByCompanyForInit(companyId int) (userType i
 			mapPermissionNameTrip[v.ChartPermissionName] += v.BillDetailed
 		}
 		for _, v := range chartList {
-			if _, ok := chartNumMap[v.ChartPermissionId]; ok{
+			if _, ok := chartNumMap[v.ChartPermissionId]; ok {
 				//如果是升级则加点
 				if _, ok := mapUpgradeId[v.ChartPermissionId]; ok {
 					mapChartName[v.PermissionName] = 5 + mapPermissionNameTrip[v.PermissionName]
@@ -1527,7 +1571,7 @@ func GetChartPermissionSpecialSurplusByCompanyForInitTotal(companyId int) (userT
 	//}
 
 	//chartMap := map[int]string{utils.YI_YAO_ID:utils.YI_YAO_NAME, utils.XIAO_FEI_ID:utils.XIAO_FEI_NAME, utils.KE_JI_ID:utils.KE_JI_NAME, utils.ZHI_ZAO_ID:utils.ZHI_ZAO_NAME}
-	chartNumMap := map[int]int{utils.YI_YAO_ID:0, utils.XIAO_FEI_ID:0, utils.KE_JI_ID:0, utils.ZHI_ZAO_ID:0}
+	chartNumMap := map[int]int{utils.YI_YAO_ID: 0, utils.XIAO_FEI_ID: 0, utils.KE_JI_ID: 0, utils.ZHI_ZAO_ID: 0}
 	//var packageType int
 	userType, _, _ = GetUserType(companyId)
 	var condition string
@@ -1612,7 +1656,7 @@ func GetChartPermissionSpecialSurplusByCompanyForInitTotal(companyId int) (userT
 			mapPermissionNameTrip[v.ChartPermissionName] += v.BillDetailed
 		}
 		for _, v := range chartList {
-			if _, ok := chartNumMap[v.ChartPermissionId]; ok{
+			if _, ok := chartNumMap[v.ChartPermissionId]; ok {
 				//如果是升级则加点
 				if _, ok := mapUpgradeId[v.ChartPermissionId]; ok {
 					mapChartName[v.PermissionName] = 5 + mapPermissionNameTrip[v.PermissionName]
@@ -1633,4 +1677,4 @@ func GetChartPermissionSpecialSurplusByCompanyForInitTotal(companyId int) (userT
 	}
 
 	return
-}
+}

+ 61 - 0
services/activity_video.go

@@ -2,6 +2,7 @@ package services
 
 import (
 	"errors"
+	"fmt"
 	"hongze/hongze_cygx/models"
 	"hongze/hongze_cygx/utils"
 )
@@ -71,3 +72,63 @@ func GetActivityVideoOrVoiceActivityIds(filter int) (activityIds string, err err
 	}
 	return
 }
+
+func init12312() {
+	ActivityVideoAndVoiceDef()
+}
+
+func ActivityVideoAndVoiceDef() {
+	var condition string
+	var pars []interface{}
+
+	// 获取默认图配置
+	audioMap, videoMap, audioShareMap, videoShareMap, e := GetMicroRoadShowDefaultImgConfig()
+	if e != nil {
+		fmt.Println(e)
+		return
+	}
+
+	list, err := models.GetActivityVoiceList(condition, pars, 0, 100000)
+	if err != nil {
+		fmt.Println(err)
+		return
+	}
+
+	for _, v := range list {
+		if v.BackgroundImg != "" {
+			continue
+		}
+		item := new(models.CygxActivityVoice)
+		item.ActivityId = v.ActivityId
+		item.BackgroundImg = audioMap[v.ChartPermissionId]
+		item.ShareImg = audioShareMap[v.ChartPermissionId]
+		err = models.UpdateCygxActivityVoice(item)
+		if err != nil {
+			fmt.Println(err)
+			return
+		}
+		fmt.Println(item)
+	}
+
+	listVidoe, err := models.GetActivityVideoList(condition, pars, 0, 100000)
+	if err != nil {
+		fmt.Println(err)
+		return
+	}
+
+	for _, v := range listVidoe {
+		if v.BackgroundImg != "" {
+			continue
+		}
+		item := new(models.CygxActivityVideo)
+		item.ActivityId = v.ActivityId
+		item.BackgroundImg = videoMap[v.ChartPermissionId]
+		item.ShareImg = videoShareMap[v.ChartPermissionId]
+		err = models.UpdateCygxActivityVideo(item)
+		if err != nil {
+			fmt.Println(err)
+			return
+		}
+		fmt.Println(item)
+	}
+}

+ 42 - 7
services/article.go

@@ -841,7 +841,8 @@ func HandleArticleListByApi(artcleId int) (err error) {
 			fmt.Println("UpdateArticlePublish Err:", err.Error())
 			return err
 		}
-		go UpdateResourceData(artcleId, "article", "delete", time.Now().Format(utils.FormatDateTime))
+		go UpdateArticleResourceData(artcleId) //把数据写入 cygx_resource_data 表
+		//go UpdateResourceData(artcleId, "article", "delete", time.Now().Format(utils.FormatDateTime))
 		return err
 	}
 
@@ -971,7 +972,8 @@ func HandleArticleListByApi(artcleId int) (err error) {
 				//fmt.Println("触发推送规则")
 				//更新字数大于一百字触发推送规则
 				go DoArticleOnenIdWxTemplateMsg(v.ArticleId)
-				go UpdateResourceData(v.ArticleId, "article", "update", time.Now().Format(utils.FormatDateTime))
+				go UpdateArticleResourceData(v.ArticleId) //把数据写入 cygx_resource_data 表
+				//go UpdateResourceData(v.ArticleId, "article", "update", time.Now().Format(utils.FormatDateTime))
 			}
 			var isCustom bool
 			updateParams := make(map[string]interface{})
@@ -1065,8 +1067,8 @@ func HandleArticleListByApi(artcleId int) (err error) {
 				fmt.Println("AddCygxArticle Err:", err.Error())
 				return err
 			}
-			go UpdateResourceData(v.ArticleId, "article", "add", time.Now().Format(utils.FormatDateTime))
-
+			//go UpdateResourceData(v.ArticleId, "article", "add", time.Now().Format(utils.FormatDateTime))
+			go UpdateArticleResourceData(v.ArticleId) //把数据写入 cygx_resource_data 表
 			//fmt.Println(newId)
 			//报告自动归类,以及推送相关模板消息
 			if v.ReportType == 2 {
@@ -1189,6 +1191,8 @@ func HandleArticleListByApi(artcleId int) (err error) {
 			//}
 		}
 	}
+
+	AddCygxReportMappingCategoryGroupByArticleId(artcleId)
 	return err
 }
 
@@ -1346,7 +1350,16 @@ func DoArticleOnenIdWxTemplateMsg(articleId int) (err error) {
 		condition += ` AND p.chart_permission_id  IN (` + utils.GetOrmInReplace(len(slicepermissionId)) + ` )  `
 		pars = append(pars, permissionIdList)
 	}
-	openidPowerList, err := models.GetCygxUserRecordPower(condition, pars)
+	openidPowerListMobile, err := models.GetCygxUserRecordPower(condition, pars)
+	if err != nil {
+		return err
+	}
+
+	var mobileArr []string
+	for _, v := range openidPowerListMobile {
+		mobileArr = append(mobileArr, v.Mobile)
+	}
+	openidPowerList, err := models.GetWxOpenIdByMobileSliceList(mobileArr)
 	if err != nil {
 		return err
 	}
@@ -1369,13 +1382,25 @@ func DoArticleOnenIdWxTemplateMsg(articleId int) (err error) {
 	//获取关注这个文章对应产业的用户的 openid
 	mapOpenidFllow := make(map[int]string)
 	if chartPermissionId != utils.CE_LUE_ID && chartPermissionId != utils.GU_SHOU_ID {
-		openidFllowList, err := models.GetCygxUserFllowOpenid(articleId)
+		openidFllowListMobile, err := models.GetCygxUserFllowOpenid(articleId)
 		if err != nil {
 			return err
 		}
+
+		var mobileArrFllow []string
+		for _, v := range openidFllowListMobile {
+			mobileArrFllow = append(mobileArrFllow, v.Mobile)
+		}
+
+		openidFllowList, err := models.GetWxOpenIdByMobileSliceList(mobileArrFllow)
+		if err != nil {
+			return err
+		}
+
 		for _, v := range openidFllowList {
 			mapOpenidFllow[v.UserId] = v.OpenId
 		}
+
 	}
 
 	//获取拒绝接收推送的的用户的 openid
@@ -1524,7 +1549,7 @@ func DoArticleOnenIdWxTemplateMsg(articleId int) (err error) {
 			keyword1 := "【" + articleInfo.SubCategoryName + "】有报告发布/更新"
 			mapActivityUserId := make(map[int]string)
 			if articleInfo.ReportType == 2 {
-				keyword1 = fmt.Sprint("【", industryName, "】赛道有报告发布/更新")
+				keyword1 = fmt.Sprint("【", industryName, "】有报告发布/更新")
 				sliceSubjectId, _ := models.GetSubjectIds(articleId)
 				if sliceSubjectId != "" {
 					appointmentList, err := models.GetCygxAppointmentSummaryBySubjectId(sliceSubjectId)
@@ -1583,6 +1608,16 @@ func DoArticleOnenIdWxTemplateMsg(articleId int) (err error) {
 
 // GetSpecialArticleDetailUserPower 处理用户查看专项调研文章详情的权限
 func GetSpecialArticleDetailUserPower(user *models.WxUserItem, articleInfo *models.ArticleDetail) (havePower bool, err error) {
+	userType, _, e := GetUserType(user.CompanyId)
+	if e != nil {
+		err = errors.New("GetSpecialUserType, Err: " + e.Error())
+		return
+	}
+	// 永续客户、大套餐客户可以查看行业升级套餐客户 权限
+	if userType == 1 || userType == 2 {
+		havePower = true
+		return
+	}
 	permissionStr, e := GetCompanyPermissionUpgrade(user.CompanyId)
 	if e != nil {
 		err = errors.New("GetCompanyPermissionUpgrade, Err: " + e.Error())

+ 94 - 0
services/collection.go

@@ -0,0 +1,94 @@
+package services
+
+import (
+	"errors"
+	"fmt"
+	"hongze/hongze_cygx/models"
+	"hongze/hongze_cygx/utils"
+	"strconv"
+	"strings"
+	"time"
+)
+
+//精选看板
+
+// 用户提交研选调研需求,给王芳、对口销售、内容组全员发模板消息
+func SendCygxApplyCollectionTemplateMsg(user *models.WxUserItem, content string, articleId int) (err error) {
+	var msg string
+	msg = fmt.Sprint(user, articleId)
+	defer func() {
+		if err != nil {
+			go utils.SendAlarmMsg("SendCygxBannerYxSurveyTemplateMsg Err"+msg, 2)
+		}
+	}()
+
+	var mobiles []string
+	//获取权益销售
+	sellerItem, e := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
+	if e != nil {
+		err = errors.New("GetAdminByRoleName, Err: " + e.Error())
+		return
+	}
+	//内容组全员手机号
+	configCode := utils.TPL_MSG_NEI_RONG_ZU
+	cnf, e := models.GetConfigByCode(configCode)
+	if e != nil {
+		err = errors.New("GetConfigByCode, Err: " + e.Error() + configCode)
+		return
+	}
+
+	//王芳手机号
+	cnfWangFang, e := models.GetConfigByCode(utils.TPL_MSG)
+	if e != nil {
+		err = errors.New("GetConfigByCode, Err: " + e.Error() + configCode)
+		return
+	}
+
+	mobiles = append(mobiles, sellerItem.Mobile)
+	mobiles = append(mobiles, cnfWangFang.ConfigValue)
+	listMobile := strings.Split(cnf.ConfigValue, ",")
+	for _, v := range listMobile {
+		mobiles = append(mobiles, v)
+	}
+
+	openIdList, e := models.GetWxOpenIdByMobileSliceList(mobiles)
+	if e != nil {
+		err = errors.New("GetWxOpenIdByMobileSliceList, Err: " + e.Error() + configCode)
+		return
+	}
+	if len(openIdList) == 0 {
+		return
+	}
+	openIdArr := make([]string, 0)
+	for _, v := range openIdList {
+		openIdArr = append(openIdArr, v.OpenId)
+	}
+	var keyword1 string
+	var keyword2 string
+	var keyword3 string
+	var keyword4 string
+	keyword1 = fmt.Sprint(user.RealName, "--", user.CompanyName, "(", sellerItem.RealName, ")")
+	if user.Mobile == "" {
+		user.Mobile = user.Email
+	}
+	keyword2 = user.Mobile
+	keyword3 = time.Now().Format(utils.FormatDateTime)
+	keyword4 = fmt.Sprint("精选看板:", content)
+	var redirectUrl string
+	if utils.RunMode == "release" {
+		redirectUrl = utils.WX_MSG_PATH_APPLY_COLLECTION_DETAIL + strconv.Itoa(articleId)
+	}
+	sendInfo := new(SendWxTemplate)
+	sendInfo.Keyword1 = keyword1
+	sendInfo.Keyword2 = keyword2
+	sendInfo.Keyword3 = keyword3
+	sendInfo.Keyword4 = keyword4
+	sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ACTIVITY_ADD
+	sendInfo.TemplateId = utils.WxMsgTemplateIdApplyXzs
+	sendInfo.RedirectUrl = redirectUrl
+	sendInfo.RedirectTarget = 3
+	sendInfo.Resource = strconv.Itoa(articleId)
+	sendInfo.OpenIdArr = openIdArr
+	err = PublicSendTemplateMsg(sendInfo)
+	return
+}

+ 31 - 0
services/industry_fllow.go

@@ -0,0 +1,31 @@
+package services
+
+import (
+	"fmt"
+	"hongze/hongze_cygx/models"
+	"hongze/hongze_cygx/utils"
+	"time"
+)
+
+// 添加用户关注,取消关注产业日志记录
+func AddCygxIndustryFllowLog(item *models.CygxIndustryFllow) (err error) {
+	defer func() {
+		if err != nil {
+			go utils.SendAlarmMsg("添加用户关注,取消关注产业日志记录失败"+err.Error()+fmt.Sprint(item), 2)
+		}
+	}()
+	itemlog := new(models.CygxIndustryFllowLog)
+	itemlog.IndustrialManagementId = item.IndustrialManagementId
+	itemlog.UserId = item.UserId
+	itemlog.Email = item.Email
+	itemlog.Mobile = item.Mobile
+	itemlog.RealName = item.RealName
+	itemlog.CompanyId = item.CompanyId
+	itemlog.CompanyName = item.CompanyName
+	itemlog.Type = item.Type
+	itemlog.Source = utils.REGISTER_PLATFORM
+	itemlog.CreateTime = time.Now()
+	itemlog.ModifyTime = time.Now()
+	_, err = models.AddCygxIndustryFllowLog(itemlog)
+	return err
+}

+ 1 - 1
services/init_10.5.1.go

@@ -69,7 +69,7 @@ func init123() {
 
 	var topCond string
 	var topPars []interface{}
-	toplist, err := models.GetCygxReportMappingCygxByCon(topCond, topPars, 0, 0)
+	toplist, err := models.GetCygxReportMappingCygxByCon(topCond, topPars)
 	if err != nil {
 		return
 	}

+ 55 - 7
services/product_interior.go

@@ -1,6 +1,7 @@
 package services
 
 import (
+	"errors"
 	"fmt"
 	"hongze/hongze_cygx/models"
 	"hongze/hongze_cygx/utils"
@@ -41,13 +42,22 @@ func GetProductInteriorUrl(url string, urlMap map[string]string) (itemResp *mode
 }
 
 // GetProductInteriorUrl 处理产品内测中的连接并做跳转处理
-func GetProductInteriorUrlBody(body string) (itemResp []*models.ProductInteriorUrlResp) {
+func GetProductInteriorUrlBody(body string, user *models.WxUserItem) (itemResp []*models.ProductInteriorUrlResp, err error) {
 	//2:文章详情  https://web.hzinsights.com/material/info/8436
 	//3:活动详情  https://web.hzinsights.com/activity/detail/2701
 	//4:产业详情  https://web.hzinsights.com/indepth/info/20/79
-	material := "material/info"
-	activity := "activity/detail"
-	indepth := "indepth/info"
+
+	// 用户权限
+	authInfo, permissionArr, e := GetUserRaiPermissionInfo(user.UserId, user.CompanyId)
+	if e != nil {
+		err = errors.New("GetUserRaiPermissionInfo, Err: " + e.Error())
+		return
+	}
+
+	material := "material/info"     // 2:文章详情
+	activity := "activity/detail"   //3:活动详情
+	indepth := "indepth/info"       //4:产业详情
+	ctivityvideo := "ctivity/video" //5:活动音频
 
 	var randStrStart = "start_cygx_{|}"
 	var randStr = "start_cygx_{|}_end_cygx"
@@ -57,10 +67,9 @@ func GetProductInteriorUrlBody(body string) (itemResp []*models.ProductInteriorU
 	if match != nil {
 		for _, v := range match {
 			//过滤不相干的超链接
-			if !strings.Contains(v, material) && !strings.Contains(v, activity) && !strings.Contains(v, indepth) {
+			if !strings.Contains(v, material) && !strings.Contains(v, activity) && !strings.Contains(v, indepth) && !strings.Contains(v, ctivityvideo) {
 				continue
 			}
-			fmt.Println(v)
 			body = strings.Replace(body, fmt.Sprint("href=\"", v, "\""), "", -1)
 			body = strings.Replace(body, fmt.Sprint("<a >"), "", -1)
 			body = strings.Replace(body, fmt.Sprint("</a>"), "", -1)
@@ -68,7 +77,6 @@ func GetProductInteriorUrlBody(body string) (itemResp []*models.ProductInteriorU
 			urlMap[v] = v
 		}
 	}
-	fmt.Println(urlMap)
 	sliceBody := strings.Split(body, randStr)
 	var sliceBodyUrl []string
 	for _, v := range sliceBody {
@@ -101,6 +109,46 @@ func GetProductInteriorUrlBody(body string) (itemResp []*models.ProductInteriorU
 					item.ChartPermissionId = chartPermissionId
 				}
 				item.Type = 4
+			} else if strings.Contains(url, ctivityvideo) {
+				if lenurlSlice >= 2 {
+					chartPermissionId, _ := strconv.Atoi(urlSlice[lenurlSlice-2])
+					item.ChartPermissionId = chartPermissionId
+				}
+				item.Type = 5
+				activityVideo, e := models.GetCygxActivityVideoReqByActivityId(sourceId)
+				if e != nil {
+					err = errors.New("GetCygxActivityVideoReqByActivityId, Err: " + e.Error())
+					return
+				}
+				if activityVideo != nil {
+					item.ActivityVideo = activityVideo
+				}
+				activityInfo, e := models.GetAddActivityInfoById(sourceId)
+				if e != nil {
+					err = errors.New("GetAddActivityInfoById, Err: " + e.Error())
+					return
+				}
+				// 权限
+				au := new(models.UserPermissionAuthInfo)
+				au.SellerName = authInfo.SellerName
+				au.SellerMobile = authInfo.SellerMobile
+				au.HasPermission = authInfo.HasPermission
+				au.OperationMode = authInfo.OperationMode
+				if au.HasPermission == 1 {
+					// 非宏观权限进一步判断是否有权限
+					if activityInfo.ChartPermissionId != utils.HONG_GUAN_ID && !utils.InArrayByStr(permissionArr, activityInfo.ChartPermissionName) {
+						au.HasPermission = 2
+					}
+				}
+				// 无权限的弹框提示
+				if au.HasPermission != 1 {
+					if au.OperationMode == UserPermissionOperationModeCall {
+						au.PopupMsg = UserPermissionPopupMsgCallMicroVideo
+					} else {
+						au.PopupMsg = UserPermissionPopupMsgApplyActivity
+					}
+				}
+				item.AuthInfo = au
 			}
 		}
 		itemResp = append(itemResp, item)

+ 147 - 0
services/report_mapping_category_group.go

@@ -0,0 +1,147 @@
+package services
+
+import (
+	"errors"
+	"fmt"
+	"hongze/hongze_cygx/models"
+	"hongze/hongze_cygx/utils"
+	"strings"
+	"time"
+)
+
+//func init() {
+//	var condition string
+//	var pars []interface{}
+//	condition += ` AND publish_status  = 1 `
+//
+//	list, err := models.GetArticleList(condition, pars)
+//	fmt.Println(err)
+//	for _, v := range list {
+//		AddCygxReportMappingCategoryGroupByArticleId(v.ArticleId)
+//	}
+//}
+
+// AddCygxReportMappingCategoryGroupByArticleId  根据文章ID建立分类分组,主客观权限分组
+func AddCygxReportMappingCategoryGroupByArticleId(articleId int) {
+	fmt.Println(articleId)
+	time.Sleep(5 * time.Second)
+	var err error
+	defer func() {
+		if err != nil {
+			go utils.SendAlarmMsg("根据文章ID建立分类分组,主客观权限分组,失败"+err.Error(), 2)
+		}
+	}()
+	detail, e := models.GetArticleDetailById(articleId)
+	if e != nil {
+		err = errors.New("GetArticleDetailById, Err: " + e.Error())
+		return
+	}
+	categoryId := detail.CategoryId
+
+	var condition string
+	var pars []interface{}
+	condition += ` AND category_id_celue = ? `
+	pars = append(pars, categoryId)
+	list, e := models.GetCygxReportMappingGroupList(condition, pars)
+	if e != nil {
+		err = errors.New("GetCygxReportMappingGroupList, Err: " + e.Error())
+		return
+	}
+	pars = make([]interface{}, 0)
+	var idCygxs []int
+	for _, v := range list {
+		idCygxs = append(idCygxs, v.IdCygx)
+		fmt.Println(v)
+	}
+	condition = ` AND id  IN (` + utils.GetOrmInReplace(len(idCygxs)) + `)`
+	pars = append(pars, idCygxs)
+	cygxlist, e := models.GetCygxReportMappingCygxByCon(condition, pars)
+	if e != nil {
+		err = errors.New("GetCygxReportMappingCygxByCon, Err: " + e.Error())
+		return
+	}
+	var items []*models.CygxReportMappingCategoryGroup
+	for _, v := range cygxlist {
+		item := new(models.CygxReportMappingCategoryGroup)
+		item.IdCygx = v.Id
+		item.ChartPermissionId = v.ChartPermissionId
+		//如果类型是报告就是主观,类型是纪要就是客观
+		if detail.TypeName == "报告" {
+			item.PermissionType = 1
+		}
+		if detail.TypeName == "纪要" {
+			item.PermissionType = 2
+		}
+		item.ArticleId = articleId
+		item.CreateTime = time.Now()
+		item.ModifyTime = time.Now()
+		items = append(items, item)
+	}
+	e = models.AddCygxReportMappingCategoryGroupMulti(items, articleId)
+	fmt.Println(items)
+	return
+
+}
+
+// 校验文章主客观权限
+func CheckArticlePermissionType(articleId int, user *models.WxUserItem) (checkPermissionType bool) {
+	var err error
+	defer func() {
+		if err != nil {
+			go utils.SendAlarmMsg("记录用户文章浏览记录,失败"+err.Error(), 2)
+		}
+	}()
+	permissionStr, e := models.GetCompanyPermissionByUser(user.CompanyId)
+	if e != nil {
+		err = errors.New("GetCompanyPermissionByUser, Err: " + e.Error())
+		return
+	}
+	var condition string
+	var pars []interface{}
+	condition += ` AND article_id = ? `
+	pars = append(pars, articleId)
+	list, e := models.GetCygxReportMappingCategoryGroupList(condition, pars)
+	if e != nil {
+		err = errors.New("GetCygxReportMappingCategoryGroupList, Err: " + e.Error())
+		return
+	}
+	if len(list) == 0 {
+		checkPermissionType = true
+		return
+	}
+	var chartPermissionId int
+	var chartPermissionName string
+	var permissionTypeZg bool
+	var permissionTypeKg bool
+	for _, v := range list {
+		chartPermissionId = v.ChartPermissionId
+		if v.PermissionType == 1 || v.PermissionType == 0 {
+			permissionTypeZg = true
+		}
+		if v.PermissionType == 2 || v.PermissionType == 0 {
+			permissionTypeKg = true
+		}
+	}
+
+	categoryinfo, e := models.GetChartPermissionById(chartPermissionId)
+	if e != nil {
+		err = errors.New("GetChartPermissionById, Err: " + e.Error())
+		return
+	}
+
+	if permissionTypeZg {
+		chartPermissionName = categoryinfo.PermissionName + "(主观)"
+	}
+	if permissionTypeKg {
+		chartPermissionName = categoryinfo.PermissionName + "(客观)"
+	}
+
+	if permissionTypeKg && permissionTypeZg {
+		chartPermissionName = categoryinfo.PermissionName
+	}
+
+	if strings.Contains(permissionStr, chartPermissionName) {
+		checkPermissionType = true
+	}
+	return
+}

+ 70 - 0
services/report_selection.go

@@ -0,0 +1,70 @@
+package services
+
+import (
+	"errors"
+	"fmt"
+	"hongze/hongze_cygx/models"
+	"hongze/hongze_cygx/utils"
+	"time"
+)
+
+// 重点公司路演申请,给吴昂迪、对口销售
+func SendCygxReportSelectionLogApplyTemplateMsg(user *models.WxUserItem, content string) (err error) {
+	var msg string
+	msg = fmt.Sprint(user, content)
+	defer func() {
+		if err != nil {
+			go utils.SendAlarmMsg("SendCygxReportSelectionLogApplyTemplateMsg Err"+msg+err.Error(), 2)
+		}
+	}()
+
+	var mobiles []string
+	//获取权益销售
+	sellerItem, e := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
+	if e != nil {
+		err = errors.New("GetAdminByRoleName, Err: " + e.Error())
+		return
+	}
+
+	mobiles = append(mobiles, sellerItem.Mobile)
+	mobiles = append(mobiles, "")
+	mobiles = append(mobiles, utils.MobileShenTao, utils.MobileZhangChuanXin, utils.MobileWuAngDi) // 添加沈涛、张传星、吴昂迪手机号
+	openIdList, e := models.GetWxOpenIdByMobileSliceList(mobiles)
+	if e != nil {
+		err = errors.New("GetWxOpenIdByMobileSliceList, Err: " + e.Error())
+		return
+	}
+	if len(openIdList) == 0 {
+		return
+	}
+	openIdArr := make([]string, 0)
+	for _, v := range openIdList {
+		openIdArr = append(openIdArr, v.OpenId)
+	}
+
+	fmt.Println(openIdArr)
+	var keyword1 string
+	var keyword2 string
+	var keyword3 string
+	var keyword4 string
+	keyword1 = fmt.Sprint(user.RealName, "--", user.CompanyName, "(", sellerItem.RealName, ")")
+	if user.Mobile == "" {
+		user.Mobile = user.Email
+	}
+	keyword2 = user.Mobile
+	keyword3 = time.Now().Format(utils.FormatDateTime)
+	keyword4 = fmt.Sprint(content, "(申请路演)")
+	var redirectUrl string
+	sendInfo := new(SendWxTemplate)
+	sendInfo.Keyword1 = keyword1
+	sendInfo.Keyword2 = keyword2
+	sendInfo.Keyword3 = keyword3
+	sendInfo.Keyword4 = keyword4
+	sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ACTIVITY_ADD
+	sendInfo.TemplateId = utils.WxMsgTemplateIdApplyXzs
+	sendInfo.RedirectUrl = redirectUrl
+	sendInfo.RedirectTarget = 3
+	sendInfo.OpenIdArr = openIdArr
+	err = PublicSendTemplateMsg(sendInfo)
+	return
+}

+ 153 - 1
services/resource_data.go

@@ -40,6 +40,7 @@ func GetResourceDataList(condition string, pars []interface{}, startSize, pageSi
 	var minutessummaryIds []int
 	var meetingreviewchaptIds []int
 	var productinteriorIds []int
+	var reportselectionIds []int // 报告精选
 	//Source      string    `description:"资源类型 报告 :article 、图表 :newchart、微路演 :roadshow、活动 :activity、活动视频:activityvideo、活动音频:activityvoice、专项调研活动:activityspecial 、 本周研究汇总: researchsummary 、 上周纪要汇总 :minutessummary 、晨会精华 :meetingreviewchapt "`
 	for _, v := range list {
 		if v.Source == "article" {
@@ -64,6 +65,8 @@ func GetResourceDataList(condition string, pars []interface{}, startSize, pageSi
 			meetingreviewchaptIds = append(meetingreviewchaptIds, v.SourceId)
 		} else if v.Source == "productinterior" {
 			productinteriorIds = append(productinteriorIds, v.SourceId)
+		} else if v.Source == "reportselection" {
+			reportselectionIds = append(reportselectionIds, v.SourceId)
 		}
 
 	}
@@ -215,8 +218,9 @@ func GetResourceDataList(condition string, pars []interface{}, startSize, pageSi
 		var activityListRersp []*models.ActivityDetail
 		for _, v := range activityList {
 			v.SignupType = mapActivitySignup[v.ActivityId]
-			activityListRersp = append(activityListRersp, ActivityButtonShow(v))
+			//activityListRersp = append(activityListRersp, ActivityButtonShow(v))
 		}
+		activityListRersp = ActivityArrButtonShow(activityList)
 		for _, v := range activityListRersp {
 			if v == nil {
 				continue
@@ -417,8 +421,31 @@ func GetResourceDataList(condition string, pars []interface{}, startSize, pageSi
 		}
 	}
 
+	//处理报告精选
+	lenreportselectionIds := len(reportselectionIds)
+	if lenreportselectionIds > 0 {
+		pars = make([]interface{}, 0)
+		condition = ` AND article_id IN (` + utils.GetOrmInReplace(lenreportselectionIds) + `)`
+		pars = append(pars, reportselectionIds)
+		listreportselection, e := models.GetReportSelectionList(condition, pars, 0, lenreportselectionIds)
+		if e != nil {
+			err = errors.New("GetReportSelectionList, Err: " + e.Error())
+			return
+		}
+		for _, v := range listreportselection {
+			v.Title += "(第" + v.Periods + "期)"
+			v.MarketStrategy = AnnotationHtml(v.MarketStrategy)
+			v.PublishDate = utils.TimeRemoveHms2(v.PublishDate)
+			mapItems[fmt.Sprint("reportselection", v.ArticleId)].ReportSelection = v
+		}
+	}
+
 	for _, vList := range list {
 		for _, v := range mapItems {
+			//如果这些类型都为空,那么就不合并
+			if v.Article == nil && v.Newchart == nil && v.Roadshow == nil && v.Activity == nil && v.Activityvideo == nil && v.Activityvoice == nil && v.Activityspecial == nil && v.Researchsummary == nil && v.Minutessummary == nil && v.Meetingreviewchapt == nil && v.ProductInterior == nil && v.IndustrialResource == nil && v.ReportSelection == nil {
+				continue
+			}
 			if v.SourceId == vList.SourceId {
 				items = append(items, v)
 			}
@@ -468,3 +495,128 @@ func Deletenewchart(chartIdsDelete []int) (err error) {
 	err = models.DeleteResourceDataList(condition, pars)
 	return
 }
+
+//func init() {
+//	UpdateArticleResourceData(9050)
+//}
+
+// 更新文章
+func UpdateArticleResourceData(sourceId int) {
+	var err error
+	defer func() {
+		if err != nil {
+			fmt.Println("err:", err)
+			go utils.SendAlarmMsg("更新文章 失败,UpdateArticleResourceData Err:"+err.Error()+"资源ID"+strconv.Itoa(sourceId), 3)
+		}
+	}()
+	var source = utils.CYGX_OBJ_ARTICLE
+	var condition string
+	var pars []interface{}
+	condition = ` AND publish_status = 1  AND  article_id = ?  `
+	pars = append(pars, sourceId)
+	total, e := models.GetCygxArticleCount(condition, pars)
+	if e != nil {
+		err = errors.New("GetCygxReportSelection, Err: " + err.Error())
+		return
+	}
+	//如果取消发布了就做删除处理
+	if total == 0 {
+		e = models.DeleteResourceData(sourceId, source)
+		if e != nil {
+			err = errors.New("DeleteResourceData, Err: " + e.Error())
+			return
+		}
+		//删除 cygx_resource_data 表关联的产业ID,标的ID
+		e = models.DeleteCygxResourceDataGroup(sourceId, source)
+		if e != nil {
+			err = errors.New("DeleteCygxResourceDataGroup, Err: " + e.Error())
+			return
+		}
+	} else {
+		//判断是否存在,如果不存在就新增,存在就更新
+		totalData, e := models.GetCygxReportSelectionBySourceAndId(sourceId, source)
+		if e != nil {
+			err = errors.New("GetCygxReportSelectionBySourceAndId, Err: " + e.Error())
+			return
+		}
+		detail, e := models.GetArticleDetailById(sourceId)
+		if e != nil {
+			err = errors.New("GetCygxReportSelectionInfoById, Err: " + e.Error())
+			return
+		}
+		var resourceDataId int
+		publishDate := time.Now().Format(utils.FormatDateTime)
+		item := new(models.CygxResourceData)
+		if detail.ArticleTypeId > 0 {
+			item.SearchTag = detail.ArticleTypeName // 研选类型名称
+		} else {
+			item.SearchTag = detail.MatchTypeName
+		}
+		item.SourceId = sourceId
+		item.Source = source
+		item.PublishDate = publishDate
+		item.CreateTime = time.Now()
+		if totalData == 0 {
+			newId, e := models.AddCygxResourceData(item)
+			if e != nil {
+				err = errors.New("AddCygxResourceData, Err: " + e.Error())
+				return
+			}
+			resourceDataId = int(newId)
+		} else {
+			e = models.UpdateResourceDataByItem(item)
+			if e != nil {
+				err = errors.New("UpdateResourceData, Err: " + e.Error())
+				return
+			}
+			sourceDetail, e := models.GetCygxResourceDataByIdAndSource(sourceId, source)
+			if e != nil {
+				err = errors.New("UpdateResourceData, Err: " + e.Error())
+				return
+			}
+			resourceDataId = sourceDetail.Id
+		}
+
+		//建立首页资源表,与产业的关系
+		industrialList, e := models.GetIndustrialArticleGroupManagementListByArticleId(sourceId)
+		if e != nil && e.Error() != utils.ErrNoRow() {
+			err = errors.New("GetIndustrialArticleGroupManagementList, Err: " + e.Error() + "sourceId:" + strconv.Itoa(sourceId))
+			return
+		}
+		var industrialItems []*models.CygxResourceDataIndustrialGroupManagement
+		for _, v := range industrialList {
+			var industrialItem = new(models.CygxResourceDataIndustrialGroupManagement)
+			industrialItem.SourceId = sourceId
+			industrialItem.Source = source
+			industrialItem.IndustrialManagementId = v.IndustrialManagementId
+			industrialItem.ResourceDataId = resourceDataId
+			industrialItem.CreateTime = time.Now()
+			industrialItems = append(industrialItems, industrialItem)
+		}
+
+		//建立首页资源表,与标的 的关系
+		subjectList, e := models.GetSubjectArticleGroupManagementListByArtcileId(sourceId)
+		if e != nil && e.Error() != utils.ErrNoRow() {
+			err = errors.New("GetSubjectArticleGroupManagementList, Err: " + e.Error() + "sourceId:" + strconv.Itoa(sourceId))
+			return
+		}
+		var subjectItems []*models.CygxResourceDataIndustrialGroupSubject
+		for _, v := range subjectList {
+			var subjectItem = new(models.CygxResourceDataIndustrialGroupSubject)
+			subjectItem.SourceId = sourceId
+			subjectItem.Source = source
+			subjectItem.IndustrialSubjectId = v.IndustrialSubjectId
+			subjectItem.ResourceDataId = resourceDataId
+			subjectItem.CreateTime = time.Now()
+			subjectItems = append(subjectItems, subjectItem)
+		}
+
+		//插入关联信息
+		e = models.AddCygxResourceDataGroup(sourceId, source, industrialItems, subjectItems)
+		if e != nil {
+			err = errors.New("AddCygxResourceDataGroup, Err: " + e.Error())
+			return
+		}
+	}
+	return
+}

+ 144 - 0
services/tag.go

@@ -1,9 +1,11 @@
 package services
 
 import (
+	"errors"
 	"hongze/hongze_cygx/models"
 	"hongze/hongze_cygx/utils"
 	"strconv"
+	"strings"
 	"time"
 )
 
@@ -36,3 +38,145 @@ func AddCygxTagHistory(user *models.WxUserItem, tagId int) (err error) {
 	_, err = models.AddCygxTagHistory(historyRecord)
 	return
 }
+
+//func init() {
+//	conditionInit, err := GetConditionInitByTagIds("20,21,26")
+//	fmt.Println(err)
+//	fmt.Println()
+//	fmt.Println(conditionInit)
+//}
+
+func GetConditionInitByTagIds(tagIds string) (conditionInit string, err error) {
+	if tagIds == "" {
+		return
+	}
+	var condition string
+	var pars []interface{}
+	var searchTag, industries, subjectNames []string
+	tagslice := strings.Split(tagIds, ",")
+	condition = ` AND tag_id IN (` + utils.GetOrmInReplace(len(tagslice)) + `)`
+	pars = append(pars, tagslice)
+	listTag, e := models.GetCygxTagListCondition(condition, pars, 0, 0)
+	if e != nil {
+		err = errors.New("GetActivityListByCondition, Err: " + e.Error())
+		return
+	}
+
+	for _, tagInfo := range listTag {
+		//ActivityTypes 与 ArticleTypes 进行合并
+		if tagInfo.ActivityTypes != "" {
+			sliceObj := strings.Split(tagInfo.ActivityTypes, ",")
+			for _, v := range sliceObj {
+				searchTag = append(searchTag, v)
+			}
+		}
+		if tagInfo.ArticleTypes != "" {
+			sliceObj := strings.Split(tagInfo.ArticleTypes, ",")
+			for _, v := range sliceObj {
+				searchTag = append(searchTag, v)
+			}
+		}
+		if tagInfo.Industries != "" {
+			sliceObj := strings.Split(tagInfo.Industries, ",")
+			for _, v := range sliceObj {
+				industries = append(industries, v)
+			}
+			//industries = append(industries, tagInfo.Industries)
+		}
+		if tagInfo.SubjectNames != "" {
+			sliceObj := strings.Split(tagInfo.SubjectNames, ",")
+			for _, v := range sliceObj {
+				subjectNames = append(subjectNames, v)
+			}
+			//subjectNames = append(subjectNames, tagInfo.SubjectNames)
+		}
+	}
+
+	//拼接search_tag 搜索内容
+	if len(searchTag) > 0 {
+		//search_tag_two 兼容报告类型一对多的这种,时间不够,产品也有可能变先这么做
+		conditionInit += " AND ( search_tag IN  ('" + strings.Join(searchTag, "','") + "')  OR search_tag_two IN( '" + strings.Join(searchTag, "','") + "' )  )"
+	}
+	var resourceDataIds []int //cygx_resource_data 主键ID
+	//如果产业有组合,那么就去捞产业相关的内容
+	if len(industries) > 0 {
+		// 获取近一个月产业报告阅读次数最多的产业
+		var conditionIndustry string
+		var parsIndustry []interface{}
+		conditionIndustry += " AND industry_name IN  ('" + strings.Join(industries, "','") + "')"
+		listIndustry, e := models.GetTopOneMonthArtReadNumIndustryAll(conditionIndustry, parsIndustry)
+		if e != nil {
+			err = errors.New("GetTopOneMonthArtReadNumIndustryAll, Err: " + e.Error())
+			return
+		}
+		var industrialManagementIds []int // 产业ID合集
+		for _, v := range listIndustry {
+			industrialManagementIds = append(industrialManagementIds, v.IndustrialManagementId)
+		}
+
+		var conditionIndustryResource string
+		var parsIndustryResource []interface{}
+		lenArrindustrial := len(industrialManagementIds)
+		conditionIndustryResource = ` AND industrial_management_id IN (` + utils.GetOrmInReplace(lenArrindustrial) + `)`
+		parsIndustryResource = append(parsIndustryResource, industrialManagementIds)
+
+		if lenArrindustrial > 0 {
+			listResourceDataIndustrial, e := models.GetCygxResourceDataIndustrialGroupManagementList(conditionIndustryResource, parsIndustryResource, 0, 0)
+			//return
+			if e != nil {
+				err = errors.New("GetCygxResourceDataIndustrialGroupManagementList, Err: " + e.Error())
+				return
+			}
+			for _, v := range listResourceDataIndustrial {
+				resourceDataIds = append(resourceDataIds, v.ResourceDataId)
+			}
+		}
+	}
+	//return
+	//如果标的有组合,那么就去捞标的相关的内容
+	if len(subjectNames) > 0 {
+		// 获取近一个月产业报告阅读次数最多的产业
+		var conditionsubject string
+		var parssubject []interface{}
+		conditionsubject += " AND subject_name IN  ('" + strings.Join(subjectNames, "','") + "')"
+		listsubject, e := models.GetCygxIndustrialSubjectListCondition(conditionsubject, parssubject)
+		if e != nil {
+			err = errors.New("GetTopOneMonthArtReadNumIndustry, Err: " + e.Error())
+			return
+		}
+		var industrialsubjectIds []int // 标的ID集合
+		for _, v := range listsubject {
+			industrialsubjectIds = append(industrialsubjectIds, v.IndustrialSubjectId)
+		}
+		var conditionsubjectResource string
+		var parssubjectResource []interface{}
+		lenArrsubject := len(industrialsubjectIds)
+		conditionsubjectResource = ` AND industrial_subject_id IN (` + utils.GetOrmInReplace(lenArrsubject) + `)`
+		parssubjectResource = append(parssubjectResource, industrialsubjectIds)
+		if lenArrsubject > 0 {
+			listResourceDatasubject, e := models.GetCygxResourceDataIndustrialGroupSubjectList(conditionsubjectResource, parssubjectResource, 0, 0)
+			if e != nil {
+				err = errors.New("GetCygxResourceDataIndustrialGroupSubjectList, Err: " + e.Error())
+				return
+			}
+			for _, v := range listResourceDatasubject {
+				resourceDataIds = append(resourceDataIds, v.ResourceDataId)
+			}
+		}
+	}
+
+	//拼接 cygx_resource_data 表主键查询ID
+	if len(resourceDataIds) > 0 {
+		var resourceDataIdStrs []string
+		resourceDataIdMap := make(map[int]bool)
+		for _, v := range resourceDataIds {
+			if resourceDataIdMap[v] {
+				continue
+			}
+			resourceDataIdStrs = append(resourceDataIdStrs, strconv.Itoa(v))
+			resourceDataIdMap[v] = true
+		}
+		conditionInit += " AND id IN  (" + strings.Join(resourceDataIdStrs, ",") + ") "
+	}
+	return
+}

+ 3 - 3
services/task.go

@@ -40,12 +40,12 @@ func Task() {
 
 		yiDongSignAppointmentsForThird := task.NewTask("yiDongSignAppointmentsForThird", "0 */10 * * * *", YiDongSignAppointmentsForThird) //会前一小时将,报名信息同步到易董
 		task.AddTask("yiDongSignAppointmentsForThird", yiDongSignAppointmentsForThird)
-	}
-
-	if utils.IsTask {
 
 		getYiDongActivity := task.NewTask("getYiDongActivity", "0 */10 * * * *", GetYiDongActivity) //同步易董的活动信息
 		task.AddTask("getYiDongActivity", getYiDongActivity)
+	}
+
+	if utils.IsTask {
 
 		//会议提醒模板消息推送
 		sendActivityBeginMsg := task.NewTask("sendActivityBeginMsg", "0 */10 6-23 * * *", SendActivityBeginMsg) //会议前60分钟的提醒

+ 1 - 1
services/user_label.go

@@ -739,7 +739,7 @@ func updateUserLabelByUserId(userId int) (err error) {
 	time.Sleep(200 * time.Millisecond)
 	var condition string
 	var pars []interface{}
-	condition = ` AND is_follow=1  AND  user_id = ?  `
+	condition = ` AND is_follow=1  AND  user_id = ?  AND modify_time > DATE_SUB(CURDATE(), INTERVAL 3 MONTH)  `
 	pars = append(pars, userId)
 	totalSource1, e := models.GetCygxUserLabelCount(condition+" AND source = 1 ", pars)
 	if e != nil {

+ 21 - 1
services/wx_template_msg.go

@@ -15,6 +15,9 @@ import (
 
 // 活动预开始模版消息通知
 func SendWxMsgWithFrequency(keyword2, activityName, reserveResults, activityTime, activityAddress, remark string, openIdList []*models.OpenIdList, activityId int) (err error) {
+	if len(openIdList) == 0 {
+		return
+	}
 	var msg string
 	defer func() {
 		if err != nil {
@@ -23,7 +26,6 @@ func SendWxMsgWithFrequency(keyword2, activityName, reserveResults, activityTime
 		}
 		fmt.Println("line 21", err, msg)
 	}()
-
 	redirectUrl := utils.WX_MSG_PATH_ACTIVITY_DETAIL + strconv.Itoa(activityId)
 	sendInfo := new(SendWxTemplate)
 
@@ -47,6 +49,9 @@ func SendWxMsgWithFrequency(keyword2, activityName, reserveResults, activityTime
 // 专项调研活动预开始消息通知
 // func SendWxMsgWithFrequencySpecial(first, activityName, reserveResults, activityTime, activityAddress, remark string, openIdList []*models.OpenIdList, activityId int) (err error) {
 func SendWxMsgWithFrequencySpecial(first, keyword1, keyword2, keyword3, keyword4, remark string, openIdList []*models.OpenIdList, activityId int) (err error) {
+	if len(openIdList) == 0 {
+		return
+	}
 	var msg string
 	defer func() {
 		if err != nil {
@@ -78,6 +83,9 @@ func SendWxMsgWithFrequencySpecial(first, keyword1, keyword2, keyword3, keyword4
 
 // 发送报告提问消息提醒
 func SendWxMsgWithAsk(name, askTime, askMsg, title string, openIdList []*models.OpenIdList, articleId int) (err error) {
+	if len(openIdList) == 0 {
+		return
+	}
 	var msg string
 	defer func() {
 		if err != nil {
@@ -162,6 +170,9 @@ func SendWxMsgWithCompanyRemind(first, keyword1, keyword2, remark string, openId
 
 // 发送报告提问消息提醒
 func SendWxMsgWithArticleClassToAdmin(keyWord1, keyWord2, keyWord3, keyWord4 string, openIdList []*models.OpenIdList, articleId int) (err error) {
+	if len(openIdList) == 0 {
+		return
+	}
 	var msg string
 	defer func() {
 		if err != nil {
@@ -204,6 +215,9 @@ func SendWxMsgWithArticleClassToAdmin(keyWord1, keyWord2, keyWord3, keyWord4 str
 
 // 发送用户阅读报告消息提醒
 func SendWxMsgWithArticleUserRemind(keyWord1, keyWord2 string, openIdList []*models.OpenIdList, articleId int) (err error) {
+	if len(openIdList) == 0 {
+		return
+	}
 	var msg string
 	defer func() {
 		if err != nil {
@@ -243,6 +257,9 @@ func SendWxMsgWithArticleUserRemind(keyWord1, keyWord2 string, openIdList []*mod
 
 // 发送用户操作活动消息提醒
 func SendWxMsgWithActivityUserRemind(keyWord1, keyWord2 string, openIdList []*models.OpenIdList, activityId int) (err error) {
+	if len(openIdList) == 0 {
+		return
+	}
 	var msg string
 	defer func() {
 		if err != nil {
@@ -279,6 +296,9 @@ func SendWxMsgWithActivityUserRemind(keyWord1, keyWord2 string, openIdList []*mo
 
 // 发送用户操作专项调研活动消息提醒
 func SendWxMsgWithSpecialActivityUserRemind(keyWord1, keyWord2 string, openIdList []*models.OpenIdList, activityId int) (err error) {
+	if len(openIdList) == 0 {
+		return
+	}
 	var msg string
 	defer func() {
 		if err != nil {

+ 9 - 7
utils/config.go

@@ -9,6 +9,7 @@ import (
 var (
 	RunMode               string //运行模式
 	MYSQL_URL             string //数据库连接
+	MYSQL_URL_CYGX        string //查研观向数据库连接
 	MYSQL_URL_RDDP        string //数据库连接
 	MYSQL_URL_TACTICS     string
 	MYSQL_URL_COMEIN_DATA string // 路演记录数据库
@@ -122,6 +123,7 @@ func init() {
 	}
 	//beego.Info(RunMode + " 模式")
 	MYSQL_URL = config["mysql_url"]
+	MYSQL_URL_CYGX = config["mysql_url_cygx"]
 	MYSQL_URL_RDDP = config["mysql_url_rddp"]
 	MYSQL_URL_TACTICS = config["mysql_url_tactics"]
 	MYSQL_URL_COMEIN_DATA = config["mysql_url_comein_data"]
@@ -167,13 +169,13 @@ func init() {
 		IndexNameComprehensive = "cygx_comprehensive"
 
 		//接收附件邮箱
-		EmailTechnology = "mlluo@hzinsights.com;jxu@hzinsights.com;tshen@hzinsights.com;cxzhang@hzinsights.com;jhwang@hzinsights.com;hwang@hzinsights.com;rli@hzinsights.com"       //科技行业专家邮箱
-		EmailMedicine = "xlzheng@hzinsights.com;tshen@hzinsights.com;cxzhang@hzinsights.com;jhwang@hzinsights.com;yxyan@hzinsights.com;ppwang@hzinsights.com"                       //医药行业专家邮箱
-		EmailConsumption = "yrhuang@hzinsights.com;tshen@hzinsights.com;cxzhang@hzinsights.com;jhwang@hzinsights.com;jxu@hzinsights.com;hychen@hzinsights.com;lwang@hzinsights.com" //消费行业专家邮箱
-		EmailZhizao = "xfma@hzinsights.com;agne@hzinsights.com;tshen@hzinsights.com;cxzhang@hzinsights.com;jhwang@hzinsights.com"                                                   //智造行业专家邮箱
-		EmailStrategy = "experts@hzinsights.com;tshen@hzinsights.com;cxzhang@hzinsights.com;jhwang@hzinsights.com"                                                                  //策略行业专家邮箱
-		EmailExpert = "experts@hzinsights.com;tshen@hzinsights.com;cxzhang@hzinsights.com;jhwang@hzinsights.com"                                                                    //研选行业专家邮箱
-		EmaiWhiteUserList = "tshen@hzinsights.com;cxzhang@hzinsights.com;yyli@hzinsights.com"                                                                                       //白名单邮箱
+		EmailTechnology = "mlluo@hzinsights.com;jxu@hzinsights.com;tshen@hzinsights.com;cxzhang@hzinsights.com;hwang@hzinsights.com;rli@hzinsights.com"       //科技行业专家邮箱
+		EmailMedicine = "xlzheng@hzinsights.com;tshen@hzinsights.com;cxzhang@hzinsights.com;yxyan@hzinsights.com;ppwang@hzinsights.com"                       //医药行业专家邮箱
+		EmailConsumption = "yrhuang@hzinsights.com;tshen@hzinsights.com;cxzhang@hzinsights.com;jxu@hzinsights.com;hychen@hzinsights.com;lwang@hzinsights.com" //消费行业专家邮箱
+		EmailZhizao = "xfma@hzinsights.com;agne@hzinsights.com;tshen@hzinsights.com;cxzhang@hzinsights.com"                                                   //智造行业专家邮箱
+		EmailStrategy = "experts@hzinsights.com;tshen@hzinsights.com;cxzhang@hzinsights.com"                                                                  //策略行业专家邮箱
+		EmailExpert = "experts@hzinsights.com;tshen@hzinsights.com;cxzhang@hzinsights.com"                                                                    //研选行业专家邮箱
+		EmaiWhiteUserList = "tshen@hzinsights.com;cxzhang@hzinsights.com;yyli@hzinsights.com"                                                                 //白名单邮箱
 		WxMsgTemplateIdAskMsg = "PaoDanHGlt1kFw5q-4_ipJSwO3FyZpxSSNg4rwB7YCk"
 		WxMsgTemplateIdArticleUserRemind = "7qe3i4MrGxAIPhJeMgoqqw6j0A_foUB65DLSmxKe05s"
 		WxMsgTemplateIdAskMsgMobile = ""

+ 18 - 1
utils/constants.go

@@ -113,7 +113,8 @@ const (
 )
 
 const (
-	CHART_INFO_HTTP_URL = "https://vmp.hzinsights.com/v2/charts/"
+	CHART_INFO_HTTP_URL       = "https://vmp.hzinsights.com/v2/charts/"
+	COLLECTIONS_INFO_HTTP_URL = "https://vmp.hzinsights.com/v2/collections"
 )
 
 const (
@@ -181,6 +182,7 @@ const (
 	WX_MSG_PATH_ACTIVITY_SIGN            = "pages-message/activityTemplate/activityTemplate?id="          //活动模板消息地址
 	WX_MSG_PATH_APPLY_DETAIL             = "pages-message/applyFor/applyFor?id="                          //潜在用户试用权限申请
 	WX_MSG_PATH_YX_SURVEY_DETAIL         = "pages-purchaser/survey/surveyDetail?surveyId="                //用户提交研选调研需求
+	WX_MSG_PATH_APPLY_COLLECTION_DETAIL  = "reportPages/bulletinDetail/bulletinDetail?id="                //精选看板申请详情页
 )
 
 //2:文章详情  https://web.hzinsights.com/material/info/8436  小程序路径:/pageMy/reportDetail/reportDetail?id=
@@ -221,6 +223,21 @@ const (
 	MobileShenTao       = "18767183922" //沈涛手机号
 	MobileZhangChuanXin = "15557270714" // 张传星手机号
 	MobileWangFang      = "18621268829" // 王芳手机号
+	MobileWuAngDi       = "18701809782" // 吴昂迪手机号
+)
+
+const (
+	CYGX_OBJ_ARTICLE            string = "article"            // 对象类型:文章
+	CYGX_OBJ_ACTIVITY           string = "activity"           // 对象类型:活动
+	CYGX_OBJ_ACTIVITYVIDEO      string = "activityvideo"      // 对象类型:活动视频
+	CYGX_OBJ_ACTIVITYVOICE      string = "activityvoice"      // 对象类型:活动音频
+	CYGX_OBJ_ACTIVITYSPECIAL    string = "activityspecial"    // 对象类型:专项调研活动
+	CYGX_OBJ_MEETINGREVIEWCHAPT string = "meetingreviewchapt" // 对象类型:晨会精华
+	CYGX_OBJ_ROADSHOW           string = "roadshow"           // 对象类型:路演
+	CYGX_OBJ_REPORTSELECTION    string = "reportselection"    // 对象类型:报告精选(重点公司)
+	CYGX_OBJ_PRODUCTINTERIOR    string = "productinterior"    // 对象类型:产品内测
+	CYGX_OBJ_RESEARCHSUMMARY    string = "researchsummary"    // 对象类型:本周研究汇总
+	CYGX_OBJ_MINUTESSUMMARY     string = "minutessummary"     // 对象类型:本周研究汇总
 )
 
 const (