Kaynağa Gözat

易董自动同步活动

xingzai 2 yıl önce
ebeveyn
işleme
e2ddc4a1e5
5 değiştirilmiş dosya ile 414 ekleme ve 3 silme
  1. 12 3
      controllers/yidong.go
  2. 68 0
      models/activity.go
  3. 1 0
      models/db.go
  4. 305 0
      services/yidong.go
  5. 28 0
      utils/config.go

+ 12 - 3
controllers/yidong.go

@@ -4,6 +4,7 @@ import (
 	"encoding/json"
 	"fmt"
 	"hongze/hongze_cygx/models"
+	"hongze/hongze_cygx/services"
 	"hongze/hongze_cygx/utils"
 	"io/ioutil"
 	"net/http"
@@ -25,7 +26,7 @@ func (this *BaseYidongController) GetToken() {
 		this.Data["json"] = br
 		this.ServeJSON()
 	}()
-	url := "https://services-dev.valueonline.cn/oauth/token?grant_type=client_credentials&response_type=token&client_id=d9bfb79627ac30d0&client_secret=96a61dd2d9bfb79627ac30d02188bbe2"
+	url := utils.YiDongZhengTongYunUrl + "oauth/token?grant_type=client_credentials&response_type=token&client_id=" + utils.YiDongZhengTongYunAppid + "&client_secret=" + utils.YiDongZhengTongYunSecret
 	method := "GET"
 
 	client := &http.Client{}
@@ -35,8 +36,6 @@ func (this *BaseYidongController) GetToken() {
 		fmt.Println(err)
 		return
 	}
-	req.Header.Add("User-Agent", "apifox/1.0.0 (https://www.apifox.cn)")
-
 	res, err := client.Do(req)
 	if err != nil {
 		fmt.Println(err)
@@ -60,6 +59,7 @@ func (this *BaseYidongController) GetToken() {
 	if err != nil {
 		fmt.Println("Getres.PublicGetDate Err:", err.Error())
 	}
+	services.GetYiDongActivity()
 	cacheKey := utils.YD_TOKEN
 	utils.Rc.Put(cacheKey, ydtoklen.AccessToken, time.Second*7000)
 	utils.FileLog.Info(string(body))
@@ -348,3 +348,12 @@ func (this *BaseYidongController) UserSingnUp() {
 	br.Success = true
 	br.Data = ApifoxModal
 }
+
+func init() {
+	YD_TYPR := map[string]int{
+		"计算机":  21,
+		"计算机2": 21,
+		"计算机3": 21,
+	}
+	fmt.Println(YD_TYPR)
+}

+ 68 - 0
models/activity.go

@@ -9,6 +9,59 @@ import (
 	"time"
 )
 
+//活动详情
+type CygxActivity struct {
+	ActivityId              int       `orm:"column(activity_id);pk";description:"活动ID 等于0新增活动,大于0修改活动"`
+	ActivityTypeId          int       `description:"活动类型id"`
+	ActivityTypeName        string    `description:"活动类型名称"`
+	ChartPermissionId       int       `description:"行业id"`
+	ChartPermissionName     string    `description:"行业名称"`
+	ChartPermissionNames    string    `description:"行业名称辅助字段,区分研选子分类"`
+	Body                    string    `description:"内容"`
+	CreateTime              time.Time `description:"创建时间"`
+	IsLimitPeople           int       `description:"是否限制人数 1是,0否"`
+	LimitPeopleNum          int       `description:"限制的人数数量"`
+	CustomerTypeIds         string    `description:"活动可见的客户类型,多个ID用 , 隔开"`
+	PublishStatus           int       `description:"发布状态 1已发布,0未发布"`
+	LastUpdatedTime         time.Time `description:"更新时间"`
+	ActivityTime            string    `description:"活动时间"`
+	ActivityTimeText        string    `description:"活动时间带文字"`
+	DistinguishedGuest      string    `description:"嘉宾"`
+	Host                    string    `description:"主持人"`
+	MainlandTell            string    `description:"大陆拨入号"`
+	HongKongTell            string    `description:"香港拨入号"`
+	TaiwanTell              string    `description:"台湾拨入号"`
+	AmericaTell             string    `description:"美国拨入号"`
+	ParticipationCode       string    `description:"参会密码"`
+	Theme                   string    `description:"主题"`
+	Expert                  string    `description:"专家"`
+	ActivityName            string    `description:"活动名称"`
+	ActivityNameTask        string    `description:"活动名称定时任务同步的时候使用"`
+	OnlineParticipation     string    `description:"网络参会"`
+	ReportLink              string    `description:"报告链接"`
+	City                    string    `description:"城市"`
+	Address                 string    `description:"活动地址"`
+	Highlights              string    `description:"活动亮点"`
+	Remarks                 string    `description:"备注"`
+	Speaker                 string    `description:"主讲人"`
+	ArticleId               int       `description:"关联报告id"`
+	Label                   string    `description:"标签"`
+	LinkParticipants        string    `description:"链接参会"`
+	AppAttendance           string    `description:"App参会"`
+	ConferencePassword      string    `description:"会议密码"`
+	TemporaryLabel          string    `description:"临时标签"`
+	IsMakerShow             int       `description:"是否仅决策人可见 0,否 、1,是"`
+	VisibleRange            int       `description:"可见范围 1,仅本组可见 、2,全部客户可见"`
+	Scale                   string    `description:"管理规模,空不填,1::50亿以下,2:50~100亿,3:100亿以上。多个用, 隔开"`
+	IsShowSubjectName       int       `description:"小程序内是否展示标的名称 1是 ,0 否 默认0 "`
+	IsHideAppointment       int       `description:"是否隐藏预约纪要按钮 1是 ,0 否 默认0 "`
+	AdminId                 int       `description:"销售/管理员ID"`
+	AdminName               string    `description:"销售/管理员姓名"`
+	IsCanAppointmentMinutes int       `description:"是否可预约纪要 1是 ,0 否 默认0 "`
+	YidongActivityId        string    `description:"易董活动ID"`
+	YidongActivityUrl       string    `description:"易董活动跳转地址"`
+}
+
 type Activity struct {
 	ActivityTypeId   int    `description:"活动类型id"`
 	ActivityTypeName string `description:"活动名称"`
@@ -789,3 +842,18 @@ func GetIndustrialActivityGroupManagementList(activityId int) (items []*Industri
 	_, err = o.Raw(sql, activityId).QueryRows(&items)
 	return
 }
+
+//GetActivityListByYiDong 获取易董同步过来的活动列表
+func GetActivityListByYiDong() (items []*CygxActivity, err error) {
+	o := orm.NewOrm()
+	sql := ` SELECT * FROM cygx_activity WHERE yidong_activity_id != '' `
+	_, err = o.Raw(sql).QueryRows(&items)
+	return
+}
+
+//AddCygxActivity 添加活动
+func AddCygxActivity(item *CygxActivity) (lastId int64, err error) {
+	o := orm.NewOrm()
+	lastId, err = o.Insert(item)
+	return
+}

+ 1 - 0
models/db.go

@@ -112,6 +112,7 @@ func init() {
 		new(CygxChartAll),
 		new(CygxSessionMobile),
 		new(CygxSearchKeyWordLog),
+		new(CygxActivity),
 	)
 	// 记录ORM查询日志
 	orm.Debug = true

+ 305 - 0
services/yidong.go

@@ -0,0 +1,305 @@
+package services
+
+import (
+	"encoding/json"
+	"fmt"
+	"hongze/hongze_cygx/models"
+	"hongze/hongze_cygx/utils"
+	"io/ioutil"
+	"net/http"
+	"strings"
+	"time"
+)
+
+//
+//消费:家用电器,纺织服装,休闲服务,食品饮料
+//智造:汽车,机械设备,电气设备
+//科技:电子,计算机,通信
+//医药:医药生物
+//研选:非银金融、建筑装饰、化工、农林牧渔、传媒、公用事业、建筑材料、房地产、采掘、轻工制造,钢铁、交通运输、国防军工、银行、有色金属、综合、商业贸易
+
+//GetActivityTypeIdWithYiDong 根据易董同步过来的活动类型,自动匹配行业
+func GetActivityTypeIdWithYiDong(industrySwName string) (chartPermissionId int) {
+	mapIndustrySwName := map[string]int{
+		"家用电器": utils.XIAO_FEI_ID,
+		"纺织服装": utils.XIAO_FEI_ID,
+		"休闲服务": utils.XIAO_FEI_ID,
+		"食品饮料": utils.XIAO_FEI_ID,
+		//消费
+
+		"汽车":   utils.ZHI_ZAO_ID,
+		"机械设备": utils.ZHI_ZAO_ID,
+		"电气设备": utils.ZHI_ZAO_ID,
+		//智造
+
+		"电子":  utils.KE_JI_ID,
+		"计算机": utils.KE_JI_ID,
+		"通信":  utils.KE_JI_ID,
+		//科技
+
+		"医药生物": utils.YI_YAO_ID,
+		//医药
+
+		"非银金融": utils.CHART_PERMISSION_ID_YANXUAN,
+		"建筑装饰": utils.CHART_PERMISSION_ID_YANXUAN,
+		"化工":   utils.CHART_PERMISSION_ID_YANXUAN,
+		"农林牧渔": utils.CHART_PERMISSION_ID_YANXUAN,
+		"传媒":   utils.CHART_PERMISSION_ID_YANXUAN,
+		"公用事业": utils.CHART_PERMISSION_ID_YANXUAN,
+		"建筑材料": utils.CHART_PERMISSION_ID_YANXUAN,
+		"房地产":  utils.CHART_PERMISSION_ID_YANXUAN,
+		"采掘":   utils.CHART_PERMISSION_ID_YANXUAN,
+		"轻工制造": utils.CHART_PERMISSION_ID_YANXUAN,
+		"钢铁":   utils.CHART_PERMISSION_ID_YANXUAN,
+		"交通运输": utils.CHART_PERMISSION_ID_YANXUAN,
+		"国防军工": utils.CHART_PERMISSION_ID_YANXUAN,
+		"银行":   utils.CHART_PERMISSION_ID_YANXUAN,
+		"有色金属": utils.CHART_PERMISSION_ID_YANXUAN,
+		"综合":   utils.CHART_PERMISSION_ID_YANXUAN,
+		"商业贸易": utils.CHART_PERMISSION_ID_YANXUAN,
+		//研选
+	}
+	fmt.Println(mapIndustrySwName)
+	return
+}
+
+//GetActivityTypeIdWithYiDong 根据易董同步过来的活动类型,自动匹配行业
+func GetActivityTypeNameWithYiDong(industrySwName string) (chartPermissionName string) {
+	mapIndustrySwName := map[string]string{
+		"家用电器": utils.XIAO_FEI_NAME,
+		"纺织服装": utils.XIAO_FEI_NAME,
+		"休闲服务": utils.XIAO_FEI_NAME,
+		"食品饮料": utils.XIAO_FEI_NAME,
+		//消费
+
+		"汽车":   utils.ZHI_ZAO_NAME,
+		"机械设备": utils.ZHI_ZAO_NAME,
+		"电气设备": utils.ZHI_ZAO_NAME,
+		//智造
+
+		"电子":  utils.KE_JI_NAME,
+		"计算机": utils.KE_JI_NAME,
+		"通信":  utils.KE_JI_NAME,
+		//科技
+
+		"医药生物": utils.YI_YAO_NAME,
+		//医药
+
+		"非银金融": utils.CHART_PERMISSION_NAME_MF_YANXUAN,
+		"建筑装饰": utils.CHART_PERMISSION_NAME_MF_YANXUAN,
+		"化工":   utils.CHART_PERMISSION_NAME_MF_YANXUAN,
+		"农林牧渔": utils.CHART_PERMISSION_NAME_MF_YANXUAN,
+		"传媒":   utils.CHART_PERMISSION_NAME_MF_YANXUAN,
+		"公用事业": utils.CHART_PERMISSION_NAME_MF_YANXUAN,
+		"建筑材料": utils.CHART_PERMISSION_NAME_MF_YANXUAN,
+		"房地产":  utils.CHART_PERMISSION_NAME_MF_YANXUAN,
+		"采掘":   utils.CHART_PERMISSION_NAME_MF_YANXUAN,
+		"轻工制造": utils.CHART_PERMISSION_NAME_MF_YANXUAN,
+		"钢铁":   utils.CHART_PERMISSION_NAME_MF_YANXUAN,
+		"交通运输": utils.CHART_PERMISSION_NAME_MF_YANXUAN,
+		"国防军工": utils.CHART_PERMISSION_NAME_MF_YANXUAN,
+		"银行":   utils.CHART_PERMISSION_NAME_MF_YANXUAN,
+		"有色金属": utils.CHART_PERMISSION_NAME_MF_YANXUAN,
+		"综合":   utils.CHART_PERMISSION_NAME_MF_YANXUAN,
+		"商业贸易": utils.CHART_PERMISSION_NAME_MF_YANXUAN,
+		//研选
+	}
+	fmt.Println(mapIndustrySwName)
+	return
+}
+
+//获取易董token
+func GetYiDongToken() (token string, err error) {
+	defer func() {
+		if err != nil {
+			fmt.Println(err)
+			utils.FileLog.Info(err.Error())
+		}
+	}()
+	cacheKey := utils.YD_TOKEN
+	ttlTime := utils.Rc.GetRedisTTL(cacheKey)
+	if ttlTime > 0 {
+		token, _ = utils.Rc.RedisString(cacheKey)
+	}
+	if token == "" {
+		url := utils.YiDongZhengTongYunUrl + "oauth/token?grant_type=client_credentials&response_type=token&client_id=" + utils.YiDongZhengTongYunAppid + "&client_secret=" + utils.YiDongZhengTongYunSecret
+		method := "GET"
+		client := &http.Client{}
+		req, errReq := http.NewRequest(method, url, nil)
+		if errReq != nil {
+			err = errReq
+			return
+		}
+		res, errReq := client.Do(req)
+		if errReq != nil {
+			err = errReq
+			return
+		}
+		defer res.Body.Close()
+
+		type Ydtoklen struct {
+			Success     string `json:"success"`
+			ExpiresIn   int    `json:"expires_in"`
+			AccessToken string `json:"access_token"`
+		}
+		var ydtoklen Ydtoklen
+		body, errReq := ioutil.ReadAll(res.Body)
+		if errReq != nil {
+			err = errReq
+			return
+		}
+		errReq = json.Unmarshal(body, &ydtoklen)
+		if errReq != nil {
+			err = errReq
+			return
+		}
+		token = ydtoklen.AccessToken
+		utils.Rc.Put(cacheKey, ydtoklen.AccessToken, time.Second*7000)
+	}
+	return
+}
+
+//获取易董活动列表
+func GetYiDongActivity() (err error) {
+	defer func() {
+		if err != nil {
+			fmt.Println(err)
+			utils.FileLog.Info(err.Error())
+		}
+	}()
+	var token string
+	token, _ = GetYiDongToken()
+	fmt.Println(token)
+	url := utils.YiDongZhengTongYunUrl + "interact/activityManageApi/getRoadshowList?access_token=" + token
+	method := "POST"
+	payload := strings.NewReader(`{
+    "meetingStatus": "0,1,2"
+}`)
+	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
+	}
+	utils.FileLog.Info(string(body))
+	err = json.Unmarshal(body, &ApifoxModal)
+	if err != nil {
+		fmt.Println("Getres.PublicGetDate Err:", err.Error())
+		utils.FileLog.Info(err.Error())
+		return
+	}
+	OldActYIdongList, err := models.GetActivityListByYiDong()
+	if err != nil {
+		fmt.Println(err)
+		utils.FileLog.Info(string(err.Error()))
+	}
+	mapOldYiDong := make(map[string]string)
+	for _, v := range OldActYIdongList {
+		mapOldYiDong[v.YidongActivityId] = v.YidongActivityId
+	}
+	var itemsAdd []*models.CygxActivity
+	if len(ApifoxModal.Result) > 0 {
+		actList := ApifoxModal.Result
+		for _, v := range actList {
+			var item = new(models.CygxActivity)
+			item.YidongActivityId = v.ID
+			item.ActivityTypeId = 3
+			item.ActivityTypeName = "公司调研电话会"
+			item.ActivityName = v.Title
+			item.Label = v.CompanyInfo
+			item.TemporaryLabel = v.CompanyInfo
+			item.ChartPermissionId = GetActivityTypeIdWithYiDong(v.IndustrySwName)
+			item.ChartPermissionName = GetActivityTypeNameWithYiDong(v.IndustrySwName)
+			item.ChartPermissionNames = GetActivityTypeNameWithYiDong(v.IndustrySwName)
+			item.ActivityTime = v.Start
+			item.ActivityTimeText = v.Start
+			item.DistinguishedGuest = "嘉宾"
+
+			detailYidng, err := GetYiDongActivityDetail(v.ID)
+			if err != nil {
+				return err
+			}
+			detailList := detailYidng.Resultdetail.GuestPersonList
+			for _, vdetail := range detailList {
+				item.DistinguishedGuest += vdetail.PersonName + ","
+			}
+			item.DistinguishedGuest = strings.TrimRight(item.DistinguishedGuest, ",")
+			item.Body = "<p>" + "【" + v.CompanyInfo + v.Title + "】" + "<p>时间:" + v.Start + "</p>嘉宾:" + item.DistinguishedGuest + "</p>"
+			if mapOldYiDong[v.ID] == "" {
+				itemsAdd = append(itemsAdd, item)
+				_, err = models.AddCygxActivity(item)
+				if err != nil {
+					fmt.Println(err)
+					utils.FileLog.Info(string(err.Error()))
+				}
+			}
+		}
+
+	}
+	return
+}
+
+//获取易董活动详情
+func GetYiDongActivityDetail(activityId string) (detail *models.ApifoxModaldetail, err error) {
+	defer func() {
+		if err != nil {
+			fmt.Println(err)
+			utils.FileLog.Info(err.Error())
+		}
+	}()
+	var token string
+	token, _ = GetYiDongToken()
+	fmt.Println(token)
+	url := utils.YiDongZhengTongYunUrl + "interact/activityManageApi/getRoadshowDetail?access_token=" + token
+	method := "POST"
+	payload := strings.NewReader(`{"activityId":"` + activityId + `",}`)
+	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.ApifoxModaldetail
+	body, err := ioutil.ReadAll(res.Body)
+	if err != nil {
+		fmt.Println(err)
+		utils.FileLog.Info(err.Error())
+		return
+	}
+	utils.FileLog.Info(string(body))
+	fmt.Println(string(body))
+	err = json.Unmarshal(body, &ApifoxModal)
+	if err != nil {
+		fmt.Println("Getres.PublicGetDate Err:", err.Error())
+		utils.FileLog.Info(err.Error())
+		return
+	}
+	detail = ApifoxModal
+	return
+}

+ 28 - 0
utils/config.go

@@ -74,6 +74,10 @@ var (
 	ActSendMsgMobile          string //活动带问发送模板消息接收者的手机号
 	StrategyPlatform          string //策略品台跳转链接地址
 	ArticleTaskClassMobile    string //策略平台报告自动归类消息通知对象
+	YiDongZhengTongYunUrl     string //易董 证通云请求域名
+	YiDongZhengTongYunAppid   string //易董 证通云请求appid
+	YiDongZhengTongYunSecret  string //易董 证通云请求secret
+	YiDongHuaWeiYunUrl        string //易董 华为云请求域名
 )
 
 func init() {
@@ -216,8 +220,32 @@ func init() {
 		WxMsgTemplateIdApplyCancelXzs = "gCSCAWNNhjkzE2V1cjbIV_Ex68R_8LM_u25qDlSKWyM"   ////预约取消提醒(小助手)
 		TemplateIdByProductXzs = "tNcCUiK_uUkuxaFF7M9NP2RwLkw8uHFjG-TDIxGUKxo"          //产品运行报告通知-模板ID(小助手)
 	}
+
+	//进门财经开放api配置
+	YiDongApiConfig()
 }
 
+// YiDongApiConfig 易董开放api配置
+func YiDongApiConfig() {
+	if RunMode == "release" {
+		YiDongZhengTongYunUrl = "https://services.easy-board.com.cn/"
+		YiDongZhengTongYunAppid = "ca86a257ebb46fce"
+		YiDongZhengTongYunSecret = "338db2b2ca86a257ebb46fced9003f53"
+		YiDongHuaWeiYunUrl = "https://achievement.valueonline.cn/"
+	} else {
+		YiDongZhengTongYunUrl = "https://services-dev.valueonline.cn/"
+		YiDongZhengTongYunAppid = "d9bfb79627ac30d0"
+		YiDongZhengTongYunSecret = "96a61dd2d9bfb79627ac30d02188bbe2"
+		YiDongHuaWeiYunUrl = "https://achievement-test.valueonline.cn/"
+	}
+}
+
+//
+//YiDongZhengTongYunUrl     string //易董 证通云请求域名
+//YiDongZhengTongYunAppid   string //易董 证通云请求appid
+//YiDongZhengTongYunSecret  string //易董 证通云请求secret
+//YiDongHuaWeiYunUrl        string //易董 华为云请求域名
+
 //http://webapi.brilliantstart.cn/api/
 //http://webapi.brilliantstart.cn/swagger/
 //http://139.196.122.219:8603/swagger/