12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124 |
- package cygx
- import (
- "encoding/json"
- "errors"
- "fmt"
- "hongze/hz_crm_api/models/cygx"
- "hongze/hz_crm_api/services/alarm_msg"
- "hongze/hz_crm_api/utils"
- "io/ioutil"
- "net/http"
- "strconv"
- "strings"
- "time"
- )
- type ApifoxModalSingUpClass struct {
- ErrorCode *string `json:"errorCode"` // 错误码,001:活动不存在;002:该活动不支持此渠道报名;003:该手机号或邮箱已经被其他账号提交报名;004:不在报名时间;005:报名人数已满
- ErrorMsg *string `json:"errorMsg"` // 错误信息
- Result SingUpMap `json:"result"` // 结果Map,成功
- Success bool `json:"success"` // 成功标识,true:成功;false:失败。可作为判断报名是否成功的标识
- Timestamp float64 `json:"timestamp"` // 时间戳
- }
- type SingUpMap struct {
- Msg string `json:"msg"` // 请求信息,成功信息
- }
- type GetYidongTokenResp struct {
- Success bool `json:"success"` // 请求信息,成功信息
- AccessToken string `json:"access_token"` // token
- ExpiresIn int `json:"expires_in"` // 过期时间
- }
- // 易董建会成功返回的结构体
- type YiDongSaveRoadshowDetailResp struct {
- ErrorCode string `json:"errorCode"` // 错误码
- ErrorMsg string `json:"errorMsg"` // 错误信息
- Success bool `json:"success"` // 请求信息,成功信息
- Result YiDongSaveRoadshowDetailIdResp `json:"result"` // 返回信息
- }
- type YiDongSaveRoadshowDetailIdResp struct {
- ActivityId string `json:"activityId"` //易董返回的活动ID
- }
- type YiDongUpdateActivityPublishResp struct {
- Id string `description:"易董活动ID,为空时新增,非空时修改" json:"id"`
- PublishFlag string `description:"发布状态,1发布 0 取消发布" json:"publishFlag"`
- }
- // 获取路演详细信息(2.0)结构体
- type YiDongGetRoadshowDetailResp struct {
- ErrorCode string `json:"errorCode"` // 错误码
- ErrorMsg string `json:"errorMsg"` // 错误信息
- Success bool `json:"success"` // 请求信息,成功信息
- Result YiDongGetRoadshowDetailRespResult `json:"result"` // 返回信息
- }
- type YiDongGetRoadshowDetailRespResult struct {
- MeetingCode string `json:"meetingCode"` //腾讯会议号
- }
- // 获取创建人信息列表(新)结构体
- type YiDongGetCreateUserListResp struct {
- ErrorCode string `json:"errorCode"` // 错误码
- ErrorMsg string `json:"errorMsg"` // 错误信息
- Success bool `json:"success"` // 请求信息,成功信息
- Result YiDongGetCreateUserListResult `json:"result"` // 返回信息
- }
- type YiDongGetCreateUserListResult struct {
- PersonList []*PersonUser
- }
- type PersonUser struct {
- Id string `description:"人员id" json:"id"`
- PersonName string `description:"姓名" json:"personName"`
- JobName string `description:"职务" json:"jobName"`
- UserId string `description:"用户id" json:"userId"`
- UserName string `description:"用户账号" json:"userName"`
- IdentityType string `description:"身份类型:0 不可用,1可用" json:"identityType"`
- Lock bool `description:"锁定状态:true 锁定 false 未锁定" json:"lock"`
- CreatePersonName string `description:"创建人姓名:创建时必填" json:"createPersonName"`
- }
- type YidongActivityResult struct {
- ActivityJoinType string `json:"activityJoinType"` // 活动入会类型,01报名审核后可入会 02预约即可入会 03仅定向邀请人员可入会
- Banner string `json:"banner"` // 宣传图
- BusinessCardOpen string `json:"businessCardOpen"` // 上传名片是否开启,1是 0否
- BusinessCardRequired string `json:"businessCardRequired"` // 上传名片是否必填,1是 0否
- CertificateInformationOpen string `json:"certificateInformationOpen"` // 证件信息是否开启,1是 0否
- CertificateInformationRequired string `json:"certificateInformationRequired"` // 证件信息是否必填,1是 0否
- CompanyCodeOpen string `json:"companyCodeOpen"` // 公司代码是否开启,1是 0否
- CompanyCodeRequired string `json:"companyCodeRequired"` // 公司代码是否必填,1是 0否
- CompanyInfo string `json:"companyInfo"` // 公司名称
- CompanyShortNameOpen string `json:"companyShortNameOpen"` // 公司名称是否开启,1是 0否
- CompanyShortNameRequired string `json:"companyShortNameRequired"` // 公司名称是否必填,1是 0否
- End string `json:"end"` // 活动结束时间
- ID string `json:"id"` // 活动主键id
- IndustrySwName string `json:"industrySwName"` // 行业
- InviteeOpen *string `json:"inviteeOpen"` // 邀请机构是否开启,1是 0否
- InviteeRequired *string `json:"inviteeRequired"` // 邀请机构是否必填,1是 0否
- JobNameOpen string `json:"jobNameOpen"` // 职务是否开启,1是 0否
- JobNameRequired string `json:"jobNameRequired"` // 职务是否必填,1是 0否
- MailOpen string `json:"mailOpen"` // 邮箱是否开启,1是 0否
- MailRequired string `json:"mailRequired"` // 邮箱是否必填,1是 0否
- PersonNameOpen string `json:"personNameOpen"` // 姓名是否开启,1是 0否
- PersonNameRequired string `json:"personNameRequired"` // 姓名是否必填,1是 0否
- PersonTelephoneOpen string `json:"personTelephoneOpen"` // 手机号是否开启,1是 0否
- PersonTelephoneRequired string `json:"personTelephoneRequired"` // 手机号是否必填,1是 0否
- SignUpEnd string `json:"signUpEnd"` // 报名结束时间,适应于报名审核后可入会,为空表示不限制报名时间
- SignUpStart string `json:"signUpStart"` // 报名开始时间,适应于报名审核后可入会,为空表示不限制报名时间
- Start string `json:"start"` // 活动开始时间
- SyncFlag string `json:"syncFlag"` // 同步有效性,同步有效性 1有效,0失效
- Title string `json:"title"` // 活动主题
- Type string `json:"type"` // 路演类型
- URL string `json:"url"` // 活动短链接
- }
- type YidongApifoxModal struct {
- ErrorCode interface{} `json:"errorCode"`
- ErrorMsg interface{} `json:"errorMsg"`
- Result []YidongActivityResult `json:"result"`
- Success bool `json:"success"`
- Timestamp int64 `json:"timestamp"`
- }
- type YidongResultuser 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
- Mail string `json:"mail" comment:"电子邮件"`
- CompanyName string `json:"company_name" comment:"公司名称"`
- JobName string `json:"jobName"` // 职务
- MobileCountryCode string `json:"mobileCountryCode"` // 手机号国际区号码
- PersonName string `json:"personName"` // 姓名
- PersonTelephone string `json:"personTelephone"` // 用户手机号
- StartTime string `json:"startTime"` // 云会议最早入会时间
- StartTimeInteract string `json:"startTimeInteract"` // 互动交流最早入会时间
- StartTimeLive string `json:"startTimeLive"` // 直播最早入会时间
- StartTimeReview string `json:"startTimeReview"` // 回看最早入会时间
- Status string `json:"status"` // 状态,D表示被删除
- UserID string `json:"userId,omitempty"` // 用户id
- SignUpStatus string `json:"sign_up_status" comment:"报名状态"`
- }
- // CheckYidongActivitySignupTime 校验易董的活动是否可以 添加报名
- func CheckYidongActivitySignupTime(activityInfo *cygx.ActivityDetail) (errstr string) {
- if activityInfo.YidongSignUpEnd == "0000-00-00 00:00:00" {
- return
- }
- timeStart := activityInfo.YidongSignUpStart
- timeEnd := activityInfo.YidongSignUpEnd
- resultTimeStart := utils.StrTimeToTime(timeStart) //时间字符串格式转时间格式
- resStart := time.Now().Before(resultTimeStart)
- if resStart {
- errstr = "当前时间不可报名!"
- }
- resultTimeEnd := utils.StrTimeToTime(timeEnd) //时间字符串格式转时间格式
- resend := time.Now().After(resultTimeEnd)
- if resend {
- errstr = "当前时间不可报名!"
- }
- return
- }
- // YidongActivityUserSingnUp 易董的活动添加报名
- func YidongActivityUserSingnUp(items []*cygx.YidongActivitySignup) (err error) {
- url := utils.YiDongHuaWeiYunUrl + "app/hz/signAppointmentsForThird"
- method := "POST"
- for _, v := range items {
- defer func() {
- if err != nil {
- go alarm_msg.SendAlarmMsg("易董的活动添加报名消息失败,Err:"+err.Error(), 3)
- }
- }()
- payload := strings.NewReader(`{
- "activityId": "` + v.YidongActivityId + `",
- "personTelephone":"` + v.Mobile + `",
- "personName": "` + v.RealName + `",
- "companyName": "` + v.CompanyName + `",
- "mobileCountryCode": "+` + v.CountryCode + `",
- "thirdPartySource": "01"
- }`)
- client := &http.Client{}
- req, err := http.NewRequest(method, url, payload)
- if err != nil {
- fmt.Println(err)
- utils.FileLog.Info(err.Error())
- return err
- }
- req.Header.Add("Content-Type", "application/json")
- res, err := client.Do(req)
- if err != nil {
- fmt.Println(err)
- utils.FileLog.Info(err.Error())
- return err
- }
- defer res.Body.Close()
- var ApifoxModal *ApifoxModalSingUpClass
- body, err := ioutil.ReadAll(res.Body)
- if err != nil {
- fmt.Println(err)
- utils.FileLog.Info(err.Error())
- return err
- }
- itemApiLog := new(cygx.CygxThreeApiLog)
- itemApiLog.CreateTime = time.Now()
- itemApiLog.Source = 1
- itemApiLog.Url = url
- itemApiLog.Body = utils.ReplaceSpaceAndWrap(fmt.Sprint(payload))
- itemApiLog.Result = string(body)
- go cygx.AddCygxThreeApiLog(itemApiLog)
- err = json.Unmarshal(body, &ApifoxModal)
- }
- return
- }
- // GetYidongToken 获取易董证通云接口的token
- func GetYidongToken() (token string, err error) {
- defer func() {
- if err != nil {
- go alarm_msg.SendAlarmMsg("获取易董证通云接口的token失败;err:"+err.Error(), 3)
- }
- }()
- cacheKey := utils.YI_DONG_ZHENG_TONG_YUN_TOKEN_KEY
- ttlTime := utils.Rc.GetRedisTTL(cacheKey)
- if ttlTime > 0 {
- token, _ = utils.Rc.RedisString(cacheKey)
- if token != "" {
- return
- }
- }
- url := utils.YiDongZhengTongYunUrl + "oauth/token?grant_type=client_credentials&response_type=token&client_id=" + utils.YiDongZhengTongYunClientId + "&client_secret=" + utils.YiDongZhengTongYunClientSecret
- method := "GET"
- client := &http.Client{}
- req, err := http.NewRequest(method, url, nil)
- if err != nil {
- return
- }
- res, err := client.Do(req)
- if err != nil {
- return
- }
- defer res.Body.Close()
- body, err := ioutil.ReadAll(res.Body)
- if err != nil {
- return
- }
- itemApiLog := new(cygx.CygxThreeApiLog)
- itemApiLog.CreateTime = time.Now()
- itemApiLog.Source = 1
- itemApiLog.Url = url
- itemApiLog.Body = ""
- itemApiLog.Result = string(body)
- go cygx.AddCygxThreeApiLog(itemApiLog)
- var yidongTokenResp *GetYidongTokenResp
- err = json.Unmarshal(body, &yidongTokenResp)
- if err != nil {
- return
- }
- token = yidongTokenResp.AccessToken
- err = utils.Rc.Put(cacheKey, token, time.Second*7000)
- if err != nil {
- return
- }
- return
- }
- // 易董创建/更新路演活动结构体
- type SaveRoadshowDetaiParam struct {
- Id string `description:"易董活动ID,为空时新增,非空时修改" json:"id"`
- PublishFlag string `description:"发布状态,1发布 0 取消发布" json:"publishFlag"`
- Title string `description:"主题" json:"title"`
- Type string `description:"类型:投资策略、深度解读、行业分析、公司分析、自定义活动" json:"type"`
- Start string `description:"开始时间:开始时间与结束时间,日期必须相同" json:"start"`
- End string `description:"结束时间:开始时间与结束时间,日期必须相同" json:"end"`
- CreateUserId string `description:"创建人userId:创建时必填" json:"createUserId"`
- CreatePersonName string `description:"创建人姓名:创建时必填" json:"createPersonName"`
- }
- // 获取创建人信息列表(新)
- func YiDongGetCreateUserList() (userId string) {
- var err error
- defer func() {
- if err != nil {
- fmt.Println(err)
- go alarm_msg.SendAlarmMsg("获取创建人信息列表(新)失败;err:"+err.Error(), 3)
- }
- }()
- token, _ := GetYidongToken()
- if token == "" {
- return
- }
- url := utils.YiDongZhengTongYunUrl + "interact/activityThirdApi/getCreateUserList" + "?access_token=" + token
- method := "POST"
- client := &http.Client{}
- req, err := http.NewRequest(method, url, strings.NewReader(""))
- if err != nil {
- fmt.Println(err)
- return
- }
- req.Header.Add("Content-Type", "application/json")
- res, err := client.Do(req)
- if err != nil {
- fmt.Println(err)
- return
- }
- defer res.Body.Close()
- body, err := ioutil.ReadAll(res.Body)
- if err != nil {
- fmt.Println(err)
- return
- }
- itemApiLog := new(cygx.CygxThreeApiLog)
- itemApiLog.CreateTime = time.Now()
- itemApiLog.Source = 1
- itemApiLog.Url = url
- itemApiLog.Body = ""
- itemApiLog.Result = string(body)
- go cygx.AddCygxThreeApiLog(itemApiLog)
- var yidongResp *YiDongGetCreateUserListResp
- err = json.Unmarshal(body, &yidongResp)
- if err != nil {
- return
- }
- if !yidongResp.Success {
- err = errors.New("获取创建人信息列表(新) 接口失败," + yidongResp.ErrorCode + yidongResp.ErrorMsg)
- return
- }
- if len(yidongResp.Result.PersonList) > 0 {
- for _, v := range yidongResp.Result.PersonList {
- if v.PersonName == "高亦文" {
- userId = v.UserId
- }
- }
- }
- if userId == "" {
- err = errors.New("获取创建人信息列表(新) 接口失败," + yidongResp.ErrorCode + yidongResp.ErrorMsg + string(body))
- return
- }
- return
- }
- //func init() {
- // YiDongUpdateActivityPublish(2149)
- //}
- // YiDongSaveRoadshowDetail 创建/更新路演活动(新)
- func YiDongSaveRoadshowDetail(activityId int) {
- var err error
- defer func() {
- if err != nil {
- fmt.Println(err)
- go alarm_msg.SendAlarmMsg("活动同步到易董失败;err:"+err.Error(), 3)
- }
- }()
- activityInfo, err := cygx.GetAddActivityInfoById(activityId)
- if err != nil {
- fmt.Println(err)
- return
- }
- if activityInfo == nil {
- return
- }
- if activityInfo.IsYidongConduct == 0 {
- return
- }
- token, _ := GetYidongToken()
- if token == "" {
- return
- }
- //C类分析师电话会 不对外发布
- if activityInfo.ActivityTypeId == 7 || activityInfo.IsBClass == 1 {
- activityInfo.PublishStatus = 0
- }
- //if activityInfo.PublishStatus == 0 {
- // return
- //}
- //获取高亦文在易董的用户ID
- var createUserId string
- createUserId = YiDongGetCreateUserList()
- url := utils.YiDongZhengTongYunUrl + "interact/activityThirdApi/saveRoadshowDetail" + "?access_token=" + token
- startTime := activityInfo.ActivityTime
- endTime := utils.StrTimeToTime(startTime).Add(time.Minute * 60).Format(utils.FormatDateTime) // 30分钟后为结束时间
- params := SaveRoadshowDetaiParam{
- Id: activityInfo.YidongActivityIdByCygx,
- PublishFlag: strconv.Itoa(activityInfo.PublishStatus),
- Title: activityInfo.ActivityName,
- Type: "行业分析",
- Start: startTime,
- End: endTime,
- CreateUserId: createUserId,
- CreatePersonName: "高亦文",
- }
- postData, err := json.Marshal(params)
- if err != nil {
- fmt.Println("PostData json.Marshal Err:" + err.Error())
- utils.FileLogCygx.Info("PostData json.Marshal Err:" + err.Error())
- return
- }
- method := "POST"
- client := &http.Client{}
- req, err := http.NewRequest(method, url, strings.NewReader(string(postData)))
- if err != nil {
- fmt.Println(err)
- return
- }
- req.Header.Add("Content-Type", "application/json")
- res, err := client.Do(req)
- if err != nil {
- fmt.Println(err)
- return
- }
- defer res.Body.Close()
- body, err := ioutil.ReadAll(res.Body)
- if err != nil {
- fmt.Println(err)
- return
- }
- itemApiLog := new(cygx.CygxThreeApiLog)
- itemApiLog.CreateTime = time.Now()
- itemApiLog.Source = 1
- itemApiLog.Url = url
- itemApiLog.Body = string(postData)
- itemApiLog.Result = string(body)
- go cygx.AddCygxThreeApiLog(itemApiLog)
- var yidongResp *YiDongSaveRoadshowDetailResp
- err = json.Unmarshal(body, &yidongResp)
- if err != nil {
- return
- }
- if !yidongResp.Success {
- err = errors.New("更新易董建会接口失败," + yidongResp.ErrorCode + yidongResp.ErrorMsg)
- return
- }
- yidongActivityIdByCygx := yidongResp.Result.ActivityId
- YiDongGetRoadshowDetail(activityId, yidongActivityIdByCygx) //获取易董创建的腾讯会议详情,并写入到我们自己的小程序
- YiDongSignAppointmentsForThirdSpeaker(activityId) // 根据填入的主讲人姓名 以嘉宾的身份自动报名
- }
- // YiDongGetRoadshowDetail 获取易董创建的腾讯会议详情,并写入到我们自己的小程序
- func YiDongGetRoadshowDetail(activityId int, yidongActivityIdByCygx string) {
- var err error
- defer func() {
- if err != nil {
- fmt.Println(err)
- go alarm_msg.SendAlarmMsg("易董获取路演详细信息(2.0);err:"+err.Error(), 3)
- }
- }()
- activityInfo, err := cygx.GetAddActivityInfoById(activityId)
- if err != nil {
- fmt.Println(err)
- return
- }
- if activityInfo == nil {
- return
- }
- token, _ := GetYidongToken()
- if token == "" {
- return
- }
- activityInfo.YidongActivityIdByCygx = yidongActivityIdByCygx
- url := utils.YiDongZhengTongYunUrl + "interact/activityManageApi/getRoadshowDetail" + "?access_token=" + token
- if activityInfo.IsYidongConduct == 0 {
- return
- }
- params := YiDongSaveRoadshowDetailIdResp{
- ActivityId: yidongActivityIdByCygx,
- }
- postData, err := json.Marshal(params)
- if err != nil {
- fmt.Println("PostData json.Marshal Err:" + err.Error())
- utils.FileLogCygx.Info("PostData json.Marshal Err:" + err.Error())
- return
- }
- method := "POST"
- client := &http.Client{}
- req, err := http.NewRequest(method, url, strings.NewReader(string(postData)))
- if err != nil {
- fmt.Println(err)
- return
- }
- req.Header.Add("Content-Type", "application/json")
- res, err := client.Do(req)
- if err != nil {
- fmt.Println(err)
- return
- }
- defer res.Body.Close()
- body, err := ioutil.ReadAll(res.Body)
- if err != nil {
- fmt.Println(err)
- return
- }
- itemApiLog := new(cygx.CygxThreeApiLog)
- itemApiLog.CreateTime = time.Now()
- itemApiLog.Source = 1
- itemApiLog.Url = url
- itemApiLog.Body = string(postData)
- itemApiLog.Result = string(body)
- go cygx.AddCygxThreeApiLog(itemApiLog)
- var yidongResp *YiDongGetRoadshowDetailResp
- err = json.Unmarshal(body, &yidongResp)
- if err != nil {
- return
- }
- if !yidongResp.Success {
- err = errors.New("易董获取路演详细信息(2.0)接口失败," + yidongResp.ErrorCode + yidongResp.ErrorMsg)
- return
- }
- MeetingCode := yidongResp.Result.MeetingCode
- if activityInfo.TencentConferenceNumber != "" {
- activityInfo.Body = strings.Replace(activityInfo.Body, activityInfo.TencentConferenceNumber, MeetingCode, -1)
- } else {
- activityInfo.Body += "<p>腾讯会议号:" + MeetingCode + "</p>"
- }
- activityInfo.TencentConferenceNumber = MeetingCode
- err = cygx.UpdateCygxActivityTencentConferenceNumber(activityInfo)
- return
- }
- // 发布路演到活动广场(新)
- func YiDongUpdateActivityPublish(activityId int) {
- var err error
- defer func() {
- if err != nil {
- fmt.Println(err)
- go alarm_msg.SendAlarmMsg("发布路演到活动广场(新);err:"+err.Error(), 3)
- }
- }()
- activityInfo, err := cygx.GetAddActivityInfoById(activityId)
- if err != nil {
- fmt.Println(err)
- return
- }
- if activityInfo == nil {
- return
- }
- //C类分析师电话会 不对外发布
- if activityInfo.ActivityTypeId == 7 {
- activityInfo.PublishStatus = 0
- }
- token, _ := GetYidongToken()
- if token == "" {
- return
- }
- url := utils.YiDongZhengTongYunUrl + "interact/activityThirdApi/updateActivityPublish" + "?access_token=" + token
- if activityInfo.IsYidongConduct == 0 || activityInfo.YidongActivityIdByCygx == "" {
- return
- }
- params := YiDongUpdateActivityPublishResp{
- Id: activityInfo.YidongActivityIdByCygx,
- PublishFlag: strconv.Itoa(activityInfo.PublishStatus),
- }
- postData, err := json.Marshal(params)
- if err != nil {
- fmt.Println("PostData json.Marshal Err:" + err.Error())
- utils.FileLogCygx.Info("PostData json.Marshal Err:" + err.Error())
- return
- }
- method := "POST"
- client := &http.Client{}
- req, err := http.NewRequest(method, url, strings.NewReader(string(postData)))
- if err != nil {
- fmt.Println(err)
- return
- }
- req.Header.Add("Content-Type", "application/json")
- res, err := client.Do(req)
- if err != nil {
- fmt.Println(err)
- return
- }
- defer res.Body.Close()
- body, err := ioutil.ReadAll(res.Body)
- if err != nil {
- fmt.Println(err)
- return
- }
- itemApiLog := new(cygx.CygxThreeApiLog)
- itemApiLog.CreateTime = time.Now()
- itemApiLog.Source = 1
- itemApiLog.Url = url
- itemApiLog.Body = string(postData)
- itemApiLog.Result = string(body)
- go cygx.AddCygxThreeApiLog(itemApiLog)
- var yidongResp *YiDongGetRoadshowDetailResp
- err = json.Unmarshal(body, &yidongResp)
- if err != nil {
- return
- }
- if !yidongResp.Success {
- err = errors.New("发布路演到活动广场(新) 接口失败," + yidongResp.ErrorCode + yidongResp.ErrorMsg)
- return
- }
- if activityInfo.PublishStatus == 0 {
- YiDongUpdateActivityStatus(activityId)
- }
- return
- }
- // 易董创建/更新路演活动结构体
- type SignAppointmentsForThirdParam struct {
- ActivityId string `description:"易董活动ID" json:"activityId"`
- MobileCountryCode string `description:"国际区号注意要带前面+号 " json:"mobileCountryCode"`
- PersonTelephone string `description:"手机号" json:"personTelephone"`
- ThirdPartySource string `description:"第三方来源;弘则固定:01" json:"thirdPartySource"`
- InvestorType string `description:"投资者类型 0个人1机构" json:"investorType"`
- PersonName string `description:"姓名" json:"personName"`
- CompanyName string `description:"公司名" json:"companyName"`
- JoinRole string `description:"1:嘉宾, 2:普通参会人员, 3:会议助理。不传默认取值2" json:"joinRole"`
- OutCallStatus string `description:"1:需要,0:不需要。不传取默认值0" json:"outCallStatus"`
- }
- type YiDongSignAppointmentsForThirdResp struct {
- ErrorCode string `json:"errorCode"` // 错误码,001:活动不存在;002:该活动不支持此渠道报名;003:该手机号或邮箱已经被其他账号提交报名;004:不在报名时间;005:报名人数已满
- ErrorMsg string `json:"errorMsg"` // 错误信息
- Success bool `json:"success"` // 成功标识,true:成功;false:失败。可作为判断报名是否成功的标识
- Timestamp float64 `json:"timestamp"` // 时间戳
- }
- // 根据填入的主讲人姓名 以嘉宾的身份自动报名
- func YiDongSignAppointmentsForThirdSpeaker(activityId int) {
- var err error
- defer func() {
- if err != nil {
- fmt.Println(err)
- go alarm_msg.SendAlarmMsg("易董获取路演详细信息(2.0);err:"+err.Error(), 3)
- }
- }()
- activityInfo, err := cygx.GetAddActivityInfoById(activityId)
- if err != nil {
- fmt.Println(err)
- return
- }
- if activityInfo == nil {
- return
- }
- speaker := activityInfo.Speaker
- if speaker == "" {
- return
- }
- // 获取admin列表-匹配联系人是否为admin用户
- sysUserList, err := cygx.GetAskEmail()
- var personNameites []*cygx.AskEmailRep
- if err != nil {
- return
- }
- //var personName string
- //var personTelephone string
- for _, v := range sysUserList {
- if strings.Contains(speaker, v.Name) && v.Mobile != "" {
- personNameites = append(personNameites, &cygx.AskEmailRep{
- Name: v.Name,
- Mobile: v.Mobile,
- })
- }
- }
- if activityInfo.IsYidongConduct == 0 || len(personNameites) == 0 {
- return
- }
- url := utils.YiDongHuaWeiYunUrl + "app/hz/signAppointmentsForThird"
- for _, v := range personNameites {
- params := SignAppointmentsForThirdParam{
- ActivityId: activityInfo.YidongActivityIdByCygx,
- MobileCountryCode: "+86",
- PersonTelephone: v.Mobile,
- ThirdPartySource: "01",
- InvestorType: "0",
- PersonName: v.Name,
- JoinRole: "1",
- CompanyName: "弘则研究",
- OutCallStatus: "0",
- }
- postData, err := json.Marshal(params)
- if err != nil {
- fmt.Println("PostData json.Marshal Err:" + err.Error())
- utils.FileLogCygx.Info("PostData json.Marshal Err:" + err.Error())
- return
- }
- method := "POST"
- client := &http.Client{}
- req, err := http.NewRequest(method, url, strings.NewReader(string(postData)))
- if err != nil {
- fmt.Println(err)
- return
- }
- req.Header.Add("Content-Type", "application/json")
- res, err := client.Do(req)
- if err != nil {
- fmt.Println(err)
- return
- }
- defer res.Body.Close()
- body, err := ioutil.ReadAll(res.Body)
- if err != nil {
- fmt.Println(err)
- return
- }
- itemApiLog := new(cygx.CygxThreeApiLog)
- itemApiLog.CreateTime = time.Now()
- itemApiLog.Source = 1
- itemApiLog.Url = url
- itemApiLog.Body = string(postData)
- itemApiLog.Result = string(body)
- go cygx.AddCygxThreeApiLog(itemApiLog)
- var yidongResp *YiDongSignAppointmentsForThirdResp
- err = json.Unmarshal(body, &yidongResp)
- if err != nil {
- return
- }
- if !yidongResp.Success {
- err = errors.New(" 根据填入的主讲人姓名 以嘉宾的身份自动报名 接口失败," + yidongResp.ErrorCode + yidongResp.ErrorMsg)
- return
- }
- }
- return
- }
- //func init() {
- // YiDongUpdateActivityStatus(2180)
- //}
- // 删除路演活动(新)
- func YiDongUpdateActivityStatus(activityId int) {
- time.Sleep(3 * time.Second)
- var err error
- defer func() {
- if err != nil {
- fmt.Println(err)
- go alarm_msg.SendAlarmMsg(" 删除路演活动(新);err:"+err.Error(), 3)
- }
- }()
- activityInfo, err := cygx.GetAddActivityInfoById(activityId)
- if err != nil {
- fmt.Println(err)
- return
- }
- if activityInfo == nil {
- return
- }
- //C类分析师电话会 不对外发布
- if activityInfo.ActivityTypeId == 7 {
- activityInfo.PublishStatus = 0
- }
- //如果关联的易董活动ID为空,那么不做处理
- if activityInfo.YidongActivityIdByCygx == "" {
- return
- }
- //如果状态是已发布,而且是易董办会那么就不做处理
- if activityInfo.IsYidongConduct == 1 && activityInfo.PublishStatus == 1 {
- return
- }
- token, _ := GetYidongToken()
- if token == "" {
- return
- }
- url := utils.YiDongZhengTongYunUrl + "interact/activityThirdApi/updateActivityStatus" + "?access_token=" + token
- //if activityInfo.IsYidongConduct == 0 || activityInfo.YidongActivityIdByCygx == "" {
- // return
- //}
- params := YiDongUpdateActivityPublishResp{
- Id: activityInfo.YidongActivityIdByCygx,
- }
- postData, err := json.Marshal(params)
- if err != nil {
- fmt.Println("PostData json.Marshal Err:" + err.Error())
- utils.FileLogCygx.Info("PostData json.Marshal Err:" + err.Error())
- return
- }
- method := "POST"
- client := &http.Client{}
- req, err := http.NewRequest(method, url, strings.NewReader(string(postData)))
- if err != nil {
- fmt.Println(err)
- return
- }
- req.Header.Add("Content-Type", "application/json")
- res, err := client.Do(req)
- if err != nil {
- fmt.Println(err)
- return
- }
- defer res.Body.Close()
- body, err := ioutil.ReadAll(res.Body)
- if err != nil {
- fmt.Println(err)
- return
- }
- itemApiLog := new(cygx.CygxThreeApiLog)
- itemApiLog.CreateTime = time.Now()
- itemApiLog.Source = 1
- itemApiLog.Url = url
- itemApiLog.Body = string(postData)
- itemApiLog.Result = string(body)
- go cygx.AddCygxThreeApiLog(itemApiLog)
- var yidongResp *YiDongGetRoadshowDetailResp
- err = json.Unmarshal(body, &yidongResp)
- if err != nil {
- return
- }
- if !yidongResp.Success {
- err = errors.New("删除路演活动 接口失败," + yidongResp.ErrorCode + yidongResp.ErrorMsg)
- return
- }
- activityInfo.Body = strings.Replace(activityInfo.Body, "腾讯会议号:"+activityInfo.TencentConferenceNumber, "", -1)
- activityInfo.Body = strings.Replace(activityInfo.Body, "<p></p>", "", -1)
- activityInfo.YidongActivityIdByCygx = ""
- activityInfo.TencentConferenceNumber = ""
- err = cygx.UpdateCygxActivityTencentConferenceNumber(activityInfo)
- 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:"上次同步时间(用于筛选更新时间大于同步时间的活动数据)"`
- }
- // 根据条件获取易董建会列表信息
- func GetYiDongActivityListByApi(param *GetYiDongActivityByApiReq) (yiDongResult []YidongActivityResult) {
- var err error
- defer func() {
- if err != nil {
- fmt.Println(err)
- go alarm_msg.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 *YidongApifoxModal
- body, e := ioutil.ReadAll(res.Body)
- if e != nil {
- err = errors.New(" ioutil.ReadAll: " + e.Error())
- return
- }
- //添加请求日志记录
- itemApiLog := new(cygx.CygxThreeApiLog)
- itemApiLog.CreateTime = time.Now()
- itemApiLog.Source = 1
- itemApiLog.Url = url
- itemApiLog.Body = utils.ReplaceSpaceAndWrap(fmt.Sprint(payload))
- itemApiLog.Result = string(body)
- go cygx.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([]YidongActivityResult, 0)
- }
- return
- }
- type GetYiDongActivityMeetByActivityIdReq struct {
- ActivityId string `json:"activityId" description:"活动ID"`
- }
- type YidongApifoxModaluser struct {
- ErrorCode interface{} `json:"errorCode"`
- ErrorMsg interface{} `json:"errorMsg"`
- Result []YidongResultuser `json:"result"`
- Success bool `json:"success"`
- Timestamp int64 `json:"timestamp"`
- }
- // 根据条件获取易董活动ID获取到会信息
- func GetYiDongActivityMeetDataByaAtivityId(ativityId string) (yiDongResult []YidongResultuser) {
- var err error
- defer func() {
- if err != nil {
- fmt.Println(err)
- go alarm_msg.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 *YidongApifoxModaluser
- 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(cygx.CygxThreeApiLog)
- itemApiLog.CreateTime = time.Now()
- itemApiLog.Source = 1
- itemApiLog.Url = url
- itemApiLog.Body = utils.ReplaceSpaceAndWrap(fmt.Sprint(payload))
- itemApiLog.Result = string(body)
- go cygx.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([]YidongResultuser, 0)
- }
- return
- }
- // 根据条件获取易董活动ID获取到会信息
- func GetYiDongActivityMeeting(yidongActivityId string, cygxActivityId int) (yiDongResult []YidongResultuser) {
- var err error
- defer func() {
- if err != nil {
- fmt.Println(err)
- go alarm_msg.SendAlarmMsg(fmt.Sprint("根据条件获取易董建会列表信息 GetYiDongActivityMeeting"+err.Error(), cygxActivityId), 2)
- }
- }()
- //跟易董返回的用户状态修改活动以提交到会状态
- e := cygx.UpdateCygxActivitySubmitMeetingByYidong(yidongActivityId)
- if e != nil {
- err = errors.New("UpdateCygxActivitySubmitMeetingByYidong err: " + e.Error())
- return
- }
- meetDataList := GetYiDongActivityMeetDataByaAtivityId(yidongActivityId)
- var mobiles []string
- var mobileStr string
- var mobileStrMeet string
- mapActivityAttendanceDetail := make(map[string]*cygx.CygxActivityAttendanceDetail)
- if len(meetDataList) > 0 {
- var itemsUpdate []*cygx.CygxActivitySignupDetail
- needAddAttendanc := make([]*cygx.CygxActivityAttendanceDetail, 0)
- for _, vresult := range meetDataList {
- if vresult.PersonTelephone == "" {
- continue
- }
- if vresult.Duration != "" || vresult.DurationReview != "" {
- mobiles = append(mobiles, vresult.PersonTelephone)
- var itemDetail = new(cygx.CygxActivitySignupDetail)
- if vresult.Duration != "" {
- itemDetail.FirstMeetingTime = vresult.StartTime
- itemDetail.LastMeetingTime = vresult.EndTime
- itemDetail.Duration = vresult.Duration
- itemDetail.MeetingStatusStr = "直播"
- } else if vresult.DurationReview != "" {
- itemDetail.FirstMeetingTime = vresult.StartTimeReview
- itemDetail.LastMeetingTime = vresult.EndTimeReview
- itemDetail.Duration = vresult.DurationReview
- itemDetail.MeetingStatusStr = "回放"
- }
- itemDetail.Position = vresult.JobName
- itemDetail.RealName = vresult.PersonName
- itemDetail.Mobile = vresult.PersonTelephone
- itemDetail.OutboundMobile = vresult.PersonTelephone
- itemDetail.IsMeeting = 1
- itemDetail.ActivityId = cygxActivityId
- mapActivityAttendanceDetail[vresult.PersonTelephone] = new(cygx.CygxActivityAttendanceDetail)
- mapActivityAttendanceDetail[vresult.PersonTelephone].FirstMeetingTime = vresult.StartTime
- mapActivityAttendanceDetail[vresult.PersonTelephone].LastMeetingTime = vresult.EndTime
- mapActivityAttendanceDetail[vresult.PersonTelephone].Duration = utils.GetAttendanceDetailSecondsByYiDong(vresult.Duration)
- itemsUpdate = append(itemsUpdate, itemDetail)
- }
- item := new(cygx.CygxActivityAttendanceDetail)
- item.ActivityId = cygxActivityId
- item.Mobile = vresult.PersonTelephone
- if vresult.Duration != "" {
- if vresult.Duration != "" {
- item.FirstMeetingTime = vresult.StartTime
- item.LastMeetingTime = vresult.EndTime
- item.Duration = vresult.Duration
- item.MeetingStatusStr = "直播"
- } else if vresult.DurationReview != "" {
- item.FirstMeetingTime = vresult.StartTimeReview
- item.LastMeetingTime = vresult.EndTimeReview
- item.Duration = vresult.DurationReview
- item.MeetingStatusStr = "回放"
- }
- item.Position = vresult.JobName
- item.RealName = vresult.PersonName
- item.FirstMeetingTime = vresult.StartTime
- item.LastMeetingTime = vresult.EndTime
- item.Duration = vresult.Duration
- item.IsMeetingStr = 1
- mobileStrMeet += "'" + vresult.PersonTelephone + "'" + ","
- item.CreateTime = time.Now()
- needAddAttendanc = append(needAddAttendanc, item)
- }
- mobileStr += "'" + vresult.PersonTelephone + "'" + ","
- }
- lenmobiles := len(mobiles)
- if lenmobiles > 0 {
- var parsYd []interface{}
- var conditionYd string
- conditionYd = ` AND mobile IN (` + utils.GetOrmInReplace(lenmobiles) + `) AND activity_id=? `
- parsYd = append(parsYd, mobiles, cygxActivityId)
- e = cygx.UpdateCygxActivitySignupisMeetList(conditionYd, parsYd)
- if e != nil {
- err = errors.New("UpdateCygxActivitySignupisMeetList err: " + e.Error())
- return
- }
- e = cygx.UpdateActivitySignupDetailMultiByYiDong(itemsUpdate)
- if e != nil {
- err = errors.New("UpdateActivitySignupDetailMultiByYiDong err: " + e.Error())
- return
- }
- }
- mobileStr = strings.TrimRight(mobileStr, ",")
- if mobileStr == "" {
- mobileStr = "1"
- }
- mobileStrMeet = strings.TrimRight(mobileStrMeet, ",")
- if mobileStrMeet == "" {
- mobileStrMeet = "1"
- }
- listUser, e := cygx.GetWxUserOutboundMobile(mobileStr)
- if e != nil {
- err = errors.New("GetWxUserOutboundMobile err: " + e.Error())
- return
- }
- for kAdd, vAdd := range needAddAttendanc {
- for _, v2 := range listUser {
- if v2.OutboundMobile == vAdd.Mobile || v2.Mobile == vAdd.Mobile {
- if needAddAttendanc[kAdd].CompanyId <= 1 {
- needAddAttendanc[kAdd].CompanyId = v2.CompanyId
- needAddAttendanc[kAdd].SellerName = v2.SellerName
- needAddAttendanc[kAdd].CompanyName = v2.CompanyName
- //needAddAttendanc[k].IsMeetingStr = 1
- }
- }
- }
- }
- //参会记录
- e = cygx.AddAttendancDetail(needAddAttendanc, cygxActivityId, mobileStrMeet)
- if e != nil {
- err = errors.New("AddAttendancDetail err: " + e.Error())
- return
- }
- ////处理是否限制报名
- e = AddCygxActivityRestrictSignupByAdmin(cygxActivityId)
- if e != nil {
- err = errors.New("AddCygxActivityRestrictSignupByAdmin err: " + e.Error())
- return
- }
- AddctivitySignupDetailListByHand(needAddAttendanc, cygxActivityId)
- }
- return
- }
|