浏览代码

添加定时任务同步到上海

xingzai 3 年之前
父节点
当前提交
3934fc5785
共有 5 个文件被更改,包括 509 次插入0 次删除
  1. 1 0
      models/db.go
  2. 214 0
      models/send_company_user.go
  3. 21 0
      models/shanghai_company_log.go
  4. 270 0
      services/send_company_user.go
  5. 3 0
      services/task.go

+ 1 - 0
models/db.go

@@ -86,5 +86,6 @@ func init() {
 		new(CygxActivityMeetDetailLog),
 		new(CygxUserSearchKeyWord),
 		new(CompanyReportPermission),
+		new(CygxShanghaiCompanyLog),
 	)
 }

+ 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
+}

+ 21 - 0
models/shanghai_company_log.go

@@ -0,0 +1,21 @@
+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
+}

+ 270 - 0
services/send_company_user.go

@@ -0,0 +1,270 @@
+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 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 GetShangHaiTokenResultApi
+	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 == "c" {
+	//		companyCode += "'" + v.ErrVal + "',"
+	//	}
+	//}
+	////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)
+		}
+		fmt.Println("line 21", err, msg)
+	}()
+	//获取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)
+				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)
+		}
+	}
+
+	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)
+				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)
+			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 {