Browse Source

Merge branch 'cygx/cygx_check_table' of http://8.136.199.33:3000/hongze/hz_crm_api into cygx_12.0

xingzai 1 year ago
parent
commit
4c37bc9789
100 changed files with 4181 additions and 1917 deletions
  1. 6 1
      controllers/company.go
  2. 363 0
      controllers/company_renewal.go
  3. 8 0
      controllers/company_user.go
  4. 74 33
      controllers/cygx/activity.go
  5. 14 11
      controllers/cygx/activity_special.go
  6. 63 0
      controllers/cygx/activity_video.go
  7. 2 2
      controllers/cygx/advice.go
  8. 3 2
      controllers/cygx/apply_record.go
  9. 15 10
      controllers/cygx/cygx_activity_type.go
  10. 1 1
      controllers/cygx/industrial_subject.go
  11. 24 0
      controllers/cygx/interview_apply.go
  12. 3 2
      controllers/cygx/minutes_summary.go
  13. 13 7
      controllers/cygx/morning_meeting_review.go
  14. 5 3
      controllers/cygx/product_interior.go
  15. 6 2
      controllers/cygx/report_article.go
  16. 48 10
      controllers/cygx/report_selection.go
  17. 3 2
      controllers/cygx/research_summary.go
  18. 24 20
      controllers/cygx/summary_manage.go
  19. 1 1
      controllers/cygx/user.go
  20. 505 34
      controllers/eta_business/eta_business_menu.go
  21. 10 0
      controllers/eta_trial.go
  22. 279 15
      controllers/statistic_report.go
  23. 65 20
      controllers/sys_admin.go
  24. 1 1
      controllers/sys_role.go
  25. 891 0
      controllers/user_login.go
  26. 6 3
      controllers/yb/apply_record.go
  27. 150 1
      controllers/yb/product_census.go
  28. 3 3
      go.mod
  29. 5 166
      go.sum
  30. 5 0
      models/base.go
  31. 74 0
      models/company/company_ascribe.go
  32. 5 1
      models/company/company_config.go
  33. 146 0
      models/company/company_no_renewed_ascribe.go
  34. 68 0
      models/company/company_no_renewed_note.go
  35. 21 71
      models/cygx/activity.go
  36. 18 39
      models/cygx/activity_appointment.go
  37. 1 1
      models/cygx/activity_ask_email.go
  38. 15 27
      models/cygx/activity_attendance_detail.go
  39. 2 2
      models/cygx/activity_fastsearch_keywords.go
  40. 12 27
      models/cygx/activity_help_ask.go
  41. 33 195
      models/cygx/activity_meet.go
  42. 10 149
      models/cygx/activity_meet_detail_log.go
  43. 8 8
      models/cygx/activity_meeting_history.go
  44. 6 21
      models/cygx/activity_meeting_reminder.go
  45. 6 6
      models/cygx/activity_offline_meeting_detail.go
  46. 5 5
      models/cygx/activity_points_bill.go
  47. 2 2
      models/cygx/activity_points_company.go
  48. 3 3
      models/cygx/activity_points_set.go
  49. 1 1
      models/cygx/activity_poster.go
  50. 7 7
      models/cygx/activity_restrict_signup.go
  51. 2 2
      models/cygx/activity_signin.go
  52. 40 112
      models/cygx/activity_signup.go
  53. 3 3
      models/cygx/activity_signup_break.go
  54. 6 4
      models/cygx/activity_signup_detail.go
  55. 42 91
      models/cygx/activity_special.go
  56. 6 6
      models/cygx/activity_special_day.go
  57. 8 8
      models/cygx/activity_special_meeting_detail.go
  58. 20 27
      models/cygx/activity_special_trip.go
  59. 25 29
      models/cygx/activity_special_trip_bill.go
  60. 4 4
      models/cygx/activity_type.go
  61. 3 3
      models/cygx/activity_user_remarks.go
  62. 80 6
      models/cygx/activity_video.go
  63. 54 3
      models/cygx/activity_voice.go
  64. 4 9
      models/cygx/advice.go
  65. 7 14
      models/cygx/apply_record.go
  66. 1 0
      models/cygx/article.go
  67. 3 4
      models/cygx/article_ask.go
  68. 6 30
      models/cygx/article_comment.go
  69. 18 22
      models/cygx/article_department.go
  70. 8 8
      models/cygx/article_type.go
  71. 10 10
      models/cygx/banner.go
  72. 4 4
      models/cygx/banner_history.go
  73. 3 3
      models/cygx/banner_img.go
  74. 43 41
      models/cygx/chart.go
  75. 11 11
      models/cygx/chart_permission.go
  76. 6 6
      models/cygx/company_user_type.go
  77. 6 6
      models/cygx/config.go
  78. 6 6
      models/cygx/cygx_activity_special_points_company.go
  79. 37 9
      models/cygx/cygx_morning_meeting_review_chapter.go
  80. 13 13
      models/cygx/cygx_morning_meeting_reviews.go
  81. 34 19
      models/cygx/cygx_report_mapping.go
  82. 11 11
      models/cygx/cygx_tag.go
  83. 91 61
      models/cygx/cygx_user.go
  84. 113 116
      models/cygx/cygx_user_company.go
  85. 200 90
      models/cygx/cygx_user_record.go
  86. 5 5
      models/cygx/cygx_yanxuan_special.go
  87. 5 7
      models/cygx/cygx_yanxuan_special_user.go
  88. 9 10
      models/cygx/industrial_activity_group_management.go
  89. 7 8
      models/cygx/industrial_activity_group_subject.go
  90. 9 11
      models/cygx/industrial_analyst.go
  91. 9 11
      models/cygx/industrial_article_group_management.go
  92. 10 10
      models/cygx/industrial_article_group_subject.go
  93. 50 46
      models/cygx/industrial_management.go
  94. 23 25
      models/cygx/industrial_subject.go
  95. 26 10
      models/cygx/industry_fllow.go
  96. 11 11
      models/cygx/industry_map.go
  97. 2 2
      models/cygx/interface_log.go
  98. 8 12
      models/cygx/interview_apply.go
  99. 28 30
      models/cygx/micro_roadshow.go
  100. 12 13
      models/cygx/minutes_summary.go

+ 6 - 1
controllers/company.go

@@ -4821,6 +4821,11 @@ func (this *CompanyController) Receive() {
 			go company.AddCompanyProductTryOutUpdateLog(companyProductTryOutUpdateLog, companyReportPermissionList)
 		}
 
+		//流失转试用,企业下面的用户自动添加产业关注
+		{
+			go cygxService.AddUserFllowCompanyLossToTryOut(req.CompanyId)
+		}
+
 	} else {
 		//跨部门领取
 		var startDateTime, endDateTime time.Time
@@ -9290,7 +9295,7 @@ func (this *CompanyTodoController) CompanyActivitySpecialPointsBill() {
 		} else {
 			if v.DoType == 1 && v.Way != 4 && v.Way != 3 {
 				item.Content = item.ActivityName + "--报名"
-			} else if v.DoType == 2 && v.Way != 4 && v.Way != 3  {
+			} else if v.DoType == 2 && v.Way != 4 && v.Way != 3 {
 				item.Content = item.ActivityName + "--取消报名"
 			} else if v.Way == 4 {
 				item.Content = item.ActivityName + "--活动取消"

+ 363 - 0
controllers/company_renewal.go

@@ -0,0 +1,363 @@
+package controllers
+
+import (
+	"encoding/json"
+	"hongze/hz_crm_api/models"
+	"hongze/hz_crm_api/models/company"
+	"hongze/hz_crm_api/utils"
+	"time"
+)
+
+//公司未续约操作
+
+type CompanyRenewalController struct {
+	BaseAuthController
+}
+
+// @Title 新建归因
+// @Description 新建归因接口
+// @Param	request	body company.CompanyAscribeAddReq true "type json string"
+// @Success 200 {object} "保存成功"
+// @router /company_ascribe/add [post]
+func (this *CompanyRenewalController) CompanyAscribeAdd() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+	var req company.CompanyAscribeAddReq
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+	ascribeContent := req.AscribeContent
+	var condition string
+	var pars []interface{}
+	condition += " AND ascribe_content = ? "
+	pars = append(pars, ascribeContent)
+	total, err := company.GetCompanyAscribeCount(condition, pars)
+	if err != nil {
+		br.Msg = "新建失败"
+		br.ErrMsg = "获取失败,GetCompanyAscribeCount Err:" + err.Error()
+		return
+	}
+	if total > 0 {
+		br.Msg = "此归因已存在"
+		return
+	}
+	item := new(company.CompanyAscribe)
+	item.AscribeContent = ascribeContent
+	item.AdminId = sysUser.AdminId
+	item.CreateTime = time.Now()
+	item.ModifyTime = time.Now()
+	newId, err := company.AddCompanyAscribe(item)
+	if err != nil {
+		br.Msg = "新建失败"
+		br.ErrMsg = "新建失败,Err:" + err.Error()
+		return
+	}
+	detail := new(company.CompanyAscribeResp)
+	detail.CompanyAscribeId = int(newId)
+	detail.AscribeContent = ascribeContent
+	resp := new(company.CompanyAscribeDetailResp)
+	resp.Detail = detail
+	br.Ret = 200
+	br.Success = true
+	br.Data = resp
+	br.Msg = "新建成功"
+}
+
+// @Title 归因列表接口
+// @Description 归因列表接口
+// @Param   KeyWord   query   string  true       "搜索关键词"
+// @Success 200 {object} company.CompanyAscribeListResp
+// @router /company_ascribe/list [get]
+func (this *CompanyRenewalController) CompanyAscribeList() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		return
+	}
+	keyWord := this.GetString("KeyWord")
+	var condition string
+	var pars []interface{}
+	if keyWord != "" {
+		condition += ` AND  ascribe_content LIKE '%` + keyWord + `%'  ORDER  BY  create_time DESC   `
+	}
+	list, err := company.GetCompanyAscribeList(condition, pars, 0, 0)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取失败,Err:" + err.Error()
+		return
+	}
+	resp := new(company.CompanyAscribeListResp)
+	if len(list) == 0 {
+		list = make([]*company.CompanyAscribeResp, 0)
+	}
+	resp.List = list
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+}
+
+// @Title 添加未续约备注
+// @Description 添加未续约备注接口
+// @Param	request	body company.CompanyNoRenewedNoteReq true "type json string"
+// @Success 200 {object} "保存成功"
+// @router /company_no_renewed_note/add [post]
+func (this *CompanyRenewalController) CompanyNoRenewedNoteAdd() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+	var req company.CompanyNoRenewedNoteReq
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+	content := req.Content
+	companyId := req.CompanyId
+	productId := req.ProductId
+	if companyId < 1 {
+		br.Msg = "公司ID错误!"
+		return
+	}
+	if productId != 1 && productId != 2 {
+		br.Msg = "ProductId错误!"
+		return
+	}
+	item := new(company.CompanyNoRenewedNote)
+	item.Content = content
+	item.CompanyId = companyId
+	item.AdminId = sysUser.AdminId
+	item.ProductId = productId
+	item.CreateTime = time.Now()
+	item.ModifyTime = time.Now()
+	err = company.AddCompanyNoRenewedNote(item)
+	if err != nil {
+		br.Msg = "新建失败"
+		br.ErrMsg = "新建失败,Err:" + err.Error()
+		return
+	}
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "新建成功"
+}
+
+// @Title 未续约备注列表
+// @Description 未续约备注列表接口
+// @Param   CompanyId   query   int  true       "公司ID"
+// @Param   ProductId   query   int  true       "产品ID 1:FICC ,2:权益"
+// @Success 200 {object} company.CompanyAscribeListResp
+// @router /company_no_renewed_note/list [get]
+func (this *CompanyRenewalController) CompanyNoRenewedNoteList() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		return
+	}
+	companyId, _ := this.GetInt("CompanyId")
+	productId, _ := this.GetInt("ProductId")
+	if companyId < 1 {
+		br.Msg = "公司ID错误!"
+		return
+	}
+	if productId != 1 && productId != 2 {
+		br.Msg = "ProductId错误!"
+		return
+	}
+	var condition string
+	var pars []interface{}
+	condition += ` AND  company_id  = ?  AND product_id = ?  ORDER  BY  create_time DESC   `
+	pars = append(pars, companyId, productId)
+	list, err := company.GetCompanyNoRenewedNoteList(condition, pars, 0, 0)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取失败,Err:" + err.Error()
+		return
+	}
+	resp := new(company.CompanyNoRenewedNoteListResp)
+	if len(list) == 0 {
+		list = make([]*company.CompanyNoRenewedNoteResp, 0)
+	}
+	resp.List = list
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+}
+
+// @Title 通过归因添加确认不续约
+// @Description 通过归因添加确认不续约接口
+// @Param	request	body company.CompanyNoRenewedNoteReq true "type json string"
+// @Success 200 {object} "保存成功"
+// @router /company_no_renewed_ascribe/add [post]
+func (this *CompanyRenewalController) CompanyNoRenewedAscribeAdd() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+
+	//内容仅权益管理员账号可以修改
+	if sysUser.RoleTypeCode != utils.ROLE_TYPE_CODE_ADMIN && sysUser.RoleTypeCode != utils.ROLE_TYPE_CODE_RAI_ADMIN {
+		br.Msg = "仅管理员可修改!"
+		return
+	}
+	var req company.CompanyNoRenewedAscribeReq
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+	content := req.Content
+	companyId := req.CompanyId
+	productId := req.ProductId
+	companyAscribeId := req.CompanyAscribeId
+
+	if content == "" {
+		br.Msg = "内容不能为空!"
+		return
+	}
+	if companyId < 1 {
+		br.Msg = "公司ID错误!"
+		return
+	}
+	if productId != 1 && productId != 2 {
+		if companyId < 1 {
+			br.Msg = "ProductId错误!"
+			return
+		}
+	}
+	detail, err := company.GetCompanyAscribeDetail(companyAscribeId)
+	if err != nil {
+		br.Msg = "新建失败"
+		br.ErrMsg = "新建失败,GetCompanyAscribeDetail Err:" + err.Error()
+		return
+	}
+	var condition string
+	var pars []interface{}
+	condition += ` AND  company_id  = ?  AND product_id = ?  ORDER  BY  create_time DESC   `
+	pars = append(pars, companyId, productId)
+
+	total, err := company.GetCompanyNoRenewedAscribeCount(condition, pars)
+	if err != nil {
+		br.Msg = "新建失败"
+		br.ErrMsg = "新建失败,GetCompanyNoRenewedAscribeCount Err:" + err.Error()
+		return
+	}
+	item := new(company.CompanyNoRenewedAscribe)
+	item.CompanyAscribeId = companyAscribeId
+	item.AscribeContent = detail.AscribeContent
+	item.Content = content
+	item.ProductId = productId
+	item.CompanyId = companyId
+	item.AdminId = sysUser.AdminId
+	item.CreateTime = time.Now()
+	item.ModifyTime = time.Now()
+
+	itemLog := new(company.CompanyNoRenewedAscribeLog)
+	itemLog.CompanyAscribeId = companyAscribeId
+	itemLog.AscribeContent = detail.AscribeContent
+	itemLog.Content = content
+	itemLog.ProductId = productId
+	itemLog.CompanyId = companyId
+	itemLog.AdminId = sysUser.AdminId
+	itemLog.CreateTime = time.Now()
+	itemLog.ModifyTime = time.Now()
+	if total == 0 {
+		err = company.AddCompanyNoRenewedAscribe(item, itemLog)
+	} else {
+		err = company.UpdateCompanyNoRenewedAscribe(item, itemLog)
+	}
+	if err != nil {
+		br.Msg = "新建失败"
+		br.ErrMsg = "新建失败,Err:" + err.Error()
+		return
+	}
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "新建成功"
+}
+
+// @Title 确认归因不续约详情接口
+// @Description 确认归因不续约详情接口
+// @Param   CompanyId   query   int  true       "公司ID"
+// @Param   ProductId   query   int  true       "产品ID 1:FICC ,2:权益"
+// @Success 200 {object} company.CompanyAscribeListResp
+// @router /company_no_renewed_ascribe/detail [get]
+func (this *CompanyRenewalController) CompanyNoRenewedAscribeAddDetail() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		return
+	}
+	companyId, _ := this.GetInt("CompanyId")
+	productId, _ := this.GetInt("ProductId")
+	if companyId < 1 {
+		br.Msg = "公司ID错误!"
+		return
+	}
+	if productId != 1 && productId != 2 {
+		br.Msg = "ProductId错误!"
+		return
+	}
+	resp := new(company.CompanyNoRenewedAscribeDetailResp)
+	detail, err := company.GetCygxProductInteriorDetail(companyId, productId)
+	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
+}

+ 8 - 0
controllers/company_user.go

@@ -5310,6 +5310,14 @@ func (this *CompanyUserController) GetOtherProduct() {
 	if statisticFlag {
 		resp = append(resp, questionItem, roadVideoItem, videoItem)
 	}
+
+	// 全部
+	resp = append(resp, response.OtherProductTypeListResp{
+		ProductId:   0,
+		ProductType: 99,
+		ProductName: "全部",
+	})
+
 	br.Ret = 200
 	br.Success = true
 	br.Msg = "获取成功"

+ 74 - 33
controllers/cygx/activity.go

@@ -650,7 +650,7 @@ func (this *ActivityCoAntroller) PreserveAndPublish() {
 					item.AdminName = activityInfo.AdminName
 					item.PublishDate = utils.StrTimeToTime(activityInfo.PublishDate)
 				}
-				//音频
+				//音频 目前只有一个
 				itemVoice := new(cygx.CygxActivityVoice)
 				//var itemVoiceList []*cygx.CygxActivityVoice
 				if len(voiceList) > 0 {
@@ -659,6 +659,8 @@ func (this *ActivityCoAntroller) PreserveAndPublish() {
 						itemVoice.VoiceName = vo.Name
 						itemVoice.VoiceUrl = vo.Url
 						itemVoice.VoicePlaySeconds = vo.PlaySeconds
+						itemVoice.BackgroundImg = req.BackgroundImg
+						itemVoice.ShareImg = req.ShareImg
 						itemVoice.CreateTime = time.Now()
 					}
 				}
@@ -669,50 +671,58 @@ func (this *ActivityCoAntroller) PreserveAndPublish() {
 					itemVideo.ActivityId = activityId
 					itemVideo.VideoDuration = videoDetail.VideoDuration
 					itemVideo.VideoUrl = videoDetail.VideoUrl
+					itemVideo.BackgroundImg = req.BackgroundImg
+					itemVideo.ShareImg = req.ShareImg
 					itemVideo.ModifyDate = time.Now().Format(utils.FormatDateTime)
 					itemVideo.CreateTime = time.Now().Format(utils.FormatDateTime)
 				}
 				//删除原有的视频数据
 				//if itemVideo.VideoUrl != "" {
-				videoDetail, err := cygx.GetCygxActivityVideoReqDetail(activityId)
-				if err != nil && err.Error() != utils.ErrNoRow() {
-					br.Msg = "获取信息失败"
-					br.ErrMsg = "GetCygxActivityVideoReqDetail,Err:" + err.Error() + "activityId:" + strconv.Itoa(activityId)
-					return
-				}
-				if videoDetail != nil {
-					go cygxService.UpdateResourceData(videoDetail.VideoId, "activityvideo", "delete", time.Now().Format(utils.FormatDateTime))
-				}
+				//videoDetail, err := cygx.GetCygxActivityVideoReqDetail(activityId)
+				//if err != nil && err.Error() != utils.ErrNoRow() {
+				//	br.Msg = "获取信息失败"
+				//	br.ErrMsg = "GetCygxActivityVideoReqDetail,Err:" + err.Error() + "activityId:" + strconv.Itoa(activityId)
+				//	return
 				//}
-
-				//if itemVoice.VoiceUrl != "" {
-				voiceReqList, err := cygx.GetCygxActivityVoiceReqList(activityId)
+				//if videoDetail != nil {
+				//	go cygxService.UpdateResourceData(videoDetail.VideoId, "activityvideo", "delete", time.Now().Format(utils.FormatDateTime))
+				//}
+				//}
+				//处理音视频上传
+				err := cygxService.UpdateActivityVideoAndVoice(activityInfo, itemVoice, itemVideo)
 				if err != nil && err.Error() != utils.ErrNoRow() {
 					br.Msg = "获取信息失败"
-					br.ErrMsg = "GetCygxActivityVoiceReqList,Err:" + err.Error() + "activityId:" + strconv.Itoa(activityId)
+					br.ErrMsg = "UpdateActivityVideoAndVoice,Err:" + err.Error() + "activityId:" + strconv.Itoa(activityId)
 					return
 				}
-				if len(voiceReqList) > 0 {
-					for _, voice := range voiceReqList {
-						go cygxService.UpdateResourceData(voice.ActivityVoiceId, "activityvoice", "delete", time.Now().Format(utils.FormatDateTime))
-					}
-				}
+				//if itemVoice.VoiceUrl != "" {
+				//voiceReqList, err := cygx.GetCygxActivityVoiceReqList(activityId)
+				//if err != nil && err.Error() != utils.ErrNoRow() {
+				//	br.Msg = "获取信息失败"
+				//	br.ErrMsg = "GetCygxActivityVoiceReqList,Err:" + err.Error() + "activityId:" + strconv.Itoa(activityId)
+				//	return
+				//}
+				//if len(voiceReqList) > 0 {
+				//	for _, voice := range voiceReqList {
+				//		go cygxService.UpdateResourceData(voice.ActivityVoiceId, "activityvoice", "delete", time.Now().Format(utils.FormatDateTime))
+				//	}
+				//}
 				//}
 				//如果活动信息有如下变更则做消息推送
-				voiceIdNew, videoIdNew, err := cygx.EditActivity(item, activityInfo.PublishStatus, industrialActivityItemsList, subjectActivityItemsList, itemVoice, itemVideo, itemPointsSet)
+				err = cygx.EditActivity(item, activityInfo.PublishStatus, industrialActivityItemsList, subjectActivityItemsList, itemPointsSet)
 				if err != nil {
 					br.Msg = "操作失败"
 					br.ErrMsg = "操作失败,Err:" + err.Error()
 					return
 				}
-				//更新活动音频
-				if int(voiceIdNew) > 0 {
-					go cygxService.UpdateResourceData(int(voiceIdNew), "activityvoice", "add", activityInfo.ActivityTime)
-				}
-				//更新活动视频
-				if int(videoIdNew) > 0 {
-					go cygxService.UpdateResourceData(int(videoIdNew), "activityvideo", "add", activityInfo.ActivityTime)
-				}
+				////更新活动音频
+				//if int(voiceIdNew) > 0 {
+				//	go cygxService.UpdateResourceData(int(voiceIdNew), "activityvoice", "add", activityInfo.ActivityTime)
+				//}
+				////更新活动视频
+				//if int(videoIdNew) > 0 {
+				//	go cygxService.UpdateResourceData(int(videoIdNew), "activityvideo", "add", activityInfo.ActivityTime)
+				//}
 
 				errAct = err
 				if activityInfo.PublishStatus == 1 && activityInfo.ActivityTimeText != item.ActivityTimeText {
@@ -794,7 +804,8 @@ func (this *ActivityCoAntroller) PreserveAndPublish() {
 				go func() {
 					//同时添加多个活动的时候,避免协程开的过多
 					cygxService.DoActivityOnenIdWxTemplateMsg(v)
-					cygxService.UpdateResourceData(v, "activity", "add", time.Now().Format(utils.FormatDateTime))
+					//cygxService.UpdateResourceData(v, "activity", "add", time.Now().Format(utils.FormatDateTime))
+					cygxService.UpdateActivityResourceData(v) //写入首页最新  cygx_resource_data 表
 					cygxService.YiDongSaveRoadshowDetail(v)
 					cygxService.YanXuanActivityPointsBillActivityPublishAndCancel(v, AdminUser.AdminId, 1) //活动发布以及取消发布处理研选扣
 					elastic.AddComprehensiveActivity(v)
@@ -806,7 +817,8 @@ func (this *ActivityCoAntroller) PreserveAndPublish() {
 	} else {
 		if req.DoType == 1 {
 			go cygxService.DoActivityOnenIdWxTemplateMsg(req.ActivityId)
-			go cygxService.UpdateResourceData(req.ActivityId, "activity", "add", time.Now().Format(utils.FormatDateTime))
+			//go cygxService.UpdateResourceData(req.ActivityId, "activity", "add", time.Now().Format(utils.FormatDateTime))
+			cygxService.UpdateActivityResourceData(req.ActivityId)                                             //写入首页最新  cygx_resource_data 表
 			go cygxService.YanXuanActivityPointsBillActivityPublishAndCancel(activityId, AdminUser.AdminId, 1) //活动发布以及取消发布处理研选扣点
 		}
 		//如果二次编辑的时候,取消了易董办会选项,那么就对易董发送取消发布到广场的通知
@@ -1125,6 +1137,11 @@ func (this *ActivityCoAntroller) Detail() {
 	}
 	if len(VoiceReqList) == 0 {
 		VoiceReqList = make([]*cygx.CygxActivityVoiceReq, 0)
+	} else {
+		for _, v := range VoiceReqList {
+			activityInfo.BackgroundImg = v.BackgroundImg
+			activityInfo.ShareImg = v.ShareImg
+		}
 	}
 	VideoDetail, err := cygx.GetCygxActivityVideoReqDetail(activityId)
 	if err != nil && err.Error() != utils.ErrNoRow() {
@@ -1132,6 +1149,10 @@ func (this *ActivityCoAntroller) Detail() {
 		br.ErrMsg = "GetCygxActivityVideoReqDetail,Err:" + err.Error() + "activityId:" + strconv.Itoa(activityId)
 		return
 	}
+	if VideoDetail != nil {
+		activityInfo.BackgroundImg = VideoDetail.BackgroundImg
+		activityInfo.ShareImg = VideoDetail.ShareImg
+	}
 	if activityInfo.CustomerTypeIds != "" {
 		customerTypeIdslist := strings.Split(activityInfo.CustomerTypeIds, ",")
 		var permissionValueStr string
@@ -1174,6 +1195,20 @@ func (this *ActivityCoAntroller) Detail() {
 	if activityInfo.VisibleRange == 0 {
 		activityInfo.VisibleRange = 2
 	}
+
+	////如果是已结束的活动,而且封面图片为空,那么就给一个默认的图片
+	//if activityInfo.ActiveState == 3 && activityInfo.BackgroundImg == "" {
+	//	// 获取默认图配置 目前音频视频用的是同一个封面图,暂时不做区分处理
+	//	audioMap, _, audioShareMap, _, err := cygxService.GetMicroRoadShowDefaultImgConfig()
+	//	if err != nil && err.Error() != utils.ErrNoRow() {
+	//		br.Msg = "获取信息失败"
+	//		br.ErrMsg = "GetMicroRoadShowDefaultImgConfig,Err:" + err.Error() + "activityId:" + strconv.Itoa(activityId)
+	//		return
+	//	}
+	//	activityInfo.BackgroundImg = audioMap[activityInfo.ChartPermissionId]
+	//	activityInfo.ShareImg = audioShareMap[activityInfo.ChartPermissionId]
+	//}
+
 	//activityInfo.CancelDeadlineType = cygxService.ActivityCancelDeadlineType(activityInfo) //处理活动取消报名截止时间类型展示
 	activityInfo.VoiceList = VoiceReqList
 	activityInfo.VideoDetail = VideoDetail
@@ -1243,7 +1278,9 @@ func (this *ActivityCoAntroller) PublishAndCancel() {
 		item.PublishStatus = 1
 		item.IsCancel = 0
 		go cygxService.DoActivityOnenIdWxTemplateMsg(activityId)
-		go cygxService.UpdateResourceData(activityId, "activity", "add", time.Now().Format(utils.FormatDateTime))
+		//go cygxService.UpdateResourceData(activityId, "activity", "add", time.Now().Format(utils.FormatDateTime))
+
+		cygxService.UpdateActivityResourceData(activityId) //写入首页最新  cygx_resource_data 表
 	} else {
 		item.PublishStatus = 0
 		item.IsCancel = 1
@@ -1251,7 +1288,8 @@ func (this *ActivityCoAntroller) PublishAndCancel() {
 	if activityInfo.PublishStatus == 1 {
 		go services.SendWxMsgWithCygxActivity(req.ActivityId)
 		//同步活动到最新数据表
-		go cygxService.UpdateResourceData(req.ActivityId, "activity", "delete", "")
+		//go cygxService.UpdateResourceData(req.ActivityId, "activity", "delete", "")
+		cygxService.UpdateActivityResourceData(activityId) //写入首页最新  cygx_resource_data 表
 	}
 	item.ActivityId = req.ActivityId
 	if item.PublishStatus == 1 {
@@ -1556,7 +1594,7 @@ func (this *ActivityCoAntroller) ImgToText() {
 		if k == 0 && !strings.Contains(v.Word, "/") {
 			continue
 		}
-		if strings.Contains(v.Word, "/") {
+		if strings.Contains(v.Word, "/") && !strings.Contains(v.Word, "(") && !strings.Contains(v.Word, ")") {
 			mapTitmeYMD[lineNum] = v.Word
 			titmeYMD = v.Word
 		}
@@ -1564,6 +1602,9 @@ func (this *ActivityCoAntroller) ImgToText() {
 			mapTitmeHM[lineNum] = v.Word
 			titmeHM = v.Word
 		}
+		if strings.Contains(v.Word, "(") && !strings.Contains(v.Word, ")") {
+			v.Word += ")" // 图片识别的偶尔有问题,兼容一下
+		}
 		if strings.Contains(v.Word, "(") && strings.Contains(v.Word, ")") {
 			if mapTitmeYMD[lineNum] == "" {
 				mapTitmeYMD[lineNum] = mapTitmeYMD[lineNum-1]

+ 14 - 11
controllers/cygx/activity_special.go

@@ -275,7 +275,8 @@ func (this *ActivitySpecialCoAntroller) PreserveAndPublish() {
 	//模板消息推送
 	if req.DoType == 1 {
 		go services.SendWxMsgWithCygxActivitySpecial(activityId)
-		go cygxService.UpdateResourceData(activityId, "activityspecial", "add", time.Now().Format(utils.FormatDateTime))
+		//go cygxService.UpdateResourceData(activityId, "activityspecial", "add", time.Now().Format(utils.FormatDateTime))
+		go cygxService.UpdateActivitySpecialResourceData(activityId) //写入首页最新  cygx_resource_data 表
 	}
 	go elastic.AddComprehensiveActivitySpecial(activityId) // Es添加活动
 	br.Ret = 200
@@ -535,12 +536,13 @@ func (this *ActivitySpecialCoAntroller) PublishAndCancel() {
 	//模板消息推送
 	if item.PublishStatus == 1 {
 		go services.SendWxMsgWithCygxActivitySpecial(activityId)
-		go cygxService.UpdateResourceData(activityId, "activityspecial", "add", time.Now().Format(utils.FormatDateTime))
+		//go cygxService.UpdateResourceData(activityId, "activityspecial", "add", time.Now().Format(utils.FormatDateTime))
 	} else {
 		go cygxService.DetermineTripCancel(activityId)
-		go cygxService.UpdateResourceData(activityId, "activityspecial", "delete", time.Now().Format(utils.FormatDateTime))
+		//go cygxService.UpdateResourceData(activityId, "activityspecial", "delete", time.Now().Format(utils.FormatDateTime))
 	}
-	go elastic.AddComprehensiveActivitySpecial(activityId) // Es添加活动
+	go cygxService.UpdateActivitySpecialResourceData(activityId) //写入首页最新  cygx_resource_data 表
+	go elastic.AddComprehensiveActivitySpecial(activityId)       // Es添加活动
 	br.Ret = 200
 	br.Success = true
 	br.Msg = "操作成功"
@@ -1174,13 +1176,14 @@ func (this *ActivitySpecialCoAntroller) Offline() {
 		return
 	}
 	//模板消息推送
-	if item.PublishStatus == 1 {
-		go cygxService.UpdateResourceData(activityId, "activityspecial", "add", time.Now().Format(utils.FormatDateTime))
-		//go services.SendWxMsgWithCygxActivitySpecial(activityId)
-	} else {
-		go cygxService.UpdateResourceData(activityId, "activityspecial", "delete", time.Now().Format(utils.FormatDateTime))
-	}
-	go elastic.AddComprehensiveActivitySpecial(activityId) // Es添加活动
+	//if item.PublishStatus == 1 {
+	//	go cygxService.UpdateResourceData(activityId, "activityspecial", "add", time.Now().Format(utils.FormatDateTime))
+	//	//go services.SendWxMsgWithCygxActivitySpecial(activityId)
+	//} else {
+	//	go cygxService.UpdateResourceData(activityId, "activityspecial", "delete", time.Now().Format(utils.FormatDateTime))
+	//}
+	go cygxService.UpdateActivitySpecialResourceData(activityId) //写入首页最新  cygx_resource_data 表
+	go elastic.AddComprehensiveActivitySpecial(activityId)       // Es添加活动
 	br.Ret = 200
 	br.Success = true
 	br.Msg = "操作成功"

+ 63 - 0
controllers/cygx/activity_video.go

@@ -1,6 +1,7 @@
 package cygx
 
 import (
+	"encoding/json"
 	"fmt"
 	"github.com/rdlucklib/rdluck_tools/paging"
 	"github.com/tealeg/xlsx"
@@ -343,3 +344,65 @@ func (this *ActivityVideoCoAntroller) CommentList() {
 	br.Msg = "获取成功"
 	br.Data = resp
 }
+
+// @Title 获取音视频上传之后的封面图
+// @Description 获取音视频上传之后的封面图
+// @Param   ActivityId   query   int  true       "活动ID"
+// @Param   FileType   query   int  true       "音视频文件类型 。1:音频。2:视频"
+// @Success 200 {object} cygx.ChartPermissionRepMoreList
+// @router /activityVideo/video_and_voice/img [get]
+func (this *ActivityVideoCoAntroller) VideoAndVoice() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	AdminUser := this.SysUser
+	if AdminUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,用户信息为空"
+		br.Ret = 408
+		return
+	}
+	activityId, _ := this.GetInt("ActivityId")
+	fileType, _ := this.GetInt("FileType")
+	if activityId < 1 {
+		br.Msg = "请输入活动ID"
+		return
+	}
+	activityInfo, err := cygx.GetAddActivityInfoById(activityId)
+	if err != nil {
+		br.Msg = "活动不存在"
+		br.ErrMsg = "活动ID错误,Err:" + err.Error() + "activityId:" + strconv.Itoa(activityId)
+		return
+	}
+	//key := utils.MicroRoadshowDefaultImgKey
+	conf, err := cygx.GetCygxConfigDetailByCode("activity_video_default_img")
+	if err != nil {
+		br.Msg = "获取微路演默认图配置失败" + err.Error()
+		return
+	}
+	list := new(cygx.ActivityVideoDefaultImgList)
+	if err = json.Unmarshal([]byte(conf.ConfigValue), &list); err != nil {
+		br.Msg = "微路演默认图配置配置值解析失败" + err.Error()
+		return
+	}
+	resp := new(cygx.ActivityVideoDefaultImgListResp)
+	if fileType == 1 {
+		for _, v := range list.Audio {
+			if v.ChartPermissionId == activityInfo.ChartPermissionId {
+				resp.List = v.List
+			}
+		}
+	} else {
+		for _, v := range list.Video {
+			if v.ChartPermissionId == activityInfo.ChartPermissionId {
+				resp.List = v.List
+			}
+		}
+	}
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+}

+ 2 - 2
controllers/cygx/advice.go

@@ -9,7 +9,7 @@ import (
 	"strings"
 )
 
-//优化建议
+// 优化建议
 type AdviceController struct {
 	controllers.BaseAuthController
 }
@@ -55,7 +55,7 @@ func (this *AdviceController) List() {
 	var pars []interface{}
 
 	if keyWord != "" {
-		condition += ` AND (b.mobile LIKE '%` + keyWord + `%' OR b.email LIKE '%` + keyWord + `%' OR b.real_name LIKE '%` + keyWord + `%') `
+		condition += ` AND (a.mobile LIKE '%` + keyWord + `%' OR a.email LIKE '%` + keyWord + `%' OR a.user_real_name LIKE '%` + keyWord + `%') `
 	}
 
 	total, err := cygx.GetAdviceListCount(condition, pars)

+ 3 - 2
controllers/cygx/apply_record.go

@@ -53,7 +53,8 @@ func (this *ApplyRecordController) ListSysRole() {
 	var pars []interface{}
 
 	if keyWord != "" {
-		condition += ` AND (b.seller_name LIKE '%` + keyWord + `%' OR a.mobile LIKE '%` + keyWord + `%' OR c.email LIKE '%` + keyWord + `%' )  `
+		//condition += ` AND (b.seller_name LIKE '%` + keyWord + `%' OR a.mobile LIKE '%` + keyWord + `%' OR c.email LIKE '%` + keyWord + `%' )  `
+		condition += ` AND a.mobile LIKE '%` + keyWord + `%'  `
 	}
 
 	customType, _ := this.GetInt("CustomType")
@@ -76,7 +77,7 @@ func (this *ApplyRecordController) ListSysRole() {
 	}
 	lencompanyIds := len(companyIds)
 	if lencompanyIds > 0 {
-		condition = ` AND a.company_id_pay  IN (` + utils.GetOrmInReplace(lencompanyIds) + `)`
+		condition += ` AND a.company_id_pay  IN (` + utils.GetOrmInReplace(lencompanyIds) + `)`
 		pars = append(pars, companyIds)
 	}
 

+ 15 - 10
controllers/cygx/cygx_activity_type.go

@@ -16,6 +16,7 @@ type ActivityTypeCoAntroller struct {
 // @Title 活动类型列表
 // @Description活动类型列表接口
 // @Param   IsResearch   query   bool  true       "是否为研选"
+// @Param   IsGetAll   query   bool  true       "是否获取所有"
 // @Success 200 {object} cygx.ActivityTypeListResp
 // @router /activityType/list [get]
 func (this *ActivityTypeCoAntroller) List() {
@@ -32,13 +33,17 @@ func (this *ActivityTypeCoAntroller) List() {
 		return
 	}
 	isResearch, _ := this.GetBool("IsResearch", false)
+	isGetAll, _ := this.GetBool("IsGetAll", false)
 	var condition string
 	resp := new(cygx.ActivityTypeListResp)
-	if isResearch {
-		condition = " source_type IN (0,2) "
-	} else {
-		condition = " source_type IN (0,1) "
+	if !isGetAll {
+		if isResearch {
+			condition = " AND source_type IN (0,2) "
+		} else {
+			condition = " AND source_type IN (0,1) "
+		}
 	}
+
 	list, err := cygx.GetActivityTypeSearchList(condition)
 	if err != nil {
 		br.Msg = "获取失败"
@@ -122,13 +127,13 @@ func (this *ActivityTypeCoAntroller) ListSearch() {
 	resp := new(cygx.ActivityTypeListResp)
 	var condition string
 	if searchType == 1 {
-		condition += ` activity_type_id  IN (1,2)`
+		condition += ` AND  activity_type_id  IN (1,2)`
 	} else if searchType == 2 {
-		condition += ` activity_type_id  IN (5,6)`
+		condition += ` AND activity_type_id  IN (5,6)`
 	} else if searchType == 3 {
-		condition += ` activity_type_id  IN (3,4)`
+		condition += ` AND activity_type_id  IN (3,4)`
 	} else {
-		condition += ` activity_type_id  IN (7)`
+		condition += ` AND activity_type_id  IN (7)`
 	}
 	list, err := cygx.GetActivityTypeSearchList(condition)
 	if err != nil {
@@ -167,9 +172,9 @@ func (this *ActivityTypeCoAntroller) MeetType() {
 	resp := new(cygx.ActivityTypeListResp)
 	var condition string
 	if meetType == 1 {
-		condition += ` activity_type =1 `
+		condition += ` AND activity_type =1 `
 	} else {
-		condition += ` activity_type  = 0 `
+		condition += ` AND activity_type  = 0 `
 	}
 	if isResearch {
 		condition += " AND  source_type IN (0,2) "

+ 1 - 1
controllers/cygx/industrial_subject.go

@@ -464,7 +464,7 @@ func (this *IndustrialSubjectController) IndustrialSubjectSearch() {
 		condition = ` AND s.subject_name LIKE '%` + keyWord + `%'  `
 	}
 	if chartPermissionId > 0 {
-		condition += ` AND c.chart_permission_id = ` + strconv.Itoa(chartPermissionId)
+		condition += ` AND m.chart_permission_id = ` + strconv.Itoa(chartPermissionId)
 	}
 
 	listSubject, err := cygx.GetIndustrialSubjectListNameByChartId(condition)

+ 24 - 0
controllers/cygx/interview_apply.go

@@ -97,7 +97,31 @@ func (this *InterviewApplyController) List() {
 		br.ErrMsg = "获取数据失败,Err:" + err.Error()
 		return
 	}
+	var userIds []int
 
+	for _, v := range list {
+		userIds = append(userIds, v.UserId)
+	}
+
+	listUser, err := models.GetWxUserRaiSllerListByUserIds(userIds)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取数据失败,Err:" + err.Error()
+		return
+	}
+	//拼接用户相关信息
+	mapUser := make(map[int]*models.WxUserSller)
+	for _, v := range listUser {
+		mapUser[v.UserId] = v
+	}
+	for _, v := range list {
+		if mapUser[v.UserId] != nil {
+			v.UserRealName = mapUser[v.UserId].RealName
+			v.Mobile = mapUser[v.UserId].Mobile
+			v.CompanyName = mapUser[v.UserId].CompanyName
+			v.SalesRealName = mapUser[v.UserId].SalesName
+		}
+	}
 	if list == nil {
 		list = make([]*cygx.CygxInterviewApply, 0)
 	}

+ 3 - 2
controllers/cygx/minutes_summary.go

@@ -811,12 +811,12 @@ func (this *MinutesSummaryController) VisibleRange() {
 		if detail.IsSendWxMsg == 0 {
 			cygxService.DoThisWeekLastWeekWxTemplateMsg(detail.Title, detail.PublishDate, detail.Abstract, req.ArticleId, 3)
 		}
-		go cygxService.UpdateResourceData(articleId, "minutessummary", "add", time.Now().Format(utils.FormatDateTime))
+		//go cygxService.UpdateResourceData(articleId, "minutessummary", "add", time.Now().Format(utils.FormatDateTime))
 	} else {
 		item.AdminId = detail.AdminId
 		item.AdminName = detail.AdminName
 		item.VisibleRange = 0
-		go cygxService.UpdateResourceData(articleId, "minutessummary", "delete", time.Now().Format(utils.FormatDateTime))
+		//go cygxService.UpdateResourceData(articleId, "minutessummary", "delete", time.Now().Format(utils.FormatDateTime))
 	}
 	err = cygx.MinutesSummaryVisibleRange(item)
 	if err != nil {
@@ -824,6 +824,7 @@ func (this *MinutesSummaryController) VisibleRange() {
 		br.ErrMsg = "操作失败,Err:" + err.Error()
 		return
 	}
+	go cygxService.UpdateMinutesSummaryResourceData(articleId) //写入首页最新  cygx_resource_data 表
 	br.Ret = 200
 	br.Success = true
 	br.Msg = "操作成功"

+ 13 - 7
controllers/cygx/morning_meeting_review.go

@@ -3,6 +3,7 @@ package cygx
 import (
 	"encoding/json"
 	"errors"
+	"fmt"
 	"github.com/rdlucklib/rdluck_tools/paging"
 	"hongze/hz_crm_api/controllers"
 	"hongze/hz_crm_api/models"
@@ -240,8 +241,9 @@ func (this *MorningMeetingController) PreserveAndPublish() {
 				return
 			}
 			for _, itemchapter := range listchapter {
-				go cygxService.UpdateResourceData(itemchapter.Id, "meetingreviewchapt", "add", time.Now().Format(utils.FormatDateTime))
-				go elastic.AddComprehensiveMeetingreviewchapt(itemchapter.Id) //Es添加晨会精华
+				//go cygxService.UpdateResourceData(itemchapter.Id, "meetingreviewchapt", "add", time.Now().Format(utils.FormatDateTime))
+				go cygxService.UpdateMeetingreviewchaptResourceData(itemchapter.Id) //写入首页最新  cygx_resource_data 表
+				go elastic.AddComprehensiveMeetingreviewchapt(itemchapter.Id)       //Es添加晨会精华
 			}
 			br.Msg = "发布成功"
 			br.Data = meetingId
@@ -400,7 +402,8 @@ func (this *MorningMeetingController) PreserveAndPublish() {
 				go services.SendWxMsgWithCygxMorningMeeting(reqList.MeetingId, item.IndustryId, item.IndustryName)
 			}
 			for _, itemchapter := range listchapter {
-				go cygxService.UpdateResourceData(itemchapter.Id, "meetingreviewchapt", "add", time.Now().Format(utils.FormatDateTime))
+				//go cygxService.UpdateResourceData(itemchapter.Id, "meetingreviewchapt", "add", time.Now().Format(utils.FormatDateTime))
+				go cygxService.UpdateMeetingreviewchaptResourceData(itemchapter.Id) //写入首页最新  cygx_resource_data 表
 			}
 			br.Msg = "发布成功"
 		}
@@ -552,9 +555,11 @@ func (this *MorningMeetingController) PublishReport() {
 			return
 		}
 		for _, item := range list {
+			fmt.Println(item.Id)
 			go services.SendWxMsgWithCygxMorningMeeting(vint, item.IndustryId, item.IndustryName)
-			go cygxService.UpdateResourceData(item.Id, "meetingreviewchapt", "add", time.Now().Format(utils.FormatDateTime))
-			go elastic.AddComprehensiveMeetingreviewchapt(item.Id) //Es添加晨会精华
+			//go cygxService.UpdateResourceData(item.Id, "meetingreviewchapt", "add", time.Now().Format(utils.FormatDateTime))
+			go cygxService.UpdateMeetingreviewchaptResourceData(item.Id) //写入首页最新  cygx_resource_data 表
+			go elastic.AddComprehensiveMeetingreviewchapt(item.Id)       //Es添加晨会精华
 		}
 	}
 
@@ -600,8 +605,9 @@ func (this *MorningMeetingController) PublishCancleReport() {
 		return
 	}
 	for _, item := range list {
-		go cygxService.UpdateResourceData(item.Id, "meetingreviewchapt", "delete", time.Now().Format(utils.FormatDateTime))
-		go elastic.DeleteComprehensiveMeetingreviewchapt(item.Id) //Es删除晨会精华
+		//go cygxService.UpdateResourceData(item.Id, "meetingreviewchapt", "delete", time.Now().Format(utils.FormatDateTime))
+		go cygxService.UpdateMeetingreviewchaptResourceData(item.Id) //写入首页最新  cygx_resource_data 表
+		go elastic.DeleteComprehensiveMeetingreviewchapt(item.Id)    //Es删除晨会精华
 	}
 	var condition string
 	var pars []interface{}

+ 5 - 3
controllers/cygx/product_interior.go

@@ -374,7 +374,8 @@ func (this *ProductInteriorController) PublishReport() {
 	} else {
 		status = 0
 		isCancel = 1
-		go cygxService.UpdateResourceData(productInteriorId, "productinterior", "delete", time.Now().Format(utils.FormatDateTime))
+		//go cygxService.UpdateResourceData(productInteriorId, "productinterior", "delete", time.Now().Format(utils.FormatDateTime))
+		go cygxService.UpdateProductInteriorResourceData(productInteriorId) //写入首页最新  cygx_resource_data 表
 	}
 	err = cygx.EditProductInteriorStatus(status, isCancel, productInteriorId)
 	if err != nil {
@@ -422,11 +423,11 @@ func (this *ProductInteriorController) VisibleRange() {
 	var visibleRange int
 	if detail.VisibleRange == 0 {
 		visibleRange = 1
-		go cygxService.UpdateResourceData(productInteriorId, "productinterior", "add", time.Now().Format(utils.FormatDateTime))
+		//go cygxService.UpdateResourceData(productInteriorId, "productinterior", "add", time.Now().Format(utils.FormatDateTime))
 		go cygxService.SendWxMsgWithCygxProductInterior(productInteriorId)
 	} else {
 		visibleRange = 0
-		go cygxService.UpdateResourceData(productInteriorId, "productinterior", "delete", time.Now().Format(utils.FormatDateTime))
+		//go cygxService.UpdateResourceData(productInteriorId, "productinterior", "delete", time.Now().Format(utils.FormatDateTime))
 	}
 
 	err = cygx.ProductInteriorVisibleRange(visibleRange, productInteriorId)
@@ -435,6 +436,7 @@ func (this *ProductInteriorController) VisibleRange() {
 		br.ErrMsg = "操作失败,Err:" + err.Error()
 		return
 	}
+	go cygxService.UpdateProductInteriorResourceData(productInteriorId) //写入首页最新  cygx_resource_data 表
 	br.Ret = 200
 	br.Success = true
 	br.Msg = "操作成功"

+ 6 - 2
controllers/cygx/report_article.go

@@ -750,6 +750,8 @@ func (this *IndustrialSubjectController) UpdateMatchTypeName() {
 		return
 	}
 	go cygxService.DoArticleOnenIdWxTemplateMsg(detailArt.ArticleId, 2)
+	go cygxService.AddCygxReportMappingCategoryGroupByArticleId(detailArt.ArticleId) // 手动修改报告归类
+	go cygxService.UpdateArticleResourceData(detailArt.ArticleId)                    //写入首页最新  cygx_resource_data 表
 	br.Ret = 200
 	br.Success = true
 	br.Msg = "修改成功"
@@ -919,9 +921,10 @@ func (this *ReportArticleController) PreserveAndPublish() {
 	//cygx.UpdateSubjecIds(subjectIds+"—"+strconv.Itoa(industrialDetail.IndustrialManagementId)+"{|2|}", industrialDetail.IndustrialManagementId, articleId)
 	if item.PublishStatus == 1 {
 		services.EsAddOrEditData(item)
-		go cygxService.UpdateResourceData(item.ArticleId, "article", "add", time.Now().Format(utils.FormatDateTime))
-
+		//go cygxService.UpdateResourceData(item.ArticleId, "article", "add", time.Now().Format(utils.FormatDateTime))
+		go cygxService.UpdateArticleResourceData(item.ArticleId) //写入首页最新  cygx_resource_data 表
 	}
+
 	// 查研观向7.4-更新产业布局时间
 	if len(industryIds) > 0 {
 		go cygxService.UpdateIndustryLayoutTime(industryIds, false)
@@ -930,6 +933,7 @@ func (this *ReportArticleController) PreserveAndPublish() {
 		//查研观向8.2.1专项调研报告模板消息推送
 		cygxService.SendWxMsgWithCygxActivitySpecialArticle(item.ArticleId)
 	}
+	go cygxService.AddCygxReportMappingCategoryGroupByArticleId(item.ArticleId) // 手动修改报告归类
 	br.Ret = 200
 	br.Success = true
 	br.Msg = "操作成功"

+ 48 - 10
controllers/cygx/report_selection.go

@@ -124,6 +124,7 @@ func (this *ReportSelectionController) PreserveAndPublish() {
 		item.IndustrialManagementId = v.IndustrialManagementId
 		item.OverviewArticleId = v.OverviewArticleId
 		item.IsNew = v.IsNew
+		item.IsShowOverviewArticle = v.IsShowOverviewArticle
 		if len(v.CompanyLabel) > 0 {
 			item.CompanyLabel = cygxService.ArticleComPanyLabelToStr(v.CompanyLabel)
 		}
@@ -168,9 +169,9 @@ func (this *ReportSelectionController) PreserveAndPublish() {
 			return
 		}
 	}
-	if req.DoType == 1 {
-		//cygxService.DoThisWeekLastWeekWxTemplateMsg(itemCrs.Title, itemCrs.PublishDate.Format(utils.FormatDateTime), itemCrs.ProductDescription, req.ArticleId, 1)
-	}
+	//if req.DoType == 1 {
+	//cygxService.DoThisWeekLastWeekWxTemplateMsg(itemCrs.Title, itemCrs.PublishDate.Format(utils.FormatDateTime), itemCrs.ProductDescription, req.ArticleId, 1)
+	//}
 	//生成音频文件
 	//articleId := req.ArticleId
 	//existMap := make(map[int]int)
@@ -199,8 +200,7 @@ func (this *ReportSelectionController) PreserveAndPublish() {
 	//	}
 	//	existMap[v.ChartPermissionId] = v.ChartPermissionId
 	//}
-	//go services.CreateVideoWhithContent(articleId, req.Title, content, "cygx_report_selection")
-
+	go cygxService.UpdateReportSelectionResourceData(req.ArticleId) //首页最新页面数据逻辑处理 V11.1.1
 	br.Ret = 200
 	br.Success = true
 	br.Msg = "操作成功"
@@ -341,11 +341,6 @@ func (this *ReportSelectionController) Detail() {
 			}
 		}
 	}
-	if err != nil {
-		br.Msg = "获取失败"
-		br.ErrMsg = "获取失败,Err:" + err.Error()
-		return
-	}
 
 	//获取关联的文章信息
 	mapArticle := make(map[int]string)
@@ -556,6 +551,7 @@ func (this *ReportSelectionController) PublishAndCancel() {
 		br.ErrMsg = "操作失败,Err:" + err.Error()
 		return
 	}
+	go cygxService.UpdateReportSelectionResourceData(articleId) //首页最新页面数据逻辑处理 V11.1.1
 	br.Ret = 200
 	br.Success = true
 	br.Msg = "操作成功"
@@ -936,6 +932,7 @@ func (this *ReportSelectionController) VisibleRange() {
 		br.ErrMsg = "操作失败,Err:" + err.Error()
 		return
 	}
+	go cygxService.UpdateReportSelectionResourceData(articleId) //首页最新页面数据逻辑处理 V11.1.1
 	br.Ret = 200
 	br.Success = true
 	br.Msg = "操作成功"
@@ -1000,6 +997,7 @@ func (this *ReportSelectionController) History() {
 				item := new(cygx.HistoryReportSelectionLogResp)
 				item.SubjectName = v2.SubjectName
 				item.IndustrialSubjectId = v2.IndustrialSubjectId
+				item.IsNew = v2.IsNew
 				item.Count = mapSubjectHistory[v2.IndustrialSubjectId]
 				resp.Count += item.Count
 				v.List = append(v.List, item)
@@ -1012,3 +1010,43 @@ func (this *ReportSelectionController) History() {
 	br.Msg = "获取成功"
 	br.Data = resp
 }
+
+// @Title  报告精选申请记录
+// @Description  报告精选申请记录接口
+// @Param   ArticleId   query   int  true       "报告Id"
+// @Success Ret=200 {object} cygx.DetailCygxReportSelectionRep
+// @router /reportSelection/tarryList [get]
+func (this *ReportSelectionController) RarryList() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	AdminUser := this.SysUser
+	if AdminUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,用户信息为空"
+		br.Ret = 408
+		return
+	}
+	articleId, _ := this.GetInt("ArticleId")
+	resp := new(cygx.CygxReportSelectionLogApplyListResp)
+	var condition string
+	var pars []interface{}
+	condition = " AND article_id = ? ORDER  BY create_time DESC  "
+	pars = append(pars, articleId)
+	list, err := cygx.GetCygxReportSelectionLogApplyRespList(condition, pars, 0, 0)
+	if err != nil {
+		br.Msg = "获取信息失败"
+		br.ErrMsg = "获取信息失败,Err:" + err.Error()
+		return
+	}
+	if len(list) == 0 {
+		list = make([]*cygx.CygxReportSelectionLogApplyResp, 0)
+	}
+	resp.List = list
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+}

+ 3 - 2
controllers/cygx/research_summary.go

@@ -1214,12 +1214,12 @@ func (this *ResearchSummaryController) VisibleRange() {
 		if detail.IsSendWxMsg == 0 {
 			cygxService.DoThisWeekLastWeekWxTemplateMsg(detail.Title, detail.PublishDate, detail.Abstract, req.ArticleId, 2)
 		}
-		go cygxService.UpdateResourceData(articleId, "researchsummary", "add", time.Now().Format(utils.FormatDateTime))
+		//go cygxService.UpdateResourceData(articleId, "researchsummary", "add", time.Now().Format(utils.FormatDateTime))
 	} else {
 		item.AdminId = detail.AdminId
 		item.AdminName = detail.AdminName
 		item.VisibleRange = 0
-		go cygxService.UpdateResourceData(articleId, "researchsummary", "delete", time.Now().Format(utils.FormatDateTime))
+		//go cygxService.UpdateResourceData(articleId, "researchsummary", "delete", time.Now().Format(utils.FormatDateTime))
 	}
 	err = cygx.ResearchSummaryVisibleRange(item)
 	if err != nil {
@@ -1227,6 +1227,7 @@ func (this *ResearchSummaryController) VisibleRange() {
 		br.ErrMsg = "操作失败,Err:" + err.Error()
 		return
 	}
+	go cygxService.UpdateResearchSummaryResourceData(articleId) //写入首页最新  cygx_resource_data 表
 	br.Ret = 200
 	br.Success = true
 	br.Msg = "操作成功"

+ 24 - 20
controllers/cygx/summary_manage.go

@@ -297,25 +297,26 @@ func (this *SummaryManage) PreserveAndPublish() {
 		services.EsAddOrEditData(item)
 	}
 
-	//同步数据到最新表
-	if req.ArticleId == 0 {
-		if item.PublishStatus == 1 {
-			go cygxService.UpdateResourceData(item.ArticleId, "article", "add", time.Now().Format(utils.FormatDateTime))
-		}
-	} else {
-		if item.PublishStatus == 1 {
-			go cygxService.UpdateResourceData(item.ArticleId, "article", "update", time.Now().Format(utils.FormatDateTime))
-		}
-		if req.DoType == 1 {
-			go cygxService.UpdateResourceData(item.ArticleId, "article", "add", time.Now().Format(utils.FormatDateTime))
-		}
-	}
+	////同步数据到最新表
+	//if req.ArticleId == 0 {
+	//	if item.PublishStatus == 1 {
+	//		go cygxService.UpdateResourceData(item.ArticleId, "article", "add", time.Now().Format(utils.FormatDateTime))
+	//	}
+	//} else {
+	//	if item.PublishStatus == 1 {
+	//		go cygxService.UpdateResourceData(item.ArticleId, "article", "update", time.Now().Format(utils.FormatDateTime))
+	//	}
+	//	if req.DoType == 1 {
+	//		go cygxService.UpdateResourceData(item.ArticleId, "article", "add", time.Now().Format(utils.FormatDateTime))
+	//	}
+	//}
 
 	if len(industryIds) > 0 {
 		go cygxService.UpdateIndustryLayoutTime(industryIds, false)       // 查研观向7.4-更新产业布局时间
 		go elastic.AddComprehensiveIndustrialSource("Yx", item.ArticleId) // 查研观向10.6 更新搜索引擎的产业资源包
 	}
-	go elastic.AddComprehensiveArticle(item.ArticleId) // ES添加文章:报告、纪要
+	go elastic.AddComprehensiveArticle(item.ArticleId)       // ES添加文章:报告、纪要
+	go cygxService.UpdateArticleResourceData(item.ArticleId) //写入首页最新  cygx_resource_data 表
 	br.Ret = 200
 	br.Success = true
 	br.Msg = "操作成功"
@@ -375,13 +376,13 @@ func (this *SummaryManage) PublishAndCancel() {
 		item.AdminId = AdminUser.AdminId
 		item.AdminName = AdminUser.RealName
 		services.EsAddOrEditData(item)
-		go cygxService.UpdateResourceData(item.ArticleId, "article", "add", time.Now().Format(utils.FormatDateTime))
+		//go cygxService.UpdateResourceData(item.ArticleId, "article", "add", time.Now().Format(utils.FormatDateTime))
 	} else {
 		item.AdminId = articleInfo.AdminId
 		item.AdminName = articleInfo.AdminName
 		item.PublishStatus = 0
 		services.EsDeleteData(indexName, strconv.Itoa(articleInfo.ArticleId))
-		go cygxService.UpdateResourceData(item.ArticleId, "article", "delete", time.Now().Format(utils.FormatDateTime))
+		//go cygxService.UpdateResourceData(item.ArticleId, "article", "delete", time.Now().Format(utils.FormatDateTime))
 	}
 	err = cygx.PublishAndCancel(item)
 	if err != nil {
@@ -403,7 +404,8 @@ func (this *SummaryManage) PublishAndCancel() {
 			go elastic.AddComprehensiveIndustrialSource("Yx", item.ArticleId) // 查研观向10.6 更新搜索引擎的产业资源包
 		}
 	}
-	go elastic.AddComprehensiveArticle(articleId) // ES添加文章:报告、纪要
+	go elastic.AddComprehensiveArticle(articleId)            // ES添加文章:报告、纪要
+	go cygxService.UpdateArticleResourceData(item.ArticleId) //写入首页最新  cygx_resource_data 表
 	br.Ret = 200
 	br.Success = true
 	br.Msg = "操作成功"
@@ -533,7 +535,8 @@ func (this *SummaryManage) Delete() {
 		br.ErrMsg = "删除信息失败,Err:" + err.Error()
 		return
 	}
-	go cygxService.UpdateResourceData(articleInfo.ArticleId, "article", "delete", time.Now().Format(utils.FormatDateTime))
+	//go cygxService.UpdateResourceData(articleInfo.ArticleId, "article", "delete", time.Now().Format(utils.FormatDateTime))
+	go cygxService.UpdateArticleResourceData(articleInfo.ArticleId) //写入首页最新  cygx_resource_data 表
 	br.Ret = 200
 	br.Success = true
 	br.Msg = "已删除"
@@ -1604,13 +1607,13 @@ func (this *SummaryManage) VisibleRange() {
 		item.AdminId = AdminUser.AdminId
 		item.AdminName = AdminUser.RealName
 		services.EsAddOrEditData(item)
-		go cygxService.UpdateResourceData(item.ArticleId, "article", "add", time.Now().Format(utils.FormatDateTime))
+		//go cygxService.UpdateResourceData(item.ArticleId, "article", "add", time.Now().Format(utils.FormatDateTime))
 	} else {
 		item.AdminId = articleInfo.AdminId
 		item.AdminName = articleInfo.AdminName
 		item.PublishStatus = 0
 		services.EsDeleteData(indexName, strconv.Itoa(articleInfo.ArticleId))
-		go cygxService.UpdateResourceData(item.ArticleId, "article", "delete", time.Now().Format(utils.FormatDateTime))
+		//go cygxService.UpdateResourceData(item.ArticleId, "article", "delete", time.Now().Format(utils.FormatDateTime))
 	}
 	err = cygx.ArticleVisibleRange(item)
 	if err != nil {
@@ -1631,6 +1634,7 @@ func (this *SummaryManage) VisibleRange() {
 			}
 		}
 	}
+	go cygxService.UpdateArticleResourceData(item.ArticleId) //写入首页最新  cygx_resource_data 表
 	br.Ret = 200
 	br.Success = true
 	br.Msg = "操作成功"

+ 1 - 1
controllers/cygx/user.go

@@ -993,7 +993,7 @@ func (this *UserController) TableDetail() {
 			return
 		}
 	} else if source == 8 {
-		condition += ` 	AND u.user_id = ? `
+		condition += ` 	AND h.user_id = ? `
 		pars = append(pars, userId)
 		total, err = cygx.GetCygxActivitySpecialTripCount(condition, pars)
 		if err != nil {

+ 505 - 34
controllers/eta_business/eta_business_menu.go

@@ -6,6 +6,11 @@ import (
 	"hongze/hz_crm_api/models"
 	"hongze/hz_crm_api/models/eta_business"
 	etaBusinessService "hongze/hz_crm_api/services/eta_business"
+	"hongze/hz_crm_api/utils"
+	"html/template"
+	"sort"
+	"strings"
+	"time"
 )
 
 // EtaBusinessMenuController ETA商家菜单
@@ -16,7 +21,8 @@ type EtaBusinessMenuController struct {
 // List
 // @Title 商家菜单列表
 // @Description 商家菜单列表
-// @Param   BusinessId	query	int	false	"商家ID"
+// @Param   BusinessId	query	int		false	"商家ID"
+// @Param   Keyword		query	string	false	"关键词: 菜单名称"
 // @Success 200 Ret=200 获取成功
 // @router /menu/list [get]
 func (this *EtaBusinessMenuController) List() {
@@ -55,54 +61,108 @@ func (this *EtaBusinessMenuController) List() {
 		return
 	}
 
+	menuCond := ``
+	menuPars := make([]interface{}, 0)
 	// 商家勾选的权限
-	businessId, _ := this.GetInt("EtaBusinessId", 0)
-	if businessId > 0 {
-		relateOb := new(eta_business.EtaBusinessMenuRelate)
-		cond := ` AND eta_business_id = ?`
-		pars := make([]interface{}, 0)
-		pars = append(pars, businessId)
-		relates, e := relateOb.GetItemsByCondition(cond, pars, []string{}, "")
-		if e != nil {
-			br.Msg = "获取失败"
-			br.ErrMsg = "获取商家菜单关联列表失败, Err: " + e.Error()
-			return
-		}
-		for _, r := range relates {
-			if r.Type == 1 {
-				resp.HalfChoiceList = append(resp.HalfChoiceList, r.MenuId)
-				continue
+	{
+		businessId, _ := this.GetInt("EtaBusinessId", 0)
+		if businessId > 0 {
+			relateOb := new(eta_business.EtaBusinessMenuRelate)
+			cond := ` AND eta_business_id = ?`
+			pars := make([]interface{}, 0)
+			pars = append(pars, businessId)
+			relates, e := relateOb.GetItemsByCondition(cond, pars, []string{}, "")
+			if e != nil {
+				br.Msg = "获取失败"
+				br.ErrMsg = "获取商家菜单关联列表失败, Err: " + e.Error()
+				return
+			}
+			for _, r := range relates {
+				if r.Type == 1 {
+					resp.HalfChoiceList = append(resp.HalfChoiceList, r.MenuId)
+					continue
+				}
+				resp.ChoiceList = append(resp.ChoiceList, r.MenuId)
 			}
-			resp.ChoiceList = append(resp.ChoiceList, r.MenuId)
+			menuCond += ` AND hidden = 0`
 		}
 	}
 
+	// 关键词
+	keyword := this.GetString("Keyword")
+	keyword = strings.TrimSpace(keyword)
+	keyword = template.HTMLEscapeString(keyword)
+
+	// 所有菜单列表
 	menuOb := new(eta_business.EtaBusinessMenu)
 	order := `sort ASC, create_time DESC, menu_id DESC`
-	list, e := menuOb.GetItemsByCondition("", make([]interface{}, 0), []string{}, order)
+	menus, e := menuOb.GetItemsByCondition(menuCond, menuPars, []string{}, order)
 	if e != nil {
 		br.Msg = "获取失败"
 		br.ErrMsg = "获取商家菜单列表失败, Err: " + e.Error()
 		return
 	}
 
+	list := make([]*eta_business.EtaBusinessMenu, 0)
+	if keyword != "" {
+		menuMap := make(map[int]*eta_business.EtaBusinessMenu)
+		parentMap := make(map[int]*eta_business.EtaBusinessMenu)
+		existMap := make(map[int]bool)
+
+		for _, m := range menus {
+			menuMap[m.MenuId] = m
+		}
+		for _, m := range menus {
+			if m.ParentId > 0 {
+				parentMap[m.MenuId] = menuMap[m.ParentId]
+			}
+		}
+
+		// 遍历菜单, 取出跟关键词匹配的菜单(层级比较深, 递归效率很低, 产品要这个需求暂时也没啥办法优化=_=!)
+		for _, m := range menus {
+			if !strings.Contains(m.Name, keyword) {
+				continue
+			}
+			if existMap[m.MenuId] {
+				continue
+			}
+			existMap[m.MenuId] = true
+			list = append(list, m)
+
+			// 取出关键词所匹配的所有父级菜单
+			if m.ParentId > 0 {
+				parents := etaBusinessService.GetMenuParentsRecursive(menus, m.ParentId)
+				for _, p := range parents {
+					if !existMap[p.MenuId] {
+						existMap[p.MenuId] = true
+						list = append(list, p)
+					}
+				}
+			}
+		}
+
+		sort.Slice(list, func(i, j int) bool {
+			return list[j].Sort > list[i].Sort
+		})
+	} else {
+		list = menus
+	}
+
 	items := make([]*eta_business.EtaBusinessMenuItem, 0)
 	for _, v := range list {
 		t := &eta_business.EtaBusinessMenuItem{
-			MenuId:       v.MenuId,
-			ParentId:     v.ParentId,
-			Name:         v.Name,
-			Sort:         v.Sort,
-			Path:         v.Path,
-			PathName:     v.PathName,
-			IconPath:     v.IconPath,
-			Component:    v.Component,
-			Hidden:       v.Hidden,
-			HiddenLayout: v.HiddenLayout,
-			Level:        v.Level,
-			MenuType:     v.MenuType,
-			ButtonCode:   v.ButtonCode,
-			Children:     make([]*eta_business.EtaBusinessMenuItem, 0),
+			MenuId:     v.MenuId,
+			ParentId:   v.ParentId,
+			Name:       v.Name,
+			Sort:       v.Sort,
+			Path:       v.Path,
+			IconPath:   v.IconPath,
+			Component:  v.Component,
+			Hidden:     v.Hidden,
+			MenuType:   v.MenuType,
+			ButtonCode: v.ButtonCode,
+			CreateTime: v.CreateTime.Format(utils.FormatDateTime),
+			Children:   make([]*eta_business.EtaBusinessMenuItem, 0),
 		}
 		items = append(items, t)
 	}
@@ -189,7 +249,418 @@ func (this *EtaBusinessMenuController) SaveRelate() {
 		return
 	}
 
-	// TODO:后续需要生成SQL脚本文件
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "操作成功"
+}
+
+// Add
+// @Title 新增菜单
+// @Description 新增菜单
+// @Param	request	body eta_business.EtaBusinessMenuAddReq true "type json string"
+// @Success 200 Ret=200 操作成功
+// @router /menu/add [post]
+func (this *EtaBusinessMenuController) Add() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+
+	// 操作权限校验
+	ok, e := etaBusinessService.CheckEtaBusinessOperateAuth(sysUser.RoleTypeCode)
+	if e != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = "操作权限校验失败, ErrMsg: " + e.Error()
+		return
+	}
+	if !ok {
+		br.Msg = "无权操作"
+		return
+	}
+
+	// 参数校验
+	var req eta_business.EtaBusinessMenuAddReq
+	if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + e.Error()
+		return
+	}
+	req.Name = strings.TrimSpace(req.Name)
+	if req.Name == "" {
+		br.Msg = "请输入名称"
+		return
+	}
+	if req.MenuType == 0 {
+		req.Path = strings.TrimSpace(req.Path)
+		if req.Path == "" {
+			br.Msg = "请输入路由地址"
+			return
+		}
+		req.Component = strings.TrimSpace(req.Component)
+		if req.Component == "" {
+			br.Msg = "请输入组件路径"
+			return
+		}
+	} else {
+		req.ButtonCode = strings.TrimSpace(req.ButtonCode)
+		if req.ButtonCode == "" {
+			br.Msg = "请输入按钮/字段ID"
+			return
+		}
+	}
+
+	// 重名校验
+	{
+		ob := new(eta_business.EtaBusinessMenu)
+		cond := ` AND parent_id = ? AND name = ?`
+		pars := make([]interface{}, 0)
+		pars = append(pars, req.ParentId, req.Name)
+		exist, e := ob.GetItemByCondition(cond, pars)
+		if e != nil && e.Error() != utils.ErrNoRow() {
+			br.Msg = "操作失败"
+			br.ErrMsg = "获取同名菜单失败, Err: " + e.Error()
+			return
+		}
+		if exist != nil {
+			br.Msg = "名称已存在"
+			return
+		}
+	}
+
+	// 新增
+	menuOb := new(eta_business.EtaBusinessMenu)
+	menuOb.ParentId = req.ParentId
+	menuOb.Name = req.Name
+	menuOb.Sort = req.Sort
+	menuOb.Path = req.Path
+	menuOb.IconPath = req.IconPath
+	menuOb.Component = req.Component
+	menuOb.Hidden = req.Hidden
+	menuOb.MenuType = req.MenuType
+	menuOb.ButtonCode = req.ButtonCode
+	menuOb.CreateTime = time.Now().Local()
+	menuOb.ModifyTime = time.Now().Local()
+	// TODO:多级菜单
+	if menuOb.ParentId > 0 {
+		menuOb.LevelPath = menuOb.Component
+	}
+	if e := menuOb.Create(); e != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = "新增菜单失败, Err: " + e.Error()
+		return
+	}
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "操作成功"
+}
+
+// Edit
+// @Title 编辑菜单
+// @Description 编辑菜单
+// @Param	request	body eta_business.EtaBusinessMenuEditReq true "type json string"
+// @Success 200 Ret=200 操作成功
+// @router /menu/edit [post]
+func (this *EtaBusinessMenuController) Edit() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+
+	// 操作权限校验
+	ok, e := etaBusinessService.CheckEtaBusinessOperateAuth(sysUser.RoleTypeCode)
+	if e != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = "操作权限校验失败, ErrMsg: " + e.Error()
+		return
+	}
+	if !ok {
+		br.Msg = "无权操作"
+		return
+	}
+
+	// 参数校验
+	var req eta_business.EtaBusinessMenuEditReq
+	if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + e.Error()
+		return
+	}
+	if req.MenuId <= 0 {
+		br.Msg = "参数有误"
+		br.ErrMsg = "参数有误, MenuId"
+		return
+	}
+	req.Name = strings.TrimSpace(req.Name)
+	if req.Name == "" {
+		br.Msg = "请输入名称"
+		return
+	}
+	if req.MenuType == 0 {
+		req.Path = strings.TrimSpace(req.Path)
+		if req.Path == "" {
+			br.Msg = "请输入路由地址"
+			return
+		}
+		req.Component = strings.TrimSpace(req.Component)
+		if req.Component == "" {
+			br.Msg = "请输入组件路径"
+			return
+		}
+	} else {
+		req.ButtonCode = strings.TrimSpace(req.ButtonCode)
+		if req.ButtonCode == "" {
+			br.Msg = "请输入按钮/字段ID"
+			return
+		}
+	}
+
+	menuOb := new(eta_business.EtaBusinessMenu)
+	item, e := menuOb.GetItemById(req.MenuId)
+	if e != nil {
+		if e.Error() == utils.ErrNoRow() {
+			br.Msg = "菜单不存在, 请刷新页面"
+			return
+		}
+		br.Msg = "操作失败"
+		br.ErrMsg = "获取菜单失败, Err: " + e.Error()
+		return
+	}
+
+	// 重名校验
+	{
+		ob := new(eta_business.EtaBusinessMenu)
+		cond := ` AND parent_id = ? AND name = ?`
+		pars := make([]interface{}, 0)
+		pars = append(pars, req.ParentId, req.Name)
+		exist, e := ob.GetItemByCondition(cond, pars)
+		if e != nil && e.Error() != utils.ErrNoRow() {
+			br.Msg = "操作失败"
+			br.ErrMsg = "获取同名菜单失败, Err: " + e.Error()
+			return
+		}
+		if exist != nil && exist.MenuId != item.MenuId {
+			br.Msg = "名称已存在"
+			return
+		}
+	}
+
+	// 更新
+	item.Name = req.Name
+	item.Sort = req.Sort
+	item.Path = req.Path
+	item.IconPath = req.IconPath
+	item.Component = req.Component
+	item.Hidden = req.Hidden
+	item.ButtonCode = req.ButtonCode
+	item.ModifyTime = time.Now().Local()
+	// TODO:多级菜单
+	cols := make([]string, 0)
+	cols = append(cols, "Name", "Sort", "Path", "IconPath", "Component", "Hidden", "ButtonCode", "ModifyTime")
+	if item.ParentId > 0 {
+		item.LevelPath = item.Component
+		cols = append(cols, "LevelPath")
+	}
+	if e := item.Update(cols); e != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = "更新菜单失败, Err: " + e.Error()
+		return
+	}
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "操作成功"
+}
+
+// Remove
+// @Title 删除菜单
+// @Description 删除菜单
+// @Param	request	body eta_business.EtaBusinessMenuRemoveReq true "type json string"
+// @Success 200 Ret=200 操作成功
+// @router /menu/remove [post]
+func (this *EtaBusinessMenuController) Remove() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+
+	// 操作权限校验
+	ok, e := etaBusinessService.CheckEtaBusinessOperateAuth(sysUser.RoleTypeCode)
+	if e != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = "操作权限校验失败, ErrMsg: " + e.Error()
+		return
+	}
+	if !ok {
+		br.Msg = "无权操作"
+		return
+	}
+
+	// 参数校验
+	var req eta_business.EtaBusinessMenuRemoveReq
+	if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + e.Error()
+		return
+	}
+	if req.MenuId <= 0 {
+		br.Msg = "参数有误"
+		br.ErrMsg = "参数有误, MenuId"
+		return
+	}
+
+	menuOb := new(eta_business.EtaBusinessMenu)
+	_, e = menuOb.GetItemById(req.MenuId)
+	if e != nil {
+		if e.Error() == utils.ErrNoRow() {
+			br.Msg = "菜单不存在, 请刷新页面"
+			return
+		}
+		br.Msg = "操作失败"
+		br.ErrMsg = "获取菜单失败, Err: " + e.Error()
+		return
+	}
+
+	// 获取所有菜单列表, 筛选出该菜单及子菜单
+	menus, e := menuOb.GetItemsByCondition(``, make([]interface{}, 0), []string{}, "")
+	if e != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = "获取菜单列表失败, Err: " + e.Error()
+		return
+	}
+	menuIds := etaBusinessService.GetMenuChildrenIdsRecursive(menus, req.MenuId)
+	menuIds = append(menuIds, req.MenuId)
+
+	// 删除菜单
+	if e = menuOb.MultiDel(menuIds); e != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = "删除菜单及子菜单失败, Err: " + e.Error()
+		return
+	}
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "操作成功"
+}
+
+// IconList
+// @Title 图标列表
+// @Description 图标列表
+// @Success 200 Ret=200 操作成功
+// @router /menu/icon/list [get]
+func (this *EtaBusinessMenuController) IconList() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+
+	iconOb := new(eta_business.EtaBusinessMenuIcon)
+	icons, e := iconOb.GetItemsByCondition(``, make([]interface{}, 0), []string{}, "")
+	if e != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取菜单列表失败, Err: " + e.Error()
+		return
+	}
+	list := make([]*eta_business.EtaBusinessMenuIconItem, 0)
+	for _, v := range icons {
+		list = append(list, &eta_business.EtaBusinessMenuIconItem{
+			IconId:   v.IconId,
+			IconPath: v.IconPath,
+		})
+	}
+
+	br.Data = list
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+}
+
+// IconAdd
+// @Title 新增图标
+// @Description 新增图标
+// @Success 200 Ret=200 操作成功
+// @router /menu/icon/add [post]
+func (this *EtaBusinessMenuController) IconAdd() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+
+	var req eta_business.EtaBusinessMenuIconAddReq
+	if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + e.Error()
+		return
+	}
+	req.IconPath = strings.TrimSpace(req.IconPath)
+	if req.IconPath == "" {
+		br.Msg = "请上传图片"
+		return
+	}
+
+	iconOb := new(eta_business.EtaBusinessMenuIcon)
+	iconOb.IconPath = req.IconPath
+	iconOb.CreateTime = time.Now().Local()
+	if e := iconOb.Create(); e != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = "新增菜单icon失败, Err: " + e.Error()
+		return
+	}
 
 	br.Ret = 200
 	br.Success = true

+ 10 - 0
controllers/eta_trial.go

@@ -129,6 +129,12 @@ func (this *ETATrialController) List() {
 			} else {
 				sortStr = "ORDER  BY login_num DESC"
 			}
+		} else if sortParam == "LastLoginDuration" {
+			if sortType == "asc" {
+				sortStr = "ORDER BY last_login_duration ASC"
+			} else {
+				sortStr = "ORDER  BY last_login_duration DESC"
+			}
 		}
 	} else {
 		sortStr = "ORDER BY create_time DESC "
@@ -146,6 +152,10 @@ func (this *ETATrialController) List() {
 		activeTime, _ := strconv.Atoi(item.ActiveTime)
 		item.ActiveTime = utils.GetDurationFormatBySecond(activeTime)
 
+		// 最近一次登录时长
+		loginDuration, _ := strconv.Atoi(item.LastLoginDuration)
+		item.LastLoginDuration = utils.GetDurationFormatBySecond(loginDuration)
+
 		//到期时间
 		modifyTime, err := time.Parse(utils.FormatDateTime, item.ModifyTime)
 		if err != nil {

+ 279 - 15
controllers/statistic_report.go

@@ -2087,6 +2087,8 @@ func IncomeListExport(this *StatisticReportController, resp response.IncomeListR
 // @Param   DataType   query   string  false       "报表类型,枚举值:`新签客户`,`续约客户`,`未续约客户`"
 // @Param   TryOutType   query   string  false       " '试用', '非试用' 非试用即为冻结/流失"
 // @Param   IsExport   query   bool  false       "是否导出excel,默认是false"
+// @Param   IsConfirm   query   int  false       "是否确认续约: -1-默认全部; 0-待确认; 1-已确认"
+// @Param   CompanyAscribeId   query   int  false       "归因ID"
 // @Success 200 {object} response.StackCompanyListResp
 // @router /stack_company_list [get]
 func (this *StatisticReportController) StackCompanyList() {
@@ -2122,6 +2124,10 @@ func (this *StatisticReportController) StackCompanyList() {
 	keyword := this.GetString("Keyword")
 
 	date := this.GetString("Date")
+
+	isConfirm, _ := this.GetInt("IsConfirm", -1)               // CRM 13.9
+	companyAscribeId, _ := this.GetInt("CompanyAscribeId", -1) // CRM 13.9
+
 	if date == "" {
 		br.Msg = "获取失败,请选择日期"
 		br.ErrMsg = "获取失败,请选择日期"
@@ -2144,7 +2150,7 @@ func (this *StatisticReportController) StackCompanyList() {
 	var resp response.StackCompanyListResp
 	//历史统计数据
 	if dateTime < todayTimeNumber {
-		tmpResp, err := getHistoryStackCompanyList(sysUser, currentIndex, pageSize, adminId, regionType, companyType, dataType, tryOutType, date, keyword)
+		tmpResp, err := getHistoryStackCompanyList(sysUser, currentIndex, pageSize, isConfirm, companyAscribeId, adminId, regionType, companyType, dataType, tryOutType, date, keyword)
 		if err != nil {
 			br.Msg = "获取失败"
 			br.ErrMsg = "获取失败,Err:" + err.Error()
@@ -2153,7 +2159,7 @@ func (this *StatisticReportController) StackCompanyList() {
 		resp = tmpResp
 	} else {
 		//获取实时统计数据(今天数据)
-		tmpResp, err := getTodayStackCompanyListV2(sysUser, currentIndex, pageSize, adminId, regionType, companyType, dataType, tryOutType, keyword)
+		tmpResp, err := getTodayStackCompanyListV2(sysUser, currentIndex, pageSize, isConfirm, companyAscribeId, adminId, regionType, companyType, dataType, tryOutType, keyword)
 		if err != nil {
 			br.Msg = "获取失败"
 			br.ErrMsg = "获取失败,Err:" + err.Error()
@@ -2249,6 +2255,14 @@ func StackCompanyListExport(this *StatisticReportController, dataType string, re
 		cellDay := titleRow.AddCell()
 		cellDay.SetStyle(style)
 		cellDay.SetValue("超出过期天数")
+
+		cellAscribeContent := titleRow.AddCell()
+		cellAscribeContent.SetStyle(style)
+		cellAscribeContent.SetValue("不续约归因")
+
+		cellContent := titleRow.AddCell()
+		cellContent.SetStyle(style)
+		cellContent.SetValue("详细原因")
 	default:
 		cellTime := titleRow.AddCell()
 		cellTime.SetStyle(style)
@@ -2294,6 +2308,18 @@ func StackCompanyListExport(this *StatisticReportController, dataType string, re
 		cellDay := dataRow.AddCell()
 		cellDay.SetStyle(style)
 		cellDay.SetValue(v.ExpireDay)
+
+		switch dataType {
+		case "未续约客户":
+			cellAscribeContent := dataRow.AddCell()
+			cellAscribeContent.SetStyle(style)
+			cellAscribeContent.SetValue(v.AscribeContent)
+
+			cellContent := dataRow.AddCell()
+			cellContent.SetStyle(style)
+			cellContent.SetValue(v.Content)
+		}
+
 	}
 	err = xlsxFile.Save(downLoadnFilePath)
 	if err != nil {
@@ -2313,7 +2339,7 @@ func StackCompanyListExport(this *StatisticReportController, dataType string, re
 }
 
 // 获取历史的数据
-func getHistoryStackCompanyList(sysUser *system.Admin, currentIndex, pageSize int, adminId, regionType, companyType, dataType, tryOutType, date, keyword string) (returnData response.StackCompanyListResp, err error) {
+func getHistoryStackCompanyList(sysUser *system.Admin, currentIndex, pageSize, isConfirm, companyAscribeId int, adminId, regionType, companyType, dataType, tryOutType, date, keyword string) (returnData response.StackCompanyListResp, err error) {
 	if date == "" {
 		err = errors.New("请选择日期")
 		return
@@ -2335,6 +2361,57 @@ func getHistoryStackCompanyList(sysUser *system.Admin, currentIndex, pageSize in
 	condition += ` AND date = ? `
 	pars = append(pars, date)
 
+	var conditionAscribRai string // 处理权益未续约客户检索列表SQL查询条件
+	var parsAscribeRai []interface{}
+	//是否确认续约 CRM 13.9
+	if isConfirm != -1 {
+		var conditionConfirm string
+		var parsConfirm []interface{}
+
+		companyConfirmList, e := company.GetCompanyNoRenewedAscribeList(conditionConfirm, parsConfirm, 0, 0)
+		if e != nil && e.Error() != utils.ErrNoRow() {
+			err = errors.New("GetCompanyNoRenewedAscribeList" + e.Error())
+			return
+		}
+		var companyIds []int
+		if len(companyConfirmList) == 0 {
+			companyIds = append(companyIds, 0) // 给一个不存在的ID
+		} else {
+			for _, v := range companyConfirmList {
+				companyIds = append(companyIds, v.CompanyId)
+			}
+		}
+		if isConfirm == 0 {
+			conditionAscribRai += ` AND c.company_id NOT IN (` + utils.GetOrmInReplace(len(companyIds)) + `)` // 待确认
+		} else {
+			conditionAscribRai += ` AND c.company_id IN (` + utils.GetOrmInReplace(len(companyIds)) + `)` // 已确认
+		}
+		parsAscribeRai = append(parsAscribeRai, companyIds)
+	}
+
+	//归因ID CRM 13.9
+	if companyAscribeId > 0 {
+		var conditionAscribe string
+		var parsAscribe []interface{}
+		conditionAscribe = "  AND  company_ascribe_id = ? "
+		parsAscribe = append(parsAscribe, companyAscribeId)
+		companyNoRenewedAscribeList, e := company.GetCompanyNoRenewedAscribeList(conditionAscribe, parsAscribe, 0, 0)
+		if e != nil && e.Error() != utils.ErrNoRow() {
+			err = errors.New("GetCompanyNoRenewedAscribeList" + e.Error())
+			return
+		}
+		var companyIds []int
+		if len(companyNoRenewedAscribeList) == 0 {
+			companyIds = append(companyIds, 0) // 给一个不存在的ID
+		} else {
+			for _, v := range companyNoRenewedAscribeList {
+				companyIds = append(companyIds, v.CompanyId)
+			}
+		}
+		conditionAscribRai += ` AND c.company_id IN (` + utils.GetOrmInReplace(len(companyIds)) + `)`
+		parsAscribeRai = append(parsAscribeRai, companyIds)
+	}
+
 	if adminId != "" {
 		condition += ` AND a.seller_id in  (` + adminId + `) `
 		//pars = append(pars, adminId)
@@ -2428,7 +2505,8 @@ func getHistoryStackCompanyList(sysUser *system.Admin, currentIndex, pageSize in
 			return
 		}
 		notRenewalCompanyTotal = total
-
+		condition1 += conditionAscribRai
+		pars1 = append(pars1, parsAscribeRai)
 		if dataType == "未续约客户" {
 			//列表页数据总和
 			//统计数据
@@ -2493,12 +2571,17 @@ func getHistoryStackCompanyList(sysUser *system.Admin, currentIndex, pageSize in
 	//moreListMap := make(map[int][]*models.StackCompanyStatisticList)
 	if dataType == "续约客户" {
 		var ids []string
+		var ascribecompanyIds []int
 		oldCompanyMap := make(map[int]*models.IncrementalList)
 		oldMoneyMap := make(map[int]float64)
 		countMap := make(map[int]int)
 		for _, item := range list {
 			ids = append(ids, strconv.Itoa(item.CompanyId))
+			ascribecompanyIds = append(ascribecompanyIds, item.CompanyId)
 		}
+		//归因标签
+		mapGetCompanyAscribeContent, mapContent := services.GetCompanyAscribeContentMap(ascribecompanyIds)
+		mapNoRenewedNote := services.GetCompanyNoRenewedNoteMap(ascribecompanyIds)
 		if len(ids) > 0 {
 			idStr := strings.Join(ids, ",")
 			lists, contractErr := models.GetLastContractMoney(idStr)
@@ -2531,6 +2614,9 @@ func getHistoryStackCompanyList(sysUser *system.Admin, currentIndex, pageSize in
 						item.PackageDifference = "维持套餐"
 					}
 				}
+				item.AscribeContent = mapGetCompanyAscribeContent[fmt.Sprint("CID_", item.CompanyId, "PID_", item.ProductId)]
+				item.Content = mapContent[fmt.Sprint("CID_", item.CompanyId, "PID_", item.ProductId)]
+				item.IsShowNoRenewedNote = mapNoRenewedNote[fmt.Sprint("CID_", item.CompanyId, "PID_", item.ProductId)]
 			}
 		}
 	}
@@ -2847,7 +2933,7 @@ func getTodayStackCompanyList(sysUser *system.Admin, currentIndex, pageSize int,
 	return resp, err
 }
 
-func getTodayStackCompanyListV2(sysUser *system.Admin, currentIndex, pageSize int, adminId, regionType, companyType, dataType, tryOutType, keyword string) (returnData response.StackCompanyListResp, err error) {
+func getTodayStackCompanyListV2(sysUser *system.Admin, currentIndex, pageSize, isConfirm, companyAscribeId int, adminId, regionType, companyType, dataType, tryOutType, keyword string) (returnData response.StackCompanyListResp, err error) {
 	var startSize int
 	if pageSize <= 0 {
 		pageSize = utils.PageSize20
@@ -2862,6 +2948,56 @@ func getTodayStackCompanyListV2(sysUser *system.Admin, currentIndex, pageSize in
 
 	today := utils.GetToday(utils.FormatDate)
 	//条件
+	var conditionAscribRai string // 处理权益未续约客户检索列表SQL查询条件
+	var parsAscribeRai []interface{}
+	//是否确认续约 CRM 13.9
+	if isConfirm != -1 {
+		var conditionConfirm string
+		var parsConfirm []interface{}
+
+		companyConfirmList, e := company.GetCompanyNoRenewedAscribeList(conditionConfirm, parsConfirm, 0, 0)
+		if e != nil && e.Error() != utils.ErrNoRow() {
+			err = errors.New("GetCompanyNoRenewedAscribeList" + e.Error())
+			return
+		}
+		var companyIds []int
+		if len(companyConfirmList) == 0 {
+			companyIds = append(companyIds, 0) // 给一个不存在的ID
+		} else {
+			for _, v := range companyConfirmList {
+				companyIds = append(companyIds, v.CompanyId)
+			}
+		}
+		if isConfirm == 0 {
+			conditionAscribRai += ` AND ( c.company_id NOT IN (` + utils.GetOrmInReplace(len(companyIds)) + `) AND  c.product_id = 2 ) ` // 待确认
+		} else {
+			conditionAscribRai += ` AND ( c.company_id IN (` + utils.GetOrmInReplace(len(companyIds)) + `)  OR  c.product_id = 2 )` // 已确认
+		}
+		parsAscribeRai = append(parsAscribeRai, companyIds)
+	}
+
+	//归因ID CRM 13.9
+	if companyAscribeId > 0 {
+		var conditionAscribe string
+		var parsAscribe []interface{}
+		conditionAscribe = "  AND  company_ascribe_id = ? "
+		parsAscribe = append(parsAscribe, companyAscribeId)
+		companyNoRenewedAscribeList, e := company.GetCompanyNoRenewedAscribeList(conditionAscribe, parsAscribe, 0, 0)
+		if e != nil && e.Error() != utils.ErrNoRow() {
+			err = errors.New("GetCompanyNoRenewedAscribeList" + e.Error())
+			return
+		}
+		var companyIds []int
+		if len(companyNoRenewedAscribeList) == 0 {
+			companyIds = append(companyIds, 0) // 给一个不存在的ID
+		} else {
+			for _, v := range companyNoRenewedAscribeList {
+				companyIds = append(companyIds, v.CompanyId)
+			}
+		}
+		conditionAscribRai += ` AND c.company_id IN (` + utils.GetOrmInReplace(len(companyIds)) + `)`
+		parsAscribeRai = append(parsAscribeRai, companyIds)
+	}
 
 	if adminId != "" {
 		condition += ` AND c.seller_id in  (` + adminId + `) `
@@ -2879,6 +3015,7 @@ func getTodayStackCompanyListV2(sysUser *system.Admin, currentIndex, pageSize in
 	if keyword != "" {
 		condition += ` and b.company_name like "%` + keyword + `%" `
 	}
+
 	switch companyType {
 	case "ficc":
 		condition += ` AND a.product_id = ? `
@@ -2971,7 +3108,8 @@ func getTodayStackCompanyListV2(sysUser *system.Admin, currentIndex, pageSize in
 			return
 		}
 		notRenewalCompanyTotal = total
-
+		condition1 += conditionAscribRai
+		pars1 = append(pars1, parsAscribeRai)
 		if dataType == "未续约客户" {
 			//页表页数据总和
 			//统计数据
@@ -3081,6 +3219,7 @@ func getTodayStackCompanyListV2(sysUser *system.Admin, currentIndex, pageSize in
 					oldCompanyMap[item.CompanyId] = item
 				}
 			}
+
 			//给list赋值
 			for _, item := range list {
 				if item.ProductName == "权益" {
@@ -3097,6 +3236,20 @@ func getTodayStackCompanyListV2(sysUser *system.Admin, currentIndex, pageSize in
 			}
 		}
 	}
+
+	var ascribecompanyIds []int
+	for _, item := range list {
+		ascribecompanyIds = append(ascribecompanyIds, item.CompanyId)
+	}
+	//归因标签
+	mapGetCompanyAscribeContent, mapContent := services.GetCompanyAscribeContentMap(ascribecompanyIds)
+	mapNoRenewedNote := services.GetCompanyNoRenewedNoteMap(ascribecompanyIds)
+	for _, item := range list {
+		item.AscribeContent = mapGetCompanyAscribeContent[fmt.Sprint("CID_", item.CompanyId, "PID_", item.ProductId)]
+		item.Content = mapContent[fmt.Sprint("CID_", item.CompanyId, "PID_", item.ProductId)]
+		item.IsShowNoRenewedNote = mapNoRenewedNote[fmt.Sprint("CID_", item.CompanyId, "PID_", item.ProductId)]
+	}
+
 	listLen := len(list)
 	for i := 0; i < listLen; i++ {
 		item := list[i]
@@ -3134,12 +3287,15 @@ func getTodayStackCompanyListV2(sysUser *system.Admin, currentIndex, pageSize in
 			EndDate:     v.EndDate,
 			RegionType:  v.RegionType,
 			//CreateTime   :v.CreateTime,
-			CreateTimeStr:     v.CreateTime,
-			ExpireDay:         v.ExpireDay,
-			RenewalReason:     v.RenewalReason,
-			RenewalTodo:       v.RenewalTodo,
-			Status:            v.Status,
-			PackageDifference: v.PackageDifference,
+			CreateTimeStr:       v.CreateTime,
+			ExpireDay:           v.ExpireDay,
+			RenewalReason:       v.RenewalReason,
+			RenewalTodo:         v.RenewalTodo,
+			Status:              v.Status,
+			PackageDifference:   v.PackageDifference,
+			AscribeContent:      v.AscribeContent,
+			IsShowNoRenewedNote: v.IsShowNoRenewedNote,
+			Content:             v.Content,
 		}
 		stackCompanyStatisticList = append(stackCompanyStatisticList, &stackCompanyStatistic)
 	}
@@ -3170,6 +3326,8 @@ func getTodayStackCompanyListV2(sysUser *system.Admin, currentIndex, pageSize in
 // @Param   DataType   query   string  false       "报表类型,枚举值:`新增试用`,`新签客户`,`续约客户`,`未续约客户`"
 // @Param   TryOutType   query   string  false       " '试用', '非试用' 非试用即为冻结/流失"
 // @Param   IsExport   query   bool  false       "是否导出excel,默认是false"
+// @Param   IsConfirm   query   int  false       "是否确认续约: -1-默认全部; 0-待确认; 1-已确认"
+// @Param   CompanyAscribeId   query   int  false       "归因ID"
 // @Success 200 {object} response.IncrementalCompanyListResp
 // @router /incremental_company_list [get]
 func (this *StatisticReportController) IncrementalCompanyList() {
@@ -3199,6 +3357,9 @@ func (this *StatisticReportController) IncrementalCompanyList() {
 
 	startDate := this.GetString("StartDate")
 	endDate := this.GetString("EndDate")
+
+	isConfirm, _ := this.GetInt("IsConfirm", -1)               // CRM 13.9
+	companyAscribeId, _ := this.GetInt("CompanyAscribeId", -1) // CRM 13.9
 	//if startDate == "" || endDate == "" {
 	//	br.Msg = "获取失败,开始日期或结束日期未传"
 	//	br.ErrMsg = "获取失败,开始日期或结束日期未传"
@@ -3248,6 +3409,64 @@ func (this *StatisticReportController) IncrementalCompanyList() {
 	if keyword != "" {
 		condition += ` and b.company_name like "%` + keyword + `%" `
 	}
+
+	var conditionAscribRai string      // 处理权益未续约客户检索列表SQL查询条件
+	var conditionAscribRaiTotal string // 处理权益未续约客户总量查询条件
+	var parsAscribeRai []interface{}
+	var parsAscribeRaiTotal []interface{} // 处理权益未续约客户总量查询条件
+	var conditionConfirm string
+	var parsConfirm []interface{}
+
+	companyConfirmList, err := company.GetCompanyNoRenewedAscribeList(conditionConfirm, parsConfirm, 0, 0)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取失败,GetCompanyNoRenewedAscribeList Err:" + err.Error()
+		return
+	}
+	var noRenewedcompanyIds []int //已经确定未续约的公司ID
+	if len(companyConfirmList) == 0 {
+		noRenewedcompanyIds = append(noRenewedcompanyIds, 0) // 给一个不存在的ID
+	} else {
+		for _, v := range companyConfirmList {
+			noRenewedcompanyIds = append(noRenewedcompanyIds, v.CompanyId)
+		}
+	}
+	//是否确认续约 CRM 13.9
+	conditionAscribRaiTotal += ` AND ( c.company_id IN (` + utils.GetOrmInReplace(len(noRenewedcompanyIds)) + `)   OR c.product_id = 1  OR  a.create_time <  '2023-01-01'  )   ` // 已确认
+	parsAscribeRaiTotal = append(parsAscribeRaiTotal, noRenewedcompanyIds)
+	if isConfirm != -1 {
+		if isConfirm == 0 {
+			conditionAscribRai += ` AND ( c.company_id NOT IN (` + utils.GetOrmInReplace(len(noRenewedcompanyIds)) + `)  AND  c.product_id = 2  AND  a.create_time >=  '2023-01-01' )  ` // 待确认
+		} else {
+			conditionAscribRai += ` AND ( c.company_id IN (` + utils.GetOrmInReplace(len(noRenewedcompanyIds)) + `)   OR c.product_id = 1  OR   a.create_time <  '2023-01-01' )    ` // 已确认
+		}
+		parsAscribeRai = append(parsAscribeRai, noRenewedcompanyIds)
+	}
+
+	//归因ID CRM 13.9
+	if companyAscribeId > 0 {
+		var conditionAscribe string
+		var parsAscribe []interface{}
+		conditionAscribe = "  AND  company_ascribe_id = ? "
+		parsAscribe = append(parsAscribe, companyAscribeId)
+		companyNoRenewedAscribeList, err := company.GetCompanyNoRenewedAscribeList(conditionAscribe, parsAscribe, 0, 0)
+		if err != nil && err.Error() != utils.ErrNoRow() {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取失败,GetCompanyNoRenewedAscribeList Err:" + err.Error()
+			return
+		}
+		var companyIds []int
+		if len(companyNoRenewedAscribeList) == 0 {
+			companyIds = append(companyIds, 0) // 给一个不存在的ID
+		} else {
+			for _, v := range companyNoRenewedAscribeList {
+				companyIds = append(companyIds, v.CompanyId)
+			}
+		}
+		conditionAscribRai += ` AND c.company_id IN (` + utils.GetOrmInReplace(len(companyIds)) + `)`
+		parsAscribeRai = append(parsAscribeRai, companyIds)
+	}
+
 	switch companyType {
 	case "ficc":
 		condition += ` AND c.product_id = ? `
@@ -3493,9 +3712,14 @@ func (this *StatisticReportController) IncrementalCompanyList() {
 		pars1 = append(pars1, startDate, tryOutEndDate)
 		condition1 += ` AND a.operation = ? `
 		pars1 = append(pars1, "try_out")
-		condition1 += ` AND c.status not in ("永续","正式")  `
-
-		total, err := models.GetIncrementalCompanyCountByOperationRecord(condition1, pars1)
+		condition1 += ` AND c.status not in ("永续","正式","关闭")  `
+
+		//未续约这里只统计已经确定的
+		notRenewalCondition := condition1
+		notRenewalPars := pars1
+		notRenewalCondition += conditionAscribRaiTotal
+		notRenewalPars = append(notRenewalPars, parsAscribeRaiTotal)
+		total, err := models.GetIncrementalCompanyCountByOperationRecord(notRenewalCondition, notRenewalPars)
 		if err != nil && err.Error() != utils.ErrNoRow() {
 			br.Msg = "获取失败"
 			br.ErrMsg = "获取失败,Err:" + err.Error()
@@ -3503,6 +3727,8 @@ func (this *StatisticReportController) IncrementalCompanyList() {
 		}
 		notRenewalCompanyTotal = total
 
+		condition1 += conditionAscribRai
+		pars1 = append(pars1, parsAscribeRai)
 		if dataType == "未续约客户" {
 			//统计数据
 			for _, v := range []string{"试用", "非试用"} {
@@ -3546,6 +3772,13 @@ func (this *StatisticReportController) IncrementalCompanyList() {
 			//	return
 			//}
 
+			//分页total单独计算
+			total, err = models.GetIncrementalCompanyProductCountByOperationRecord(condition1, pars1)
+			if err != nil && err.Error() != utils.ErrNoRow() {
+				br.Msg = "获取失败"
+				br.ErrMsg = "获取失败,Err:" + err.Error()
+				return
+			}
 			//列表页数据
 			tmpList, err := models.GetIncrementalCompanyListByOperationRecord(condition1, pars1, startSize, pageSize)
 			if err != nil {
@@ -3553,9 +3786,21 @@ func (this *StatisticReportController) IncrementalCompanyList() {
 				br.ErrMsg = "获取失败,Err:" + err.Error()
 				return
 			}
+
+			var ascribecompanyIds []int
 			for _, item := range tmpList {
 				endDateTime, _ := time.Parse(utils.FormatDateTime, item.CreateTime)
 				item.EndDate = endDateTime.Format(utils.FormatDate)
+				ascribecompanyIds = append(ascribecompanyIds, item.CompanyId)
+			}
+			//归因标签
+			mapGetCompanyAscribeContent, mapContent := services.GetCompanyAscribeContentMap(ascribecompanyIds)
+			mapNoRenewedNote := services.GetCompanyNoRenewedNoteMap(ascribecompanyIds)
+
+			for _, item := range tmpList {
+				item.AscribeContent = mapGetCompanyAscribeContent[fmt.Sprint("CID_", item.CompanyId, "PID_", item.ProductId)]
+				item.Content = mapContent[fmt.Sprint("CID_", item.CompanyId, "PID_", item.ProductId)]
+				item.IsShowNoRenewedNote = mapNoRenewedNote[fmt.Sprint("CID_", item.CompanyId, "PID_", item.ProductId)]
 			}
 			list = tmpList
 			dataTotal = total
@@ -3588,6 +3833,9 @@ func (this *StatisticReportController) IncrementalCompanyList() {
 
 	listLen := len(list)
 
+	if listLen == 0 {
+		list = make([]*models.IncrementalList, 0)
+	}
 	for i := 0; i < listLen; i++ {
 		item := list[i]
 
@@ -3780,6 +4028,14 @@ func IncrementalCompanyListExport(this *StatisticReportController, dataType stri
 		cellTime.SetValue("续约时间")
 	case "未续约客户":
 		cellTime.SetValue("最近合同到期时间")
+
+		cellAscribeContent := titleRow.AddCell()
+		cellAscribeContent.SetStyle(style)
+		cellAscribeContent.SetValue("不续约归因")
+
+		cellContent := titleRow.AddCell()
+		cellContent.SetStyle(style)
+		cellContent.SetValue("详细原因")
 	}
 
 	for _, v := range resp.List {
@@ -3820,6 +4076,14 @@ func IncrementalCompanyListExport(this *StatisticReportController, dataType stri
 			cellDataTime.SetValue(v.StartDate)
 		case "未续约客户":
 			cellDataTime.SetValue(v.EndDate)
+
+			cellAscribeContent := dataRow.AddCell()
+			cellAscribeContent.SetStyle(style)
+			cellAscribeContent.SetValue(v.AscribeContent)
+
+			cellContent := dataRow.AddCell()
+			cellContent.SetStyle(style)
+			cellContent.SetValue(v.Content)
 		}
 
 	}

+ 65 - 20
controllers/sys_admin.go

@@ -296,6 +296,7 @@ func (this *SysAdminController) ListSysuser() {
 	br.Data = resp
 }
 
+// Add
 // @Title 新增系统用户
 // @Description 新增系统用户接口
 // @Param	request	body system.SysuserAddReq true "type json string"
@@ -332,7 +333,22 @@ func (this *SysAdminController) Add() {
 		br.IsSendEmail = false
 		return
 	}
+
+	// 手机号和邮箱必填一个
+	req.Mobile = strings.TrimSpace(req.Mobile)
+	req.Email = strings.TrimSpace(req.Email)
+	if req.Mobile == "" && req.Email == "" {
+		br.Msg = "至少输入一个手机号或邮箱"
+		return
+	}
 	if req.Mobile != "" {
+		if req.TelAreaCode == "86" {
+			if !utils.ValidateMobileFormatat(req.Mobile) {
+				br.Msg = "手机号格式有误, 请检查"
+				return
+			}
+		}
+
 		mobileCount, err := system.GetSysAdminCountByMobile(req.Mobile, 0)
 		if err != nil {
 			br.Msg = "判断手机号是否存在失败"
@@ -345,7 +361,17 @@ func (this *SysAdminController) Add() {
 			return
 		}
 	}
-	//req.Mobile
+	if req.Email != "" {
+		if !utils.ValidateEmailFormatat(req.Email) {
+			br.Msg = "邮箱格式有误, 请检查"
+			return
+		}
+		_, e := system.GetSysUserByEmail(req.Email)
+		if e.Error() != utils.ErrNoRow() {
+			br.Msg = "邮箱已存在, 请重新填写"
+			return
+		}
+	}
 
 	var roleName, departmentName, groupName, teamName string
 
@@ -431,7 +457,7 @@ func (this *SysAdminController) Add() {
 		return
 	}
 	pwdStr := string(pwdByte)
-	pwdStr = strings.ToLower(pwdStr)
+	//pwdStr = strings.ToLower(pwdStr)
 	if pwdStr == "" {
 		br.Msg = "请输入密码"
 		return
@@ -507,6 +533,7 @@ func (this *SysAdminController) Add() {
 		admin.Role = "admin"
 	}
 	admin.EmployeeId = req.EmployeeId
+	admin.Email = req.Email
 
 	var authority int
 	if roleItem.RoleTypeCode == utils.ROLE_TYPE_CODE_ADMIN {
@@ -530,6 +557,7 @@ func (this *SysAdminController) Add() {
 	admin.ProvinceCode = req.ProvinceCode
 	admin.City = req.City
 	admin.CityCode = req.CityCode
+	admin.TelAreaCode = req.TelAreaCode
 	err = system.AddAdmin(admin)
 	if err != nil {
 		br.Msg = "新增失败"
@@ -630,26 +658,25 @@ func (this *SysAdminController) Edit() {
 		return
 	}
 
-	// 手机号
-	if item != nil {
-		if req.Mobile != "" && req.Mobile != item.Mobile {
-			mobileCount, err := system.GetSysAdminCountByMobile(req.Mobile, req.AdminId)
-			if err != nil {
-				br.Msg = "判断手机号是否存在失败"
-				br.ErrMsg = "判断手机号是否存在失败,Err:" + err.Error()
-				return
-			}
-			if mobileCount > 0 {
-				br.Msg = "手机号已存在,请重新填写"
-				br.IsSendEmail = false
+	// 手机号和邮箱必填一个
+	req.Mobile = strings.TrimSpace(req.Mobile)
+	req.Email = strings.TrimSpace(req.Email)
+	if req.Mobile == "" && req.Email == "" {
+		br.Msg = "至少输入一个手机号或邮箱"
+		return
+	}
+	if req.Mobile != "" {
+		if req.TelAreaCode == "86" {
+			if !utils.ValidateMobileFormatat(req.Mobile) {
+				br.Msg = "手机号格式有误, 请检查"
 				return
 			}
 		}
-	} else {
-		mobileCount, err := system.GetSysAdminCountByMobile(req.Mobile, req.AdminId)
-		if err != nil {
+
+		mobileCount, e := system.GetSysAdminCountByMobile(req.Mobile, adminInfo.AdminId)
+		if e != nil {
 			br.Msg = "判断手机号是否存在失败"
-			br.ErrMsg = "判断手机号是否存在失败,Err:" + err.Error()
+			br.ErrMsg = "判断手机号是否存在失败,Err:" + e.Error()
 			return
 		}
 		if mobileCount > 0 {
@@ -658,6 +685,22 @@ func (this *SysAdminController) Edit() {
 			return
 		}
 	}
+	if req.Email != "" {
+		if !utils.ValidateEmailFormatat(req.Email) {
+			br.Msg = "邮箱格式有误, 请检查"
+			return
+		}
+		emailUser, e := system.GetSysUserByEmail(req.Email)
+		if e != nil && e.Error() != utils.ErrNoRow() {
+			br.Msg = "操作失败"
+			br.ErrMsg = "邮箱获取用户信息失败, Err: " + e.Error()
+			return
+		}
+		if emailUser != nil && emailUser.AdminId != adminInfo.AdminId {
+			br.Msg = "邮箱已存在, 请检查"
+			return
+		}
+	}
 
 	// 角色
 	var roleName string
@@ -758,9 +801,11 @@ func (this *SysAdminController) Edit() {
 	adminInfo.City = req.City
 	adminInfo.CityCode = req.CityCode
 	adminInfo.EmployeeId = req.EmployeeId
+	adminInfo.Email = req.Email
+	adminInfo.TelAreaCode = req.TelAreaCode
 	cols := []string{
 		"AdminName", "RealName", "LastUpdatedTime", "Mobile", "RoleId", "RoleName", "Enabled", "Authority",
-		"Position", "RoleTypeCode", "Province", "ProvinceCode", "City", "CityCode", "EmployeeId",
+		"Position", "RoleTypeCode", "Province", "ProvinceCode", "City", "CityCode", "EmployeeId", "Email", "TelAreaCode",
 	}
 	if e := adminInfo.Update(cols); e != nil {
 		br.Msg = "编辑失败"
@@ -1230,7 +1275,7 @@ func (this *SysAdminController) ResetPass() {
 		return
 	}
 	pwd := string(b)
-	pwd = strings.ToLower(pwd)
+	//pwd = strings.ToLower(pwd)
 	pwd = utils.MD5(pwd)
 
 	adminInfo.Password = pwd

+ 1 - 1
controllers/sys_role.go

@@ -97,7 +97,7 @@ func (this *SysRoleController) Edit() {
 		return
 	}
 	if req.RoleName == "" {
-		br.Msg = "分组名称不能为空"
+		br.Msg = "角色名称不能为空"
 		return
 	}
 	item, err := system.GetSysRoleByName(req.RoleName)

+ 891 - 0
controllers/user_login.go

@@ -0,0 +1,891 @@
+package controllers
+
+import (
+	"encoding/base64"
+	"encoding/json"
+	"fmt"
+	"github.com/mojocn/base64Captcha"
+	"hongze/hz_crm_api/models"
+	"hongze/hz_crm_api/models/company"
+	"hongze/hz_crm_api/models/system"
+	"hongze/hz_crm_api/services"
+	"hongze/hz_crm_api/utils"
+	"image/color"
+	"strings"
+	"time"
+)
+
+// UserLoginController 登录-无需Token
+type UserLoginController struct {
+	BaseCommonController
+}
+
+// UserLoginAuthController 登录-需Token
+type UserLoginAuthController struct {
+	BaseAuthController
+}
+
+// GenerateCaptcha
+// @Title 生成图形验证码
+// @Description 生成图形验证码
+// @Success 200 Ret=200 获取成功
+// @router /get_captcha [get]
+func (this *UserLoginController) GenerateCaptcha() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+
+	//driver := base64Captcha.DefaultDriverDigit
+	// 自定义验证码样式
+	var driver base64Captcha.Driver
+	driverString := base64Captcha.DriverString{
+		Height:          60,    //高度
+		Width:           120,   //宽度
+		NoiseCount:      0,     //干扰数
+		ShowLineOptions: 2 | 4, //展示个数
+		Length:          4,     //长度
+		//Source:          "1234567890qwertyuioplkjhgfdsazxcvbnm", //验证码随机字符串来源
+		Source: "1234567890", //验证码随机字符串来源
+		BgColor: &color.RGBA{ // 背景颜色
+			R: 0,
+			G: 0,
+			B: 0,
+			A: 0,
+		},
+		Fonts: []string{"wqy-microhei.ttc"}, // 字体
+	}
+	driver = driverString.ConvertFonts()
+
+	// 生成验证码
+	store := services.CaptchaRedis{}
+	captcha := base64Captcha.NewCaptcha(driver, store)
+	id, b64s, err := captcha.Generate()
+	if err != nil {
+		br.Msg = "生成失败"
+		br.ErrMsg = "生成验证码失败, Err: " + err.Error()
+		return
+	}
+
+	type CaptchaResult struct {
+		Id         string
+		Base64Blob string
+	}
+	res := new(CaptchaResult)
+	res.Id = id
+	res.Base64Blob = b64s
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = res
+}
+
+// GetVerifyCode
+// @Title 获取短信/邮箱验证码
+// @Description 获取短信/邮箱验证码
+// @Param	request	body VerifyCodeReq true "type json string"
+// @Success 200 Ret=200 获取成功
+// @router /verify_code [post]
+func (this *UserLoginController) GetVerifyCode() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+
+	type VerifyCodeReq struct {
+		VerifyType  int    `description:"验证方式: 1-手机号; 2-邮箱"`
+		CaptchaId   string `description:"验证码ID"`
+		CaptchaCode string `description:"图形验证码"`
+		Mobile      string `description:"手机号"`
+		TelAreaCode string `description:"手机区号"`
+		Email       string `description:"邮箱"`
+		Source      int    `description:"来源:1-登录;2-异常登录校验;3-忘记密码"`
+	}
+	var req VerifyCodeReq
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+	if req.VerifyType != 1 && req.VerifyType != 2 {
+		br.Msg = "验证方式有误"
+		br.ErrMsg = "验证方式有误"
+		return
+	}
+	if req.Source != 1 && req.Source != 2 && req.Source != 3 {
+		br.Msg = "来源有误"
+		br.ErrMsg = "来源有误"
+		return
+	}
+	// 忘记密码图形校验在前一步, 这一步不再校验图形验证码
+	if req.Source != 3 {
+		if req.CaptchaId == "" || req.CaptchaCode == "" {
+			br.Msg = "请输入图形验证码"
+			return
+		}
+	}
+	if req.VerifyType == 1 {
+		if req.TelAreaCode == "" {
+			br.Msg = "请选择区号"
+			return
+		}
+		if req.Mobile == "" {
+			br.Msg = "请输入手机号"
+			return
+		}
+		if req.TelAreaCode == "86" && !utils.ValidateMobileFormatat(req.Mobile) {
+			br.Msg = "您的手机号输入有误, 请检查"
+			return
+		}
+		_, e := system.GetSysUserByMobile(req.Mobile)
+		if e != nil {
+			if e.Error() == utils.ErrNoRow() {
+				br.Msg = "您的手机号未绑定账号, 请检查"
+				return
+			}
+			br.Msg = "您的手机号未绑定账号, 请检查"
+			br.ErrMsg = "手机号获取用户失败, Err:" + e.Error()
+			return
+		}
+	}
+	if req.VerifyType == 2 {
+		if req.Email == "" {
+			br.Msg = "请输入邮箱"
+			return
+		}
+		if !utils.ValidateEmailFormatat(req.Email) {
+			br.Msg = "您的邮箱输入有误, 请检查"
+			return
+		}
+		_, e := system.GetSysUserByEmail(req.Email)
+		if e != nil {
+			if e.Error() == utils.ErrNoRow() {
+				br.Msg = "您的邮箱未绑定账号, 请检查"
+				return
+			}
+			br.Msg = "您的邮箱未绑定账号, 请检查"
+			br.ErrMsg = "邮箱获取用户失败, Err:" + e.Error()
+			return
+		}
+	}
+	if req.Source != 3 {
+		store := services.CaptchaRedis{}
+		ok := store.Verify(req.CaptchaId, req.CaptchaCode, true)
+		if !ok {
+			br.Msg = "图形验证码错误, 请重新输入"
+			return
+		}
+	}
+
+	// 限制最多60s获取一次
+	var lockKey string
+	if req.VerifyType == 1 {
+		lockKey = fmt.Sprint(utils.CaptchaCachePrefix, req.Mobile)
+	}
+	if req.VerifyType == 2 {
+		lockKey = fmt.Sprint(utils.CaptchaCachePrefix, req.Email)
+	}
+	locked := utils.Rc.SetNX(lockKey, 1, time.Minute)
+	if !locked {
+		br.Msg = "请勿频繁发送"
+		return
+	}
+
+	// 发送验证码
+	sendRes := false
+	if req.VerifyType == 1 {
+		r, e := services.SendAdminMobileVerifyCode(req.Source, req.Mobile, req.TelAreaCode)
+		if e != nil {
+			br.Msg = "发送失败"
+			br.ErrMsg = "发送短信验证码失败, Err: " + e.Error()
+			return
+		}
+		sendRes = r
+	}
+	if req.VerifyType == 2 {
+		r, e := services.SendAdminEmailVerifyCode(req.Source, req.Email)
+		if e != nil {
+			br.Msg = "发送失败"
+			br.ErrMsg = "发送邮箱验证码失败, Err: " + e.Error()
+			return
+		}
+		sendRes = r
+	}
+	if !sendRes {
+		br.Msg = "发送失败"
+		br.ErrMsg = "发送短信验证码失败"
+		return
+	}
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "发送成功"
+}
+
+// Login
+// @Title 用户登录
+// @Description 用户登录
+// @Param	request	body UserLoginReq true "type json string"
+// @Success 200 {object} models.LoginResp
+// @router /login [post]
+func (this *UserLoginController) Login() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg != "" {
+			br.IsSendEmail = false
+		}
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+
+	// 入参
+	type UserLoginReq struct {
+		LoginType  int    `description:"登录方式: 1-账号; 2-手机号; 3-邮箱"`
+		Username   string `description:"账号"`
+		Password   string `description:"密码"`
+		Mobile     string `description:"手机号"`
+		Email      string `description:"邮箱"`
+		VerifyCode string `description:"验证码"`
+	}
+	var req UserLoginReq
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+	req.Username = strings.TrimSpace(req.Username)
+	req.Mobile = strings.TrimSpace(req.Mobile)
+	if req.Mobile != "" {
+		if !utils.ValidateMobileFormatat(req.Mobile) {
+			br.Msg = "您的手机号输入有误, 请检查"
+			return
+		}
+	}
+	req.Email = strings.TrimSpace(req.Email)
+	if req.Email != "" {
+		if !utils.ValidateEmailFormatat(req.Email) {
+			br.Msg = "您的邮箱输入有误, 请检查"
+			return
+		}
+	}
+	req.VerifyCode = strings.TrimSpace(req.VerifyCode)
+	if req.LoginType != 1 && req.LoginType != 2 && req.LoginType != 3 {
+		br.Msg = "登录方式有误"
+		br.ErrMsg = fmt.Sprintf("登录方式有误, Type: %d", req.LoginType)
+		return
+	}
+
+	sysUser := new(system.Admin)
+	// 账号密码登录
+	if req.LoginType == 1 {
+		if req.Username == "" {
+			br.Msg = "请输入账号"
+			return
+		}
+		if req.Password == "" {
+			br.Msg = "请输入密码"
+			return
+		}
+
+		// 判断账号是否为异常登录, 算作异常的话就需要换另外的方式去做登录了
+		abnormalKey := fmt.Sprint(utils.CACHE_ABNORMAL_LOGIN, req.Username)
+		isAbnormal, _ := utils.Rc.RedisString(abnormalKey)
+		if isAbnormal != "" {
+			br.Ret = models.BaseRespCodeAbnormalLogin
+			br.Msg = "账号异常, 请进行手机号/邮箱校验"
+			return
+		}
+
+		// 账号密码校验
+		errPassKey := fmt.Sprint(utils.CACHE_LOGIN_ERR_PASS, req.Username)
+		accountUser, e := system.CheckSysUser(req.Username, req.Password)
+		if e != nil {
+			br.Ret = models.BaseRespCodeLoginErr
+			if e.Error() == utils.ErrNoRow() {
+				br.Msg = "登录失败, 账号或密码错误"
+				if isAbnormal != "" {
+					return
+				}
+				// 错误密码计数, 超过6次标记异常
+				if !utils.Rc.IsExist(errPassKey) {
+					_ = utils.Rc.Put(errPassKey, 1, utils.GetTodayLastSecond())
+					return
+				}
+				errNum, _ := utils.Rc.RedisInt(errPassKey)
+				errNum += 1
+				if errNum >= 6 {
+					br.Ret = models.BaseRespCodeAbnormalLogin
+					br.Msg = "账号异常, 请进行手机号/邮箱校验"
+					// 标记异常登录, 重置计数
+					_ = utils.Rc.Put(abnormalKey, "true", utils.GetTodayLastSecond())
+					_ = utils.Rc.Delete(errPassKey)
+					return
+				}
+				_ = utils.Rc.Put(errPassKey, errNum, utils.GetTodayLastSecond())
+				return
+			}
+			br.Msg = "登录失败, 账号或密码错误"
+			br.ErrMsg = "登录失败, Err:" + e.Error()
+			return
+		}
+		if accountUser.Enabled == 0 {
+			br.Msg = "您的账号已被禁用, 如需登录, 请联系管理员"
+			br.ErrMsg = fmt.Sprintf("账号已被禁用, 登录账号: %s, 账户名称: %s", accountUser.AdminName, accountUser.RealName)
+			return
+		}
+
+		// 异常登录-是否登录间隔大于60天
+		if isAbnormal == "" {
+			abnormalTime := time.Now().AddDate(0, 0, -60)
+			lastLogin, _ := time.ParseInLocation(utils.FormatDateTime, accountUser.LastLoginTime, time.Local)
+			if !lastLogin.IsZero() && lastLogin.Before(abnormalTime) {
+				br.Msg = "请进行异常登录校验"
+				br.Ret = models.BaseRespCodeAbnormalLogin
+				// 标记异常登录
+				_ = utils.Rc.Put(abnormalKey, "true", utils.GetTodayLastSecond())
+				return
+			}
+		}
+
+		sysUser = accountUser
+	}
+
+	// 手机号
+	if req.LoginType == 2 {
+		if req.Mobile == "" {
+			br.Msg = "请输入手机号"
+			return
+		}
+		if !utils.ValidateMobileFormatat(req.Mobile) {
+			br.Msg = "您的手机号输入有误, 请检查"
+			return
+		}
+		if req.VerifyCode == "" {
+			br.Msg = "请输入验证码"
+			return
+		}
+		expiredTime := time.Now().Add(utils.VerifyCodeExpireMinute * time.Minute).Format(utils.FormatDateTime)
+		recordCond := ` AND source = ? AND mobile = ? AND code = ? AND expired_time <= ?`
+		recordPars := make([]interface{}, 0)
+		recordPars = append(recordPars, system.AdminVerifyCodeRecordSourceLogin, req.Mobile, req.VerifyCode, expiredTime)
+		recordOb := new(system.AdminVerifyCodeRecord)
+		_, e := recordOb.GetItemByCondition(recordCond, recordPars)
+		if e != nil {
+			if e.Error() == utils.ErrNoRow() {
+				br.Msg = "验证码错误, 请重新输入"
+				return
+			}
+			br.Msg = "验证码错误, 请重新输入"
+			br.ErrMsg = "获取手机号登陆验证码失败, Err: " + e.Error()
+			return
+		}
+
+		mobileUser, e := system.GetSysUserByMobile(req.Mobile)
+		if e != nil {
+			if e.Error() == utils.ErrNoRow() {
+				br.Msg = "您的手机号未绑定账号, 请检查"
+				return
+			}
+			br.Msg = "您的手机号未绑定账号, 请检查"
+			br.ErrMsg = "手机号获取用户失败, Err:" + e.Error()
+			return
+		}
+		if mobileUser.Enabled == 0 {
+			br.Msg = "您的账号已被禁用, 如需登录, 请联系管理员"
+			br.ErrMsg = fmt.Sprintf("账号已被禁用, 登录手机号: %s", req.Mobile)
+			return
+		}
+		sysUser = mobileUser
+	}
+
+	// 邮箱登录
+	if req.LoginType == 3 {
+		if req.Email == "" {
+			br.Msg = "请输入邮箱"
+			return
+		}
+		if !utils.ValidateEmailFormatat(req.Email) {
+			br.Msg = "您的邮箱输入有误, 请检查"
+			return
+		}
+		if req.VerifyCode == "" {
+			br.Msg = "请输入验证码"
+			return
+		}
+		expiredTime := time.Now().Add(utils.VerifyCodeExpireMinute * time.Minute).Format(utils.FormatDateTime)
+		recordCond := ` AND source = ? AND email = ? AND code = ? AND expired_time <= ?`
+		recordPars := make([]interface{}, 0)
+		recordPars = append(recordPars, system.AdminVerifyCodeRecordSourceLogin, req.Email, req.VerifyCode, expiredTime)
+		recordOb := new(system.AdminVerifyCodeRecord)
+		_, e := recordOb.GetItemByCondition(recordCond, recordPars)
+		if e != nil {
+			if e.Error() == utils.ErrNoRow() {
+				br.Msg = "验证码错误, 请重新输入"
+				return
+			}
+			br.Msg = "验证码错误, 请重新输入"
+			br.ErrMsg = "获取手机号登陆验证码失败, Err: " + e.Error()
+			return
+		}
+
+		emailUser, e := system.GetSysUserByEmail(req.Email)
+		if e != nil {
+			if e.Error() == utils.ErrNoRow() {
+				br.Msg = "您的邮箱未绑定账号, 请检查"
+				return
+			}
+			br.Msg = "您的邮箱未绑定账号, 请检查"
+			br.ErrMsg = "邮箱获取用户失败, Err:" + e.Error()
+			return
+		}
+		if emailUser.Enabled == 0 {
+			br.Msg = "您的账号已被禁用, 如需登录, 请联系管理员"
+			br.ErrMsg = fmt.Sprintf("账号已被禁用, 登录邮箱: %s", req.Email)
+			return
+		}
+		sysUser = emailUser
+	}
+
+	// 登录成功(无论哪种方式登录), 清除异常标记
+	abnormalCache := fmt.Sprint(utils.CACHE_ABNORMAL_LOGIN, sysUser.AdminName)
+	errPassCache := fmt.Sprint(utils.CACHE_LOGIN_ERR_PASS, sysUser.AdminName)
+	_ = utils.Rc.Delete(abnormalCache)
+	_ = utils.Rc.Delete(errPassCache)
+
+	account := utils.MD5(sysUser.AdminName)
+	token := utils.GenToken(account)
+	sysSession := new(system.SysSession)
+	sysSession.UserName = req.Username
+	sysSession.SysUserId = sysUser.AdminId
+	sysSession.ExpiredTime = time.Now().AddDate(0, 0, 90)
+	sysSession.IsRemember = 0 // 均需要做过期校验
+	sysSession.CreatedTime = time.Now()
+	sysSession.LastUpdatedTime = time.Now()
+	sysSession.AccessToken = token
+	if e := system.AddSysSession(sysSession); e != nil {
+		br.Msg = "登录失败"
+		br.ErrMsg = "新增session信息失败, Err:" + e.Error()
+		return
+	}
+
+	// 修改最后登录时间
+	{
+		sysUser.LastLoginTime = time.Now().Format(utils.FormatDateTime)
+		sysUser.LastUpdatedTime = time.Now().Format(utils.FormatDateTime)
+		_ = sysUser.Update([]string{"LastLoginTime", "LastUpdatedTime"})
+	}
+
+	resp := new(system.LoginResp)
+	resp.Authorization = token
+	resp.Authorization = "authorization=" + token + "$account=" + account
+	resp.RealName = sysUser.RealName
+	resp.AdminName = sysUser.AdminName
+	resp.RoleName = sysUser.RoleName
+	resp.SysRoleTypeCode = sysUser.RoleTypeCode //系统角色编码
+	resp.RoleTypeCode = sysUser.RoleTypeCode
+	if sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_FICC_GROUP {
+		resp.RoleTypeCode = utils.ROLE_TYPE_CODE_FICC_SELLER
+	}
+	if sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_FICC_TEAM {
+		resp.RoleTypeCode = utils.ROLE_TYPE_CODE_FICC_SELLER
+	}
+	if sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_FICC_DEPARTMENT {
+		resp.RoleTypeCode = utils.ROLE_TYPE_CODE_FICC_SELLER
+	}
+	if sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_RAI_GROUP {
+		resp.RoleTypeCode = utils.ROLE_TYPE_CODE_RAI_SELLER
+	}
+	if sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_RAI_DEPARTMENT {
+		resp.RoleTypeCode = utils.ROLE_TYPE_CODE_RAI_SELLER
+	}
+	if sysUser.RoleName == utils.ROLE_NAME_FICC_DIRECTOR {
+		resp.RoleTypeCode = utils.ROLE_TYPE_CODE_FICC_SELLER
+	}
+	resp.AdminId = sysUser.AdminId
+	var productName string
+	productId := services.GetProductId(sysUser.RoleTypeCode)
+	if productId == 1 {
+		productName = utils.COMPANY_PRODUCT_FICC_NAME
+	} else if productId == 2 {
+		productName = utils.COMPANY_PRODUCT_RAI_NAME
+	} else {
+		productName = "admin"
+	}
+	resp.ProductName = productName
+	resp.Authority = sysUser.Authority
+
+	// 设置redis缓存
+	{
+		// 获取不可信的登录态,并将该登录态重置掉,不允许多次登录
+		noTrustLoginKey := fmt.Sprint(utils.CACHE_ACCESS_TOKEN_LOGIN_NO_TRUST, sysUser.AdminId)
+		noTrustLoginId, _ := utils.Rc.RedisString(noTrustLoginKey)
+		if noTrustLoginId != `` { // 如果存在不可信设备,那么将其下架
+			oldNoTrustLoginKey := fmt.Sprint(utils.CACHE_ACCESS_TOKEN_LOGIN, noTrustLoginId)
+			_ = utils.Rc.Put(oldNoTrustLoginKey, "0", 30*time.Minute)
+		}
+
+		// 如果当前是不可信设备,那么将其加入到不可信名单
+		loginKey := fmt.Sprint(utils.CACHE_ACCESS_TOKEN_LOGIN, sysSession.Id)
+		_ = utils.Rc.Put(loginKey, "1", 30*time.Minute)
+		_ = utils.Rc.Put(noTrustLoginKey, sysSession.Id, 30*time.Minute)
+	}
+
+	// 新增登录记录
+	go func() {
+		record := new(system.SysUserLoginRecord)
+		record.Uid = sysUser.AdminId
+		record.UserName = req.Username
+		record.Ip = this.Ctx.Input.IP()
+		record.Stage = "login"
+		record.CreateTime = time.Now()
+		_ = system.AddSysUserLoginRecord(record)
+	}()
+
+	br.Data = resp
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "登录成功"
+}
+
+// ForgetAccountGet
+// @Title 忘记密码-账号校验
+// @Description 忘记密码-账号校验
+// @Param	request	body ForgetAccountGetReq true "type json string"
+// @Success 200 Ret=200 获取成功
+// @router /forget/account_get [post]
+func (this *UserLoginController) ForgetAccountGet() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+
+	type ForgetAccountGetReq struct {
+		CaptchaId   string `description:"验证码ID"`
+		CaptchaCode string `description:"图形验证码"`
+		UserName    string `description:"用户名"`
+	}
+	var req ForgetAccountGetReq
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+	req.UserName = strings.TrimSpace(req.UserName)
+	if req.UserName == "" {
+		br.Msg = "请输入账号"
+		return
+	}
+	if req.CaptchaId == "" || req.CaptchaCode == "" {
+		br.Msg = "请输入图形验证码"
+		return
+	}
+	store := services.CaptchaRedis{}
+	ok := store.Verify(req.CaptchaId, req.CaptchaCode, true)
+	if !ok {
+		br.Msg = "验证码错误, 请重新输入"
+		return
+	}
+
+	sysUser, e := system.GetSysUserByAdminName(req.UserName)
+	if e != nil {
+		if e.Error() == utils.ErrNoRow() {
+			br.Msg = "用户不存在, 请检查"
+			return
+		}
+		br.Msg = "账号错误, 请重新输入"
+		br.ErrMsg = "用户名获取用户失败, Err: " + e.Error()
+		return
+	}
+
+	type ForgetAccountCheckResp struct {
+		Mobile      string `description:"手机号"`
+		Email       string `description:"邮箱"`
+		TelAreaCode string `description:"手机区号"`
+	}
+	resp := ForgetAccountCheckResp{
+		Mobile:      sysUser.Mobile,
+		Email:       sysUser.Email,
+		TelAreaCode: sysUser.TelAreaCode,
+	}
+
+	br.Data = resp
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+}
+
+// ForgetCodeVerify
+// @Title 忘记密码-验证码校验
+// @Description 忘记密码-验证码校验
+// @Param	request	body ForgetCodeVerifyReq true "type json string"
+// @Success 200 Ret=200 获取成功
+// @router /forget/code_verify [post]
+func (this *UserLoginController) ForgetCodeVerify() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+
+	type ForgetCodeVerifyReq struct {
+		FindType   int    `description:"密码找回方式: 1-手机号; 2-邮箱"`
+		VerifyCode string `description:"验证码"`
+		UserName   string `description:"用户名"`
+		Mobile     string `description:"手机号"`
+		Email      string `description:"邮箱"`
+	}
+	var req ForgetCodeVerifyReq
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+	req.UserName = strings.TrimSpace(req.UserName)
+	if req.UserName == "" {
+		br.Msg = "请输入账号"
+		return
+	}
+	if req.VerifyCode == "" {
+		br.Msg = "请输入验证码"
+		return
+	}
+
+	// 手机号找回
+	var verifyRes bool
+	if req.FindType == 1 {
+		req.Mobile = strings.TrimSpace(req.Mobile)
+		if req.Mobile == "" {
+			br.Msg = "请输入手机号"
+			return
+		}
+		if !utils.ValidateMobileFormatat(req.Mobile) {
+			br.Msg = "您的手机号输入有误, 请检查"
+			return
+		}
+		expiredTime := time.Now().Add(utils.VerifyCodeExpireMinute * time.Minute).Format(utils.FormatDateTime)
+		recordCond := ` AND source = ? AND mobile = ? AND code = ? AND expired_time <= ?`
+		recordPars := make([]interface{}, 0)
+		recordPars = append(recordPars, system.AdminVerifyCodeRecordSourceForget, req.Mobile, req.VerifyCode, expiredTime)
+		recordOb := new(system.AdminVerifyCodeRecord)
+		_, e := recordOb.GetItemByCondition(recordCond, recordPars)
+		if e != nil {
+			if e.Error() == utils.ErrNoRow() {
+				br.Msg = "验证码错误, 请重新输入"
+				return
+			}
+			br.Msg = "验证码错误, 请重新输入"
+			br.ErrMsg = "获取手机号登陆验证码失败, Err: " + e.Error()
+			return
+		}
+
+		verifyRes = true
+	}
+
+	// 邮箱找回
+	if req.FindType == 2 {
+		req.Email = strings.TrimSpace(req.Email)
+		if req.Email == "" {
+			br.Msg = "请输入邮箱"
+			return
+		}
+		if !utils.ValidateEmailFormatat(req.Email) {
+			br.Msg = "您的邮箱输入有误, 请检查"
+			return
+		}
+		expiredTime := time.Now().Add(utils.VerifyCodeExpireMinute * time.Minute).Format(utils.FormatDateTime)
+		recordCond := ` AND source = ? AND email = ? AND code = ? AND expired_time <= ?`
+		recordPars := make([]interface{}, 0)
+		recordPars = append(recordPars, system.AdminVerifyCodeRecordSourceForget, req.Email, req.VerifyCode, expiredTime)
+		recordOb := new(system.AdminVerifyCodeRecord)
+		_, e := recordOb.GetItemByCondition(recordCond, recordPars)
+		if e != nil {
+			if e.Error() == utils.ErrNoRow() {
+				br.Msg = "验证码错误, 请重新输入"
+				return
+			}
+			br.Msg = "验证码错误, 请重新输入"
+			br.ErrMsg = "获取手机号登陆验证码失败, Err: " + e.Error()
+			return
+		}
+
+		verifyRes = true
+	}
+
+	if verifyRes {
+		successKey := fmt.Sprint(utils.CACHE_FIND_PASS_VERIFY, req.UserName)
+		_ = utils.Rc.Put(successKey, "true", utils.GetTodayLastSecond())
+	}
+
+	br.Data = verifyRes
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "操作成功"
+}
+
+// ForgetResetPass
+// @Title 忘记密码-重置密码
+// @Description 忘记密码-重置密码
+// @Param	request	body ForgetResetPassReq true "type json string"
+// @Success 200 Ret=200 获取成功
+// @router /forget/reset_pass [post]
+func (this *UserLoginController) ForgetResetPass() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+
+	type ForgetResetPassReq struct {
+		UserName   string `description:"用户名"`
+		Password   string `description:"密码"`
+		RePassword string `description:"重复密码"`
+	}
+	var req ForgetResetPassReq
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+	req.UserName = strings.TrimSpace(req.UserName)
+	if req.UserName == "" {
+		br.Msg = "请输入账号"
+		return
+	}
+	req.Password = strings.TrimSpace(req.Password)
+	if req.Password == "" {
+		br.Msg = "请输入新密码"
+		return
+	}
+	req.RePassword = strings.TrimSpace(req.RePassword)
+	if req.RePassword == "" {
+		br.Msg = "请确认新密码"
+		return
+	}
+	if req.Password != req.RePassword {
+		br.Msg = "两次密码输入不一致, 请检查"
+		return
+	}
+
+	// 接上一步-验证码校验成功后才允许修改
+	successKey := fmt.Sprint(utils.CACHE_FIND_PASS_VERIFY, req.UserName)
+	verifyOk, _ := utils.Rc.RedisString(successKey)
+	if verifyOk != "true" {
+		br.Msg = "验证码校验失效, 请重新验证"
+		br.ErrMsg = "重置密码异常, 验证码校验已失效"
+		return
+	}
+
+	sysUser, e := system.GetSysAdminByName(req.UserName)
+	if e != nil {
+		if e.Error() == utils.ErrNoRow() {
+			br.Msg = "用户不存在, 请检查"
+			return
+		}
+		br.Msg = "操作失败"
+		br.ErrMsg = "密码找回获取用户失败, Err:" + e.Error()
+		return
+	}
+
+	b, e := base64.StdEncoding.DecodeString(req.Password)
+	if e != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = "解析密码失败, Err:" + e.Error()
+		return
+	}
+	pwd := string(b)
+	pwd = utils.MD5(pwd)
+
+	sysUser.Password = pwd
+	sysUser.LastUpdatedPasswordTime = time.Now().Format(utils.FormatDateTime)
+	// 重置密码后更新一下登录时间, 不然账号密码登录如果超过60天还会被异常校验再校验一次, 影响体验
+	sysUser.LastLoginTime = time.Now().Format(utils.FormatDateTime)
+	sysUser.LastUpdatedTime = time.Now().Format(utils.FormatDateTime)
+	if e = sysUser.Update([]string{"Password", "LastUpdatedPasswordTime", "LastLoginTime", "LastUpdatedTime"}); e != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = "更新密码失败, Err: " + e.Error()
+		return
+	}
+
+	// 如果有异常标记也清除掉
+	abnormalKey := fmt.Sprint(utils.CACHE_ABNORMAL_LOGIN, req.UserName)
+	_ = utils.Rc.Delete(abnormalKey)
+	_ = utils.Rc.Delete(successKey)
+
+	// 同步ETA用户缓存
+	var syncData system.SyncAdminData
+	syncData.Source = utils.SOURCE_CRM_FLAG
+	syncData.AdminName = sysUser.AdminName
+	_ = utils.Rc.LPush(utils.CACHE_SYNC_ADMIN, syncData)
+
+	br.Data = true
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "操作成功"
+}
+
+// AreaCodeList
+// @Title 手机号区号列表
+// @Description 手机号区号列表
+// @Success 200 Ret=200 获取成功
+// @router /area_code/list [get]
+func (this *UserLoginController) AreaCodeList() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+
+	type AreaCodeListResp struct {
+		Name  string `description:"地区"`
+		Value string `description:"区号"`
+	}
+	resp := make([]AreaCodeListResp, 0)
+	confAuth, e := company.GetConfigDetailByCode(company.ConfAreaCodeListKey)
+	if e != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取手机号区号配置失败, Err: " + e.Error()
+		return
+	}
+	if confAuth.ConfigValue == "" {
+		br.Msg = "获取失败"
+		br.ErrMsg = "手机号区号配置为空"
+		return
+	}
+	if e := json.Unmarshal([]byte(confAuth.ConfigValue), &resp); e != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "手机号区号配置有误"
+		return
+	}
+
+	br.Data = resp
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+}

+ 6 - 3
controllers/yb/apply_record.go

@@ -318,7 +318,7 @@ func (this *ApplyRecordController) UserApplyList() {
 		pars = append(pars, reqKeyword, reqKeyword, reqKeyword, reqKeyword, reqKeyword)
 	}
 	if markGroup != "" {
-		condition += `AND y.mark_group = `+"'"+markGroup+"'"
+		condition += `AND (y.mark_group = `+"'"+markGroup+"'"+ ` OR a.mark_group = `+"'"+markGroup+"')"
 	}
 	if startDate != "" {
 		startDate += " 00:00:00"
@@ -533,7 +533,7 @@ func (this *ApplyRecordController) ApplyExport() {
 	}()
 	reqKeyword := this.GetString("KeyWord")
 	reqState := this.GetString("States")
-
+	markGroup := this.GetString("MarkGroup")
 	sysUser := this.SysUser
 	if sysUser == nil {
 		br.Msg = "请登录"
@@ -580,6 +580,9 @@ func (this *ApplyRecordController) ApplyExport() {
 			condition += " AND y.apply_record_id is null"
 		}
 	}
+	if markGroup != "" {
+		condition += `AND (y.mark_group = `+"'"+markGroup+"'"+ ` OR a.mark_group = `+"'"+markGroup+"')"
+	}
 	startTime := "2022-01-01"
 	list, err := yb.GetApplyRecordListV2Export(condition, pars, startTime)
 	if err != nil {
@@ -954,7 +957,7 @@ func (this *ApplyRecordController) MarkGroup() {
 		br.ErrMsg = "参数解析失败,Err:" + err.Error()
 		return
 	}
-	if req.ApplyRecordId <= 0 && req.GroupName != "" && req.UserId != 0 {
+	if req.GroupName == "" || req.UserId == 0 {
 		br.Msg = "申请记录ID或者分组名异常"
 		br.ErrMsg = "申请记录ID或者分组名异常"
 		return

+ 150 - 1
controllers/yb/product_census.go

@@ -1,12 +1,14 @@
 package yb
 
 import (
+	"fmt"
 	"github.com/rdlucklib/rdluck_tools/paging"
 	"hongze/hz_crm_api/controllers"
 	"hongze/hz_crm_api/models"
 	"hongze/hz_crm_api/models/yb"
 	"hongze/hz_crm_api/models/yb/response"
 	"hongze/hz_crm_api/utils"
+	"sync"
 )
 
 type ProductCensusController struct {
@@ -83,7 +85,7 @@ func (this *ProductCensusController) UserVisitCount() {
 // @Title 用户阅读统计详情
 // @Description 用户阅读统计详情
 // @Param   UserId			query  int  true	"用户ID"
-// @Param   ProductType		query  int  true	"产品类型:1-语音播报 2-视频社区 3-问答社区"
+// @Param   ProductType		query  int  true	"产品类型:1-语音播报 2-视频社区 3-问答社区 99-全部"
 // @Param   ProductId		query  int  false	"产品ID:仅语音播报传该参数"
 // @Param   ClickSort		query  int  false	"点击量排序:1-升序 2-降序"
 // @Param   PageSize		query  int  false	"页码"
@@ -205,6 +207,7 @@ func (this *ProductCensusController) UserVisitCountDetail() {
 			})
 		}
 	}
+
 	// 问答社区
 	if productType == 3 {
 		t, list, e := yb.GetCommunityQuestionVisitCountByUserId(userId, startSize, pageSize, orderRule)
@@ -240,6 +243,152 @@ func (this *ProductCensusController) UserVisitCountDetail() {
 		}
 	}
 
+	// 全部
+	if productType == 99 {
+		listTotal, list, e := yb.GetUserAllYbProductVisitCountPageList(userId, startSize, pageSize, orderRule)
+		if e != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取用户所有产品点击量失败, Err: " + e.Error()
+			return
+		}
+		total = listTotal
+
+		sectionIds := make([]int, 0)
+		videoIds := make([]int, 0)
+		rsVideoIds := make([]int, 0)
+		questionIds := make([]int, 0)
+
+		for _, v := range list {
+			// 语音播报-取出板块ID
+			if v.ProductType == 1 && v.SectionId > 0 && !utils.InArrayByInt(sectionIds, v.SectionId) {
+				sectionIds = append(sectionIds, v.SectionId)
+			}
+			// 视频社区-取出视频ID
+			if v.ProductType == 2 && v.TitleId > 0 {
+				if v.VideoType == 1 && !utils.InArrayByInt(videoIds, v.TitleId) {
+					videoIds = append(videoIds, v.TitleId)
+				}
+				if v.VideoType == 2 && !utils.InArrayByInt(rsVideoIds, v.TitleId) {
+					rsVideoIds = append(rsVideoIds, v.TitleId)
+				}
+			}
+			// 问答社区-取出问题ID
+			if v.ProductType == 3 && v.TitleId > 0 && !utils.InArrayByInt(questionIds, v.TitleId) {
+				questionIds = append(questionIds, v.TitleId)
+			}
+		}
+
+		var sectionErr, videoErr, questionErr error
+		wg := sync.WaitGroup{}
+		wg.Add(3)
+
+		// 板块名称map
+		sectionNameMap := make(map[int]string, 0)
+		go func() {
+			defer func() {
+				wg.Done()
+			}()
+
+			sectionList, e := yb.GetVoiceSectionByIds(sectionIds)
+			if e != nil {
+				sectionErr = fmt.Errorf("获取语音播报板块列表失败, Err: %s", e.Error())
+				return
+			}
+			for _, v := range sectionList {
+				sectionNameMap[v.SectionId] = v.SectionName
+			}
+		}()
+
+		// 视频社区标题map
+		videoTitleMap := make(map[int]string, 0)
+		rsVideoTitleMap := make(map[int]string, 0)
+		go func() {
+			defer func() {
+				wg.Done()
+			}()
+
+			videoList, e := yb.GetCommunityVideoListByIds(videoIds)
+			if e != nil {
+				videoErr = fmt.Errorf("获取视频社区列表失败, Err: %s", e.Error())
+				return
+			}
+			for _, v := range videoList {
+				videoTitleMap[v.CommunityVideoId] = v.Title
+			}
+
+			rsVideoList, e := yb.GetRoadVideoListByIds(rsVideoIds)
+			if e != nil {
+				videoErr = fmt.Errorf("获取路演视频列表失败, Err: %s", e.Error())
+				return
+			}
+			for _, v := range rsVideoList {
+				rsVideoTitleMap[v.RoadVideoId] = v.Title
+			}
+		}()
+
+		// 问答社区标题map
+		questionTitleMap := make(map[int]string, 0)
+		go func() {
+			defer func() {
+				wg.Done()
+			}()
+
+			questionList, e := yb.GetQuestionListByIds(questionIds)
+			if e != nil {
+				questionErr = fmt.Errorf("获取问答列表失败, Err: %s", e.Error())
+				return
+			}
+			for _, v := range questionList {
+				questionTitleMap[v.CommunityQuestionId] = v.QuestionContent
+			}
+		}()
+
+		wg.Wait()
+		if sectionErr != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = sectionErr.Error()
+			return
+		}
+		if videoErr != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = videoErr.Error()
+			return
+		}
+		if questionErr != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = questionErr.Error()
+			return
+		}
+
+		// 填充产品名/标题
+		for _, v := range list {
+			d := new(response.ProductCensusUserVisitCountDetail)
+			d.VisitCount = v.VisitCount
+			d.Source = v.NewSource
+			d.RecentTime = v.RecentTime
+			if v.ProductType == 1 {
+				d.ProductName = sectionNameMap[v.SectionId]
+				d.Title = v.Title
+			}
+			if v.ProductType == 2 {
+				if v.VideoType == 1 {
+					d.ProductName = "5分钟小视频"
+					d.Title = videoTitleMap[v.TitleId]
+				}
+				if v.VideoType == 2 {
+					d.ProductName = "线上路演"
+					d.Title = rsVideoTitleMap[v.TitleId]
+				}
+			}
+			if v.ProductType == 3 {
+				d.ProductName = "问答社区"
+				d.Title = questionTitleMap[v.TitleId]
+			}
+
+			respList = append(respList, d)
+		}
+	}
+
 	page := paging.GetPaging(currentIndex, pageSize, total)
 	resp := response.ProductCensusUserVisitCountDetailResp{
 		List:   respList,

+ 3 - 3
go.mod

@@ -22,6 +22,7 @@ require (
 	github.com/gonum/stat v0.0.0-20181125101827-41a0da705a5b
 	github.com/gorilla/websocket v1.5.0
 	github.com/kgiannakakis/mp3duration v0.0.0-20191013070830-d834f8d5ed53
+	github.com/mojocn/base64Captcha v1.3.5
 	github.com/mozillazg/go-pinyin v0.19.0
 	github.com/nosixtools/solarlunar v0.0.0-20211112060703-1b6dea7b4a19
 	github.com/olivere/elastic/v7 v7.0.30
@@ -31,7 +32,6 @@ require (
 	github.com/tealeg/xlsx v1.0.5
 	github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.541
 	github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ses v1.0.541
-	github.com/wenzhenxi/gorsa v0.0.0-20210524035706-528c7050d703
 	github.com/xuri/excelize/v2 v2.6.1
 	github.com/yidane/formula v0.0.0-20210902154546-0782e1736717
 	gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df
@@ -53,7 +53,6 @@ require (
 	github.com/aliyun/credentials-go v1.1.2 // indirect
 	github.com/andybalholm/cascadia v1.3.2 // indirect
 	github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20211218165449-dd623ecc2f02 // indirect
-	github.com/axgle/mahonia v0.0.0-20180208002826-3358181d7394 // indirect
 	github.com/baiyubin/aliyun-sts-go-sdk v0.0.0-20180326062324-cfa1a18b161f // indirect
 	github.com/beorn7/perks v1.0.1 // indirect
 	github.com/bradfitz/gomemcache v0.0.0-20220106215444-fb4bf637b56d // indirect
@@ -64,6 +63,7 @@ require (
 	github.com/fsnotify/fsnotify v1.6.0 // indirect
 	github.com/garyburd/redigo v1.6.3 // indirect
 	github.com/go-redis/redis/v8 v8.11.6-0.20220405070650-99c79f7041fc // indirect
+	github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect
 	github.com/golang/protobuf v1.5.2 // indirect
 	github.com/gonum/blas v0.0.0-20181208220705-f22b278b28ac // indirect
 	github.com/gonum/floats v0.0.0-20181209220543-c233463c7e82 // indirect
@@ -93,7 +93,6 @@ require (
 	github.com/shiena/ansicolor v0.0.0-20200904210342-c7312218db18 // indirect
 	github.com/sirupsen/logrus v1.9.0 // indirect
 	github.com/spf13/cast v1.5.0 // indirect
-	github.com/stevenyao/go-opencc v0.0.0-20161014062826-cc376a51b65e // indirect
 	github.com/stretchr/testify v1.8.1 // indirect
 	github.com/tidwall/gjson v1.14.1 // indirect
 	github.com/tidwall/match v1.1.1 // indirect
@@ -102,6 +101,7 @@ require (
 	github.com/xuri/efp v0.0.0-20220603152613-6918739fd470 // indirect
 	github.com/xuri/nfp v0.0.0-20220409054826-5e722a1d9e22 // indirect
 	golang.org/x/crypto v0.5.0 // indirect
+	golang.org/x/image v0.0.0-20220413100746-70e8d0d3baa9 // indirect
 	golang.org/x/net v0.9.0 // indirect
 	golang.org/x/sys v0.7.0 // indirect
 	golang.org/x/text v0.9.0 // indirect

+ 5 - 166
go.sum

@@ -5,27 +5,18 @@ cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT
 cloud.google.com/go v0.37.4/go.mod h1:NHPJ89PdicEuT9hdPXMROBD91xc5uRDxsMtSB16k7hw=
 cloud.google.com/go v0.104.0 h1:gSmWO7DY1vOm0MVU6DNXM11BWHHsTUmsC5cv1fuW5X8=
 cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA=
-cloud.google.com/go/compute v1.7.0 h1:v/k9Eueb8aAJ0vZuxKMrgm6kPhCLZU9HxFU+AFDs9Uk=
-cloud.google.com/go/iam v0.3.0 h1:exkAomrVUuzx9kWFI1wm3KI0uoDeUFPB4kKGzx6x+Gc=
-cloud.google.com/go/storage v1.23.0 h1:wWRIaDURQA8xxHguFCshYepGlrWIrbBnAmc7wfg07qY=
-github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
 github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
 github.com/Knetic/govaluate v3.0.0+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0=
-github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible h1:1G1pk05UrOh0NlF1oeaaix1x8XzrfjIDK47TY0Zehcw=
 github.com/PuerkitoBio/goquery v1.8.0 h1:PJTF7AmFCFKk1N6V6jmKfrNH9tV5pNE6lZMkG0gta/U=
 github.com/PuerkitoBio/goquery v1.8.0/go.mod h1:ypIiRMtY7COPGk+I/YbZLbxsxn9g5ejnI2HSMtkjZvI=
 github.com/SebastiaanKlippert/go-wkhtmltopdf v1.7.2 h1:LORAatv6KuKheYq8HXehiwx3f/VGuzJBNSydUDQ98EM=
 github.com/SebastiaanKlippert/go-wkhtmltopdf v1.7.2/go.mod h1:TY8r0gmwEL1c5Lbd66NgQCkL4ZjGDJCMVqvbbFvUx20=
-github.com/Shopify/sarama v1.19.0 h1:9oksLxC6uxVPHPVYUmq6xhr1BOF/hHobWH2UzO67z1s=
 github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo=
-github.com/Shopify/toxiproxy v2.1.4+incompatible h1:TKdv8HiTLgE5wdJuEML90aBgNWsokNbMijUGhmcoBJc=
 github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI=
 github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
-github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 h1:JYp7IbQjafoB+tBA3gMyHYHrpOtNuDiK/uB5uXxq5wM=
 github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
 github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
 github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
-github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d h1:UQZhZ2O0vMHr2cI+DC1Mbh0TJxzA3RcLoMsFw+aXw7E=
 github.com/alibabacloud-go/alibabacloud-gateway-spi v0.0.4 h1:iC9YFYKDGEy3n/FtqJnOkZsene9olVspKmkX5A2YBEo=
 github.com/alibabacloud-go/alibabacloud-gateway-spi v0.0.4/go.mod h1:sCavSAvdzOjul4cEqeVtvlSaSScfNsTQ+46HwlTL1hc=
 github.com/alibabacloud-go/alimt-20181012/v2 v2.0.0 h1:RZF3WXYiPB/m1FiZS51udLbpAvg0urYi1wAfB18kiUQ=
@@ -72,9 +63,7 @@ github.com/alibabacloud-go/tea-utils/v2 v2.0.1/go.mod h1:U5MTY10WwlquGPS34DOeomU
 github.com/alibabacloud-go/tea-xml v1.1.1/go.mod h1:Rq08vgCcCAjHyRi/M7xlHKUykZCEtyBy9+DPF6GgEu8=
 github.com/alibabacloud-go/tea-xml v1.1.2 h1:oLxa7JUXm2EDFzMg+7oRsYc+kutgCVwm+bZlhhmvW5M=
 github.com/alibabacloud-go/tea-xml v1.1.2/go.mod h1:Rq08vgCcCAjHyRi/M7xlHKUykZCEtyBy9+DPF6GgEu8=
-github.com/alicebob/gopher-json v0.0.0-20180125190556-5a6b3ba71ee6 h1:45bxf7AZMwWcqkLzDAQugVEwedisr5nRJ1r+7LYnv0U=
 github.com/alicebob/gopher-json v0.0.0-20180125190556-5a6b3ba71ee6/go.mod h1:SGnFV6hVsYE877CKEZ6tDNTjaSXYUk6QqoIK6PrAtcc=
-github.com/alicebob/miniredis v2.5.0+incompatible h1:yBHoLpsyjupjz3NL3MhKMVkR41j82Yjf3KFv7ApYzUI=
 github.com/alicebob/miniredis v2.5.0+incompatible/go.mod h1:8HZjEj4yU0dwhYHky+DxYx+6BMjkBbe5ONFIF1MXffk=
 github.com/aliyun/alibaba-cloud-sdk-go v1.61.1656 h1:YTWW7mBjwviuRvqiEpqaAj0AyVPj9AoJmQGCb5lXYUc=
 github.com/aliyun/alibaba-cloud-sdk-go v1.61.1656/go.mod h1:RcDobYh8k5VP6TNybz9m++gL3ijVI5wueVr0EM10VsU=
@@ -82,29 +71,21 @@ github.com/aliyun/aliyun-oss-go-sdk v2.2.0+incompatible h1:ht2+VfbXtNLGhCsnTMc6/
 github.com/aliyun/aliyun-oss-go-sdk v2.2.0+incompatible/go.mod h1:T/Aws4fEfogEE9v+HPhhw+CntffsBHJ8nXQCwKr0/g8=
 github.com/aliyun/credentials-go v1.1.2 h1:qU1vwGIBb3UJ8BwunHDRFtAhS6jnQLnde/yk0+Ih2GY=
 github.com/aliyun/credentials-go v1.1.2/go.mod h1:ozcZaMR5kLM7pwtCMEpVmQ242suV6qTJya2bDq4X1Tw=
-github.com/andybalholm/cascadia v1.3.1 h1:nhxRkql1kdYCc8Snf7D5/D3spOX+dBgjA6u8x004T2c=
 github.com/andybalholm/cascadia v1.3.1/go.mod h1:R4bJ1UQfqADjvDa4P6HZHLh/3OxWWEqc0Sk8XGwHqvA=
 github.com/andybalholm/cascadia v1.3.2 h1:3Xi6Dw5lHF15JtdcmAHD3i1+T8plmv7BQ/nsViSLyss=
 github.com/andybalholm/cascadia v1.3.2/go.mod h1:7gtRlve5FxPPgIgX36uWBX58OdBsSS6lUvCFb+h7KvU=
 github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20211218165449-dd623ecc2f02 h1:o2oaBQGTzO+xNh12e7xWkphNe7H2DTiWv1ml9a2P9PQ=
 github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20211218165449-dd623ecc2f02/go.mod h1:F7bn7fEU90QkQ3tnmaTx3LTKLEDqnwWODIYppRQ5hnY=
-github.com/apache/thrift v0.12.0 h1:pODnxUFNcjP9UTLZGTdeh+j16A8lJbRvD3rOtrk/7bs=
 github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ=
-github.com/astaxie/beego v1.12.3 h1:SAQkdD2ePye+v8Gn1r4X6IKZM1wd28EyUOVQ3PDSOOQ=
 github.com/astaxie/beego v1.12.3/go.mod h1:p3qIm0Ryx7zeBHLljmd7omloyca1s4yu1a8kM1FkpIA=
-github.com/aws/aws-sdk-go v1.42.23 h1:V0V5hqMEyVelgpu1e4gMPVCJ+KhmscdNxP/NWP1iCOA=
 github.com/aws/aws-sdk-go v1.42.23/go.mod h1:gyRszuZ/icHmHAVE4gc/r+cfCmhA1AD+vqfWbgI+eHs=
-github.com/axgle/mahonia v0.0.0-20180208002826-3358181d7394 h1:OYA+5W64v3OgClL+IrOD63t4i/RW7RqrAVl9LTZ9UqQ=
-github.com/axgle/mahonia v0.0.0-20180208002826-3358181d7394/go.mod h1:Q8n74mJTIgjX4RBBcHnJ05h//6/k6foqmgE45jTQtxg=
 github.com/baiyubin/aliyun-sts-go-sdk v0.0.0-20180326062324-cfa1a18b161f h1:ZNv7On9kyUzm7fvRZumSyy/IUiSC7AzL0I1jKKtwooA=
 github.com/baiyubin/aliyun-sts-go-sdk v0.0.0-20180326062324-cfa1a18b161f/go.mod h1:AuiFmCCPBSrqvVMvuqFuk0qogytodnVFVSN5CeJB8Gc=
 github.com/beego/bee/v2 v2.0.4 h1:nEjPwxJ8D+cr54eWChJGoGRH7bJ7OQwbhx8rU0OQf7E=
 github.com/beego/bee/v2 v2.0.4/go.mod h1:wq0YrEmPcdNfDNpaUgiTkaW9zso7M8n0HCCShEBOzM0=
 github.com/beego/beego/v2 v2.0.7 h1:9KNnUM40tn3pbCOFfe6SJ1oOL0oTi/oBS/C/wCEdAXA=
 github.com/beego/beego/v2 v2.0.7/go.mod h1:f0uOEkmJWgAuDTlTxUdgJzwG3PDSIf3UWF3NpMohbFE=
-github.com/beego/goyaml2 v0.0.0-20130207012346-5545475820dd h1:jZtX5jh5IOMu0fpOTC3ayh6QGSPJ/KWOv1lgPvbRw1M=
 github.com/beego/goyaml2 v0.0.0-20130207012346-5545475820dd/go.mod h1:1b+Y/CofkYwXMUU0OhQqGvsY2Bvgr4j6jfT699wyZKQ=
-github.com/beego/x2j v0.0.0-20131220205130-a0352aadc542 h1:nYXb+3jF6Oq/j8R/y90XrKpreCxIalBWfeyeKymgOPk=
 github.com/beego/x2j v0.0.0-20131220205130-a0352aadc542/go.mod h1:kSeGC/p1AbBiEp5kat81+DSQrZenVBZXklMLaELspWU=
 github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
 github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
@@ -114,39 +95,23 @@ github.com/bradfitz/gomemcache v0.0.0-20180710155616-bc664df96737/go.mod h1:PmM6
 github.com/bradfitz/gomemcache v0.0.0-20220106215444-fb4bf637b56d h1:pVrfxiGfwelyab6n21ZBkbkmbevaf+WvMIiR7sr97hw=
 github.com/bradfitz/gomemcache v0.0.0-20220106215444-fb4bf637b56d/go.mod h1:H0wQNHz2YrLsuXOZozoeDmnHXkNCRmMW0gwFWDfEZDA=
 github.com/casbin/casbin v1.7.0/go.mod h1:c67qKN6Oum3UF5Q1+BByfFxkwKvhwW57ITjqwtzR1KE=
-github.com/casbin/casbin v1.9.1 h1:ucjbS5zTrmSLtH4XogqOG920Poe6QatdXtz1FEbApeM=
-github.com/census-instrumentation/opencensus-proto v0.2.1 h1:glEXhBS5PSLLv4IXzLA5yPRVX4bilULVyxxbrfOtDAk=
 github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
 github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
 github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
 github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
 github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
-github.com/chzyer/logex v1.1.10 h1:Swpa1K6QvQznwJRcfTfQJmTE72DqScAa40E+fbHEXEE=
 github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
-github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e h1:fY5BOSpyZCqRo5OhCuC+XN+r/bBCmeuuJtjz+bCNIf8=
 github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
-github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1 h1:q763qf9huN11kDQavWsoZXJNW3xEE4JJyHa5Q25/sd8=
 github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
 github.com/clbanning/mxj/v2 v2.5.5 h1:oT81vUeEiQQ/DcHbzSytRngP6Ky9O+L+0Bw0zSJag9E=
 github.com/clbanning/mxj/v2 v2.5.5/go.mod h1:hNiWqW14h+kc+MdF9C6/YoRfjEJoR3ou6tn/Qo+ve2s=
-github.com/client9/misspell v0.3.4 h1:ta993UF76GwbvJcIo3Y68y/M3WxlpEHPWIGDkJYwzJI=
 github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
-github.com/cloudflare/golz4 v0.0.0-20150217214814-ef862a3cdc58 h1:F1EaeKL/ta07PY/k9Os/UFtwERei2/XzGemhpGnBKNg=
 github.com/cloudflare/golz4 v0.0.0-20150217214814-ef862a3cdc58/go.mod h1:EOBUe0h4xcZ5GoxqC5SDxFQ8gwyZPKQoEzownBlhI80=
-github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f h1:WBZRG4aNOuI15bLRrCgN8fCq8E5Xuty6jGbmSNEvSsU=
 github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
-github.com/cockroachdb/apd v1.1.0 h1:3LFP3629v+1aKXU5Q37mxmRxX/pIu1nijXydLShEq5I=
 github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ=
-github.com/coreos/go-semver v0.3.0 h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmfM=
-github.com/coreos/go-systemd/v22 v22.3.2 h1:D9/bQk5vlXQFZ6Kwuu6zaiXJ9oTPe68++AzAJc1DzSI=
-github.com/cosiner/argv v0.1.0 h1:BVDiEL32lwHukgJKP87btEPenzrrHUjajs/8yzaqcXg=
 github.com/couchbase/go-couchbase v0.0.0-20200519150804-63f3cdb75e0d/go.mod h1:TWI8EKQMs5u5jLKW/tsb9VwauIrMIxQG1r5fMsswK5U=
-github.com/couchbase/go-couchbase v0.1.0 h1:g4bCvDwRL+ZL6HLhYeRlXxEYP31Wpy0VFxnFw6efEp8=
 github.com/couchbase/gomemcached v0.0.0-20200526233749-ec430f949808/go.mod h1:srVSlQLB8iXBVXHgnqemxUXqN6FCvClgCMPCsjBDR7c=
-github.com/couchbase/gomemcached v0.1.3 h1:HIc5qMYNbuhB7zNaiEtj61DCYkquAwrQlf64q7JzdEY=
 github.com/couchbase/goutils v0.0.0-20180530154633-e865a1461c8a/go.mod h1:BQwMFlJzDjFDG3DJUdU0KORxn88UlsOULuxLExMh3Hs=
-github.com/couchbase/goutils v0.1.0 h1:0WLlKJilu7IBm98T8nS9+J36lBFVLRUSIUtyD/uWpAE=
-github.com/cupcake/rdb v0.0.0-20161107195141-43ba34106c76 h1:Lgdd/Qp96Qj8jqLpq2cI1I1X7BJnu06efS+XkhRoLUQ=
 github.com/cupcake/rdb v0.0.0-20161107195141-43ba34106c76/go.mod h1:vYwsqCOLxGiisLwp9rITslkFNpZD5rz43tf41QFkTWY=
 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
@@ -157,27 +122,19 @@ github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumC
 github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
 github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78=
 github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc=
-github.com/eapache/go-resiliency v1.1.0 h1:1NtRmCAqadE2FN4ZcN6g90TP3uk8cg9rn9eNK2197aU=
 github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs=
-github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21 h1:YEetp8/yCZMuEPMUDHG0CW/brkkEp8mzqk2+ODEitlw=
 github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU=
-github.com/eapache/queue v1.1.0 h1:YOEu7KNc61ntiQlcEeUIoDTJ2o8mQznoNvUhiigpIqc=
 github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I=
 github.com/edsrzf/mmap-go v0.0.0-20170320065105-0bce6a688712/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M=
-github.com/edsrzf/mmap-go v1.0.0 h1:CEBF7HpRnUCSJgGUb5h1Gm7e3VkmVDrR8lvWVLtrOFw=
 github.com/elastic/go-elasticsearch/v6 v6.8.5/go.mod h1:UwaDJsD3rWLM5rKNFzv9hgox93HoX8utj1kxD9aFUcI=
-github.com/elastic/go-elasticsearch/v6 v6.8.10 h1:2lN0gJ93gMBXvkhwih5xquldszpm8FlUwqG5sPzr6a8=
 github.com/elazarl/go-bindata-assetfs v1.0.0/go.mod h1:v+YaWX3bdea5J/mo8dSETolEo7R71Vk1u8bnjau5yw4=
 github.com/elazarl/go-bindata-assetfs v1.0.1 h1:m0kkaHRKEu7tUIUFVwhGGGYClXvyl4RE03qmvRTNfbw=
 github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
 github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.4 h1:rEvIZUSZ3fx39WIi3JkQqQBitGwpELBIYWeBVh6wn+E=
 github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
-github.com/envoyproxy/protoc-gen-validate v0.1.0 h1:EQciDnbrYxy13PgWoY8AqoxGiPrpgBZ1R8UNe3ddc+A=
 github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
 github.com/fatih/structs v1.1.0 h1:Q7juDM0QtcnhCpeyLGQKyg4TOIghuNXrkL32pHAUMxo=
 github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M=
-github.com/flosch/pongo2 v0.0.0-20200529170236-5abacdfa4915 h1:rNVrewdFbSujcoKZifC6cHJfqCTbCIR7XTLHW5TqUWU=
 github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw=
 github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g=
 github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE=
@@ -187,21 +144,12 @@ github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4
 github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw=
 github.com/garyburd/redigo v1.6.3 h1:HCeeRluvAgMusMomi1+6Y5dmFOdYV/JzoRrrbFlkGIc=
 github.com/garyburd/redigo v1.6.3/go.mod h1:rTb6epsqigu3kYKBnaF028A7Tf/Aw5s0cqA47doKKqw=
-github.com/glendc/gopher-json v0.0.0-20170414221815-dc4743023d0c h1:iRTj5SRYwbvsygdwVp+y9kZT145Y1s6xOPpeOEIeGc4=
 github.com/glendc/gopher-json v0.0.0-20170414221815-dc4743023d0c/go.mod h1:Gja1A+xZ9BoviGJNA2E9vFkPjjsl+CoJxSXiQM1UXtw=
-github.com/go-delve/delve v1.5.0 h1:gQsRvFdR0BGk19NROQZsAv6iG4w5QIZoJlxJeEUBb0c=
 github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
 github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
-github.com/go-kit/kit v0.12.1-0.20220826005032-a7ba4fa4e289 h1:468Nv6YtYO38Z+pFL6fRSVILGfdTFPei9ksVneiUHUc=
-github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU=
 github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
 github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
-github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA=
-github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0=
-github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
-github.com/go-redis/redis v6.14.2+incompatible h1:UE9pLhzmWf+xHNmZsoccjXosPicuiNaInPgym8nzfg0=
 github.com/go-redis/redis v6.14.2+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA=
-github.com/go-redis/redis/v7 v7.4.0 h1:7obg6wUoj05T0EpY0o8B59S9w5yeMWql7sw2kwNW1x4=
 github.com/go-redis/redis/v8 v8.11.6-0.20220405070650-99c79f7041fc h1:jZY+lpZB92nvBo2f31oPC/ivGll6NcsnEOORm8Fkr4M=
 github.com/go-redis/redis/v8 v8.11.6-0.20220405070650-99c79f7041fc/go.mod h1:25mL1NKxbJhB63ihiK8MnNeTRd+xAizd6bOdydrTLUQ=
 github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
@@ -209,28 +157,22 @@ github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LB
 github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
 github.com/go-sql-driver/mysql v1.7.0 h1:ueSltNNllEqE3qcWBTD0iQd3IpL/6U+mJxLkazJ7YPc=
 github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=
-github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk=
 github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
-github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 h1:p104kn46Q8WdvHunIJ9dAyjPVtrBPhSr3KT2yUst43I=
 github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE=
 github.com/go-xorm/sqlfiddle v0.0.0-20180821085327-62ce714f951a h1:9wScpmSP5A3Bk8V3XHWUcJmYTh+ZnlHVyc+A4oZYS3Y=
 github.com/go-xorm/sqlfiddle v0.0.0-20180821085327-62ce714f951a/go.mod h1:56xuuqnHyryaerycW3BfssRdxQstACi0Epw/yC5E2xM=
 github.com/go-xorm/xorm v0.7.9 h1:LZze6n1UvRmM5gpL9/U9Gucwqo6aWlFVlfcHKH10qA0=
 github.com/go-xorm/xorm v0.7.9/go.mod h1:XiVxrMMIhFkwSkh96BW7PACl7UhLtx2iJIHMdmjh5sQ=
-github.com/gofrs/uuid v3.2.0+incompatible h1:y12jRkkFxsd7GpqdSZ+/KCs/fJbqpEXSGd4+jfEaewE=
 github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
 github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
 github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
-github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
-github.com/goji/httpauth v0.0.0-20160601135302-2da839ab0f4d h1:lBXNCxVENCipq4D1Is42JVOP4eQjlB8TQ6H69Yx5J9Q=
 github.com/goji/httpauth v0.0.0-20160601135302-2da839ab0f4d/go.mod h1:nnjvkQ9ptGaCkuDUx6wNykzzlUixGxvkme+H/lnzb+A=
-github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58=
+github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g=
+github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=
 github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
 github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
-github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
 github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
 github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
-github.com/golang/mock v1.2.0 h1:28o5sBqPkBsMGnC6b4MvE2TzSr5/AT4c/1fLqVGIwlk=
 github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
 github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
 github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
@@ -248,9 +190,7 @@ github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaS
 github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw=
 github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
 github.com/golang/snappy v0.0.0-20170215233205-553a64147049/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
-github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db h1:woRePGFeVFfLKN/pOkfl+p/TAqKOfFu+7KPlMVpok/w=
 github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
-github.com/gomodule/redigo v2.0.0+incompatible h1:K/R+8tc58AaqLkqG2Ol3Qk+DR/TlNuhuh457pBFPtt0=
 github.com/gomodule/redigo v2.0.0+incompatible/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4=
 github.com/gonum/blas v0.0.0-20181208220705-f22b278b28ac h1:Q0Jsdxl5jbxouNs1TQYt0gxesYMU4VXRbsTlgDloZ50=
 github.com/gonum/blas v0.0.0-20181208220705-f22b278b28ac/go.mod h1:P32wAyui1PQ58Oce/KYkOqQv8cVw1zAapXOl+dRFGbc=
@@ -266,7 +206,6 @@ github.com/gonum/matrix v0.0.0-20181209220409-c518dec07be9 h1:V2IgdyerlBa/MxaEFR
 github.com/gonum/matrix v0.0.0-20181209220409-c518dec07be9/go.mod h1:0EXg4mc1CNP0HCqCz+K4ts155PXIlUywf0wqN+GfPZw=
 github.com/gonum/stat v0.0.0-20181125101827-41a0da705a5b h1:fbskpz/cPqWH8VqkQ7LJghFkl2KPAiIFUHrTJ2O3RGk=
 github.com/gonum/stat v0.0.0-20181125101827-41a0da705a5b/go.mod h1:Z4GIJBJO3Wa4gD4vbwQxXXZ+WHmW6E9ixmNrwvs0iZs=
-github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c h1:964Od4U6p2jUkFxvCydnIczKteheJEzHRToSGK3Bnlw=
 github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
 github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
 github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
@@ -277,43 +216,26 @@ github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
 github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
-github.com/google/gofuzz v1.0.0 h1:A8PeW59pxE9IoFRqBp37U+mSNaQoZ46F1f0f863XSXw=
 github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
-github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no=
 github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
-github.com/google/martian/v3 v3.2.1 h1:d8MncMlErDFTwQGBK1xhv026j9kqhvw1Qv9IbWT1VLQ=
 github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
-github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38 h1:yAJXTCF9TqKcTiHJAE8dj7HMvPfh66eeA2JYW7eFpSE=
 github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
 github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
-github.com/googleapis/enterprise-certificate-proxy v0.1.0 h1:zO8WHNx/MYiAKJ3d5spxZXZE6KHmIQGQcAzwUzV7qQw=
 github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
-github.com/googleapis/gax-go/v2 v2.4.0 h1:dS9eYAjhrE2RjmzYw2XAPvcXfmcQLtFEQWn0CR82awk=
-github.com/googleapis/go-type-adapters v1.0.0 h1:9XdMn+d/G57qq1s8dNc5IesGCXHf6V2HZ2JwRxfA2tA=
 github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
-github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00 h1:l5lAOZEym3oK3SQ2HBHWsJUfbNBiTXJDeW2QDxw9AQ0=
 github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
-github.com/gorilla/context v1.1.1 h1:AWwleXJkX/nhcU9bZSnZoi3h/qGYqQAGhq6zZe/aQW8=
 github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
-github.com/gorilla/mux v1.6.2 h1:Pgr17XVTNXAk3q/r4CpKzC5xBM/qW1uVLV+IhRZpIIk=
 github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
 github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc=
 github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
-github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 h1:Ovs26xHkKqVztRpIrF/92BcuyuQ/YW4NSIpoGtfXNho=
 github.com/h2non/parth v0.0.0-20190131123155-b4df798d6542 h1:2VTzZjLZBgl62/EtslCrtky5vbi9dd7HrQPQIx6wqiw=
 github.com/h2non/parth v0.0.0-20190131123155-b4df798d6542/go.mod h1:Ow0tF8D4Kplbc8s8sSb3V2oUCygFHVp8gC3Dn6U4MNI=
 github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
 github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc=
 github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
-github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
-github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
 github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
-github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639 h1:mV02weKRL81bEnm8A0HT1/CAelMQDBuQIfLw8n+d6xI=
 github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
-github.com/jackc/fake v0.0.0-20150926172116-812a484cc733 h1:vr3AYkKovP8uR8AvSGGUK1IDqRa5lAAvEkZG1LKaCRc=
 github.com/jackc/fake v0.0.0-20150926172116-812a484cc733/go.mod h1:WrMFNQdiFJ80sQsxDoMokWK1W5TQtxBFNpzWTD84ibQ=
-github.com/jackc/pgx v3.6.0+incompatible h1:bJeo4JdVbDAW8KB2m8XkFeo8CPipREoG37BwEoKGz+Q=
 github.com/jackc/pgx v3.6.0+incompatible/go.mod h1:0ZGrqGqkRlliWnWB4zKnWtjbSWbGkVEFm4TeybAXq+I=
 github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
 github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg=
@@ -322,43 +244,31 @@ github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGw
 github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U=
 github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
 github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
-github.com/jpillora/backoff v1.0.0 h1:uvFg412JmmHBHw7iwprIxkPMI+sGQ4kzOWsMeHnm2EA=
 github.com/json-iterator/go v1.1.5/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
 github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
 github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
 github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
 github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
-github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024 h1:rBMNdlhTLzJjJSDIjNEXX1Pz3Hmwmz91v+zycvx9PJc=
 github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
-github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo=
 github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
 github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
-github.com/julienschmidt/httprouter v1.3.0 h1:U0609e9tgbseu3rBINet9P48AI/D3oJs4dN7jwJOQ1U=
 github.com/kgiannakakis/mp3duration v0.0.0-20191013070830-d834f8d5ed53 h1:+8X3HMX8A2QhvNg3dImiQTCiVUt6BQXz1mW+/DrWI+k=
 github.com/kgiannakakis/mp3duration v0.0.0-20191013070830-d834f8d5ed53/go.mod h1:E61jD6q4yJ6Cu9uDGRAfiENM1G5TVZhOog0Y3+GgTpQ=
-github.com/kisielk/gotool v1.0.0 h1:AV2c/EiW3KqPNT9ZKl07ehoAGi4C5/01Cfbblndcapg=
 github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
 github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
-github.com/konsorten/go-windows-terminal-sequences v1.0.3 h1:CE8S1cTafDpPvMhIxNJKvHsGVBgn1xWYf1NbHQhywc8=
-github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515 h1:T+h1c/A9Gawja4Y9mFVWj2vyii2bbUNDw3kt9VxK2EY=
 github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
 github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
 github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0=
-github.com/kr/pty v1.1.1 h1:VkoXIwSboBpnk99O/KFauAEILuNHv5DVFKZMBN/gUgw=
 github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
 github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
 github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
-github.com/ledisdb/ledisdb v0.0.0-20200510135210-d35789ec47e6 h1:wxyqOzKxsRJ6vVRL9sXQ64Z45wmBuQ+OTH9sLsC5rKc=
 github.com/ledisdb/ledisdb v0.0.0-20200510135210-d35789ec47e6/go.mod h1:n931TsDuKuq+uX4v1fulaMbA/7ZLLhjc85h7chZGBCQ=
 github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
 github.com/lib/pq v1.10.4/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
 github.com/lib/pq v1.10.7 h1:p7ZhMD+KsSRozJr34udlUrhboJwWAgCg34+/ZZNvZZw=
 github.com/lib/pq v1.10.7/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
-github.com/magiconair/properties v1.8.1 h1:ZC2Vc7/ZFkGmsVC9KvOjumD+G5lXy2RtTKyzRKO2BQ4=
 github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
 github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
-github.com/mattn/go-colorable v0.0.9 h1:UVL0vNpWh04HeJXV0KLcaT7r06gOH2l4OW6ddYRUIY4=
-github.com/mattn/go-isatty v0.0.3 h1:ns/ykhmWi7G9O+8a448SecJU3nSMBXJfqQkl0upE1jI=
 github.com/mattn/go-sqlite3 v1.10.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
 github.com/mattn/go-sqlite3 v2.0.3+incompatible h1:gXHsfypPkaMZrKbD5209QV9jbUTJKjyR5WD3HYQSd+U=
 github.com/mattn/go-sqlite3 v2.0.3+incompatible/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
@@ -376,13 +286,12 @@ github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9G
 github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
 github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 h1:RWengNIwukTxcDr9M+97sNutRR1RKhG96O6jWumTTnw=
 github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8=
+github.com/mojocn/base64Captcha v1.3.5 h1:Qeilr7Ta6eDtG4S+tQuZ5+hO+QHbiGAJdi4PfoagaA0=
+github.com/mojocn/base64Captcha v1.3.5/go.mod h1:/tTTXn4WTpX9CfrmipqRytCpJ27Uw3G6I7NcP2WwcmY=
 github.com/mozillazg/go-pinyin v0.19.0 h1:p+J8/kjJ558KPvVGYLvqBhxf8jbZA2exSLCs2uUVN8c=
 github.com/mozillazg/go-pinyin v0.19.0/go.mod h1:iR4EnMMRXkfpFVV5FMi4FNB6wGq9NV6uDWbUuPhP4Yc=
 github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
-github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f h1:KUppIJq7/+SVif2QVs3tOP0zanoHgBEVAwHxUSIzRqU=
-github.com/nbio/st v0.0.0-20140626010706-e9e8d9816f32 h1:W6apQkHrMkS0Muv8G/TipAy/FJl/rCYT0+EuS8+Z0z4=
 github.com/nbio/st v0.0.0-20140626010706-e9e8d9816f32/go.mod h1:9wM+0iRr9ahx58uYLpLIr5fm8diHn0JbqRycJi6w0Ms=
-github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs=
 github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
 github.com/nosixtools/solarlunar v0.0.0-20211112060703-1b6dea7b4a19 h1:LhWT2dBuNkYexwRSsPpYh67e0ikmH1ebBDaVkGHoMts=
 github.com/nosixtools/solarlunar v0.0.0-20211112060703-1b6dea7b4a19/go.mod h1:LjhyrWzOLJ9l1azMoNr9iCvfNrHEREqvJHzSLQcD0/o=
@@ -398,7 +307,6 @@ github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108
 github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0=
 github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE=
 github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU=
-github.com/onsi/ginkgo/v2 v2.1.3 h1:e/3Cwtogj0HA+25nMP1jCMDIf8RtRYbGwGGuBIFztkc=
 github.com/onsi/ginkgo/v2 v2.1.3/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c=
 github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
 github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
@@ -406,16 +314,11 @@ github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1y
 github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY=
 github.com/onsi/gomega v1.19.0 h1:4ieX6qQjPP/BfC3mpsAtIGGlxTWPeA3Inl/7DtXw1tw=
 github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro=
-github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs=
 github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc=
-github.com/openzipkin/zipkin-go v0.1.6 h1:yXiysv1CSK7Q5yjGy1710zZGnsbMUIjluWBxtLXHPBo=
 github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw=
 github.com/pelletier/go-toml v1.0.1/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
 github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
-github.com/pelletier/go-toml v1.9.2 h1:7NiByeVF4jKSG1lDF3X8LTIkq2/bu+1uYbIm1eS5tzk=
-github.com/peterh/liner v1.0.1-0.20171122030339-3681c2a91233 h1:jmJndGFBPjNWW+MAYarU/Nl8QrQVzbw4B/AYE0LzETo=
 github.com/peterh/liner v1.0.1-0.20171122030339-3681c2a91233/go.mod h1:xIteQHvHuaLYG9IFj6mSxM0fCKrs34IrEQUhOYuGPHc=
-github.com/pierrec/lz4 v2.0.5+incompatible h1:2xWsjqPFWcplujydGg4WmhC/6fZqK42wMM8aXeqhl0I=
 github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
 github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
 github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
@@ -447,7 +350,6 @@ github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsT
 github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
 github.com/prometheus/procfs v0.9.0 h1:wzCHvIvM5SxWqYvwgVL7yJY8Lz3PKn49KQtpgMYJfhI=
 github.com/prometheus/procfs v0.9.0/go.mod h1:+pB4zwohETzFnmlpe6yd2lSc+0/46IYZRB/chUwxUZY=
-github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a h1:9ZKAASQSHhDYGoxY8uLVpewe1GDZ2vu2Tr/vTdVAkFQ=
 github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
 github.com/rdlucklib/rdluck_tools v1.0.3 h1:iOtK2QPlPQ6CL6c1htCk5VnFCHzyG6DCfJtunrMswK0=
 github.com/rdlucklib/rdluck_tools v1.0.3/go.mod h1:9Onw9o4w19C8KE5lxb8GyxgRBbZweRVkQSc79v38EaA=
@@ -465,11 +367,8 @@ github.com/shiena/ansicolor v0.0.0-20200904210342-c7312218db18/go.mod h1:nkxAfR/
 github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4=
 github.com/shopspring/decimal v1.3.1 h1:2Usl1nmF/WZucqkFZhnfFYxxxu8LG21F6nPQBE5gKV8=
 github.com/shopspring/decimal v1.3.1/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o=
-github.com/siddontang/go v0.0.0-20170517070808-cb568a3e5cc0 h1:QIF48X1cihydXibm+4wfAc0r/qyPyuFiPFRNphdMpEE=
 github.com/siddontang/go v0.0.0-20170517070808-cb568a3e5cc0/go.mod h1:3yhqj7WBBfRhbBlzyOC3gUxftwsU0u8gqevxwIHQpMw=
-github.com/siddontang/goredis v0.0.0-20150324035039-760763f78400 h1:091wFNQB3PXcL5+me0joH7EiyqQaI0wGMpEjVCkK04U=
 github.com/siddontang/goredis v0.0.0-20150324035039-760763f78400/go.mod h1:DDcKzU3qCuvj/tPnimWSsZZzvk9qvkvrIL5naVBPh5s=
-github.com/siddontang/rdb v0.0.0-20150307021120-fc89ed2e418d h1:NVwnfyR3rENtlz62bcrkXME3INVUa4lcdGt+opvxExs=
 github.com/siddontang/rdb v0.0.0-20150307021120-fc89ed2e418d/go.mod h1:AMEsy7v5z92TR1JKMkLLoaOQk++LVnOKL3ScbJ8GNGA=
 github.com/silenceper/wechat/v2 v2.1.3 h1:vMHnU9PG6wROTqkQI+HnBiEzriEEE+sbmGHg9cdb4yc=
 github.com/silenceper/wechat/v2 v2.1.3/go.mod h1:FoU0YvegD+Z85TBGQhjkXjY8BMb0+cagbe9BqJ0fKhA=
@@ -478,33 +377,20 @@ github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6Mwd
 github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
 github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0=
 github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
-github.com/smartwalle/pongo2render v1.0.1 h1:rsPnDTu/+zIT5HEB5RbMjxKY5hisov26j0isZL/7YS0=
 github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
 github.com/smartystreets/assertions v1.1.0/go.mod h1:tcbTF8ujkAEcZ8TElKY+i30BzYlVhC/LOxJk7iOWnoo=
-github.com/smartystreets/assertions v1.1.1 h1:T/YLemO5Yp7KPzS+lVtu+WsHn8yoSwTfItdAd1r3cck=
 github.com/smartystreets/assertions v1.1.1/go.mod h1:tcbTF8ujkAEcZ8TElKY+i30BzYlVhC/LOxJk7iOWnoo=
-github.com/smartystreets/go-aws-auth v0.0.0-20180515143844-0c1422d1fdb9 h1:hp2CYQUINdZMHdvTdXtPOY2ainKl4IoMcpAXEf2xj3Q=
 github.com/smartystreets/go-aws-auth v0.0.0-20180515143844-0c1422d1fdb9/go.mod h1:SnhjPscd9TpLiy1LpzGSKh3bXCfxxXuqd9xmQJy3slM=
-github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s=
 github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
-github.com/smartystreets/gunit v1.4.2 h1:tyWYZffdPhQPfK5VsMQXfauwnJkqg7Tv5DLuQVYxq3Q=
 github.com/smartystreets/gunit v1.4.2/go.mod h1:ZjM1ozSIMJlAz/ay4SG8PeKF00ckUp+zMHZXV9/bvak=
-github.com/spf13/afero v1.1.2 h1:m8/z1t7/fwjysjQRYbP0RD+bUIF/8tJwPdEZsI83ACI=
 github.com/spf13/cast v1.4.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
 github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w=
 github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU=
-github.com/spf13/jwalterweatherman v1.0.0 h1:XHEdyB+EcvlqZamSM4ZOMGlc93t6AcsBEu9Gc1vn7yk=
-github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg=
-github.com/spf13/viper v1.7.0 h1:xVKxvI7ouOI5I+U9s2eeiUfMaWBVoXA3AWskkrqK0VM=
-github.com/ssdb/gossdb v0.0.0-20180723034631-88f6b59b84ec h1:q6XVwXmKvCRHRqesF3cSv6lNqqHi0QWOvgDlSohg8UA=
 github.com/ssdb/gossdb v0.0.0-20180723034631-88f6b59b84ec/go.mod h1:QBvMkMya+gXctz3kmljlUCu/yB3GZ6oee+dUozsezQE=
-github.com/stevenyao/go-opencc v0.0.0-20161014062826-cc376a51b65e h1:EScGwVsN5G1/xRUdOKtUGugKseKjvHrvA71486Q39zg=
-github.com/stevenyao/go-opencc v0.0.0-20161014062826-cc376a51b65e/go.mod h1:lHc78mZexRHu9CQrKCEO0CLFl7GN0Xpj3PH3jBJ5EpY=
 github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
 github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
 github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
 github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
-github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c=
 github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
 github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
 github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
@@ -516,9 +402,7 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/
 github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
 github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk=
 github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
-github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s=
 github.com/syndtr/goleveldb v0.0.0-20160425020131-cfa635847112/go.mod h1:Z4AUp2Km+PwemOoO/VB5AOx9XSsIItzFjoJlOSiYmn0=
-github.com/syndtr/goleveldb v0.0.0-20181127023241-353a9fca669c h1:3eGShk3EQf5gJCYW+WzA0TEJQd37HLOmlYF7N0YJwv0=
 github.com/syndtr/goleveldb v0.0.0-20181127023241-353a9fca669c/go.mod h1:Z4AUp2Km+PwemOoO/VB5AOx9XSsIItzFjoJlOSiYmn0=
 github.com/tealeg/xlsx v1.0.5 h1:+f8oFmvY8Gw1iUXzPk+kz+4GpbDZPK1FhPiQRd+ypgE=
 github.com/tealeg/xlsx v1.0.5/go.mod h1:btRS8dz54TDnvKNosuAqxrM1QgN1udgk9O34bDCnORM=
@@ -534,12 +418,8 @@ github.com/tidwall/pretty v1.2.0 h1:RWIZEg2iJ8/g6fDDYzMpobmaoGh5OLl4AXtGUGPcqCs=
 github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU=
 github.com/tjfoc/gmsm v1.3.2 h1:7JVkAn5bvUJ7HtU08iW6UiD+UTmJTIToHCfeFzkcCxM=
 github.com/tjfoc/gmsm v1.3.2/go.mod h1:HaUcFuY0auTiaHB9MHFGCPx5IaLhTUd2atbCFBQXn9w=
-github.com/ugorji/go v0.0.0-20171122102828-84cb69a8af83 h1:9AUN7+NK4IV+A11igqjQM5i8obiOAQo4SXgjaxe+orI=
 github.com/ugorji/go v0.0.0-20171122102828-84cb69a8af83/go.mod h1:hnLbHMwcvSihnDhEfx2/BzKp2xb0Y+ErdfYcrs9tkJQ=
-github.com/wendal/errors v0.0.0-20130201093226-f66c77a7882b h1:0Ve0/CCjiAiyKddUMUn3RwIGlq2iTW4GuVzyoKBYO/8=
 github.com/wendal/errors v0.0.0-20130201093226-f66c77a7882b/go.mod h1:Q12BUT7DqIlHRmgv3RskH+UCM/4eqVMgI0EMmlSpAXc=
-github.com/wenzhenxi/gorsa v0.0.0-20210524035706-528c7050d703 h1:Tiqr9EWpYopXZf668mgTNWguzE6ssRIEviULO3gSWnU=
-github.com/wenzhenxi/gorsa v0.0.0-20210524035706-528c7050d703/go.mod h1:nfhBTKji6rC8lrjyikx8NJ85JHg6ZQam0a9Je+2RVOg=
 github.com/xuri/efp v0.0.0-20220603152613-6918739fd470 h1:6932x8ltq1w4utjmfMPVj09jdMlkY0aiA6+Skbtl3/c=
 github.com/xuri/efp v0.0.0-20220603152613-6918739fd470/go.mod h1:ybY/Jr0T0GTCnYjKqmdwxyxn2BQf2RcQIIvex5QldPI=
 github.com/xuri/excelize/v2 v2.6.1 h1:ICBdtw803rmhLN3zfvyEGH3cwSmZv+kde7LhTDT659k=
@@ -548,33 +428,16 @@ github.com/xuri/nfp v0.0.0-20220409054826-5e722a1d9e22 h1:OAmKAfT06//esDdpi/DZ8Q
 github.com/xuri/nfp v0.0.0-20220409054826-5e722a1d9e22/go.mod h1:WwHg+CVyzlv/TX9xqBFXEZAuxOPxn2k1GNHwG41IIUQ=
 github.com/yidane/formula v0.0.0-20210902154546-0782e1736717 h1:9CTJJpdISGxMAELfVlprj5kZEsJEaNAWiobv8ZAd72U=
 github.com/yidane/formula v0.0.0-20210902154546-0782e1736717/go.mod h1:9/dQiKiN04yPMdgsuFmKGuI2Hdp6OmFV9gSWS1col6g=
-github.com/ylywyn/jpush-api-go-client v0.0.0-20190906031852-8c4466c6e369 h1:g95WlXTqXFLM36fhvDKcZWHTUnBb2KCEn4tuSizk/d8=
 github.com/ylywyn/jpush-api-go-client v0.0.0-20190906031852-8c4466c6e369/go.mod h1:Nv7wKD2/bCdKUFNKcJRa99a+1+aSLlCRJFriFYdjz/I=
 github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
 github.com/yuin/goldmark v1.1.30/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-github.com/yuin/goldmark v1.2.1 h1:ruQGxdhGHe7FWOJPT0mKs5+pD2Xs1Bm/kdGlHO04FmM=
 github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-github.com/yuin/goldmark v1.4.13 h1:fVcFKWvrslecOb/tg+Cc05dkeYx540o0FuFt3nUVDoE=
 github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
-github.com/yuin/gopher-lua v0.0.0-20171031051903-609c9cd26973 h1:iCnkJ/qjKZGdZnlcj1N55AxPDan814kpc3s1cDpQKd8=
 github.com/yuin/gopher-lua v0.0.0-20171031051903-609c9cd26973/go.mod h1:aEV29XrmTYFr3CiRxZeGHpkvbwq+prZduBqMaascyCU=
 github.com/ziutek/mymysql v1.5.4 h1:GB0qdRGsTwQSBVYuVShFBKaXSnSnYYC2d9knnE1LHFs=
 github.com/ziutek/mymysql v1.5.4/go.mod h1:LMSpPZ6DbqWFxNCHW77HeMg9I646SAhApZ/wKdgO/C0=
-go.etcd.io/etcd/api/v3 v3.5.4 h1:OHVyt3TopwtUQ2GKdd5wu3PmmipR4FTwCqoEjSyRdIc=
-go.etcd.io/etcd/client/pkg/v3 v3.5.4 h1:lrneYvz923dvC14R54XcA7FXoZ3mlGZAgmwhfm7HqOg=
-go.etcd.io/etcd/client/v3 v3.5.4 h1:p83BUL3tAYS0OT/r0qglgc3M1JjhM0diV8DSWAhVXv4=
 go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk=
-go.opencensus.io v0.23.0 h1:gqCw0LfLxScz8irSi8exQc7fyQ0fKQU/qnC/X8+V/1M=
 go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E=
-go.opentelemetry.io/otel v1.8.0 h1:zcvBFizPbpa1q7FehvFiHbQwGzmPILebO0tyqIR5Djg=
-go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.8.0 h1:FVy7BZCjoA2Nk+fHqIdoTmm554J9wTX+YcrDp+mc368=
-go.opentelemetry.io/otel/sdk v1.8.0 h1:xwu69/fNuwbSHWe/0PGS888RmjWY181OmcXDQKu7ZQk=
-go.opentelemetry.io/otel/trace v1.8.0 h1:cSy0DF9eGI5WIfNwZ1q2iUyGj00tGzP24dE1lOlHrfY=
-go.starlark.net v0.0.0-20190702223751-32f345186213 h1:lkYv5AKwvvduv5XWP6szk/bvvgO6aDeUujhZQXIFTes=
-go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE=
-go.uber.org/multierr v1.7.0 h1:zaiO/rmgFjbmCXdSYJWQcdvOCsthmdaHfr3Gm2Kx4Ec=
-go.uber.org/zap v1.19.1 h1:ue41HOKd1vGURxrmeKIgELGb3jPW9DMUDGtsinblHwI=
-golang.org/x/arch v0.0.0-20190927153633-4e8777c89be4 h1:QlVATYS7JBoZMVaf+cNjb90WD/beKVHnIxFKT4QaHVI=
 golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
 golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
@@ -587,20 +450,17 @@ golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4/go.mod h1:IxCIyHEi3zRg3s0
 golang.org/x/crypto v0.0.0-20220817201139-bc19a97f63c8/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
 golang.org/x/crypto v0.5.0 h1:U/0M97KRkSFvyD/3FSmdP5W5swImpNgle/EHFhOsQPE=
 golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU=
-golang.org/x/exp v0.0.0-20190121172915-509febef88a4 h1:c2HOrn5iMezYjSlGPncknSEr/8x5LELb/ilJbXi9DEA=
 golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
+golang.org/x/image v0.0.0-20190501045829-6d32002ffd75/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
 golang.org/x/image v0.0.0-20220413100746-70e8d0d3baa9 h1:LRtI4W37N+KFebI/qV0OFiLUv4GLOWeEW5hn/KEJvxE=
 golang.org/x/image v0.0.0-20220413100746-70e8d0d3baa9/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM=
 golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
 golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
 golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
-golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3 h1:XQyxROzUlZH+WIQwySDgnISgOivlhjIEwaQaJEJrrN0=
 golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
 golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s=
 golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
-golang.org/x/mod v0.8.0 h1:LUYupSeNrTNCGzR/hVBk2NHZO4hXcVaW1k4Qx7rjPx8=
 golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
 golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -626,14 +486,11 @@ golang.org/x/net v0.0.0-20211209124913-491a49abca63/go.mod h1:9nx3DQGgdP8bBQD5qx
 golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
 golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
 golang.org/x/net v0.0.0-20220812174116-3211cb980234/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk=
-golang.org/x/net v0.5.0 h1:GyT4nK/YDHSqa1c4753ouYCDajOYKTja9Xb/OHtgvSw=
-golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws=
 golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
 golang.org/x/net v0.9.0 h1:aWJ/m6xSmxWBx+V0XRHTlrYrPG56jKsLdTFmsSsCzOM=
 golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns=
 golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
 golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
-golang.org/x/oauth2 v0.3.0 h1:6l90koy8/LaBLmLu8jpHeHexzMwEita0zFfYlggy2F8=
 golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -643,7 +500,6 @@ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJ
 golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o=
 golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -673,16 +529,12 @@ golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBc
 golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.4.0 h1:Zr2JFtRQNX3BCZ8YtxRE9hNJYC8J6I1MVbMg6owUp18=
-golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.7.0 h1:3jlCCIQZPdOYu1h8BkNvLz8Kgwtae2cagcG/VamtZRU=
 golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
 golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
-golang.org/x/term v0.4.0 h1:O7UWfv5+A2qiuulQk30kVinPoMtoIPeVaKLEgLpVkvg=
 golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
-golang.org/x/term v0.7.0 h1:BEvjmm5fURWqcfbSKTdpkDXYBrUS1c0m8agp14W48vQ=
 golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@@ -690,8 +542,6 @@ golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
 golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
-golang.org/x/text v0.6.0 h1:3XmdazWV+ubf7QgHSTWeykHOci5oeekaGJBLkrkaw4k=
-golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
 golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
 golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE=
 golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
@@ -710,34 +560,27 @@ golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBn
 golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 golang.org/x/tools v0.0.0-20200509030707-2212a7e161a5/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
 golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
-golang.org/x/tools v0.1.12 h1:VveCTK38A2rkS8ZqFY25HIDFscX5X9OoEhJd3quQmXU=
 golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
-golang.org/x/tools v0.6.0 h1:BOw41kyTf3PuCW1pVQf8+Cyg8pMlkYB1oo9iJ6D/lKM=
 golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
 golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f h1:uF6paiQQebLeSXkrTqHqz0MXhXXS1KgF41eUdBNvxK0=
 google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk=
-google.golang.org/api v0.93.0 h1:T2xt9gi0gHdxdnRkVQhT8mIvPaXKNsDNWz+L696M66M=
 google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
 google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
 google.golang.org/appengine v1.6.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c=
 google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
 google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
 google.golang.org/genproto v0.0.0-20190404172233-64821d5d2107/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
 google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
 google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
-google.golang.org/genproto v0.0.0-20220822174746-9e6da59bd2fc h1:Nf+EdcTLHR8qDNN/KfkQL0u0ssxt9OhbaWCl5C0ucEI=
 google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs=
 google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
 google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
 google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
 google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
 google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
-google.golang.org/grpc v1.48.0 h1:rQOsyJ/8+ufEDJd/Gdsz7HG220Mh9HAhFHRGnIjda0w=
 google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
 google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
 google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
@@ -751,7 +594,6 @@ google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp0
 google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
 google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w=
 google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
-gopkg.in/alecthomas/kingpin.v2 v2.2.6 h1:jMFz6MfLP0/4fUyZle81rXUoxOBFi19VUFKVDOQfozc=
 gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
 gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc h1:2gGKlE2+asNV9m7xrywl36YYNnBG5ZQ0r/BOOxqPpmk=
 gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc/go.mod h1:m7x9LTH6d71AHyAX77c9yqWCCa3UKHcVEj9y7hAtKDk=
@@ -760,7 +602,6 @@ gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8
 gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
-gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
 gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
 gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df h1:n7WqCuqOuCbNr617RXOY0AWRXxgwEyPp2z+p0+hgMuE=
 gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df/go.mod h1:LRQQ+SO6ZHR7tOkpBDuZnXENFzX8qRjMDMyPD6BRkCw=
@@ -770,7 +611,6 @@ gopkg.in/ini.v1 v1.56.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
 gopkg.in/ini.v1 v1.66.2/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
 gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=
 gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
-gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22 h1:VpOs+IwYnYBaFnrNAeB8UUWtL3vEUnzSCL1nVjPhqrw=
 gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA=
 gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
 gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
@@ -790,7 +630,6 @@ gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
 honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
 honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
 honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc h1:/hemPrYIhOhy8zYrNj+069zDB68us2sMGsfkFJO0iZs=
 honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
 xorm.io/builder v0.3.6 h1:ha28mQ2M+TFx96Hxo+iq6tQgnkC9IZkM6D8w9sKHHF8=
 xorm.io/builder v0.3.6/go.mod h1:LEFAPISnRzG+zxaxj2vPicRwz67BdhFreKg8yv8/TgU=

+ 5 - 0
models/base.go

@@ -1,5 +1,10 @@
 package models
 
+const (
+	BaseRespCodeAbnormalLogin = 4011 // 异常登录状态码
+	BaseRespCodeLoginErr      = 4012 // 账号或密码输入错误
+)
+
 type BaseResponse struct {
 	Ret         int
 	Msg         string

+ 74 - 0
models/company/company_ascribe.go

@@ -0,0 +1,74 @@
+package company
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+type CompanyAscribe struct {
+	CompanyAscribeId int       `orm:"column(company_ascribe_id);pk" description:"归因ID"`
+	AscribeContent   string    `description:"归因说明"`
+	AdminId          int       `description:"管理员ID"`
+	CreateTime       time.Time `description:"创建时间"`
+	ModifyTime       time.Time `description:"更新时间"`
+}
+
+type CompanyAscribeResp struct {
+	CompanyAscribeId int    `orm:"column(company_ascribe_id);pk" description:"归因ID"`
+	AscribeContent   string `description:"归因说明"`
+	AdminId          int    `description:"管理员ID"`
+	CreateTime       string `description:"创建时间"`
+}
+
+type CompanyAscribeDetailResp struct {
+	Detail *CompanyAscribeResp
+}
+
+type CompanyAscribeListResp struct {
+	List []*CompanyAscribeResp
+}
+
+type CompanyAscribeAddReq struct {
+	AscribeContent string `description:"归因说明"`
+}
+
+// 添加
+func AddCompanyAscribe(item *CompanyAscribe) (newId int64, err error) {
+	o := orm.NewOrm()
+	newId, err = o.Insert(item)
+	return
+}
+
+// 获取数量
+func GetCompanyAscribeCount(condition string, pars []interface{}) (count int, err error) {
+	sqlCount := ` SELECT COUNT(1) AS count  FROM company_ascribe as a WHERE 1= 1  `
+	if condition != "" {
+		sqlCount += condition
+	}
+	o := orm.NewOrm()
+	err = o.Raw(sqlCount, pars).QueryRow(&count)
+	return
+}
+
+// 列表
+func GetCompanyAscribeList(condition string, pars []interface{}, startSize, pageSize int) (items []*CompanyAscribeResp, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM company_ascribe as a  WHERE 1= 1 `
+	if condition != "" {
+		sql += condition
+	}
+	if startSize+pageSize > 0 {
+		sql += ` LIMIT ?,?  `
+		_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
+	}
+	_, err = o.Raw(sql, pars).QueryRows(&items)
+	return
+}
+
+// 通过ID获取详情
+func GetCompanyAscribeDetail(companyAscribeId int) (item *CompanyAscribeResp, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM company_ascribe  WHERE company_ascribe_id=? `
+	err = o.Raw(sql, companyAscribeId).QueryRow(&item)
+	return
+}

+ 5 - 1
models/company/company_config.go

@@ -4,6 +4,10 @@ import (
 	"github.com/beego/beego/v2/client/orm"
 )
 
+const (
+	ConfAreaCodeListKey = "area_code_list" // 手机号区号列表
+)
+
 type CrmConfig struct {
 	ConfigValue string `description:"详情"`
 }
@@ -15,7 +19,7 @@ func GetConfigValueByCode(configCode string) (total int, err error) {
 	return
 }
 
-//修改
+// 修改
 func CrmConfigUpdate(newValue, configCode string) (err error) {
 	o := orm.NewOrm()
 	sql := `UPDATE crm_config SET  config_value=?   WHERE config_code=  ?`

+ 146 - 0
models/company/company_no_renewed_ascribe.go

@@ -0,0 +1,146 @@
+package company
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+type CompanyNoRenewedAscribe struct {
+	NoRenewedAscribeId int       `orm:"column(no_renewed_ascribe_id);pk" description:"主键ID"`
+	CompanyAscribeId   int       `description:"归因ID"`
+	AscribeContent     string    `description:"归因说明"`
+	Content            string    `description:"内容说明"`
+	AdminId            int       `description:"管理员ID"`
+	CompanyId          int       `description:"公司ID"`
+	ProductId          int       `description:"产品id"`
+	CreateTime         time.Time `description:"创建时间"`
+	ModifyTime         time.Time `description:"更新时间"`
+}
+
+type CompanyNoRenewedAscribeLog struct {
+	NoRenewedAscribeId int       `orm:"column(no_renewed_ascribe_id);pk" description:"主键ID"`
+	CompanyAscribeId   int       `description:"归因ID"`
+	AscribeContent     string    `description:"归因说明"`
+	Content            string    `description:"内容说明"`
+	AdminId            int       `description:"管理员ID"`
+	CompanyId          int       `description:"公司ID"`
+	ProductId          int       `description:"产品id"`
+	CreateTime         time.Time `description:"创建时间"`
+	ModifyTime         time.Time `description:"更新时间"`
+}
+
+type CompanyNoRenewedAscribeResp struct {
+	NoRenewedAscribeId int    `description:"主键ID"`
+	CompanyAscribeId   int    `description:"归因ID"`
+	AscribeContent     string `description:"归因说明"`
+	ProductId          int    `description:"产品id"`
+	Content            string `description:"内容说明"`
+	AdminId            int    `description:"管理员ID"`
+	CompanyId          int    `description:"公司ID"`
+	CreateTime         string `description:"创建时间"`
+	ModifyTime         string `description:"更新时间"`
+}
+type CompanyNoRenewedAscribeListResp struct {
+	List []*CompanyNoRenewedAscribeResp
+}
+
+type CompanyNoRenewedAscribeDetailResp struct {
+	Detail *CompanyNoRenewedAscribeResp
+}
+
+type CompanyNoRenewedAscribeReq struct {
+	CompanyAscribeId int    `description:"归因ID"`
+	ProductId        int    `description:"产品id"`
+	Content          string `description:"内容说明"`
+	CompanyId        int    `description:"公司ID"`
+}
+
+// 添加
+func AddCompanyNoRenewedAscribe(item *CompanyNoRenewedAscribe, itemLog *CompanyNoRenewedAscribeLog) (err error) {
+	o := orm.NewOrm()
+	to, err := o.Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		if err != nil {
+			_ = to.Rollback()
+		} else {
+			_ = to.Commit()
+		}
+	}()
+	_, err = to.Insert(item)
+	if err != nil {
+		return
+	}
+
+	_, err = to.Insert(itemLog)
+	return
+}
+
+// 修改
+func UpdateCompanyNoRenewedAscribe(item *CompanyNoRenewedAscribe, itemLog *CompanyNoRenewedAscribeLog) (err error) {
+	o := orm.NewOrm()
+	to, err := o.Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		if err != nil {
+			_ = to.Rollback()
+		} else {
+			_ = to.Commit()
+		}
+	}()
+	updateParams := make(map[string]interface{})
+	updateParams["CompanyAscribeId"] = item.CompanyAscribeId
+	updateParams["ModifyTime"] = item.ModifyTime
+	updateParams["Content"] = item.Content
+	updateParams["AscribeContent"] = item.AscribeContent
+	ptrStructOrTableName := "company_no_renewed_ascribe"
+	whereParam := map[string]interface{}{"company_id": item.CompanyId, "product_id": item.ProductId}
+	qs := to.QueryTable(ptrStructOrTableName)
+	for expr, exprV := range whereParam {
+		qs = qs.Filter(expr, exprV)
+	}
+	_, err = qs.Update(updateParams)
+	if err != nil {
+		return
+	}
+	_, err = to.Insert(itemLog)
+	return
+}
+
+// 获取数量
+func GetCompanyNoRenewedAscribeCount(condition string, pars []interface{}) (count int, err error) {
+	sqlCount := ` SELECT COUNT(1) AS count  FROM company_no_renewed_ascribe as a WHERE 1= 1  `
+	if condition != "" {
+		sqlCount += condition
+	}
+	o := orm.NewOrm()
+	err = o.Raw(sqlCount, pars).QueryRow(&count)
+	return
+}
+
+// 通过ID获取详情
+func GetCygxProductInteriorDetail(companyId, productId int) (item *CompanyNoRenewedAscribeResp, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM company_no_renewed_ascribe   WHERE company_id=?  AND product_id = ? `
+	err = o.Raw(sql, companyId, productId).QueryRow(&item)
+	return
+}
+
+// 列表
+func GetCompanyNoRenewedAscribeList(condition string, pars []interface{}, startSize, pageSize int) (items []*CompanyNoRenewedAscribeResp, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM company_no_renewed_ascribe as a  WHERE 1= 1 `
+	if condition != "" {
+		sql += condition
+	}
+	if startSize+pageSize > 0 {
+		sql += ` LIMIT ?,?  `
+		_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
+	}
+	_, err = o.Raw(sql, pars).QueryRows(&items)
+	return
+}

+ 68 - 0
models/company/company_no_renewed_note.go

@@ -0,0 +1,68 @@
+package company
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+type CompanyNoRenewedNote struct {
+	NoRenewedNoteId int       `orm:"column(no_renewed_note_id);pk" description:"主键ID"`
+	Content         string    `description:"内容说明"`
+	AdminId         int       `description:"管理员ID"`
+	CompanyId       int       `description:"公司ID"`
+	ProductId       int       `description:"产品id"`
+	CreateTime      time.Time `description:"创建时间"`
+	ModifyTime      time.Time `description:"更新时间"`
+}
+
+type CompanyNoRenewedNoteResp struct {
+	NoRenewedNoteId int    `orm:"column(no_renewed_note_id);pk" description:"主键ID"`
+	CompanyId       int    `description:"公司ID"`
+	Content         string `description:"内容说明"`
+	AdminId         int    `description:"管理员ID"`
+	ProductId       int    `description:"产品id"`
+	CreateTime      string `description:"创建时间"`
+}
+
+type CompanyNoRenewedNoteListResp struct {
+	List []*CompanyNoRenewedNoteResp
+}
+
+type CompanyNoRenewedNoteReq struct {
+	Content   string `description:"内容说明"`
+	CompanyId int    `description:"公司ID"`
+	ProductId int    `description:"产品id"`
+}
+
+// 添加
+func AddCompanyNoRenewedNote(item *CompanyNoRenewedNote) (err error) {
+	o := orm.NewOrm()
+	_, err = o.Insert(item)
+	return
+}
+
+// 获取数量
+func GetCompanyNoRenewedNoteCount(condition string, pars []interface{}) (count int, err error) {
+	sqlCount := ` SELECT COUNT(1) AS count  FROM company_no_renewed_note as a WHERE 1= 1  `
+	if condition != "" {
+		sqlCount += condition
+	}
+	o := orm.NewOrm()
+	err = o.Raw(sqlCount, pars).QueryRow(&count)
+	return
+}
+
+// 列表
+func GetCompanyNoRenewedNoteList(condition string, pars []interface{}, startSize, pageSize int) (items []*CompanyNoRenewedNoteResp, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM company_no_renewed_note as a  WHERE 1= 1 `
+	if condition != "" {
+		sql += condition
+	}
+	if startSize+pageSize > 0 {
+		sql += ` LIMIT ?,?  `
+		_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
+	}
+	_, err = o.Raw(sql, pars).QueryRows(&items)
+	return
+}

+ 21 - 71
models/cygx/activity.go

@@ -25,7 +25,7 @@ type ActivityList struct {
 
 // 列表
 func GetActivityList() (items []*ActivityType, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT * FROM cygx_activity_type ORDER BY sort DESC`
 	_, err = o.Raw(sql).QueryRows(&items)
 	return
@@ -45,7 +45,7 @@ type ActivityCcustomerTypeList struct {
 
 // 列表
 func GetActivityCcustomerTypeList(condition string) (items []*ActivityCcustomerType, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT * FROM cygx_customer_type WHERE  1= 1 `
 	if condition != "" {
 		sql += condition
@@ -85,6 +85,8 @@ type ActivityRep struct {
 	VoiceList               []*CygxActivityVoiceReq
 	VideoDetail             *CygxActivityVideoReq
 	ListImgToText           []*AliyunOcrTextActivityResp `description:"识图建会的会议信息列表"`
+	BackgroundImg           string                       `description:"封面图片"`
+	ShareImg                string                       `description:"分享图片"`
 }
 
 // 活动添加、修改入参
@@ -166,6 +168,8 @@ type ActivityDetail struct {
 	PointsSet                 *CygxActivityPointsSetRsq `description:"研选扣点明细"`
 	IsShowHz                  int                       `description:"是否同时在弘则展示  1是,0否"`
 	ChartPermissionNameDeputy string                    `description:"副行业名称"`
+	BackgroundImg             string                    `description:"封面图片"`
+	ShareImg                  string                    `description:"分享图片"`
 }
 
 type ActivityDetailRep struct {
@@ -251,7 +255,7 @@ type CygxActivityEditDetail struct {
 
 // 添加活动
 func AddActivity(items []*CygxActivity, industrialActivityItems [][]*CygxIndustrialActivityGroupManagement, subjectActivityItems [][]*CygxIndustrialActivityGroupSubject, itemPointsSet *CygxActivityPointsSet) (newId int64, activityIdArr []int, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	to, err := o.Begin()
 	if err != nil {
 		return
@@ -318,7 +322,7 @@ func AddActivity(items []*CygxActivity, industrialActivityItems [][]*CygxIndustr
 
 // 通过纪要ID获取活动详情
 func GetAddActivityInfoById(ActivityId int) (item *ActivityDetail, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
 			a.*,t.permission_type
 		FROM
@@ -331,8 +335,8 @@ func GetAddActivityInfoById(ActivityId int) (item *ActivityDetail, err error) {
 }
 
 // 修改
-func EditActivity(item *CygxActivity, oldPublishStatus int, industrialActivityItems [][]*CygxIndustrialActivityGroupManagement, subjectActivityItems [][]*CygxIndustrialActivityGroupSubject, itemVoice *CygxActivityVoice, itemVideo *CygxActivityVideo, itemPointsSet *CygxActivityPointsSet) (voiceId, videoId int64, err error) {
-	o := orm.NewOrm()
+func EditActivity(item *CygxActivity, oldPublishStatus int, industrialActivityItems [][]*CygxIndustrialActivityGroupManagement, subjectActivityItems [][]*CygxIndustrialActivityGroupSubject, itemPointsSet *CygxActivityPointsSet) (err error) {
+	o := orm.NewOrmUsingDB("hz_cygx")
 	to, err := o.Begin()
 	if err != nil {
 		return
@@ -458,40 +462,6 @@ func EditActivity(item *CygxActivity, oldPublishStatus int, industrialActivityIt
 		}
 	}
 
-	//音频处理
-	//删除旧的音频
-	sql = "DELETE FROM cygx_activity_voice WHERE activity_id=?"
-	_, err = to.Raw(sql, activityId).Exec()
-	//插入新的音频
-	//if len(itemVoiceList) > 0 {
-	//	voiceId, err := to.InsertMulti(len(itemVoiceList), itemVoiceList)
-	//	if err != nil {
-	//		return
-	//	}
-	//}
-	if itemVoice != nil {
-		if itemVoice.VoiceUrl != "" {
-			voiceId, err = to.Insert(itemVoice)
-			if err != nil {
-				return
-			}
-		}
-	}
-
-	//视频处理
-	//删除旧的视频
-	sql = "DELETE FROM cygx_activity_video WHERE activity_id=?"
-	_, err = to.Raw(sql, activityId).Exec()
-	//插入新的音频
-	if itemVideo != nil {
-		if itemVideo.VideoUrl != "" {
-			videoId, err = to.Insert(itemVideo)
-			if err != nil {
-				return
-			}
-		}
-	}
-
 	{
 		//处理研选扣点子表
 		if itemPointsSet.PointsObject == "" {
@@ -543,7 +513,7 @@ func EditActivity(item *CygxActivity, oldPublishStatus int, industrialActivityIt
 
 // 修改
 func EditActivityStatus(activityId int) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	to, err := o.Begin()
 	if err != nil {
 		return
@@ -606,7 +576,7 @@ type GetCygxActivityListRep struct {
 
 // 列表
 func GetActivityListAll(condition string, pars []interface{}, startSize, pageSize int) (items []*CygxActivityList, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT * FROM cygx_activity as art WHERE 1= 1 `
 	if condition != "" {
 		sql += condition
@@ -622,14 +592,14 @@ func GetActivityCount(condition string, pars []interface{}) (count int, err erro
 	if condition != "" {
 		sqlCount += condition
 	}
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	err = o.Raw(sqlCount, pars).QueryRow(&count)
 	return
 }
 
 // 获取数量
 func GetActivityCountById(activityId int) (count int, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sqlCount := `SELECT COUNT(1) AS count  FROM cygx_activity WHERE activity_id = ?`
 	err = o.Raw(sqlCount, activityId).QueryRow(&count)
 	return
@@ -637,7 +607,7 @@ func GetActivityCountById(activityId int) (count int, err error) {
 
 // 修改发布状态
 func ActivityPublishAndCancel(item *CygxActivity) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	to, err := o.Begin()
 	if err != nil {
 		return
@@ -656,32 +626,12 @@ func ActivityPublishAndCancel(item *CygxActivity) (err error) {
 	if err != nil {
 		return
 	}
-	//if item.PublishStatus == 0 {
-	//	//删除报名信息
-	//	sql = ` DELETE FROM cygx_activity_signup WHERE activity_id = ?`
-	//	_, err = to.Raw(sql, activityId).Exec()
-	//	if err != nil {
-	//		return
-	//	}
-	//	//删除会议提醒信息
-	//	sql = ` DELETE FROM cygx_activity_meeting_reminder WHERE activity_id = ?`
-	//	_, err = to.Raw(sql, activityId).Exec()
-	//	if err != nil {
-	//		return
-	//	}
-	//	//删除我的日程信息
-	//	sql = ` DELETE FROM cygx_my_schedule WHERE activity_id = ?`
-	//	_, err = to.Raw(sql, activityId).Exec()
-	//	if err != nil {
-	//		return
-	//	}
-	//}
 	return
 }
 
 // 删除数据
 func DeleteActivity(activityId int) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := ` DELETE FROM cygx_activity WHERE activity_id = ?`
 	_, err = o.Raw(sql, activityId).Exec()
 	return
@@ -689,7 +639,7 @@ func DeleteActivity(activityId int) (err error) {
 
 // 更新手动匹配的活动匹配关键词,建立匹配关系
 func UpdateActivityRoadshowTitle(activityId int, roadshowTitle, roadshowId string) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := ` UPDATE cygx_activity SET  jmcj_roadshow_title=?,jmcj_activity_id=?   WHERE activity_id=?`
 	_, err = o.Raw(sql, roadshowTitle, roadshowId, activityId).Exec()
 	return
@@ -697,7 +647,7 @@ func UpdateActivityRoadshowTitle(activityId int, roadshowTitle, roadshowId strin
 
 // 列表
 func GetArticleListByCategoryId(categoryIds, industrialSubjectIdS string) (items []*CygxArticle, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
 				* 
 			FROM
@@ -724,7 +674,7 @@ func GetactivityIdsByLabel(name string) (activityIds string, err error) {
 				cygx_activity AS s 
 			WHERE
 				label LIKE '%` + name + `%' `
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	err = o.Raw(sql).QueryRow(&activityIds)
 	return
 }
@@ -732,7 +682,7 @@ func GetactivityIdsByLabel(name string) (activityIds string, err error) {
 // 根据易董的建会信息,修改腾讯参会信息
 func UpdateCygxActivityTencentConferenceNumber(item *ActivityDetail) (err error) {
 	sql := `UPDATE cygx_activity SET  tencent_conference_number=?,yidong_activity_id_by_cygx=?, body = ?  WHERE activity_id=? `
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	_, err = o.Raw(sql, item.TencentConferenceNumber, item.YidongActivityIdByCygx, item.Body, item.ActivityId).Exec()
 	return
 }
@@ -740,7 +690,7 @@ func UpdateCygxActivityTencentConferenceNumber(item *ActivityDetail) (err error)
 // 添加场所码
 func UpdateCygxActivitySigninImg(signinImg string, activityId int) (err error) {
 	sql := `UPDATE cygx_activity SET  signin_img=?  WHERE activity_id=? `
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	_, err = o.Raw(sql, signinImg, activityId).Exec()
 	return
 }

+ 18 - 39
models/cygx/activity_appointment.go

@@ -3,7 +3,6 @@ package cygx
 import (
 	"fmt"
 	"github.com/beego/beego/v2/client/orm"
-	"hongze/hz_crm_api/utils"
 	"time"
 )
 
@@ -24,7 +23,7 @@ type CygxActivityAppointment struct {
 
 // 取消纪要预约
 func CancelcygxActivityAppointment(item *CygxActivityAppointment) (lastId int64, err error) {
-	o, err := orm.NewOrm().Begin()
+	o, err := orm.NewOrmUsingDB("hz_cygx").Begin()
 	if err != nil {
 		return
 	}
@@ -64,16 +63,11 @@ func CancelcygxActivityAppointment(item *CygxActivityAppointment) (lastId int64,
 
 // 预约纪要的人数列表
 func GetCygxAppointmentSummaryList(activityId int, sqlStr string) (item []*CygxAppointmentList, err error) {
-	o := orm.NewOrm()
-	sql := `SELECT s.id,s.activity_id,s.user_id,s.create_time,s.mobile,s.company_id ,u.real_name,c.company_name,a.activity_time,
-			(SELECT p.seller_name from company_product as p WHERE p.company_id = u.company_id  AND  p.product_id = 2 )  AS seller_name,
-			GROUP_CONCAT( DISTINCT p.seller_name SEPARATOR '/' ) AS pseller_name
+	o := orm.NewOrmUsingDB("hz_cygx")
+	sql := `SELECT s.*,a.activity_time
 			FROM
 			cygx_activity_appointment AS s
-			INNER JOIN wx_user AS u ON  u.user_id = s.user_id
 			LEFT JOIN cygx_activity AS a ON a.activity_id = s.activity_id
-			LEFT JOIN company_product AS p ON p.company_id = u.company_id 
-			LEFT JOIN company AS c ON c.company_id = u.company_id 
 			WHERE a.activity_id = ?  ` + sqlStr + `  GROUP BY s.user_id   ORDER BY s.create_time DESC `
 	_, err = o.Raw(sql, activityId).QueryRows(&item)
 	return
@@ -81,12 +75,10 @@ func GetCygxAppointmentSummaryList(activityId int, sqlStr string) (item []*CygxA
 
 // 预约纪要的人数数量
 func GetCygxAppointmentSummaryCount(activityId int, sqlStr string) (count int, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT COUNT(*) FROM
 			cygx_activity_appointment AS s
-			INNER  JOIN wx_user AS u ON  u.user_id = s.user_id
 			LEFT JOIN cygx_activity AS a ON a.activity_id = s.activity_id
-			LEFT JOIN company_product AS p ON p.company_id = u.company_id 
 			WHERE
 			s.activity_id = ? ` + sqlStr + `
             GROUP BY s.user_id)`
@@ -97,7 +89,7 @@ func GetCygxAppointmentSummaryCount(activityId int, sqlStr string) (count int, e
 
 // 通过ID获取预约纪要详情
 func GetCygxAppointmentSummaryInfoById(id int) (item *CygxActivityAppointment, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT * FROM cygx_activity_appointment  WHERE id=?`
 	err = o.Raw(sql, id).QueryRow(&item)
 	return
@@ -106,14 +98,14 @@ func GetCygxAppointmentSummaryInfoById(id int) (item *CygxActivityAppointment, e
 // 获取某一用户的报名的数量
 func GetUserCygxActivityAppointmentCount(uid, activityId int) (count int, err error) {
 	sqlCount := `SELECT COUNT(1) AS count FROM cygx_activity_appointment  WHERE  user_id=?  AND   activity_id =? `
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	err = o.Raw(sqlCount, uid, activityId).QueryRow(&count)
 	return
 }
 
 // 添加预约纪要
 func AddCygxActivityAppointmentUser(items []*CygxActivityAppointment) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	to, err := o.Begin()
 	if err != nil {
 		return
@@ -167,7 +159,7 @@ type CygxAppointmentMobileList struct {
 
 // 通过活动ID获取预约纪要的人数列表
 func GetCygxAppointmentSummaryListBySubjectId(subjectIds string) (item []*CygxAppointmentMobileList, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
 			ap.mobile,
 			ap.activity_id,
@@ -191,30 +183,17 @@ func GetCygxAppointmentSummaryListBySubjectId(subjectIds string) (item []*CygxAp
 
 // 获取预约活动纪要的的用户的openID
 func GetActivityAppointmentOpenIdList(activityId int) (items []*OpenIdList, err error) {
+	o := orm.NewOrmUsingDB("hz_cygx")
 	var sql string
-	if utils.RunMode == "release" {
-		sql = `SELECT DISTINCT cr.open_id,u.user_id
+	sql = `SELECT DISTINCT
+				u.open_id,
+				u.cygx_user_id AS user_id 
 			FROM
-			cygx_activity_appointment AS m
-			INNER JOIN user_record AS u ON u.bind_account = m.mobile 
-			INNER JOIN cygx_user_record AS cr ON cr.union_id = u.union_id 
-			WHERE m.activity_id = ? AND u.create_platform = 4 `
-	} else {
-		sql = `SELECT
-			u.open_id,
-			u.user_id 
-		FROM
-			cygx_activity_appointment AS s
-			INNER JOIN wx_user AS wx ON wx.user_id = s.user_id
-			INNER JOIN user_record AS u ON u.bind_account = wx.mobile
-			INNER JOIN company_product AS p ON p.company_id = wx.company_id 
-		WHERE
-			s.activity_id = ? 
-			AND u.create_platform = 1 
-			AND p.STATUS IN ( '正式', '试用', '永续' ) 
-		GROUP BY
-			u.open_id`
-	}
-	_, err = orm.NewOrm().Raw(sql, activityId).QueryRows(&items)
+				cygx_activity_appointment AS m
+				INNER JOIN cygx_user_record AS u ON u.cygx_bind_account = m.mobile 
+				AND u.cygx_user_id = m.user_id 
+			WHERE
+				m.activity_id < ? `
+	_, err = o.Raw(sql, activityId).QueryRows(&items)
 	return
 }

+ 1 - 1
models/cygx/activity_ask_email.go

@@ -11,7 +11,7 @@ type AskEmailRep struct {
 }
 
 func GetAskEmail() (item []*AskEmailRep, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT * FROM cygx_activity_ask_email`
 	_, err = o.Raw(sql).QueryRows(&item)
 	return

+ 15 - 27
models/cygx/activity_attendance_detail.go

@@ -54,7 +54,7 @@ type AttendanceDetail struct {
 }
 
 func AddAttendancDetail(items []*CygxActivityAttendanceDetail, activityId int, mobileStr string) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	to, err := o.Begin()
 	if err != nil {
 		return
@@ -106,7 +106,7 @@ func AddAttendancDetail(items []*CygxActivityAttendanceDetail, activityId int, m
 }
 
 func GetAttendanceDetailList(activityId int, sqlStr string) (item []*AttendanceDetail, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT s.id,s.activity_id,p.company_name,s.mobile,s.is_meeting,s.outbound_mobile,s.country_code,u.real_name,d.first_meeting_time,d.last_meeting_time,d.meeting_type_str,d.meeting_authentication,d.meeting_status_str,d.duration,d.userid_entity,
 			GROUP_CONCAT( DISTINCT p.seller_name SEPARATOR '/' ) AS pseller_name
 			FROM
@@ -126,14 +126,11 @@ func GetAttendanceDetailList(activityId int, sqlStr string) (item []*AttendanceD
 }
 
 func GetAttendanceDetailListGroup(activityId int, sqlStr string) (item []*AttendanceDetail, err error) {
-	o := orm.NewOrm()
-	sql := `SELECT s.id,s.activity_id,p.company_name,s.mobile,s.is_meeting,s.outbound_mobile,s.country_code,s.real_name,d.first_meeting_time,d.last_meeting_time,d.meeting_type_str,d.meeting_authentication,d.meeting_status_str,d.duration,d.userid_entity,d.userid_entity,
-			GROUP_CONCAT( DISTINCT p.seller_name SEPARATOR '/' ) AS pseller_name
+	o := orm.NewOrmUsingDB("hz_cygx")
+	sql := `SELECT s.*,d.first_meeting_time,d.last_meeting_time,d.meeting_type_str,d.meeting_authentication,d.meeting_status_str,d.duration,d.userid_entity,d.userid_entity
 			FROM
 			cygx_activity_signup AS s
-			INNER  JOIN wx_user AS u ON u.user_id = s.user_id
 			LEFT JOIN cygx_activity AS a ON a.activity_id = s.activity_id
-			LEFT JOIN company_product AS p ON p.company_id = s.company_id 
 			LEFT JOIN cygx_activity_attendance_detail AS d ON ( d.mobile = s.outbound_mobile   OR d.mobile = s.mobile )  AND s.activity_id = d.activity_id
 			WHERE 1 = 1 
 			AND s.do_fail_type = 0 
@@ -144,13 +141,11 @@ func GetAttendanceDetailListGroup(activityId int, sqlStr string) (item []*Attend
 }
 
 func GetAttendanceDetailListGroupByUser(mobile, sqlStr string) (item []*AttendanceDetail, err error) {
-	o := orm.NewOrm()
-	sql := `SELECT s.id,s.activity_id,p.company_name,s.mobile,s.is_meeting,s.outbound_mobile,s.country_code,s.real_name,s.first_meeting_time,s.last_meeting_time,s.meeting_type_str,s.meeting_authentication,s.meeting_status_str,s.duration,s.userid_entity,s.userid_entity,a.activity_name,a.activity_time_text
+	o := orm.NewOrmUsingDB("hz_cygx")
+	sql := `SELECT s.id,s.activity_id,s.company_name,s.mobile,s.is_meeting,s.outbound_mobile,s.country_code,s.real_name,s.first_meeting_time,s.last_meeting_time,s.meeting_type_str,s.meeting_authentication,s.meeting_status_str,s.duration,s.userid_entity,s.userid_entity,a.activity_name,a.activity_time_text
 			FROM
 			cygx_activity_signup_detail AS s
-			INNER  JOIN wx_user AS u ON u.mobile = s.mobile
 			INNER JOIN cygx_activity AS a ON a.activity_id = s.activity_id
-			LEFT JOIN company_product AS p ON p.company_id = s.company_id
 			WHERE 1 = 1 
 			AND s.do_fail_type = 0 
 			AND s.is_cancel = 0
@@ -160,28 +155,21 @@ func GetAttendanceDetailListGroupByUser(mobile, sqlStr string) (item []*Attendan
 }
 
 func GetAttendanceDetailList2(activityId int, sqlStr string) (item []*AttendanceDetail, err error) {
-	o := orm.NewOrm()
-	sql := `SELECT u.user_id,d.activity_id,u.real_name,u.company_id,d.first_meeting_time,d.last_meeting_time,d.meeting_type_str,d.meeting_authentication,d.meeting_status_str,d.mobile,d.duration,p.company_name,d.position,d.userid_entity,
-			GROUP_CONCAT( DISTINCT p.seller_name SEPARATOR '/' ) AS pseller_name 
+	o := orm.NewOrmUsingDB("hz_cygx")
+	sql := `SELECT d.activity_id,d.real_name,d.company_id,d.first_meeting_time,d.last_meeting_time,d.meeting_type_str,d.meeting_authentication,d.meeting_status_str,d.mobile,d.duration,d.company_name,d.position,d.userid_entity
 			FROM
 			cygx_activity_attendance_detail AS d
-			INNER JOIN wx_user AS u ON u.mobile = d.mobile
-			INNER JOIN company_product AS p ON p.company_id = u.company_id 
 			WHERE 1 = 1 AND d.activity_id = ? AND is_meeting_str = 1 AND d.userid_entity != 3 AND u.mobile != '' ` + sqlStr + ` GROUP BY d.mobile`
 	_, err = o.Raw(sql, activityId).QueryRows(&item)
 	return
 }
 
 func GetAttendanceDetailList3(activityId int, sqlStr string) (item []*AttendanceDetail, err error) {
-	o := orm.NewOrm()
-	sql := `SELECT u.user_id,d.activity_id,d.real_name,u.company_id,d.first_meeting_time,d.last_meeting_time,d.meeting_type_str,d.meeting_authentication,d.meeting_status_str,d.mobile,d.duration,d.company_name,d.position,d.userid_entity,
-			GROUP_CONCAT( DISTINCT p.seller_name SEPARATOR '/' ) AS pseller_name 
+	o := orm.NewOrmUsingDB("hz_cygx")
+	sql := `SELECT d.activity_id,d.real_name,d.company_id,d.first_meeting_time,d.last_meeting_time,d.meeting_type_str,d.meeting_authentication,d.meeting_status_str,d.mobile,d.duration,d.company_name,d.position,d.userid_entity
 			FROM
 			cygx_activity_attendance_detail AS d
-			LEFT  JOIN wx_user AS u ON u.mobile = d.mobile
-			LEFT JOIN company_product AS p ON p.company_id = u.company_id
 			WHERE 1 = 1 AND d.activity_id = ?  AND d.userid_entity != 3 AND d.crm_company_map_status_id != 1 ` + sqlStr + ` GROUP BY d.mobile`
-	//fmt.Println(sql)
 	_, err = o.Raw(sql, activityId).QueryRows(&item)
 	return
 }
@@ -292,7 +280,7 @@ type CompanyMeetRep struct {
 }
 
 func GetCygxActivityAttendanceDetailByCompanyId(mobiles string) (list []*CompanyMeetRep, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
 			a.*,
 			s.mobile,
@@ -325,7 +313,7 @@ func GetCygxActivityAttendanceDetailByCompanyId(mobiles string) (list []*Company
 }
 
 func GetCygxActivityOfflineMeetingDetailByCompanyId(mobiles string) (list []*CompanyMeetRep, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
 			a.*,s.mobile,s.email,s.real_name
 		FROM
@@ -349,7 +337,7 @@ func GetCygxActivityOfflineMeetingDetailByCompanyId(mobiles string) (list []*Com
 }
 
 func GetCompanyActivityCount(companyId int) (list []*CompanyMeetRep, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
 			a.chart_permission_name,
 			date_format( a.activity_time, '%Y-%m' ) AS activity_time
@@ -366,7 +354,7 @@ func GetCompanyActivityCount(companyId int) (list []*CompanyMeetRep, err error)
 }
 
 func GetCygxActivityOfflineMeetingCoount(companyId int) (list []*CompanyMeetRep, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
 			a.chart_permission_name,
 			date_format( a.activity_time, '%Y-%m' ) AS activity_time
@@ -381,7 +369,7 @@ func GetCygxActivityOfflineMeetingCoount(companyId int) (list []*CompanyMeetRep,
 
 // 列表
 func GetCygxActivityAttendanceDetailList(condition string, pars []interface{}, startSize, pageSize int) (items []*CygxActivityAttendanceDetail, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT * FROM cygx_activity_attendance_detail as a WHERE 1= 1 `
 	if condition != "" {
 		sql += condition

+ 2 - 2
models/cygx/activity_fastsearch_keywords.go

@@ -27,9 +27,9 @@ type ActivityFastsearchKeywordsListResp struct {
 	List []*ActivityFastsearchKeywordsResp
 }
 
-//列表
+// 列表
 func GetActivityFastsearchKeywordsList() (items []*ActivityFastsearchKeywordsResp, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT f.*,
 			GROUP_CONCAT( DISTINCT m.key_word SEPARATOR ',' ) AS mirror_word 
 			FROM

+ 12 - 27
models/cygx/activity_help_ask.go

@@ -2,7 +2,6 @@ package cygx
 
 import (
 	"github.com/beego/beego/v2/client/orm"
-	"hongze/hz_crm_api/utils"
 )
 
 type ActivityHelpAsk struct {
@@ -22,10 +21,9 @@ type ActivityHelpAskListResp struct {
 
 // 列表
 func GetActivityHelpAskList(activityId int) (items []*ActivityHelpAsk, err error) {
-	o := orm.NewOrm()
-	sql := `SELECT k.*,u.real_name
+	o := orm.NewOrmUsingDB("hz_cygx")
+	sql := `SELECT k.*
 			FROM cygx_activity_help_ask  as k
-			INNER JOIN wx_user as u ON u.mobile = k.mobile
 			WHERE activity_id = ? ORDER BY create_time DESC`
 	_, err = o.Raw(sql, activityId).QueryRows(&items)
 	return
@@ -33,30 +31,17 @@ func GetActivityHelpAskList(activityId int) (items []*ActivityHelpAsk, err error
 
 // 获取活动带问的用户的openID
 func GetActivityHelpAskOpenIdList(activityId int) (items []*OpenIdList, err error) {
+	o := orm.NewOrmUsingDB("hz_cygx")
 	var sql string
-	if utils.RunMode == "release" {
-		sql = `SELECT DISTINCT cr.open_id,u.user_id
+	sql = `SELECT DISTINCT
+				u.open_id,
+				u.cygx_user_id AS user_id 
 			FROM
-			cygx_activity_help_ask AS m
-			INNER JOIN user_record AS u ON u.bind_account = m.mobile 
-			INNER JOIN cygx_user_record AS cr ON cr.union_id = u.union_id 
-			WHERE m.activity_id = ? AND u.create_platform = 4 `
-	} else {
-		sql = `SELECT
-			u.open_id,
-			u.user_id 
-		FROM
-			cygx_activity_help_ask AS s
-			INNER JOIN wx_user AS wx ON wx.user_id = s.user_id
-			INNER JOIN user_record AS u ON u.bind_account = wx.mobile
-			INNER JOIN company_product AS p ON p.company_id = wx.company_id 
-		WHERE
-			s.activity_id = ? 
-			AND u.create_platform = 1 
-			AND p.STATUS IN ( '正式', '试用', '永续' ) 
-		GROUP BY
-			u.open_id`
-	}
-	_, err = orm.NewOrm().Raw(sql, activityId).QueryRows(&items)
+				cygx_activity_help_ask AS m
+				INNER JOIN cygx_user_record AS u ON u.cygx_bind_account = m.mobile 
+				AND u.cygx_user_id = m.user_id 
+			WHERE
+				m.activity_id < ? `
+	_, err = o.Raw(sql, activityId).QueryRows(&items)
 	return
 }

+ 33 - 195
models/cygx/activity_meet.go

@@ -1,7 +1,6 @@
 package cygx
 
 import (
-	"fmt"
 	"hongze/hz_crm_api/utils"
 
 	//"hongze/hz_crm_api/models"
@@ -52,17 +51,17 @@ func GetCygxMeetCount(condition string, pars []interface{}) (count int, err erro
 	if condition != "" {
 		sqlCount += condition
 	}
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	err = o.Raw(sqlCount, pars).QueryRow(&count)
 	return
 }
 
 // 列表
 func GetCygxMeetListAll(condition string, pars []interface{}, startSize, pageSize int) (items []*CygxMeetList, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT 
-		( SELECT COUNT( 1 ) FROM cygx_activity_signup AS s INNER JOIN wx_user as u ON  u.user_id = s.user_id   WHERE s.activity_id = a.activity_id AND s.is_cancel = 0 AND s.do_fail_type = 0 AND  s.company_id != 16 ) AS signup_people_num,
-		( SELECT COUNT( 1 ) FROM cygx_activity_signin AS s INNER JOIN wx_user as u ON  u.user_id = s.user_id   WHERE s.activity_id = a.activity_id AND s.company_id <= 1  ) AS potential_people_num,
+		( SELECT COUNT( 1 ) FROM cygx_activity_signup AS s    WHERE s.activity_id = a.activity_id AND s.is_cancel = 0 AND s.do_fail_type = 0 AND  s.company_id != 16 ) AS signup_people_num,
+		( SELECT COUNT( 1 ) FROM cygx_activity_signin AS s   WHERE s.activity_id = a.activity_id AND s.company_id <= 1  ) AS potential_people_num,
 	    ( SELECT COUNT( DISTINCT d.mobile  ) FROM cygx_activity_attendance_detail  AS d  WHERE d.activity_id = a.activity_id  AND( is_meeting_str = 1 or d.company_id <= 1) ) AS meet_people_num,
 	    ( SELECT COUNT( 1 ) FROM cygx_activity_offline_meeting_detail AS o WHERE o.activity_id = a.activity_id AND is_meeting = 1  ) AS omeet_people_num,
 		a.*
@@ -88,14 +87,6 @@ type CygxActivityMeet struct {
 	Source      int       `description:"来源,1小程序,2后台添加"`
 }
 
-// 获取用户报名数量
-func GetActivityMeetCount(uid, activityId int) (count int, err error) {
-	sqlCount := `SELECT COUNT(1) AS count FROM cygx_activity_signup WHERE is_cancel=0  AND activity_id=? `
-	o := orm.NewOrm()
-	err = o.Raw(sqlCount, uid, activityId).QueryRow(&count)
-	return
-}
-
 // 报名信息Excel下载
 type MeetExportRep struct {
 	Mobile      string `description:"手机号"`
@@ -115,20 +106,18 @@ type SignUpRestrictUid struct {
 
 // 到会操作
 func MeetingDo(meetingUids, noMeetingUids string, ActivityId int, items []*CygxActivityOfflineMeetingDetail) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	to, err := o.Begin()
 	if err != nil {
 		return
 	}
 	defer func() {
 		if err != nil {
-			fmt.Println(err)
 			_ = to.Rollback()
 		} else {
 			_ = to.Commit()
 		}
 	}()
-	fmt.Println("ActivityId", ActivityId)
 	//修改报名表的参会记录
 	sql := `UPDATE cygx_activity_signup SET is_meeting = 0  WHERE activity_id =? `
 	_, err = to.Raw(sql, ActivityId).Exec()
@@ -180,10 +169,9 @@ func GetCygxBreakAppointmentCount(condition string, pars []interface{}) (count i
 	sqlCount := ` SELECT COUNT(1)  count FROM ( SELECT u.user_id 
 				FROM
 				cygx_activity_signup_break AS s
-				INNER JOIN wx_user AS u ON u.user_id = s.user_id
 				INNER JOIN cygx_activity AS a ON a.activity_id = s.activity_id
-				INNER JOIN company_product AS p ON p.company_id = u.company_id WHERE 1 = 1 ` + condition + ` GROUP BY u.user_id) AS c  `
-	o := orm.NewOrm()
+				 WHERE 1 = 1 ` + condition + ` GROUP BY s.user_id) AS c  `
+	o := orm.NewOrmUsingDB("hz_cygx")
 	err = o.Raw(sqlCount, pars).QueryRow(&count)
 	return
 }
@@ -207,37 +195,31 @@ type GetCygxBreakAppointmentListRep struct {
 }
 
 func GetCygxBreakAppointmentList(condition string, pars []interface{}, startSize, pageSize int) (items []*CygxBreakAppointmentList, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
-			( SELECT COUNT( 1 ) FROM cygx_activity_restrict_signup AS sig WHERE sig.user_id = u.user_id AND sig.is_restrict = 1 ) AS is_restrict,
+			( SELECT COUNT( 1 ) FROM cygx_activity_restrict_signup AS sig WHERE sig.is_restrict = 1 ) AS is_restrict,
 			(
 			SELECT
 				COUNT( 1 ) count 
 			FROM
 				cygx_activity_signup_break AS s
-				INNER JOIN cygx_activity AS a ON a.activity_id = s.activity_id 
-			WHERE
-				1 = 1
-				AND s.user_id = u.user_id 
+				INNER JOIN cygx_activity AS a ON a.activity_id = s.activity_id
 			) AS break_appointment_num,
-			u.real_name,
-			u.mobile,
-			u.user_id,
-			u.company_id,
-			c.company_name,
+			s.real_name,
+			s.mobile,
+			s.user_id,
+			s.company_id,
+			s.company_name,
 			s.activity_id
 		FROM
 			cygx_activity_signup_break AS s
-			INNER JOIN wx_user AS u ON u.user_id = s.user_id
 			INNER JOIN cygx_activity AS a ON a.activity_id = s.activity_id
-			INNER JOIN company_product AS p ON p.company_id = u.company_id 
-			INNER JOIN company AS c ON c.company_id = u.company_id 
 		WHERE
 			1 = 1 `
 	if condition != "" {
 		sql += condition
 	}
-	sql += ` GROUP BY u.user_id ORDER BY break_appointment_num DESC,a.activity_time DESC LIMIT ?,?`
+	sql += ` GROUP BY s.user_id ORDER BY break_appointment_num DESC,a.activity_time DESC LIMIT ?,?`
 	_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
 	return
 }
@@ -246,15 +228,14 @@ func GetCygxBreakAppointmentList(condition string, pars []interface{}, startSize
 func GetCygxBreakAppointmentUserCount(uid int) (count int, err error) {
 	sqlCount := ` SELECT  COUNT(1) count
 				FROM
-				cygx_activity_signup AS s 
-                LEFT JOIN wx_user AS u ON u.user_id = s.user_id
+				cygx_activity_signup AS s
 				LEFT JOIN cygx_activity AS a ON a.activity_id = s.activity_id
 				WHERE
 				s.activity_id = a.activity_id 
 				AND s.is_meeting = 0 
 				AND a.is_submit_meeting = 1 
 				AND s.user_id = ? `
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	err = o.Raw(sqlCount, uid).QueryRow(&count)
 	return
 }
@@ -302,7 +283,7 @@ type GetCygxActivityBreakAppointmentRep struct {
 }
 
 func GetCygxActivityBreakAppointmentList(mobile string) (items []*CygxActivityBreakAppointment, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT a.activity_name,a.activity_type_name,a.chart_permission_name,a.activity_time_text
    			FROM cygx_activity AS a
 			INNER JOIN cygx_activity_signup_break AS s ON s.activity_id = a.activity_id 
@@ -314,7 +295,7 @@ func GetCygxActivityBreakAppointmentList(mobile string) (items []*CygxActivityBr
 
 // 报名限制
 func AddSignUpRestrict(uid int) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	to, err := o.Begin()
 	if err != nil {
 		return
@@ -333,24 +314,6 @@ func AddSignUpRestrict(uid int) (err error) {
 	if err != nil {
 		return
 	}
-	//if count == 0 {
-	//	sql = `DELETE  FROM cygx_my_schedule   WHERE user_id=?  AND activity_id=? `
-	//	_, err = to.Raw(sql, item.UserId, item.ActivityId).Exec()
-	//	if err != nil {
-	//		return
-	//	}
-	//}
-	//
-	//sql := `UPDATE cygx_activity_signup SET is_meeting = 0  WHERE activity_id =? `
-	//_, err = to.Raw(sql, uid).Exec()
-	//if err != nil {
-	//	return
-	//}
-	//sql = `UPDATE cygx_activity_signup SET is_meeting = 1  WHERE activity_id =? AND id IN `
-	//_, err = to.Raw(sql, uid).Exec()
-	//if err != nil {
-	//	return
-	//}
 	sql = `UPDATE cygx_activity SET is_submit_meeting = 1  WHERE activity_id = ? `
 	_, err = to.Raw(sql, uid).Exec()
 	return
@@ -371,13 +334,13 @@ func GetUserBreakAppointmentCount(uid int) (count int, err error) {
 				AND s.user_id = ? 
 				GROUP BY
 				s.user_id ) as cn `
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	err = o.Raw(sqlCount, uid).QueryRow(&count)
 	return
 }
 
 func GetCygxActivityRestrictSignupCount(uid int) (count int, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT COUNT(1) AS count FROM cygx_activity_restrict_signup WHERE user_id=? `
 	err = o.Raw(sql, uid).QueryRow(&count)
 	return
@@ -385,7 +348,7 @@ func GetCygxActivityRestrictSignupCount(uid int) (count int, err error) {
 
 // 获取限制报名详情
 func GetCygxActivityRestrictSignupInfo(uid int) (item *CygxActivityRestrictSignup, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT * FROM cygx_activity_restrict_signup  WHERE user_id=?`
 	err = o.Raw(sql, uid).QueryRow(&item)
 	return
@@ -394,7 +357,7 @@ func GetCygxActivityRestrictSignupInfo(uid int) (item *CygxActivityRestrictSignu
 // 修改报名限制状态
 func UpdateCygxActivityRestrictSignup(newIsRestrict, uid int) (err error) {
 	sql := `UPDATE cygx_activity_restrict_signup SET  is_restrict=?  WHERE user_id=? `
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	_, err = o.Raw(sql, newIsRestrict, uid).Exec()
 	return
 }
@@ -413,173 +376,48 @@ type MeetingExportRep struct {
 	Permission          string `description:"开通权限"`
 }
 
-func GetMeetingExport(sqlStr string) (item []*MeetingExportRep, err error) {
-	o := orm.NewOrm()
-	sql := `SELECT s.id, s.company_name,s.mobile,u.real_name,a.activity_name,a.chart_permission_name,a.activity_type_name,a.activity_time_text,p.status,p.seller_name,
-			GROUP_CONCAT( DISTINCT p.seller_name SEPARATOR '/' ) AS pseller_name,
-			GROUP_CONCAT( DISTINCT c.chart_permission_name SEPARATOR '/' ) AS permission,
-			( SELECT COUNT( 1 ) FROM cygx_activity_signup AS s WHERE s.company_id = u.company_id AND s.is_cancel = 0 AND s.fail_type = 0 ) AS company_num,
-			( SELECT COUNT( 1 ) FROM cygx_activity_signup AS s WHERE s.user_id = u.user_id AND s.is_cancel = 0 AND s.fail_type = 0 ) AS user_num 
-			FROM
-			cygx_activity_signup AS s
-			INNER JOIN wx_user AS u ON u.user_id = s.user_id
-			INNER JOIN cygx_activity AS a ON a.activity_id = s.activity_id
-			LEFT JOIN company_product AS p ON p.company_id = s.company_id
-			LEFT JOIN company_report_permission AS re ON re.company_id = s.company_id
-			LEFT JOIN chart_permission AS c ON c.chart_permission_id = re.chart_permission_id 
-			WHERE 1 = 1 
-			AND s.fail_type = 0 
-			AND s.is_cancel = 0 
-			AND p.status IN ( '正式', '试用' ) 
-			AND p.is_suspend = 0 
-			AND c.is_report = 1 ` + sqlStr + ` GROUP BY s.id ORDER BY company_num DESC,user_num DESC,a.activity_time DESC `
-	_, err = o.Raw(sql).QueryRows(&item)
-	return
-}
-
 // 获取报名了的用户IDs
 func GetSignupUserIds(activityId int, uIds string) (signupUids string, err error) {
 	sql := ` SELECT
 			GROUP_CONCAT( DISTINCT s.user_id SEPARATOR ',' ) AS signupUids 
 			FROM cygx_activity_signup AS s
             WHERE s.activity_id = ? AND s.do_fail_type = 0 AND s.user_id not IN (` + uIds + `)`
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	err = o.Raw(sql, activityId).QueryRow(&signupUids)
 	return
 }
 
-// 获取报名了的用户IDs
-func GetSignupUserIdsFromOfflineMeeting(Ids string) (signupUids string, err error) {
-	sql := ` SELECT
-			GROUP_CONCAT( DISTINCT s.user_id SEPARATOR ',' ) AS signupUids 
-			FROM cygx_activity_offline_meeting_detail AS s WHERE s.id  IN (` + Ids + `)`
-	o := orm.NewOrm()
-	err = o.Raw(sql).QueryRow(&signupUids)
-	return
-}
-
-// 线下到会数据
-func GetMeetingExportOffline(condition string) (items []*MeetingExportRep, err error) {
-	o := orm.NewOrm()
-	sql := `SELECT
-			s.id,
-			s.company_name,
-			s.company_id,
-			s.mobile,
-			u.real_name,
-			a.activity_name,
-			a.chart_permission_name,
-			a.activity_type_name,
-			a.activity_time_text,
-			p.status,
-			p.seller_name,
-			GROUP_CONCAT( DISTINCT p.seller_name SEPARATOR '/' ) AS pseller_name,
-			GROUP_CONCAT( DISTINCT c.chart_permission_name SEPARATOR '/' ) AS permission,
-			( SELECT COUNT( 1 ) FROM cygx_activity_offline_meeting_detail AS s WHERE s.company_id = u.company_id  AND s.is_meeting = 1 ) AS company_num,
-			( SELECT COUNT( 1 ) FROM cygx_activity_offline_meeting_detail AS s WHERE s.user_id = u.user_id    AND s.is_meeting = 1 ) AS user_num 
-		FROM
-			cygx_activity_offline_meeting_detail AS s
-			INNER JOIN wx_user AS u ON u.user_id = s.user_id
-			INNER JOIN cygx_activity AS a ON a.activity_id = s.activity_id
-			LEFT JOIN company_product AS p ON p.company_id = s.company_id
-			LEFT JOIN company_report_permission AS re ON re.company_id = s.company_id
-			LEFT JOIN chart_permission AS c ON c.chart_permission_id = re.chart_permission_id 
-		WHERE
-			1 = 1 
-			AND p.status IN ( '正式', '试用' ) 
-			AND p.is_suspend = 0 
-			AND c.is_report = 1 
-			AND a.active_state = 3
-			AND s.is_meeting = 1 `
-	if condition != "" {
-		sql += condition
-	}
-	sql += ` GROUP BY s.id ORDER BY company_num DESC, user_num DESC, a.activity_time DESC, p.company_id DESC `
-	_, err = o.Raw(sql).QueryRows(&items)
-	return
-}
-
-// 线上到会数据
-func GetMeetingExportOnline(condition string) (items []*MeetingExportRep, err error) {
-	o := orm.NewOrm()
-	sql := `SELECT
-			s.attendance_id,
-			s.company_name,
-			s.company_id,
-			s.mobile,
-			u.real_name,
-			a.activity_name,
-			a.chart_permission_name,
-			a.activity_type_name,
-			a.activity_time_text,
-			p.status,
-			p.seller_name,
-			GROUP_CONCAT( DISTINCT p.seller_name SEPARATOR '/' ) AS pseller_name,
-			GROUP_CONCAT( DISTINCT c.chart_permission_name SEPARATOR '/' ) AS permission,
-			( SELECT COUNT( 1 ) FROM cygx_activity_attendance_detail AS s WHERE s.company_id = p.company_id ) AS company_num,
-			( SELECT COUNT( 1 ) FROM cygx_activity_attendance_detail AS s WHERE s.mobile = u.outbound_mobile ) AS user_num 
-		FROM
-			cygx_activity_attendance_detail AS s
-			INNER JOIN wx_user AS u ON u.outbound_mobile = s.mobile
-			INNER JOIN cygx_activity AS a ON a.activity_id = s.activity_id
-			LEFT JOIN company_product AS p ON p.company_id = u.company_id
-			LEFT JOIN company_report_permission AS re ON re.company_id = u.company_id
-			LEFT JOIN chart_permission AS c ON c.chart_permission_id = re.chart_permission_id 
-		WHERE
-			1 = 1 
-			AND p.status IN ( '正式', '试用' ) 
-			AND p.is_suspend = 0 
-			AND c.is_report = 1 
-			AND a.active_state = 3  `
-	if condition != "" {
-		sql += condition
-	}
-	sql += `GROUP BY s.attendance_id ORDER BY company_num DESC, user_num DESC, a.activity_time DESC,p.company_id DESC  `
-	_, err = o.Raw(sql).QueryRows(&items)
-	return
-}
-
 // 到会数据
 func GetMeetingExportAll(condition string) (items []*MeetingExportRep, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
 			s.attendance_id,
 			s.company_name,
 			s.company_id,
 			s.mobile,
-			u.real_name,
+			s.real_name,
 			a.activity_name,
 			a.chart_permission_name,
 			a.activity_type_name,
 			a.activity_time_text,
-			p.status,
-			p.seller_name,
-			GROUP_CONCAT( DISTINCT p.seller_name SEPARATOR '/' ) AS pseller_name,
-			GROUP_CONCAT( DISTINCT c.chart_permission_name SEPARATOR '/' ) AS permission
+			s.seller_name
 		FROM
 			cygx_activity_meet_detail_log AS s
-			INNER JOIN wx_user AS u ON u.outbound_mobile = s.mobile
 			INNER JOIN cygx_activity AS a ON a.activity_id = s.activity_id
-			INNER JOIN company_product AS p ON p.company_id = u.company_id
-			INNER JOIN company_report_permission AS re ON re.company_id = u.company_id
-			INNER JOIN chart_permission AS c ON c.chart_permission_id = re.chart_permission_id 
 		WHERE
-			1 = 1 
-			AND p.status IN ( '正式', '试用' ) 
-			AND p.is_suspend = 0 
-			AND c.is_report = 1 
+			1 = 1
 			AND s.company_name != ''
 			AND a.active_state = 3   `
 	if condition != "" {
 		sql += condition
 	}
-	sql += ` GROUP BY s.attendance_id ORDER BY s.company_meet_num DESC, s.user_meet_num DESC, a.activity_time DESC,p.company_id DESC   `
+	sql += ` GROUP BY s.attendance_id ORDER BY s.company_meet_num DESC, s.user_meet_num DESC, a.activity_time DESC   `
 	_, err = o.Raw(sql).QueryRows(&items)
 	return
 }
 
 func GetCompanyAciviytyGroupDate() (item []*CreateTimesResp, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := ` SELECT date_format(activity_time,'%Y-%m') as create_times FROM cygx_activity WHERE 1=1  AND  activity_time <= NOW()  GROUP BY create_times ORDER BY create_times DESC `
 	_, err = o.Raw(sql).QueryRows(&item)
 	return
@@ -594,7 +432,7 @@ type CygxYidongActivityMeetingApiLog struct {
 
 // 获取限制报名详情
 func GetCygxActivityYiDongUpdateTime(yidongActivityId string) (item *CygxYidongActivityMeetingApiLog, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT * FROM cygx_yidong_activity_meeting_api_log  WHERE yidong_activity_id = ? ORDER BY id DESC  LIMIT 1`
 	err = o.Raw(sql, yidongActivityId).QueryRow(&item)
 	return
@@ -618,7 +456,7 @@ func GetCygxActivityYiDongMeetNum(activityId []int) (items []*CygxAtivityIdMeetN
 			cygx_activity AS a 
 		WHERE
 			a.activity_id IN  (` + utils.GetOrmInReplace(lenactivityId) + `) `
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	_, err = o.Raw(sql, activityId).QueryRows(&items)
 	return
 }

+ 10 - 149
models/cygx/activity_meet_detail_log.go

@@ -3,7 +3,6 @@ package cygx
 import (
 	"fmt"
 	"github.com/beego/beego/v2/client/orm"
-	"strconv"
 	"strings"
 	"time"
 )
@@ -20,7 +19,7 @@ type CygxActivityMeetDetailLog struct {
 }
 
 func GetOfflineMeetingDetailListCompanyName(companyName string) (item []*CygxActivityMeetDetailLog, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT * FROM cygx_activity_meet_detail_log WHERE company_name IN (` + companyName + `)`
 	_, err = o.Raw(sql).QueryRows(&item)
 	return
@@ -28,20 +27,20 @@ func GetOfflineMeetingDetailListCompanyName(companyName string) (item []*CygxAct
 
 // 添加
 func AddCygxActivityMeetDetailLog(item *CygxActivityMeetDetailLog) (lastId int64, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	lastId, err = o.Insert(item)
 	return
 }
 
 func GetActivityMeetDetailLog(mobileStr string) (item []*CygxActivityMeetDetailLog, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT * FROM  cygx_activity_meet_detail_log WHERE mobile IN (` + mobileStr + `)`
 	_, err = o.Raw(sql).QueryRows(&item)
 	return
 }
 
 func GetActivityMeetDetailLogByMobile() (item []*CygxActivityMeetDetailLog, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT * FROM  cygx_activity_meet_detail_log WHERE mobile !='' GROUP BY mobile `
 	_, err = o.Raw(sql).QueryRows(&item)
 	return
@@ -49,7 +48,7 @@ func GetActivityMeetDetailLogByMobile() (item []*CygxActivityMeetDetailLog, err
 
 // 获取数量
 func GetActivityMeetDetailLogCount(condition string) (count int, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sqlCount := ` SELECT COUNT(1) AS count  FROM cygx_activity_meet_detail_log WHERE 1=1 `
 	if condition != "" {
 		sqlCount += condition
@@ -61,7 +60,7 @@ func GetActivityMeetDetailLogCount(condition string) (count int, err error) {
 // 修改公司参会数量
 func UpdateActivityMeetDetailLog(companyName string, num int) (err error) {
 	sql := ` UPDATE cygx_activity_meet_detail_log SET  company_meet_num= ?  WHERE company_name = ?`
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	_, err = o.Raw(sql, num, companyName).Exec()
 	return
 }
@@ -69,7 +68,7 @@ func UpdateActivityMeetDetailLog(companyName string, num int) (err error) {
 // 修改个人参会数量
 func UpdateActivityMeetDetailLogByUser(mobile string, num int) (err error) {
 	sql := ` UPDATE cygx_activity_meet_detail_log SET  user_meet_num= ?  WHERE mobile = ?`
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	_, err = o.Raw(sql, num, mobile).Exec()
 	return
 }
@@ -85,7 +84,7 @@ func GetMeetDetailLogGroupCount(condition string, pars []interface{}) (items []*
 	if condition == "" {
 		return
 	}
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT COUNT(1) AS count,company_id,mobile FROM cygx_activity_meet_detail_log WHERE 1=1 `
 	if condition != "" {
 		sql += condition
@@ -94,109 +93,9 @@ func GetMeetDetailLogGroupCount(condition string, pars []interface{}) (items []*
 	return
 }
 
-// 添加线下到会记录
-func AddCygxActivityMeetDetailLogOffline(meetingUids string, activityId int) (err error) {
-
-	o := orm.NewOrm()
-	to, err := o.Begin()
-	if err != nil {
-		return
-	}
-	defer func() {
-		if err != nil {
-			fmt.Println(err)
-			_ = to.Rollback()
-		} else {
-			_ = to.Commit()
-		}
-	}()
-	var CompanyIdStr string
-	var companyIdArr []int
-	var MobileStr string
-	var mobileArr []string
-	var items []*CygxActivityMeetDetailLog
-	list, err := GetOfflineMeetingListByUser(meetingUids, activityId)
-	if err != nil {
-		return
-	}
-	//删除原有数据
-	sql := ` DELETE FROM cygx_activity_meet_detail_log WHERE activity_id = ?`
-	_, err = to.Raw(sql, activityId).Exec()
-	if err != nil {
-		return
-	}
-	//插入新的数据
-	for _, v := range list {
-		item := new(CygxActivityMeetDetailLog)
-		item.ActivityId = v.ActivityId
-		item.Mobile = v.Mobile
-		item.CompanyName = v.CompanyName
-		item.CompanyId = v.CompanyId
-		item.CreateTime = v.CreateTime
-		CompanyIdStr += strconv.Itoa(v.CompanyId) + ","
-		if v.Mobile != "" {
-			MobileStr += v.Mobile + ","
-			mobileArr = append(mobileArr, v.Mobile)
-		}
-		companyIdArr = append(companyIdArr, v.CompanyId)
-		items = append(items, item)
-	}
-	CompanyIdStr = strings.TrimRight(CompanyIdStr, ",")
-	MobileStr = strings.TrimRight(MobileStr, ",")
-	if len(items) > 0 {
-		//批量添加记录
-		_, err = to.InsertMulti(len(items), items)
-		if err != nil {
-			return
-		}
-	}
-	listCompanyId, err := GetOfflineMeetingDetailListCompanyIdStr(CompanyIdStr)
-	if err != nil {
-		return
-	}
-	//修改公司对应的数量
-	var condition string
-	var companyNameArr []string
-	for _, v := range listCompanyId {
-		var total int
-		companyNameArr = append(companyNameArr, v.CompanyName)
-		condition = ` AND company_name = '` + v.CompanyName + `' `
-		total, err = GetActivityMeetDetailLogCount(condition)
-		if err != nil {
-			return
-		}
-		sql := ` UPDATE cygx_activity_meet_detail_log SET  company_meet_num= ?  WHERE company_name = ?`
-		_, err = to.Raw(sql, total, v.CompanyName).Exec()
-		if err != nil {
-			return
-		}
-	}
-
-	listMobile, err := GetActivityMeetDetailLog(MobileStr)
-	if err != nil {
-		return
-	}
-	//修改个人对应的数量
-	for _, v := range listMobile {
-		var total int
-		condition = ` AND mobile = '` + v.Mobile + `' `
-		total, err = GetActivityMeetDetailLogCount(condition)
-		if err != nil {
-			return
-		}
-		sql := ` UPDATE cygx_activity_meet_detail_log SET  user_meet_num= ?  WHERE mobile = ?`
-		_, err = to.Raw(sql, total, v.Mobile).Exec()
-		if err != nil {
-			return
-		}
-	}
-	return
-}
-
 // 添加线下到会记录
 func UpdatecygxActivityMeetDetailLogOffline(items []*CygxActivityMeetDetailLog, itemsUpdateCompany []*MeetDetailLoggGroupCount, itemsUpdateMobile []*MeetDetailLoggGroupCount, activityId int) (err error) {
-
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	to, err := o.Begin()
 	if err != nil {
 		return
@@ -224,50 +123,12 @@ func UpdatecygxActivityMeetDetailLogOffline(items []*CygxActivityMeetDetailLog,
 			return
 		}
 	}
-
-	//修改公司对应的数量
-	//if len(itemsUpdateCompany) > 0 {
-	//	p, err := to.Raw(` UPDATE cygx_activity_meet_detail_log SET company_meet_num = ? WHERE company_id = ? `).Prepare()
-	//	if err != nil {
-	//		return
-	//	}
-	//	defer func() {
-	//		_ = p.Close() // 别忘记关闭 statement
-	//	}()
-	//	for _, v := range itemsUpdateCompany {
-	//		_, err = p.Exec(
-	//			v.Count,
-	//			v.CompanyId)
-	//		if err != nil {
-	//			return
-	//		}
-	//	}
-	//}
-	//
-	////修改用户对应的数量
-	//if len(itemsUpdateMobile) > 0 {
-	//	p, err := to.Raw(` UPDATE cygx_activity_meet_detail_log SET user_meet_num= ?  WHERE mobile = ? `).Prepare()
-	//	if err != nil {
-	//		return
-	//	}
-	//	defer func() {
-	//		_ = p.Close() // 别忘记关闭 statement
-	//	}()
-	//	for _, v := range itemsUpdateCompany {
-	//		_, err = p.Exec(
-	//			v.Count,
-	//			v.Mobile)
-	//		if err != nil {
-	//			return
-	//		}
-	//	}
-	//}
 	return
 }
 
 // 添加线上到会记录
 func AddCygxActivityMeetDetailLogOnline(list []*CygxActivityAttendanceDetail, activityId int) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	to, err := o.Begin()
 	if err != nil {
 		return

+ 8 - 8
models/cygx/activity_meeting_history.go

@@ -33,32 +33,32 @@ type CygxActivityMeetingHistoryListResp struct {
 	List []*CygxActivityMeetingHistoryResp
 }
 
-//新增
+// 新增
 func AddCygxActivityMeetingHistory(item *CygxActivityMeetingHistory) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	_, err = o.Insert(item)
 	return
 }
 
-//获取列表
+// 获取列表
 func GetCygxActivityMeetingHistoryLlist(activityId int) (items []*CygxActivityMeetingHistoryResp, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := ` SELECT * FROM cygx_activity_meeting_history WHERE  activity_id=  ? AND  role_type_code IN ('rai_seller','rai_group')   ORDER BY id DESC   `
 	_, err = o.Raw(sql, activityId).QueryRows(&items)
 	return
 }
 
-//获取最新详情
+// 获取最新详情
 func GetCygxActivityMeetingHistoryNew(activityId, adminId int) (item *CygxActivityMeetingHistory, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT * FROM cygx_activity_meeting_history  WHERE activity_id=? AND admin_id = ? ORDER BY id DESC LIMIT 1 `
 	err = o.Raw(sql, activityId, adminId).QueryRow(&item)
 	return
 }
 
-//更新阅读时间
+// 更新阅读时间
 func UpdateActivityMeetingHistoryTime(stipTime, id int) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := ` UPDATE cygx_activity_meeting_history SET  stop_time=?   WHERE id=?`
 	_, err = o.Raw(sql, stipTime, id).Exec()
 	return

+ 6 - 21
models/cygx/activity_meeting_reminder.go

@@ -42,17 +42,9 @@ type AddUserList struct {
 	SignupType    int `description:"报名方式,1预约外呼,2自主拨入,3我要报名"`
 }
 
-// 获取用户报名数量
-func GetActivityMeetingReminderCount(uid, activityId int) (count int, err error) {
-	sqlCount := `SELECT COUNT(1) AS count FROM cygx_activity_meeting_reminder WHERE is_cancel=0 AND user_id=? AND activity_id=? `
-	o := orm.NewOrm()
-	err = o.Raw(sqlCount, uid, activityId).QueryRow(&count)
-	return
-}
-
 // 取消会议提醒
 func CancelActivityMeetingReminder(item *CygxActivityMeetingReminder) (lastId int64, err error) {
-	o, err := orm.NewOrm().Begin()
+	o, err := orm.NewOrmUsingDB("hz_cygx").Begin()
 	if err != nil {
 		return
 	}
@@ -90,16 +82,11 @@ func CancelActivityMeetingReminder(item *CygxActivityMeetingReminder) (lastId in
 
 // 会议提醒的人数列表
 func GetCygxActivityMeetingReminderList(activityId int, sqlStr string) (item []*CygxAppointmentList, err error) {
-	o := orm.NewOrm()
-	sql := `SELECT s.id,s.activity_id,s.user_id,s.create_time,s.mobile,s.company_id ,u.real_name,c.company_name,a.activity_time,
-			(SELECT p.seller_name from company_product as p WHERE p.company_id = u.company_id  AND  p.product_id = 2 )  AS seller_name,
-			GROUP_CONCAT( DISTINCT p.seller_name SEPARATOR '/' ) AS pseller_name
+	o := orm.NewOrmUsingDB("hz_cygx")
+	sql := `SELECT s.*,a.activity_time
 			FROM
 			cygx_activity_meeting_reminder AS s
-			INNER JOIN wx_user AS u ON  u.user_id = s.user_id
 			LEFT JOIN cygx_activity AS a ON a.activity_id = s.activity_id
-			LEFT JOIN company_product AS p ON p.company_id = u.company_id 
-			LEFT JOIN company AS c ON c.company_id = u.company_id 
 			WHERE a.activity_id = ?  ` + sqlStr + `  GROUP BY s.user_id   ORDER BY s.create_time DESC `
 	_, err = o.Raw(sql, activityId).QueryRows(&item)
 	return
@@ -107,12 +94,10 @@ func GetCygxActivityMeetingReminderList(activityId int, sqlStr string) (item []*
 
 // 会议提醒的人数数量
 func GetCygxActivityMeetingReminderCount(activityId int, sqlStr string) (count int, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT COUNT(*) FROM
 			cygx_activity_meeting_reminder AS s
-			INNER  JOIN wx_user AS u ON  u.user_id = s.user_id
 			LEFT JOIN cygx_activity AS a ON a.activity_id = s.activity_id
-			LEFT JOIN company_product AS p ON p.company_id = u.company_id 
 			WHERE
 			s.activity_id = ? ` + sqlStr + `
             GROUP BY s.user_id)`
@@ -123,7 +108,7 @@ func GetCygxActivityMeetingReminderCount(activityId int, sqlStr string) (count i
 
 // 通过ID获取会议提醒详情
 func GetCygxActivityMeetingReminderInfoById(id int) (item *CygxActivityMeetingReminder, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT * FROM cygx_activity_meeting_reminder  WHERE id=?`
 	err = o.Raw(sql, id).QueryRow(&item)
 	return
@@ -131,7 +116,7 @@ func GetCygxActivityMeetingReminderInfoById(id int) (item *CygxActivityMeetingRe
 
 // 添加会议提醒
 func AddActivityMeetingReminderUser(items []*CygxActivityAppointment, itemsReminder []*CygxActivityMeetingReminder) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	to, err := o.Begin()
 	if err != nil {
 		return

+ 6 - 6
models/cygx/activity_offline_meeting_detail.go

@@ -22,18 +22,18 @@ type CygxActivityOfflineMeetingDetail struct {
 
 // 预约外呼列表
 func GetOfflineMeetingList(condition string) (items []*CygxActivitySignupList, err error) {
-	o := orm.NewOrm()
-	sql := `SELECT s.* , u.real_name,
+	o := orm.NewOrmUsingDB("hz_cygx")
+	sql := `SELECT s.* ,
 			( SELECT COUNT( 1 ) FROM cygx_activity_signup AS a WHERE a.activity_id = s.activity_id AND a.user_id = s.user_id AND a.do_fail_type = 0 ) AS channel
 			FROM cygx_activity_offline_meeting_detail  as s 
-			INNER JOIN wx_user as u ON u.user_id = s.user_id  WHERE 1 =1 ` + condition
+			 WHERE 1 =1 ` + condition
 	_, err = o.Raw(sql).QueryRows(&items)
 	return
 }
 
 // 预约外呼列表
 func GetOfflineMeetingListByUser(meetingUids string, activityId int) (items []*CygxActivityOfflineMeetingDetail, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT s.* FROM cygx_activity_offline_meeting_detail  as s  WHERE activity_id = ? AND user_id IN  (` + meetingUids + `)`
 	_, err = o.Raw(sql, activityId).QueryRows(&items)
 	return
@@ -41,14 +41,14 @@ func GetOfflineMeetingListByUser(meetingUids string, activityId int) (items []*C
 
 // 预约外呼列表
 func GetOfflineMeetingListByYidong(condition string) (items []*CygxActivitySignupList, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := ` SELECT * FROM cygx_activity_signup as s  WHERE  1= 1 AND s.yidong_examine_status != 2 ` + condition
 	_, err = o.Raw(sql).QueryRows(&items)
 	return
 }
 
 func GetOfflineMeetingDetailListCompanyIdStr(companyIdStr string) (item []*CygxActivityMeetDetailLog, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT * FROM cygx_activity_offline_meeting_detail WHERE company_id IN (` + companyIdStr + `)`
 	_, err = o.Raw(sql).QueryRows(&item)
 	return

+ 5 - 5
models/cygx/activity_points_bill.go

@@ -44,7 +44,7 @@ type CygxActivityPointsBillResp struct {
 
 // CygxActivityPointsBillByCompanyId 根据公司名称获取机构流水表
 func CygxActivityPointsBillByCompanyId(companyId int) (items []*CygxActivityPointsBillResp, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := ` SELECT  * FROM cygx_activity_points_bill WHERE company_id =?  ORDER BY id DESC  `
 	_, err = o.Raw(sql, companyId).QueryRows(&items)
 	return
@@ -55,7 +55,7 @@ func GetCygxActivityPointsBillDetailByCondition(condition string, pars []interfa
 	if condition == "" {
 		return
 	}
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT * FROM cygx_activity_points_bill  WHERE 1 = 1  ` + condition
 	err = o.Raw(sql, pars).QueryRow(&item)
 	return
@@ -63,7 +63,7 @@ func GetCygxActivityPointsBillDetailByCondition(condition string, pars []interfa
 
 // AddCygxActivityPointsBillMulti 批量添加
 func AddCygxActivityPointsBillMulti(items []*CygxActivityPointsBill, itemsUpdate []*CygxActivityPointsCompany) (err error) {
-	o, err := orm.NewOrm().Begin()
+	o, err := orm.NewOrmUsingDB("hz_cygx").Begin()
 	if err != nil {
 		return
 	}
@@ -97,7 +97,7 @@ func AddCygxActivityPointsBillMulti(items []*CygxActivityPointsBill, itemsUpdate
 
 // AddCygxActivityPointsBillAndCompanyMulti 批量添加
 func AddCygxActivityPointsBillAndCompanyMulti(items []*CygxActivityPointsBill, itemsCompany []*CygxActivityPointsCompany) (err error) {
-	o, err := orm.NewOrm().Begin()
+	o, err := orm.NewOrmUsingDB("hz_cygx").Begin()
 	if err != nil {
 		return
 	}
@@ -121,7 +121,7 @@ func AddCygxActivityPointsBillAndCompanyMulti(items []*CygxActivityPointsBill, i
 
 // UpdateCygxActivityPointsBillMulti 批量修改
 func UpdateCygxActivityPointsBillMulti(items []*CygxActivityPointsBill, itemsUpdate []*CygxActivityPointsCompany) (err error) {
-	o, err := orm.NewOrm().Begin()
+	o, err := orm.NewOrmUsingDB("hz_cygx").Begin()
 	if err != nil {
 		return
 	}

+ 2 - 2
models/cygx/activity_points_company.go

@@ -16,7 +16,7 @@ type CygxActivityPointsCompany struct {
 
 // 通过公司ID获取详情
 func GetCygxActivityPointsCompanyByCompanyId(companyId int) (item *CygxActivityPointsCompany, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT * FROM cygx_activity_points_company  WHERE company_id=? `
 	err = o.Raw(sql, companyId).QueryRow(&item)
 	return
@@ -24,7 +24,7 @@ func GetCygxActivityPointsCompanyByCompanyId(companyId int) (item *CygxActivityP
 
 // 获取公司剩余点数
 func GetCompanyPoints(companyId int) (comapnyPointsNum float64, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT points FROM cygx_activity_points_company  WHERE company_id=? `
 	err = o.Raw(sql, companyId).QueryRow(&comapnyPointsNum)
 	return

+ 3 - 3
models/cygx/activity_points_set.go

@@ -52,7 +52,7 @@ type CygxActivityPointsSetConfigResp struct {
 
 // 通过活动ID获取详情
 func GetCygxActivityPointsSetDetail(activityId int) (item *CygxActivityPointsSetRsq, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT * FROM cygx_activity_points_set  WHERE activity_id=? `
 	err = o.Raw(sql, activityId).QueryRow(&item)
 	return
@@ -60,7 +60,7 @@ func GetCygxActivityPointsSetDetail(activityId int) (item *CygxActivityPointsSet
 
 // 通过活动ID获取详情
 func GetCygxActivityPointsSetUserNum(activityId int) (userPointsNum float64, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT user_points_num FROM cygx_activity_points_set  WHERE activity_id=? `
 	err = o.Raw(sql, activityId).QueryRow(&userPointsNum)
 	return
@@ -69,7 +69,7 @@ func GetCygxActivityPointsSetUserNum(activityId int) (userPointsNum float64, err
 // 通过互动ID获取数量
 func GetCygxActivityPointsSetCountByActivityId(ActivityId int) (count int, err error) {
 	sqlCount := ` SELECT COUNT(1) AS count  FROM cygx_activity_points_set  WHERE activity_id=?   `
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	err = o.Raw(sqlCount, ActivityId).QueryRow(&count)
 	return
 }

+ 1 - 1
models/cygx/activity_poster.go

@@ -16,7 +16,7 @@ type CygxActivityPoster struct {
 
 // 添加
 func AddCygxActivityPoster(item *CygxActivityPoster) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	_, err = o.Insert(item)
 	return
 }

+ 7 - 7
models/cygx/activity_restrict_signup.go

@@ -19,7 +19,7 @@ type CygxActivityRestrictSignup struct {
 
 // 添加
 func AddCygxActivityRestrictSignup(item *CygxActivityRestrictSignup) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	_, err = o.Insert(item)
 	return
 }
@@ -30,14 +30,14 @@ func AddCygxActivityRestrictSignupList(items []*CygxActivityRestrictSignup) (las
 	if lenitems == 0 {
 		return
 	}
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	_, err = o.InsertMulti(1, items)
 	return
 }
 
 // 删除
 func DeleteCygxActivityRestrictSignup(uid int) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := ` DELETE FROM cygx_activity_restrict_signup  WHERE user_id=?`
 	_, err = o.Raw(sql, uid).Exec()
 	return
@@ -48,7 +48,7 @@ func DeleteCygxActivityRestrictSignupByUserIds(userIdDelArr []int) (err error) {
 	if len(userIdDelArr) == 0 {
 		return
 	}
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := ` DELETE FROM cygx_activity_restrict_signup  WHERE  1= 1  AND user_id IN (` + utils.GetOrmInReplace(len(userIdDelArr)) + `)`
 	_, err = o.Raw(sql, userIdDelArr).Exec()
 	return
@@ -57,7 +57,7 @@ func DeleteCygxActivityRestrictSignupByUserIds(userIdDelArr []int) (err error) {
 // 获取某一用户是否被限制报名
 func GetUserRestrictCount(mobile string) (count int, err error) {
 	sqlCount := `SELECT COUNT(1) AS count FROM cygx_activity_restrict_signup WHERE is_restrict=1  AND mobile=? `
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	err = o.Raw(sqlCount, mobile).QueryRow(&count)
 	return
 }
@@ -65,14 +65,14 @@ func GetUserRestrictCount(mobile string) (count int, err error) {
 // 获取用户是否被限制报名
 func GetRestrictSignupCountByUid(uid int) (count int, err error) {
 	sqlCount := `SELECT COUNT( 1 ) count FROM cygx_activity_restrict_signup  WHERE user_id = ?`
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	err = o.Raw(sqlCount, uid).QueryRow(&count)
 	return
 }
 
 // 列表
 func GetCygxActivityRestrictSignupList(condition string, pars []interface{}, startSize, pageSize int) (items []*CygxActivityRestrictSignup, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT * FROM cygx_activity_restrict_signup as art WHERE 1= 1 `
 	if condition != "" {
 		sql += condition

+ 2 - 2
models/cygx/activity_signin.go

@@ -41,14 +41,14 @@ func GetCygxActivitySigninCount(condition string, pars []interface{}) (count int
 	if condition != "" {
 		sqlCount += condition
 	}
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	err = o.Raw(sqlCount, pars).QueryRow(&count)
 	return
 }
 
 // 列表
 func GetCygxActivitySigninList(condition string, pars []interface{}) (items []*CygxActivitySignin, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := ` SELECT * FROM cygx_activity_signin as s  WHERE  1= 1  ` + condition
 	_, err = o.Raw(sql, pars).QueryRows(&items)
 	return

+ 40 - 112
models/cygx/activity_signup.go

@@ -52,20 +52,20 @@ func GetCygxSignupCount(condition string, pars []interface{}) (count int, err er
 	if condition != "" {
 		sqlCount += condition
 	}
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	err = o.Raw(sqlCount, pars).QueryRow(&count)
 	return
 }
 
 // 列表
 func GetCygxSignupListAll(condition string, pars []interface{}, startSize, pageSize int) (items []*CygxSignupList, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT 
-		( SELECT COUNT( 1 ) FROM cygx_activity_signup AS s INNER JOIN wx_user as u ON u.user_id = s.user_id WHERE s.activity_id = art.activity_id  AND s.is_cancel = 0 AND  s.do_fail_type = 0 AND  s.company_id != 16 ) AS signup_people_num,
-		( SELECT COUNT( 1 ) FROM cygx_activity_signup AS s INNER JOIN wx_user as u ON u.user_id = s.user_id WHERE s.activity_id = art.activity_id  AND s.is_cancel = 0 AND  s.fail_type >= 1) AS signup_fail_people_num, 
-		( SELECT COUNT( 1 ) FROM cygx_activity_help_ask AS k INNER JOIN wx_user as u ON u.user_id = k.user_id WHERE k.activity_id = art.activity_id ) AS ask_num, 
-		( SELECT COUNT( 1 ) FROM cygx_activity_appointment AS ap INNER JOIN wx_user as u ON u.user_id = ap.user_id WHERE ap.activity_id = art.activity_id ) AS appointment_people_num,
-		( SELECT COUNT( 1 ) FROM cygx_activity_meeting_reminder AS ap   INNER JOIN wx_user as u ON u.user_id = ap.user_id WHERE ap.activity_id = art.activity_id ) AS reminder_people_num,
+		( SELECT COUNT( 1 ) FROM cygx_activity_signup AS s WHERE s.activity_id = art.activity_id  AND s.is_cancel = 0 AND  s.do_fail_type = 0 AND  s.company_id != 16 ) AS signup_people_num,
+		( SELECT COUNT( 1 ) FROM cygx_activity_signup AS s  WHERE s.activity_id = art.activity_id  AND s.is_cancel = 0 AND  s.fail_type >= 1) AS signup_fail_people_num, 
+		( SELECT COUNT( 1 ) FROM cygx_activity_help_ask AS k  WHERE k.activity_id = art.activity_id ) AS ask_num, 
+		( SELECT COUNT( 1 ) FROM cygx_activity_appointment AS ap  WHERE ap.activity_id = art.activity_id ) AS appointment_people_num,
+		( SELECT COUNT( 1 ) FROM cygx_activity_meeting_reminder AS ap    WHERE ap.activity_id = art.activity_id ) AS reminder_people_num,
 		art.* FROM cygx_activity as art
 		WHERE 1= 1 `
 	if condition != "" {
@@ -109,23 +109,18 @@ type CygxSignupId struct {
 
 // 预约外呼列表
 func GetCygxAppointmentLisssst(activityId int) (items []*CygxAppointmentList, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT * FROM cygx_activity_signup  WHERE activity_id= ? `
 	_, err = o.Raw(sql, activityId).QueryRows(&items)
 	return
 }
 
 func GetCygxAppointmentList(article_id int, sqlStr string) (item []*CygxAppointmentList, err error) {
-	o := orm.NewOrm()
-	sql := `SELECT s.id,s.activity_id,s.user_id,s.create_time,s.mobile,s.outbound_mobile,s.company_id,s.fail_type ,s.fail_type,s.signup_type,a.is_limit_people,u.real_name,c.company_name,a.activity_time,s.country_code,s.yidong_examine_status,s.email,
-			(SELECT p.seller_name from company_product as p WHERE p.company_id = u.company_id  AND  p.product_id = 2 )  AS seller_name,
-			GROUP_CONCAT( DISTINCT p.seller_name SEPARATOR '/' ) AS pseller_name
+	o := orm.NewOrmUsingDB("hz_cygx")
+	sql := `SELECT s.*
 			FROM
 			cygx_activity_signup AS s
-			INNER JOIN wx_user AS u ON  u.user_id = s.user_id
 			LEFT JOIN cygx_activity AS a ON a.activity_id = s.activity_id
-			LEFT JOIN company_product AS p ON p.company_id = u.company_id 
-			LEFT JOIN company AS c ON c.company_id = u.company_id 
 			WHERE a.activity_id = ?  AND s.do_fail_type = 0 ` + sqlStr + `  GROUP BY s.user_id   ORDER BY s.create_time DESC `
 	_, err = o.Raw(sql, article_id).QueryRows(&item)
 	return
@@ -145,12 +140,10 @@ type GetAppointmentListRep struct {
 }
 
 func GetCygxAppointmentCount(articleId int, sqlStr string) (count int, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT COUNT(*) FROM
 			cygx_activity_signup AS s
-			INNER  JOIN wx_user AS u ON  u.user_id = s.user_id
 			LEFT JOIN cygx_activity AS a ON a.activity_id = s.activity_id
-			LEFT JOIN company_product AS p ON p.company_id = u.company_id 
 			WHERE
 			s.activity_id = ? ` + sqlStr + `
             GROUP BY s.user_id)`
@@ -259,7 +252,7 @@ func GetUserAndCompanyNameListByUids(uids string) (items []*UserAndCompanyName,
 
 // 新增预约人数
 func AddCygxActivitySignup(items []*CygxActivitySignup, itemsAppointment []*CygxActivityAppointment, mapYidongActivity map[int]int) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	to, err := o.Begin()
 	if err != nil {
 		return
@@ -326,58 +319,10 @@ func AddCygxActivitySignup(items []*CygxActivitySignup, itemsAppointment []*Cygx
 	return
 }
 
-func AddCygxActivitySignup2(item *CygxActivitySignup) (err error) {
-	o := orm.NewOrm()
-	to, err := o.Begin()
-	if err != nil {
-		return
-	}
-	defer func() {
-		if err != nil {
-			fmt.Println(err)
-			_ = to.Rollback()
-		} else {
-			_ = to.Commit()
-		}
-	}()
-	var count int
-	sql := `SELECT COUNT(1) AS count FROM cygx_my_schedule WHERE user_id=? AND activity_id=? `
-	err = to.Raw(sql, item.UserId, item.ActivityId).QueryRow(&count)
-	if err != nil {
-		return
-	}
-	if count == 0 {
-		itemMy := new(CygxMySchedule)
-		itemMy.UserId = item.UserId
-		itemMy.ActivityId = item.ActivityId
-		itemMy.CreateTime = time.Now()
-		itemMy.Mobile = item.Mobile
-		itemMy.Email = item.Email
-		itemMy.CompanyId = item.CompanyId
-		itemMy.CompanyName = item.CompanyName
-		_, err = to.Insert(itemMy)
-		if err != nil {
-			return
-		}
-	}
-	sql = `SELECT COUNT(1) AS count FROM cygx_activity_signup WHERE user_id=? AND activity_id=? `
-	err = to.Raw(sql, item.UserId, item.ActivityId).QueryRow(&count)
-	if err != nil {
-		return
-	}
-	if count == 0 {
-		_, err = to.Insert(item)
-	} else {
-		sql := `UPDATE cygx_activity_signup SET  is_cancel=0, do_fail_type = 0 ,create_time = NOW() WHERE user_id=? AND activity_id=? `
-		_, err = to.Raw(sql, item.UserId, item.ActivityId).Exec()
-	}
-	return
-}
-
 // 获取用户报名数量
 func GetActivitySignupCount(uid, activityId int) (count int, err error) {
 	sqlCount := `SELECT COUNT(1) AS count FROM cygx_activity_signup WHERE is_cancel=0  AND do_fail_type = 0  AND user_id=? AND activity_id=? `
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	err = o.Raw(sqlCount, uid, activityId).QueryRow(&count)
 	return
 }
@@ -387,19 +332,18 @@ func GetActivitySignupCountByActivityId(activityId int) (count int, err error) {
 					COUNT( 1 ) AS count 
 				FROM
 					cygx_activity_signup AS s
-					INNER JOIN wx_user AS u ON u.user_id = s.user_id 
 				WHERE
 					s.do_fail_type = 0 
 					AND s.company_id != 16 
 					AND s.activity_id = ? `
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	err = o.Raw(sqlCount, activityId).QueryRow(&count)
 	return
 }
 
 func GetActivitySignupCountByThisUser(activityId int, uids string) (count int, err error) {
 	sqlCount := `SELECT COUNT(1) AS count FROM cygx_activity_signup WHERE do_fail_type = 0 AND activity_id=? AND user_id IN (` + uids + `) `
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	err = o.Raw(sqlCount, activityId).QueryRow(&count)
 	return
 }
@@ -444,9 +388,7 @@ func GetFailSignupList(activity_id int, sqlStr string) (item []*FailSignupListRe
 	sql := `SELECT s.* ,a.is_limit_people
 			FROM
 			cygx_activity_signup AS s
-			INNER JOIN wx_user AS u ON u.user_id = s.user_id
 			LEFT JOIN cygx_activity AS a ON a.activity_id = s.activity_id
-			LEFT JOIN company_product AS p ON p.company_id = u.company_id 
 			WHERE a.activity_id = ?` + sqlStr + ` GROUP BY s.id  ORDER BY s.create_time DESC `
 	_, err = o.Raw(sql, activity_id).QueryRows(&item)
 	return
@@ -466,19 +408,19 @@ type SignupIdCall struct {
 // 获取失败数量
 func GetCygxSignupCountFile(id int) (count int, err error) {
 	sqlCount := ` SELECT COUNT(1) AS count  FROM cygx_activity_signup  WHERE id= ?`
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	err = o.Raw(sqlCount, id).QueryRow(&count)
 	return
 }
 func GetCygxSignupDetailById(id int) (item *FailSignupListRep, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT * FROM cygx_activity_signup  WHERE id=?`
 	err = o.Raw(sql, id).QueryRow(&item)
 	return
 }
 
 func GetCygxSignupDetailByUid(id int) (item *FailSignupListRep, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT * FROM cygx_activity_signup  WHERE user_id=? LIMIT 1`
 	err = o.Raw(sql, id).QueryRow(&item)
 	return
@@ -486,7 +428,7 @@ func GetCygxSignupDetailByUid(id int) (item *FailSignupListRep, err error) {
 
 // 加入报名限制报名
 func SalonSignupEdit(newIsAdminAddSignup, doFailType, id int, item *CygxActivitySignup) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	to, err := o.Begin()
 	if err != nil {
 		return
@@ -536,7 +478,7 @@ func SalonSignupEdit(newIsAdminAddSignup, doFailType, id int, item *CygxActivity
 }
 
 func CallSignupEditByStatus3(doFailType, id int, item *CygxMySchedule) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	to, err := o.Begin()
 	if err != nil {
 		return
@@ -563,7 +505,7 @@ func CallSignupEditByStatus3(doFailType, id int, item *CygxMySchedule) (err erro
 }
 
 func CallSignupEditByStatus1_2(operationStatus, id int, item *CygxMySchedule) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	to, err := o.Begin()
 	if err != nil {
 		return
@@ -606,20 +548,6 @@ type SignupExportRep struct {
 	OutboundMobile string `description:"外呼手机号"`
 }
 
-func GetSignupExport(activity_id int, sqlStr string) (item []*SignupExportRep, err error) {
-	o := orm.NewOrm()
-	sql := `SELECT s.*  ,a.is_limit_people,u.real_name,
-			(SELECT p.seller_name from company_product as p WHERE p.company_id = u.company_id  AND  p.product_id = 2 )  AS seller_name
-			FROM
-			cygx_activity_signup AS s
-			INNER JOIN wx_user AS u ON u.user_id = s.user_id
-			INNER JOIN cygx_activity AS a ON a.activity_id = s.activity_id
-			INNER JOIN company_product AS p ON p.company_id = u.company_id 
-			WHERE a.activity_id = ?` + sqlStr
-	_, err = o.Raw(sql, activity_id).QueryRows(&item)
-	return
-}
-
 type CygxActivitySignupList struct {
 	Id          int    `orm:"column(id);pk"`
 	UserId      int    `description:"用户id"`
@@ -645,15 +573,16 @@ type CygxActivitySignupListRep struct {
 
 // 预约外呼列表
 func GetCygxActivitySignup(condition string) (items []*CygxActivitySignupList, err error) {
-	o := orm.NewOrm()
-	sql := `SELECT s.* , u.real_name FROM cygx_activity_signup  as s 
-	INNER JOIN wx_user as u ON u.user_id = s.user_id  WHERE 1 =1 ` + condition
+	o := orm.NewOrmUsingDB("hz_cygx")
+	sql := `SELECT s.*  FROM cygx_activity_signup  as s 
+	  WHERE 1 =1 ` + condition
 	_, err = o.Raw(sql).QueryRows(&items)
 	return
 }
 
 // 获取用户报名数量
 func GetActivitySignupNomeetingCount(activityId int) (count int, err error) {
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sqlCount := `SELECT
 	COUNT( 1 ) count 
 FROM
@@ -665,14 +594,13 @@ WHERE
 	AND s.is_meeting = 0 
 	AND a.is_submit_meeting = 1
 	AND a.activity_id = ?`
-	o := orm.NewOrm()
 	err = o.Raw(sqlCount, activityId).QueryRow(&count)
 	return
 }
 
 // 获取用户报名列表
 func GetActivitySignupNomeetingCountList(activityId int) (items []*CygxActivitySignupList, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
 	s.*
 FROM
@@ -689,6 +617,7 @@ WHERE
 
 // 获取用户爽约次数
 func GetActivitySignupNomeetingCountByUid(uid int) (count int, err error) {
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sqlCount := `SELECT
 	COUNT( 1 ) count 
 FROM
@@ -701,13 +630,12 @@ WHERE
 	AND a.is_submit_meeting = 1
 	AND s.do_fail_type = 0
 	AND s.user_id = ?`
-	o := orm.NewOrm()
 	err = o.Raw(sqlCount, uid).QueryRow(&count)
 	return
 }
 
 func GetUserMeetingMobile(activityId int) (items []*CygxActivitySignup, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT *
 FROM
 	cygx_activity_signup AS s 
@@ -726,7 +654,7 @@ type OutboundMobileEditResp struct {
 }
 
 func OutboundMobileEdit(id int, outboundMobile, countryCode string) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `UPDATE cygx_activity_signup SET outbound_mobile = ?,country_code=?  WHERE id=? `
 	_, err = o.Raw(sql, outboundMobile, countryCode, id).Exec()
 	return
@@ -735,7 +663,7 @@ func OutboundMobileEdit(id int, outboundMobile, countryCode string) (err error)
 //end
 
 func AddCygxActivitySignupUser(items []*CygxActivitySignup) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	to, err := o.Begin()
 	if err != nil {
 		return
@@ -786,7 +714,7 @@ func AddCygxActivitySignupUser(items []*CygxActivitySignup) (err error) {
 
 // 通过ID获取报名详情
 func GetActivitySignupInfoById(id int) (item *CygxActivitySignup, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT * FROM cygx_activity_signup  WHERE id=?`
 	err = o.Raw(sql, id).QueryRow(&item)
 	return
@@ -804,7 +732,7 @@ type RequestCommonPolicyConfig struct {
 
 // 取消报名
 func CancelActivitySignup(item *CygxActivitySignup) (lastId int64, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	to, err := o.Begin()
 	if err != nil {
 		return
@@ -1031,12 +959,12 @@ type YidongActivitySignup struct {
 
 // GetCompanyByUserSignUp 获取客户ID列表
 func GetCompanyByUserSignUp(condition string, pars []interface{}) (items []*company.CompanyNameAndId, err error) {
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
 	s.company_id
 FROM
 	cygx_activity_signup AS s
 	INNER JOIN cygx_activity AS a ON a.activity_id = s.activity_id
-	INNER JOIN wx_user AS u ON u.mobile = s.mobile 
 	INNER JOIN cygx_activity_type AS t ON t.activity_type_id = a.activity_type_id 
 WHERE
 	1 = 1 
@@ -1046,7 +974,7 @@ WHERE
 		sql += condition
 	}
 	sql += ` GROUP BY s.company_id `
-	_, err = orm.NewOrm().Raw(sql, pars).QueryRows(&items)
+	_, err = o.Raw(sql, pars).QueryRows(&items)
 	return
 }
 
@@ -1065,14 +993,14 @@ type UserSignUpLossListResp struct {
 
 // GetUserSignUpList 获取用户报名列表
 func GetUserSignUpList(condition string, pars []interface{}) (items []*UserSignUpLossResp, err error) {
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
 	s.real_name,
 	s.mobile 
 FROM
 	cygx_activity_signup_detail AS s
 	INNER JOIN cygx_activity AS a ON a.activity_id = s.activity_id
-	INNER JOIN cygx_activity_type AS t ON t.activity_type_id = a.activity_type_id 
-	INNER JOIN wx_user AS u ON u.mobile = s.mobile
+	INNER JOIN cygx_activity_type AS t ON t.activity_type_id = a.activity_type_id
 WHERE
 	1 = 1 
 	AND s.is_meeting = 1 
@@ -1080,7 +1008,7 @@ WHERE
 	if condition != `` {
 		sql += condition
 	}
-	_, err = orm.NewOrm().Raw(sql, pars).QueryRows(&items)
+	_, err = o.Raw(sql, pars).QueryRows(&items)
 	return
 }
 
@@ -1131,8 +1059,8 @@ func GetCompanyPermissionByUsersZhengShi(companyIds string) (items []*Permission
 
 // 获取某一活动某个机构已经报名的数量
 func GetActivitySignupCompanyCount(activityId, companyId int) (count int, err error) {
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sqlCount := `SELECT COUNT(1) AS count FROM cygx_activity_signup WHERE is_cancel=0 AND do_fail_type = 0 AND activity_id=? AND company_id=? `
-	o := orm.NewOrm()
 	err = o.Raw(sqlCount, activityId, companyId).QueryRow(&count)
 	return
 }
@@ -1160,19 +1088,20 @@ func GetCompanyPermissionByUserTrip(companyId int) (permission string, err error
 
 // GetCygxCygxActivitySignupList 获取报名列表信息
 func GetActivitySignupList(condition string, pars []interface{}) (items []*CygxActivitySignup, err error) {
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
 			*
 		FROM
 			cygx_activity_signup AS v
 		WHERE
 			1 = 1 	` + condition
-	o := orm.NewOrm()
 	_, err = o.Raw(sql, pars).QueryRows(&items)
 	return
 }
 
 // GetCygxCygxActivitySignupList 获取报名列表信息
 func GetActivitySignupInnerActivityList(condition string, pars []interface{}) (items []*CygxActivitySignup, err error) {
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
 			*
 		FROM
@@ -1180,7 +1109,6 @@ func GetActivitySignupInnerActivityList(condition string, pars []interface{}) (i
 			INNER JOIN cygx_activity as a ON v.activity_id = a.activity_id
 		WHERE
 			1 = 1 	` + condition
-	o := orm.NewOrm()
 	_, err = o.Raw(sql, pars).QueryRows(&items)
 	return
 }

+ 3 - 3
models/cygx/activity_signup_break.go

@@ -20,7 +20,7 @@ type CygxActivitySignupBreak struct {
 
 // 添加爽约记录
 func AddCygxActivitySignupBreak(item *CygxActivitySignupBreak) (lastId int64, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	lastId, err = o.Insert(item)
 	return
 }
@@ -31,14 +31,14 @@ func AddCygxActivitySignupBreakList(items []*CygxActivitySignupBreak) (lastId in
 	if lenitems == 0 {
 		return
 	}
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	_, err = o.InsertMulti(1, items)
 	return
 }
 
 // 删除
 func DeleteCygxActivitySignupBreakById(activityId int) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := ` DELETE FROM cygx_activity_signup_break  WHERE  activity_id =? `
 	_, err = o.Raw(sql, activityId).Exec()
 	return

+ 6 - 4
models/cygx/activity_signup_detail.go

@@ -36,27 +36,29 @@ type CygxActivitySignupDetail struct {
 
 // 获取今天报名的用户信息,存入到参会记录表中
 func GetSignupDetailBySignup(condition string, pars []interface{}) (list []*CygxActivitySignupDetail, err error) {
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT * FROM cygx_activity_signup  WHERE  1= 1 `
 	if condition != "" {
 		sql += condition
 	}
-	_, err = orm.NewOrm().Raw(sql, pars).QueryRows(&list)
+	_, err = o.Raw(sql, pars).QueryRows(&list)
 	return
 }
 
 // 获取参会记录表列表
 func GetSignupDetailList(condition string, pars []interface{}) (list []*CygxActivitySignupDetail, err error) {
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT * FROM cygx_activity_signup_detail  WHERE  1= 1 `
 	if condition != "" {
 		sql += condition
 	}
-	_, err = orm.NewOrm().Raw(sql, pars).QueryRows(&list)
+	_, err = o.Raw(sql, pars).QueryRows(&list)
 	return
 }
 
 // 添加
 func AddCygxActivitySignupDetail(items []*CygxActivitySignupDetail) (err error) {
-	o, err := orm.NewOrm().Begin()
+	o, err := orm.NewOrmUsingDB("hz_cygx").Begin()
 	if err != nil {
 		return
 	}
@@ -79,7 +81,7 @@ func AddCygxActivitySignupDetail(items []*CygxActivitySignupDetail) (err error)
 
 // UpdateActivitySignupDetailMulti 批量修改用户报名信息且报名的人
 func UpdateActivitySignupDetailMulti(items []*CygxActivitySignupDetail) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	p, err := o.Raw(` UPDATE cygx_activity_signup_detail SET 
 							first_meeting_time = ?,
 							last_meeting_time = ?,

+ 42 - 91
models/cygx/activity_special.go

@@ -140,7 +140,7 @@ type CygxActivitySpecial struct {
 
 // 添加活动
 func AddActivitySpecial(item *CygxActivitySpecial, industrialActivityItems []*CygxIndustrialActivityGroupManagement, subjectActivityItems []*CygxIndustrialActivityGroupSubject) (newId int64, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	to, err := o.Begin()
 	if err != nil {
 		return
@@ -182,7 +182,7 @@ func AddActivitySpecial(item *CygxActivitySpecial, industrialActivityItems []*Cy
 
 // 通过纪要ID获取活动详情
 func GetAddActivityInfoSpecialById(ActivityId int) (item *ActivitySpecialDetail, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT * FROM cygx_activity_special  WHERE activity_id=?`
 	err = o.Raw(sql, ActivityId).QueryRow(&item)
 	return
@@ -190,7 +190,7 @@ func GetAddActivityInfoSpecialById(ActivityId int) (item *ActivitySpecialDetail,
 
 // 通过纪要ID获取活动详情
 func GetCustomerName(ids string) (name string, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT GROUP_CONCAT( DISTINCT c.customer_name SEPARATOR '、' ) AS name 
 			FROM cygx_customer_type AS c WHERE c.customer_type_id IN (` + ids + `)`
 	err = o.Raw(sql).QueryRow(&name)
@@ -199,7 +199,7 @@ func GetCustomerName(ids string) (name string, err error) {
 
 // 修改
 func EditActivitySpecial(updateParams map[string]interface{}, item *CygxActivitySpecial, industrialActivityItems []*CygxIndustrialActivityGroupManagement, subjectActivityItems []*CygxIndustrialActivityGroupSubject) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	to, err := o.Begin()
 	if err != nil {
 		return
@@ -258,7 +258,7 @@ func EditActivitySpecial(updateParams map[string]interface{}, item *CygxActivity
 
 // 修改
 func EditActivitySpecialStatus(item *CygxActivitySpecial) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `UPDATE cygx_activity_special SET publish_status=?, last_updated_time=NOW()  WHERE activity_id=?`
 	_, err = o.Raw(sql, item.PublishStatus, item.ActivityId).Exec()
 	return
@@ -266,7 +266,7 @@ func EditActivitySpecialStatus(item *CygxActivitySpecial) (err error) {
 
 // 修改
 func UpdateActivitySpecial(updateParams map[string]interface{}, item *CygxActivitySpecial) (err error) {
-	to := orm.NewOrm()
+	to := orm.NewOrmUsingDB("hz_cygx")
 	//修改活动信息
 	ptrStructOrTableName := "cygx_activity_special"
 	whereParam := map[string]interface{}{"activity_id": item.ActivityId}
@@ -280,7 +280,7 @@ func UpdateActivitySpecial(updateParams map[string]interface{}, item *CygxActivi
 
 // 修改是否下线
 func EditActivitySpecialIsOffline(item *CygxActivitySpecial) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `UPDATE cygx_activity_special SET is_offline=?,publish_status=?, last_updated_time=NOW()   WHERE activity_id=?`
 	_, err = o.Raw(sql, item.IsOffline, item.PublishStatus, item.ActivityId).Exec()
 	return
@@ -318,9 +318,9 @@ type GetCygxActivityListSpecialRep struct {
 
 // 列表
 func GetActivityListSpecialAll(condition string, pars []interface{}, startSize, pageSize int) (items []*CygxActivitySpecialList, err error) {
-	o := orm.NewOrm()
-	sql := `SELECT  (SELECT COUNT(1) FROM cygx_activity_special_signup AS h  INNER JOIN wx_user AS u ON u.user_id = h.user_id    WHERE h.activity_id=art.activity_id) AS interested_num ,
- (SELECT COUNT(1) FROM cygx_activity_special_trip AS h  INNER JOIN wx_user AS u ON u.user_id = h.user_id    WHERE h.activity_id=art.activity_id AND h.is_cancel =0 ) AS signup_people_num ,
+	o := orm.NewOrmUsingDB("hz_cygx")
+	sql := `SELECT  (SELECT COUNT(1) FROM cygx_activity_special_signup AS h     WHERE h.activity_id=art.activity_id) AS interested_num ,
+ (SELECT COUNT(1) FROM cygx_activity_special_trip AS h      WHERE h.activity_id=art.activity_id AND h.is_cancel =0 ) AS signup_people_num ,
 			art.*  FROM cygx_activity_special as art WHERE 1= 1 `
 	if condition != "" {
 		sql += condition
@@ -336,14 +336,14 @@ func GetActivitySpecialCount(condition string, pars []interface{}) (count int, e
 	if condition != "" {
 		sqlCount += condition
 	}
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	err = o.Raw(sqlCount, pars).QueryRow(&count)
 	return
 }
 
 // 删除数据
 func DeleteActivitySpecial(activityId int) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := ` DELETE FROM cygx_activity_special WHERE activity_id = ?`
 	_, err = o.Raw(sql, activityId).Exec()
 	return
@@ -367,23 +367,12 @@ type CygxActivitySpecialSignupListResp struct {
 
 // 感兴趣列表
 func GetCygxActivitySpecialSignupList(activityId int) (items []*CygxActivitySpecialSignup, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
-			s.id,
-			s.activity_id,
-			s.user_id,
-			s.mobile,
-			s.create_time,
-			u.real_name,
-			c.company_name,
-			( SELECT p.seller_name FROM company_product AS p WHERE p.company_id = u.company_id AND p.product_id = 2 ) AS seller_name,
-			GROUP_CONCAT( DISTINCT p.seller_name SEPARATOR '/' ) AS pseller_name 
+			s.*
 		FROM
 			cygx_activity_special_signup AS s
-			INNER JOIN wx_user AS u ON u.user_id = s.user_id
 			LEFT JOIN cygx_activity_special AS a ON a.activity_id = s.activity_id
-			LEFT JOIN company_product AS p ON p.company_id = u.company_id
-			LEFT JOIN company AS c ON c.company_id = u.company_id 
 		WHERE
 			a.activity_id = ?  
 		GROUP BY
@@ -397,11 +386,11 @@ func GetCygxActivitySpecialSignupList(activityId int) (items []*CygxActivitySpec
 // 获取数量
 func GetCygxActivitySpecialSignupCount(condition string, pars []interface{}) (count int, err error) {
 	sqlCount := ` SELECT COUNT(1) AS count  FROM cygx_activity_special_signup as s INNER JOIN cygx_activity_special AS a ON a.activity_id = s.activity_id
-			INNER JOIN wx_user AS u ON u.user_id = s.user_id  WHERE 1= 1  `
+			 WHERE 1= 1  `
 	if condition != "" {
 		sqlCount += condition
 	}
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	err = o.Raw(sqlCount, pars).QueryRow(&count)
 	return
 }
@@ -429,28 +418,16 @@ type CygxActivitySpecialSignupRespList struct {
 
 // 列表
 func GetCygxActivitySpecialSignupListAll(condition string, pars []interface{}, startSize, pageSize int) (items []*CygxActivitySpecialSignupResp, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
-			s.id,
-			s.activity_id,
-			s.user_id,
-			s.create_time,
-			s.user_num,
-			u.real_name,
-			c.company_name,
-			c.company_id,
+			s.*,
 			a.research_theme,
 			a.label,
 			a.chart_permission_name,
-			a.create_time AS publish_date,
-			( SELECT p.seller_name FROM company_product AS p WHERE p.company_id = u.company_id AND p.product_id = 2 ) AS seller_name,
-			GROUP_CONCAT( DISTINCT p.seller_name SEPARATOR '/' ) AS pseller_name 
+			a.create_time AS publish_date
 		FROM
 			cygx_activity_special_signup AS s
 			INNER JOIN cygx_activity_special AS a ON a.activity_id = s.activity_id
-			INNER JOIN wx_user AS u ON u.user_id = s.user_id
-			LEFT JOIN company_product AS p ON p.company_id = u.company_id
-			LEFT JOIN company AS c ON c.company_id = u.company_id 
 		WHERE
 			1 = 1 `
 	if condition != "" {
@@ -470,80 +447,54 @@ type AdminOpenIdList struct {
 }
 
 // GetAdminOpendidByCompany 通过用户公司ID获取对应销售的openid
-func GetAdminOpendidByCompany(condition string, pars []interface{}) (list []*AdminOpenIdList, err error) {
+func GetAdminMobileByCompany(condition string, pars []interface{}) (list []*AdminOpenIdList, err error) {
 	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
+			INNER JOIN admin AS a ON a.admin_id = p.seller_id
 		WHERE
 			1 = 1 
-			AND p.product_id = 2
-			AND create_platform = 4 ` + condition
+			AND p.product_id = 2 ` + condition
 	_, err = orm.NewOrm().Raw(sql, pars).QueryRows(&list)
 	return
 }
 
 // 获取预约活动的用户的openID
 func GetActivitySpecialOpenIdList() (items []*AdminOpenIdList, err error) {
-	sql := `SELECT DISTINCT cr.open_id,u.user_id,m.company_id
+	o := orm.NewOrmUsingDB("hz_cygx")
+	sql := `SELECT DISTINCT u.open_id,u.cygx_user_id as  user_id ,m.company_id
 			FROM
 			cygx_user_follow_special AS m
-			INNER JOIN user_record AS u ON u.bind_account = m.mobile 
-			INNER JOIN cygx_user_record AS cr ON cr.union_id = u.union_id 
-			WHERE  u.create_platform = 4 `
-	_, err = orm.NewOrm().Raw(sql).QueryRows(&items)
+			INNER JOIN cygx_user_record AS u ON u.cygx_bind_account = m.mobile  `
+	_, err = o.Raw(sql).QueryRows(&items)
 	return
 }
 
-func GetActivitySpecialByIndustryIds(condition string, pars []interface{}) (list []*CygxActivitySpecialSignup, err error) {
-	sql := `SELECT
-			m.activity_id
-		FROM
-			cygx_industrial_activity_group_management AS m
-			INNER JOIN cygx_activity_special AS a ON a.activity_id = m.activity_id
-		WHERE
- 			1= 1
-			AND m.source = 2
-			AND a.publish_status = 1 AND a.is_offline = 0 AND a.days >0  ` + condition
-	_, err = orm.NewOrm().Raw(sql, pars).QueryRows(&list)
-	return
-}
-
-func GetWxOpenIdByMobileList(condition string, pars []interface{}) (items []*OpenIdList, err error) {
-	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  1= 1 AND create_platform = 4 ` + condition
-	_, err = orm.NewOrm().Raw(sql, pars).QueryRows(&items)
-	return
-}
-
-func GetWxOpenIdBList(condition string, pars []interface{}) (items []*OpenIdList, err error) {
-	sql := `SELECT
-	cr.*,
-	u.user_id 
-FROM
-	cygx_user_record AS cr
-	INNER JOIN user_record AS c ON c.union_id = cr.union_id
-	INNER JOIN wx_user AS u ON u.user_id = c.user_id 
-WHERE
-	1 = 1 
-	AND c.create_platform = 4 ` + condition + ` GROUP BY	cr.open_id `
-	_, err = orm.NewOrm().Raw(sql, pars).QueryRows(&items)
-	return
-}
+//func GetWxOpenIdBList(condition string, pars []interface{}) (items []*OpenIdList, err error) {
+//	sql := `SELECT
+//	cr.*,
+//	u.user_id
+//FROM
+//	cygx_user_record AS cr
+//	INNER JOIN user_record AS c ON c.union_id = cr.union_id
+//	INNER JOIN wx_user AS u ON u.user_id = c.user_id
+//WHERE
+//	1 = 1
+//	AND c.create_platform = 4 ` + condition + ` GROUP BY	cr.open_id `
+//	_, err = orm.NewOrm().Raw(sql, pars).QueryRows(&items)
+//	return
+//}
 
 // 通过产业名称获取关联的ID
 func GetactivitySpecilIdsByLabel(name string) (activityIds string, err error) {
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := ` SELECT
 				GROUP_CONCAT( DISTINCT s.activity_id SEPARATOR ',' ) AS activityIds 
 			FROM
 				cygx_activity_special AS s 
 			WHERE
 				label LIKE  '%` + name + `%' `
-	o := orm.NewOrm()
 	err = o.Raw(sql).QueryRow(&activityIds)
 	return
 }

+ 6 - 6
models/cygx/activity_special_day.go

@@ -6,7 +6,7 @@ import (
 	"time"
 )
 
-//活动详情
+// 活动详情
 type CygxActivitySpecialDay struct {
 	Id         int       `orm:"column(id);pk";description:"Id"`
 	ActivityId int       `description:"活动ID"`
@@ -14,7 +14,7 @@ type CygxActivitySpecialDay struct {
 	DayTime    string    `description:"活动行程时间"`
 }
 
-//活动详情
+// 活动详情
 type CygxActivitySpecialDayResp struct {
 	Id         int       `orm:"column(id);pk";description:"Id"`
 	ActivityId int       `description:"活动ID"`
@@ -22,9 +22,9 @@ type CygxActivitySpecialDayResp struct {
 	DayTime    time.Time `description:"活动行程时间"`
 }
 
-//添加活动
+// 添加活动
 func AddCygxActivitySpecialDay(items []*CygxActivitySpecialDay, activityId int) (newId int64, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	to, err := o.Begin()
 	if err != nil {
 		return
@@ -53,9 +53,9 @@ func AddCygxActivitySpecialDay(items []*CygxActivitySpecialDay, activityId int)
 	return
 }
 
-//列表
+// 列表
 func GetCygxActivitySpecialDayByActivityId(activityId int) (items []*CygxActivitySpecialDayResp, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT  *  FROM cygx_activity_special_day as art WHERE activity_id= ? `
 	_, err = o.Raw(sql, activityId).QueryRows(&items)
 	return

+ 8 - 8
models/cygx/activity_special_meeting_detail.go

@@ -45,17 +45,17 @@ type MeetingSpeciaDoRep struct {
 
 // 列表
 func GetCygxActivitySpecialMeetingDetailListByActivity(activityId int) (items []*CygxActivitySpecialMeetingDetailResp, err error) {
-	o := orm.NewOrm()
-	sql := `SELECT s.* , u.real_name
+	o := orm.NewOrmUsingDB("hz_cygx")
+	sql := `SELECT s.*
 			FROM cygx_activity_special_meeting_detail  as s 
-			INNER JOIN wx_user as u ON u.user_id = s.user_id  WHERE 1 =1  AND s.activity_id =? `
+			WHERE 1 =1  AND s.activity_id =? `
 	_, err = o.Raw(sql, activityId).QueryRows(&items)
 	return
 }
 
 // 到会操作
 func MeetingDopecialMeet(meetingUids, noMeetingUids string, ActivityId int, items []*CygxActivitySpecialMeetingDetail, itemsBill []*CygxActivitySpecialTripBill) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	to, err := o.Begin()
 	if err != nil {
 		return
@@ -125,7 +125,7 @@ func MeetingDopecialMeet(meetingUids, noMeetingUids string, ActivityId int, item
 
 // 列表
 func GetCygxActivitySpecialMeetingDetailList(condition string, pars []interface{}) (items []*CygxActivitySpecialMeetingDetail, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT s.* 
 			FROM cygx_activity_special_meeting_detail  as s  WHERE 1 =1   ` + condition
 	_, err = o.Raw(sql, pars).QueryRows(&items)
@@ -133,7 +133,7 @@ func GetCygxActivitySpecialMeetingDetailList(condition string, pars []interface{
 }
 
 func GetCygxActivitySpecialMeetingDetailListByActivityId(activityId int) (item []*CygxActivitySpecialMeetingDetail, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT *
 			FROM
 			cygx_activity_special_trip  
@@ -144,7 +144,7 @@ func GetCygxActivitySpecialMeetingDetailListByActivityId(activityId int) (item [
 
 // 列表
 func UpdateCygxActivitySpecialMeetingDetailRealName(realName, mobile string) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	//添加记录表的到会信息
 	sql := `UPDATE cygx_activity_special_meeting_detail SET real_name = ?  WHERE mobile = ? `
 	_, err = o.Raw(sql, realName, mobile).Exec()
@@ -153,7 +153,7 @@ func UpdateCygxActivitySpecialMeetingDetailRealName(realName, mobile string) (er
 
 // 添加
 func AddCygxActivitySpecialMeetingDetail(item *CygxActivitySpecialMeetingDetail) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	_, err = o.Insert(item)
 	return
 }

+ 20 - 27
models/cygx/activity_special_trip.go

@@ -54,18 +54,17 @@ func GetActivitySpecialTripCountByActivityId(activityId int) (count int, err err
 					COUNT( 1 ) AS count 
 				FROM
 					cygx_activity_special_trip AS s
-					INNER JOIN wx_user AS u ON u.user_id = s.user_id 
 				WHERE
 					s.is_cancel = 0 
 					AND s.activity_id = ? `
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	err = o.Raw(sqlCount, activityId).QueryRow(&count)
 	return
 }
 
 func GetActivitySpecialTripCountByThisUser(activityId int, uids string) (count int, err error) {
 	sqlCount := `SELECT COUNT(1) AS count FROM cygx_activity_special_trip WHERE is_cancel = 0 AND activity_id=? AND user_id IN (` + uids + `) `
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	err = o.Raw(sqlCount, activityId).QueryRow(&count)
 	return
 }
@@ -73,14 +72,14 @@ func GetActivitySpecialTripCountByThisUser(activityId int, uids string) (count i
 // 获取用户报名数量
 func GetActivitySpecialTripCount(uid, activityId int) (count int, err error) {
 	sqlCount := `SELECT COUNT(1) AS count FROM cygx_activity_special_trip WHERE is_cancel=0   AND user_id=? AND activity_id=? `
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	err = o.Raw(sqlCount, uid, activityId).QueryRow(&count)
 	return
 }
 
 // 新增预约人数
 func AddCygxActivitySpecialTrip(items []*CygxActivitySpecialTrip, itemsBill []*CygxActivitySpecialTripBill, itemsMeet []*CygxActivitySpecialMeetingDetail) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	to, err := o.Begin()
 	if err != nil {
 		return
@@ -143,28 +142,23 @@ type GetAppointmentSpecialListRsep struct {
 }
 
 func GetCygxActivitySpecialTripList(activityId int, condition string) (item []*CygxActivitySpecialTripResp, err error) {
-	o := orm.NewOrm()
-	sql := `SELECT s.id,s.activity_id,s.user_id,s.create_time,s.mobile,s.company_id,u.real_name,c.company_name,a.activity_time,s.outbound_mobile,s.country_code,a.special_type,
-			(SELECT p.seller_name from company_product as p WHERE p.company_id = u.company_id  AND  p.product_id = 2 )  AS seller_name,
-			GROUP_CONCAT( DISTINCT p.seller_name SEPARATOR '/' ) AS pseller_name
+	o := orm.NewOrmUsingDB("hz_cygx")
+	sql := `SELECT s.*
+					a.activity_time,
+					a.special_type
 			FROM
 			cygx_activity_special_trip AS s
-			INNER JOIN wx_user AS u ON  u.user_id = s.user_id
 			INNER JOIN cygx_activity_special AS a ON a.activity_id = s.activity_id
-			LEFT JOIN company_product AS p ON p.company_id = u.company_id 
-			LEFT JOIN company AS c ON c.company_id = u.company_id 
 			WHERE a.activity_id = ?  ` + condition + `  GROUP BY s.user_id   ORDER BY s.create_time DESC `
 	_, err = o.Raw(sql, activityId).QueryRows(&item)
 	return
 }
 
 func GetActivitySpecialTripTotal(activityId int, sqlStr string) (count int, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT COUNT(*) FROM
 			cygx_activity_special_trip AS s
-			INNER  JOIN wx_user AS u ON  u.user_id = s.user_id
 			LEFT JOIN cygx_activity_special AS a ON a.activity_id = s.activity_id
-			LEFT JOIN company_product AS p ON p.company_id = u.company_id 
 			WHERE
 			s.activity_id = ? ` + sqlStr + `
             GROUP BY s.user_id)`
@@ -176,7 +170,7 @@ func GetActivitySpecialTripTotal(activityId int, sqlStr string) (count int, err
 
 // ActivitySpecialTripCancel 取消报名
 func ActivitySpecialTripCancel(isValid, activityId, uid int) (err error) {
-	o, err := orm.NewOrm().Begin()
+	o, err := orm.NewOrmUsingDB("hz_cygx").Begin()
 	if err != nil {
 		return
 	}
@@ -204,21 +198,21 @@ func GetSpecialTripUserIds(activityId int, uIds string) (signupUids string, err
 			GROUP_CONCAT( DISTINCT s.user_id SEPARATOR ',' ) AS signupUids 
 			FROM cygx_activity_special_trip AS s
             WHERE s.activity_id = ? AND s.is_cancel = 0 AND s.user_id not IN (` + uIds + `)`
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	err = o.Raw(sql, activityId).QueryRow(&signupUids)
 	return
 }
 
 // 修改外呼手机号
 func SpecialTripOutboundMobileEdit(id int, outboundMobile, countryCode string) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `UPDATE cygx_activity_special_trip SET outbound_mobile = ?,country_code=?  WHERE id=? `
 	_, err = o.Raw(sql, outboundMobile, countryCode, id).Exec()
 	return
 }
 
 func GetCygxActivitySpecialTripListByActivityId(activityId int) (item []*CygxActivitySpecialTripResp, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT *
 			FROM
 			cygx_activity_special_trip  
@@ -229,7 +223,7 @@ func GetCygxActivitySpecialTripListByActivityId(activityId int) (item []*CygxAct
 
 // 获取公司报名的记录
 func GetCygxActivitySpecialTripListByComapnyId(companyId int) (item []*CygxActivitySpecial, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
 			t.*,
 			a.chart_permission_id,
@@ -245,7 +239,7 @@ func GetCygxActivitySpecialTripListByComapnyId(companyId int) (item []*CygxActiv
 
 // 获取空降的公司报名的记录
 func GetCygxActivitySpecialTripAirborneListByComapnyId(companyId int) (item []*CygxActivitySpecial, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
 			t.*,
 			a.chart_permission_id,
@@ -268,7 +262,7 @@ type ActivitySpecialSignupTempMsgReq struct {
 
 // 列表
 func GetCygxActivitySpecialTripListCondition(condition string, pars []interface{}, startSize, pageSize int) (items []*CygxActivitySpecialTrip, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT * FROM cygx_activity_special_trip as art WHERE 1= 1 `
 	if condition != "" {
 		sql += condition
@@ -282,18 +276,17 @@ func GetCygxActivitySpecialTripListCondition(condition string, pars []interface{
 	return
 }
 
-//获取某一用户的报名的数量
+// 获取某一用户的报名的数量
 func GetUserActivitySpecialTripCount(uid, activityId int) (count int, err error) {
 	sqlCount := `SELECT COUNT(1) AS count FROM cygx_activity_special_trip  WHERE  user_id=?  AND   activity_id =? `
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	err = o.Raw(sqlCount, uid, activityId).QueryRow(&count)
 	return
 }
 
-
 func UpdateSpecialTrip(isValid, isCancel, userId, activityId int) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `UPDATE cygx_activity_special_trip SET is_valid = ?,create_time=NOW(),is_cancel=?  WHERE user_id=? AND activity_id=? `
 	_, err = o.Raw(sql, isValid, isCancel, userId, activityId).Exec()
 	return
-}
+}

+ 25 - 29
models/cygx/activity_special_trip_bill.go

@@ -49,7 +49,7 @@ type CygxActivitySpecialTripBillList struct {
 
 // 添加
 func AddCygxActivitySpecialTripBill(item *CygxActivitySpecialTripBill) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	_, err = o.Insert(item)
 	if err != nil {
 		return
@@ -58,7 +58,7 @@ func AddCygxActivitySpecialTripBill(item *CygxActivitySpecialTripBill) (err erro
 }
 
 func GetCygxActivitySpecialTripBill(condition string, pars []interface{}) (item []*CygxActivitySpecialTripBill, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT *
 			FROM
 			cygx_activity_special_trip_bill  
@@ -68,13 +68,11 @@ func GetCygxActivitySpecialTripBill(condition string, pars []interface{}) (item
 }
 
 func GetCygxActivitySpecialTripBillList(condition string, pars []interface{}) (item []*CygxActivitySpecialTripBillList, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
-			b.*,
-			c.chart_permission_name 
+			b.*
 		FROM
 			cygx_activity_special_trip_bill AS b
-			LEFT JOIN chart_permission AS c ON c.chart_permission_id = b.chart_permission_id 
 		WHERE
 			1 = 1` + condition
 	_, err = o.Raw(sql, pars).QueryRows(&item)
@@ -94,7 +92,7 @@ func GetActivitySpecialTripAirborneListByActivitySpecial(condition string, pars
 			INNER JOIN cygx_activity_special AS a ON a.activity_id = t.activity_id 
 		WHERE
 			 1= 1  	AND YEAR ( t.create_time )= YEAR (NOW()) ` + condition + `GROUP BY chart_permission_id`
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	_, err = o.Raw(sqlCount, pars).QueryRows(&items)
 	return
 }
@@ -107,7 +105,7 @@ func GetActivitySpecialTripAirborneCountByActivitySpecial(condition string, pars
 			INNER JOIN cygx_activity_special AS a ON a.activity_id = t.activity_id 
 		WHERE
 			 1= 1  	AND YEAR ( t.create_time )= YEAR (NOW()) ` + condition
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	err = o.Raw(sqlCount, pars).QueryRow(&count)
 	return
 }
@@ -135,21 +133,21 @@ type CygxActivitySpecialTripBillDetailList struct {
 	Total               string    `description:"总和"`
 }
 
-func GetCygxActivitySpecialTripBillDetailList(condition string, pars []interface{}) (item []*CygxActivitySpecialTripBillDetailList, err error) {
-	o := orm.NewOrm()
-	sql := `SELECT
-			b.*,
-			a.research_theme,
-			c.chart_permission_name 
-		FROM
-			cygx_activity_special_trip_bill AS b
-			INNER JOIN chart_permission AS c ON c.chart_permission_id = b.chart_permission_id 
-			INNER JOIN cygx_activity_special AS a ON a.activity_id = b.activity_id
-		WHERE
-			1 = 1` + condition
-	_, err = o.Raw(sql, pars).QueryRows(&item)
-	return
-}
+//func GetCygxActivitySpecialTripBillDetailList(condition string, pars []interface{}) (item []*CygxActivitySpecialTripBillDetailList, err error) {
+//	o := orm.NewOrm()
+//	sql := `SELECT
+//			b.*,
+//			a.research_theme,
+//			c.chart_permission_name
+//		FROM
+//			cygx_activity_special_trip_bill AS b
+//			INNER JOIN chart_permission AS c ON c.chart_permission_id = b.chart_permission_id
+//			INNER JOIN cygx_activity_special AS a ON a.activity_id = b.activity_id
+//		WHERE
+//			1 = 1` + condition
+//	_, err = o.Raw(sql, pars).QueryRows(&item)
+//	return
+//}
 
 type CygxActivitySpecialPointsBillRespItem struct {
 	Id                  int    `gorm:"column:id;primary_key;AUTO_INCREMENT"`
@@ -170,14 +168,12 @@ type CygxActivitySpecialPointsBillResp struct {
 }
 
 func GetCygxActivitySpecialTripBillDetailListAll(condition string, pars []interface{}) (item []*CygxActivitySpecialTripBillDetailList, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
 			b.*,
-			a.research_theme,
-			c.chart_permission_name 
+			a.research_theme
 		FROM
 			cygx_activity_special_trip_bill AS b
-			LEFT JOIN chart_permission AS c ON c.chart_permission_id = b.chart_permission_id 
 			LEFT JOIN cygx_activity_special AS a ON a.activity_id = b.activity_id
 		WHERE
 			1 = 1` + condition
@@ -188,7 +184,7 @@ func GetCygxActivitySpecialTripBillDetailListAll(condition string, pars []interf
 }
 
 func GetCygxActivitySpecialTripBillByCompanyId(companyId int) (item *CygxActivitySpecialTripBill, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
 			*
 		FROM
@@ -196,4 +192,4 @@ func GetCygxActivitySpecialTripBillByCompanyId(companyId int) (item *CygxActivit
 		`
 	err = o.Raw(sql, companyId).QueryRow(&item)
 	return
-}
+}

+ 4 - 4
models/cygx/activity_type.go

@@ -21,14 +21,14 @@ type ActivityTypeListResp struct {
 
 // 列表
 func GetActivityTypeList() (items []*ActivityType, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT * FROM cygx_activity_type ORDER BY sort DESC`
 	_, err = o.Raw(sql).QueryRows(&items)
 	return
 }
 
 func GetActivityTypeDetailById(activityTypeId int) (item *ActivityType, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT * FROM cygx_activity_type WHERE activity_type_id = ? `
 	err = o.Raw(sql, activityTypeId).QueryRow(&item)
 	return
@@ -36,8 +36,8 @@ func GetActivityTypeDetailById(activityTypeId int) (item *ActivityType, err erro
 
 // 列表
 func GetActivityTypeSearchList(condition string) (items []*ActivityType, err error) {
-	o := orm.NewOrm()
-	sql := `SELECT * FROM cygx_activity_type WHERE  ` + condition + `  ORDER BY sort DESC`
+	o := orm.NewOrmUsingDB("hz_cygx")
+	sql := `SELECT * FROM cygx_activity_type WHERE 1= 1  ` + condition + `  ORDER BY sort DESC`
 	_, err = o.Raw(sql).QueryRows(&items)
 	return
 }

+ 3 - 3
models/cygx/activity_user_remarks.go

@@ -37,14 +37,14 @@ type CygxActivityUserRemarksListResp struct {
 
 // 新增
 func AddCygxActivityUserRemarks(item *CygxActivityUserRemarks) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	_, err = o.Insert(item)
 	return
 }
 
 // 获取备注列表
 func GetCygxActivityUserRemarksLlist(mobile string) (items []*CygxActivityUserRemarksResp, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := ` SELECT * FROM cygx_activity_user_remarks WHERE  mobile IN (` + mobile + `)  ORDER BY id DESC`
 	_, err = o.Raw(sql).QueryRows(&items)
 	return
@@ -52,7 +52,7 @@ func GetCygxActivityUserRemarksLlist(mobile string) (items []*CygxActivityUserRe
 
 // 获取备注列表
 func GetCygxActivityUserRemarksLlistByActivityId(mobile string, activityId int) (items []*CygxActivityUserRemarksResp, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := ` SELECT * FROM cygx_activity_user_remarks WHERE  mobile IN (` + mobile + `) AND activity_id = ?  ORDER BY id DESC`
 	_, err = o.Raw(sql, activityId).QueryRows(&items)
 	return

+ 80 - 6
models/cygx/activity_video.go

@@ -3,6 +3,7 @@ package cygx
 import (
 	"github.com/beego/beego/v2/client/orm"
 	"github.com/rdlucklib/rdluck_tools/paging"
+	"time"
 )
 
 type CygxActivityVideo struct {
@@ -13,6 +14,8 @@ type CygxActivityVideo struct {
 	VideoDuration string `description:"视频时长"`
 	VideoCounts   int    `description:"播放量"`
 	VideoUrl      string `description:"视频地址"`
+	BackgroundImg string `description:"封面图片"`
+	ShareImg      string `description:"分享图片"`
 	CreateTime    string `description:"创建时间"`
 }
 
@@ -20,6 +23,8 @@ type CygxActivityVideoReq struct {
 	VideoName     string `description:"视频名称"`
 	VideoDuration string `description:"视频时长"`
 	VideoUrl      string `description:"视频地址"`
+	BackgroundImg string `description:"封面图片"`
+	ShareImg      string `description:"分享图片"`
 }
 
 // 活动详情
@@ -46,6 +51,33 @@ type CygxActivityVideoListRep struct {
 	List   []*CygxActivityVideoListResp
 }
 
+// 添加
+func AddCygxActivityVideo(item *CygxActivityVideo) (newId int64, err error) {
+	o := orm.NewOrmUsingDB("hz_cygx")
+	newId, err = o.Insert(item)
+	return
+}
+
+// 修改
+func UpdateCygxActivityVideo(item *CygxActivityVideo) (err error) {
+	to := orm.NewOrmUsingDB("hz_cygx")
+	updateParams := make(map[string]interface{})
+	updateParams["VideoName"] = item.VideoName
+	updateParams["VideoDuration"] = item.VideoDuration
+	updateParams["VideoUrl"] = item.VideoUrl
+	updateParams["BackgroundImg"] = item.BackgroundImg
+	updateParams["ShareImg"] = item.ShareImg
+	updateParams["ModifyDate"] = time.Now()
+	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
+}
+
 // 获取数量
 func GetActivityVideoCount(condition string, pars []interface{}) (count int, err error) {
 	sqlCount := ` SELECT
@@ -58,14 +90,14 @@ func GetActivityVideoCount(condition string, pars []interface{}) (count int, err
 	if condition != "" {
 		sqlCount += condition
 	}
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	err = o.Raw(sqlCount, pars).QueryRow(&count)
 	return
 }
 
 // 列表
 func GetActivityVideoListAll(condition string, pars []interface{}, startSize, pageSize int) (items []*CygxActivityVideoListResp, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT art.*,v.video_id,v.video_name,v.video_counts,video_duration,
 (SELECT COUNT(1) FROM cygx_article_comment AS h    WHERE h.activity_id=art.activity_id AND  h.industry_id = 0 AND  h.activity_voice_id = 0) AS comment_num
 			FROM cygx_activity as art  INNER JOIN cygx_activity_video AS v ON v.activity_id = art.activity_id   WHERE 1= 1  `
@@ -79,7 +111,7 @@ func GetActivityVideoListAll(condition string, pars []interface{}, startSize, pa
 
 // 历史记录
 func GetActivityVideoHistoryById(condition string, pars []interface{}) (item []*CygxMicroRoadshowVoiceHistory, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := ` SELECT
 			h.* 
 		FROM
@@ -98,7 +130,7 @@ func GetActivityVideoHistoryById(condition string, pars []interface{}) (item []*
 
 // 详情
 func GetCygxActivityVideoReqDetail(activityId int) (item *CygxActivityVideo, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT *  FROM cygx_activity_video  WHERE activity_id= ? `
 	err = o.Raw(sql, activityId).QueryRow(&item)
 	return
@@ -106,7 +138,7 @@ func GetCygxActivityVideoReqDetail(activityId int) (item *CygxActivityVideo, err
 
 // 列表
 func GetCygxActivityVideoReqDetailByVideoId(videoId int) (item *CygxActivityVideo, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT *  FROM cygx_activity_video  WHERE video_id= ? `
 	err = o.Raw(sql, videoId).QueryRow(&item)
 	return
@@ -114,7 +146,7 @@ func GetCygxActivityVideoReqDetailByVideoId(videoId int) (item *CygxActivityVide
 
 // 列表
 func GetActivityVideoList(condition string, pars []interface{}) (items []*CygxActivityVideoListResp, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := ` SELECT  * FROM  cygx_activity_video  WHERE  1=1  `
 	if condition != "" {
 		sql += condition
@@ -122,3 +154,45 @@ func GetActivityVideoList(condition string, pars []interface{}) (items []*CygxAc
 	_, err = o.Raw(sql, pars).QueryRows(&items)
 	return
 }
+
+// MicroRoadShowDefaultImgList 微路演行业默认背景图列表
+type MicroRoadShowDefaultImgList struct {
+	Audio []*MicroRoadShowDefaultImg `description:"音频"`
+	Video []*MicroRoadShowDefaultImg `description:"视频"`
+}
+
+// MicroRoadShowDefaultImg 微路演行业默认背景图
+type MicroRoadShowDefaultImg struct {
+	ChartPermissionId   int    `description:"行业ID"`
+	ChartPermissionName string `description:"行业名称"`
+	ImgUrl              string `description:"背景图"`
+	ShareImg            string `description:"分享图"`
+}
+
+// MicroRoadShowDefaultImgList 微路演行业默认背景图列表
+type ActivityVideoDefaultImgList struct {
+	Audio []*ActivityVideoDefaultImg `description:"音频"`
+	Video []*ActivityVideoDefaultImg `description:"视频"`
+}
+
+type ActivityVideoDefaultImg struct {
+	ChartPermissionId int `description:"行业ID"`
+	List              []*MicroRoadShowDefaultImg
+}
+
+type ActivityVideoDefaultImgListResp struct {
+	List []*MicroRoadShowDefaultImg
+}
+
+type ActivityVideoDefaultImgResp struct {
+	BackgroundImg string `description:"封面图片"`
+	ShareImg      string `description:"分享图"`
+}
+
+// 删除数据
+func DeleteCygxActivityVideo(activityId int) (err error) {
+	o := orm.NewOrmUsingDB("hz_cygx")
+	sql := ` DELETE FROM cygx_activity_video WHERE  activity_id= ? `
+	_, err = o.Raw(sql, activityId).Exec()
+	return
+}

+ 54 - 3
models/cygx/activity_voice.go

@@ -12,6 +12,8 @@ type CygxActivityVoice struct {
 	VoiceUrl         string    `description:"音频地址"`
 	VoiceName        string    `description:"音频名称"`
 	VoicePlaySeconds string    `description:"音频时长"`
+	BackgroundImg    string    `description:"封面图片"`
+	ShareImg         string    `description:"分享图片"`
 	CreateTime       time.Time `description:"创建时间"`
 }
 
@@ -21,12 +23,53 @@ type CygxActivityVoiceReq struct {
 	Name            string `description:"音频名称"`
 	PlaySeconds     string `description:"音频时长"`
 	ActivityVoiceId int    `description:"活动音频ID"`
+	BackgroundImg   string `description:"封面图片"`
+	ShareImg        string `description:"分享图片"`
+}
+
+// 添加
+func AddCygxActivityVoice(item *CygxActivityVoice) (newId int64, err error) {
+	o := orm.NewOrmUsingDB("hz_cygx")
+	newId, err = o.Insert(item)
+	return
+}
+
+// 修改
+func UpdateCygxActivityVoice(item *CygxActivityVoice) (err error) {
+	to := orm.NewOrmUsingDB("hz_cygx")
+	updateParams := make(map[string]interface{})
+	updateParams["VoiceName"] = item.VoiceName
+	updateParams["VoicePlaySeconds"] = item.VoicePlaySeconds
+	updateParams["VoiceUrl"] = item.VoiceUrl
+	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
+}
+
+// 获取数量
+func GetCygxActivityVoiceCount(condition string, pars []interface{}) (count int, err error) {
+	sqlCount := ` SELECT COUNT(1) AS count  FROM cygx_activity_voice  WHERE 1= 1  `
+	if condition != "" {
+		sqlCount += condition
+	}
+	o := orm.NewOrmUsingDB("hz_cygx")
+	err = o.Raw(sqlCount, pars).QueryRow(&count)
+	return
 }
 
 // 列表
 func GetCygxActivityVoiceReqList(activityId int) (items []*CygxActivityVoiceReq, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT 
+			background_img,
+			share_img,
 			activity_voice_id,
 			voice_url AS url,
 			voice_name AS name,
@@ -37,7 +80,7 @@ func GetCygxActivityVoiceReqList(activityId int) (items []*CygxActivityVoiceReq,
 
 // 列表
 func GetActivityVoiceList(condition string, pars []interface{}) (items []*CygxActivityVoice, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := ` SELECT  * FROM  cygx_activity_voice  WHERE  1=1  `
 	if condition != "" {
 		sql += condition
@@ -47,8 +90,16 @@ func GetActivityVoiceList(condition string, pars []interface{}) (items []*CygxAc
 }
 
 func GetCygxActivityVoiceReqDetail(activityId int) (item *CygxActivityVoice, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT *  FROM cygx_activity_voice  WHERE activity_id= ? `
 	err = o.Raw(sql, activityId).QueryRow(&item)
 	return
 }
+
+// 删除数据
+func DeleteCygxActivityVoice(activityId int) (err error) {
+	o := orm.NewOrmUsingDB("hz_cygx")
+	sql := ` DELETE FROM cygx_activity_voice WHERE  activity_id= ? `
+	_, err = o.Raw(sql, activityId).Exec()
+	return
+}

+ 4 - 9
models/cygx/advice.go

@@ -25,10 +25,8 @@ type AdviceListResp struct {
 }
 
 func GetAdviceListCount(condition string, pars []interface{}) (count int, err error) {
-	o := orm.NewOrm()
-	sql := `SELECT COUNT(1) AS count FROM cygx_advice AS a
-			LEFT JOIN wx_user AS b ON a.user_id=b.user_id
-			LEFT JOIN company AS c ON a.company_id=c.company_id`
+	o := orm.NewOrmUsingDB("hz_cygx")
+	sql := `SELECT COUNT(1) AS count FROM cygx_advice AS a `
 	if condition != "" {
 		sql += condition
 	}
@@ -37,11 +35,8 @@ func GetAdviceListCount(condition string, pars []interface{}) (count int, err er
 }
 
 func GetAdviceList(condition string, pars []interface{}, startSize, pageSize int) (items []*CygxAdvice, err error) {
-	o := orm.NewOrm()
-	sql := ` SELECT a.*,b.real_name AS user_real_name,c.company_name,b.mobile,b.email FROM cygx_advice AS a
-			LEFT JOIN wx_user AS b ON a.user_id=b.user_id
-			LEFT JOIN company AS c ON a.company_id=c.company_id
-			 `
+	o := orm.NewOrmUsingDB("hz_cygx")
+	sql := ` SELECT a.*  FROM cygx_advice AS a `
 	if condition != "" {
 		sql += condition
 	}

+ 7 - 14
models/cygx/apply_record.go

@@ -67,13 +67,9 @@ type CygxApplyRecordResp struct {
 }
 
 func GetCygxApplyRecord(condition string, pars []interface{}, startSize, pageSize int) (items []*CygxApplyRecordResp, err error) {
-	o := orm.NewOrm()
-
-	sql := ` SELECT DISTINCT a.*,i.invitee_mobile,i.invitee_company,i.invitee_email,invitee_company_id, GROUP_CONCAT(b.seller_name ORDER BY b.product_id ASC SEPARATOR '/') AS seller_name,c.email,(SELECT COUNT(1) FROM company WHERE company_id =invitee_company_id ) as invitee_company_num
-        FROM cygx_apply_record AS a
-		LEFT JOIN company_product AS b ON a.company_id_pay=b.company_id
-		LEFT JOIN wx_user AS c ON a.user_id=c.user_id 
-		LEFT JOIN user_invitee AS i ON a.user_id = i.inviteed_user_id WHERE 1=1 `
+	o := orm.NewOrmUsingDB("hz_cygx")
+	sql := ` SELECT DISTINCT a.*
+        FROM cygx_apply_record AS a `
 	if condition != "" {
 		sql += condition
 	}
@@ -83,7 +79,7 @@ func GetCygxApplyRecord(condition string, pars []interface{}, startSize, pageSiz
 }
 
 func GetCygxApplyRecordCount(condition string, pars []interface{}) (count int, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	//sql := `SELECT COUNT(1) AS count FROM cygx_apply_record AS a
 	//	LEFT JOIN company_product AS b ON a.company_id_pay=b.company_id
 	//	LEFT JOIN wx_user AS c ON a.user_id=c.user_id WHERE 1=1 `
@@ -91,11 +87,8 @@ func GetCygxApplyRecordCount(condition string, pars []interface{}) (count int, e
 	//if condition != "" {
 	//	sql += condition
 	//}
-	sql := `SELECT COUNT(1) AS count FROM ( SELECT DISTINCT a.*,
-GROUP_CONCAT(b.seller_name ORDER BY b.product_id ASC SEPARATOR '/') AS seller_name,c.email 
-        FROM cygx_apply_record AS a
-		LEFT JOIN company_product AS b ON a.company_id_pay=b.company_id
-		LEFT JOIN wx_user AS c ON a.user_id=c.user_id WHERE 1=1 `
+	sql := `SELECT COUNT(1) AS count FROM ( SELECT DISTINCT a.*
+        FROM cygx_apply_record AS a `
 	if condition != "" {
 		sql += condition
 	}
@@ -115,7 +108,7 @@ type CygxDealReq struct {
 
 func DealCygxApplyRecord(applyRecordId, sysUserId int) (err error) {
 	sql := `UPDATE cygx_apply_record SET status=1,deal_time=NOW(),sys_user_id=? WHERE apply_record_id=? `
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	_, err = o.Raw(sql, sysUserId, applyRecordId).Exec()
 	return
 }

+ 1 - 0
models/cygx/article.go

@@ -0,0 +1 @@
+package cygx

+ 3 - 4
models/cygx/article_ask.go

@@ -19,12 +19,11 @@ type ArticleAskListResp struct {
 	List []*ArticleAsk
 }
 
-//列表
+// 列表
 func GetArticleAskList(articleId int) (items []*ArticleAsk, err error) {
-	o := orm.NewOrm()
-	sql := `SELECT k.*,u.real_name
+	o := orm.NewOrmUsingDB("hz_cygx")
+	sql := `SELECT k.*
 			FROM cygx_article_ask  as k
-			LEFT JOIN wx_user as u ON u.mobile = k.mobile
 			WHERE article_id = ? ORDER BY create_time DESC`
 	_, err = o.Raw(sql, articleId).QueryRows(&items)
 	return

+ 6 - 30
models/cygx/article_comment.go

@@ -19,45 +19,21 @@ type ArticleCommentListResp struct {
 	List []*ArticleComment
 }
 
-//列表
+// 列表
 func GetArticleCommentList(articleId int) (items []*ArticleComment, err error) {
-	o := orm.NewOrm()
-	sql := `SELECT k.*,u.real_name
+	o := orm.NewOrmUsingDB("hz_cygx")
+	sql := `SELECT k.*
 			FROM cygx_article_comment  as k
-			LEFT JOIN wx_user as u ON u.mobile = k.mobile
 			WHERE article_id = ? ORDER BY create_time DESC`
 	_, err = o.Raw(sql, articleId).QueryRows(&items)
 	return
 }
 
-//列表
-func GetArticleCommentListByVideoId(videoId int) (items []*ArticleComment, err error) {
-	o := orm.NewOrm()
-	sql := `SELECT k.*,u.real_name
-			FROM cygx_article_comment  as k
-			LEFT JOIN wx_user as u ON u.mobile = k.mobile
-			WHERE video_id = ? ORDER BY create_time DESC`
-	_, err = o.Raw(sql, videoId).QueryRows(&items)
-	return
-}
-
-//列表
-func GetArticleCommentListByActivityVideoId(videoId int) (items []*ArticleComment, err error) {
-	o := orm.NewOrm()
-	sql := `SELECT k.*,u.real_name
-			FROM cygx_article_comment  as k
-			LEFT JOIN wx_user as u ON u.mobile = k.mobile
-			WHERE video_id = ? ORDER BY create_time DESC`
-	_, err = o.Raw(sql, videoId).QueryRows(&items)
-	return
-}
-
-//留言列表
+// 留言列表
 func GetArticleCommentListSearch(condition string, pars []interface{}) (items []*ArticleComment, err error) {
-	o := orm.NewOrm()
-	sql := ` SELECT k.*,u.real_name
+	o := orm.NewOrmUsingDB("hz_cygx")
+	sql := ` SELECT k.*
 			FROM cygx_article_comment  as k
-			LEFT JOIN wx_user as u ON u.mobile = k.mobile
 			WHERE  1= 1  ` + condition + ` ORDER BY create_time DESC `
 	_, err = o.Raw(sql, pars).QueryRows(&items)
 	return

+ 18 - 22
models/cygx/article_department.go

@@ -29,48 +29,48 @@ type CygxArticleDepartmentList struct {
 	List []*CygxArticleDepartmentRep
 }
 
-//新增
+// 新增
 func AddCygxArticleDepartment(item *CygxArticleDepartment) (newId int64, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	newId, err = o.Insert(item)
 	return
 }
 
-//详情
+// 详情
 func GetArticleDepartmentDateil(nickName, remarks string) (item *CygxArticleDepartmentRep, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT * FROM cygx_article_department WHERE nick_name = ? AND  remarks = ? LIMIT 1 `
 	err = o.Raw(sql, nickName, remarks).QueryRow(&item)
 	return
 }
 
-//详情
+// 详情
 func GetArticleDepartmentDateilById(departmentId int) (item *CygxArticleDepartmentRep, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT * FROM cygx_article_department WHERE department_id = ? `
 	err = o.Raw(sql, departmentId).QueryRow(&item)
 	return
 }
 
-//数量
+// 数量
 func GetArticleDepartmentCount(nickName, remarks string) (count int, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT COUNT(1)  FROM cygx_article_department WHERE nick_name = ? AND  remarks = ? `
 	err = o.Raw(sql, nickName, remarks).QueryRow(&count)
 	return
 }
 
-//数量
+// 数量
 func GetArticleDepartmentCountAll() (count int, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT COUNT(1)  FROM cygx_article_department`
 	err = o.Raw(sql).QueryRow(&count)
 	return
 }
 
-//列表
+// 列表
 func GetCygxArticleDepartmentList(condition string) (items []*CygxArticleDepartmentRep, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT * FROM cygx_article_department `
 	if condition != "" {
 		sql += condition
@@ -92,27 +92,23 @@ type CygxDepartmentFllowRep struct {
 	List     []*CygxDepartmentFllowList
 }
 
-//列表
+// 列表
 func GetCygxDepartmentFllowList(departmentId int) (items []*CygxDepartmentFllowList, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
-			u.real_name,c.company_name,b.real_name as seller_name ,f.create_time
+			f.*
 		FROM
 			cygx_article_department_follow AS f
-			INNER  JOIN wx_user AS u ON u.user_id = f.user_id
-			INNER JOIN company_product AS c ON c.company_id = u.company_id
-			INNER JOIN admin AS b ON b.admin_id = c.seller_id 
 		WHERE
 			f.department_id = ?
-			AND f.type = 1
-			AND c.product_id = 2 `
+			AND f.type = 1 `
 	_, err = o.Raw(sql, departmentId).QueryRows(&items)
 	return
 }
 
-//详情
+// 详情
 func GetArticleDepartmentDateilByDepartmentId(departmentId int) (item *CygxArticleDepartment, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT * FROM cygx_article_department WHERE department_id = ? `
 	err = o.Raw(sql, departmentId).QueryRow(&item)
 	return

+ 8 - 8
models/cygx/article_type.go

@@ -28,32 +28,32 @@ type ArticleTypeListResp struct {
 	AbstractList []*ArticleTypeAndAbstract
 }
 
-//列表
+// 列表
 func GetCygxArticleTypeList() (items []*CygxArticleType, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT * FROM cygx_article_type ORDER BY sort DESC`
 	_, err = o.Raw(sql).QueryRows(&items)
 	return
 }
 
-//新增
+// 新增
 func AddCygxArticleType(item *CygxArticleType) (newId int64, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	newId, err = o.Insert(item)
 	return
 }
 
-//详情
+// 详情
 func GetCygxArticleTypeDetailById(activityTypeId int) (item *CygxArticleType, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT * FROM cygx_article_type WHERE article_type_id = ? `
 	err = o.Raw(sql, activityTypeId).QueryRow(&item)
 	return
 }
 
-//获取数量
+// 获取数量
 func GetCygxArticleTypeCount(condition string) (count int, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sqlCount := `SELECT COUNT(1) AS count  FROM cygx_article_type WHERE  1=1 ` + condition
 	err = o.Raw(sqlCount).QueryRow(&count)
 	return

+ 10 - 10
models/cygx/banner.go

@@ -34,14 +34,14 @@ type CygxBannerReq struct {
 
 // 添加
 func AddCygxBanner(item *CygxBanner) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	_, err = o.Insert(item)
 	return
 }
 
 // 修改
 func UpdateCygxBanner(item *CygxBanner) (err error) {
-	to := orm.NewOrm()
+	to := orm.NewOrmUsingDB("hz_cygx")
 	updateParams := make(map[string]interface{})
 	updateParams["ImgId"] = item.ImgId
 	updateParams["ListType"] = item.ListType
@@ -96,7 +96,7 @@ type GetCygxBannerImgRespDetailResp struct {
 
 // 通过ID获取详情
 func GetCygxBannerDetail(banneId int) (item *CygxBannerResp, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT * FROM cygx_banner  WHERE banner_id=? `
 	err = o.Raw(sql, banneId).QueryRow(&item)
 	return
@@ -104,7 +104,7 @@ func GetCygxBannerDetail(banneId int) (item *CygxBannerResp, err error) {
 
 // 获取某一列,最大的排序值
 func GetCygxBannerDetailByListTypeMaxSort(listType string) (item *CygxBanner, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT  * FROM cygx_banner  WHERE  list_type = ? ORDER BY sort DESC   LIMIT 1  `
 	err = o.Raw(sql, listType).QueryRow(&item)
 	return
@@ -112,7 +112,7 @@ func GetCygxBannerDetailByListTypeMaxSort(listType string) (item *CygxBanner, er
 
 // UpdateCygxBannerRespMulti 批量修改banner排序
 func UpdateCygxBannerMulti(items []*CygxBanner) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	p, err := o.Raw(` UPDATE cygx_banner SET sort = ? WHERE banner_id = ?  `).Prepare()
 	if err != nil {
 		return
@@ -133,7 +133,7 @@ func UpdateCygxBannerMulti(items []*CygxBanner) (err error) {
 
 // 修改是否展示
 func EditCygxBannerStatus(status, banneId int) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `UPDATE cygx_banner SET status=?, modify_time=NOW()   WHERE banner_id=? `
 	_, err = o.Raw(sql, status, banneId).Exec()
 	return
@@ -145,14 +145,14 @@ func GetCygxBannerCount(condition string, pars []interface{}) (count int, err er
 	if condition != "" {
 		sqlCount += condition
 	}
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	err = o.Raw(sqlCount, pars).QueryRow(&count)
 	return
 }
 
 // 列表
 func GetCygxBannerList(condition string, pars []interface{}, startSize, pageSize int) (items []*CygxBannerResp, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT * FROM cygx_banner as art WHERE 1= 1 `
 	if condition != "" {
 		sql += condition
@@ -169,7 +169,7 @@ type CygxBannerListResp struct {
 
 // 移动列数并修改排序
 func EditCygxBannerMove(sort, banneId int, listType string) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	to, err := o.Begin()
 	if err != nil {
 		return
@@ -207,7 +207,7 @@ func EditCygxBannerMove(sort, banneId int, listType string) (err error) {
 
 // 移动列数并修改排序
 func UpdateCygxBannerlistType(sort, banneId int, listType string) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `UPDATE cygx_banner SET sort = ?,  list_type =?, modify_time=NOW()  WHERE banner_id=?   `
 	_, err = o.Raw(sql, sort, listType, banneId).Exec()
 

+ 4 - 4
models/cygx/banner_history.go

@@ -22,7 +22,7 @@ type CygxBannerHistory struct {
 
 // 列表
 func GetCygxBannerHistoryList(condition string, pars []interface{}) (items []*CygxBannerHistory, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT * FROM cygx_banner_history as art WHERE 1= 1 `
 	if condition != "" {
 		sql += condition
@@ -37,7 +37,7 @@ func GetCygxBannerHistoryCount(condition string, pars []interface{}) (count int,
 	if condition != "" {
 		sqlCount += condition
 	}
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	err = o.Raw(sqlCount, pars).QueryRow(&count)
 	return
 }
@@ -49,7 +49,7 @@ func GetCygxBannerHistoryCountUv(bannerId int) (count int, err error) {
 		FROM
 			( SELECT count(*) FROM cygx_banner_history WHERE 1 = 1 AND banner_id = ? GROUP BY user_id ) b `
 
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	err = o.Raw(sqlCount, bannerId).QueryRow(&count)
 	return
 }
@@ -57,7 +57,7 @@ func GetCygxBannerHistoryCountUv(bannerId int) (count int, err error) {
 // 获取数量
 func GetCygxBannerHistoryCountPv(bannerId int) (count int, err error) {
 	sqlCount := ` SELECT COUNT(1) AS count  FROM cygx_banner_history as art WHERE 1= 1  AND banner_id = ? `
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	err = o.Raw(sqlCount, bannerId).QueryRow(&count)
 	return
 }

+ 3 - 3
models/cygx/banner_img.go

@@ -27,14 +27,14 @@ func GetCygxBannerImgCount(condition string, pars []interface{}) (count int, err
 	if condition != "" {
 		sqlCount += condition
 	}
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	err = o.Raw(sqlCount, pars).QueryRow(&count)
 	return
 }
 
 // 列表
 func GetCygxBannerImgList(condition string, pars []interface{}, startSize, pageSize int) (items []*CygxBannerImgResp, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT * FROM cygx_banner_img as art WHERE 1= 1 `
 	if condition != "" {
 		sql += condition
@@ -46,7 +46,7 @@ func GetCygxBannerImgList(condition string, pars []interface{}, startSize, pageS
 
 // 通过ID获取详情
 func GetCygxBannerImgDetail(imgId int) (item *CygxBannerImgResp, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT * FROM cygx_banner_img  WHERE img_id=? `
 	err = o.Raw(sql, imgId).QueryRow(&item)
 	return

+ 43 - 41
models/cygx/chart.go

@@ -94,19 +94,12 @@ type CygxChartDetail struct {
 }
 
 func GetChartCountById(chartId int) (count int, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT COUNT(1) AS count FROM cygx_chart WHERE chart_id = ? `
 	err = o.Raw(sql, chartId).QueryRow(&count)
 	return
 }
 
-// 新增图表
-func AddCygxChart(item *CygxChart) (lastId int64, err error) {
-	o := orm.NewOrm()
-	lastId, err = o.Insert(item)
-	return
-}
-
 // 标签分类
 type ChartPtagResultApi struct {
 	Data []ChartPtagResultApidate `json:"data"`
@@ -171,7 +164,7 @@ type ChartCollectReq struct {
 
 // 获取图表列表
 func GetChartList(condition string, pars []interface{}, startSize, pageSize int) (items []*HomeChartListResp, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := ` SELECT * FROM cygx_chart AS a WHERE a.publish_status=1 `
 	if condition != "" {
 		sql += condition
@@ -183,7 +176,7 @@ func GetChartList(condition string, pars []interface{}, startSize, pageSize int)
 
 // 获取图表列表
 func GetChartListCollection(chartIds string, userId, startSize, pageSize int) (items []*UserInteraction, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := ` SELECT a.*,
 			t.create_time AS t_create_time,
 			c.create_time AS c_create_time,
@@ -207,7 +200,7 @@ func GetChartListCollection(chartIds string, userId, startSize, pageSize int) (i
 
 // 获取图表列表本地
 func GetChartListCollectionWithCygxByMobile(condition string, startSize, pageSize int) (items []*HomeChartListResp, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := ` SELECT
 			a.chart_id,a.title,a.title_en,a.ptag_name,a.ctag_name,a.cover,a.iframe,a.ptag_name_two,a.ctag_name_two,
 			r.create_time AS create_date
@@ -225,7 +218,7 @@ func GetChartListCollectionWithCygxByMobile(condition string, startSize, pageSiz
 
 // 获取图表列表本地
 func GetChartListCollectionWithCygx(condition string, startSize, pageSize int) (items []*UserInteraction, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := ` SELECT
 			a.chart_id,a.title,a.title_en,a.ptag_name,a.ctag_name,a.cover,a.iframe,a.ptag_name_two,a.ctag_name_two,
 			r.create_time AS create_time
@@ -244,7 +237,7 @@ func GetChartListCollectionWithCygx(condition string, startSize, pageSize int) (
 
 // 获取图表数量
 func GetChartCount(condition string, pars []interface{}) (count int, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT COUNT(1) AS count
                 FROM cygx_chart AS a
                 WHERE a.publish_status=1 `
@@ -256,13 +249,15 @@ func GetChartCount(condition string, pars []interface{}) (count int, err error)
 }
 
 func GetChartCountByUser(condition string) (count int, err error) {
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT COUNT(1) AS count FROM cygx_chart_collect as r INNER JOIN cygx_chart_all AS a ON r.chart_id = a.chart_id  WHERE 1=1   ` + condition
-	err = orm.NewOrm().Raw(sql).QueryRow(&count)
+	err = o.Raw(sql).QueryRow(&count)
 	return
 }
 func GetChartCountByUserMobile(condition string) (count int, err error) {
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT COUNT(1) AS count FROM cygx_chart_collect as r  INNER JOIN cygx_chart_all AS a ON a.chart_id = r.chart_id  WHERE 1= 1 ` + condition
-	err = orm.NewOrm().Raw(sql).QueryRow(&count)
+	err = o.Raw(sql).QueryRow(&count)
 	return
 }
 
@@ -273,11 +268,17 @@ type CygxChartCollect struct {
 
 // 获取图表列表
 func GetChartCollectList(condition string) (items []*UserInteraction, err error) {
+	//o := orm.NewOrm()
+	//sql := `SELECT u.mobile,u.user_id,u.real_name FROM cygx_chart_collect AS r
+	//		INNER JOIN wx_user AS u ON u.mobile = r.mobile
+	//		LEFT  JOIN cygx_user_interaction_num AS ui ON ui.user_id = r.user_id
+	//		WHERE 1= 1 ` + condition + `   GROUP BY r.mobile  ORDER BY ui.chart_count_num DESC `
+	//_, err = o.Raw(sql).QueryRows(&items)
+
 	o := orm.NewOrm()
 	sql := `SELECT u.mobile,u.user_id,u.real_name FROM cygx_chart_collect AS r
-			INNER JOIN wx_user AS u ON u.mobile = r.mobile 
-			LEFT  JOIN cygx_user_interaction_num AS ui ON ui.user_id = r.user_id 
-			WHERE 1= 1 ` + condition + `   GROUP BY r.mobile  ORDER BY ui.chart_count_num DESC `
+			INNER JOIN wx_user AS u ON u.mobile = r.mobile
+			WHERE 1= 1 ` + condition + `   GROUP BY r.mobile `
 	_, err = o.Raw(sql).QueryRows(&items)
 	return
 }
@@ -285,13 +286,19 @@ func GetChartCollectList(condition string) (items []*UserInteraction, err error)
 // 获取图表列表
 func GetChartCollectBycompanyList(condition string, startSize, pageSize int) (items []*UserInteraction, err error) {
 	o := orm.NewOrm()
+	//sql := `SELECT u.mobile,u.user_id,u.real_name,r.company_name,
+	//		cp.seller_name FROM cygx_chart_collect AS r
+	//		INNER JOIN wx_user AS u ON u.user_id = r.user_id
+	//		INNER  JOIN cygx_user_interaction_num AS ui ON ui.user_id = r.user_id
+	//		LEFT JOIN company_product AS cp ON cp.company_id = r.company_id AND cp.product_id = 2
+	//		INNER JOIN cygx_company_interaction_num AS ci ON ci.company_id = r.company_id
+	//		WHERE 1= 1 ` + condition + `   GROUP BY r.mobile  ORDER BY ci.chart_count_num DESC , ui.chart_count_num DESC `
+
 	sql := `SELECT u.mobile,u.user_id,u.real_name,r.company_name,
 			cp.seller_name FROM cygx_chart_collect AS r
-			INNER JOIN wx_user AS u ON u.user_id = r.user_id 
-			INNER  JOIN cygx_user_interaction_num AS ui ON ui.user_id = r.user_id
+			INNER JOIN wx_user AS u ON u.user_id = r.user_id
 			LEFT JOIN company_product AS cp ON cp.company_id = r.company_id AND cp.product_id = 2
-			INNER JOIN cygx_company_interaction_num AS ci ON ci.company_id = r.company_id
-			WHERE 1= 1 ` + condition + `   GROUP BY r.mobile  ORDER BY ci.chart_count_num DESC , ui.chart_count_num DESC `
+			WHERE 1= 1 ` + condition + `   GROUP BY r.mobile   `
 	if startSize > 0 || pageSize > 0 {
 		sql += ` LIMIT ` + strconv.Itoa(startSize) + "," + strconv.Itoa(pageSize)
 	}
@@ -301,38 +308,33 @@ func GetChartCollectBycompanyList(condition string, startSize, pageSize int) (it
 
 // 获取一共有多少用户收藏图表
 func GetChartCountByUserCount(condition string) (count int, err error) {
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := ` SELECT
-	COUNT( 1 ) AS count 
-FROM
-	(
-	SELECT
-		COUNT( 1 ) 
-	FROM
-		cygx_chart_collect AS r
-		INNER JOIN wx_user AS u ON u.user_id = r.user_id
-		INNER JOIN cygx_user_interaction_num AS ui ON ui.user_id = r.user_id
-		INNER JOIN cygx_company_interaction_num AS ci ON ci.company_id = r.company_id 
-		WHERE 1= 1 ` + condition + ` GROUP BY u.user_id ) AS count`
-	err = orm.NewOrm().Raw(sql).QueryRow(&count)
+			COUNT( 1 ) AS count 
+		FROM
+			(
+			SELECT
+				COUNT( 1 ) 
+			FROM
+				cygx_chart_collect AS r
+				INNER JOIN cygx_user_interaction_num AS ui ON ui.user_id = r.user_id
+				INNER JOIN cygx_company_interaction_num AS ci ON ci.company_id = r.company_id 
+				WHERE 1= 1 ` + condition + ` GROUP BY u.user_id ) AS count`
+	err = o.Raw(sql).QueryRow(&count)
 	return
 }
 
 func GetChartCountBySeller(condition string) (list []*company.CompanyReportRecordGroup, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
-	p.seller_id AS admin_id,
 	count(
 	DISTINCT ( r.company_id )) num,
 	GROUP_CONCAT( DISTINCT r.company_id SEPARATOR ',' ) AS company_ids 
 FROM
 	cygx_chart_collect AS r
 	INNER JOIN cygx_chart_all AS a ON a.chart_id = r.chart_id
-	INNER JOIN company_product AS p ON p.company_id = r.company_id 
 WHERE
-	1 = 1 
-	AND p.product_id = 2  ` + condition
-
-	sql += ` GROUP BY p.seller_id `
+	1 = 1  ` + condition
 	_, err = o.Raw(sql).QueryRows(&list)
 	return
 }

+ 11 - 11
models/cygx/chart_permission.go

@@ -29,7 +29,7 @@ func GetChartPermissionAll() (items []*ChartPermission, err error) {
 	return
 }
 
-//获取带有ICo的产业
+// 获取带有ICo的产业
 func GetChartPermissionIco(condition string) (items []*ChartPermission, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT * FROM chart_permission  WHERE 1=1 `
@@ -41,7 +41,7 @@ func GetChartPermissionIco(condition string) (items []*ChartPermission, err erro
 	return
 }
 
-//获取带有ICo的产业
+// 获取带有ICo的产业
 func GetChartPermissionIcoNew(condition string) (items []*CygxRSlChartPermissionIcoTmp, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT chart_permission_id ,chart_permission_name,image_url as ico_link FROM chart_permission  WHERE 1=1 `
@@ -53,7 +53,7 @@ func GetChartPermissionIcoNew(condition string) (items []*CygxRSlChartPermission
 	return
 }
 
-//获取带有ICo的产业
+// 获取带有ICo的产业
 func GetChartPermissionIcoDetail(condition string) (items []*CygxRSlChartPermissionIco, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT chart_permission_id ,chart_permission_name,image_url as ico_link FROM chart_permission  WHERE 1=1 `
@@ -65,7 +65,7 @@ func GetChartPermissionIcoDetail(condition string) (items []*CygxRSlChartPermiss
 	return
 }
 
-//获取带有ICo的产业
+// 获取带有ICo的产业
 func GetChartPermissionDetail(condition string) (items []*CygxReportSelectionChart, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT chart_permission_id ,chart_permission_name,image_url as ico_link FROM chart_permission  WHERE 1=1 `
@@ -77,7 +77,7 @@ func GetChartPermissionDetail(condition string) (items []*CygxReportSelectionCha
 	return
 }
 
-//没有策略的顶级分类
+// 没有策略的顶级分类
 func GetChartPermissionAllNoTactics() (items []*ChartPermission, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT * FROM chart_permission WHERE product_id=2 AND show_type=1 AND is_report=1 AND chart_permission_id != 23 AND is_other = 0 AND permission_type != 2   ORDER BY sort ASC   `
@@ -92,7 +92,7 @@ func GetChartPermissionOtherAll() (items []*ChartPermission, err error) {
 	return
 }
 
-//获取产业数量
+// 获取产业数量
 func GetChartPermissionCount(condition string, pars []interface{}) (count int, err error) {
 	sqlCount := ` SELECT COUNT(1) AS count  FROM chart_permission WHERE 1=1 `
 	if condition != "" {
@@ -103,7 +103,7 @@ func GetChartPermissionCount(condition string, pars []interface{}) (count int, e
 	return
 }
 
-//通过ID获取分类详情
+// 通过ID获取分类详情
 func GetCategoryInfoById(chartPermissionId int) (item *ChartPermission, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT * FROM chart_permission WHERE chart_permission_id=?`
@@ -111,7 +111,7 @@ func GetCategoryInfoById(chartPermissionId int) (item *ChartPermission, err erro
 	return
 }
 
-//通过名称获取分类详情
+// 通过名称获取分类详情
 func GetCategoryInfoByName(name string) (item *ChartPermission, err error) {
 	if name == "宏观" {
 		name = "宏观经济"
@@ -122,7 +122,7 @@ func GetCategoryInfoByName(name string) (item *ChartPermission, err error) {
 	return
 }
 
-//报告分类映射类型
+// 报告分类映射类型
 type ReportMapping struct {
 	CategoryId        int    `description:"匹配ID"`
 	MatchTypeName     string `description:"匹配类型"`
@@ -131,14 +131,14 @@ type ReportMapping struct {
 }
 
 func GetReportMapping() (item []*ReportMapping, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := ` SELECT *  FROM	cygx_report_mapping WHERE	match_type_name != ''  `
 	_, err = o.Raw(sql).QueryRows(&item)
 	return
 }
 
 func GetReportMappingDetail(condition string, pars []interface{}) (item *ReportMapping, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := ` SELECT *  FROM	cygx_report_mapping WHERE	 1= 1  ` + condition + ` LIMIT 1 `
 	err = o.Raw(sql, pars).QueryRow(&item)
 	return

+ 6 - 6
models/cygx/company_user_type.go

@@ -16,13 +16,13 @@ type CygxCompanyUserType struct {
 
 // 新增权益客户身份类型
 func AddCygxCompanyUserType(item *CygxCompanyUserType) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	_, err = o.Insert(item)
 	return
 }
 
 func GetCygxCompanyUserTypeByCompanyId(companyId int) (count int, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT COUNT(1) AS count FROM cygx_company_user_type AS a WHERE a.company_id=?  `
 	err = o.Raw(sql, companyId).QueryRow(&count)
 	return
@@ -30,7 +30,7 @@ func GetCygxCompanyUserTypeByCompanyId(companyId int) (count int, err error) {
 
 // CygxCompanyUserType 更新权益客户身份类型
 func UpdateCygxCompanyUserType(companyId, useType int) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `UPDATE cygx_company_user_type SET customer_type_id=? WHERE company_id=? `
 	_, err = o.Raw(sql, useType, companyId).Exec()
 	return
@@ -38,7 +38,7 @@ func UpdateCygxCompanyUserType(companyId, useType int) (err error) {
 
 // 通过活动ID获取详情
 func GetCygxCompanyUserType(companyId int) (item *CygxCompanyUserType, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT *  FROM cygx_company_user_type AS a WHERE a.company_id=?  `
 	err = o.Raw(sql, companyId).QueryRow(&item)
 	return
@@ -46,7 +46,7 @@ func GetCygxCompanyUserType(companyId int) (item *CygxCompanyUserType, err error
 
 // 获取大套餐客户列表
 func GetCygxCompanyUserTypeList() (items []*CygxCompanyUserType, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT *  FROM cygx_company_user_type AS a WHERE a.customer_type_id=2  `
 	_, err = o.Raw(sql).QueryRows(&items)
 	return
@@ -54,7 +54,7 @@ func GetCygxCompanyUserTypeList() (items []*CygxCompanyUserType, err error) {
 
 // CygxCompanyUserType 更新权益客户身份类型
 func UpdateCygxCompanyUserTypeAndPackageType(companyId, useType, packageType int) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `UPDATE cygx_company_user_type SET customer_type_id=?, package_type = ? WHERE company_id=? `
 	_, err = o.Raw(sql, useType, packageType, companyId).Exec()
 	return

+ 6 - 6
models/cygx/config.go

@@ -18,25 +18,25 @@ type NameAndUrlList struct {
 	List []*NameAndUrl
 }
 
-//详情
+// 详情
 func GetCygxConfigDetail() (item *CygxConfig, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT * FROM cygx_config  WHERE config_code= 'is_show_sustainable'`
 	err = o.Raw(sql).QueryRow(&item)
 	return
 }
 
-//修改
+// 修改
 func CygxConfigUpdate(newValue int) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `UPDATE cygx_config SET  config_value=?   WHERE config_code= 'is_show_sustainable'`
 	_, err = o.Raw(sql, newValue).Exec()
 	return
 }
 
-//详情
+// 详情
 func GetCygxConfigDetailByCode(code string) (item *CygxConfig, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT * FROM cygx_config  WHERE config_code= ?`
 	err = o.Raw(sql, code).QueryRow(&item)
 	return

+ 6 - 6
models/cygx/cygx_activity_special_points_company.go

@@ -9,7 +9,7 @@ type CygxActivitySpecialInheritPointsCompany struct {
 	Id                  int       `orm:"column(id);pk"`
 	CompanyId           int       // 公司ID
 	CompanyName         string    // 公司名称
-	Points              int   // 公司剩余点数
+	Points              int       // 公司剩余点数
 	CreateTime          time.Time // 创建时间
 	ModifyTime          time.Time // 更新时间
 	ChartPermissionId   int       // 品种ID
@@ -17,7 +17,7 @@ type CygxActivitySpecialInheritPointsCompany struct {
 }
 
 func AddCygxActivitySpecialPointsCompany(item *CygxActivitySpecialInheritPointsCompany) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	_, err = o.Insert(item)
 	if err != nil {
 		return
@@ -26,14 +26,14 @@ func AddCygxActivitySpecialPointsCompany(item *CygxActivitySpecialInheritPointsC
 }
 
 func AddCygxActivitySpecialInheritPointsCompanyMulti(items []*CygxActivitySpecialInheritPointsCompany) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	_, err = o.InsertMulti(1, items)
 	return
 }
 
 func GetCygxActivitySpecialInheritPointsByCompanyId(companyId int) (list []*CygxActivitySpecialInheritPointsCompany, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := ` SELECT * FROM cygx_activity_special_inherit_points_company WHERE company_id = ?  `
-	_, err = o.Raw(sql,companyId).QueryRows(&list)
+	_, err = o.Raw(sql, companyId).QueryRows(&list)
 	return
-}
+}

+ 37 - 9
models/cygx/cygx_morning_meeting_review_chapter.go

@@ -40,19 +40,31 @@ type AddMorningMeetingReviewsReq struct {
 
 // 添加晨报点评章节
 func AddCygxMorningMeetingReviewChapter(item *CygxMorningMeetingReviewChapter) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	_, err = o.Insert(item)
 	return
 }
 
 // 列表
 func GetCygxMorningMeetingReviewsListById(meetingId int) (items []*CygxMorningMeetingReviewChapter, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT * FROM cygx_morning_meeting_review_chapter WHERE meeting_id = ? `
 	_, err = o.Raw(sql, meetingId).QueryRows(&items)
 	return
 }
 
+// 列表
+func GetCygxMorningMeetingReviewChapterList(condition string, pars []interface{}, startSize, pageSize int) (items []*CygxMorningMeetingReviewChapter, err error) {
+	o := orm.NewOrmUsingDB("hz_cygx")
+	sql := `SELECT * FROM cygx_morning_meeting_review_chapter WHERE 1=1 `
+	if condition != "" {
+		sql += condition
+	}
+	sql += ` LIMIT ?,? `
+	_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
+	return
+}
+
 type IndustrialSubjectItem struct {
 	IndustrialSubjectId int    `orm:"column(industrial_subject_id);pk" description:"标的id"`
 	SubjectName         string `description:"标的名称"`
@@ -80,7 +92,7 @@ type CygxMorningMeetingReviewChapterResp struct {
 
 // 删除晨会点评章节
 func DeleteMorningMeetingChapter(reviewId int) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := ` DELETE FROM cygx_morning_meeting_review_chapter WHERE meeting_id =? `
 	_, err = o.Raw(sql, reviewId).Exec()
 	return
@@ -88,7 +100,7 @@ func DeleteMorningMeetingChapter(reviewId int) (err error) {
 
 // 更新晨报点评章节
 func UpdateCygxMorningMeetingReviewChapter(item *CygxMorningMeetingReviewChapter) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `UPDATE cygx_morning_meeting_review_chapter
 			SET
 			  meeting_time =?,
@@ -107,7 +119,7 @@ func UpdateCygxMorningMeetingReviewChapter(item *CygxMorningMeetingReviewChapter
 }
 
 func GetCygxMorningMeetingReviewsListByIdAndIndustryId(meetingId, industryId int) (item *CygxMorningMeetingReviewChapter, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT * FROM cygx_morning_meeting_review_chapter WHERE meeting_id = ? AND industry_id = ? `
 	err = o.Raw(sql, meetingId, industryId).QueryRow(&item)
 	return
@@ -115,7 +127,7 @@ func GetCygxMorningMeetingReviewsListByIdAndIndustryId(meetingId, industryId int
 
 // 删除晨会点评章节
 func DeleteMorningMeetingChapterById(chapterId int) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := ` DELETE FROM cygx_morning_meeting_review_chapter WHERE id =? `
 	_, err = o.Raw(sql, chapterId).Exec()
 	return
@@ -133,7 +145,7 @@ type CygxMorningMeetingGather struct {
 
 // 列表
 func GetCygxMorningMeetingGatherList(condition string, pars []interface{}, startSize, pageSize int) (items []*CygxMorningMeetingGather, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT * FROM cygx_morning_meeting_gather WHERE 1=1 `
 	if condition != "" {
 		sql += condition
@@ -145,7 +157,7 @@ func GetCygxMorningMeetingGatherList(condition string, pars []interface{}, start
 
 // 更改
 func UpdateCygxMorningMeetingGather(meetingIds string, meetingGatherId int) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := ` UPDATE cygx_morning_meeting_gather SET meeting_ids=? WHERE id =?  `
 	_, err = o.Raw(sql, meetingIds, meetingGatherId).Exec()
 	return
@@ -153,8 +165,24 @@ func UpdateCygxMorningMeetingGather(meetingIds string, meetingGatherId int) (err
 
 // 详情
 func GetCygxMorningMeetingReviewChapterDetail(meetingGatherId int) (item *CygxMorningMeetingReviewChapter, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT *  FROM cygx_morning_meeting_review_chapter  WHERE id= ? `
 	err = o.Raw(sql, meetingGatherId).QueryRow(&item)
 	return
 }
+
+// 获取数量
+func GetCygxMorningMeetingReviewChapterCount(cid int) (count int, err error) {
+	o := orm.NewOrmUsingDB("hz_cygx")
+	sqlCount := ` SELECT
+				COUNT( 1 ) AS count 
+			FROM
+				cygx_morning_meeting_review_chapter AS c
+				INNER JOIN cygx_morning_meeting_reviews AS a ON a.id = c.meeting_id 
+			WHERE
+				1 = 1 
+				AND c.id = ?
+				AND a.STATUS = 1`
+	err = o.Raw(sqlCount, cid).QueryRow(&count)
+	return
+}

+ 13 - 13
models/cygx/cygx_morning_meeting_reviews.go

@@ -19,16 +19,16 @@ type CygxMorningMeetingReviews struct {
 	IndustryNames string    `json:"industryName"` // 产业名称
 }
 
-//添加晨报点评
+// 添加晨报点评
 func AddCygxMorningMeetingReviews(item *CygxMorningMeetingReviews) (id int64, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	id, err = o.Insert(item)
 	return
 }
 
-//列表
+// 列表
 func GetCygxMorningMeetingReviewsList(condition string, pars []interface{}, startSize, pageSize int) (items []*CygxMorningMeetingReviews, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT * FROM cygx_morning_meeting_reviews WHERE 1=1 `
 	if condition != "" {
 		sql += condition
@@ -39,7 +39,7 @@ func GetCygxMorningMeetingReviewsList(condition string, pars []interface{}, star
 }
 
 func GetCygxMorningMeetingReviewsListCount(condition string, pars []interface{}) (count int, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT COUNT(1) AS count FROM cygx_morning_meeting_reviews WHERE 1=1 `
 	if condition != "" {
 		sql += condition
@@ -65,7 +65,7 @@ type CygxMorningMeetingReviewsList struct {
 }
 
 func GetMorningMeetingReviewById(reviewId int) (item *CygxMorningMeetingReviews, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT * FROM cygx_morning_meeting_reviews WHERE id=?`
 	err = o.Raw(sql, reviewId).QueryRow(&item)
 	return
@@ -73,7 +73,7 @@ func GetMorningMeetingReviewById(reviewId int) (item *CygxMorningMeetingReviews,
 
 // 发布报告
 func PublishMorningMeetingReviewById(reviewId int) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `UPDATE cygx_morning_meeting_reviews SET status=1,publish_time=now(),modify_time=NOW() WHERE id = ? `
 	_, err = o.Raw(sql, reviewId).Exec()
 	return
@@ -87,9 +87,9 @@ type MorningReviewPublishCancelReq struct {
 	ReviewId int `description:"晨会id"`
 }
 
-//取消发布报告
+// 取消发布报告
 func PublishCancelMorningMeetingReview(reviewId int) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := ` UPDATE cygx_morning_meeting_reviews SET status=0,publish_time=null WHERE id =?  `
 	_, err = o.Raw(sql, reviewId).Exec()
 	return
@@ -126,17 +126,17 @@ func DeleteMorningReviewAndChapter(reviewId int) (err error) {
 	return
 }
 
-//删除晨会点评
+// 删除晨会点评
 func DeleteMorningMeeting(reviewId int) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := ` DELETE FROM cygx_morning_meeting_reviews WHERE id =? `
 	_, err = o.Raw(sql, reviewId).Exec()
 	return
 }
 
-//更新晨报点评
+// 更新晨报点评
 func UpdateCygxMorningMeetingReviews(item *CygxMorningMeetingReviews) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `UPDATE cygx_morning_meeting_reviews
 			SET
 			  meeting_time =?,

+ 34 - 19
models/cygx/cygx_report_mapping.go

@@ -15,7 +15,7 @@ type CygxReportMappingListRep struct {
 
 // 主题列表
 func CygxReportMappingist(chartPermissionId int) (items []*CygxReportMapping, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT sub_category_name FROM cygx_report_mapping WHERE  chart_permission_id = ? GROUP BY sub_category_name`
 	_, err = o.Raw(sql, chartPermissionId).QueryRows(&items)
 	return
@@ -31,7 +31,7 @@ type CygxReportMappingMatchTypeRep struct {
 
 // 主题列表
 func CygxReportMappingMatchTypeList() (items []*CygxReportMappingMatchType, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT match_type_name FROM cygx_report_mapping WHERE report_type = 2  GROUP BY match_type_name`
 	_, err = o.Raw(sql).QueryRows(&items)
 	return
@@ -39,7 +39,7 @@ func CygxReportMappingMatchTypeList() (items []*CygxReportMappingMatchType, err
 
 // 主题列表所有
 func CygxReportMappingMatchTypeListAll() (items []*CygxReportMappingMatchType, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT match_type_name FROM cygx_report_mapping WHERE match_type_name  != ''  GROUP BY match_type_name`
 	_, err = o.Raw(sql).QueryRows(&items)
 	return
@@ -47,7 +47,7 @@ func CygxReportMappingMatchTypeListAll() (items []*CygxReportMappingMatchType, e
 
 // 主题列表
 func CygxReportMappingMatchTypeListExcel() (items []*CygxReportMappingMatchType, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT match_type_name FROM cygx_report_mapping WHERE report_type = 2 AND chart_permission_id != 23 GROUP BY match_type_name`
 	_, err = o.Raw(sql).QueryRows(&items)
 	return
@@ -62,7 +62,7 @@ func GetReportCount(chartPermissionId, industrialManagementId int, matchTypeName
 	WHERE re.chart_permission_id = ? 
     AND man_g.industrial_management_id = ?
 	AND re.match_type_name = ` + "'" + matchTypeName + "'"
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	err = o.Raw(sqlCount, chartPermissionId, industrialManagementId).QueryRow(&recount)
 	return
 }
@@ -76,30 +76,45 @@ type ReportMappingRep struct {
 }
 
 func GetMatchTypeNameById(Id int) (item *ReportMappingRep, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT * FROM cygx_report_mapping WHERE id = ? `
 	err = o.Raw(sql, Id).QueryRow(&item)
 	return
 }
 
 func GetMatchTypeNameByPermissionId(permissionId int) (item *ReportMappingRep, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT category_id FROM cygx_report_mapping WHERE chart_permission_id = ? AND category_id IN (1004,1005,1006,1007) AND report_type = 2 LIMIT 1 `
 	err = o.Raw(sql, permissionId).QueryRow(&item)
 	return
 }
 
 func GetMatchTypeNameByKeyword(keyWord string) (items []*CygxReportMapping, err error) {
-	o := orm.NewOrm()
-	sql := ` SELECT
-	* 
-FROM
-( SELECT sub_category_name FROM cygx_report_mapping UNION 
-SELECT "晨会精华" AS sub_category_name UNION 
-SELECT "路演精华" AS sub_category_name UNION 
-SELECT article_type_name AS sub_category_name FROM cygx_article_type ) AS a
-WHERE
-	a.sub_category_name LIKE '%` + keyWord + `%' `
-	_,err = o.Raw(sql).QueryRows(&items)
+	o := orm.NewOrmUsingDB("hz_cygx")
+	sql := `SELECT
+			* 
+		FROM
+			(
+			SELECT
+				match_type_name AS sub_category_name 
+			FROM
+				cygx_report_mapping_cygx UNION
+			SELECT
+				"晨会精华" AS sub_category_name UNION
+			SELECT
+				"路演精华" AS sub_category_name UNION
+			SELECT
+				"重点公司" AS sub_category_name UNION
+			SELECT
+				"本周研究汇总" AS sub_category_name UNION
+			SELECT
+				"上周纪要汇总" AS sub_category_name UNION
+			SELECT
+				article_type_name AS sub_category_name 
+			FROM
+			cygx_article_type 
+			) AS a
+		WHERE a.sub_category_name LIKE '%` + keyWord + `%' `
+	_, err = o.Raw(sql).QueryRows(&items)
 	return
-}
+}

+ 11 - 11
models/cygx/cygx_tag.go

@@ -22,13 +22,13 @@ type CygxTag struct {
 
 // 添加标签
 func AddCygxTag(item *CygxTag) (id int64, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	id, err = o.Insert(item)
 	return
 }
 
 func (m *CygxTag) Update(cols []string) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	_, err = o.Update(m, cols...)
 	return
 }
@@ -52,7 +52,7 @@ type CygxTagList struct {
 
 // 获取tag列表
 func GetCygxTagList(cond string) (items []*CygxTagList, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT * FROM cygx_tag  WHERE 1=1 AND status = 1 `
 	if cond != "" {
 		sql += cond
@@ -65,7 +65,7 @@ func GetCygxTagList(cond string) (items []*CygxTagList, err error) {
 
 // 获取tag列表-总数
 func GetCygxTagListCount(cond string) (count int, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT COUNT(1) AS count FROM cygx_tag  WHERE 1=1  `
 	if cond != "" {
 		sql += cond
@@ -78,7 +78,7 @@ func GetCygxTagListCount(cond string) (count int, err error) {
 
 // 获取tag列表-分页
 func GetCygxTagListPage(cond string, startSize, pageSize int) (items []*CygxTagList, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT *,
 		(SELECT COUNT(1) FROM cygx_tag_history AS avr WHERE avr.tag_id=cygx_tag.tag_id) AS pv,
         (SELECT COUNT(DISTINCT user_id) FROM cygx_tag_history AS avr WHERE avr.tag_id=cygx_tag.tag_id) AS uv
@@ -94,7 +94,7 @@ func GetCygxTagListPage(cond string, startSize, pageSize int) (items []*CygxTagL
 }
 
 func UpdateCygxTagStatus(id, status int) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := ``
 	if status == 1 {
 		sql = ` UPDATE  cygx_tag
@@ -117,7 +117,7 @@ func UpdateCygxTagStatus(id, status int) (err error) {
 
 // GetCygxTagByTagId 根据指标id获取指标信息
 func GetCygxTagByTagId(tagId int) (item *CygxTag, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT * FROM cygx_tag WHERE tag_id=? `
 	err = o.Raw(sql, tagId).QueryRow(&item)
 	return
@@ -125,7 +125,7 @@ func GetCygxTagByTagId(tagId int) (item *CygxTag, err error) {
 
 // GetCygxTagMinSort 获取最小不等于0的排序
 func GetCygxTagMinSort() (sort int, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT min(sort) FROM cygx_tag WHERE  sort <> 0 `
 	err = o.Raw(sql).QueryRow(&sort)
 	return
@@ -133,7 +133,7 @@ func GetCygxTagMinSort() (sort int, err error) {
 
 // MoveDownCygxTagBySort 往下移动
 func MoveDownCygxTagBySort(prevSort, currentSort int) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `update cygx_tag set sort = sort - 1 where sort <= ? and sort> ? `
 	_, err = o.Raw(sql, prevSort, currentSort).Exec()
 	return
@@ -141,7 +141,7 @@ func MoveDownCygxTagBySort(prevSort, currentSort int) (err error) {
 
 // MoveUpCygxTagBySort 往下移动
 func MoveUpCygxTagBySort(prevSort, currentSort int) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `update cygx_tag set sort = sort + 1 where sort >= ? and sort< ? `
 	_, err = o.Raw(sql, prevSort, currentSort).Exec()
 	return
@@ -149,7 +149,7 @@ func MoveUpCygxTagBySort(prevSort, currentSort int) (err error) {
 
 // GetCygxTagMaxSort 获取最大不等于0的排序
 func GetCygxTagMaxSort() (sort int, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT max(sort) FROM cygx_tag WHERE  sort <> 0 `
 	err = o.Raw(sql).QueryRow(&sort)
 	return

+ 91 - 61
models/cygx/cygx_user.go

@@ -109,8 +109,7 @@ func GetCygxCompanyUserList(userCondition, keyWord, kwywordcondition, condition,
 			cp.try_stage,
 			cp.package_type,
 			m.real_name as seller_name ,
-			( SELECT COUNT( 1 ) FROM user_remarks AS rm  WHERE rm.user_id = u.user_id ) AS is_show_see_num,
-			( SELECT COUNT( 1 ) FROM cygx_user_remind AS rm  WHERE rm.user_id = u.user_id ) AS is_remind
+			( SELECT COUNT( 1 ) FROM user_remarks AS rm  WHERE rm.user_id = u.user_id ) AS is_show_see_num
 		FROM
 			wx_user AS u
 			INNER JOIN company AS c ON c.company_id = u.company_id
@@ -139,8 +138,49 @@ func GetCygxCompanyUserList(userCondition, keyWord, kwywordcondition, condition,
 	return
 }
 
+type CygxCompanyUserAndSellerResp struct {
+	UserId      int    `description:"用户ID"`
+	Mobile      string `description:"手机号"`
+	Email       string `description:"邮箱"`
+	CompanyId   int    `description:"公司id"`
+	CompanyName string `description:"公司名称"`
+	RealName    string `description:"姓名"`
+	SellerName  string `description:"销售名称"`
+}
+
+// 给所有已绑定手机号的客户(除流失)列表
+func GetCygxCompanyUserListByNoLoss() (items []*CygxCompanyUserAndSellerResp, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT
+			u.user_id,
+			u.mobile,
+			u.email,
+			u.real_name,
+			c.company_name,
+			c.company_id,
+			m.real_name AS seller_name 
+		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
+			INNER JOIN admin AS m ON m.admin_id = cp.seller_id
+			INNER JOIN user_seller_relation AS sr ON sr.user_id = u.user_id 
+		WHERE
+			1 = 1 
+			AND c.enabled = 1 
+			AND cp.STATUS != '流失' 
+			AND cp.product_id = 2 
+			AND sr.product_id = 2 
+		GROUP BY
+			u.user_id `
+
+	_, err = o.Raw(sql).QueryRows(&items)
+	return
+}
+
 // 对于上面的SQL的拆分优化查询速度
 func GetCygxCompanyUserListSplit(userIds string) (items []*CygxCompanyUser, err error) {
+	return
 	o := orm.NewOrm()
 	sql := `SELECT
 			u.user_id,
@@ -352,7 +392,7 @@ type CygxChartResp struct {
 
 // 获取阅读记录数量
 func GetCygxArticleHistoryCount(mobile, email, condition string) (count int, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sqlCount := ` SELECT COUNT(1) AS count  FROM cygx_article_history_record_all as r  INNER JOIN cygx_article  as art  ON  art.article_id = r.article_id  WHERE   r.mobile  = '` + mobile + `'  AND is_del = 0 ` + condition
 	err = o.Raw(sqlCount).QueryRow(&count)
 	return
@@ -360,7 +400,7 @@ func GetCygxArticleHistoryCount(mobile, email, condition string) (count int, err
 
 // 阅读记录列表
 func GetCygxArticleHistoryRecordByUser(mobile, email, condition string, startSize, pageSize int) (items []*UserInteraction, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := ` SELECT
 			art.title,
 			art.article_id,
@@ -405,7 +445,7 @@ func GetCygxArticleHistoryRecordByUser(mobile, email, condition string, startSiz
 
 // 用户阅读记录列表 2023-08-02 优化拆分
 func GetCygxArticleHistoryRecordByUserNew(mobile, email, condition string, startSize, pageSize int) (items []*UserInteraction, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := ` SELECT
 			art.title,
 			art.article_id,
@@ -430,7 +470,7 @@ func GetCygxArticleHistoryRecordByUserNew(mobile, email, condition string, start
 
 // 收藏列表数量
 func GetCygxArticleCollectCount(uid int) (count int, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sqlCount := ` SELECT COUNT(1) AS count  FROM cygx_article_collect as r INNER JOIN cygx_article AS art ON art.article_id = r.article_id  WHERE   user_id = ?  `
 	err = o.Raw(sqlCount, uid).QueryRow(&count)
 	return
@@ -438,7 +478,7 @@ func GetCygxArticleCollectCount(uid int) (count int, err error) {
 
 // 收藏列表
 func GetCygxArticleCollectByUser(uid, startSize, pageSize int, condition string) (items []*UserInteraction, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := ` SELECT
 			art.title,
 			art.article_id,
@@ -481,7 +521,7 @@ func GetCygxArticleCollectByUser(uid, startSize, pageSize int, condition string)
 
 // 关注作者数量
 func GetCygArticleDepartmentFollowCount(uid int) (count int, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sqlCount := ` SELECT COUNT(1) AS count  FROM cygx_article_department_follow  WHERE   user_id = ?   AND type = 1  `
 	err = o.Raw(sqlCount, uid).QueryRow(&count)
 	return
@@ -489,7 +529,7 @@ func GetCygArticleDepartmentFollowCount(uid int) (count int, err error) {
 
 // 关注作者列表
 func GetCygArticleDepartmentFollowByUser(uid, startSize, pageSize int) (items []*UserInteraction, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
 			m.department_id,
 			m.nick_name,
@@ -506,7 +546,7 @@ func GetCygArticleDepartmentFollowByUser(uid, startSize, pageSize int) (items []
 			LEFT JOIN cygx_article AS a ON a.department_id = m.department_id
 			LEFT JOIN cygx_industrial_article_group_management AS mg ON mg.article_id = a.article_id
 			LEFT JOIN cygx_industrial_management AS i ON i.industrial_management_id = mg.industrial_management_id 
-			WHERE user_id = ? AND f.type = 1  GROUP BY m.department_id 
+			WHERE f.user_id = ? AND f.type = 1  GROUP BY m.department_id 
 			ORDER BY  f.create_time DESC LIMIT ?,? `
 	_, err = o.Raw(sql, uid, startSize, pageSize).QueryRows(&items)
 	return
@@ -514,7 +554,7 @@ func GetCygArticleDepartmentFollowByUser(uid, startSize, pageSize int) (items []
 
 // 用户搜索关键词统计
 func GetCygxSearchKeyWordCount(uid int) (count int, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sqlCount := ` SELECT COUNT(1) AS count  FROM cygx_search_key_word  WHERE   user_id = ?  `
 	err = o.Raw(sqlCount, uid).QueryRow(&count)
 	return
@@ -522,7 +562,7 @@ func GetCygxSearchKeyWordCount(uid int) (count int, err error) {
 
 // 用户搜索关键词列表
 func GetCygxSearchKeyWordByUser(uid, startSize, pageSize int) (items []*UserInteraction, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
 			key_word,create_time
 		FROM
@@ -535,13 +575,12 @@ func GetCygxSearchKeyWordByUser(uid, startSize, pageSize int) (items []*UserInte
 
 // 用户专项产业调研统计
 func GetCygxActivitySpecialTripCount(condition string, pars []interface{}) (count int, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sqlCount := `SELECT
 	COUNT( 1 ) 
 FROM
 	cygx_activity_special_meeting_detail AS h
 	INNER JOIN cygx_activity_special AS a ON a.activity_id = h.activity_id
-	INNER JOIN wx_user AS u ON h.mobile = u.mobile 
 WHERE
 	1 = 1 
 	AND a.publish_status = 1 AND a.activity_time_end < NOW() ` + condition
@@ -551,7 +590,7 @@ WHERE
 
 // 用户专项产业调研列表
 func GetCygxActivitySpecialTripByUser(uid, startSize, pageSize int) (items []*UserInteraction, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
 			a.research_theme AS activity_name,
 			a.chart_permission_name,
@@ -563,7 +602,6 @@ func GetCygxActivitySpecialTripByUser(uid, startSize, pageSize int) (items []*Us
 		FROM
 			cygx_activity_special_meeting_detail AS h
 			INNER JOIN cygx_activity_special AS a ON a.activity_id = h.activity_id
-			INNER JOIN wx_user AS u ON h.mobile = u.mobile 
 		WHERE
 			1 = 1
 			 AND a.publish_status = 1 AND a.activity_time_end < NOW()
@@ -575,7 +613,7 @@ func GetCygxActivitySpecialTripByUser(uid, startSize, pageSize int) (items []*Us
 
 // 用户音视频浏览统计
 func GetCygxRoadshowCount(uid int) (count int, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sqlCount := `SELECT
 	COUNT( 1 ) total 
 FROM
@@ -585,25 +623,22 @@ FROM
 	FROM
 		cygx_micro_roadshow_video_history AS r
 		INNER JOIN cygx_micro_roadshow_video AS v ON r.video_id = v.video_id
-		INNER JOIN wx_user AS u ON r.mobile = u.mobile 
 	WHERE
-		u.user_id = ? UNION ALL
+		r.user_id = ? UNION ALL
 	SELECT
 		"" 
 	FROM
 		cygx_activity_video_history AS r
 		INNER JOIN cygx_activity_video AS v ON r.video_id = v.video_id
-		INNER JOIN wx_user AS u ON r.mobile = u.mobile 
 	WHERE
-		u.user_id = ? UNION ALL
+		r.user_id = ? UNION ALL
 	SELECT
 		"" 
 	FROM
 		cygx_activity_voice_history AS r
 		INNER JOIN cygx_activity_voice AS v ON r.activity_id = v.activity_id
-		INNER JOIN wx_user AS u ON r.mobile = u.mobile 
 	WHERE
-	u.user_id = ? 
+	r.user_id = ? 
 	)z  `
 	err = o.Raw(sqlCount, uid, uid, uid).QueryRow(&count)
 	return
@@ -611,7 +646,7 @@ FROM
 
 // 用户专项产业调研列表
 func GetCygxRoadshowByUser(uid, startSize, pageSize int) (items []*UserInteraction, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
 			v.video_name AS media_title,
 			r.create_time,
@@ -619,9 +654,8 @@ func GetCygxRoadshowByUser(uid, startSize, pageSize int) (items []*UserInteracti
 		FROM
 			cygx_micro_roadshow_video_history AS r
 			INNER JOIN cygx_micro_roadshow_video AS v ON r.video_id = v.video_id
-			INNER JOIN wx_user AS u ON r.mobile = u.mobile 
 		WHERE
-			u.user_id = ? UNION ALL
+			r.user_id = ? UNION ALL
 		SELECT
 			v.video_name AS media_title,
 			r.create_time,
@@ -629,9 +663,8 @@ func GetCygxRoadshowByUser(uid, startSize, pageSize int) (items []*UserInteracti
 		FROM
 			cygx_activity_video_history AS r
 			INNER JOIN cygx_activity_video AS v ON r.video_id = v.video_id
-			INNER JOIN wx_user AS u ON r.mobile = u.mobile 
 		WHERE
-			u.user_id = ? UNION ALL
+			r.user_id = ? UNION ALL
 		SELECT
 			v.voice_name AS media_title,
 			r.create_time,
@@ -641,7 +674,7 @@ func GetCygxRoadshowByUser(uid, startSize, pageSize int) (items []*UserInteracti
 			INNER JOIN cygx_activity_voice AS v ON r.activity_id = v.activity_id
 			INNER JOIN wx_user AS u ON r.mobile = u.mobile 
 		WHERE
-			u.user_id = ?
+			r.user_id = ?
 		ORDER BY create_time DESC   LIMIT ?,? `
 	_, err = o.Raw(sql, uid, uid, uid, startSize, pageSize).QueryRows(&items)
 	return
@@ -649,7 +682,7 @@ func GetCygxRoadshowByUser(uid, startSize, pageSize int) (items []*UserInteracti
 
 // 线上已到会列表
 func GetAttendanceDetailListByUser(isMeeting int, mobile string, startSize, pageSize int) (item []*UserInteraction, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
 			s.signup_type,
 			a.activity_name,
@@ -687,7 +720,7 @@ func GetAttendanceDetailListByUser(isMeeting int, mobile string, startSize, page
 
 // 线上未来到会列表
 func GetAttendanceDetailListNoMeetingByUser(isMeeting int, mobile string, startSize, pageSize int) (item []*UserInteraction, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
 			s.signup_type,
 			a.activity_name,
@@ -719,7 +752,7 @@ func GetAttendanceDetailListNoMeetingByUser(isMeeting int, mobile string, startS
 
 // 用户参会统计
 func GetAttendanceDetaiCount(mobile string, meetType, isMeeting int) (count int, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sqlCount := ` SELECT
 				COUNT( DISTINCT a.activity_id )  as count 
 		FROM
@@ -742,7 +775,7 @@ func GetAttendanceDetaiCount(mobile string, meetType, isMeeting int) (count int,
 
 // 线下已到会列表
 func GetAttendanceOfflineListByUser(isMeeting int, mobile string, startSize, pageSize int) (item []*UserInteraction, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
 			a.activity_name,
 			a.chart_permission_name,
@@ -772,7 +805,7 @@ func GetAttendanceOfflineListByUser(isMeeting int, mobile string, startSize, pag
 
 // 获取用户参会记录数量
 func GetActivityMeetByUserCount(condition string) (count int, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sqlCount := ` SELECT
 				COUNT( DISTINCT a.activity_id )  as count 
 		FROM
@@ -791,7 +824,7 @@ func GetActivityMeetByUserCount(condition string) (count int, err error) {
 
 // 获取用户参会记录
 func GetActivityMeetByUser(condition string, startSize, pageSize int) (item []*UserInteraction, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
 			t.activity_type,
 			s.signup_type,
@@ -827,7 +860,7 @@ func GetActivityMeetByUser(condition string, startSize, pageSize int) (item []*U
 
 // 获取用户参会记录
 func GetActivitySpecialMeetByUser(condition string, startSize, pageSize int) (item []*UserInteraction, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
 	a.activity_id,
 	a.research_theme AS activity_name,
@@ -871,28 +904,25 @@ type GetUserInteractionTableCountResp struct {
 
 // 用户互动总数统计
 func GetUserInteractionTableCount(uid int) (item *GetUserInteractionTableCountResp, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
-			( SELECT COUNT( 1 ) FROM cygx_article_history_record_all AS h  INNER JOIN cygx_article  as art  ON  art.article_id = h.article_id  WHERE h.mobile = u.mobile AND h.is_del = 0 OR ( h.email = u.email  AND h.email <>'' AND h.is_del = 0) ) AS history_num,
-			( SELECT COUNT( 1 ) FROM cygx_article_collect AS h WHERE h.user_id = u.user_id AND  h.article_id > 0  ) AS count_num,
-			( SELECT COUNT( 1 ) FROM cygx_chart_collect AS h INNER JOIN cygx_chart_all AS a ON h.chart_id = a.chart_id WHERE h.user_id = u.user_id  ) AS chart_num,
-			( SELECT COUNT( 1 ) FROM cygx_industry_fllow AS h WHERE h.user_id = u.user_id AND h.type = 1  ) AS industry_fllow_num,
-			( SELECT COUNT( 1 ) FROM cygx_article_department_follow AS h WHERE h.user_id = u.user_id  AND h.type = 1  ) AS department_follow_num,
-			( SELECT COUNT( 1 ) FROM cygx_search_key_word AS h WHERE h.user_id = u.user_id  ) AS key_word_num,
-			( SELECT 	COUNT( DISTINCT a.activity_id )  as count  FROM cygx_activity_signup_detail AS h INNER JOIN cygx_activity as a ON a.activity_id = h.activity_id  INNER JOIN cygx_activity_type as t ON t.activity_type_id = a.activity_type_id   WHERE h.mobile = u.mobile  
+			( SELECT COUNT( 1 ) FROM cygx_article_history_record_all AS h  INNER JOIN cygx_article  as art  ON  art.article_id = h.article_id  WHERE h.user_id = ? ) AS history_num,
+			( SELECT COUNT( 1 ) FROM cygx_article_collect AS h WHERE h.user_id = ? AND  h.article_id > 0  ) AS count_num,
+			( SELECT COUNT( 1 ) FROM cygx_chart_collect AS h INNER JOIN cygx_chart_all AS a ON h.chart_id = a.chart_id WHERE h.user_id = ?  ) AS chart_num,
+			( SELECT COUNT( 1 ) FROM cygx_industry_fllow AS h WHERE h.user_id = ? AND h.type = 1  ) AS industry_fllow_num,
+			( SELECT COUNT( 1 ) FROM cygx_article_department_follow AS h WHERE h.user_id = ?  AND h.type = 1  ) AS department_follow_num,
+			( SELECT COUNT( 1 ) FROM cygx_search_key_word AS h WHERE h.user_id = ?  ) AS key_word_num,
+			( SELECT 	COUNT( DISTINCT a.activity_id )  as count  FROM cygx_activity_signup_detail AS h INNER JOIN cygx_activity as a ON a.activity_id = h.activity_id  INNER JOIN cygx_activity_type as t ON t.activity_type_id = a.activity_type_id   WHERE h.user_id = ? 
 					  AND t.activity_type=1 AND h.do_fail_type = 0   ) AS on_line_num,
-			( SELECT  	COUNT( DISTINCT a.activity_id )  as count  FROM cygx_activity_signup_detail AS h INNER JOIN cygx_activity as a ON a.activity_id = h.activity_id  INNER JOIN cygx_activity_type as t ON t.activity_type_id = a.activity_type_id   WHERE h.mobile = u.mobile  
+			( SELECT  	COUNT( DISTINCT a.activity_id )  as count  FROM cygx_activity_signup_detail AS h INNER JOIN cygx_activity as a ON a.activity_id = h.activity_id  INNER JOIN cygx_activity_type as t ON t.activity_type_id = a.activity_type_id   WHERE h.user_id = ?
 				  AND t.activity_type = 0 AND h.do_fail_type = 0  ) AS office_num,
-			( SELECT COUNT( 1 ) FROM cygx_activity_special_meeting_detail AS h INNER JOIN cygx_activity_special AS a ON a.activity_id = h.activity_id WHERE h.mobile = u.mobile  AND a.publish_status = 1 AND a.activity_time_end < NOW()) AS trip_num,
-			( SELECT COUNT( 1 ) FROM cygx_micro_roadshow_video_history AS h  INNER JOIN cygx_micro_roadshow_video as v ON v.video_id = h.video_id WHERE  h.mobile = u.mobile  ) AS roadshow_video_num,
-			( SELECT COUNT( 1 ) FROM cygx_activity_video_history AS h  INNER JOIN cygx_activity_video as v ON v.video_id = h.video_id WHERE  h.mobile = u.mobile  ) AS activity_video_num,
-			( SELECT COUNT( 1 ) FROM cygx_activity_voice_history AS h  INNER JOIN cygx_activity_voice as v ON v.activity_id = h.activity_id WHERE  h.mobile = u.mobile  ) AS activity_voice_num,
-			( SELECT COUNT(1) FROM cygx_tag_history as a INNER JOIN cygx_tag AS b ON a.tag_id = b.tag_id WHERE a.user_id=u.user_id  ) AS tag_num
-			FROM
-			wx_user  as u
-		WHERE
-			u.user_id = ?`
-	err = o.Raw(sql, uid).QueryRow(&item)
+			( SELECT COUNT( 1 ) FROM cygx_activity_special_meeting_detail AS h INNER JOIN cygx_activity_special AS a ON a.activity_id = h.activity_id WHERE h.user_id = ?  AND a.publish_status = 1 AND a.activity_time_end < NOW()) AS trip_num,
+			( SELECT COUNT( 1 ) FROM cygx_micro_roadshow_video_history AS h  INNER JOIN cygx_micro_roadshow_video as v ON v.video_id = h.video_id WHERE  h.user_id = ?  ) AS roadshow_video_num,
+			( SELECT COUNT( 1 ) FROM cygx_activity_video_history AS h  INNER JOIN cygx_activity_video as v ON v.video_id = h.video_id WHERE  h.user_id = ?  ) AS activity_video_num,
+			( SELECT COUNT( 1 ) FROM cygx_activity_voice_history AS h  INNER JOIN cygx_activity_voice as v ON v.activity_id = h.activity_id WHERE  h.user_id = ?  ) AS activity_voice_num,
+			( SELECT COUNT(1) FROM cygx_tag_history as h INNER JOIN cygx_tag AS b ON h.tag_id = b.tag_id WHERE h.user_id = ?  ) AS tag_num
+			FROM  dual `
+	err = o.Raw(sql, uid, uid, uid, uid, uid, uid, uid, uid, uid, uid, uid, uid, uid).QueryRow(&item)
 	return
 }
 
@@ -925,7 +955,7 @@ type ArticlePvCountResp struct {
 
 // 阅读记录
 func GetArticlePvCount(mobile, email, dateTime string) (item []*ArticlePvCountResp, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
 			article_id,
 			COUNT(article_id) as pv
@@ -949,7 +979,7 @@ type ArticleIndustryNameResp struct {
 
 // 产业名称
 func GetArticleGroupyIndustryName(articleIds string) (item []*ArticleIndustryNameResp, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
 			art.article_id,
 			(
@@ -981,7 +1011,7 @@ func GetArticleGroupyIndustryName(articleIds string) (item []*ArticleIndustryNam
 
 // 标的名称
 func GetArticleGroupySubjectName(articleIds string) (item []*ArticleIndustryNameResp, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
 			article_id,
 			subject_name 
@@ -1005,7 +1035,7 @@ type ActivityLabelCountResp struct {
 
 // 活动标签记录(我的日程)
 func GetActivitySignCount(mobile, dateTime string) (item []*ActivityLabelCountResp, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
 			label ,
 			COUNT( label ) AS pv 
@@ -1023,7 +1053,7 @@ func GetActivitySignCount(mobile, dateTime string) (item []*ActivityLabelCountRe
 
 // 活动标签记录(会议提醒)
 func GetActivityMeetingReminder(mobile, dateTime string) (item []*ActivityLabelCountResp, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
 			label ,
 			COUNT( label ) AS pv 
@@ -1047,7 +1077,7 @@ func GetCygxArticleCollectId(uid int, dateTime string) (articleIds string, err e
 		WHERE
 			user_id = ? 
 			AND create_time >= ?  `
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	err = o.Raw(sql, uid, dateTime).QueryRow(&articleIds)
 	return
 }

+ 113 - 116
models/cygx/cygx_user_company.go

@@ -7,54 +7,54 @@ import (
 )
 
 // 用户互动总数统计
-func GetUserInteractionTableCountByCompany(companyId int) (item *GetUserInteractionTableCountResp, err error) {
-	o := orm.NewOrm()
-	sql := `SELECT
-			( SELECT COUNT( 1 ) FROM cygx_article_history_record_all AS h  INNER JOIN cygx_article  as art  ON  art.article_id = h.article_id  WHERE h.company_id = u.company_id AND h.is_del = 0   AND h.create_time < date_format(now(),'%Y-%m-%d') ) AS history_num,
-			( SELECT COUNT( 1 ) FROM cygx_article_collect AS h WHERE h.company_id = u.company_id    AND h.create_time < date_format(now(),'%Y-%m-%d') ) AS count_num,
-			( SELECT COUNT( 1 ) FROM cygx_chart_collect   AS h  INNER JOIN cygx_chart AS a ON h.chart_id = a.chart_id  WHERE h.company_id = u.company_id   AND h.create_time < date_format(now(),'%Y-%m-%d')  ) AS chart_num,
-			( SELECT COUNT( 1 ) FROM cygx_industry_fllow AS h WHERE h.company_id = u.company_id AND h.type = 1   AND h.create_time < date_format(now(),'%Y-%m-%d')  ) AS industry_fllow_num,
-			( SELECT COUNT( 1 ) FROM cygx_article_department_follow AS h WHERE h.company_id = u.company_id  AND h.type = 1   AND h.create_time < date_format(now(),'%Y-%m-%d')  ) AS department_follow_num,
-			( SELECT COUNT( 1 ) FROM cygx_search_key_word AS h WHERE h.company_id = u.company_id   AND h.create_time < date_format(now(),'%Y-%m-%d')  ) AS key_word_num,
-			( SELECT 	COUNT(1 )  as count  FROM cygx_activity_signup AS h INNER JOIN cygx_activity as a ON a.activity_id = h.activity_id  INNER JOIN cygx_activity_type as t ON t.activity_type_id = a.activity_type_id  INNER JOIN wx_user as wu  ON wu.user_id = h.user_id  WHERE h.company_id = u.company_id  
-					  AND t.activity_type=1 AND h.do_fail_type = 0   AND h.create_time < date_format(now(),'%Y-%m-%d') ) AS on_line_num,
-			( SELECT  	COUNT( 1 )  as count  FROM cygx_activity_signup AS h INNER JOIN cygx_activity as a ON a.activity_id = h.activity_id  INNER JOIN cygx_activity_type as t ON t.activity_type_id = a.activity_type_id  INNER JOIN wx_user as wu  ON wu.user_id = h.user_id WHERE h.company_id = u.company_id  
-					 AND t.activity_type = 0 AND h.do_fail_type = 0 AND h.create_time < date_format(now(),'%Y-%m-%d')  ) AS office_num
-		FROM
-			company  as u
-		WHERE
-			u.company_id = ?`
-	err = o.Raw(sql, companyId).QueryRow(&item)
-	return
-}
+//func GetUserInteractionTableCountByCompany(companyId int) (item *GetUserInteractionTableCountResp, err error) {
+//	o := orm.NewOrm()
+//	sql := `SELECT
+//			( SELECT COUNT( 1 ) FROM cygx_article_history_record_all AS h  INNER JOIN cygx_article  as art  ON  art.article_id = h.article_id  WHERE h.company_id = u.company_id AND h.is_del = 0   AND h.create_time < date_format(now(),'%Y-%m-%d') ) AS history_num,
+//			( SELECT COUNT( 1 ) FROM cygx_article_collect AS h WHERE h.company_id = u.company_id    AND h.create_time < date_format(now(),'%Y-%m-%d') ) AS count_num,
+//			( SELECT COUNT( 1 ) FROM cygx_chart_collect   AS h  INNER JOIN cygx_chart AS a ON h.chart_id = a.chart_id  WHERE h.company_id = u.company_id   AND h.create_time < date_format(now(),'%Y-%m-%d')  ) AS chart_num,
+//			( SELECT COUNT( 1 ) FROM cygx_industry_fllow AS h WHERE h.company_id = u.company_id AND h.type = 1   AND h.create_time < date_format(now(),'%Y-%m-%d')  ) AS industry_fllow_num,
+//			( SELECT COUNT( 1 ) FROM cygx_article_department_follow AS h WHERE h.company_id = u.company_id  AND h.type = 1   AND h.create_time < date_format(now(),'%Y-%m-%d')  ) AS department_follow_num,
+//			( SELECT COUNT( 1 ) FROM cygx_search_key_word AS h WHERE h.company_id = u.company_id   AND h.create_time < date_format(now(),'%Y-%m-%d')  ) AS key_word_num,
+//			( SELECT 	COUNT(1 )  as count  FROM cygx_activity_signup AS h INNER JOIN cygx_activity as a ON a.activity_id = h.activity_id  INNER JOIN cygx_activity_type as t ON t.activity_type_id = a.activity_type_id  INNER JOIN wx_user as wu  ON wu.user_id = h.user_id  WHERE h.company_id = u.company_id
+//					  AND t.activity_type=1 AND h.do_fail_type = 0   AND h.create_time < date_format(now(),'%Y-%m-%d') ) AS on_line_num,
+//			( SELECT  	COUNT( 1 )  as count  FROM cygx_activity_signup AS h INNER JOIN cygx_activity as a ON a.activity_id = h.activity_id  INNER JOIN cygx_activity_type as t ON t.activity_type_id = a.activity_type_id  INNER JOIN wx_user as wu  ON wu.user_id = h.user_id WHERE h.company_id = u.company_id
+//					 AND t.activity_type = 0 AND h.do_fail_type = 0 AND h.create_time < date_format(now(),'%Y-%m-%d')  ) AS office_num
+//		FROM
+//			company  as u
+//		WHERE
+//			u.company_id = ?`
+//	err = o.Raw(sql, companyId).QueryRow(&item)
+//	return
+//}
 
 // 获取阅读记录数量
-func GetCygxArticleHistoryCountByCompany(condition string) (count int, err error) {
-	o := orm.NewOrm()
-	sqlCount := ` SELECT COUNT( 1 ) AS count 
-FROM
-	(
-	SELECT
-		COUNT( 1 ) 
-	FROM
-		cygx_article_history_record_all AS r
-		INNER JOIN cygx_article AS art ON art.article_id = r.article_id
-		INNER JOIN company_product AS cp ON cp.company_id = r.company_id 
-		AND cp.product_id = 2
-		INNER JOIN cygx_company_interaction_num AS ci ON ci.company_id = r.company_id
-		INNER JOIN cygx_user_interaction_num AS ui ON ui.user_id = r.user_id
-		LEFT  JOIN cygx_report_mapping AS re ON re.category_id = art.category_id_two   WHERE   r.is_del = 0`
-	if condition != "" {
-		sqlCount += condition
-	}
-	sqlCount += `	GROUP BY r.id ) AS count `
-	err = o.Raw(sqlCount).QueryRow(&count)
-	return
-}
+//func GetCygxArticleHistoryCountByCompany(condition string) (count int, err error) {
+//	o := orm.NewOrm()
+//	sqlCount := ` SELECT COUNT( 1 ) AS count
+//FROM
+//	(
+//	SELECT
+//		COUNT( 1 )
+//	FROM
+//		cygx_article_history_record_all AS r
+//		INNER JOIN cygx_article AS art ON art.article_id = r.article_id
+//		INNER JOIN company_product AS cp ON cp.company_id = r.company_id
+//		AND cp.product_id = 2
+//		INNER JOIN cygx_company_interaction_num AS ci ON ci.company_id = r.company_id
+//		INNER JOIN cygx_user_interaction_num AS ui ON ui.user_id = r.user_id
+//		LEFT  JOIN cygx_report_mapping AS re ON re.category_id = art.category_id_two   WHERE   r.is_del = 0`
+//	if condition != "" {
+//		sqlCount += condition
+//	}
+//	sqlCount += `	GROUP BY r.id ) AS count `
+//	err = o.Raw(sqlCount).QueryRow(&count)
+//	return
+//}
 
 // 阅读记录列表
 func GetCygxArticleHistoryRecordByCompany(condition string, startSize, pageSize int) (items []*UserInteraction, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := ` SELECT
 			art.title,
 			art.article_id,
@@ -72,7 +72,7 @@ func GetCygxArticleHistoryRecordByCompany(condition string, startSize, pageSize
 		FROM
 			cygx_article_history_record_all AS r
 			INNER JOIN cygx_article AS art ON art.article_id = r.article_id
-			INNER JOIN cygx_user_interaction_num AS ui ON ui.user_id = r.user_id
+			LEFT JOIN cygx_user_interaction_num AS ui ON ui.user_id = r.user_id
 			LEFT JOIN cygx_report_mapping AS re ON re.category_id = art.category_id_two
 			LEFT JOIN cygx_industrial_article_group_management AS man ON man.article_id = art.article_id
 		WHERE
@@ -86,14 +86,13 @@ func GetCygxArticleHistoryRecordByCompany(condition string, startSize, pageSize
 
 // 获取用户参会记录数量
 func GetActivityMeetByCompanyCount(condition string) (count int, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sqlCount := `SELECT
 				COUNT(*) AS count 
 			FROM
 				cygx_activity_signup_detail AS r
 				INNER JOIN cygx_activity AS a ON a.activity_id = r.activity_id
 				INNER JOIN cygx_activity_type as t ON t.activity_type_id = a.activity_type_id
-				INNER JOIN wx_user AS u ON u.mobile = r.mobile 
 			WHERE
 				1 = 1 
 				AND r.do_fail_type = 0`
@@ -106,13 +105,13 @@ func GetActivityMeetByCompanyCount(condition string) (count int, err error) {
 
 // 获取用户参会记录
 func GetActivityMeetByCompany(condition string, startSize, pageSize int) (item []*UserInteraction, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
 			t.activity_type,
 			r.signup_type,
 			r.is_meeting,
-			u.mobile,
-			u.real_name,
+			r.mobile,
+			r.real_name,
 			a.activity_name,
 			a.chart_permission_name,
 			a.activity_type_name,
@@ -128,7 +127,6 @@ func GetActivityMeetByCompany(condition string, startSize, pageSize int) (item [
 			cygx_activity_signup_detail AS r
 			INNER  JOIN cygx_activity AS a ON a.activity_id = r.activity_id
 			INNER JOIN cygx_activity_type as t ON t.activity_type_id = a.activity_type_id
-			INNER JOIN wx_user as u  ON u.mobile = r.mobile
 			LEFT JOIN cygx_user_interaction_num AS ui ON ui.user_id = r.user_id
 		WHERE
 			1 = 1 
@@ -148,16 +146,16 @@ func GetActivityMeetByCompany(condition string, startSize, pageSize int) (item [
 
 // 收藏列表数量
 func GetCygxArticleCollectCountByCompany(condition string) (count int, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sqlCount := ` SELECT COUNT(1) AS count  FROM cygx_article_collect as r INNER JOIN cygx_article AS art ON art.article_id = r.article_id
-			INNER JOIN wx_user as u  ON u.user_id = r.user_id  WHERE   1=1 ` + condition
+		  WHERE   1=1 ` + condition
 	err = o.Raw(sqlCount).QueryRow(&count)
 	return
 }
 
 // 收藏列表
 func GetCygxArticleCollectByCompany(startSize, pageSize int, condition string) (items []*UserInteraction, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := ` SELECT
 			art.title,
 			art.article_id,
@@ -188,7 +186,6 @@ func GetCygxArticleCollectByCompany(startSize, pageSize int, condition string) (
 		FROM
 			cygx_article_collect AS r
 			INNER JOIN cygx_article AS art ON art.article_id = r.article_id
-			INNER JOIN wx_user as u  ON u.user_id = r.user_id
 			LEFT JOIN cygx_user_interaction_num AS ui ON ui.user_id = r.user_id
 			LEFT JOIN cygx_report_mapping AS re ON re.category_id = art.category_id_two
 			LEFT JOIN cygx_industrial_article_group_management AS man ON man.article_id = art.article_id 
@@ -204,27 +201,25 @@ func GetCygxArticleCollectByCompany(startSize, pageSize int, condition string) (
 
 // 关注产业数量
 func GetCygxIndustryFllowCountByCompany(condition string) (count int, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sqlCount := ` SELECT COUNT(1) AS count  FROM cygx_industry_fllow AS r
-			INNER JOIN cygx_industrial_management AS m ON m.industrial_management_id = r.industrial_management_id 
-			INNER JOIN wx_user as u  ON u.user_id = r.user_id  WHERE   type = 1  ` + condition
+			INNER JOIN cygx_industrial_management AS m ON m.industrial_management_id = r.industrial_management_id WHERE   type = 1  ` + condition
 	err = o.Raw(sqlCount).QueryRow(&count)
 	return
 }
 
 // 关注产业列表
 func GetCygxIndustryFllowByCompany(condition string, startSize, pageSize int) (items []*UserInteraction, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
 			m.industry_name,
-			u.mobile,
-			u.real_name,
+			r.mobile,
+			r.real_name,
 			r.modify_time as create_time,
 			( SELECT GROUP_CONCAT( DISTINCT s.subject_name SEPARATOR '/' ) FROM cygx_industrial_subject AS s WHERE s.industrial_management_id = m.industrial_management_id ) AS subject_name_str 
 		FROM
 			cygx_industry_fllow AS r
-			LEFT  JOIN wx_user as u  ON u.mobile = r.mobile
-			LEFT  JOIN cygx_user_interaction_num as ui  ON ui.user_id = u.user_id
+			LEFT  JOIN cygx_user_interaction_num as ui  ON ui.user_id = r.user_id
 			INNER JOIN cygx_industrial_management AS m ON m.industrial_management_id = r.industrial_management_id 
 		WHERE  type = 1 ` + condition + ` ORDER BY ui.industry_fllow_num DESC, r.create_time DESC  LIMIT ?,? `
 	_, err = o.Raw(sql, startSize, pageSize).QueryRows(&items)
@@ -233,17 +228,16 @@ func GetCygxIndustryFllowByCompany(condition string, startSize, pageSize int) (i
 
 // 关注作者数量
 func GetCygArticleDepartmentFollowCountByCompany(condition string) (count int, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sqlCount := ` SELECT COUNT(1) AS count  FROM cygx_article_department_follow AS r
-			INNER JOIN cygx_article_department AS m ON m.department_id = r.department_id
-			INNER JOIN wx_user as u  ON u.user_id = r.user_id  WHERE    type = 1  ` + condition
+			INNER JOIN cygx_article_department AS m ON m.department_id = r.department_id WHERE    type = 1  ` + condition
 	err = o.Raw(sqlCount).QueryRow(&count)
 	return
 }
 
 // 关注作者列表
 func GetCygArticleDepartmentFollowByCompany(condition string, startSize, pageSize int) (items []*UserInteraction, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
 			m.department_id,
 			m.nick_name,
@@ -261,7 +255,6 @@ func GetCygArticleDepartmentFollowByCompany(condition string, startSize, pageSiz
 			cygx_article_department_follow AS r
 			INNER JOIN cygx_article_department AS m ON m.department_id = r.department_id
 			INNER JOIN cygx_article AS a ON a.department_id = m.department_id
-			INNER JOIN wx_user as u  ON u.user_id = r.user_id
 			LEFT JOIN cygx_user_interaction_num AS ui ON ui.user_id = r.user_id
 			LEFT JOIN cygx_industrial_article_group_management AS mg ON mg.article_id = a.article_id
 			LEFT JOIN cygx_industrial_management AS i ON i.industrial_management_id = mg.industrial_management_id
@@ -273,7 +266,7 @@ func GetCygArticleDepartmentFollowByCompany(condition string, startSize, pageSiz
 
 // 用户搜索关键词统计
 func GetCygxSearchKeyWordCountBuCompany(condition string) (count int, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sqlCount := ` SELECT COUNT(1) AS count  FROM cygx_search_key_word  as r  WHERE  1= 1  ` + condition
 	err = o.Raw(sqlCount).QueryRow(&count)
 	return
@@ -281,7 +274,7 @@ func GetCygxSearchKeyWordCountBuCompany(condition string) (count int, err error)
 
 // 用户搜索关键词列表
 func GetCygxSearchKeyWordByCompany(condition string, startSize, pageSize int) (items []*UserInteraction, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
 			r.key_word,
 			r.create_time,
@@ -298,7 +291,7 @@ func GetCygxSearchKeyWordByCompany(condition string, startSize, pageSize int) (i
 
 // 用户专项产业调研统计
 func GetCygxActivitySpecialTripCountByCompany(condition string) (count int, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sqlCount := ` SELECT
 			COUNT( 1 ) 
 		FROM
@@ -313,7 +306,7 @@ func GetCygxActivitySpecialTripCountByCompany(condition string) (count int, err
 
 // 用户专项产业调研列表
 func CygxActivitySpecialTripByCompany(condition string, startSize, pageSize int) (items []*UserInteraction, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
 			a.research_theme AS activity_name,
 			a.chart_permission_name,
@@ -336,7 +329,7 @@ func CygxActivitySpecialTripByCompany(condition string, startSize, pageSize int)
 
 // 用户音视频浏览统计
 func GetCygxRoadshowCountByCompany(condition string) (count int, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sqlCount := `SELECT
 	COUNT( 1 ) total 
 FROM
@@ -365,7 +358,7 @@ FROM
 
 // 用户音视频浏览列表
 func GetCygxRoadshowByCompany(condition string, startSize, pageSize int) (items []*UserInteraction, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
 			v.video_name AS media_title,
 			r.create_time,
@@ -409,7 +402,7 @@ func GetCygxRoadshowByCompany(condition string, startSize, pageSize int) (items
 
 // 用户音视频浏览列表
 func GetCygxRoadshowByCompanyList(condition string, startSize, pageSize int) (items []*UserInteraction, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
 			v.video_name AS media_title,
 			r.create_time,
@@ -423,7 +416,6 @@ func GetCygxRoadshowByCompanyList(condition string, startSize, pageSize int) (it
 		FROM
 			cygx_micro_roadshow_video_history AS r
 			INNER JOIN cygx_micro_roadshow_video AS v ON r.video_id = v.video_id
-			LEFT JOIN company_product AS cp ON cp.company_id = r.company_id AND cp.product_id = 2
 			LEFT JOIN cygx_company_interaction_num AS ci ON ci.company_id = r.company_id
 			LEFT JOIN cygx_user_interaction_num AS ui ON ui.user_id = r.user_id 
 		WHERE 1=1 ` + condition + `  UNION ALL
@@ -440,7 +432,6 @@ func GetCygxRoadshowByCompanyList(condition string, startSize, pageSize int) (it
 		FROM
 			cygx_activity_video_history AS r
 			INNER JOIN cygx_activity_video AS v ON r.video_id = v.video_id
-			LEFT JOIN company_product AS cp ON cp.company_id = r.company_id AND cp.product_id = 2
 			LEFT JOIN cygx_company_interaction_num AS ci ON ci.company_id = r.company_id
 			LEFT JOIN cygx_user_interaction_num AS ui ON ui.user_id = r.user_id 
 		WHERE 1=1 ` + condition + `   UNION ALL
@@ -457,7 +448,6 @@ func GetCygxRoadshowByCompanyList(condition string, startSize, pageSize int) (it
 		FROM
 			cygx_activity_voice_history AS r
 			INNER JOIN cygx_activity_voice AS v ON r.activity_id = v.activity_id
-			LEFT JOIN company_product AS cp ON cp.company_id = r.company_id AND cp.product_id = 2
 			LEFT JOIN cygx_company_interaction_num AS ci ON ci.company_id = r.company_id
 			LEFT JOIN cygx_user_interaction_num AS ui ON ui.user_id = r.user_id 
 		WHERE 1=1 ` + condition + `  
@@ -468,6 +458,26 @@ func GetCygxRoadshowByCompanyList(condition string, startSize, pageSize int) (it
 
 // 根据时间获取机构互动总数统计
 func GetCompanyInteractionTableCountBytime(companyId int, startDate, endDate string) (item *GetUserInteractionTableCountResp, err error) {
+	o := orm.NewOrmUsingDB("hz_cygx")
+	sql := `SELECT
+			( SELECT COUNT( 1 ) FROM cygx_article_history_record_all AS h  INNER JOIN cygx_article  as art  ON  art.article_id = h.article_id  WHERE h.company_id = ? AND h.is_del = 0  	AND create_time BETWEEN '` + startDate + `'AND '` + endDate + `'   AND h.create_time < date_format(now(),'%Y-%m-%d')  ) AS history_num,
+			( SELECT COUNT( 1 ) FROM cygx_article_collect AS h WHERE h.company_id = ?  AND create_time BETWEEN '` + startDate + `'AND '` + endDate + `'  AND h.create_time < date_format(now(),'%Y-%m-%d') ) AS count_num,
+			( SELECT COUNT( 1 ) FROM cygx_chart_collect AS h WHERE h.company_id = ?  AND create_time BETWEEN '` + startDate + `'AND '` + endDate + `'  AND h.create_time < date_format(now(),'%Y-%m-%d') ) AS chart_num,
+			( SELECT COUNT( 1 ) FROM cygx_industry_fllow AS h WHERE h.company_id = ? AND h.type = 1  AND create_time BETWEEN '` + startDate + `'AND '` + endDate + `'   AND h.create_time < date_format(now(),'%Y-%m-%d') ) AS industry_fllow_num,
+			( SELECT COUNT( 1 ) FROM cygx_article_department_follow AS h WHERE h.company_id = ?  AND h.type = 1 AND create_time BETWEEN '` + startDate + `'AND '` + endDate + `'   AND h.create_time < date_format(now(),'%Y-%m-%d') ) AS department_follow_num,
+			( SELECT COUNT( 1 ) FROM cygx_search_key_word AS h WHERE h.company_id = ? AND create_time BETWEEN '` + startDate + `'AND '` + endDate + `'  AND h.create_time < date_format(now(),'%Y-%m-%d') ) AS key_word_num,
+			( SELECT 	COUNT( DISTINCT a.activity_id )  as count  FROM cygx_activity_signup AS h INNER JOIN cygx_activity as a ON a.activity_id = h.activity_id  INNER JOIN cygx_activity_type as t ON t.activity_type_id = a.activity_type_id   WHERE h.company_id = ? 
+					 AND t.activity_type=1 AND h.do_fail_type = 0 AND a.activity_time BETWEEN '` + startDate + `'AND '` + endDate + `'   AND h.create_time < date_format(now(),'%Y-%m-%d') ) AS on_line_num,
+			( SELECT  	COUNT( DISTINCT a.activity_id )  as count  FROM cygx_activity_signup AS h INNER JOIN cygx_activity as a ON a.activity_id = h.activity_id  INNER JOIN cygx_activity_type as t ON t.activity_type_id = a.activity_type_id   WHERE h.company_id = ?  
+					 AND t.activity_type = 0 AND h.do_fail_type = 0  AND a.activity_time BETWEEN '` + startDate + `'AND '` + endDate + `'  AND h.create_time < date_format(now(),'%Y-%m-%d') ) AS office_num
+		FROM
+			dual `
+	err = o.Raw(sql, companyId, companyId, companyId, companyId, companyId, companyId, companyId, companyId).QueryRow(&item)
+	return
+}
+
+// 根据时间获取机构互动总数统计
+func GetCompanyInteractionTableCountBytimeold(companyId int, startDate, endDate string) (item *GetUserInteractionTableCountResp, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT
 			( SELECT COUNT( 1 ) FROM cygx_article_history_record_all AS h  INNER JOIN cygx_article  as art  ON  art.article_id = h.article_id  WHERE h.company_id = u.company_id AND h.is_del = 0  	AND create_time BETWEEN '` + startDate + `'AND '` + endDate + `'   AND h.create_time < date_format(now(),'%Y-%m-%d')  ) AS history_num,
@@ -490,7 +500,7 @@ func GetCompanyInteractionTableCountBytime(companyId int, startDate, endDate str
 
 // 机构阅读记录列表
 func GetCygxArticleHistoryRecordByCompanyList(condition string, startSize, pageSize int) (items []*UserInteraction, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := ` SELECT
 			art.title,
 			art.article_id,
@@ -511,7 +521,6 @@ func GetCygxArticleHistoryRecordByCompanyList(condition string, startSize, pageS
 		FROM
 			cygx_article_history_record_all AS r
 			INNER JOIN cygx_article AS art ON art.article_id = r.article_id
-			INNER JOIN company_product AS cp ON cp.company_id = r.company_id AND cp.product_id = 2
 			INNER JOIN cygx_company_interaction_num AS ci ON ci.company_id = r.company_id
 			INNER JOIN cygx_user_interaction_num AS ui ON ui.user_id = r.user_id
 			LEFT  JOIN cygx_report_mapping AS re ON re.category_id = art.category_id_two 
@@ -526,13 +535,13 @@ func GetCygxArticleHistoryRecordByCompanyList(condition string, startSize, pageS
 
 // 获取机构参会记录
 func GetActivityMeetByCompanyList(condition string, startSize, pageSize int) (item []*UserInteraction, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
 			t.activity_type,
 			r.signup_type,
 			r.is_meeting,
-			u.mobile,
-			u.real_name,
+			r.mobile,
+			r.real_name,
 			a.activity_name,
 			a.chart_permission_name,
 			a.activity_type_name,
@@ -551,8 +560,6 @@ func GetActivityMeetByCompanyList(condition string, startSize, pageSize int) (it
 			cygx_activity_signup_detail AS r
 			INNER  JOIN cygx_activity AS a ON a.activity_id = r.activity_id
 			INNER JOIN cygx_activity_type as t ON t.activity_type_id = a.activity_type_id
-			INNER JOIN wx_user as u  ON u.mobile = r.mobile
-			LEFT JOIN company_product AS cp ON cp.company_id = r.company_id AND cp.product_id = 2
 			LEFT JOIN cygx_company_interaction_num AS ci ON ci.company_id = r.company_id
 			LEFT JOIN cygx_user_interaction_num AS ui ON ui.user_id = r.user_id
 		WHERE
@@ -574,7 +581,7 @@ func GetActivityMeetByCompanyList(condition string, startSize, pageSize int) (it
 
 // 机构收藏列表
 func GetCygxArticleCollectByCompanyList(startSize, pageSize int, condition string) (items []*UserInteraction, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := ` SELECT
 			art.title,
 			art.article_id,
@@ -607,8 +614,6 @@ func GetCygxArticleCollectByCompanyList(startSize, pageSize int, condition strin
 		FROM
 			cygx_article_collect AS r
 			INNER JOIN cygx_article AS art ON art.article_id = r.article_id
-			INNER JOIN wx_user as u  ON u.user_id = r.user_id
-			LEFT JOIN company_product AS cp ON cp.company_id = r.company_id AND cp.product_id = 2
 			LEFT JOIN cygx_company_interaction_num AS ci ON ci.company_id = r.company_id
 			LEFT JOIN cygx_user_interaction_num AS ui ON ui.user_id = r.user_id
 			LEFT JOIN cygx_report_mapping AS re ON re.category_id = art.category_id_two
@@ -625,20 +630,18 @@ func GetCygxArticleCollectByCompanyList(startSize, pageSize int, condition strin
 
 // 关注产业列表
 func GetCygxIndustryFllowByCompanyList(condition string, startSize, pageSize int) (items []*UserInteraction, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
 			m.industry_name,
-			u.mobile,
-			u.real_name,
+			r.mobile,
+			r.real_name,
 			r.modify_time as create_time,
 			cp.company_name,
 			cp.seller_name,
 			( SELECT GROUP_CONCAT( DISTINCT s.subject_name SEPARATOR '/' ) FROM cygx_industrial_subject AS s WHERE s.industrial_management_id = m.industrial_management_id ) AS subject_name_str 
 		FROM
 			cygx_industry_fllow AS r
-			INNER JOIN cygx_industrial_management AS m ON m.industrial_management_id = r.industrial_management_id 
-			INNER JOIN wx_user as u  ON u.user_id = r.user_id
-			LEFT JOIN company_product AS cp ON cp.company_id = r.company_id AND cp.product_id = 2
+			INNER JOIN cygx_industrial_management AS m ON m.industrial_management_id = r.industrial_management_id
 			LEFT JOIN cygx_company_interaction_num AS ci ON ci.company_id = r.company_id
 			LEFT  JOIN cygx_user_interaction_num as ui  ON ui.user_id = u.user_id
 			
@@ -649,7 +652,7 @@ func GetCygxIndustryFllowByCompanyList(condition string, startSize, pageSize int
 
 // 关注作者机构列表
 func GetCygArticleDepartmentFollowByCompanyList(condition string, startSize, pageSize int) (items []*UserInteraction, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
 			m.department_id,
 			m.nick_name,
@@ -669,9 +672,7 @@ func GetCygArticleDepartmentFollowByCompanyList(condition string, startSize, pag
 			cygx_article_department_follow AS r
 			INNER JOIN cygx_article_department AS m ON m.department_id = r.department_id
 			INNER JOIN cygx_article AS a ON a.department_id = m.department_id
-			INNER JOIN wx_user as u  ON u.user_id = r.user_id 
 			LEFT JOIN cygx_user_interaction_num AS ui ON ui.user_id = r.user_id
-			LEFT JOIN company_product AS cp ON cp.company_id = r.company_id AND cp.product_id = 2
 			LEFT JOIN cygx_company_interaction_num AS ci ON ci.company_id = r.company_id
 			LEFT JOIN cygx_industrial_article_group_management AS mg ON mg.article_id = a.article_id
 			LEFT JOIN cygx_industrial_management AS i ON i.industrial_management_id = mg.industrial_management_id
@@ -683,17 +684,15 @@ func GetCygArticleDepartmentFollowByCompanyList(condition string, startSize, pag
 
 // 用户搜索关键词列表
 func GetCygxSearchKeyWordByCompanyList(condition string, startSize, pageSize int) (items []*UserInteraction, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
 			r.key_word,r.create_time,
 			r.mobile,
 			r.source,
-			cp.company_name,
-			cp.seller_name,
+			r.company_name,
 			r.real_name
 		FROM
 			cygx_search_key_word as r
-			LEFT JOIN company_product AS cp ON cp.company_id = r.company_id AND cp.product_id = 2
 			LEFT JOIN cygx_company_interaction_num AS ci ON ci.company_id = r.company_id
 			LEFT JOIN cygx_user_interaction_num AS ui ON ui.user_id = r.user_id
 			WHERE 1= 1 ` + condition + `
@@ -704,7 +703,7 @@ func GetCygxSearchKeyWordByCompanyList(condition string, startSize, pageSize int
 
 // 用户搜索关键词列表
 func GetCygxActivitySpecialTripByCompanyList(condition string, startSize, pageSize int) (items []*UserInteraction, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
 			a.research_theme AS activity_name,
 			a.chart_permission_name,
@@ -715,13 +714,12 @@ func GetCygxActivitySpecialTripByCompanyList(condition string, startSize, pageSi
 			r.real_name,
 			r.is_meeting,
 			r.activity_id,
-			cp.company_name,
-			cp.seller_name,
+			r.company_name,
+			r.seller_name,
 			r.real_name
 		FROM
 			cygx_activity_special_trip as r
 			INNER JOIN cygx_activity_special AS a ON a.activity_id = r.activity_id
-			LEFT JOIN company_product AS cp ON cp.company_id = r.company_id AND cp.product_id = 2
 			LEFT JOIN cygx_company_interaction_num AS ci ON ci.company_id = r.company_id
 			LEFT JOIN cygx_user_interaction_num AS ui ON ui.user_id = r.user_id
 			WHERE 1= 1 ` + condition + `
@@ -732,7 +730,7 @@ func GetCygxActivitySpecialTripByCompanyList(condition string, startSize, pageSi
 
 // 通过纪要ID获取活动详情
 func GetTableCompanyList() (item *GetUserInteractionTableCountResp, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
 	SUM( article_history_num ) AS history_num,
 	SUM( article_count_num ) AS count_num,
@@ -750,6 +748,7 @@ FROM
 
 // 获取用户参会记录根据销售分组
 func GetActivityMeetBySeller(condition string) (list []*company.CompanyReportRecordGroup, err error) {
+	return
 	o := orm.NewOrm()
 	sqlCount := `				SELECT
 				p.seller_id as admin_id,count(DISTINCT(r.company_id)) num,GROUP_CONCAT(DISTINCT r.company_id SEPARATOR ',') AS company_ids
@@ -774,6 +773,7 @@ func GetActivityMeetBySeller(condition string) (list []*company.CompanyReportRec
 
 // 收藏列表数量根据销售分组
 func GetCygxArticleCollectCountBySeller(condition string) (list []*company.CompanyReportRecordGroup, err error) {
+	return // 没有使用了
 	o := orm.NewOrm()
 	sqlCount := ` SELECT
 	p.seller_id as admin_id,count(DISTINCT(r.company_id)) num,GROUP_CONCAT(DISTINCT r.company_id SEPARATOR ',') AS company_ids
@@ -816,6 +816,7 @@ WHERE
 
 // 关注作者数量根据销售分组
 func GetCygArticleDepartmentFollowCountBySeller(condition string) (list []*company.CompanyReportRecordGroup, err error) {
+	return // 没有使用了
 	o := orm.NewOrm()
 	sqlCount := ` SELECT
 	p.seller_id AS admin_id,
@@ -862,14 +863,13 @@ type CompanyAndCount struct {
 
 // 获取用户参会记录数量根据公司分组
 func GetActivityMeetGroupByCompany(condition string) (list []*CompanyAndCount, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sqlCount := `	SELECT
 	r.company_id,COUNT(*) AS count  
 FROM
 	cygx_activity_signup AS r
 	INNER JOIN cygx_activity AS a ON a.activity_id = r.activity_id
 	INNER JOIN cygx_activity_type AS t ON t.activity_type_id = a.activity_type_id
-	INNER JOIN wx_user AS u ON u.user_id = r.user_id 
 WHERE
 	1 = 1 
 	AND r.do_fail_type = 0 `
@@ -883,14 +883,13 @@ WHERE
 
 // 收藏列表数量根据公司分组
 func GetCygxArticleCollectCountGroupByCompany(condition string) (list []*CompanyAndCount, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sqlCount := `	SELECT
 	r.company_id,
 	COUNT(*) AS count 
 FROM
 	cygx_article_collect AS r
 	INNER JOIN cygx_article AS art ON art.article_id = r.article_id
-	INNER JOIN wx_user AS u ON u.user_id = r.user_id 
 WHERE
 	1 = 1 `
 	if condition != "" {
@@ -903,14 +902,13 @@ WHERE
 
 // 关注产业数量根据公司分组
 func GetCygxIndustryFllowCountGroupByCompany(condition string) (list []*CompanyAndCount, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sqlCount := `		SELECT
 	r.company_id,
 	COUNT(*) AS count 
 FROM
 	cygx_industry_fllow AS r
 	INNER JOIN cygx_industrial_management AS m ON m.industrial_management_id = r.industrial_management_id
-	INNER JOIN wx_user AS u ON u.user_id = r.user_id 
 WHERE
 	type = 1 `
 	if condition != "" {
@@ -923,14 +921,13 @@ WHERE
 
 // 关注作者数量根据公司分组
 func GetCygArticleDepartmentFollowCountGroupByCompany(condition string) (list []*CompanyAndCount, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sqlCount := `	SELECT
 	r.company_id,
 	COUNT(*) AS count 
 FROM
 	cygx_article_department_follow AS r
 	INNER JOIN cygx_article_department AS m ON m.department_id = r.department_id
-	INNER JOIN wx_user AS u ON u.user_id = r.user_id 
 WHERE
 	type = 1 `
 	if condition != "" {
@@ -943,7 +940,7 @@ WHERE
 
 // 用户搜索关键词统计
 func GetCygxSearchKeyWordCountGroupByCompany(condition string) (list []*CompanyAndCount, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sqlCount := ` SELECT
 	r.company_id,
 	COUNT(*) AS count 
@@ -960,7 +957,7 @@ WHERE
 }
 
 func GetChartCountGroupByCompany(condition string) (list []*CompanyAndCount, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sqlCount := ` SELECT
 	r.company_id,
 	COUNT(*) AS count 
@@ -996,7 +993,7 @@ func GetCompanyCountGroupBySeller(condition string) (list []*company.CompanyRepo
 
 // 获取文章阅读记录根据公司分组
 func GetArticleHistoryGroupByCompany(condition string) (list []*CompanyAndCount, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sqlCount := `	SELECT
 	r.company_id,COUNT(*) AS count  
 FROM

+ 200 - 90
models/cygx/cygx_user_record.go

@@ -2,6 +2,7 @@ package cygx
 
 import (
 	"github.com/beego/beego/v2/client/orm"
+	"hongze/hz_crm_api/utils"
 	"time"
 )
 
@@ -24,39 +25,65 @@ type OpenIdList struct {
 	CompanyId int `description:"公司ID"`
 }
 
+type OpenIdMobileList struct {
+	OpenId string
+	UserId int
+	Mobile string `description:"手机号"`
+}
+
 func GetCygxUserRecord() (items []*CygxUserRecord, err error) {
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT union_id,open_id FROM cygx_user_record  `
-	_, err = orm.NewOrm().Raw(sql).QueryRows(&items)
+	_, err = o.Raw(sql).QueryRows(&items)
 	return
 }
 
 // 获取所有有权限的用户的opid
 func GetCygxUserRecordPower(chartPermissionIds string) (items []*OpenIdList, err error) {
-	o := orm.NewOrm()
-	sql := `SELECT
-			cr.open_id,
-			u.user_id,
-			u.company_id,
-			u.real_name,
-			u.mobile 
-		FROM
-			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
-			p.chart_permission_id IN (` + chartPermissionIds + `)
-			AND r.create_platform = 4 
-			AND p.STATUS IN ('正式','试用','永续')   GROUP BY cr.open_id `
-	_, err = o.Raw(sql).QueryRows(&items)
+	//o := orm.NewOrm()
+	//sql := `SELECT
+	//		cr.open_id,
+	//		u.user_id,
+	//		u.company_id,
+	//		u.real_name,
+	//		u.mobile
+	//	FROM
+	//		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
+	//		p.chart_permission_id IN (` + chartPermissionIds + `)
+	//		AND r.create_platform = 4
+	//		AND p.STATUS IN ('正式','试用','永续')   GROUP BY cr.open_id `
+	//_, err = o.Raw(sql).QueryRows(&items)
+
+	listMobile, err := GetCygxUserRecordPowerMobileList(chartPermissionIds)
+	if err != nil {
+		return
+	}
+	var mobileArr []string
+	for _, v := range listMobile {
+		if v.Mobile != "" {
+			mobileArr = append(mobileArr, v.Mobile)
+		}
+	}
+	mobileLen := len(mobileArr)
+	if mobileLen == 0 {
+		return
+	}
+	openIdList, err := GetUserRecordListByMobileArr(mobileArr)
+	if err != nil {
+		return
+	}
+	items = openIdList
 	return
 }
 
 // 获取所有有权限的用户的opid
-func GetCygxUserRecordPowerOpenid(condition string, pars []interface{}) (items []*OpenIdList, err error) {
+func GetCygxUserRecordPowerMobileList(chartPermissionIds string) (items []*OpenIdMobileList, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT
-			cr.open_id,
 			u.user_id,
 			u.company_id,
 			u.real_name,
@@ -65,28 +92,26 @@ func GetCygxUserRecordPowerOpenid(condition string, pars []interface{}) (items [
 			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
- 			1 =1
-			AND r.create_platform = 4  ` + condition + ` GROUP BY cr.open_id `
-	_, err = o.Raw(sql, pars).QueryRows(&items)
+			p.chart_permission_id IN (` + chartPermissionIds + `)
+			AND r.create_platform = 4 
+			AND p.STATUS IN ('正式','试用','永续')   GROUP BY u.user_id `
+	_, err = o.Raw(sql).QueryRows(&items)
 	return
 }
 
 // 获取关注这个文章对应产业的用户的 openid
 func GetCygxUserFllowOpenid(articleId int) (items []*OpenIdList, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	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_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_user_record AS cr ON cr.cygx_user_id = s.user_id 
 			INNER JOIN cygx_industrial_article_group_management as mg  ON mg.industrial_management_id = f.industrial_management_id
-		WHERE
-			r.create_platform = 4 
+		WHERE 1=1 
 			AND mg.article_id  = ?`
 	_, err = o.Raw(sql, articleId).QueryRows(&items)
 	return
@@ -94,17 +119,16 @@ func GetCygxUserFllowOpenid(articleId int) (items []*OpenIdList, err error) {
 
 // 获取关注这个产业的用户的 openid
 func GetCygxUserindustryFllowOpenid(industrialId int) (items []*OpenIdList, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	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_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_user_record AS cr ON cr.cygx_user_id = s.user_id 
 		WHERE
-			r.create_platform = 4 
+			 1=1  
 			AND f.industrial_management_id  = ?`
 	_, err = o.Raw(sql, industrialId).QueryRows(&items)
 	return
@@ -112,17 +136,16 @@ func GetCygxUserindustryFllowOpenid(industrialId int) (items []*OpenIdList, err
 
 // 获取关注这个文章对应作者的用户的 openid
 func GetCygxUserFllowDepartmentOpenid(articleId int) (items []*OpenIdList, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
 			cr.open_id,
-			f.user_id 
+			cr.cygx_user_id  as user_id 
 		FROM
 			cygx_article_department_follow AS f
-			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 = f.user_id 
 			INNER JOIN cygx_article AS a ON a.department_id = f.department_id 
 		WHERE
-			r.create_platform = 4 
+			 1=1   
 			AND a.article_id = ?`
 	_, err = o.Raw(sql, articleId).QueryRows(&items)
 	return
@@ -130,16 +153,15 @@ func GetCygxUserFllowDepartmentOpenid(articleId int) (items []*OpenIdList, err e
 
 // 获取拒绝接收推送的的用户的 openid
 func GetCygxUserRefusetOpenid() (items []*OpenIdList, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
 			cr.open_id,
-			s.user_id
+			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
+			INNER JOIN cygx_user_record AS cr ON cr.cygx_user_id = s.user_id 
 			WHERE
-			r.create_platform = 4
+			1=1
 			AND s.is_refuse = 1`
 	_, err = o.Raw(sql).QueryRows(&items)
 	return
@@ -150,17 +172,16 @@ 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
-			AND s.is_objective = 1
+			1 = 1 
+			AND s.is_refuse = 0 
+			AND s.is_subjective = 1 
+			AND s.is_objective = 1 
 			AND f.category_id = ?`
 	_, err = o.Raw(sql, categoryId).QueryRows(&items)
 	return
@@ -170,50 +191,90 @@ func GetCygxUserFllowCeLueOpenid(categoryId int) (items []*OpenIdList, err error
 func GetCygxActiviyUserFllowOpenid(activityId int) (items []*OpenIdList, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT
-			cr.open_id,
-			f.user_id 
+				cr.open_id,
+				cr.cygx_user_id AS 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_user_record AS cr  ON cr.cygx_user_id = s.user_id 
 			INNER JOIN cygx_industrial_activity_group_management AS mg ON mg.industrial_management_id = f.industrial_management_id 
 		WHERE
-			r.create_platform = 4 
+			1=1 
 			AND mg.activity_id = ?`
 	_, err = o.Raw(sql, activityId).QueryRows(&items)
 	return
 }
 
-// 根据销售规模,获取所有有权限的用户的opid
-func GetCygxUserRecordPowerByScale(chartPermissionIds, scale string) (items []*OpenIdList, err error) {
-	o := orm.NewOrm()
-	sql := `SELECT
-			cr.open_id,
-			u.user_id,
-			u.company_id,
-			u.real_name,
-			u.mobile 
-		FROM
-			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 
-			INNER JOIN company_product AS cp ON cp.company_id = p.company_id
-		WHERE
-			p.chart_permission_id IN (` + chartPermissionIds + `)
-			AND cp.scale IN (` + scale + `)
-			AND r.create_platform = 4 
-			AND p.STATUS IN ('正式','试用','永续')   GROUP BY  u.company_id `
-	_, err = o.Raw(sql).QueryRows(&items)
-	return
-}
+//// 根据销售规模,获取所有有权限的用户的opid
+//func GetCygxUserRecordPowerByScale(chartPermissionIds, scale string) (items []*OpenIdList, err error) {
+//	o := orm.NewOrm()
+//	sql := `SELECT
+//			cr.open_id,
+//			u.user_id,
+//			u.company_id,
+//			u.real_name,
+//			u.mobile
+//		FROM
+//			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
+//			INNER JOIN company_product AS cp ON cp.company_id = p.company_id
+//		WHERE
+//			p.chart_permission_id IN (` + chartPermissionIds + `)
+//			AND cp.scale IN (` + scale + `)
+//			AND r.create_platform = 4
+//			AND p.STATUS IN ('正式','试用','永续')   GROUP BY  u.company_id `
+//	_, err = o.Raw(sql).QueryRows(&items)
+//	return
+//}
 
 // GetCygxUserRecordPowerByActivitySet 根据活动设置,获取所有有权限的用户的opid
 func GetCygxUserRecordPowerByActivitySet(chartPermissionIds, condition string) (items []*OpenIdList, err error) {
+	//o := orm.NewOrm()
+	//sql := `SELECT
+	//		cr.open_id,
+	//		u.user_id,
+	//		u.company_id,
+	//		u.real_name,
+	//		u.mobile
+	//	FROM
+	//		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
+	//		p.chart_permission_id IN (` + chartPermissionIds + `) ` + condition + ` AND r.create_platform = 4
+	//		AND p.STATUS IN ('正式','试用','永续')   GROUP BY cr.open_id `
+	//_, err = o.Raw(sql).QueryRows(&items)
+
+	listMobile, err := GetCygxUserRecordPowerByActivitySetListMobile(chartPermissionIds, condition)
+	if err != nil {
+		return
+	}
+	var mobileArr []string
+	for _, v := range listMobile {
+		if v.Mobile != "" {
+			mobileArr = append(mobileArr, v.Mobile)
+		}
+	}
+	mobileLen := len(mobileArr)
+	if mobileLen == 0 {
+		return
+	}
+	openIdList, err := GetUserRecordListByMobileArr(mobileArr)
+	if err != nil {
+		return
+	}
+	items = openIdList
+
+	return
+}
+
+// GetCygxUserRecordPowerByActivitySetListMobile 根据活动设置,获取所有有权限的用户的手机号
+func GetCygxUserRecordPowerByActivitySetListMobile(chartPermissionIds, condition string) (items []*OpenIdMobileList, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT
-			cr.open_id,
 			u.user_id,
 			u.company_id,
 			u.real_name,
@@ -222,29 +283,56 @@ func GetCygxUserRecordPowerByActivitySet(chartPermissionIds, condition string) (
 			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
-			p.chart_permission_id IN (` + chartPermissionIds + `) ` + condition + ` AND r.create_platform = 4 
-			AND p.STATUS IN ('正式','试用','永续')   GROUP BY cr.open_id `
+			p.chart_permission_id IN (` + chartPermissionIds + `) ` + condition + ` 
+			AND p.STATUS IN ('正式','试用','永续')   GROUP BY u.user_id `
 	_, err = o.Raw(sql).QueryRows(&items)
 	return
 }
 
 // 获取关注了查研观向小助手公众号的所有公司ID
 func GetCygxUserRecordCompany() (items []*OpenIdList, err error) {
+	listUser, err := GetCygxUserRecordCompanyUserId()
+	if err != nil {
+		return
+	}
+	var userIds []int
+	for _, v := range listUser {
+		userIds = append(userIds, v.UserId)
+	}
+	lenarr := len(userIds)
+	if lenarr == 0 {
+		return
+	}
+
+	var condition string
+	var pars []interface{}
+	condition = ` AND w.user_id  IN (` + utils.GetOrmInReplace(lenarr) + `)`
+	pars = append(pars, userIds)
+
 	o := orm.NewOrm()
 	sql := `SELECT
 			w.company_id 
 		FROM
-			cygx_user_record AS u
-			INNER JOIN user_record AS r ON r.union_id = u.union_id
-			INNER JOIN wx_user AS w ON w.user_id = r.user_id 
+			wx_user AS w
+		WHERE
+			1 = 1` + condition + `GROUP BY	 w.company_id `
+	_, err = o.Raw(sql, pars).QueryRows(&items)
+	return
+}
+
+// 获取关注了查研观向小助手公众号的所有用户ID
+func GetCygxUserRecordCompanyUserId() (items []*OpenIdList, err error) {
+	o := orm.NewOrmUsingDB("hz_cygx")
+	sql := `SELECT
+			u.cygx_user_id AS user_id 
+		FROM
+			cygx_user_record AS u 
 		WHERE
 			1 = 1 
-			AND r.create_platform = 4 
-			AND w.company_id != 1 
+			AND subscribe = 1 
 		GROUP BY
-			w.company_id `
+			u.cygx_user_id `
 	_, err = o.Raw(sql).QueryRows(&items)
 	return
 }
@@ -276,3 +364,25 @@ func GetCompanyReportPermissionItem(condition string, pars []interface{}) (items
 	_, err = o.Raw(sql, pars).QueryRows(&items)
 	return
 }
+
+// 根据手机号获取用户的openid
+func GetUserRecordListByMobileArr(bindAccount []string) (items []*OpenIdList, err error) {
+	o := orm.NewOrmUsingDB("hz_cygx")
+	lenarr := len(bindAccount)
+	if lenarr == 0 {
+		return
+	}
+	var condition string
+	var pars []interface{}
+	condition = ` AND u.cygx_bind_account IN (` + utils.GetOrmInReplace(lenarr) + `)`
+	pars = append(pars, bindAccount)
+	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
+}

+ 5 - 5
models/cygx/cygx_yanxuan_special.go

@@ -57,7 +57,7 @@ type Doc struct {
 }
 
 func GetYanxuanSpecialList(condition string, pars []interface{}) (items []*CygxYanxuanSpeciaResplItem, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := ``
 	sql = `SELECT a.*,b.bg_img,b.head_img,b.introduction,b.label,b.mobile,b.nick_name,b.real_name,b.special_name
 FROM cygx_yanxuan_special AS a
@@ -78,7 +78,7 @@ type EnableCygxYanxuanSpecialReq struct {
 }
 
 func EnableYanxuanSpecial(id, status int, reason string) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := ``
 	sql = `UPDATE cygx_yanxuan_special SET status=?,reason=?,publish_time=NOW() WHERE id = ? `
 	_, err = o.Raw(sql, status, reason, id).Exec()
@@ -117,7 +117,7 @@ type CygxYanxuanSpecialItem struct {
 }
 
 func GetYanxuanSpecialFollowUserById(specialId int) (items []int, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := ``
 	sql = `SELECT b.user_id
 FROM cygx_yanxuan_special AS a
@@ -128,7 +128,7 @@ JOIN cygx_yanxuan_special_follow AS b ON a.user_id = b.follow_user_id
 }
 
 func GetYanxuanSpecialItemById(specialId int) (item *CygxYanxuanSpecialItem, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := ``
 	sql = `SELECT a.*,b.bg_img,b.head_img,b.introduction,b.label,b.mobile,
 b.nick_name,b.real_name,b.special_name
@@ -137,4 +137,4 @@ JOIN cygx_yanxuan_special_author AS b ON a.user_id = b.user_id
  WHERE a.id=? `
 	err = o.Raw(sql, specialId).QueryRow(&item)
 	return
-}
+}

+ 5 - 7
models/cygx/cygx_yanxuan_special_user.go

@@ -41,7 +41,7 @@ type CygxYanxuanSpecialAuthorItem struct {
 }
 
 func AddCygxYanxuanSpecialAuthor(item *CygxYanxuanSpecialAuthor) (lastId int64, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	lastId, err = o.Insert(item)
 	return
 }
@@ -59,7 +59,7 @@ type EnableCygxYanxuanSpecialAuthorReq struct {
 
 // 启用禁用作者
 func EnableYanxuanSpecialAuthor(userId, status int) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := ``
 	sql = `UPDATE cygx_yanxuan_special_author SET status=? WHERE user_id = ? `
 	_, err = o.Raw(sql, status, userId).Exec()
@@ -67,14 +67,12 @@ func EnableYanxuanSpecialAuthor(userId, status int) (err error) {
 }
 
 func GetYanxuanSpecialAuthorList() (items []*CygxYanxuanSpecialAuthorItem, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := ``
 	sql = `SELECT
-	a.*,c.company_name  
+	a.*
 FROM
-	cygx_yanxuan_special_author as a
-	INNER JOIN wx_user AS u ON u.user_id = a.user_id
-	INNER JOIN company AS c ON c.company_id = u.company_id ORDER BY create_time DESC `
+	cygx_yanxuan_special_author as a ORDER BY create_time DESC `
 	_, err = o.Raw(sql).QueryRows(&items)
 	return
 }

+ 9 - 10
models/cygx/industrial_activity_group_management.go

@@ -28,16 +28,14 @@ type IndustryAndSubjectName struct {
 
 // 列表
 func GetIndustrialActivityGroupManagementList(activityId, source int) (items []*IndustrialActivityGroupManagementRep, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
-			p.permission_name,
-			p.chart_permission_id,
+			m.chart_permission_id,
 			m.industrial_management_id,
 			m.industry_name 
 			FROM
 			cygx_industrial_activity_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.activity_id = ? AND am.source = ?`
 	_, err = o.Raw(sql, activityId, source).QueryRows(&items)
@@ -55,7 +53,7 @@ func GetIndustrialManagementGroupActCount(industrialManagementId int) (count int
 				WHERE
 				am.industrial_management_id =? 
 				AND a.publish_status = 1 `
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	err = o.Raw(sqlCount, industrialManagementId).QueryRow(&count)
 	return
 }
@@ -65,7 +63,7 @@ func GetActivityIdsByIndustrialManagementId(industrialManagementId string) (acti
 			GROUP_CONCAT( DISTINCT activity_id ORDER BY id ASC SEPARATOR ',' ) AS activityId 
 			FROM
 			cygx_industrial_activity_group_management WHERE industrial_management_id IN (` + industrialManagementId + `)`
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	err = o.Raw(sql).QueryRow(&activityId)
 	return
 }
@@ -78,7 +76,7 @@ type IndustrialActivityGroupResp struct {
 
 // 列表
 func GetIndustrialActivityGroupListByactivityIds(activityIds string) (items []*IndustrialActivityGroupResp, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT  mg.*,m.industry_name  FROM
 	        cygx_industrial_activity_group_management AS mg
 	      	 INNER JOIN cygx_industrial_management AS m ON m.industrial_management_id = mg.industrial_management_id 
@@ -111,7 +109,7 @@ func GetIndustryActCountGroupByType(industryId int) (list []*IndustryActCountGro
 					am.industrial_management_id = ? AND a.publish_status = 1
 				GROUP BY
 					activity_type `
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	_, err = o.Raw(sqlCount, industryId).QueryRows(&list)
 	return
 }
@@ -122,13 +120,14 @@ func GetCygxIndustrialActivityGroupManagementCount(condition string, pars []inte
 	if condition != "" {
 		sqlCount += condition
 	}
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	err = o.Raw(sqlCount, pars).QueryRow(&count)
 	return
 }
 
 // CygxIndustrialActivityGroupManagement 获取活动与产业关联列表
 func GetCygxIndustrialActivityGroupManagementList(condition string, pars []interface{}) (list []*CygxIndustrialActivityGroupManagement, err error) {
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
 			*
 			FROM
@@ -138,6 +137,6 @@ func GetCygxIndustrialActivityGroupManagementList(condition string, pars []inter
 	if condition != `` {
 		sql += condition
 	}
-	_, err = orm.NewOrm().Raw(sql, pars).QueryRows(&list)
+	_, err = o.Raw(sql, pars).QueryRows(&list)
 	return
 }

+ 7 - 8
models/cygx/industrial_activity_group_subject.go

@@ -18,9 +18,9 @@ type SubjectActivityGroupManagementRep struct {
 	SubjectName         string `description:"标的名称"`
 }
 
-//列表
+// 列表
 func GetSubjectActivityGroupManagementList(activityId, source int) (items []*SubjectActivityGroupManagementRep, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
 			s.subject_name,
 			s.industrial_subject_id 
@@ -38,7 +38,7 @@ func GetActivityIdsByIndustrialSubjectId(industrialSubjectId string) (activityId
 			GROUP_CONCAT( DISTINCT activity_id ORDER BY id ASC SEPARATOR ',' ) AS activity_id 
 			FROM
 			cygx_industrial_activity_group_subject WHERE industrial_subject_id IN (` + industrialSubjectId + `)`
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	err = o.Raw(sql).QueryRow(&activityId)
 	return
 }
@@ -50,9 +50,9 @@ type SubjectlActivityGroupResp struct {
 	SubjectName            string `description:"标的名称"`
 }
 
-//列表
+// 列表
 func GetSubjectActivityGroupListByactivityIds(activityIds string) (items []*SubjectlActivityGroupResp, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
 			sg.*,
 			s.subject_name,
@@ -67,7 +67,6 @@ func GetSubjectActivityGroupListByactivityIds(activityIds string) (items []*Subj
 	return
 }
 
-
 type IndustrySubjectActCountGroupByType struct {
 	ActivityType  string `json:"activity_type" description:"活动类型名称"`
 	ActivityCount int    `json:"activity_count" description:"关联的活动数"`
@@ -91,7 +90,7 @@ func GetIndustrySubjectActCountGroupByType(subjectId int) (list []*IndustrySubje
 					gsub.industrial_subject_id = ? AND a.publish_status = 1
 				GROUP BY
 					activity_type`
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	_, err = o.Raw(sqlCount, subjectId).QueryRows(&list)
 	return
-}
+}

+ 9 - 11
models/cygx/industrial_analyst.go

@@ -1,7 +1,6 @@
 package cygx
 
 import (
-	"fmt"
 	"github.com/beego/beego/v2/client/orm"
 	"time"
 )
@@ -25,44 +24,43 @@ type GetIndustrialAnalystList struct {
 	List []*CygxIndustrialAnalyst
 }
 
-//新增
+// 新增
 func AddIndustrialAnalyst(item *CygxIndustrialAnalyst) (err error) {
 	o := orm.NewOrm()
 	_, err = o.Insert(item)
 	return
 }
 
-//列表
+// 列表
 func GetIndustrialAnalystAll(IndustrialManagementId int) (items []*CygxIndustrialAnalyst, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT * FROM cygx_industrial_analyst where industrial_management_id = ? `
 	_, err = o.Raw(sql, IndustrialManagementId).QueryRows(&items)
 	return
 }
 
-//获取数量
+// 获取数量
 func GetIndustrialAnalystCount(condition string, pars []interface{}) (count int, err error) {
 	sqlCount := ` SELECT COUNT(1) AS count  FROM cygx_industrial_analyst WHERE 1=1 `
 	if condition != "" {
 		sqlCount += condition
 	}
-	fmt.Println(sqlCount)
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	err = o.Raw(sqlCount, pars).QueryRow(&count)
 	return
 }
 
-//修改
+// 修改
 func EditIndustrialAnalyst(item *CygxIndustrialAnalyst) (err error) {
 	sql := `UPDATE cygx_industrial_analyst SET  analyst_name=? WHERE industrial_analyst_id=? `
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	_, err = o.Raw(sql, item.AnalystName, item.IndustrialAnalystId).Exec()
 	return
 }
 
-//删除数据
+// 删除数据
 func DeleteIndustrialAnalyst(industrialAnalystId int) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := ` DELETE FROM cygx_industrial_analyst WHERE industrial_analyst_id = ?`
 	_, err = o.Raw(sql, industrialAnalystId).Exec()
 	return

+ 9 - 11
models/cygx/industrial_article_group_management.go

@@ -16,7 +16,7 @@ type CygxIndustrialArticleGroupManagement struct {
 
 // 新增
 func AddCygxIndustrialArticleGroupManagement(item *CygxIndustrialArticleGroupManagement) (newId int64, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	_, err = o.Insert(item)
 	if err != nil {
 		return
@@ -26,16 +26,14 @@ func AddCygxIndustrialArticleGroupManagement(item *CygxIndustrialArticleGroupMan
 
 // 列表
 func GetIndustrialArticleGroupManagementList(articleId int) (items []*IndustrialActivityGroupManagementRep, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
-			p.permission_name,
-			p.chart_permission_id,
+			m.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)
@@ -44,7 +42,7 @@ func GetIndustrialArticleGroupManagementList(articleId int) (items []*Industrial
 
 // 通过名称获取详情
 func GetIndustrialManagemenDetailByAaticle(articleId int) (item *CygxIndustrialArticleGroupManagement, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT * FROM cygx_industrial_article_group_management WHERE article_id = ? `
 	err = o.Raw(sql, articleId).QueryRow(&item)
 	return
@@ -55,7 +53,7 @@ func GetArticleIdsByIndustrialManagementId(industrialManagementId string) (artic
 			GROUP_CONCAT( DISTINCT article_id ORDER BY id ASC SEPARATOR ',' ) AS articleId 
 			FROM
 			cygx_industrial_article_group_management WHERE industrial_management_id IN (` + industrialManagementId + `)`
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	err = o.Raw(sql).QueryRow(&articleId)
 	return
 }
@@ -69,7 +67,7 @@ type ArticleIndustrialSubjectNameResp struct {
 
 // 通过文章ID获取所关联的产业与标的
 func GetCygxArticleIndustrialSubjectName(articleIds string) (items []*ArticleIndustrialSubjectNameResp, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := ` SELECT
 			art.article_id,
 			(
@@ -104,7 +102,7 @@ type IndustrialArticleGroupResp struct {
 
 // 通过id 获取详情
 func GetIndustrialManagemenDetailByAaticleID(articleId int) (items []*ArticleIndustrialSubjectNameResp, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
 			article_id,
 			m.industrial_management_id,
@@ -120,7 +118,7 @@ func GetIndustrialManagemenDetailByAaticleID(articleId int) (items []*ArticleInd
 
 // 列表
 func GetIndustrialArticleGroupListByarticleIds(articleIds string) (items []*IndustrialArticleGroupResp, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT  mg.*,m.industry_name  FROM
 	        cygx_industrial_article_group_management AS mg
 	      	 INNER JOIN cygx_industrial_management AS m ON m.industrial_management_id = mg.industrial_management_id 
@@ -149,7 +147,7 @@ type IndustrialManagementHotResp struct {
 
 // 产业与文章关联列表
 func GetSearchResourceList(userId int, condition string, startSize, pageSize int) (items []*IndustrialManagementHotResp, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
 			m.industry_name,
 			m.industrial_management_id,

+ 10 - 10
models/cygx/industrial_article_group_subject.go

@@ -13,9 +13,9 @@ type CygxIndustrialArticleGroupSubject struct {
 	CreateTime          time.Time `description:"创建时间"`
 }
 
-//新增
+// 新增
 func AddCygxIndustrialArticleGroupSubject(item *CygxIndustrialArticleGroupSubject) (newId int64, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	_, err = o.Insert(item)
 	if err != nil {
 		return
@@ -28,7 +28,7 @@ func GetSubjectIds(articleId int) (subjects string, err error) {
 			GROUP_CONCAT( DISTINCT industrial_subject_id ORDER BY id ASC SEPARATOR ',' ) AS subjects 
 			FROM
 			cygx_industrial_article_group_subject WHERE article_id = ?`
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	err = o.Raw(sql, articleId).QueryRow(&subjects)
 	return
 }
@@ -38,14 +38,14 @@ func GetArticleIdsBySubjectId(industrialSubjectId string) (articleId string, err
 			GROUP_CONCAT( DISTINCT article_id ORDER BY id ASC SEPARATOR ',' ) AS articleId 
 			FROM
 			cygx_industrial_article_group_subject WHERE industrial_subject_id IN (` + industrialSubjectId + `)`
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	err = o.Raw(sql).QueryRow(&articleId)
 	return
 }
 
-//列表
-func GetSubjectArticleGroupManagementList(activityId int) (items []*SubjectActivityGroupManagementRep, err error) {
-	o := orm.NewOrm()
+// 列表
+func GetSubjectArticleGroupManagementList(articleId int) (items []*SubjectActivityGroupManagementRep, err error) {
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
 			s.subject_name,
 			s.industrial_subject_id 
@@ -54,7 +54,7 @@ func GetSubjectArticleGroupManagementList(activityId int) (items []*SubjectActiv
 			INNER JOIN cygx_industrial_subject AS s ON s.industrial_subject_id = ag.industrial_subject_id 
 			WHERE
 			ag.article_id = ?`
-	_, err = o.Raw(sql, activityId).QueryRows(&items)
+	_, err = o.Raw(sql, articleId).QueryRows(&items)
 	return
 }
 
@@ -65,9 +65,9 @@ type SubjectlArticleGroupResp struct {
 	SubjectName            string `description:"标的名称"`
 }
 
-//列表
+// 列表
 func GetSubjectArticleGroupListByarticleIds(articleIds string) (items []*SubjectlArticleGroupResp, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
 			sg.*,
 			s.subject_name,

+ 50 - 46
models/cygx/industrial_management.go

@@ -108,14 +108,14 @@ type GetCygxIndustrialManagementList struct {
 
 // 新增
 func AddIndustrialManagement(item *CygxIndustrialManagement) (newId int64, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	newId, err = o.Insert(item)
 	return
 }
 
 // 列表
 func GetIndustrialManagementAll(condition, orderColumn string) (items []*CygxIndustrialManagementNum, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT *,
 		( SELECT COUNT( 1 ) FROM cygx_industrial_article_group_management AS man_g WHERE man_g.industrial_management_id = man.industrial_management_id ) AS art_num,
 		( SELECT COUNT( 1 ) FROM cygx_industrial_activity_group_management AS a_g  INNER JOIN cygx_activity AS a ON a.activity_id = a_g.activity_id  WHERE a_g.industrial_management_id = man.industrial_management_id AND a.publish_status = 1 ) AS act_num
@@ -132,7 +132,7 @@ func GetIndustrialManagementAll(condition, orderColumn string) (items []*CygxInd
 
 // 列表
 func GetIndustrialManagementAllCheckName(ChartPermissionId int, orderColumn string) (items []*CygxIndustrialManagementNumCheckName, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT *
 		FROM
 		cygx_industrial_management AS man 
@@ -143,7 +143,7 @@ func GetIndustrialManagementAllCheckName(ChartPermissionId int, orderColumn stri
 }
 
 func GetIndustrialManagementAllByReportTime(condition, orderSrt string) (items []*CygxIndustrialManagementNum, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
 			man.*,art.publish_date,man_g.industrial_management_id as man_gid,
 			MAX( art.publish_date ) AS update_time,
@@ -170,7 +170,7 @@ func GetIndustrialManagementCount(condition string, pars []interface{}) (count i
 	if condition != "" {
 		sqlCount += condition
 	}
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	err = o.Raw(sqlCount, pars).QueryRow(&count)
 	return
 }
@@ -178,7 +178,7 @@ func GetIndustrialManagementCount(condition string, pars []interface{}) (count i
 // 修改
 func EditIndustrialManagement(item *CygxIndustrialManagement) (err error) {
 	sql := `UPDATE cygx_industrial_management SET chart_permission_id=?, industry_name=?, recommended_index=?, layout_time=?,is_new_label=?,is_deep_label=?,is_hand_new_label=?,is_hand_deep_label=?  WHERE industrial_management_id=? `
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	_, err = o.Raw(sql, item.ChartPermissionId, item.IndustryName, item.RecommendedIndex, item.LayoutTime, item.IsNewLabel, item.IsDeepLabel, item.IsHandNewLabel, item.IsHandDeepLabel, item.IndustrialManagementId).Exec()
 	return
 }
@@ -186,14 +186,14 @@ func EditIndustrialManagement(item *CygxIndustrialManagement) (err error) {
 // 通过活动添加的标签产业添加的时候二次修改
 func EditIndustrialManagementFromAct(item *CygxIndustrialManagement) (err error) {
 	sql := `UPDATE cygx_industrial_management SET  recommended_index=?, layout_time=?,is_new_label=?,is_deep_label=?,is_hand_new_label=?,is_hand_deep_label=?, source = 1  WHERE industry_name=? AND chart_permission_id=?`
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	_, err = o.Raw(sql, item.RecommendedIndex, item.LayoutTime, item.IsNewLabel, item.IsDeepLabel, item.IsHandNewLabel, item.IsHandDeepLabel, item.IndustryName, item.ChartPermissionId).Exec()
 	return
 }
 
 // 删除数据
 func DeleteIndustrialManagement(industrialManagementId int) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	to, err := o.Begin()
 	if err != nil {
 		return
@@ -230,7 +230,7 @@ func GetIndustrialManagementInfo(industrialManagementId int) (item *CygxIndustri
 // 获取产业关联的文章数量
 func GetIndustrialManagementGroupArtCount(industrialManagementId int) (count int, err error) {
 	sqlCount := ` SELECT COUNT(1) AS count  FROM cygx_industrial_article_group_management WHERE industrial_management_id=? `
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	err = o.Raw(sqlCount, industrialManagementId).QueryRow(&count)
 	return
 }
@@ -245,7 +245,7 @@ type CygxIndustrialManagementExport struct {
 }
 
 func GetChartPermissionExport(chartPermissionId int) (items []*CygxIndustrialManagementExport, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
 		mp.chart_permission_name,
 		man.industry_name,
@@ -270,7 +270,7 @@ type CygxIndustrialManagementIdStr struct {
 }
 
 func GetChartPermissionIdStr() (items []*CygxIndustrialManagementIdStr, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT * FROM cygx_report_mapping WHERE report_type = 1 AND chart_permission_id != 23 GROUP BY chart_permission_id  ORDER BY sort DESC `
 	_, err = o.Raw(sql).QueryRows(&items)
 	return
@@ -289,7 +289,7 @@ type IndustrialManagementExport struct {
 }
 
 func GetIndustrialManagementIdStr(chartPermissionId int) (items []*IndustrialManagementExport, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT * FROM cygx_industrial_management WHERE chart_permission_id = ?`
 	_, err = o.Raw(sql, chartPermissionId).QueryRows(&items)
 	return
@@ -301,7 +301,7 @@ type GetReportNumLIstExport struct {
 }
 
 func GetReportNumLIst(industrialManagementId int) (items []*GetReportNumLIstExport, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
 		rep.match_type_name,
 		COUNT(match_type_name) type_num 
@@ -324,7 +324,7 @@ type GetMatchTypeListRep struct {
 }
 
 func GetMatchTypeList(chartPermissionId int) (items []*GetMatchTypeListRep, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT * FROM cygx_report_mapping WHERE chart_permission_id = ?  GROUP BY match_type_name `
 	_, err = o.Raw(sql, chartPermissionId).QueryRows(&items)
 	return
@@ -337,7 +337,7 @@ func GetchartPermissionReportNameCount(industrialManagementId int) (count int, e
 WHERE
 	re.report_type = 1
 	AND re.chart_permission_id = ?  `
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	err = o.Raw(sqlCount, industrialManagementId).QueryRow(&count)
 	return
 }
@@ -350,7 +350,7 @@ type IndustrialManagementDetial struct {
 
 // 通过产业ID获取详情
 func GetindustrialManagemenById(industrialManagementId int) (item *CygxIndustrialManagementNum, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT man.layout_time, art.publish_date as create_time,
 			( SELECT COUNT( 1 ) FROM cygx_industrial_article_group_management AS man_g INNER JOIN cygx_article AS art ON art.article_id = man_g.article_id  WHERE man_g.industrial_management_id = man.industrial_management_id AND art.publish_status = 1 ) AS art_num 
 			FROM
@@ -370,7 +370,7 @@ type IndustrialManagementArtTypeList struct {
 }
 
 func GetIndustrialManagementArtTypeList(industrialManagementId int) (items []*IndustrialManagementArtTypeList, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
 				re.match_type_name,
 				COUNT(*) AS art_num
@@ -413,7 +413,7 @@ func GetIndustrialManagementArtTypeList(industrialManagementId int) (items []*In
 
 // 获取研选路演精华的数量
 func GetIndustrialManagementArtYxLYJH(industrialManagementId int) (total int, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
 			COUNT(*) AS art_num 
 		FROM
@@ -442,14 +442,14 @@ func GetArtGroupIndustrialManagement(reportId int) (item []*ArtGroupIndustrialMa
 			INNER JOIN cygx_industrial_management AS man ON man.industrial_management_id = man_g.industrial_management_id 
 		WHERE
 			man_g.cygx_article_id = ?`
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	_, err = o.Raw(sql, reportId).QueryRows(&item)
 	return
 }
 
 // 通过ID获取详情
 func GetIndustrialManagemenDetailById(industrialManagementId int) (item *CygxIndustrialManagementDetail, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT * FROM cygx_industrial_management WHERE industrial_management_id = ? `
 	err = o.Raw(sql, industrialManagementId).QueryRow(&item)
 	return
@@ -457,7 +457,7 @@ func GetIndustrialManagemenDetailById(industrialManagementId int) (item *CygxInd
 
 // 通过名称获取详情
 func GetIndustrialManagemenDetailByName(industryName string) (item *CygxIndustrialManagementDetail, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT * FROM cygx_industrial_management WHERE industry_name = ? `
 	err = o.Raw(sql, industryName).QueryRow(&item)
 	return
@@ -470,14 +470,14 @@ func GetIndustrialManagementGroupArtCountByDeep(industrialManagementId int) (cou
 				WHERE
 				a.industrial_management_id = ?
 				AND b.match_type_name ='行业深度' `
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	err = o.Raw(sqlCount, industrialManagementId).QueryRow(&count)
 	return
 }
 
 // 列表
 func GetIndustrialManagement(condition string) (items []*ArtGroupIndustrialManagementRep, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT * FROM cygx_industrial_management as art WHERE 1= 1 `
 	if condition != "" {
 		sql += condition
@@ -494,7 +494,7 @@ func GetindustrialManagementNames(industrialManagementIds string) (names string,
 			cygx_industrial_management AS m 
 			WHERE
 			industrial_management_id IN ( ` + industrialManagementIds + `) `
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	err = o.Raw(sql).QueryRow(&names)
 	return
 }
@@ -513,7 +513,7 @@ func GetindustrialManagementNamesBySubjectName(subjectnName string, chartPermiss
 			cygx_industrial_subject 
 			WHERE
 			subject_name = ?) 	AND m.chart_permission_id	= ? `
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	err = o.Raw(sql, subjectnName, chartPermissionId).QueryRow(&names)
 	return
 }
@@ -525,7 +525,7 @@ type ReportMappingCategoryRep struct {
 }
 
 func GetPermissionMappingCategoryAll() (item []*ReportMappingCategoryRep, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := ` SELECT * FROM cygx_report_mapping  GROUP BY category_id `
 	_, err = o.Raw(sql).QueryRows(&item)
 	return
@@ -548,11 +548,11 @@ type CompanyHistoryRecordNewPvRep struct {
 func GetCompanyHistoryRecordNewPv(mobiles, emails string) (item []*CompanyHistoryRecordNewPvRep, err error) {
 	//var table string
 	//table = "cygx_article_history_record_all"
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := ` SELECT
-			u.real_name,
-			u.mobile,
-			u.email,
+			h.real_name,
+			h.mobile,
+			h.email,
 			a.title,
 			a.category_id,
 			h.create_time,
@@ -576,7 +576,6 @@ func GetCompanyHistoryRecordNewPv(mobiles, emails string) (item []*CompanyHistor
 			) AS industry_name
 		FROM
 			cygx_article_history_record_all AS h
-			LEFT JOIN wx_user AS u ON u.mobile = h.mobile
 			INNER JOIN cygx_article AS a ON a.article_id = h.article_id 
 		WHERE
 			h.mobile IN (` + mobiles + `) AND h.is_del = 0  OR( h.email IN (` + emails + `) AND h.email <>'' AND h.is_del = 0 )   ORDER BY h.create_time 	DESC `
@@ -592,7 +591,7 @@ func GetManagementIdsByName(name string) (industrialManagementIds string, err er
 			cygx_industrial_management AS s
 			WHERE
 			industry_name =? `
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	err = o.Raw(sql, name).QueryRow(&industrialManagementIds)
 	return
 }
@@ -605,7 +604,7 @@ func GetManagementIdsByNameLike(name string) (industrialManagementIds string, er
 			cygx_industrial_management AS s
 			WHERE
 			industry_name LIKE '%` + name + `%'`
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	err = o.Raw(sql).QueryRow(&industrialManagementIds)
 	return
 }
@@ -620,7 +619,7 @@ type CygxReportMappingResp struct {
 
 // 通过ID获取详情
 func GetCygxReportMappingRespByid(categoryId int) (item *CygxReportMappingResp, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT * FROM cygx_report_mapping WHERE category_id = ? LIMIT 1`
 	err = o.Raw(sql, categoryId).QueryRow(&item)
 	return
@@ -634,18 +633,19 @@ type IndustryMove struct {
 
 // Update 更新产业
 func (industryItem *CygxIndustrialManagement) Update(cols []string) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	_, err = o.Update(industryItem, cols...)
 	return
 }
 
 // GetIndustryListByCondition 获取产业列表
 func GetIndustryListByCondition(condition string, pars []interface{}) (list []*CygxIndustrialManagement, err error) {
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT * FROM cygx_industrial_management WHERE 1 = 1 `
 	if condition != "" {
 		sql += condition
 	}
-	_, err = orm.NewOrm().Raw(sql, pars).QueryRows(&list)
+	_, err = o.Raw(sql, pars).QueryRows(&list)
 	return
 }
 
@@ -660,6 +660,7 @@ type IndustriesEarliestLayoutTime struct {
 
 // GetIndustriesEarliestLayoutTime 获取产业最早布局时间
 func GetIndustriesEarliestLayoutTime(condition string, pars []interface{}) (list []*IndustriesEarliestLayoutTime, err error) {
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
 				idy.industrial_management_id,
 				idy.layout_time,
@@ -674,12 +675,13 @@ func GetIndustriesEarliestLayoutTime(condition string, pars []interface{}) (list
 		sql += condition
 	}
 	sql += ` GROUP BY idy.industrial_management_id`
-	_, err = orm.NewOrm().Raw(sql, pars).QueryRows(&list)
+	_, err = o.Raw(sql, pars).QueryRows(&list)
 	return
 }
 
 // GetIndustriesEarliestLayoutTimeByMorningMeeting 根据晨会精华获取产业最早布局时间
 func GetIndustriesEarliestLayoutTimeByMorningMeeting(condition string, pars []interface{}) (list []*IndustriesEarliestLayoutTime, err error) {
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
 			idy.industrial_management_id,
 			idy.layout_time,
@@ -693,20 +695,21 @@ func GetIndustriesEarliestLayoutTimeByMorningMeeting(condition string, pars []in
 		sql += condition
 	}
 	sql += ` GROUP BY idy.industrial_management_id`
-	_, err = orm.NewOrm().Raw(sql, pars).QueryRows(&list)
+	_, err = o.Raw(sql, pars).QueryRows(&list)
 	return
 }
 
 // UpdateIndustryLayoutTime 更新产业布局时间
 func UpdateIndustryLayoutTime(industryId int, layoutTime string) (err error) {
 	sql := `UPDATE cygx_industrial_management SET layout_time = ? WHERE industrial_management_id = ? LIMIT 1`
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	_, err = o.Raw(sql, layoutTime, industryId).Exec()
 	return
 }
 
 // GetYxIndustryUseHzIndustryIds 获取研选产业的报告/活动所使用到的非研选产业IDs-即弘则覆盖
 func GetYxIndustryUseHzIndustryIds() (ids []int, err error) {
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT DISTINCT
 				a.industrial_management_id
 			FROM
@@ -724,13 +727,13 @@ func GetYxIndustryUseHzIndustryIds() (ids []int, err error) {
 			JOIN cygx_article AS c ON a.article_id = c.article_id
 			WHERE
 				c.article_id > 1000000 AND c.article_type_id IN  (1,2,12) AND b.chart_permission_id != 31 AND c.publish_status = 1`
-	_, err = orm.NewOrm().Raw(sql).QueryRows(&ids)
+	_, err = o.Raw(sql).QueryRows(&ids)
 	return
 }
 
 // GetIndustryListWithHzCover 获取产业列表-带弘则覆盖
 func GetIndustryListWithHzCover(condition, conditionCover, orderRule string, isCover bool, pars []interface{}) (items []*CygxIndustrialManagementNum, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
 				man.*, art.publish_date,
 				man_g.industrial_management_id AS man_gid,
@@ -815,7 +818,7 @@ type IndustrialManagement struct {
 
 // GetIndustrialManagementArticleNewPublishData 获取产业关联文章的最新发布时间
 func GetIndustrialManagementArticleNewPublishData() (items []*IndustrialManagement, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
 			man.industrial_management_id,
 			MAX( art.publish_date ) AS update_time 
@@ -839,7 +842,7 @@ func GetIndustrialManagementArticleNewPublishData() (items []*IndustrialManageme
 
 // 时间线的更新时间
 func GetTimeLineReportIndustrialPublishdateList(industrialIdArr []int) (items []*IndustrialManagement, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
 			mmc.industry_id AS industrial_management_id,
 			MAX( mm.meeting_time ) AS publish_date 
@@ -857,7 +860,7 @@ func GetTimeLineReportIndustrialPublishdateList(industrialIdArr []int) (items []
 
 // UpdateIndustrialManagementArticleNewPublishData 批量修改获取产业关联文章的最新发布时间
 func UpdateIndustrialManagementArticleNewPublishData(items map[int]string) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	p, err := o.Raw("UPDATE cygx_industrial_management SET new_art_publish_date = ? WHERE industrial_management_id = ?").Prepare()
 	if err != nil {
 		return
@@ -874,13 +877,14 @@ func UpdateIndustrialManagementArticleNewPublishData(items map[int]string) (err
 	return
 }
 
-// GetTopOneMonthArtReadNumIndustry 获取近一个月报告阅读数量最多的产业信息 根据行业分组
+// GetTopOneMonthArtReadNumIndustry 获取列表
 func GetTopOneMonthArtReadNumIndustryAll(condition string, pars []interface{}) (items []*IndustrialManagement, err error) {
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT * FROM cygx_industrial_management WHERE 1 = 1 `
 	if condition != `` {
 		sql += condition
 	}
 	sql += ` ORDER BY article_read_num DESC `
-	_, err = orm.NewOrm().Raw(sql, pars).QueryRows(&items)
+	_, err = o.Raw(sql, pars).QueryRows(&items)
 	return
 }

+ 23 - 25
models/cygx/industrial_subject.go

@@ -43,14 +43,14 @@ type GetIndustrialSubjectNumList struct {
 }
 
 func GetcygxIndustrialSubject(industrialManagementId int) (items []*CygxIndustrialSubject, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT subject_name FROM cygx_industrial_subject  WHERE industrial_management_id = ?`
 	_, err = o.Raw(sql, industrialManagementId).QueryRows(&items)
 	return
 }
 
 func UpdateIndustrialManagementSubjectNames(industrialManagementId int, industryName string) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	var nameSub string
 	listSub, err := GetcygxIndustrialSubject(industrialManagementId)
 	if err != nil {
@@ -67,7 +67,7 @@ func UpdateIndustrialManagementSubjectNames(industrialManagementId int, industry
 
 // 新增
 func AddIndustrialSubject(item *CygxIndustrialSubject) (newId int64, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	newId, err = o.Insert(item)
 	if err != nil {
 		return
@@ -77,7 +77,7 @@ func AddIndustrialSubject(item *CygxIndustrialSubject) (newId int64, err error)
 
 // 批量新增
 func AddIndustrialSubjectList(items []*CygxIndustrialSubject) (newIdStr string, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	to, err := o.Begin()
 	if err != nil {
 		return
@@ -102,7 +102,7 @@ func AddIndustrialSubjectList(items []*CygxIndustrialSubject) (newIdStr string,
 
 // 列表
 func GetIndustrialSubjectAll(IndustrialManagementId int) (items []*CygxIndustrialSubjectNum, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT *,
 		( SELECT COUNT( 1 ) FROM cygx_industrial_article_group_subject AS sub_g WHERE sub_g.industrial_subject_id = sub.industrial_subject_id ) AS art_num
 		FROM
@@ -119,14 +119,14 @@ func GetIndustrialSubjectCount(condition string, pars []interface{}) (count int,
 	if condition != "" {
 		sqlCount += condition
 	}
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	err = o.Raw(sqlCount, pars).QueryRow(&count)
 	return
 }
 
 // 修改
 func EditIndustrialSubject(item *CygxIndustrialSubject) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `UPDATE cygx_industrial_subject SET  subject_name=? WHERE industrial_subject_id=? `
 	_, err = o.Raw(sql, item.SubjectName, item.IndustrialSubjectId).Exec()
 	return
@@ -134,7 +134,7 @@ func EditIndustrialSubject(item *CygxIndustrialSubject) (err error) {
 
 // 删除数据
 func DeleteIndustrialSubject(industrialSubjectId int) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := ` DELETE FROM cygx_industrial_subject WHERE industrial_Subject_id = ?`
 	_, err = o.Raw(sql, industrialSubjectId).Exec()
 	return
@@ -154,7 +154,7 @@ func GetArtGroupIndustrialSubject(reportId int) (item []*ArtGroupIndustrialSubje
 		INNER JOIN cygx_industrial_subject AS sub ON sub.industrial_subject_id = sub_g.industrial_subject_id
 		WHERE
 		sub_g.cygx_article_id = ?`
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	_, err = o.Raw(sql, reportId).QueryRows(&item)
 	return
 }
@@ -162,14 +162,14 @@ func GetArtGroupIndustrialSubject(reportId int) (item []*ArtGroupIndustrialSubje
 // 获取标的关联的文章数量
 func GetIndustrialSubjectGroupArtCount(industrialSubjectId int) (count int, err error) {
 	sqlCount := ` SELECT COUNT(1) AS count  FROM cygx_industrial_article_group_subject WHERE industrial_subject_id=? `
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	err = o.Raw(sqlCount, industrialSubjectId).QueryRow(&count)
 	return
 }
 
 // 列表
 func GetIndustrialSubjectAllByIds(condition string) (items []*CygxIndustrialSubjectNum, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT *,
 		( SELECT COUNT( 1 ) FROM cygx_industrial_article_group_subject AS sub_g WHERE sub_g.industrial_subject_id = sub.industrial_subject_id ) AS art_num
 		FROM
@@ -180,14 +180,14 @@ func GetIndustrialSubjectAllByIds(condition string) (items []*CygxIndustrialSubj
 }
 
 func GetIndustrialSubjectDetailById(IndustrialSubjectId int) (item *CygxIndustrialSubject, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT * FROM cygx_industrial_subject WHERE industrial_subject_id = ? `
 	err = o.Raw(sql, IndustrialSubjectId).QueryRow(&item)
 	return
 }
 
 func GetIndustrialSubjectDetailByName(IndustrialSubjectName string) (item *CygxIndustrialSubject, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT * FROM cygx_industrial_subject WHERE subject_name = ? `
 	err = o.Raw(sql, IndustrialSubjectName).QueryRow(&item)
 	return
@@ -195,13 +195,12 @@ func GetIndustrialSubjectDetailByName(IndustrialSubjectName string) (item *CygxI
 
 // 列表
 func GetIndustrialSubjectListName(condition string) (items []*ArtGroupIndustrialSubjectRep, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT s.*
 			FROM
 			cygx_industrial_subject AS s
 			INNER JOIN cygx_industrial_management AS m ON m.industrial_management_id =s.industrial_management_id
-			INNER JOIN chart_permission AS c ON c.chart_permission_id = m.chart_permission_id
-			WHERE c.permission_name = '研选' `
+			WHERE m.chart_permission_id = 31 `
 	if condition != "" {
 		sql += condition
 	}
@@ -235,12 +234,11 @@ type SubjectNameRep struct {
 
 // 列表
 func GetIndustrialSubjectListNameByChartId(condition string) (items []*CygxIndustrialSubjectListRep, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT 	s.*,m.industry_name
 			FROM
 			cygx_industrial_subject AS s
 			INNER JOIN cygx_industrial_management AS m ON m.industrial_management_id =s.industrial_management_id
-			INNER JOIN chart_permission AS c ON c.chart_permission_id = m.chart_permission_id
 			WHERE 1= 1 `
 	if condition != "" {
 		sql += condition
@@ -258,14 +256,14 @@ func GetindustrialSubjectNames(subjectIds string) (names string, err error) {
 			cygx_industrial_subject AS s
 			WHERE
 			industrial_subject_id IN ( ` + subjectIds + `) `
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	err = o.Raw(sql).QueryRow(&names)
 	return
 }
 
 // 列表
 func GetIndustrialSubjectListNameByName(condition string) (items []*CygxIndustrialSubject, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT * FROM cygx_industrial_subject WHERE 1= 1`
 	if condition != "" {
 		sql += condition
@@ -282,7 +280,7 @@ func GetIndustrialSubjectIdsByName(subjectName string) (industrialSubjectIds str
 			cygx_industrial_subject AS s
 			WHERE
 			subject_name =? `
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	err = o.Raw(sql, subjectName).QueryRow(&industrialSubjectIds)
 	return
 }
@@ -295,7 +293,7 @@ func GetIndustrialSubjectIdsByNameLike(subjectName string) (industrialSubjectIds
 			cygx_industrial_subject AS s
 			WHERE
 			subject_name  LIKE '%` + subjectName + `%'`
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	err = o.Raw(sql).QueryRow(&industrialSubjectIds)
 	return
 }
@@ -312,7 +310,7 @@ type IndustrySubjectArtTypeCountList struct {
 
 // GetIndustrySubjectArtTypeCountList 获取标的关联的报告数量列表-根据类型
 func GetIndustrySubjectArtTypeCountList(subjectId int) (list []*IndustrySubjectArtTypeCountList, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
 				re.match_type_name,
 				COUNT(*) AS art_num
@@ -341,7 +339,7 @@ func GetIndustrySubjectArtTypeCountList(subjectId int) (list []*IndustrySubjectA
 
 // 列表
 func GetIndustrySubjectListByIds(IndustrialSubjectIds string) (items []*CygxIndustrialSubject, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT * FROM cygx_industrial_subject WHERE industrial_subject_id IN (` + IndustrialSubjectIds + `) `
 	_, err = o.Raw(sql).QueryRows(&items)
 	return
@@ -349,7 +347,7 @@ func GetIndustrySubjectListByIds(IndustrialSubjectIds string) (items []*CygxIndu
 
 // 获取标的列表
 func GetCygxIndustrialSubjectListCondition(condition string, pars []interface{}) (items []*CygxIndustrialSubject, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT * 
 		FROM
 			cygx_industrial_subject WHERE 1 = 1 ` + condition

+ 26 - 10
models/cygx/industry_fllow.go

@@ -21,9 +21,25 @@ type CygxIndustryFllow struct {
 	Source                 int       `description:"来源1查研观向,2查研观向小助手,3勾选全部赛道的用户进行自动关注"`
 }
 
-//关注产业列表
+// 列表
+func GetCygxIndustryFllowList(condition string, pars []interface{}, startSize, pageSize int) (items []*CygxIndustryFllow, err error) {
+	o := orm.NewOrmUsingDB("hz_cygx")
+	sql := `SELECT * FROM cygx_industry_fllow 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 GetCygxIndustryFllowByUser(uid, startSize, pageSize int) (items []*UserInteraction, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
 			m.industry_name,
 			f.modify_time as create_time,
@@ -40,25 +56,25 @@ func GetCygxIndustryFllowByUser(uid, startSize, pageSize int) (items []*UserInte
 	return
 }
 
-//关注产业数量
+// 关注产业数量
 func GetCygxIndustryFllowCount(uid int) (count int, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sqlCount := ` SELECT COUNT(1) AS count  FROM cygx_industry_fllow  WHERE   user_id = ?  AND type = 1  `
 	err = o.Raw(sqlCount, uid).QueryRow(&count)
 	return
 }
 
-//判断用户是否关注这些产业ID
+// 判断用户是否关注这些产业ID
 func GetCygxIndustryFllowCountByUser(uid int, industrialManagementd string) (count int, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sqlCount := ` SELECT COUNT(1) AS count  FROM cygx_industry_fllow  WHERE   user_id = ?  AND type = 1 AND  industrial_management_id IN (` + industrialManagementd + `)`
 	err = o.Raw(sqlCount, uid).QueryRow(&count)
 	return
 }
 
-//GetUserFllowIndustrialListByUserIdAndIndustrial 通过用户ID 跟产业ID获取用户关注的产业列表
+// GetUserFllowIndustrialListByUserIdAndIndustrial 通过用户ID 跟产业ID获取用户关注的产业列表
 func GetUserFllowIndustrialListByUserIdAndIndustrial(userIds, industrials string) (items []*CygxIndustryFllow, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT * FROM cygx_industry_fllow 
 			WHERE 1 = 1 
 		AND user_id IN ( ` + userIds + ` ) 
@@ -67,9 +83,9 @@ func GetUserFllowIndustrialListByUserIdAndIndustrial(userIds, industrials string
 	return
 }
 
-//批量添加
+// 批量添加
 func AddCygxIndustryFllowMulti(items []*CygxIndustryFllow) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	if len(items) > 0 {
 		//批量添加新的关注记录
 		_, err = o.InsertMulti(len(items), items)

+ 11 - 11
models/cygx/industry_map.go

@@ -23,14 +23,14 @@ type CygxIndustryMapItems struct {
 }
 
 func GetCygxIndustryMapByParentId(parentId int) (items []*CygxIndustryMapItems, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := ` SELECT * FROM cygx_industry_map WHERE parent_id=?`
 	_, err = o.Raw(sql, parentId).QueryRows(&items)
 	return
 }
 
 func GetCygxIndustryMapAll() (items []*CygxIndustryMapItems, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := ` SELECT * FROM cygx_industry_map WHERE parent_id<>0`
 	_, err = o.Raw(sql).QueryRows(&items)
 	return
@@ -40,7 +40,7 @@ type CygxIndustryMapResp struct {
 	Node *CygxIndustryMapItems
 }
 
-//新增图谱
+// 新增图谱
 type IndustryMapAddReq struct {
 	IndustryMapId   int    `orm:"column(industry_map_id);" description:"行业图谱id"`
 	IndustryMapName string `description:"图谱名称"`
@@ -48,39 +48,39 @@ type IndustryMapAddReq struct {
 }
 
 func GetCygxIndustryMapByName(name string) (count int, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := ` SELECT COUNT(1) AS count FROM cygx_industry_map WHERE industry_map_name=?`
 	err = o.Raw(sql, name).QueryRow(&count)
 	return
 }
 
 func AddCygxIndustryMap(item *CygxIndustryMap) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	_, err = o.Insert(item)
 	return
 }
 
-//编辑图谱
+// 编辑图谱
 type IndustryMapEditReq struct {
 	IndustryMapId   int    `orm:"column(industry_map_id);" description:"行业图谱id"`
 	IndustryMapName string `description:"图谱名称"`
 }
 
 func GetCygxIndustryMapById(industryMapId int) (items *CygxIndustryMapItems, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := ` SELECT * FROM cygx_industry_map WHERE industry_map_id=?`
 	err = o.Raw(sql, industryMapId).QueryRow(&items)
 	return
 }
 
 func EditCygxIndustryMap(item *IndustryMapEditReq) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `UPDATE cygx_industry_map SET industry_map_name=?,modify_time = NOW()  WHERE industry_map_id=? `
 	_, err = o.Raw(sql, item.IndustryMapName, item.IndustryMapId).Exec()
 	return
 }
 
-//编辑图谱
+// 编辑图谱
 type IndustryMapDeleteReq struct {
 	IndustryMapId int `orm:"column(industry_map_id);" description:"行业图谱id"`
 }
@@ -92,9 +92,9 @@ func DeleteCygxIndustryMap(industryMapId int) (err error) {
 	return
 }
 
-//列表
+// 列表
 func GetIndustrialMapListName(condition string) (items []*IndustryMapAddReq, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT * FROM cygx_industry_map  WHERE 1= 1 `
 	if condition != "" {
 		sql += condition

+ 2 - 2
models/cygx/interface_log.go

@@ -14,9 +14,9 @@ type CygxInterfaceLog struct {
 	CreateTime time.Time `description:"创建时间"`
 }
 
-//新增
+// 新增
 func AddCygxInterfaceLog(item *CygxInterfaceLog) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	_, err = o.Insert(item)
 	return
 }

+ 8 - 12
models/cygx/interview_apply.go

@@ -29,13 +29,11 @@ type InterviewApplyListResp struct {
 }
 
 func GetInterviewApplyList(condition string, pars []interface{}, startSize, pageSize int) (items []*CygxInterviewApply, err error) {
-	o := orm.NewOrm()
-	sql := ` SELECT a.*,b.real_name AS user_real_name,b.mobile,b.email,c.company_name,c.seller_id,c.seller_name AS sales_real_name,c.industry_name,d.category_name
+	o := orm.NewOrmUsingDB("hz_cygx")
+	sql := ` SELECT a.*,d.category_name
 			FROM cygx_interview_apply AS a
-			LEFT JOIN wx_user AS b ON a.user_id=b.user_id
-			LEFT JOIN company_product AS c ON b.company_id=c.company_id
             LEFT JOIN cygx_article AS d on a.article_id=d.article_id
-			WHERE 1=1 AND c.product_id=2 `
+			WHERE 1=1  `
 	if condition != "" {
 		sql += condition
 	}
@@ -45,11 +43,9 @@ func GetInterviewApplyList(condition string, pars []interface{}, startSize, page
 }
 
 func GetInterviewApplyListCount(condition string, pars []interface{}) (count int, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT COUNT(1) AS count FROM cygx_interview_apply AS a
-			INNER JOIN wx_user AS b ON a.user_id=b.user_id
-			INNER JOIN company_product AS c ON b.company_id=c.company_id
-            WHERE 1=1  AND c.product_id = 2  `
+            WHERE 1=1    `
 	if condition != "" {
 		sql += condition
 	}
@@ -58,13 +54,13 @@ func GetInterviewApplyListCount(condition string, pars []interface{}) (count int
 }
 
 func GetCygxInterviewApplyDetail(interviewApplyId int) (item *CygxInterviewApply, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := ` SELECT * FROM cygx_interview_apply WHERE interview_apply_id=? `
 	err = o.Raw(sql, interviewApplyId).QueryRow(&item)
 	return
 }
 
-//申请领取参数
+// 申请领取参数
 type InterviewApplyStatusReq struct {
 	InterviewApplyId int    `description:"访谈申请id"`
 	InterviewTime    string `description:"访谈时间"`
@@ -72,7 +68,7 @@ type InterviewApplyStatusReq struct {
 }
 
 func InterviewApplyStatusModify(interviewApplyId int, status, interviewTime string) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := ``
 	if interviewTime != "" {
 		sql = `UPDATE cygx_interview_apply SET status=?,modify_time=NOW() ,interview_time=? WHERE interview_apply_id=? `

+ 28 - 30
models/cygx/micro_roadshow.go

@@ -53,7 +53,7 @@ type MicroRoadshowVideoListResp struct {
 }
 
 func GetMicroRoadshowVideoList(condition, sortStr string, pars []interface{}, startSize, pageSize int) (items []*CygxMicroRoadshowVideo, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := ` SELECT *,(SELECT COUNT(1) FROM cygx_article_comment AS h    WHERE h.industry_id=v.industry_id AND  h.activity_id = 0 ) AS comment_num FROM cygx_micro_roadshow_video as v  WHERE 1=1 `
 	if condition != "" {
 		sql += condition
@@ -69,7 +69,7 @@ func GetMicroRoadshowVideoList(condition, sortStr string, pars []interface{}, st
 }
 
 func GetMicroRoadshowVideoListCount(condition string, pars []interface{}) (count int, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT COUNT(1) AS count FROM cygx_micro_roadshow_video WHERE 1=1 `
 	if condition != "" {
 		sql += condition
@@ -78,7 +78,7 @@ func GetMicroRoadshowVideoListCount(condition string, pars []interface{}) (count
 	return
 }
 
-//视频保存请求参数
+// 视频保存请求参数
 type VideoAddReq struct {
 	VideoId           int    `description:"视频Id"`
 	VideoName         string `description:"视频标题"`
@@ -94,20 +94,20 @@ type VideoAddReq struct {
 }
 
 func GetMicroRoadshowVideoByTitle(title string) (count int, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := ` SELECT COUNT(1) AS count FROM cygx_micro_roadshow_video WHERE video_name =? `
 	err = o.Raw(sql, title).QueryRow(&count)
 	return
 }
 
-//新增视频
+// 新增视频
 func AddMicroRoadshowVideo(item *CygxMicroRoadshowVideo) (newId int64, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	newId, err = o.Insert(item)
 	return
 }
 
-//视频编辑请求参数
+// 视频编辑请求参数
 type VideoEditReq struct {
 	VideoId             int    `description:"视频id"`
 	VideoName           string `description:"视频标题"`
@@ -120,9 +120,9 @@ type VideoEditReq struct {
 	PublishDate         string `description:"发布时间"`
 }
 
-//新增视频
+// 新增视频
 func EditVideo(item *CygxMicroRoadshowVideo) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := " UPDATE cygx_micro_roadshow_video SET " +
 		" video_url = ?, video_name = ?,chart_permission_id=?, chart_permission_name=?, industry_id =?, industry_name =?, " +
 		" modify_date=?, publish_date=?, video_duration=?, img_url=?, share_img_url=?, detail_img_url=?, publish_status=? WHERE video_id = ? "
@@ -132,7 +132,7 @@ func EditVideo(item *CygxMicroRoadshowVideo) (err error) {
 }
 
 func PublishVideoCancel(videoId, publishOrCancle int) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `UPDATE cygx_micro_roadshow_video SET publish_status=?,modify_date=NOW() WHERE video_id =?`
 	_, err = o.Raw(sql, publishOrCancle, videoId).Exec()
 	return
@@ -154,7 +154,7 @@ type CygxMicroRoadshowVideoHistory struct {
 }
 
 func GetMicroRoadshowVideoHistoryByIdPage(condition string, pars []interface{}, startSize, pageSize int) (item []*CygxMicroRoadshowVideoHistory, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := ` SELECT * FROM cygx_micro_roadshow_video_history WHERE 1=1 `
 	if condition != "" {
 		sql += condition
@@ -165,7 +165,7 @@ func GetMicroRoadshowVideoHistoryByIdPage(condition string, pars []interface{},
 }
 
 func GetMicroRoadshowVideoHistoryById(condition string, pars []interface{}) (item []*CygxMicroRoadshowVideoHistory, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := ` SELECT * FROM cygx_micro_roadshow_video_history WHERE 1=1 `
 	if condition != "" {
 		sql += condition
@@ -241,7 +241,7 @@ type MicroRoadshowVoiceListResp struct {
 }
 
 func GetMicroRoadshowVoiceList(condition, sortStr string, pars []interface{}, startSize, pageSize int) (items []*CygxMicroRoadshowVoice, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := ` SELECT
 	v.*,
 	a.label,
@@ -270,7 +270,7 @@ WHERE
 }
 
 func GetMicroRoadshowVoiceListCount(condition string, pars []interface{}) (count int, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
 	COUNT(1) AS count
 FROM
@@ -292,17 +292,15 @@ type PermissionNameAndIndustryName struct {
 }
 
 func GetPermissionNameAndIndustryNameByIndustryId(industryId int) (item *PermissionNameAndIndustryName, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
-	cm.industry_name as industry_name,
-	cm.chart_permission_id AS permission_id, 
-	cp.chart_permission_name AS permission_name
-FROM
-	chart_permission AS cp
-	INNER JOIN cygx_industrial_management AS cm 
-WHERE
-	cp.chart_permission_id = cm.chart_permission_id 
-	AND cm.industrial_management_id = ? `
+			cm.industry_name as industry_name,
+			cm.chart_permission_id AS permission_id
+		FROM
+			 cygx_industrial_management AS cm 
+		WHERE
+		1=1 
+			AND cm.industrial_management_id = ? `
 
 	err = o.Raw(sql, industryId).QueryRow(&item)
 	return
@@ -330,7 +328,7 @@ type CygxMicroRoadshowVoiceHistory struct {
 }
 
 func GetMicroRoadshowVoiceHistoryById(condition string, pars []interface{}) (item []*CygxMicroRoadshowVoiceHistory, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := ` SELECT
 	h.* 
 FROM
@@ -363,29 +361,29 @@ WHERE
 }
 
 func GetMicroRoadshowVideoByIndustryId(industryId int) (item *CygxMicroRoadshowVideo, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT * from cygx_micro_roadshow_video where industry_id = ? `
 	err = o.Raw(sql, industryId).QueryRow(&item)
 	return
 }
 
 func GetMicroRoadshowVideoByVideoId(videoId int) (item *CygxMicroRoadshowVideo, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT * from cygx_micro_roadshow_video where video_id = ? `
 	err = o.Raw(sql, videoId).QueryRow(&item)
 	return
 }
 
-//修改是否推送过模板消息的状态
+// 修改是否推送过模板消息的状态
 func UpdateIsSendWxMsg(videoId, isSendWxMsg int) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `UPDATE cygx_micro_roadshow_video SET is_send_wx_msg=?  WHERE video_id =?`
 	_, err = o.Raw(sql, isSendWxMsg, videoId).Exec()
 	return
 }
 
 func GetMicroRoadshowVoiceById(activityId int) (item *CygxMicroRoadshowVoice, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT
 	v.*,
 	a.label,

+ 12 - 13
models/cygx/minutes_summary.go

@@ -130,7 +130,7 @@ func AddCygxMinutesSummaryOrm(itme *CygxMinutesSummary, items []*CygxMinutesSumm
 
 // 编辑
 func UpdateCygxMinutesSummaryOrm(item *CygxMinutesSummary, items []*CygxMinutesSummaryLog) (newId int64, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	to, err := o.Begin()
 	if err != nil {
 		return
@@ -171,14 +171,14 @@ func GetCygxMinutesSummary(condition string, pars []interface{}) (count int, err
 	if condition != "" {
 		sqlCount += condition
 	}
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	err = o.Raw(sqlCount, pars).QueryRow(&count)
 	return
 }
 
 // 通过纪要ID获取活动详情
 func GetCygxMinutesSummaryInfoById(articleId int) (item *CygxMinutesSummaryRep, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT * FROM cygx_minutes_summary  WHERE article_id=?`
 	err = o.Raw(sql, articleId).QueryRow(&item)
 	return
@@ -186,7 +186,7 @@ func GetCygxMinutesSummaryInfoById(articleId int) (item *CygxMinutesSummaryRep,
 
 // 删除数据
 func DeleteCygxMinutesSummary(articleId int) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	to, err := o.Begin()
 	if err != nil {
 		return
@@ -211,7 +211,7 @@ func DeleteCygxMinutesSummary(articleId int) (err error) {
 
 // 列表
 func GetMinutesSummaryList(condition string, pars []interface{}, startSize, pageSize int) (items []*CygxMinutesSummaryRep, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT *,
 				(SELECT COUNT(1) FROM cygx_report_history_record AS h WHERE h.article_id=rs.article_id AND report_type = 'szjyhz'  AND  h.company_id != 16 ) AS pv,
         		(SELECT COUNT(DISTINCT user_id) FROM cygx_report_history_record AS h WHERE h.article_id=rs.article_id  AND report_type = 'szjyhz' AND  h.company_id != 16 ) AS uv
@@ -226,7 +226,7 @@ func GetMinutesSummaryList(condition string, pars []interface{}, startSize, page
 
 // 修改发布状态
 func MinutesSummaryPublishAndCancel(item *CygxMinutesSummaryRep) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `UPDATE cygx_minutes_summary SET  publish_status=? , last_updated_time= ?, periods= ? , admin_id= ? , admin_name= ? ,have_publish = 1 WHERE article_id=? `
 	_, err = o.Raw(sql, item.PublishStatus, time.Now(), item.Periods, item.AdminId, item.AdminName, item.ArticleId).Exec()
 	return
@@ -234,7 +234,7 @@ func MinutesSummaryPublishAndCancel(item *CygxMinutesSummaryRep) (err error) {
 
 // 修改可见范围
 func MinutesSummaryVisibleRange(item *CygxMinutesSummaryRep) (err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `UPDATE cygx_minutes_summary SET  is_send_wx_msg = 1,  visible_range=? , last_updated_time= ?,admin_id =? ,admin_name =?  WHERE article_id=? `
 	_, err = o.Raw(sql, item.VisibleRange, time.Now(), item.AdminId, item.AdminName, item.ArticleId).Exec()
 	return
@@ -242,7 +242,7 @@ func MinutesSummaryVisibleRange(item *CygxMinutesSummaryRep) (err error) {
 
 // 列表
 func GetMinutesSummarylogListAll(articleId int) (items []*ResearchSummaryChartPermission, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	//sql := `SELECT c.permission_name ,c.image_url,l.*
 	//		FROM
 	//		cygx_minutes_summary_log AS l
@@ -262,11 +262,10 @@ func GetMinutesSummarylogListAll(articleId int) (items []*ResearchSummaryChartPe
 
 // 列表
 func GetMinutesSummarylogSonListSecond(articleId int, artType string) (items []*CygxResearchSummaryLogSecond, err error) {
-	o := orm.NewOrm()
-	sql := `SELECT c.permission_name ,c.chart_permission_id ,c.image_url, l.* 
+	o := orm.NewOrmUsingDB("hz_cygx")
+	sql := `SELECT  l.* 
 			FROM
 			cygx_minutes_summary_log AS l
-			LEFT JOIN chart_permission AS c ON c.chart_permission_id = l.chart_permission_id 
 			WHERE l.article_id = ? AND l.type =?
 			GROUP BY l.chart_permission_id
 			ORDER  BY l.chart_permission_sort ASC`
@@ -276,7 +275,7 @@ func GetMinutesSummarylogSonListSecond(articleId int, artType string) (items []*
 
 // 列表
 func GetMinutesSummarylogListThird(articleId, chartPermissionId int, artType string) (items []*CygxResearchSummaryLogThird, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT  l.link_article_id,l.body ,a.video_url
 			FROM cygx_minutes_summary_log AS l
 			LEFT JOIN cygx_article as a ON a.article_id = l.link_article_id
@@ -302,7 +301,7 @@ type CygxMinutesSummaryLogDetail struct {
 
 // 列表
 func GetMinutesSummarylogSonListAll(articleId, chartPermissionId int) (items []*CygxMinutesSummaryLogDetail, err error) {
-	o := orm.NewOrm()
+	o := orm.NewOrmUsingDB("hz_cygx")
 	sql := `SELECT   l.link_article_id,l.body ,a.video_url 
 			FROM
 			cygx_minutes_summary_log AS l

Some files were not shown because too many files changed in this diff