Browse Source

权益CRM客户信息同步--增加同步信息

xingzai 2 years ago
parent
commit
4b0e743f80
3 changed files with 132 additions and 33 deletions
  1. 48 19
      models/send_company_user.go
  2. 81 11
      services/send_company_user.go
  3. 3 3
      services/task.go

+ 48 - 19
models/send_company_user.go

@@ -6,33 +6,35 @@ import (
 )
 
 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"`     //创建时间
-	PermissionData string `json:"permission_data"` //创建时间
+	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"`     //创建时间
+	PermissionData []*PermissionData `json:"permission_data"` //创建时间
 	//CreatedTimes string //创建时间
 	EndDateTime time.Time //创建时间
+	Cid         int       // 公司ID
 }
 
 type PermissionDataList struct {
 	PermissionData []*PermissionData
 }
 type PermissionData struct {
-	CreatedTime string `json:"permission_name"` //权限名称
-	StartTime   string `json:"start_time"`      //权限开始时间
-	EndTime     string `json:"end_time"`        //权限结束时间
-	IsTryOut    string `json:"is_try_out"`      //权限是否试用:0=否,1=是
+	PermissionName string `json:"permission_name"` //权限名称
+	StartTime      string `json:"start_time"`      //权限开始时间
+	EndTime        string `json:"end_time"`        //权限结束时间
+	IsTryOut       int    `json:"is_try_out"`      //权限是否试用:0=否,1=是
+	Money          int    `json:"money"`           //权限是否试用:0=否,1=是
 }
 
 type UserJson struct {
@@ -111,6 +113,33 @@ func GetSendCompanyList(condition string) (items []*CompanyJson, err error) {
 	return
 }
 
+type PermissionDataResp struct {
+	CompanyId      int       `description:"公司ID"`
+	PermissionName string    `description:"行业名称"`
+	Status         string    `description:"状态"`
+	StartDate      time.Time `description:"行业名称"`
+	EndDate        time.Time `description:"行业名称"`
+}
+
+func GetSendCompanyPermissionDataList(condition string, pars []interface{}) (items []*PermissionDataResp, err error) {
+	o := orm.NewOrm()
+	sql := ` SELECT
+				company_id,
+				c.permission_name,
+				cp.status,
+				cp.end_date,
+				cp.start_date 
+			FROM
+				company_report_permission AS cp
+				INNER JOIN chart_permission AS c ON cp.chart_permission_id = c.chart_permission_id 
+			WHERE
+				1 = 1
+				AND cp.STATUS IN ( '正式', '试用', '永续' )
+				AND c.chart_permission_name IN ( '医药', '消费', '科技', '智造', '策略', '买方研选', '专家', '路演服务' ) ` + condition + ` GROUP BY c.permission_name, cp.company_id `
+	_, err = o.Raw(sql, pars).QueryRows(&items)
+	return
+}
+
 //获取FICC公司
 func GetSendCompanyFiccList(condition string) (items []*CompanyJson, err error) {
 	o := orm.NewOrm()

+ 81 - 11
services/send_company_user.go

@@ -3,6 +3,7 @@ package services
 import (
 	"context"
 	"encoding/json"
+	"errors"
 	"fmt"
 	"github.com/tealeg/xlsx"
 	"hongze/hongze_cygx/models"
@@ -106,8 +107,8 @@ func SendComapnyToShanghai(url, jsonCompany, postType string) (err error) {
 	return
 }
 
-//func DotongbuShangHai(cont context.Context) (err error) {
-func DotongbuShangHai() (err error) {
+func DotongbuShangHai(cont context.Context) (err error) {
+	//func DotongbuShangHai() (err error) {
 	//先删除被禁用的用户
 	DeleteUserDotongbuShangHaiApi()
 	var condition string
@@ -168,20 +169,20 @@ func DotongbuShangHai() (err error) {
 	}
 
 	//偶尔需要单独同步某一个公司的人员
-	condition = ` AND c.company_id  =  6901  `
+	//condition = ` AND c.company_id  =  6599  `
 
 	//同30小时有变更的公司
 	DotongbuShangHaApi(condition)
 
 	//原有的公司如果新增了也同步
-	//companyIds = strings.TrimRight(companyIds, ",")
-	//if companyIds != "" {
-	//	condition = ` AND p.is_suspend = 0  AND c.company_id  IN (` + companyIds + ")"
-	//	DotongbuShangHaApi(condition)
-	//}
-	//
-	////处理被禁用的用户,将禁用用户的状态同步
-	//CompanySuspend()
+	companyIds = strings.TrimRight(companyIds, ",")
+	if companyIds != "" {
+		condition = ` AND p.is_suspend = 0  AND c.company_id  IN (` + companyIds + ")"
+		DotongbuShangHaApi(condition)
+	}
+
+	//处理被禁用的用户,将禁用用户的状态同步
+	CompanySuspend()
 	return
 }
 
@@ -205,6 +206,37 @@ func DotongbuShangHaApi(condition string) (err error) {
 		msg = "GetSendCompanyList Err:" + err.Error()
 		return
 	}
+	mappermissionData := make(map[int][]*models.PermissionData)
+	if len(companyList) > 0 {
+		comapnyIdArr := make([]int, 0)
+		for _, v := range companyList {
+			comapnyIdArr = append(comapnyIdArr, v.Cid)
+		}
+		var conditionComapny string
+		var pars []interface{}
+		conditionComapny += ` AND cp.company_id  IN (` + utils.GetOrmInReplace(len(comapnyIdArr)) + ` )  `
+		pars = append(pars, comapnyIdArr)
+		permissionDataList, e := models.GetSendCompanyPermissionDataList(conditionComapny, pars)
+		if e != nil {
+			err = errors.New("GetSendCompanyPermissionDataList, Err: " + e.Error())
+			return
+		}
+		var IsTryOut int
+		for _, v := range permissionDataList {
+			if v.Status == "试用" {
+				IsTryOut = 1
+			} else {
+				IsTryOut = 0
+			}
+			mappermissionData[v.CompanyId] = append(mappermissionData[v.CompanyId], &models.PermissionData{
+				PermissionName: v.PermissionName,
+				StartTime:      strconv.Itoa(int(v.StartDate.Unix())),
+				EndTime:        strconv.Itoa(int(v.EndDate.Unix())),
+				IsTryOut:       IsTryOut,
+			})
+		}
+	}
+
 	fmt.Println("权益客户", len(companyList))
 	var companyItems []*models.CompanyJson
 	if len(companyList) > 0 {
@@ -214,6 +246,9 @@ func DotongbuShangHaApi(condition string) (err error) {
 			companyList[k].Fe = "权益"
 			companyList[k].EndDate = strconv.Itoa(int(companyList[k].EndDateTime.Unix()))
 			//一次同步一百条
+			if len(mappermissionData[companyList[k].Cid]) > 0 {
+				companyList[k].PermissionData = mappermissionData[companyList[k].Cid]
+			}
 			companyItems = append(companyItems, companyList[k])
 			if (k+1)%100 == 0 {
 				data, err := json.Marshal(companyItems)
@@ -237,6 +272,7 @@ func DotongbuShangHaApi(condition string) (err error) {
 			jsonstr := string(data)
 			jsonstr = "{\"sync_data\": " + jsonstr + " }"
 			SendComapnyToShanghai(url, jsonstr, "权益")
+			utils.FileLog.Info("发送模版消息失败,msg:%s", jsonstr)
 			companyItems = make([]*models.CompanyJson, 0)
 		}
 	}
@@ -246,6 +282,37 @@ func DotongbuShangHaApi(condition string) (err error) {
 		msg = "GetSendCompanyFiccList Err:" + err.Error()
 		return err
 	}
+	mappermissionDataFicc := make(map[int][]*models.PermissionData)
+	if len(companyFiccList) > 0 {
+		comapnyIdArr := make([]int, 0)
+		for _, v := range companyFiccList {
+			comapnyIdArr = append(comapnyIdArr, v.Cid)
+		}
+		var conditionComapny string
+		var pars []interface{}
+		conditionComapny = ` AND cp.company_id  IN (` + utils.GetOrmInReplace(len(comapnyIdArr)) + ` )  `
+		pars = append(pars, comapnyIdArr)
+		permissionDataList, e := models.GetSendCompanyPermissionDataList(conditionComapny, pars)
+		if e != nil {
+			err = errors.New("GetSendCompanyPermissionDataList, Err: " + e.Error())
+			return
+		}
+		var IsTryOut int
+		for _, v := range permissionDataList {
+			if v.Status == "试用" {
+				IsTryOut = 1
+			} else {
+				IsTryOut = 0
+			}
+			mappermissionDataFicc[v.CompanyId] = append(mappermissionDataFicc[v.CompanyId], &models.PermissionData{
+				PermissionName: v.PermissionName,
+				StartTime:      strconv.Itoa(int(v.StartDate.Unix())),
+				EndTime:        strconv.Itoa(int(v.EndDate.Unix())),
+				IsTryOut:       IsTryOut,
+			})
+		}
+	}
+
 	fmt.Println("FICC客户", len(companyFiccList))
 	var companyFiccItems []*models.CompanyJson
 	if len(companyFiccList) > 0 {
@@ -254,6 +321,9 @@ func DotongbuShangHaApi(condition string) (err error) {
 		for k, _ := range companyFiccList {
 			companyFiccList[k].Fe = "FICC"
 			companyFiccList[k].EndDate = strconv.Itoa(int(companyFiccList[k].EndDateTime.Unix()))
+			if len(mappermissionData[companyList[k].Cid]) > 0 {
+				companyList[k].PermissionData = mappermissionData[companyList[k].Cid]
+			}
 			//一次同步一百条
 			companyFiccItems = append(companyFiccItems, companyFiccList[k])
 			if (k+1)%100 == 0 {

+ 3 - 3
services/task.go

@@ -87,8 +87,8 @@ func Task() {
 		updateCygxActivitySpecialSignupNum := task.NewTask("updateCygxActivitySpecialSignupNum", "0 25 0 * * *", UpdateCygxActivitySpecialSignupNum) //修改专项调研,用户与公司的参与数量
 		task.AddTask("updateCygxActivitySpecialSignupNum", updateCygxActivitySpecialSignupNum)
 
-		//dotongbuShangHai := task.NewTask("dotongbuShangHai", "0 */20 * * * *", DotongbuShangHai) //把信息同步到上海策略品台
-		//task.AddTask("同步用户到上海", dotongbuShangHai)
+		dotongbuShangHai := task.NewTask("dotongbuShangHai", "0 */20 * * * *", DotongbuShangHai) //把信息同步到上海策略品台
+		task.AddTask("同步用户到上海", dotongbuShangHai)
 
 		updateDailyMonthReadBillboard := task.NewTask("updateDailyMonthReadBillboard", "0 0 3 * * *", UpdateDailyMonthReadBillboard) // 每日3:00更新阅读飙升榜单
 		task.AddTask("updateDailyMonthReadBillboard", updateDailyMonthReadBillboard)
@@ -107,7 +107,7 @@ func Task() {
 		getArticleListByApi := task.NewTask("getArticleListByApi", "0 */60 * * * *", GetArticleListByApi) //通过三方接口获取策略平台上的文章
 		task.AddTask("getArticleListByApi", getArticleListByApi)
 	}
-	DotongbuShangHai()
+
 	//GetCygxActivityAttendanceDetail()
 	//CreateIndexNameArticleHistory()
 	//AddAllArticleHistory()