Browse Source

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

zhangchuanxing 4 months ago
parent
commit
31299670f7

+ 156 - 0
controllers/report.go

@@ -3929,3 +3929,159 @@ func (this *ReportController) ResearchSummaryVoiceHistoryAdd() {
 	br.Msg = "操作成功"
 	return
 }
+
+// @Title 周期行业报告分类列表接口
+// @Description 周期获取行业报告分类列表接口
+// @Success 200 {object} models.TradeReportMappingResp
+// @router /zhouqi_tradeList [get]
+func (this *ReportController) ZouqiTradeList() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	user := this.User
+	if user == nil {
+		br.Msg = "请重新登录"
+		br.Ret = 408
+		return
+	}
+	listCategory, err := models.GetCygxZhouqiArticleMapFirst()
+	if err != nil {
+		br.Msg = "获取信息失败"
+		br.ErrMsg = "获取品种信息失败,Err:" + err.Error()
+		return
+	}
+
+	resp := new(models.TradeReportMappingResp)
+	var list []*models.TradeReportMapping
+	if len(listCategory) == 0 {
+		list = make([]*models.TradeReportMapping, 0)
+	} else {
+		for _, v := range listCategory {
+			item := new(models.TradeReportMapping)
+			item.CategoryId = v.CategoryId
+			item.MatchTypeName = v.MatchTypeName
+			item.UpdateTime = v.ArticleUpdateTime
+			//item.ListArticle = make([]*models.HomeArticle, 0)
+			list = append(list, item)
+		}
+	}
+	resp.List = list
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+}
+
+// @Title 周期根据行业分类获取行业文章列表
+// @Description 周期根据行业分类获取行业文章列表接口
+// @Param   PageSize   query   int  true       "每页数据条数"
+// @Param   CurrentIndex   query   int  true       "当前页页码,从1开始"
+// @Param   CategoryId   query   int  true       "分类ID"
+// @Success 200 {object} models.TacticsListResp
+// @router /tactics/zhouqi_list [get]
+func (this *ReportController) ZhouqiTacticsList() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	user := this.User
+	if user == nil {
+		br.Msg = "请重新登录"
+		br.Ret = 408
+		return
+	}
+	//uid := user.UserId
+	pageSize, _ := this.GetInt("PageSize")
+	currentIndex, _ := this.GetInt("CurrentIndex")
+	categoryId, _ := this.GetInt("CategoryId")
+
+	var startSize int
+	if pageSize <= 0 {
+		pageSize = utils.PageSize20
+	}
+	if currentIndex <= 0 {
+		currentIndex = 1
+	}
+	startSize = paging.StartIndex(currentIndex, pageSize)
+
+	var total int
+	var err error
+	resp := new(models.TacticsListZhouqiResp)
+	page := paging.GetPaging(currentIndex, pageSize, total)
+	list := make([]*models.HomeArticle, 0)
+	listCategory, err := models.GetCygxZhouqiArticleMapByParentId(categoryId)
+	if err != nil {
+		br.Msg = "获取信息失败"
+		br.ErrMsg = "获取产业报告+晨会点评列表,Err:" + err.Error()
+		return
+	}
+	var matchTypeName = []string{}
+	for _, v := range listCategory {
+		matchTypeName = append(matchTypeName, v.MatchTypeName)
+	}
+
+	var condition string
+	//var pars []interface{}
+	condition = " AND field_name  IN  ('" + strings.Join(matchTypeName, "','") + "')"
+
+	list, total, err = models.GetReportAndproductIndustrylListimgZhouqi(condition, startSize, pageSize)
+	if err != nil {
+		br.Msg = "获取信息失败"
+		br.Msg = "GetReportAndproductIndustrylListimgZhouqi,Err:" + err.Error()
+		return
+	}
+
+	listPublic, err := services.HandleArticleCategoryImg(list)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取报告封面图片失败, Err:" + err.Error()
+		return
+	}
+
+	var articleIds []int
+	for _, v := range listPublic {
+		if v.Resource == 1 {
+			articleIds = append(articleIds, v.ArticleId)
+		}
+	}
+
+	articleMapPv := services.GetArticleHistoryByArticleId(articleIds)                       //文章Pv
+	articleCollectMap, _ := services.GetCygxArticleCollectMap(user.UserId)                  //用户收藏的文章
+	articleCollectNumMap, _ := services.GetCygxArticleCollectNumMapByArtcileIds(articleIds) //文章收藏的数量
+
+	listResp := make([]*models.HomeArticle, 0)
+	for _, v := range listPublic {
+		item := new(models.HomeArticle)
+		item.ArticleId = v.ArticleId
+		item.ReportId = v.ReportId
+		item.Title = v.Title
+		item.Annotation = v.Annotation
+		item.Abstract = v.Abstract
+		item.ImgUrlPc = v.ImgUrlPc
+		item.PublishDate = v.PublishDate
+		item.Resource = v.Resource
+		if v.Resource == 1 {
+			item.Pv = articleMapPv[v.ArticleId]
+			item.IsCollect = articleCollectMap[v.ArticleId]
+			item.CollectNum = articleCollectNumMap[v.ArticleId]
+		}
+
+		if v.ReportId > 0 {
+			item.Resource = 3
+		}
+		listResp = append(listResp, item)
+	}
+	if len(listResp) == 0 {
+		listResp = make([]*models.HomeArticle, 0)
+	}
+	page = paging.GetPaging(currentIndex, pageSize, total)
+	resp.List = listResp
+	resp.Paging = page
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+}

+ 9 - 0
models/activity.go

@@ -1392,3 +1392,12 @@ WHERE
 	_, err = o.Raw(sql, endDate).QueryRows(&items)
 	return
 }
+
+// UpdateCygxActivityyidongActivityId  ,建立与易董的活动关联
+func UpdateCygxActivityyidongActivityId(yidongActivityId, activityTime, yidongTitle string) (err error) {
+	yidongTitle = "%" + yidongTitle + "%"
+	o := orm.NewOrm()
+	sql := ` UPDATE cygx_activity SET yidong_activity_id_by_cygx = ?  WHERE yidong_activity_id= '' AND   yidong_activity_id_by_cygx = ''  AND jmcj_activity_id= ''  AND  active_state = 3  AND  activity_time =?  AND activity_name_task LIKE  ?    `
+	_, err = o.Raw(sql, yidongActivityId, activityTime, yidongTitle).Exec()
+	return
+}

+ 3 - 0
models/article.go

@@ -124,6 +124,9 @@ type HomeArticle struct {
 	BodyHighlight       []string             `description:"搜索高亮展示结果"`
 	ArticleTypeId       int                  `description:"文章类型ID"`
 	ReportId            int                  `description:"FICC研报ID"`
+	Resource            int                  `description:"来源类型,1:文章、2:产品内测"`
+	IsCollect           bool                 `description:"本人是否收藏"`
+	CollectNum          int                  `description:"收藏人数"`
 	List                []*IndustrialManagementIdInt
 }
 

+ 11 - 2
models/db.go

@@ -1,15 +1,15 @@
 package models
 
 import (
+	"github.com/beego/beego/v2/client/orm"
 	_ "github.com/go-sql-driver/mysql"
 	"hongze/hongze_cygx/models/ficc_report"
 	"hongze/hongze_cygx/models/order"
 	"hongze/hongze_cygx/models/rai_serve"
 	"hongze/hongze_cygx/models/time_line"
+	"hongze/hongze_cygx/models/yidong"
 	"hongze/hongze_cygx/utils"
 	"time"
-
-	"github.com/beego/beego/v2/client/orm"
 )
 
 func init() {
@@ -199,6 +199,7 @@ func init() {
 	initOrder()      // 订单模块
 	initRaiServe()   // 权益服务记录模块
 	initFiccReport() // 权益服务记录模块
+	initYidong()     // 易董初始化数据模块
 
 	// 记录ORM查询日志
 	orm.Debug = true
@@ -234,3 +235,11 @@ func initFiccReport() {
 		new(ficc_report.FiccYbXcxHistory), //ficc研报小程序点击记录
 	)
 }
+
+// initYidong
+func initYidong() {
+	orm.RegisterModel(
+		new(yidong.CygxYidongActivity),         //易董活动原始数据
+		new(yidong.CygxYidongActivityMeetData), //易董活动到会信息原始数据
+	)
+}

+ 24 - 0
models/report.go

@@ -1539,3 +1539,27 @@ GROUP BY a.article_id ORDER BY publish_date DESC
 	_, err = o.Raw(sql, createtime).QueryRows(&items)
 	return
 }
+
+// 获取行业报告列表
+func GetReportAndproductIndustrylListimgZhouqi(condition string, startSize, pageSize int) (items []*HomeArticle, total int, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT
+			art.article_id,
+			art.report_id,
+			art.body,
+			art.annotation,
+			art.abstract,
+			art.category_id,
+			art.title,
+			art.publish_date,
+			1 AS resource 
+		FROM
+			cygx_article AS art 
+		WHERE
+			art.publish_status = 1  ` + condition
+	totalSql := `SELECT COUNT(1) total FROM (` + sql + `) z `
+	err = o.Raw(totalSql).QueryRow(&total)
+	sql += `    ORDER BY publish_date DESC LIMIT ?,? `
+	_, err = o.Raw(sql, startSize, pageSize).QueryRows(&items)
+	return
+}

+ 9 - 0
models/tactics.go

@@ -124,6 +124,15 @@ type TacticsListResp struct {
 	List              []*ReportArticle
 }
 
+type TacticsListZhouqiResp struct {
+	Paging            *paging.PagingItem
+	MatchTypeName     string `description:"匹配类型"`
+	ChartPermissionId int    `description:"行业ID"`
+	CategoryImgUrlPc  string `description:"图片"`
+	IsShowAbstract    bool   `description:"是否展示摘要"`
+	List              []*HomeArticle
+}
+
 func GetReportTacticsList(condition string, pars []interface{}, userId, startSize, pageSize int) (items []*ReportArticle, err error) {
 	o := orm.NewOrm()
 	sql := ` SELECT * ,(SELECT COUNT(1) FROM cygx_article_history_record AS rec WHERE rec.user_id = ` + strconv.Itoa(userId) + ` AND  rec.article_id=a.article_id) AS readnum

+ 13 - 10
models/yidong.go

@@ -108,16 +108,18 @@ type Resultuser111 struct {
 }
 
 type Resultuser struct {
-	DeviceType        string `json:"deviceType"`        // 参会方式,1-PC,2-Mac,3-Android,4-IOS,5-Web,6-iPad,7-Android Pad,8-小程序,0-PSTN
-	Duration          string `json:"duration"`          // 云会议参会时长
-	DurationInteract  string `json:"durationInteract"`  // 互动交流参会时长
-	DurationLive      string `json:"durationLive"`      // 直播参会时长
-	DurationReview    string `json:"durationReview"`    // 回看参会时长
-	EndTime           string `json:"endTime"`           // 云会议最后退会时间
-	EndTimeInteract   string `json:"endTimeInteract"`   // 互动交流最后退会时间
-	EndTimeLive       string `json:"endTimeLive"`       // 直播最后退会时间
-	EndTimeReview     string `json:"endTimeReview"`     // 回看最后退会时间
-	ID                string `json:"id"`                // 主键id
+	DeviceType        string `json:"deviceType"`       // 参会方式,1-PC,2-Mac,3-Android,4-IOS,5-Web,6-iPad,7-Android Pad,8-小程序,0-PSTN
+	Duration          string `json:"duration"`         // 云会议参会时长
+	DurationInteract  string `json:"durationInteract"` // 互动交流参会时长
+	DurationLive      string `json:"durationLive"`     // 直播参会时长
+	DurationReview    string `json:"durationReview"`   // 回看参会时长
+	EndTime           string `json:"endTime"`          // 云会议最后退会时间
+	EndTimeInteract   string `json:"endTimeInteract"`  // 互动交流最后退会时间
+	EndTimeLive       string `json:"endTimeLive"`      // 直播最后退会时间
+	EndTimeReview     string `json:"endTimeReview"`    // 回看最后退会时间
+	ID                string `json:"id"`               // 主键id
+	Mail              string `json:"mail" comment:"电子邮件"`
+	CompanyName       string `json:"company_name" comment:"公司名称"`
 	JobName           string `json:"jobName"`           // 职务
 	MobileCountryCode string `json:"mobileCountryCode"` // 手机号国际区号码
 	PersonName        string `json:"personName"`        // 姓名
@@ -128,6 +130,7 @@ type Resultuser struct {
 	StartTimeReview   string `json:"startTimeReview"`   // 回看最早入会时间
 	Status            string `json:"status"`            // 状态,D表示被删除
 	UserID            string `json:"userId,omitempty"`  // 用户id
+	SignUpStatus      string `json:"sign_up_status" comment:"报名状态"`
 }
 
 type ApifoxModalUserTgc struct {

+ 89 - 0
models/yidong/yidong_activity.go

@@ -0,0 +1,89 @@
+package yidong
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"hongze/hongze_cygx/utils"
+	"time"
+)
+
+type CygxYidongActivity struct {
+	Id                             string    `json:"id" comment:"主键ID"`
+	YidongId                       string    `json:"yidong_id" comment:"活动唯一标识"`
+	CompanyInfo                    string    `json:"company_info" comment:"公司信息"`
+	Title                          string    `json:"title" comment:"活动标题"`
+	Type                           string    `json:"type" comment:"活动类型"`
+	IndustrySwName                 string    `json:"industry_sw_name" comment:"行业名称"`
+	Start                          string    `json:"start" comment:"开始时间"`
+	End                            string    `json:"end" comment:"结束时间"`
+	SignUpStart                    string    `json:"sign_up_start" comment:"报名开始时间"`
+	SignUpEnd                      string    `json:"sign_up_end" comment:"报名结束时间"`
+	ActivityJoinType               string    `json:"activity_join_type" comment:"参与类型"`
+	Banner                         string    `json:"banner" comment:"活动横幅链接"`
+	Url                            string    `json:"url" comment:"活动链接"`
+	SyncId                         string    `json:"sync_id" comment:"同步ID"`
+	SyncFlag                       string    `json:"sync_flag" comment:"同步标志"`
+	BusinessCardOpen               string    `json:"business_card_open" comment:"是否打开名片"`
+	BusinessCardRequired           string    `json:"business_card_required" comment:"是否要求名片"`
+	PersonNameOpen                 string    `json:"person_name_open" comment:"是否打开姓名"`
+	PersonNameRequired             string    `json:"person_name_required" comment:"是否要求姓名"`
+	PersonTelephoneOpen            string    `json:"person_telephone_open" comment:"是否打开电话"`
+	PersonTelephoneRequired        string    `json:"person_telephone_required" comment:"是否要求电话"`
+	MailOpen                       string    `json:"mail_open" comment:"是否打开邮件"`
+	MailRequired                   string    `json:"mail_required" comment:"是否要求邮件"`
+	CompanyShortNameOpen           string    `json:"company_short_name_open" comment:"是否打开公司简称"`
+	CompanyShortNameRequired       string    `json:"company_short_name_required" comment:"是否要求公司简称"`
+	CompanyCodeOpen                string    `json:"company_code_open" comment:"是否打开公司代码"`
+	CompanyCodeRequired            string    `json:"company_code_required" comment:"是否要求公司代码"`
+	JobNameOpen                    string    `json:"job_name_open" comment:"是否打开职位名称"`
+	JobNameRequired                string    `json:"job_name_required" comment:"是否要求职位名称"`
+	CertificateInformationOpen     string    `json:"certificate_information_open" comment:"是否打开证书信息"`
+	CertificateInformationRequired string    `json:"certificate_information_required" comment:"是否要求证书信息"`
+	InviteeOpen                    *string   `json:"invitee_open" comment:"是否打开受邀人"`
+	InviteeRequired                *string   `json:"invitee_required" comment:"是否要求受邀人"`
+	CreateUserId                   string    `json:"create_user_id" comment:"创建用户ID"`
+	CreatePersonName               string    `json:"create_person_name" comment:"创建人姓名"`
+	PublishFlag                    string    `json:"publish_flag" comment:"发布标志"`
+	CompanyCode                    string    `json:"company_code" comment:"公司代码"`
+	BackFlag                       string    `json:"back_flag" comment:"回退标志"`
+	ActivityForm                   string    `json:"activity_form" comment:"活动形式"`
+	ActivityAddress                string    `json:"activity_address" comment:"活动地址"`
+	MeetingStatus                  string    `json:"meeting_status" comment:"会议状态"`
+	CloudMeetingStatus             string    `json:"cloud_meeting_status" comment:"云会议状态"`
+	InteractQaStatus               string    `json:"interact_qa_status" comment:"互动问答状态"`
+	LiveStatus                     string    `json:"live_status" comment:"直播状态"`
+	CreateTime                     time.Time `comment:"创建时间"`
+}
+
+// AddCygxYidongActivityMulti 批量添加
+func AddCygxYidongActivityMulti(items []*CygxYidongActivity) (err error) {
+	if len(items) == 0 {
+		return
+	}
+	o, err := orm.NewOrm().Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		if err == nil {
+			o.Commit()
+		} else {
+			o.Rollback()
+		}
+	}()
+	if len(items) > 0 {
+		_, err = o.InsertMulti(len(items), items)
+	}
+	return
+}
+
+// 列表
+func GetCygxYidongActivityListByYidongIds(yidongIds []string) (items []*CygxYidongActivity, err error) {
+	lenarr := len(yidongIds)
+	if lenarr == 0 {
+		return
+	}
+	o := orm.NewOrm()
+	sql := `SELECT yidong_id  FROM cygx_yidong_activity   WHERE yidong_id   IN  (` + utils.GetOrmInReplace(lenarr) + `) `
+	_, err = o.Raw(sql, yidongIds).QueryRows(&items)
+	return
+}

+ 71 - 0
models/yidong/yidong_activity_meet_data.go

@@ -0,0 +1,71 @@
+package yidong
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"hongze/hongze_cygx/utils"
+	"time"
+)
+
+type CygxYidongActivityMeetData struct {
+	Id                string    `json:"id" comment:"主键id"`
+	YidongMeetDataId  string    `json:"yidong_meet_data_id" comment:"易董到会信息ID"`
+	YidongId          string    `json:"yidong_id" comment:"活动唯一标识"`
+	Title             string    `json:"title"` // 活动主题
+	UserId            string    `json:"user_id" comment:"用户唯一标识"`
+	PersonTelephone   string    `json:"person_telephone" comment:"电话号码"`
+	Duration          string    `json:"duration" comment:"活动时长"`
+	StartTime         string    `json:"start_time" comment:"活动开始时间"`
+	EndTime           string    `json:"end_time" comment:"活动结束时间"`
+	DeviceType        string    `json:"device_type" comment:"设备类型"`
+	Status            string    `json:"status" comment:"状态"`
+	PersonName        string    `json:"person_name" comment:"用户姓名"`
+	JobName           string    `json:"job_name" comment:"职位名称"`
+	Mail              string    `json:"mail" comment:"电子邮件"`
+	CompanyName       string    `json:"company_name" comment:"公司名称"`
+	MobileCountryCode string    `json:"mobile_country_code" comment:"手机国家代码"`
+	SignUpStatus      string    `json:"sign_up_status" comment:"报名状态"`
+	DurationLive      string    `json:"duration_live" comment:"直播时长"`
+	StartTimeLive     string    `json:"start_time_live" comment:"直播开始时间"`
+	EndTimeLive       string    `json:"end_time_live" comment:"直播结束时间"`
+	DurationReview    string    `json:"duration_review" comment:"回放时长"`
+	StartTimeReview   string    `json:"start_time_review" comment:"回放开始时间"`
+	EndTimeReview     string    `json:"end_time_review" comment:"回放结束时间"`
+	DurationInteract  string    `json:"duration_interact" comment:"互动时长"`
+	StartTimeInteract string    `json:"start_time_interact" comment:"互动开始时间"`
+	EndTimeInteract   string    `json:"end_time_interact" comment:"互动结束时间"`
+	CreateTime        time.Time `comment:"创建时间"`
+}
+
+// AddCygxYidongActivityMeetDataMulti 批量添加
+func AddCygxYidongActivityMeetDataMulti(items []*CygxYidongActivityMeetData) (err error) {
+	if len(items) == 0 {
+		return
+	}
+	o, err := orm.NewOrm().Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		if err == nil {
+			o.Commit()
+		} else {
+			o.Rollback()
+		}
+	}()
+	if len(items) > 0 {
+		_, err = o.InsertMulti(1000, items)
+	}
+	return
+}
+
+// 列表
+func GetCygxYidongActivityMeetDataListByYidongIds(yidongIds []string) (items []*CygxYidongActivityMeetData, err error) {
+	lenarr := len(yidongIds)
+	if lenarr == 0 {
+		return
+	}
+	o := orm.NewOrm()
+	sql := `SELECT yidong_id,person_telephone  FROM cygx_yidong_activity_meet_data   WHERE yidong_id   IN  (` + utils.GetOrmInReplace(lenarr) + `) `
+	_, err = o.Raw(sql, yidongIds).QueryRows(&items)
+	return
+}

+ 64 - 0
models/zhouqi_article_map.go

@@ -0,0 +1,64 @@
+package models
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+)
+
+type CygxZhouqiArticleMap struct {
+	CategoryId        int    `description:"产业Id"`
+	ParentId          int    `description:"父级ID"`
+	MatchTypeName     string `description:"行业名称"`
+	ArticleUpdateTime string `description:"对应文章的更新时间"`
+}
+
+// 获取周期下面的一级分类
+func GetCygxZhouqiArticleMapFirst() (items []*CygxZhouqiArticleMap, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT
+			category_id,
+			parent_id,
+			match_type_name,
+			article_update_time 
+		FROM
+			cygx_zhouqi_article_map 
+		WHERE
+			hidden = 0 
+			AND parent_id = 0 
+		ORDER BY
+			sort DESC `
+	_, err = o.Raw(sql).QueryRows(&items)
+	return
+}
+
+// 根据父级分类ID获取下面的子分类
+func GetCygxZhouqiArticleMapByParentId(parentId int) (items []*CygxZhouqiArticleMap, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT
+			category_id,
+			match_type_name,
+			article_update_time 
+		FROM
+			cygx_zhouqi_article_map 
+		WHERE
+			parent_id = ?  `
+	_, err = o.Raw(sql, parentId).QueryRows(&items)
+	return
+}
+
+// 根据名称获取详情
+func GetCygxZhouqiArticleMapByMatchTypeName(matchTypeName string) (item *CygxZhouqiArticleMap, err error) {
+	o := orm.NewOrm()
+	sql := ``
+	sql = `SELECT a.* FROM cygx_zhouqi_article_map AS a WHERE a.match_type_name=? AND  parent_id > 0  `
+	err = o.Raw(sql, matchTypeName).QueryRow(&item)
+	return
+}
+
+// 更新对应分类所关联的最新文章的时间
+func UpdateCygxZhouqiArticleMapTime(articleUpdateTime string, categoryId int) (err error) {
+	o := orm.NewOrm()
+	sql := ``
+	sql = `UPDATE cygx_zhouqi_article_map SET hidden=0,article_update_time=? WHERE category_id = ? `
+	_, err = o.Raw(sql, articleUpdateTime, categoryId).Exec()
+	return
+}

+ 18 - 0
routers/commentsRouter.go

@@ -1222,6 +1222,15 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:ReportController"] = append(beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:ReportController"],
+        beego.ControllerComments{
+            Method: "ZhouqiTacticsList",
+            Router: `/tactics/zhouqi_list`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:ReportController"] = append(beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:ReportController"],
         beego.ControllerComments{
             Method: "ArticleCategoryList",
@@ -1249,6 +1258,15 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:ReportController"] = append(beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:ReportController"],
+        beego.ControllerComments{
+            Method: "ZouqiTradeList",
+            Router: `/zhouqi_tradeList`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:ReportSelectionController"] = append(beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:ReportSelectionController"],
         beego.ControllerComments{
             Method: "AddStopTime",

+ 4 - 0
services/article.go

@@ -1299,6 +1299,9 @@ func HandleArticleListByApi(artcleId int) (err error) {
 			go DoArticleOnenIdWxTemplateMsg(v.ArticleId)
 		}
 
+		if v.CategoryName == utils.ZHOU_QI_NAME {
+			UpdateCygxZhouqiArticleMapTime(v.FieldName) //更新周期对应分类下所管理文章的更新时间
+		}
 		//【公司调研】系列纪要发布/更新后 end
 
 		//查研观向6.9模板消息推送规则
@@ -1340,6 +1343,7 @@ func HandleArticleListByApi(artcleId int) (err error) {
 	}
 
 	AddCygxReportMappingCategoryGroupByArticleId(artcleId)
+
 	return err
 }
 

+ 55 - 0
services/ficc_report.go

@@ -500,8 +500,10 @@ func GetFiccRreportToCygxArticle(cont context.Context) (err error) {
 			if v.ClassifyNameFirst == "晨会纪要" && v.ClassifyNameSecond == "晨会纪要" {
 				item.Title = "FICC/周期品晨会纪要"
 			}
+			item.CategoryName = "周期"
 			item.Body = v.Content
 			item.Abstract = v.Abstract
+			item.FieldName = v.ClassifyNameSecond
 			item.CreateDate = time.Now().Format(utils.FormatDate)
 			item.PublishStatus = 1
 			item.IsReport = 1
@@ -553,6 +555,7 @@ func GetFiccRreportToCygxArticle(cont context.Context) (err error) {
 				updateParams["PublishStatus"] = item.PublishStatus
 				updateParams["SubCategoryName"] = item.SubCategoryName
 				updateParams["MatchTypeName"] = item.MatchTypeName
+				updateParams["FieldName"] = item.FieldName
 				updateParams["CategoryId"] = item.CategoryId
 				updateParams["CategoryIdTwo"] = item.CategoryIdTwo
 				whereParam := map[string]interface{}{"article_id": item.ArticleId}
@@ -565,6 +568,7 @@ func GetFiccRreportToCygxArticle(cont context.Context) (err error) {
 			UpdateFICCReportResourceData(v.Id, listFiccSet)
 
 			AddCygxReportMappingCategoryGroupByArticleId(articleIdMax)
+			UpdateCygxZhouqiArticleMapTime(item.FieldName) //更新周期对应分类下所管理文章的更新时间
 		}
 	}
 
@@ -684,3 +688,54 @@ func GetFiccReportXcxItem(user *models.WxUserItem) (itemSourceResp *models.CygxR
 	itemSourceResp = itemSource
 	return
 }
+
+//func init() {
+//	strslice := []string{"晨会纪要", "煤炭", "铜行业数据点评", "石油石化", "黑色调研", "宏观G2观察", "黄金月报"}
+//	for _, v := range strslice {
+//		fmt.Println(v)
+//		UpdateCygxZhouqiArticleMapTime(v)
+//	}
+//}
+
+// UpdateCygxZhouqiArticleMapTime 更新周期对应分类下所管理文章的更新时间
+func UpdateCygxZhouqiArticleMapTime(fieldName string) {
+	var err error
+	defer func() {
+		if err != nil {
+			fmt.Println("err:", err)
+			go utils.SendAlarmMsg(fmt.Sprint("更新周期对应分类下所管理文章的更新时间 失败,UpdateCygxZhouqiArticleMapTime Err:"+err.Error()+"fieldName", fieldName), 3)
+		}
+	}()
+
+	detail, e := models.GetCygxZhouqiArticleMapByMatchTypeName(fieldName)
+	if e != nil {
+		err = errors.New("GetCygxZhouqiArticleMapByMatchTypeName, Err: " + err.Error())
+		return
+	}
+
+	listCategory, e := models.GetCygxZhouqiArticleMapByParentId(detail.ParentId)
+	if e != nil {
+		err = errors.New("GetCygxZhouqiArticleMapByParentId, Err: " + err.Error())
+		return
+	}
+	var matchTypeName = []string{}
+	for _, v := range listCategory {
+		matchTypeName = append(matchTypeName, v.MatchTypeName)
+	}
+
+	var condition string
+	var pars []interface{}
+	condition = "  AND category_name = '周期' AND field_name  IN  ('" + strings.Join(matchTypeName, "','") + "')  ORDER  BY  publish_date  DESC  "
+	articleList, e := models.GetCygxCygxArticleList(condition, pars, 0, 1)
+	if e != nil {
+		err = errors.New("GetCygxCygxArticleList, Err: " + e.Error())
+		return
+	}
+
+	//就一条数据
+	for _, v := range articleList {
+		e = models.UpdateCygxZhouqiArticleMapTime(v.PublishDate, detail.ParentId)
+	}
+
+	return
+}

+ 6 - 0
services/task.go

@@ -41,9 +41,15 @@ func Task() {
 		yiDongSignAppointmentsForThird := task.NewTask("yiDongSignAppointmentsForThird", "0 */10 * * * *", YiDongSignAppointmentsForThird) //会前一小时将,报名信息同步到易董
 		task.AddTask("yiDongSignAppointmentsForThird", yiDongSignAppointmentsForThird)
 
+		groupingActivityToYiDong := task.NewTask("groupingActivityToYiDong", "0 00 1 * * *", GroupingActivityToYiDong) //建立与易董的活动关联
+		task.AddTask("groupingActivityToYiDong", groupingActivityToYiDong)
+
 		getYiDongActivity := task.NewTask("getYiDongActivity", "0 */10 * * * *", GetYiDongActivity) //同步易董的活动信息
 		task.AddTask("getYiDongActivity", getYiDongActivity)
 
+		updateYiDongActivityDataToCygx := task.NewTask("updateYiDongActivityDataToCygx", "0 20 1 * * *", UpdateYiDongActivityDataToCygx) // 更新易董活动信息,到会信息到查研观向数据库
+		task.AddTask("updateYiDongActivityDataToCygx", updateYiDongActivityDataToCygx)
+
 		pushVmpRobotMeeting := task.NewTask("pushVmpRobotMeeting", "0 */10 6-23 * * *", PushVmpRobotMeeting) //研选活动会前15分钟推送给上海那边的机器人
 		task.AddTask("pushVmpRobotMeeting", pushVmpRobotMeeting)
 	}

+ 403 - 0
services/yidong.go

@@ -6,6 +6,7 @@ import (
 	"errors"
 	"fmt"
 	"hongze/hongze_cygx/models"
+	"hongze/hongze_cygx/models/yidong"
 	"hongze/hongze_cygx/utils"
 	"io/ioutil"
 	"net/http"
@@ -975,3 +976,405 @@ type YiDongSignAppointmentsForThirdResp struct {
 	Success   bool    `json:"success"`   // 成功标识,true:成功;false:失败。可作为判断报名是否成功的标识
 	Timestamp float64 `json:"timestamp"` // 时间戳
 }
+
+//func init() {
+//	GroupingActivityToYiDong()
+//}
+
+// GroupingActivityToYiDong 建立与易董的活动关联
+func GroupingActivityToYiDong(cont context.Context) (err error) {
+	//func GroupingActivityToYiDong() (err error) {
+	defer func() {
+		if err != nil {
+			fmt.Println(err)
+			go utils.SendAlarmMsg("建立与易董的活动关联失败  GroupingActivityToYiDong"+err.Error(), 2)
+		}
+	}()
+	startDate := time.Now().AddDate(0, 0, -2).Format(utils.FormatDate)
+	endDate := time.Now().AddDate(0, 0, 0).Format(utils.FormatDate)
+
+	var token string
+	token, _ = GetYiDongToken()
+	url := utils.YiDongZhengTongYunUrl + "interact/activityManageApi/getRoadshowList?access_token=" + token
+	method := "POST"
+	payload := strings.NewReader(`{
+									  "meetingStatus": "2",
+									  "conveneStartStr": "` + startDate + `",
+									  "conveneEndStr":  "` + endDate + `"}`)
+	client := &http.Client{}
+	req, err := http.NewRequest(method, url, payload)
+	if err != nil {
+		fmt.Println(err)
+		utils.FileLog.Info(err.Error())
+		return
+	}
+	req.Header.Add("Content-Type", "application/json")
+
+	res, err := client.Do(req)
+	if err != nil {
+		fmt.Println(err)
+		utils.FileLog.Info(err.Error())
+		return
+	}
+	defer res.Body.Close()
+	var ApifoxModal *models.ApifoxModal
+	body, err := ioutil.ReadAll(res.Body)
+	if err != nil {
+		fmt.Println(err)
+		utils.FileLog.Info(err.Error())
+		return
+	}
+
+	//添加请求日志记录
+	itemApiLog := new(models.CygxThreeApiLog)
+	itemApiLog.CreateTime = time.Now()
+	itemApiLog.Source = 1
+	itemApiLog.Url = url
+	itemApiLog.Body = utils.ReplaceSpaceAndWrap(fmt.Sprint(payload))
+	itemApiLog.Result = string(body)
+	go models.AddCygxThreeApiLog(itemApiLog)
+
+	err = json.Unmarshal(body, &ApifoxModal)
+	if err != nil {
+		fmt.Println("Getres.PublicGetDate Err:", err.Error())
+		return
+	}
+
+	//var itemsAdd []*models.CygxActivity
+	if len(ApifoxModal.Result) > 0 {
+		actList := ApifoxModal.Result
+		for _, v := range actList {
+			//同步有效性 1有效,0失效
+			if v.SyncFlag == "0" {
+				continue
+			}
+			var yidongTitle string
+			titleSlice := strings.Split(v.Title, "】")
+
+			for _, vt := range titleSlice {
+				yidongTitle = vt
+			}
+
+			e := models.UpdateCygxActivityyidongActivityId(v.ID, v.Start, yidongTitle)
+			if e != nil {
+				err = errors.New("UpdateCygxActivityyidongActivityId, Err: " + e.Error())
+				return
+			}
+		}
+	}
+
+	return
+
+}
+
+// GetLoginAuthCodeReq 获取登录编码请求体
+type GetYiDongActivityByApiReq struct {
+	MeetingStatus   string `json:"meetingStatus" description:"会议状态必需(0未开始1进行中2已结束)多个逗号分隔"`
+	ConveneStartStr string `json:"conveneStartStr" description:"活动日期范围开始"`
+	ConveneEndStr   string `json:"conveneEndStr" description:"活动日期范围结束"`
+	LastUpdateTime  string `json:"lastUpdateTime" description:"上次同步时间(用于筛选更新时间大于同步时间的活动数据)"`
+}
+
+type GetYiDongActivityMeetByActivityIdReq struct {
+	ActivityId string `json:"activityId" description:"活动ID"`
+}
+
+// 根据条件获取易董建会列表信息
+func GetYiDongActivityListByApi(param *GetYiDongActivityByApiReq) (yiDongResult []models.Result) {
+	var err error
+	defer func() {
+		if err != nil {
+			fmt.Println(err)
+			go utils.SendAlarmMsg(fmt.Sprint("根据条件获取易董建会列表信息  GetYiDongActivityListByApi"+err.Error(), param), 2)
+		}
+	}()
+	var token string
+	token, _ = GetYiDongToken()
+	url := utils.YiDongZhengTongYunUrl + "interact/activityManageApi/getRoadshowList?access_token=" + token
+	method := "POST"
+	data, e := json.Marshal(param)
+	if e != nil {
+		err = errors.New("data json marshal err: " + e.Error())
+		return
+	}
+
+	payload := strings.NewReader(string(data))
+	client := &http.Client{}
+	req, e := http.NewRequest(method, url, payload)
+	if e != nil {
+		err = errors.New(" http.NewRequest err: " + e.Error())
+		return
+	}
+	req.Header.Add("Content-Type", "application/json")
+
+	res, e := client.Do(req)
+	if e != nil {
+		err = errors.New(" client.Do err: " + e.Error())
+		return
+	}
+	defer res.Body.Close()
+	var ApifoxModal *models.ApifoxModal
+	body, e := ioutil.ReadAll(res.Body)
+	if e != nil {
+		err = errors.New("  ioutil.ReadAll: " + e.Error())
+		return
+	}
+
+	//添加请求日志记录
+	itemApiLog := new(models.CygxThreeApiLog)
+	itemApiLog.CreateTime = time.Now()
+	itemApiLog.Source = 1
+	itemApiLog.Url = url
+	itemApiLog.Body = utils.ReplaceSpaceAndWrap(fmt.Sprint(payload))
+	itemApiLog.Result = string(body)
+	go models.AddCygxThreeApiLog(itemApiLog)
+
+	err = json.Unmarshal(body, &ApifoxModal)
+	if err != nil {
+		fmt.Println("Getres.PublicGetDate Err:", err.Error())
+		return
+	}
+	if len(ApifoxModal.Result) > 0 {
+		yiDongResult = ApifoxModal.Result
+	} else {
+		yiDongResult = make([]models.Result, 0)
+	}
+	return
+}
+
+// 根据条件获取易董活动ID获取到会信息
+func GetYiDongActivityMeetDataByaAtivityId(ativityId string) (yiDongResult []models.Resultuser) {
+	var err error
+	defer func() {
+		if err != nil {
+			fmt.Println(err)
+			go utils.SendAlarmMsg(fmt.Sprint("根据条件获取易董建会列表信息  GetYiDongActivityListByApi"+err.Error(), ativityId), 2)
+		}
+	}()
+	var token string
+	token, _ = GetYiDongToken()
+	url := utils.YiDongZhengTongYunUrl + "interact/activityManageApi/getAttendPersonList?access_token=" + token
+	method := "POST"
+	param := new(GetYiDongActivityMeetByActivityIdReq)
+	param.ActivityId = ativityId
+	data, e := json.Marshal(param)
+	if e != nil {
+		err = errors.New("data json marshal err: " + e.Error())
+		return
+	}
+
+	payload := strings.NewReader(string(data))
+	client := &http.Client{}
+	req, e := http.NewRequest(method, url, payload)
+	if e != nil {
+		err = errors.New(" http.NewRequest err: " + e.Error())
+		return
+	}
+	req.Header.Add("Content-Type", "application/json")
+	res, e := client.Do(req)
+	if e != nil {
+		err = errors.New(" client.Do err: " + e.Error())
+		return
+	}
+	defer res.Body.Close()
+	var ApifoxModal *models.ApifoxModaluser
+	body, e := ioutil.ReadAll(res.Body)
+	if e != nil {
+		err = errors.New(" ioutil.ReadAll err: " + e.Error())
+		return
+	}
+	e = json.Unmarshal(body, &ApifoxModal)
+	if e != nil {
+		err = errors.New(" json.Unmarshal  err: " + e.Error())
+		return
+	}
+
+	//添加请求日志记录
+	itemApiLog := new(models.CygxThreeApiLog)
+	itemApiLog.CreateTime = time.Now()
+	itemApiLog.Source = 1
+	itemApiLog.Url = url
+	itemApiLog.Body = utils.ReplaceSpaceAndWrap(fmt.Sprint(payload))
+	itemApiLog.Result = string(body)
+	go models.AddCygxThreeApiLog(itemApiLog)
+
+	err = json.Unmarshal(body, &ApifoxModal)
+	if err != nil {
+		fmt.Println("Getres.PublicGetDate Err:", err.Error())
+		return
+	}
+	if len(ApifoxModal.Result) > 0 {
+		yiDongResult = ApifoxModal.Result
+	} else {
+		yiDongResult = make([]models.Resultuser, 0)
+	}
+	return
+}
+
+//func init() {
+//	UpdateYiDongActivityDataToCygx()
+//}
+
+// 更新易董活动信息,到会信息到查研观向数据库
+func UpdateYiDongActivityDataToCygx(cont context.Context) (err error) {
+	defer func() {
+		if err != nil {
+			fmt.Println(err)
+			go utils.SendAlarmMsg(fmt.Sprint("更新易董活动信息,到会信息到查研观向数据库  UpdateYiDongActivityDataToCygx"+err.Error()), 2)
+		}
+	}()
+	startDate := time.Now().AddDate(0, 0, -3).Format(utils.FormatDate)
+	endDate := time.Now().AddDate(0, 0, 0).Format(utils.FormatDate)
+
+	param := new(GetYiDongActivityByApiReq)
+	param.MeetingStatus = "2"
+	param.ConveneStartStr = startDate
+	param.ConveneEndStr = endDate
+	actList := GetYiDongActivityListByApi(param)
+
+	if len(actList) == 0 {
+		return
+	}
+	var itmes []*yidong.CygxYidongActivity
+	var YidongIds []string
+	for _, v := range actList {
+		YidongIds = append(YidongIds, v.ID)
+	}
+
+	listCygx, e := yidong.GetCygxYidongActivityListByYidongIds(YidongIds)
+	if e != nil {
+		err = errors.New("GetCygxYidongActivityListByYidongIds, Err: " + e.Error())
+		return
+	}
+	mapYidongId := make(map[string]bool)
+	for _, v := range listCygx {
+		mapYidongId[v.YidongId] = true
+	}
+
+	listMeetDataCygx, e := yidong.GetCygxYidongActivityMeetDataListByYidongIds(YidongIds)
+	if e != nil {
+		err = errors.New("GetCygxYidongActivityListByYidongIds, Err: " + e.Error())
+		return
+	}
+	mapMeetData := make(map[string]bool)
+	for _, v := range listMeetDataCygx {
+		mapMeetData[fmt.Sprint("AID_", v.YidongId, "M_", v.PersonTelephone)] = true
+	}
+
+	for _, v := range actList {
+		if mapYidongId[v.ID] {
+			continue
+		}
+		item := new(yidong.CygxYidongActivity)
+		item.YidongId = v.ID
+		item.CompanyInfo = v.CompanyInfo
+		item.Type = v.Type
+		item.IndustrySwName = v.IndustrySwName
+		item.Start = v.Start
+		item.End = v.End
+		item.SignUpStart = v.SignUpStart
+		item.SignUpEnd = v.SignUpEnd
+		item.ActivityJoinType = v.ActivityJoinType
+		item.Banner = v.Banner
+		item.Url = v.URL
+		item.SyncFlag = v.SyncFlag
+		item.BusinessCardOpen = v.BusinessCardOpen
+		item.BusinessCardRequired = v.BusinessCardRequired
+		item.PersonNameOpen = v.PersonNameOpen
+		item.PersonNameRequired = v.PersonNameRequired
+		item.PersonTelephoneOpen = v.PersonTelephoneOpen
+		item.PersonTelephoneRequired = v.PersonTelephoneRequired
+		item.MailOpen = v.MailOpen
+		item.MailRequired = v.MailRequired
+		item.CompanyShortNameOpen = v.CompanyShortNameOpen
+		item.CompanyShortNameRequired = v.CompanyShortNameRequired
+		item.CompanyCodeOpen = v.CompanyCodeOpen
+		item.CompanyCodeRequired = v.CompanyCodeRequired
+		item.JobNameOpen = v.JobNameOpen
+		item.JobNameRequired = v.JobNameRequired
+		item.CertificateInformationOpen = v.CertificateInformationOpen
+		item.CertificateInformationRequired = v.CertificateInformationRequired
+		item.InviteeOpen = v.InviteeOpen
+		item.InviteeRequired = v.InviteeRequired
+		item.CreateTime = time.Now()
+		itmes = append(itmes, item)
+	}
+	//新增记录
+	if len(itmes) > 0 {
+		e = yidong.AddCygxYidongActivityMulti(itmes)
+		if e != nil {
+			err = errors.New("AddCygxYidongActivityMulti, Err: " + e.Error())
+			return
+		}
+	}
+
+	var itmesMdata []*yidong.CygxYidongActivityMeetData
+	for _, v := range actList {
+		meetDataList := GetYiDongActivityMeetDataByaAtivityId(v.ID)
+		for _, mdata := range meetDataList {
+			if mapMeetData[fmt.Sprint("AID_", v.ID, "M_", mdata.PersonTelephone)] || mdata.PersonTelephone == "" {
+				continue
+			}
+			itmemdata := new(yidong.CygxYidongActivityMeetData)
+			itmemdata.YidongMeetDataId = mdata.ID
+			itmemdata.Title = v.Title
+			itmemdata.YidongId = v.ID
+			itmemdata.UserId = mdata.UserID
+			itmemdata.PersonTelephone = mdata.PersonTelephone
+			itmemdata.Duration = mdata.Duration
+			itmemdata.StartTime = mdata.StartTime
+			itmemdata.EndTime = mdata.EndTime
+			itmemdata.DeviceType = mdata.DeviceType
+			itmemdata.Status = mdata.Status
+			itmemdata.PersonName = mdata.PersonName
+			itmemdata.JobName = mdata.JobName
+			itmemdata.Mail = mdata.Mail
+			itmemdata.CompanyName = mdata.CompanyName
+			itmemdata.MobileCountryCode = mdata.MobileCountryCode
+			itmemdata.SignUpStatus = mdata.SignUpStatus
+			itmemdata.DurationLive = mdata.DurationLive
+			itmemdata.StartTimeLive = mdata.StartTimeLive
+			itmemdata.EndTimeLive = mdata.EndTimeLive
+			itmemdata.DurationReview = mdata.DurationReview
+			itmemdata.StartTimeInteract = mdata.StartTimeInteract
+			itmemdata.EndTimeInteract = mdata.EndTimeInteract
+			itmemdata.CreateTime = time.Now()
+			itmesMdata = append(itmesMdata, itmemdata)
+		}
+	}
+
+	// 写入到会信息
+	if len(itmesMdata) > 0 {
+		e = yidong.AddCygxYidongActivityMeetDataMulti(itmesMdata)
+		if e != nil {
+			err = errors.New("AddCygxYidongActivityMeetDataMulti, Err: " + e.Error())
+			return
+		}
+	}
+	//fmt.Println("end")
+	return
+}
+
+//func init() {
+//	//param := new(GetYiDongActivityByApiReq)
+//	//param.MeetingStatus = "2"
+//	//param.ConveneStartStr = "2024-10-28"
+//	//param.ConveneEndStr = "2024-10-30"
+//	actList := GetYiDongActivityMeetDataByaAtivityId("1180584155007237390")
+//
+//	for _, v := range actList {
+//		//同步有效性 1有效,0失效
+//		//if v.SyncFlag == "0" {
+//		//	continue
+//		//}
+//		//var yidongTitle string
+//		//titleSlice := strings.Split(v.Title, "】")
+//		//
+//		//for _, vt := range titleSlice {
+//		//	yidongTitle = vt
+//		//}
+//
+//		fmt.Println(v.PersonTelephone)
+//		fmt.Println(v.PersonName)
+//	}
+//}