浏览代码

进门财经同步参会用户身份字段

xingzai 3 年之前
父节点
当前提交
904a24134c

+ 1 - 1
controllers/article.go

@@ -90,7 +90,7 @@ func (this *ArticleController) Detail() {
 		detail.Body = strings.Replace(detail.Body, "<p data-f-id=\"pbf\" style=\"text-align: center; font-size: 14px; margin-top: 30px; opacity: 0.65; font-family: sans-serif;\">Powered by <a href=\"https://www.froala.com/wysiwyg-editor?pb=1\" title=\"Froala Editor\">Froala Editor</a></p>", "", -1)
 		detail.Body = strings.Replace(detail.Body, "pre", "div", -1)
 		//detail.Abstract = html.UnescapeString(detail.Abstract)
-		detail.Abstract, _ = services.GetReportContentTextSub(detail.Abstract)
+		detail.Abstract, _ = services.GetReportContentTextSubNew(detail.Abstract)
 		if companyPermission == "" {
 			if applyCount > 0 {
 				hasPermission = 5

+ 2 - 0
models/activity_attendance_detail.go

@@ -23,6 +23,7 @@ type CygxActivityAttendanceDetail struct {
 	CreateTime            time.Time `description:"创建时间"`
 	Position              string    `description:"职位"`
 	IsMeetingStr          int       `description:"是否到会,1到会,0未到会"`
+	UseridEntity          int       `description:"参会者身份. 1:主讲人, 2:主持人, 3:嘉宾, 4:普通参会者, 5:联席主讲人, 6:会议助理"`
 }
 
 //添加会议提醒信息
@@ -99,6 +100,7 @@ type RoadshowData struct {
 	JoinType          int       `description:"参与方式, 1网络, 2电话"`
 	DataType          int       `description:"数据类型: 1直播, 2回放"`
 	Occupation        string    `description:"职位"`
+	UseridEntity      int       `description:"参会者身份. 1:主讲人, 2:主持人, 3:嘉宾, 4:普通参会者, 5:联席主讲人, 6:会议助理"`
 }
 
 func AddAttendancDetail(items []*CygxActivityAttendanceDetail, activityId int, mobileStr string) (err error) {

+ 12 - 1
models/article.go

@@ -20,6 +20,7 @@ type CygxArticle struct {
 	SubCategoryName  string `description:"二级分类"`
 	PublishStatus    int    `description:"发布状态"`
 	CategoryId       int    `description:"分类id"`
+	CategoryIdTwo    int    `description:"分类id用作修改匹配类型使用"`
 	ExpertBackground string `description:"专家背景"`
 	ExpertNumber     string `description:"专家编号"`
 	InterviewDate    string `description:"访谈日期"`
@@ -31,7 +32,6 @@ type CygxArticle struct {
 	ReportType       int    `description:"报告类型,1行业报告,2产业报告,0无"`
 	FileLink         string `description:"下载预览链接"`
 	MatchTypeName    string `description:"匹配类型"`
-
 	Periods          string `description:"期数"`
 	ReportLink       string `description:"报告链接"`
 	ArticleType      string `description:"文章类型 文章类型,lyjh:路演精华 "`
@@ -41,6 +41,8 @@ type CygxArticle struct {
 	VideoUrl         string `description:"音频文件URL"`
 	VideoName        string `description:"音频文件名称"`
 	VideoPlaySeconds string `description:"音频播放时长"`
+	Stock            string `description:"个股标签"`
+	FieldName        string `description:"产业标签"`
 }
 
 type CygxArticleEs struct {
@@ -518,6 +520,15 @@ type ArticleResultApidate struct {
 	Author        ArticleResultApiAuthor   `json:"author"`
 	Industry      ArticleResultApiIndustry `json:"industry"`
 	Type          ArticleResultApiType     `json:"type"`
+	Stock         []string                 `json:"stock"`
+	Field         ArticleField             `json:"field"`
+}
+
+type ArticleField struct {
+	Id          int    `json:"id"`
+	Name        string `json:"name"`
+	Description string `json:"description"`
+	IndustryId  int    `json:"industry_id"`
 }
 
 type ArticleSeries struct {

+ 2 - 0
models/db.go

@@ -93,5 +93,7 @@ func init() {
 		new(CompanyProduct),
 		new(CompanyProductLog),
 		new(UserSellerRelation),
+		new(CygxShanghaiCompanyLog),
+		new(CygxShanghaiErrLog),
 	)
 }

+ 2 - 2
models/report_selection.go

@@ -126,11 +126,11 @@ func GetReportSelectionlogListAll(articleId int) (items []*CygxReportSelectionLo
 //列表
 func GetReportSelectionlogSonListAll(articleId, chartPermissionId int) (items []*CygxReportSelectionLogDetail, err error) {
 	o := orm.NewOrm()
-	sql := `SELECT c.permission_name ,s.subject_name , l.* 
+	sql := `SELECT c.permission_name , l.* 
 			FROM
 			cygx_report_selection_log AS l
 			INNER JOIN chart_permission AS c ON c.chart_permission_id = l.chart_permission_id 
-			INNER JOIN cygx_industrial_subject AS s ON s.industrial_subject_id = l.industrial_subject_id 
+			LEFT JOIN cygx_industrial_subject AS s ON s.industrial_subject_id = l.industrial_subject_id 
 			WHERE l.article_id = ? AND l.chart_permission_id =?`
 	_, err = o.Raw(sql, articleId, chartPermissionId).QueryRows(&items)
 	return

+ 1 - 1
models/seller.go

@@ -25,7 +25,7 @@ func GetSellerByCompanyId(companyId int) (item *AdminItem, err error) {
 	sql := ` SELECT b.*,c.open_id,c.user_id,a.company_name FROM company_product AS a
 			INNER JOIN admin AS b ON a.seller_id=b.admin_id
 			LEFT JOIN wx_user AS c ON b.mobile=c.mobile
-			WHERE a.company_id=? `
+			WHERE a.company_id=? AND role_type_code LIKE '%rai%'`
 	err = o.Raw(sql, companyId).QueryRow(&item)
 	return
 }

+ 214 - 0
models/send_company_user.go

@@ -0,0 +1,214 @@
+package models
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+type CompanyJson struct {
+	CompanyName  string `json:"name"`        //公司名称
+	ShortName    string `json:"short_name"`  //公司简称
+	CreditCode   string `json:"social"`      //社会信用代码
+	City         string `json:"city"`        //所在地级市或直辖市
+	SignType     string `json:"sign_type"`   //客户重要度(A类、B类、C类、D类)
+	Fe           string `json:"f_e"`         //客户类型(FICC、权益、策略)
+	IndustryName string `json:"industry"`    //所属行业(公募、私募、券商资管、保险、海外、其他类型)
+	Mobile       string `json:"sale_phone"`  //所属销售(销售手机号)
+	Status       string `json:"status"`      //客户状态(正式、试用)
+	Permission   string `json:"permissions"` //客户权限(医药,科技,智造,消费,策略,专家,路演服务,研选)
+	StartDate    string `json:"start_time"`  //服务期限开始时间
+	EndDate      string `json:"end_time"`    //服务期限结束时间
+	Info         string `json:"info"`        //简介
+	CreatedTime  string `json:"create_time"` //创建时间
+	//CreatedTimes string //创建时间
+	EndDateTime time.Time //创建时间
+}
+
+type UserJson struct {
+	CreditCode          string `json:"social"`            //社会信用代码
+	RealName            string `json:"name"`              //昵称
+	Mobile              string `json:"phone"`             //手机号1
+	CountryCode         string `json:"area_code"`         //国家号1(+86..)
+	OutboundMobile      string `json:"phone2"`            //手机号2
+	OutboundCountryCode string `json:"area_code2"`        //国家号2(+86..)
+	Telephone           string `json:"machine"`           //座机
+	MachineAreaCode     string `json:"machine_area_code"` //座机国家号(+86..)
+	Sex                 string `json:"sex"`               //性别(男、女)
+	Email               string `json:"email"`             //电子邮箱,比如 example@qq.com
+	Department          string `json:"department"`        //部门
+	Position            string `json:"position"`          //职位
+	Level               string `json:"level"`             //职位等级(研究员、基金经理、部门总监)
+	IsMaker             string `json:"policymakers"`      //是否决策人(是、否)
+	CreatedTime         string `json:"create_time"`       //创建时间
+
+}
+type CompanyJsonList struct {
+	SyncData *[]CompanyJson `json:"sync_data"`
+}
+
+//获取公司
+func GetSendCompanyList() (items []*CompanyJson, err error) {
+	o := orm.NewOrm()
+	sql := ` SELECT
+			c.company_name,
+			c.company_id as cid, 
+			c.credit_code,
+			c.city,
+			p.industry_name,
+			am.real_name,
+			am.mobile,
+			a.status,
+			p.end_date as end_date_time,
+			UNIX_TIMESTAMP( p.start_date ) AS start_date,
+			UNIX_TIMESTAMP( p.end_date ) AS end_date,
+			UNIX_TIMESTAMP( a.created_time ) AS created_time,
+			(SELECT GROUP_CONCAT(DISTINCT b.chart_permission_name  ORDER BY b.sort ASC  SEPARATOR ',')
+					FROM company_report_permission AS a
+					INNER JOIN chart_permission AS b ON a.chart_permission_id=b.chart_permission_id
+					INNER JOIN company_product AS c ON a.company_id=c.company_id AND a.product_id=c.product_id
+					WHERE  a.company_id=cid
+					AND c.enabled = 1 
+					AND b.cygx_auth=1
+					AND c.status IN('正式','试用')
+					AND a.status IN('正式','试用')) AS permission
+		FROM
+			company_report_permission AS a
+			INNER JOIN chart_permission AS b ON a.chart_permission_id = b.chart_permission_id
+			INNER JOIN company_product AS p ON a.company_id = p.company_id
+			INNER JOIN company AS c ON c.company_id = a.company_id
+			INNER JOIN admin AS am ON am.admin_id = p.seller_id 
+			AND a.product_id = p.product_id 
+		WHERE
+			1 = 1 
+			AND c.enabled = 1 
+			AND b.cygx_auth = 1
+			AND p.STATUS IN ( '正式', '试用' ) 
+			AND a.STATUS IN ( '正式', '试用' )
+			AND( c.credit_code LIKE '91%'  OR  c.credit_code LIKE 'HZ%' )
+			AND p.product_id = 2
+		GROUP BY
+			c.company_id  `
+	_, err = o.Raw(sql).QueryRows(&items)
+	return
+}
+
+//获取FICC公司
+func GetSendCompanyFiccList() (items []*CompanyJson, err error) {
+	o := orm.NewOrm()
+	sql := ` SELECT
+			c.company_name,
+			c.company_id AS cid,
+			c.credit_code,
+			c.city,
+			p.industry_name,
+			am.real_name,
+			am.mobile,
+			a.status,
+			p.end_date AS end_date_time,
+			UNIX_TIMESTAMP( p.start_date ) AS start_date,
+			UNIX_TIMESTAMP( p.end_date ) AS end_date,
+			UNIX_TIMESTAMP( a.created_time ) AS created_time,
+			(
+			SELECT
+				GROUP_CONCAT( DISTINCT b.chart_permission_name ORDER BY b.sort ASC SEPARATOR ',' ) 
+			FROM
+				company_report_permission AS a
+				INNER JOIN chart_permission AS b ON a.chart_permission_id = b.chart_permission_id
+				INNER JOIN company_product AS c ON a.company_id = c.company_id 
+				AND a.product_id = c.product_id 
+			WHERE
+				a.company_id = cid 
+				AND c.enabled = 1 
+				AND b.cygx_auth = 1 
+				AND c.STATUS IN ( '正式', '试用' ) 
+			AND a.STATUS IN ( '正式', '试用' )) AS permission 
+		FROM
+			company_report_permission AS a
+			INNER JOIN chart_permission AS b ON a.chart_permission_id = b.chart_permission_id
+			INNER JOIN company_product AS p ON a.company_id = p.company_id
+			INNER JOIN company AS c ON c.company_id = a.company_id
+			INNER JOIN admin AS am ON am.admin_id = p.seller_id 
+			AND a.product_id = p.product_id 
+		WHERE
+			1 = 1 
+			AND c.enabled = 1 
+			AND b.cygx_auth = 1
+			AND p.STATUS IN ( '正式', '试用' ) 
+			AND a.STATUS IN ( '正式', '试用' ) 
+			AND ( c.credit_code LIKE '91%' OR c.credit_code LIKE 'HZ%' ) 
+			AND p.product_id = 1
+			AND c.company_id NOT IN (
+			SELECT
+				c.company_id 
+			FROM
+				company_report_permission AS a
+				INNER JOIN chart_permission AS b ON a.chart_permission_id = b.chart_permission_id
+				INNER JOIN company_product AS p ON a.company_id = p.company_id
+				INNER JOIN company AS c ON c.company_id = a.company_id
+				INNER JOIN admin AS am ON am.admin_id = p.seller_id 
+				AND a.product_id = p.product_id 
+			WHERE
+				1 = 1 
+				AND c.enabled = 1 
+				AND b.cygx_auth = 1 
+				AND p.STATUS IN ( '正式', '试用' ) 
+				AND a.STATUS IN ( '正式', '试用' ) 
+				AND ( c.credit_code LIKE '91%' OR c.credit_code LIKE 'HZ%' ) 
+				AND p.product_id = 2
+			GROUP BY
+				c.company_id 
+			) 
+		GROUP BY
+			c.company_id  `
+	_, err = o.Raw(sql).QueryRows(&items)
+	return
+}
+
+//获取用户
+func GetSendUserList() (items []*UserJson, err error) {
+	o := orm.NewOrm()
+	sql := ` SELECT
+			c.credit_code,
+			u.real_name,
+			u.mobile,
+			u.country_code,
+			u.outbound_mobile,
+			u.outbound_country_code,
+			u.telephone,
+			u.sex,
+			u.is_maker,
+			c.company_id,
+			UNIX_TIMESTAMP( us.create_time ) AS created_time 
+		FROM
+			wx_user AS u
+			INNER JOIN company AS c ON c.company_id = u.company_id
+			INNER JOIN user_seller_relation AS us ON us.user_id = u.user_id 
+		WHERE
+			1 = 1 
+			AND u.company_id IN (
+			SELECT
+				c.company_id 
+			FROM
+				company_report_permission AS a
+				INNER JOIN chart_permission AS b ON a.chart_permission_id = b.chart_permission_id
+				INNER JOIN company_product AS p ON a.company_id = p.company_id
+				INNER JOIN company AS c ON c.company_id = a.company_id
+				INNER JOIN admin AS am ON am.admin_id = p.seller_id 
+				AND a.product_id = p.product_id 
+			WHERE
+				1 = 1 
+				AND c.enabled = 1 
+				AND b.cygx_auth = 1 
+				AND p.STATUS IN ( '正式', '试用' ) 
+				AND a.STATUS IN ( '正式', '试用' )
+				AND us.create_time  != ''
+			GROUP BY
+				c.company_id 
+			)
+			AND us.create_time != '' 
+			AND u.real_name != '' 
+			AND u.mobile != '' 
+			AND ( c.credit_code LIKE '91%' OR c.credit_code LIKE 'HZ%' ) GROUP BY u.user_id   ORDER BY  c.company_id  DESC `
+	_, err = o.Raw(sql).QueryRows(&items)
+	return
+}

+ 36 - 0
models/shanghai_company_log.go

@@ -0,0 +1,36 @@
+package models
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+type CygxShanghaiCompanyLog struct {
+	Id         int `orm:"column(id);pk"`
+	Url        string
+	Body       string
+	Result     string
+	CreateTime time.Time
+}
+
+//添加日志记录
+func AddCygxShanghaiCompanyLog(item *CygxShanghaiCompanyLog) (lastId int64, err error) {
+	o := orm.NewOrm()
+	lastId, err = o.Insert(item)
+	return
+}
+
+type CygxShanghaiErrLog struct {
+	Id         int `orm:"column(id);pk"`
+	ErrVal     string
+	ErrMsg     string
+	ErrType    string
+	CreateTime time.Time
+}
+
+//添加日志记录
+func AddCygxShanghaiErrLog(item *CygxShanghaiErrLog) (lastId int64, err error) {
+	o := orm.NewOrm()
+	lastId, err = o.Insert(item)
+	return
+}

+ 2 - 0
models/tactics.go

@@ -77,6 +77,8 @@ type Tactics2 struct {
 	IsSummary       int       `description:"是否是纪要库,1是,0否"`
 	IsReport        int       `description:"是否属于报告,1是,0否"`
 	ReportType      int       `description:"报告类型,1行业报告,2产业报告,0无"`
+	Stock           string    `description:"个股标签"`
+	FieldName       string    `description:"产业标签"`
 }
 
 func GetTacticsList2(endDate string) (list []*Tactics2, err error) {

+ 13 - 10
services/activity.go

@@ -52,15 +52,16 @@ func SendActivityBeginMsg(cont context.Context) (err error) {
 		openIdItem.OpenId = v.OpenId
 		openIdList := make([]*models.OpenIdList, 0)
 		openIdList = append(openIdList, openIdItem)
-		if v.FailType == 0 {
-			reserveResults = "成功"
-		} else if v.FailType == 1 {
-			reserveResults = "失败(总人数已满)"
-		} else if v.FailType == 2 {
-			reserveResults = "失败(单机构超限制)"
-		} else if v.FailType == 3 {
-			reserveResults = "失败(爽约次数超限)"
-		}
+		//if v.FailType == 0 {
+		//	reserveResults = "成功"
+		//} else if v.FailType == 1 {
+		//	reserveResults = "失败(总人数已满)"
+		//} else if v.FailType == 2 {
+		//	reserveResults = "失败(单机构超限制)"
+		//} else if v.FailType == 3 {
+		//	reserveResults = "失败(爽约次数超限)"
+		//}
+		reserveResults = "--"
 		first = "您有一场【" + v.ActivityTypeName + "】将在1小时后开始"
 		SendWxMsgWithFrequency(first, v.ActivityName, reserveResults, v.ActivityTime, v.Address, remark, openIdList, v.ActivityId)
 	}
@@ -594,7 +595,7 @@ func ActivityAttendanceDetail(cont context.Context) (err error) {
 	}()
 
 	fmt.Println("开始同步")
-	dateTime := time.Now().AddDate(0, 0, -14).Format(utils.FormatDate)
+	dateTime := time.Now().AddDate(0, 0, -30).Format(utils.FormatDate)
 	dateNow := time.Now().AddDate(0, 0, 0).Format(utils.FormatDate)
 	startDate := dateTime + " 00:00:00"
 	endDate := dateNow + " 23:59:59"
@@ -621,6 +622,7 @@ func ActivityAttendanceDetail(cont context.Context) (err error) {
 					fmt.Println("GetTacticsList Err:", err.Error())
 					return err
 				}
+
 				needAddAttendanc := make([]*models.CygxActivityAttendanceDetail, 0)
 				fmt.Println("原来的", vAct.ActivityName)
 				fmt.Println("处理的", activityName)
@@ -649,6 +651,7 @@ func ActivityAttendanceDetail(cont context.Context) (err error) {
 								item.MeetingStatusStr = "回放"
 							}
 							item.Position = v.Occupation
+							item.UseridEntity = v.UseridEntity
 							item.CreateTime = time.Now()
 							mobileStr += "'" + v.UserPhone + "'" + ","
 							needAddAttendanc = append(needAddAttendanc, item)

+ 14 - 0
services/article.go

@@ -386,6 +386,15 @@ func GetArticleListByApi(cont context.Context) (err error) {
 			item.CategoryName = v.Industry.Name
 			item.CategoryId = exitMap[v.SeriesId]
 			item.SubCategoryName = v.Series.Name
+			if len(v.Stock) > 0 {
+				var stock string
+				for _, vS := range v.Stock {
+					stock += vS + "/"
+				}
+				stock = strings.TrimRight(stock, "/")
+				item.Stock = stock
+			}
+			item.FieldName = v.Field.Name
 			list = append(list, item)
 			itemAuthor.ArticleId = v.ArticleId
 			itemAuthor.Name = v.Author.Name
@@ -527,6 +536,8 @@ func GetArticleListByApi(cont context.Context) (err error) {
 			v.Department = "弘则权益研究"
 			updateParams["Department"] = v.Department
 			updateParams["FileLink"] = fileLink
+			updateParams["Stock"] = v.Stock
+			updateParams["FieldName"] = v.FieldName
 			whereParam := map[string]interface{}{"article_id": v.ArticleId}
 			err = models.UpdateByExpr(models.CygxArticle{}, whereParam, updateParams)
 			if err != nil {
@@ -550,6 +561,7 @@ func GetArticleListByApi(cont context.Context) (err error) {
 			item.CategoryName = v.CategoryName
 			item.SubCategoryName = v.SubCategoryName
 			item.CategoryId = v.CategoryId
+			item.CategoryIdTwo = v.CategoryId
 			item.PublishStatus = 1
 			item.ExpertBackground = expertContentStr
 			item.ExpertNumber = expertNumStr
@@ -562,6 +574,8 @@ func GetArticleListByApi(cont context.Context) (err error) {
 			item.ReportType = v.ReportType
 			item.FileLink = fileLink
 			item.MatchTypeName = matchTypeName
+			item.Stock = v.Stock
+			item.FieldName = v.FieldName
 			_, err = models.AddCygxArticles(item)
 			if err != nil {
 				fmt.Println("AddCygxArticle Err:", err.Error())

+ 277 - 0
services/send_company_user.go

@@ -0,0 +1,277 @@
+package services
+
+import (
+	"context"
+	"encoding/json"
+	"fmt"
+	"hongze/hongze_cygx/models"
+	"hongze/hongze_cygx/utils"
+	"io/ioutil"
+	"net/http"
+	"strconv"
+	"strings"
+	"time"
+)
+
+type GetShangHaiTokenResultApi struct {
+	Code int                   `json:"code"`
+	Msg  string                `json:"msg"`
+	Time int                   `json:"time"`
+	Data ShangHaiResultApidate `json:"data"`
+}
+
+type ShangHaiResultApidate struct {
+	AccessToken string `json:"access_token"`
+	ExpireIn    int    `json:"expire_in"`
+}
+
+type GetShangHaiTokenResultApiComPany struct {
+	Code int       `json:"code"`
+	Msg  string    `json:"msg"`
+	Time int       `json:"time"`
+	Data FailInfos `json:"data"`
+}
+type FailInfos struct {
+	TotalCount int                            `json:"total_count"`
+	FailInfo   []ShangHaiResultApidateComPany `json:"fail_info"`
+}
+
+type ShangHaiResultApidateComPany struct {
+	ErrVal string `json:"errVal"`
+	ErrMsg string `json:"errMsg"`
+}
+
+//c
+func SendComapnyToShanghai(url, jsonCompany, postType string) {
+	method := "POST"
+	//fmt.Println(string(jsonCompany))
+	//utils.FileLog.Info(string(jsonCompany))
+	payload := strings.NewReader(jsonCompany)
+	client := &http.Client{}
+	req, err := http.NewRequest(method, url, payload)
+	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
+	}
+	var result GetShangHaiTokenResultApiComPany
+	err = json.Unmarshal(body, &result)
+	if err != nil {
+		fmt.Println("Getres.pdfResult Err:", err.Error())
+	}
+	if result.Code != 1 {
+		go utils.SendEmail("同步策略平台信息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), url, utils.EmailSendToExpert)
+	}
+	item := new(models.CygxShanghaiCompanyLog)
+	item.CreateTime = time.Now()
+	item.Url = url
+	item.Body = jsonCompany
+	item.Result = string(body)
+	go models.AddCygxShanghaiCompanyLog(item)
+
+	if strings.Index(string(body), "必填") > 0 || strings.Index(string(body), "失败") > 0 || strings.Index(string(body), "社会信用代码格式错误") > 0 {
+		go utils.SendEmail("同步策略平台信息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), string(body), utils.EmailSendToExpert)
+	}
+	//var companyCode string
+	for _, v := range result.Data.FailInfo {
+		if v.ErrMsg != "" {
+			//companyCode += "'" + v.ErrVal + "',"
+			item := new(models.CygxShanghaiErrLog)
+			item.CreateTime = time.Now()
+			item.ErrMsg = v.ErrMsg
+			item.ErrVal = v.ErrVal
+			item.ErrType = postType
+			go models.AddCygxShanghaiErrLog(item)
+		}
+	}
+	//给产品导数据用,别删
+	//companyCode = postType + companyCode
+	////fmt.Println(result.Data.FailInfo)
+	//utils.FileLog.Info(string(companyCode))
+	//utils.FileLog.Info(string(body))
+	//fmt.Println(string(body))
+}
+
+func DotongbuShangHai(cont context.Context) (err error) {
+	var msg string
+	defer func() {
+		if err != nil {
+			go utils.SendEmail("同步策略平台获取数据信息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToExpert)
+		}
+	}()
+	//获取token
+	url := "https://crm.hzinsights.com/openapi/v1/auth/getAccessToken?app_key=26945134&app_secret=b99cb2bdec70d20156000f664ec5ac30"
+	method := "GET"
+	client := &http.Client{}
+	req, err := http.NewRequest(method, url, nil)
+	if err != nil {
+		msg = "GetToken Err:" + err.Error()
+		return err
+	}
+	res, err := client.Do(req)
+	if err != nil {
+		msg = "client Err:" + err.Error()
+		return err
+	}
+	defer res.Body.Close()
+	body, err := ioutil.ReadAll(res.Body)
+	if err != nil {
+		msg = "body Err:" + err.Error()
+		return
+	}
+	var result GetShangHaiTokenResultApi
+	err = json.Unmarshal(body, &result)
+	if err != nil {
+		msg = "Get result Err:" + err.Error()
+		return
+	}
+	accessToken := result.Data.AccessToken
+	fmt.Println(accessToken)
+	//同步权益客户
+	companyList, err := models.GetSendCompanyList()
+	if err != nil {
+		msg = "GetSendCompanyList Err:" + err.Error()
+		return
+	}
+	fmt.Println("权益客户", len(companyList))
+	var companyItems []*models.CompanyJson
+	if len(companyList) > 0 {
+		url = "https://crm.hzinsights.com/openapi/v1/Customer/batchSyncFiccCustomer?access_token=" + accessToken
+		for k, _ := range companyList {
+			companyList[k].Fe = "权益"
+			companyList[k].EndDate = strconv.Itoa(int(companyList[k].EndDateTime.Unix()))
+			//一次同步一百条
+			companyItems = append(companyItems, companyList[k])
+			if (k+1)%100 == 0 {
+				data, err := json.Marshal(companyItems)
+				if err != nil {
+					msg = "companyItems Err:" + err.Error()
+					return err
+				}
+				jsonstr := string(data)
+				jsonstr = "{\"sync_data\": " + jsonstr + " }"
+				SendComapnyToShanghai(url, jsonstr, "权益")
+				companyItems = make([]*models.CompanyJson, 0)
+			}
+		}
+		//如果剩下还有则同步剩下的部分
+		if len(companyItems) > 0 {
+			data, err := json.Marshal(companyItems)
+			if err != nil {
+				msg = "companyItems Err:" + err.Error()
+				return err
+			}
+			jsonstr := string(data)
+			jsonstr = "{\"sync_data\": " + jsonstr + " }"
+			SendComapnyToShanghai(url, jsonstr, "权益")
+			companyItems = make([]*models.CompanyJson, 0)
+		}
+	}
+	//同步FICC客户
+	companyFiccList, err := models.GetSendCompanyFiccList()
+	if err != nil {
+		msg = "GetSendCompanyFiccList Err:" + err.Error()
+		return err
+	}
+	fmt.Println("FICC客户", len(companyFiccList))
+	var companyFiccItems []*models.CompanyJson
+	if len(companyFiccList) > 0 {
+		url = "https://crm.hzinsights.com/openapi/v1/Customer/batchSyncFiccCustomer?access_token=" + accessToken
+		for k, _ := range companyFiccList {
+			companyFiccList[k].Fe = "FICC"
+			companyFiccList[k].EndDate = strconv.Itoa(int(companyFiccList[k].EndDateTime.Unix()))
+			//一次同步一百条
+			companyFiccItems = append(companyFiccItems, companyFiccList[k])
+			if (k+1)%100 == 0 {
+				data, err := json.Marshal(companyFiccItems)
+				if err != nil {
+					msg = "companyFiccItems Err:" + err.Error()
+					return err
+				}
+				jsonstr := string(data)
+				jsonstr = "{\"sync_data\": " + jsonstr + " }"
+				SendComapnyToShanghai(url, jsonstr, "FICC")
+				companyFiccItems = make([]*models.CompanyJson, 0)
+			}
+		}
+		//如果剩下还有则同步剩下的部分
+		if len(companyFiccItems) > 0 {
+			data, err := json.Marshal(companyFiccItems)
+			if err != nil {
+				msg = "companyFiccItems Err:" + err.Error()
+				return err
+			}
+			jsonstr := string(data)
+			jsonstr = "{\"sync_data\": " + jsonstr + " }"
+			SendComapnyToShanghai(url, jsonstr, "FICC")
+		}
+	}
+
+	userList, err := models.GetSendUserList()
+	if err != nil {
+		msg = "GetSendUserList Err:" + err.Error()
+		return err
+	}
+	fmt.Println("userList", len(userList))
+	var userItems []*models.UserJson
+	if len(userList) > 0 {
+		url = "https://crm.hzinsights.com/openapi/v1/CustomerContact/batchSyncFiccCustomerContact?access_token=" + accessToken
+		for k, v := range userList {
+			if v.Sex == "1" {
+				userList[k].Sex = "男"
+			} else {
+				userList[k].Sex = "女"
+			}
+			if v.IsMaker == "1" {
+				userList[k].IsMaker = "是"
+			} else {
+				userList[k].IsMaker = "否"
+			}
+			userList[k].CountryCode = "+" + v.CountryCode
+			userList[k].OutboundCountryCode = "+" + v.OutboundCountryCode
+			if userList[k].Mobile != "" && userList[k].OutboundMobile != "" && userList[k].Mobile == userList[k].OutboundMobile {
+				userList[k].OutboundMobile = ""
+				userList[k].OutboundCountryCode = ""
+			}
+			//一次同步一百条
+			userItems = append(userItems, userList[k])
+			if (k+1)%100 == 0 {
+				data, err := json.Marshal(userItems)
+				if err != nil {
+					msg = "userItems Err:" + err.Error()
+					return err
+				}
+				fmt.Println(k)
+				jsonstr := string(data)
+				jsonstr = "{\"sync_data\": " + jsonstr + " }"
+				SendComapnyToShanghai(url, jsonstr, "user")
+				userItems = make([]*models.UserJson, 0)
+			}
+		}
+
+		//如果剩下还有则同步剩下的部分
+		if len(userItems) > 0 {
+			data, err := json.Marshal(userItems)
+			if err != nil {
+				msg = "userItems Err:" + err.Error()
+				return err
+			}
+			jsonstr := string(data)
+			jsonstr = "{\"sync_data\": " + jsonstr + " }"
+			SendComapnyToShanghai(url, jsonstr, "user")
+			companyItems = make([]*models.CompanyJson, 0)
+		}
+	}
+	return
+}

+ 3 - 0
services/task.go

@@ -33,6 +33,9 @@ func Task() {
 
 		sendEmailUserWhiteListChange := task.NewTask("sendEmailUserWhiteListChange", "0 00 17 * * *", SendEmailUserWhiteListChange) //新增 和冻结的客户白名单
 		task.AddTask("白名单发送", sendEmailUserWhiteListChange)
+
+		dotongbuShangHai := task.NewTask("dotongbuShangHai", "0 30 3 * * *", DotongbuShangHai) //把信息同步到上海策略品台
+		task.AddTask("同步用户到上海", dotongbuShangHai)
 	}
 
 	if utils.IsTask {