Browse Source

查研观向10.2

xingzai 1 year ago
parent
commit
6c6c9763e0
9 changed files with 300 additions and 488 deletions
  1. 0 356
      controllers/yidong.go
  2. 25 3
      models/activity.go
  3. 1 1
      models/activity_signup.go
  4. 1 55
      routers/commentsRouter.go
  5. 0 5
      routers/router.go
  6. 6 3
      services/task.go
  7. 227 33
      services/yidong.go
  8. 39 31
      utils/common.go
  9. 1 1
      utils/constants.go

+ 0 - 356
controllers/yidong.go

@@ -1,356 +0,0 @@
-package controllers
-
-import (
-	"encoding/json"
-	"fmt"
-	"hongze/hongze_cygx/models"
-	"hongze/hongze_cygx/services"
-	"hongze/hongze_cygx/utils"
-	"io/ioutil"
-	"net/http"
-	"strings"
-)
-
-type BaseYidongController struct {
-	BaseCommonController
-}
-
-// @Title 取得TOKEN API
-// @Description 取得TOKEN API
-// @Success 200 {object} models.ConfigResp
-// @router /get_token [get]
-func (this *BaseYidongController) GetToken() {
-	br := new(models.BaseResponse).Init()
-	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
-	}()
-
-	type Ydtoklen struct {
-		Success     string `json:"success"`
-		ExpiresIn   int    `json:"expires_in"`
-		AccessToken string `json:"access_token"`
-	}
-	var ydtoklen Ydtoklen
-
-	//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, err := http.NewRequest(method, url, nil)
-	//
-	//if err != nil {
-	//	fmt.Println(err)
-	//	return
-	//}
-	//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
-	//}
-	////fmt.Println(body)
-	//err = json.Unmarshal(body, &ydtoklen)
-	//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))
-	////fmt.Println(body)
-	//fmt.Println(string(body))
-	ydtoklen.AccessToken, _ = services.GetYiDongToken()
-	br.Msg = "获取成功!"
-	br.Ret = 200
-	br.Success = true
-	br.Data = ydtoklen
-}
-
-// @Title 获取路演列表数据
-// @Description 获取路演列表数据
-// @Success 200 {object} models.ConfigResp
-// @router /get/activity/list [get]
-func (this *BaseYidongController) Ativitylist() {
-	br := new(models.BaseResponse).Init()
-	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
-	}()
-	token, _ := services.GetYiDongToken()
-	//url := "https://services-dev.valueonline.cn/interact/activityManageApi/getRoadshowList?access_token=" + Ydtoklen
-	url := utils.YiDongZhengTongYunUrl + "interact/activityManageApi/getRoadshowList?access_token=" + token
-	method := "POST"
-	//payload := strings.NewReader(`{"meetingStatus":"0,1","conveneStartStr":"2022-05-06","conveneEndStr":"2022-05-14",
-	//"lastUpdateTime":"2022-05-08 12:00:00"}`)
-
-	payload := strings.NewReader(`{
-    "meetingStatus": "0"
-}`)
-	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("User-Agent", "apifox/1.0.0 (https://www.apifox.cn)")
-	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))
-	//fmt.Println(body)
-	err = json.Unmarshal(body, &ApifoxModal)
-	if err != nil {
-		fmt.Println("Getres.PublicGetDate Err:", err.Error())
-		utils.FileLog.Info(err.Error())
-		return
-	}
-
-	//fmt.Println(body)
-	br.Msg = "获取成功!"
-	br.Ret = 200
-	br.Success = true
-	br.Data = ApifoxModal
-}
-
-// @Title 获取路演详细信息
-// @Description 获取路演详细信息
-// @Success 200 {object} models.ConfigResp
-// @router /get/activity/detail [get]
-func (this *BaseYidongController) Detail() {
-	br := new(models.BaseResponse).Init()
-	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
-	}()
-	cacheKey := utils.YD_TOKEN
-	Ydtoklen, _ := utils.Rc.RedisString(cacheKey)
-	url := "https://services-dev.valueonline.cn/interact/activityManageApi/getRoadshowDetail?access_token=" + Ydtoklen
-	method := "POST"
-	payload := strings.NewReader(`{"activityId":"9395325920258067463"}`)
-	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
-	}
-	//fmt.Println(body)
-	br.Msg = "获取成功!"
-	br.Ret = 200
-	br.Success = true
-	br.Data = ApifoxModal
-}
-
-// @Title 获取参会人员信息
-// @Description 获取参会人员信息
-// @Success 200 {object} models.ConfigResp
-// @router /get/activity/userList [get]
-func (this *BaseYidongController) UserList() {
-	br := new(models.BaseResponse).Init()
-	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
-	}()
-
-	activityId := this.GetString("ActivityId")
-	cacheKey := utils.YD_TOKEN
-	Ydtoklen, _ := utils.Rc.RedisString(cacheKey)
-	url := "https://services-dev.valueonline.cn/interact/activityManageApi/getAttendPersonList?access_token=" + Ydtoklen
-	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.ApifoxModaluser
-	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
-	}
-	//fmt.Println(body)
-	br.Msg = "获取成功!"
-	br.Ret = 200
-	br.Success = true
-	br.Data = ApifoxModal
-}
-
-// @Title 生成用户相关信息接口
-// @Description 生成用户相关信息接口
-// @Success 200 {object} models.ConfigResp
-// @router /get/activity/createUserInfo [get]
-func (this *BaseYidongController) CreateUserInfo() {
-	br := new(models.BaseResponse).Init()
-	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
-	}()
-
-	url := "https://achievement-test.valueonline.cn/app/hz/createUserInfo"
-	method := "POST"
-	payload := strings.NewReader(`{
-  "phone": "15557270714",
-  "mobileCountryCode": "+86",
-  "sourceFrom": "01"
-}`)
-	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.ApifoxModalUserTgc
-	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
-	}
-	//fmt.Println(body)
-	br.Msg = "获取成功!"
-	br.Ret = 200
-	br.Success = true
-	br.Data = ApifoxModal
-}
-
-// @Title 生成用户相关信息接口
-// @Description 生成用户相关信息接口
-// @Success 200 {object} models.ConfigResp
-// @router /get/activity/userSingnUp [get]
-func (this *BaseYidongController) UserSingnUp() {
-	br := new(models.BaseResponse).Init()
-	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
-	}()
-
-	url := "https://achievement-test.valueonline.cn/app/hz/signAppointmentsForThird"
-	method := "POST"
-
-	payload := strings.NewReader(`{
-    "activityId": "9395325920258067463",
-    "personTelephone": "15557270714",
-    "personName": "沈大爷",
-    "companyName": "弘则研究",
-    "mobileCountryCode": "+86",
-    "thirdPartySource": "01"
-}`)
-	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.ApifoxModalSingUpClass
-	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
-	}
-	//fmt.Println(body)
-	br.Msg = "获取成功!"
-	br.Ret = 200
-	br.Success = true
-	br.Data = ApifoxModal
-}

+ 25 - 3
models/activity.go

@@ -65,6 +65,7 @@ type CygxActivity struct {
 	YidongSignUpEnd         string    `description:"易董活动截止时间"` // 报名结束时间,适应于报名审核后可入会,为空表示不限制报名时间
 	YidongSignUpStart       string    `description:"易董活动截止时间"` // 报名开始时间,适应于报名审核后可入会,为空表示不限制报名时间
 	IsExternalLabel         int       `description:"是否为外部资源 1是,0否"`
+	YidongActivityIdByCygx  string    `description:"通过查研观向建会易董返回的活动ID"`
 }
 
 type Activity struct {
@@ -203,6 +204,7 @@ type ActivityDetail struct {
 	IsYidongConduct         bool                       `description:"是否属于易董办会 1:是 、0:否"`
 	IsCanOutboundCall       int                        `description:"是否提供外呼 1:是 、0:否"`
 	TencentConferenceNumber string                     `description:"腾讯会议号"`
+	YidongActivityIdByCygx  string                     `description:"通过查研观向建会易董返回的活动ID"`
 }
 type ListArticleActivity struct {
 	Title   string `description:"文章标题"`
@@ -976,6 +978,14 @@ func GetActivityListByYiDong() (items []*CygxActivity, err error) {
 	return
 }
 
+// GetActivityListByYiDong 获取易董同步过来的活动列表
+func GetActivityListByYiDongByCygx() (items []*CygxActivity, err error) {
+	o := orm.NewOrm()
+	sql := ` SELECT * FROM cygx_activity WHERE yidong_activity_id_by_cygx != '' `
+	_, err = o.Raw(sql).QueryRows(&items)
+	return
+}
+
 // AddCygxActivity 添加活动
 func AddCygxActivity(item *CygxActivity) (lastId int64, err error) {
 	o := orm.NewOrm()
@@ -986,7 +996,8 @@ func AddCygxActivity(item *CygxActivity) (lastId int64, err error) {
 // 列表
 func GetActivityListByYidong(condition string) (items []*ActivityDetail, err error) {
 	o := orm.NewOrm()
-	sql := `SELECT * FROM cygx_activity WHERE yidong_activity_id != '' `
+	sql := `SELECT * FROM cygx_activity WHERE 1 = 1 
+	AND ( yidong_activity_id != '' OR yidong_activity_id_by_cygx != '' )  `
 	if condition != "" {
 		sql += condition
 	}
@@ -994,11 +1005,22 @@ func GetActivityListByYidong(condition string) (items []*ActivityDetail, err err
 	return
 }
 
+// 列表
+func GetActivityListByCondition(condition string, pars []interface{}) (items []*CygxActivity, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM cygx_activity WHERE  1 =1 `
+	if condition != "" {
+		sql += condition
+	}
+	_, err = o.Raw(sql, pars).QueryRows(&items)
+	return
+}
+
 // UpdateCygxActivitySubmitMeetingByYidong  ,跟易董返回的用户状态修改活动以提交到会状态
 func UpdateCygxActivitySubmitMeetingByYidong(yidongActivityId string) (err error) {
 	o := orm.NewOrm()
-	sql := `UPDATE cygx_activity SET is_submit_meeting = 1 WHERE yidong_activity_id=?  `
-	_, err = o.Raw(sql, yidongActivityId).Exec()
+	sql := `UPDATE cygx_activity SET is_submit_meeting = 1 WHERE yidong_activity_id=? OR  yidong_activity_id_by_cygx = ? `
+	_, err = o.Raw(sql, yidongActivityId, yidongActivityId).Exec()
 	return
 }
 

+ 1 - 1
models/activity_signup.go

@@ -596,7 +596,7 @@ func UpdateCygxActivitySignupisMeetList(condition string, pars []interface{}) (e
 // GetCygxCygxActivitySignupList 获取报名列表信息
 func GetActivitySignupList(condition string, pars []interface{}) (items []*CygxActivitySignup, err error) {
 	sql := `SELECT
-			signup_type,activity_id
+			*
 		FROM
 			cygx_activity_signup AS v
 		WHERE

+ 1 - 55
routers/commentsRouter.go

@@ -484,60 +484,6 @@ func init() {
             Filters: nil,
             Params: nil})
 
-    beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:BaseYidongController"] = append(beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:BaseYidongController"],
-        beego.ControllerComments{
-            Method: "CreateUserInfo",
-            Router: `/get/activity/createUserInfo`,
-            AllowHTTPMethods: []string{"get"},
-            MethodParams: param.Make(),
-            Filters: nil,
-            Params: nil})
-
-    beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:BaseYidongController"] = append(beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:BaseYidongController"],
-        beego.ControllerComments{
-            Method: "Detail",
-            Router: `/get/activity/detail`,
-            AllowHTTPMethods: []string{"get"},
-            MethodParams: param.Make(),
-            Filters: nil,
-            Params: nil})
-
-    beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:BaseYidongController"] = append(beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:BaseYidongController"],
-        beego.ControllerComments{
-            Method: "Ativitylist",
-            Router: `/get/activity/list`,
-            AllowHTTPMethods: []string{"get"},
-            MethodParams: param.Make(),
-            Filters: nil,
-            Params: nil})
-
-    beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:BaseYidongController"] = append(beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:BaseYidongController"],
-        beego.ControllerComments{
-            Method: "UserList",
-            Router: `/get/activity/userList`,
-            AllowHTTPMethods: []string{"get"},
-            MethodParams: param.Make(),
-            Filters: nil,
-            Params: nil})
-
-    beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:BaseYidongController"] = append(beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:BaseYidongController"],
-        beego.ControllerComments{
-            Method: "UserSingnUp",
-            Router: `/get/activity/userSingnUp`,
-            AllowHTTPMethods: []string{"get"},
-            MethodParams: param.Make(),
-            Filters: nil,
-            Params: nil})
-
-    beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:BaseYidongController"] = append(beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:BaseYidongController"],
-        beego.ControllerComments{
-            Method: "GetToken",
-            Router: `/get_token`,
-            AllowHTTPMethods: []string{"get"},
-            MethodParams: param.Make(),
-            Filters: nil,
-            Params: nil})
-
     beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:ChartController"] = append(beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:ChartController"],
         beego.ControllerComments{
             Method: "ChartCollect",
@@ -946,7 +892,7 @@ func init() {
     beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:ReportController"] = append(beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:ReportController"],
         beego.ControllerComments{
             Method: "ResearchDetail",
-            Router: `/researchSummary/detail`,
+            Router: `/researchSummary/detail_test_del`,
             AllowHTTPMethods: []string{"get"},
             MethodParams: param.Make(),
             Filters: nil,

+ 0 - 5
routers/router.go

@@ -114,11 +114,6 @@ func init() {
 				&controllers.ReportBillboardController{},
 			),
 		),
-		web.NSNamespace("/yidong",
-			web.NSInclude(
-				&controllers.BaseYidongController{},
-			),
-		),
 		web.NSNamespace("/htgj",
 			web.NSInclude(
 				&controllers.BaseHtgjController{},

+ 6 - 3
services/task.go

@@ -40,15 +40,18 @@ func Task() {
 
 		getChartListByApi := task.NewTask("getChartListByApi", "0 */10 * * * *", GetChartDetailByChartId) //同步图表
 		task.AddTask("getChartListByApi", getChartListByApi)
+	}
 
+	if utils.IsTask {
 		getYiDongActivity := task.NewTask("getYiDongActivity", "0 */10 * * * *", GetYiDongActivity) //同步易董的活动信息
 		task.AddTask("getYiDongActivity", getYiDongActivity)
 
-		getYiDongActivityMeeting := task.NewTask("getYiDongActivityMeeting", "0 */10 * * * *", GetYiDongActivityMeeting) //同步易董的活动信息
+		getYiDongActivityMeeting := task.NewTask("getYiDongActivityMeeting", "0 */30 * * * *", GetYiDongActivityMeeting) //同步易董的活动信息
 		task.AddTask("getYiDongActivityMeeting", getYiDongActivityMeeting)
-	}
 
-	if utils.IsTask {
+		yiDongSignAppointmentsForThird := task.NewTask("yiDongSignAppointmentsForThird", "0 */10 * * * *", YiDongSignAppointmentsForThird) //会前一小时将,报名信息同步到易董
+		task.AddTask("yiDongSignAppointmentsForThird", yiDongSignAppointmentsForThird)
+
 		//修改任务状
 		updateActivitySattus := task.NewTask("syncTacticsListAddreport", "0 */1 6-23 * * *", UpdateActivitySattus)
 		task.AddTask("updateActivitySattus", updateActivitySattus)

+ 227 - 33
services/yidong.go

@@ -3,6 +3,7 @@ package services
 import (
 	"context"
 	"encoding/json"
+	"errors"
 	"fmt"
 	"hongze/hongze_cygx/models"
 	"hongze/hongze_cygx/utils"
@@ -134,7 +135,7 @@ func GetYiDongToken() (token string, err error) {
 			utils.FileLog.Info(err.Error())
 		}
 	}()
-	cacheKey := utils.YD_TOKEN
+	cacheKey := utils.YI_DONG_ZHENG_TONG_YUN_TOKEN_KEY
 	ttlTime := utils.Rc.GetRedisTTL(cacheKey)
 	if ttlTime > 0 {
 		token, _ = utils.Rc.RedisString(cacheKey)
@@ -245,6 +246,19 @@ func GetYiDongActivity(cont context.Context) (err error) {
 		mapOldYiDong[v.YidongActivityId] = v.YidongActivityId
 		mapOldYiDongBody[v.YidongActivityId] = fmt.Sprint(v.ActivityName, v.Label, v.ChartPermissionId, v.ActivityTime, v.YidongActivityEndTime, v.DistinguishedGuest)
 	}
+
+	//  通过查研观向观向建会的易董活动
+	yiDongByCygxList, err := models.GetActivityListByYiDongByCygx()
+	if err != nil {
+		fmt.Println(err)
+		utils.FileLog.Info(string(err.Error()))
+		return
+	}
+	yiDongByCygxMap := make(map[string]string)
+	for _, v := range yiDongByCygxList {
+		yiDongByCygxMap[v.YidongActivityIdByCygx] = v.YidongActivityIdByCygx
+	}
+
 	var itemsAdd []*models.CygxActivity
 	if len(ApifoxModal.Result) > 0 {
 		actList := ApifoxModal.Result
@@ -253,6 +267,10 @@ func GetYiDongActivity(cont context.Context) (err error) {
 			if v.SyncFlag == "0" {
 				continue
 			}
+			//如果是通过查研观向观向建会的易董活动,就不进行更新的操作
+			if _, ok := yiDongByCygxMap[v.ID]; ok {
+				continue
+			}
 			var item = new(models.CygxActivity)
 			item.YidongActivityId = v.ID
 			item.ActivityTypeId = 3
@@ -524,46 +542,27 @@ func GetActivityTextTime(timeYidong string) (timeText string) {
 	return
 }
 
-func init232() {
-	//YidongActivityGroup("美团", 1623)
-	//GetYiDongActivityMeeting()
-	//GetYiDongActivity()
-	//var timeText string
-	//strTime := "2022-08-18 12:34:00"
-	//startTime := utils.StrTimeToTime(strTime)
-	//week := utils.StrDateTimeToWeek(strTime)
-	//timeStrYmd := startTime.Format(utils.FormatDate)
-	//timeStrHmm := startTime.Format(utils.FormatTime)
-	//timeYmd := utils.StrTimeToTime(timeStrYmd + " 12:00:00") //拼接当天中午12点的时间
-	//var amOrPm string
-	//if startTime.After(timeYmd) {
-	//	amOrPm = " PM"
-	//} else {
-	//	amOrPm = " AM"
-	//}
-	//timeText = timeStrYmd + "(" + week + ")" + timeStrHmm
-	//fmt.Println(week)
-	//fmt.Println(amOrPm)
-	//fmt.Println(strTime)
-	//fmt.Println(timeText)
-}
+//func init() {
+//	GetYiDongActivityMeeting()
+//}
 
 // GetYiDongActivityMeeting获取易董到会详情
 func GetYiDongActivityMeeting(cont context.Context) (err error) {
+	//func GetYiDongActivityMeeting() (err error) {
 	var condition string
-
-	startDate := time.Now().AddDate(0, 0, -2).Format(utils.FormatDateTime)
+	startDate := time.Now().AddDate(0, 0, -1).Format(utils.FormatDateTime)
 	endDate := time.Now().Add(-time.Minute * 120).Format(utils.FormatDateTime)
 	condition += ` AND   activity_time > ` + "'" + startDate + "'"
 	condition += ` AND  activity_time < ` + "'" + endDate + "'"
 	//fmt.Println(startDate)
-	//fmt.Println(endDate)
-	condition = ` `
+
 	artivityListYidong, err := models.GetActivityListByYidong(condition)
 	if err != nil {
 		fmt.Println("GetActivityListByYidong Err:", err.Error())
 		return err
 	}
+	//fmt.Println(artivityListYidong)
+	//return
 	//fmt.Println("artivityListYidong", artivityListYidong)
 	//return err
 	if len(artivityListYidong) == 0 {
@@ -579,9 +578,16 @@ func GetYiDongActivityMeeting(cont context.Context) (err error) {
 			}
 		}()
 
+		var yidongActivityId string
+		if v.YidongActivityId != "" {
+			yidongActivityId = v.YidongActivityId
+		} else if v.YidongActivityIdByCygx != "" {
+			yidongActivityId = v.YidongActivityIdByCygx
+		}
+
 		url := utils.YiDongZhengTongYunUrl + "interact/activityManageApi/getAttendPersonList?access_token=" + token
 		method := "POST"
-		payload := strings.NewReader(`{"activityId":"` + v.YidongActivityId + `"}`)
+		payload := strings.NewReader(`{"activityId":"` + yidongActivityId + `"}`)
 		client := &http.Client{}
 		req, err := http.NewRequest(method, url, payload)
 		if err != nil {
@@ -614,15 +620,17 @@ func GetYiDongActivityMeeting(cont context.Context) (err error) {
 		}
 
 		//跟易董返回的用户状态修改活动以提交到会状态
-		err = models.UpdateCygxActivitySubmitMeetingByYidong(v.YidongActivityId)
+		err = models.UpdateCygxActivitySubmitMeetingByYidong(yidongActivityId)
 		if err != nil {
 			fmt.Println("UpdateCygxActivitySubmitMeetingByYidong Err:", err.Error())
 			return err
 		}
 		var mobiles []string
+		var mobileStr string
+		mapActivityAttendanceDetail := make(map[string]*models.CygxActivityAttendanceDetail)
 		if len(ApifoxModal.Result) > 0 {
 			itemlog := new(models.CygxYidongActivityMeetingApiLog)
-			itemlog.YidongActivityId = v.YidongActivityId
+			itemlog.YidongActivityId = yidongActivityId
 			itemlog.Data = string(body)
 			itemlog.CreateTime = time.Now()
 			err = models.AddCygxYidongActivityMeetingApiLog(itemlog)
@@ -631,7 +639,7 @@ func GetYiDongActivityMeeting(cont context.Context) (err error) {
 				return err
 			}
 			var itemsUpdate []*models.CygxActivitySignupDetail
-
+			needAddAttendanc := make([]*models.CygxActivityAttendanceDetail, 0)
 			for _, vresult := range ApifoxModal.Result {
 				if vresult.EndTime != "" {
 					mobiles = append(mobiles, vresult.PersonTelephone)
@@ -648,10 +656,14 @@ func GetYiDongActivityMeeting(cont context.Context) (err error) {
 					itemDetail.Duration = vresult.Duration
 					itemDetail.IsMeeting = 1
 					itemDetail.ActivityId = v.ActivityId
+					mapActivityAttendanceDetail[vresult.PersonTelephone] = new(models.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)
 				}
 			}
-
+			fmt.Println(mobiles)
 			lenmobiles := len(mobiles)
 			if lenmobiles > 0 {
 				var parsYd []interface{}
@@ -668,9 +680,73 @@ func GetYiDongActivityMeeting(cont context.Context) (err error) {
 					fmt.Println("UpdateActivitySignupDetailMultiByYiDong Err:", err.Error())
 					return err
 				}
+				var condition string
+				var pars []interface{}
+				condition = ` AND do_fail_type = 0 AND mobile IN (` + utils.GetOrmInReplace(lenmobiles) + `) AND activity_id = ?`
+				pars = append(pars, mobiles, v.ActivityId)
+				listSignup, e := models.GetActivitySignupList(condition, pars)
+				if e != nil {
+					err = errors.New("GetActivitySignupList, Err: " + e.Error())
+					return err
+				}
+
+				for _, vSignup := range listSignup {
+					item := new(models.CygxActivityAttendanceDetail)
+					item.ActivityId = vSignup.ActivityId
+					item.RealName = vSignup.RealName
+					item.Mobile = vSignup.Mobile
+					item.CompanyName = vSignup.CompanyName
+					if mapActivityAttendanceDetail[vSignup.Mobile] != nil {
+						item.FirstMeetingTime = mapActivityAttendanceDetail[vSignup.Mobile].FirstMeetingTime
+						item.LastMeetingTime = mapActivityAttendanceDetail[vSignup.Mobile].LastMeetingTime
+						item.Duration = mapActivityAttendanceDetail[vSignup.Mobile].Duration
+						item.IsMeetingStr = 1
+						mobileStr += "'" + vSignup.Mobile + "'" + ","
+					}
+					item.CreateTime = time.Now()
+					needAddAttendanc = append(needAddAttendanc, item)
+				}
+			}
+
+			mobileStr = strings.TrimRight(mobileStr, ",")
+			if mobileStr == "" {
+				mobileStr = "1"
+			}
+			listUser, err := models.GetWxUserOutboundMobile(mobileStr)
+			if err != nil {
+				fmt.Println("GetWxUserOutboundMobile Err:", err.Error())
+				return err
+			}
+			for k, v := range needAddAttendanc {
+				for _, v2 := range listUser {
+					if v2.OutboundMobile == v.Mobile || v2.Mobile == v.Mobile {
+						if needAddAttendanc[k].CompanyId == 0 {
+							needAddAttendanc[k].CompanyId = v2.CompanyId
+							needAddAttendanc[k].SellerName = v2.SellerName
+							needAddAttendanc[k].CompanyName = v2.CompanyName
+							needAddAttendanc[k].IsMeetingStr = 1
+						}
+					}
+				}
+			}
+			//fmt.Println(mobileStr)
+			//参会记录
+			err = models.AddAttendancDetail(needAddAttendanc, v.ActivityId, mobileStr)
+			if err != nil {
+				fmt.Println("AddAttendancDetail Err:", err.Error())
+				return err
+			}
+			////处理是否限制报名
+			err = AddCygxActivityRestrictSignupByAdmin(v.ActivityId)
+			if err != nil {
+				fmt.Println("AddCygxActivityRestrictSignupByAdmin Err:", err.Error())
+				return err
 			}
+
+			go AddctivitySignupDetailByJmcj(needAddAttendanc, v.ActivityId)
 		}
 	}
+
 	return
 }
 
@@ -718,3 +794,121 @@ func YidongActivityGroup(subjectName string, activityId int) (err error) {
 	}
 	return
 }
+
+// 会前一小时将,报名信息同步到易董
+func YiDongSignAppointmentsForThird(cont context.Context) (err error) {
+	defer func() {
+		if err != nil {
+			fmt.Println(err)
+			go utils.SendAlarmMsg("会前一小时将,报名信息同步到易董,同步失败"+err.Error(), 2)
+		}
+	}()
+	var pars []interface{}
+	var condition string
+	startDate := time.Now().Add(+time.Minute * 45).Format(utils.FormatDateTime)
+	endDate := time.Now().Add(+time.Minute * 60).Format(utils.FormatDateTime)
+	condition = " AND yidong_activity_id_by_cygx != ''  AND activity_time  BETWEEN ?  AND  ? "
+	pars = append(pars, startDate, endDate)
+	activityList, err := models.GetActivityListByCondition(condition, pars)
+	if err != nil {
+		return
+	}
+	url := utils.YiDongHuaWeiYunUrl + "app/hz/signAppointmentsForThird"
+	var outCallStatus string
+	for _, v := range activityList {
+		var parsSignUp []interface{}
+		var conditionSignUp string
+		conditionSignUp += ` AND activity_id = ?`
+		parsSignUp = append(parsSignUp, v.ActivityId)
+		conditionSignUp += `   AND do_fail_type = 0 `
+		listSignUp, e := models.GetActivitySignuListByUser(conditionSignUp, parsSignUp)
+		if e != nil {
+			err = errors.New("GetActivitySignuListByUser, Err: " + e.Error())
+			return
+		}
+		if len(listSignUp) == 0 {
+			continue
+		}
+		for _, vS := range listSignUp {
+			if vS.SignupType == 1 {
+				outCallStatus = "1"
+			} else {
+				outCallStatus = "0"
+			}
+			params := SignAppointmentsForThirdParam{
+				ActivityId:        v.YidongActivityIdByCygx,
+				MobileCountryCode: "+" + vS.CountryCode,
+				PersonTelephone:   vS.OutboundMobile,
+				ThirdPartySource:  "01",
+				InvestorType:      "0",
+				PersonName:        vS.RealName,
+				JoinRole:          "2",
+				CompanyName:       vS.CompanyName,
+				OutCallStatus:     outCallStatus,
+			}
+			postData, e := json.Marshal(params)
+			if e != nil {
+				err = e
+				fmt.Println("PostData json.Marshal Err:" + err.Error())
+				utils.FileLog.Info("PostData json.Marshal Err:" + err.Error())
+				return
+			}
+			method := "POST"
+			client := &http.Client{}
+			req, e := http.NewRequest(method, url, strings.NewReader(string(postData)))
+			if e != nil {
+				err = e
+				fmt.Println(err)
+				return
+			}
+			req.Header.Add("Content-Type", "application/json")
+			res, e := client.Do(req)
+			if e != nil {
+				err = e
+				return
+			}
+			defer res.Body.Close()
+			body, e := ioutil.ReadAll(res.Body)
+			if e != nil {
+				err = e
+				return
+			}
+			itemApiLog := new(models.CygxThreeApiLog)
+			itemApiLog.CreateTime = time.Now()
+			itemApiLog.Source = 1
+			itemApiLog.Url = url
+			itemApiLog.Body = string(postData)
+			itemApiLog.Result = string(body)
+			go models.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
+}
+
+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"` // 时间戳
+}

+ 39 - 31
utils/common.go

@@ -20,7 +20,7 @@ import (
 	"time"
 )
 
-//随机数种子
+// 随机数种子
 var rnd = rand.New(rand.NewSource(time.Now().UnixNano()))
 
 func GetRandString(size int) string {
@@ -57,19 +57,19 @@ func StringsToJSON(str string) string {
 	return jsons
 }
 
-//序列化
+// 序列化
 func ToString(v interface{}) string {
 	data, _ := json.Marshal(v)
 	return string(data)
 }
 
-//md5加密
+// md5加密
 func MD5(data string) string {
 	m := md5.Sum([]byte(data))
 	return hex.EncodeToString(m[:])
 }
 
-//md5加密
+// md5加密
 func Get16MD5Encode(data string) string {
 	m := md5.Sum([]byte(data))
 	encodehex := hex.EncodeToString(m[:])
@@ -98,7 +98,7 @@ func GetToday(format string) string {
 	return today
 }
 
-//获取今天剩余秒数
+// 获取今天剩余秒数
 func GetTodayLastSecond() time.Duration {
 	today := GetToday(FormatDate) + " 23:59:59"
 	end, _ := time.ParseInLocation(FormatDateTime, today, time.Local)
@@ -120,7 +120,7 @@ func GetBrithDate(idcard string) string {
 	return GetToday(FormatDate)
 }
 
-//处理性别
+// 处理性别
 func WhichSexByIdcard(idcard string) string {
 	var sexs = [2]string{"女", "男"}
 	length := len(idcard)
@@ -134,7 +134,7 @@ func WhichSexByIdcard(idcard string) string {
 	return "男"
 }
 
-//截取小数点后几位
+// 截取小数点后几位
 func SubFloatToString(f float64, m int) string {
 	n := strconv.FormatFloat(f, 'f', -1, 64)
 	if n == "" {
@@ -153,14 +153,14 @@ func SubFloatToString(f float64, m int) string {
 	return newn[0] + "." + newn[1][:m]
 }
 
-//截取小数点后几位
+// 截取小数点后几位
 func SubFloatToFloat(f float64, m int) float64 {
 	newn := SubFloatToString(f, m)
 	newf, _ := strconv.ParseFloat(newn, 64)
 	return newf
 }
 
-//获取相差时间-年
+// 获取相差时间-年
 func GetYearDiffer(start_time, end_time string) int {
 	t1, _ := time.ParseInLocation("2006-01-02", start_time, time.Local)
 	t2, _ := time.ParseInLocation("2006-01-02", end_time, time.Local)
@@ -171,7 +171,7 @@ func GetYearDiffer(start_time, end_time string) int {
 	return age
 }
 
-//获取相差时间-秒
+// 获取相差时间-秒
 func GetSecondDifferByTime(start_time, end_time time.Time) int64 {
 	diff := end_time.Unix() - start_time.Unix()
 	return diff
@@ -198,7 +198,7 @@ func StrListToString(strList []string) (str string) {
 	return ""
 }
 
-//Token
+// Token
 func GetToken() string {
 	randStr := GetRandString(64)
 	token := MD5(randStr + Md5Key)
@@ -206,42 +206,42 @@ func GetToken() string {
 	return strings.ToUpper(token + GetRandString(tokenLen))
 }
 
-//数据没有记录
+// 数据没有记录
 func ErrNoRow() string {
 	return "<QuerySeter> no row found"
 }
 
-//校验邮箱格式
+// 校验邮箱格式
 func ValidateEmailFormatat(email string) bool {
 	reg := regexp.MustCompile(RegularEmail)
 	return reg.MatchString(email)
 }
 
-//验证是否是手机号
+// 验证是否是手机号
 func ValidateMobileFormatat(mobileNum string) bool {
 	reg := regexp.MustCompile(RegularMobile)
 	return reg.MatchString(mobileNum)
 }
 
-//验证是否是固定电话
+// 验证是否是固定电话
 func ValidateFixedTelephoneFormatat(mobileNum string) bool {
 	reg := regexp.MustCompile(RegularFixedTelephone)
 	return reg.MatchString(mobileNum)
 }
 
-//验证是否是固定电话宽松
+// 验证是否是固定电话宽松
 func ValidateFixedTelephoneFormatatEasy(mobileNum string) bool {
 	reg := regexp.MustCompile(RegularFixedTelephoneEasy)
 	return reg.MatchString(mobileNum)
 }
 
-//判断文件是否存在
+// 判断文件是否存在
 func FileIsExist(filePath string) bool {
 	_, err := os.Stat(filePath)
 	return err == nil || os.IsExist(err)
 }
 
-//获取图片扩展名
+// 获取图片扩展名
 func GetImgExt(file string) (ext string, err error) {
 	var headerByte []byte
 	headerByte = make([]byte, 8)
@@ -284,7 +284,7 @@ func GetImgExt(file string) (ext string, err error) {
 	return ext, nil
 }
 
-//保存图片
+// 保存图片
 func SaveImage(path string, img image.Image) (err error) {
 	//需要保持的文件
 	imgfile, err := os.Create(path)
@@ -294,7 +294,7 @@ func SaveImage(path string, img image.Image) (err error) {
 	return err
 }
 
-//保存base64数据为文件
+// 保存base64数据为文件
 func SaveBase64ToFile(content, path string) error {
 	data, err := base64.StdEncoding.DecodeString(content)
 	if err != nil {
@@ -424,7 +424,7 @@ func GetWilsonScore(p, n float64) float64 {
 	return toFixed(((p+1.9208)/(p+n)-1.96*math.Sqrt(p*n/(p+n)+0.9604)/(p+n))/(1+3.8416/(p+n)), 2)
 }
 
-//将中文数字转化成数字,比如 第三百四十五章,返回第345章 不支持一亿及以上
+// 将中文数字转化成数字,比如 第三百四十五章,返回第345章 不支持一亿及以上
 func ChangeWordsToNum(str string) (numStr string) {
 	words := ([]rune)(str)
 	num := 0
@@ -571,7 +571,7 @@ func ConvertToFormatDay(excelDaysString string) string {
 	return resultTime
 }
 
-//字符串转换为time
+// 字符串转换为time
 func StrTimeToTime(strTime string) time.Time {
 	timeLayout := "2006-01-02 15:04:05"  //转化所需模板
 	loc, _ := time.LoadLocation("Local") //重要:获取时区
@@ -579,7 +579,7 @@ func StrTimeToTime(strTime string) time.Time {
 	return resultTime
 }
 
-//时间格式去掉时分秒
+// 时间格式去掉时分秒
 func TimeRemoveHms(strTime string) string {
 	var Ymd string
 	var resultTime = StrTimeToTime(strTime)
@@ -594,7 +594,7 @@ func TimeRemoveHms(strTime string) string {
 	return Ymd
 }
 
-//时间格式去掉时分秒
+// 时间格式去掉时分秒
 func TimeRemoveHms2(strTime string) string {
 	var Ymd string
 	var resultTime = StrTimeToTime(strTime)
@@ -609,7 +609,7 @@ func TimeRemoveHms2(strTime string) string {
 	return Ymd
 }
 
-//判断时间是当年的第几周
+// 判断时间是当年的第几周
 func WeekByDate(t time.Time) string {
 	var resultSAtr string
 	//t = t.AddDate(0, 0, -8) // 减少八天跟老数据标题统一
@@ -650,7 +650,7 @@ func Mp3Time(videoPlaySeconds string) string {
 	return timeStr
 }
 
-//用户参会时间转换
+// 用户参会时间转换
 func GetAttendanceDetailSeconds(secondNum int) string {
 	var timeStr string
 	if secondNum <= 60 {
@@ -677,6 +677,14 @@ func GetAttendanceDetailSeconds(secondNum int) string {
 	return timeStr
 }
 
+// 用户参会时间转换
+func GetAttendanceDetailSecondsByYiDong(str string) string {
+	var timeStr string
+	timeStr = strings.Replace(str, ":", "'", -1)
+	timeStr += "''"
+	return timeStr
+}
+
 // GetOrmInReplace 获取orm的in查询替换?的方法
 func GetOrmInReplace(num int) string {
 	template := make([]string, num)
@@ -707,7 +715,7 @@ func GetLocalIP() (ip string, err error) {
 	return
 }
 
-//字符串类型时间转周几
+// 字符串类型时间转周几
 func StrDateTimeToWeek(strTime string) string {
 	var WeekDayMap = map[string]string{
 		"Monday":    "周一",
@@ -724,7 +732,7 @@ func StrDateTimeToWeek(strTime string) string {
 	return WeekDayMap[staweek_int]
 }
 
-//ReplaceSpaceAndWrap 去除空格跟换行
+// ReplaceSpaceAndWrap 去除空格跟换行
 func ReplaceSpaceAndWrap(str string) string {
 	// 去除空格
 	str = strings.Replace(str, " ", "", -1)
@@ -813,10 +821,10 @@ func GetLastMonthLastDay() time.Time {
 	return nowMonthLastDay
 }
 
-//字符串转换为time
+// 字符串转换为time
 func StrDateToTime(strTime string) time.Time {
-	timeLayout := "2006-01-02"  //转化所需模板
+	timeLayout := "2006-01-02"           //转化所需模板
 	loc, _ := time.LoadLocation("Local") //重要:获取时区
 	resultTime, _ := time.ParseInLocation(timeLayout, strTime, loc)
 	return resultTime
-}
+}

+ 1 - 1
utils/constants.go

@@ -118,7 +118,7 @@ const (
 )
 
 const (
-	YD_TOKEN = "yidong_token"
+	YI_DONG_ZHENG_TONG_YUN_TOKEN_KEY = "YI_DONG_ZHENG_TONG_YUN_TOKEN_KEY" //易董证通云的token,存Redis使用
 )
 
 const (