|
@@ -44,6 +44,11 @@ type ShangHaiResultApidateComPany struct {
|
|
|
ErrMsg string `json:"errMsg"`
|
|
|
}
|
|
|
|
|
|
+type OriginalUserInfoResp struct {
|
|
|
+ Mobile string `json:"Mobile"`
|
|
|
+ RealName string `json:"RealName"`
|
|
|
+}
|
|
|
+
|
|
|
//c
|
|
|
func SendComapnyToShanghai(url, jsonCompany, postType string) (err error) {
|
|
|
var msg string
|
|
@@ -102,10 +107,14 @@ func SendComapnyToShanghai(url, jsonCompany, postType string) (err error) {
|
|
|
}
|
|
|
|
|
|
func DotongbuShangHai(cont context.Context) (err error) {
|
|
|
+ //func DotongbuShangHai() (err error) {
|
|
|
+ //先删除被禁用的用户
|
|
|
+ DeleteUserDotongbuShangHaiApi()
|
|
|
var condition string
|
|
|
- updateTime := time.Now().Add(-time.Minute * 22).Format("2006-01-02 15:04:05")
|
|
|
+ updateTime := time.Now().Add(-time.Minute * 2).Format("2006-01-02 15:04:05")
|
|
|
listUpdateUser, err := models.GetWxUserOpLog(updateTime)
|
|
|
if err != nil && err.Error() != utils.ErrNoRow() {
|
|
|
+ fmt.Println(err)
|
|
|
return err
|
|
|
}
|
|
|
var companyIds string
|
|
@@ -114,69 +123,55 @@ func DotongbuShangHai(cont context.Context) (err error) {
|
|
|
companyIds += strconv.Itoa(v.CompanyId) + ","
|
|
|
}
|
|
|
}
|
|
|
+ ////获取冻结跟流失的用户
|
|
|
+ listFreezeAndLoss, err := models.GetCompanyFreezeAndLoss(updateTime)
|
|
|
+ if err != nil && err.Error() != utils.ErrNoRow() {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ if len(listFreezeAndLoss) > 0 {
|
|
|
+ for _, v := range listFreezeAndLoss {
|
|
|
+ companyIds += strconv.Itoa(v.CompanyId) + ","
|
|
|
+ }
|
|
|
+ }
|
|
|
condition = ` AND p.modify_time > ` + "'" + updateTime + "'"
|
|
|
companyIds = strings.TrimRight(companyIds, ",")
|
|
|
+
|
|
|
+ fmt.Println("获取冻结跟流失的用户", len(listFreezeAndLoss))
|
|
|
+ //return err
|
|
|
if companyIds != "" {
|
|
|
//这一部分先不推送,避免并发推送
|
|
|
condition += ` AND c.company_id NOT IN (` + companyIds + ") "
|
|
|
}
|
|
|
|
|
|
//偶尔需要单独同步某一个公司的人员
|
|
|
- //condition = ` AND c.company_id = 8284 `
|
|
|
+ //condition = ` AND c.company_id = 5676 `
|
|
|
+
|
|
|
//同30小时有变更的公司
|
|
|
- go DotongbuShangHaApi(condition)
|
|
|
+ DotongbuShangHaApi(condition)
|
|
|
|
|
|
//原有的公司如果新增了也同步
|
|
|
- //companyIds = strings.TrimRight(companyIds, ",")
|
|
|
+ companyIds = strings.TrimRight(companyIds, ",")
|
|
|
if companyIds != "" {
|
|
|
condition = ` AND c.company_id IN (` + companyIds + ")"
|
|
|
- go DotongbuShangHaApi(condition)
|
|
|
+ DotongbuShangHaApi(condition)
|
|
|
}
|
|
|
return
|
|
|
}
|
|
|
|
|
|
-//func DotongbuShangHai(cont context.Context) (err error) {
|
|
|
func DotongbuShangHaApi(condition string) (err error) {
|
|
|
var msg string
|
|
|
defer func() {
|
|
|
if err != nil {
|
|
|
+ fmt.Println(err)
|
|
|
go utils.SendAlarmMsg("同步策略平台获取数据信息失败", 2)
|
|
|
go utils.SendEmail("同步策略平台获取数据信息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToExpert)
|
|
|
}
|
|
|
}()
|
|
|
- //同步24小时之前的数据到上海平台,为防止遗漏改成30小时
|
|
|
-
|
|
|
- //updateTime := time.Now().Add(-time.Hour * 30).Format("2006-01-02 15:04:05")
|
|
|
- //condition = ` AND p.modify_time > ` + "'" + updateTime + "'"
|
|
|
- //fmt.Println(condition)
|
|
|
- //获取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)
|
|
|
+ var url string
|
|
|
+ accessToken, err := GetShangHaiCrmApiToken()
|
|
|
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(condition)
|
|
|
if err != nil {
|
|
@@ -186,7 +181,8 @@ func DotongbuShangHaApi(condition string) (err error) {
|
|
|
fmt.Println("权益客户", len(companyList))
|
|
|
var companyItems []*models.CompanyJson
|
|
|
if len(companyList) > 0 {
|
|
|
- url = "https://crm.hzinsights.com/openapi/v1/Customer/batchSyncFiccCustomer?access_token=" + accessToken
|
|
|
+ //url = "https://crm.hzinsights.com/openapi/v1/Customer/batchSyncFiccCustomer?access_token=" + accessToken
|
|
|
+ url = utils.ShangHaiCrmApiLink + "openapi/v1/Customer/batchSyncFiccCustomer?access_token=" + accessToken
|
|
|
for k, _ := range companyList {
|
|
|
companyList[k].Fe = "权益"
|
|
|
companyList[k].EndDate = strconv.Itoa(int(companyList[k].EndDateTime.Unix()))
|
|
@@ -226,7 +222,8 @@ func DotongbuShangHaApi(condition string) (err error) {
|
|
|
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
|
|
|
+ //url = "https://crm.hzinsights.com/openapi/v1/Customer/batchSyncFiccCustomer?access_token=" + accessToken
|
|
|
+ url = utils.ShangHaiCrmApiLink + "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()))
|
|
@@ -265,7 +262,8 @@ func DotongbuShangHaApi(condition string) (err error) {
|
|
|
fmt.Println("用户", len(userList))
|
|
|
var userItems []*models.UserJson
|
|
|
if len(userList) > 0 {
|
|
|
- url = "https://crm.hzinsights.com/openapi/v1/CustomerContact/batchSyncFiccCustomerContact?access_token=" + accessToken
|
|
|
+ //url = "https://crm.hzinsights.com/openapi/v1/CustomerContact/batchSyncFiccCustomerContact?access_token=" + accessToken
|
|
|
+ url = utils.ShangHaiCrmApiLink + "openapi/v1/CustomerContact/batchSyncFiccCustomerContact?access_token=" + accessToken
|
|
|
for k, v := range userList {
|
|
|
if v.Sex == "1" {
|
|
|
userList[k].Sex = "男"
|
|
@@ -414,3 +412,120 @@ func DotongbuShangHaiSendEmail(cont context.Context) (err error) {
|
|
|
go models.DeleteCygxShanghaiCompanyLog()
|
|
|
return
|
|
|
}
|
|
|
+
|
|
|
+//DeleteUserDotongbuShangHaApi 删除用户进行同步
|
|
|
+func DeleteUserDotongbuShangHaiApi() (err error) {
|
|
|
+ var msg string
|
|
|
+ defer func() {
|
|
|
+ if err != nil {
|
|
|
+ go utils.SendAlarmMsg("同步策略平台获取数据信息失败 DeleteUserDotongbuShangHaApi"+err.Error()+msg, 2)
|
|
|
+ }
|
|
|
+ }()
|
|
|
+ updateTime := time.Now().Add(-time.Minute * 2).Format("2006-01-02 15:04:05")
|
|
|
+ listDeleteUser, err := models.GetWxUserOpLogDelete(updateTime)
|
|
|
+ if err != nil && err.Error() != utils.ErrNoRow() {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ fmt.Println("删除用户", len(listDeleteUser))
|
|
|
+ if len(listDeleteUser) > 0 {
|
|
|
+ var deleteCompanyIds string
|
|
|
+ for k, v := range listDeleteUser {
|
|
|
+ deleteCompanyIds += strconv.Itoa(v.CompanyId) + ","
|
|
|
+ var resultUser OriginalUserInfoResp
|
|
|
+ if err := json.Unmarshal([]byte(v.OriginalUserInfo), &resultUser); err == nil {
|
|
|
+ listDeleteUser[k].RealName = resultUser.RealName
|
|
|
+ } else {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ var url string
|
|
|
+ accessToken, err := GetShangHaiCrmApiToken()
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ var userItems []*models.ShangHaiCrmUserDeleteResp
|
|
|
+ if len(listDeleteUser) > 0 {
|
|
|
+ url = utils.ShangHaiCrmApiLink + "openapi/v1/CustomerContact/batchDisableCustomerContact?access_token=" + accessToken
|
|
|
+ for k, v := range listDeleteUser {
|
|
|
+ userItem := new(models.ShangHaiCrmUserDeleteResp)
|
|
|
+ userItem.Name = v.RealName
|
|
|
+ userItem.Mobile = v.Mobile
|
|
|
+ userItem.Social = v.CreditCode
|
|
|
+ //一次同步一百条
|
|
|
+ userItems = append(userItems, userItem)
|
|
|
+ if (k+1)%100 == 0 {
|
|
|
+ data, err := json.Marshal(userItems)
|
|
|
+ if err != nil {
|
|
|
+ msg = "companyItems Err:" + err.Error()
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ jsonstr := string(data)
|
|
|
+ jsonstr = "{\"data\": " + jsonstr + " }"
|
|
|
+ SendComapnyToShanghai(url, jsonstr, "权益")
|
|
|
+ userItems = make([]*models.ShangHaiCrmUserDeleteResp, 0)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //如果剩下还有则同步剩下的部分
|
|
|
+ if len(userItems) > 0 {
|
|
|
+ data, err := json.Marshal(userItems)
|
|
|
+ if err != nil {
|
|
|
+ msg = "companyItems Err:" + err.Error()
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ jsonstr := string(data)
|
|
|
+ jsonstr = "{\"data\": " + jsonstr + " }"
|
|
|
+ SendComapnyToShanghai(url, jsonstr, "权益")
|
|
|
+ userItems = make([]*models.ShangHaiCrmUserDeleteResp, 0)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+//获取用户的Token
|
|
|
+func GetShangHaiCrmApiToken() (token string, err error) {
|
|
|
+ var msg string
|
|
|
+ defer func() {
|
|
|
+ if err != nil {
|
|
|
+ go utils.SendAlarmMsg("同步策略平台获取数据信息失败 DeleteUserDotongbuShangHaApi"+err.Error()+msg, 2)
|
|
|
+ }
|
|
|
+ }()
|
|
|
+ cacheKey := utils.SHANG_HAI_CRM_API_TOKEN
|
|
|
+ ttlTime := utils.Rc.GetRedisTTL(cacheKey)
|
|
|
+ if ttlTime > 0 {
|
|
|
+ token, _ = utils.Rc.RedisString(cacheKey)
|
|
|
+ }
|
|
|
+ if token == "" {
|
|
|
+ //获取token
|
|
|
+ url := utils.ShangHaiCrmApiLink + "openapi/v1/auth/getAccessToken?app_key=26945134&app_secret=b99cb2bdec70d20156000f664ec5ac30"
|
|
|
+ method := "GET"
|
|
|
+ client := &http.Client{}
|
|
|
+ req, errReq := http.NewRequest(method, url, nil)
|
|
|
+ if errReq != nil {
|
|
|
+ err = errReq
|
|
|
+ return
|
|
|
+ }
|
|
|
+ res, errReq := client.Do(req)
|
|
|
+ if errReq != nil {
|
|
|
+ err = errReq
|
|
|
+ return
|
|
|
+ }
|
|
|
+ defer res.Body.Close()
|
|
|
+ body, errReq := ioutil.ReadAll(res.Body)
|
|
|
+ if errReq != nil {
|
|
|
+ err = errReq
|
|
|
+ return
|
|
|
+ }
|
|
|
+ var result GetShangHaiTokenResultApi
|
|
|
+ errReq = json.Unmarshal(body, &result)
|
|
|
+ if errReq != nil {
|
|
|
+ err = errReq
|
|
|
+ return
|
|
|
+ }
|
|
|
+ token = result.Data.AccessToken
|
|
|
+ utils.Rc.Put(cacheKey, token, time.Second*7000)
|
|
|
+ }
|
|
|
+ return
|
|
|
+}
|