package main import ( "bytes" "net/url" // "encoding/json" "io/ioutil" "log" "net/http" "strings" "sync" "time" "app.yhyue.com/moapp/jybase/date" "app.yhyue.com/moapp/jybase/common" "github.com/tealeg/xlsx" ) func getToken() string { url := "https://a1.7x24cc.com/accessToken?account=N000000029739&appid=w4w2ex0bnt1n61or&secret=3c8f7dd04d2c11edb786132b38c4d48a" bs, err := doGet(url) if err != nil { log.Println("token生成失败", err) return "" } tokenMap := common.StringToMap(string(bs)) if tokenMap["success"].(bool) { return common.ObjToString(tokenMap["accessToken"]) } return "" } func hlyjSync() { token := getToken() count := 0 if token != "" { TiDbData.SelectByBath(500, func(l *[]map[string]interface{}) bool { for _, v := range *l { count++ log.Println("第", count, "条") unique_id := common.ObjToString(v["unique_id"]) if count%20000 == 0 { token = getToken() } zhixiao := url.QueryEscape("直销组") urls := `https://a1.7x24cc.com/commonInte?flag=1008&account=N000000029739&accessToken=` + token + `&cusObj={"unique_id":"` + unique_id + `","belongTo":"` + zhixiao + `"}&dbType=0001` // updateData := map[string]interface{}{"belongTo": "直销组", "unique_id": unique_id} // update_data := map[string]interface{}{ // "flag": "1008", // "account": "N000000029739", // "dbType": "0001", // "accessToken": token, // "cusObj": updateData, // } // update_data_byte, _ := json.Marshal(&update_data) bs, err := doGet(urls) if err != nil { log.Println("调用接口失败", unique_id, err) } resMap := common.StringToMap(string(bs)) if resMap["success"].(bool) { ok := TiDbData.Update("customer", map[string]interface{}{"unique_id": unique_id}, map[string]interface{}{"belongTo": "直销组"}) if ok { log.Println("更新成功", unique_id) } else { log.Println("更新失败", unique_id) } } else { log.Println("调用接口失败!!", unique_id) } } return true }, `SELECT unique_id from customer where (empNo = "" or empNo is null) and (belongTo = "" or belongTo is null)`) } } func hlyjSync2() { token := getToken() nameG := map[string]string{} count := 0 if token != "" { saleData := TiDb.SelectBySql("select * from jy_salesperson_info") if saleData != nil { for _, v := range *saleData { nameG[common.ObjToString(v["seatNumber"])] = common.ObjToString(v["name"]) + "," + common.ObjToString(v["groupname"]) } } if len(nameG) > 0 { TiDbData.SelectByBath(500, func(l *[]map[string]interface{}) bool { for _, v := range *l { count++ log.Println("第", count, "条") if count%20000 == 0 { token = getToken() } unique_id := common.ObjToString(v["unique_id"]) empNo := common.ObjToString(v["empNo"]) belongTo := "市场部" log.Println("nameG[empNo]", nameG[empNo]) if strings.Contains(nameG[empNo], "电销") { belongTo = "直销组" } else if strings.Contains(nameG[empNo], "孙振杰") || strings.Contains(nameG[empNo], "陈兆标") { belongTo = "大客户" } else if nameG[empNo] == "" { belongTo = "直销组" } // updateData := map[string]interface{}{"belongTo": belongTo, "unique_id": unique_id} // update_data := map[string]interface{}{ // "flag": "1008", // "account": "N000000029739", // "dbType": "0001", // "accessToken": token, // "cusObj": updateData, // } // update_data_byte, _ := json.Marshal(&updateData) url := `https://a1.7x24cc.com/commonInte?flag=1008&account=N000000029739&accessToken=` + token + `&cusObj={"unique_id":"` + unique_id + `","belongTo":"` + belongTo + `"}&dbType=0001` bs, err := doGet(url) if err != nil { log.Println("调用接口失败", unique_id, err) return false } resMap := common.StringToMap(string(bs)) if resMap["success"] != nil && resMap["success"].(bool) { ok := TiDbData.Update("customer", map[string]interface{}{"unique_id": unique_id}, map[string]interface{}{"belongTo": belongTo}) if ok { log.Println("更新成功", unique_id) } else { log.Println("更新失败", unique_id) } } else { log.Println("调用接口失败!!", unique_id) } } return true }, `SELECT unique_id,empNo from customer where (empNo != "" or empNo is not null) and (belongTo = "" or belongTo is null)`) } } } func hlyjSync3() { count := 0 xlFile := xlsx.NewFile() sheet1, _ := xlFile.AddSheet("市场创建时间在前") sheet2, _ := xlFile.AddSheet("电销创建时间在前") l := TiDbData.SelectBySql(`SELECT phone,createTime from customer where belongTo = "市场部"`) // TiDbData.SelectByBath(100, func(l *[]map[string]interface{}) bool { wg := new(sync.WaitGroup) ch := make(chan bool, 20) for _, v := range *l { count++ log.Println("第", count, "条") wg.Add(1) ch <- true go func(v map[string]interface{}) { defer func() { wg.Done() <-ch }() // unique_id := common.ObjToString(v["unique_id"]) // empNo := common.ObjToString(v["empNo"]) // belongTo := common.ObjToString(v["belongTo"]) phone := common.ObjToString(v["phone"]) createTime := common.ObjToString(v["createTime"]) clueData := TiDb.FindOne("dwd_f_crm_clue_info", map[string]interface{}{"phone": phone}, "createtime", "") if clueData != nil { clueCreateTime := common.ObjToString((*clueData)["createtime"]) createTimes1, _ := time.ParseInLocation(date.Date_Full_Layout, createTime, time.Local) clueCreateTimes1, _ := time.ParseInLocation(date.Date_Full_Layout, clueCreateTime, time.Local) createTimes := createTimes1.Unix() clueCreateTimes := clueCreateTimes1.Unix() if clueCreateTimes >= createTimes { row := sheet1.AddRow() cluename := common.ObjToString((*clueData)["cluename"]) trailstatus := common.ObjToString((*clueData)["trailstatus"]) seatNumber := common.ObjToString((*clueData)["seatNumber"]) row.AddCell().SetValue(cluename) row.AddCell().SetValue(phone) row.AddCell().SetValue(trailstatus) row.AddCell().SetValue(seatNumber) row.AddCell().SetValue(clueCreateTime) row.AddCell().SetValue(createTime) log.Println("存入市场", phone) } else { company := common.ObjToString(v["company"]) status999 := common.ObjToString(v["status999"]) empNo := common.ObjToString(v["empNo"]) row := sheet2.AddRow() row.AddCell().SetValue(company) row.AddCell().SetValue(phone) row.AddCell().SetValue(status999) row.AddCell().SetValue(empNo) row.AddCell().SetValue(createTime) row.AddCell().SetValue(clueCreateTime) log.Println("存入电销", phone) } } else { row := sheet1.AddRow() row.AddCell().SetValue("") row.AddCell().SetValue(phone) row.AddCell().SetValue("") row.AddCell().SetValue("") row.AddCell().SetValue("") row.AddCell().SetValue(createTime) log.Println("无线索存入市场", phone) } }(v) } wg.Wait() // return true // }, `SELECT phone,createTime from customer where belongTo = "市场部"`) xlFile.Save("./线索统计.xlsx") } func doGet(url string) ([]byte, error) { req, err := http.NewRequest("GET", url, nil) if err != nil { return nil, err } resp, err := http.DefaultClient.Do(req) if err != nil { return nil, err } bs, err := ioutil.ReadAll(resp.Body) if err != nil { return nil, err } defer func() { _ = resp.Body.Close() }() log.Println(url, "调用结果 ", string(bs)) return bs, nil } func doPost(url string, body []byte) ([]byte, error) { req, err := http.NewRequest("POST", url, bytes.NewReader(body)) if err != nil { return nil, err } req.Header.Add("Content-Type", "application/json;charset=utf-8") resp, err := http.DefaultClient.Do(req) if err != nil { return nil, err } bs, err := ioutil.ReadAll(resp.Body) if err != nil { return nil, err } defer func() { _ = resp.Body.Close() }() log.Println(url, "调用结果 ", string(bs)) return bs, nil } func hlyjSync4() { token := getToken() count := 0 if token != "" { data := TiDbData.SelectBySql(`SELECT unique_id FROM customer where owner in (2646,8050,8030,2330) and belongTo = "直销组"`) log.Println("数据长度", len(*data)) for _, v := range *data { count++ log.Println("第", count, "条") unique_id := common.ObjToString(v["unique_id"]) if count%20000 == 0 { token = getToken() } zhixiao := url.QueryEscape("市场部") urls := `https://a1.7x24cc.com/commonInte?flag=1008&account=N000000029739&accessToken=` + token + `&cusObj={"unique_id":"` + unique_id + `","belongTo":"` + zhixiao + `"}&dbType=0001` // updateData := map[string]interface{}{"belongTo": "直销组", "unique_id": unique_id} // update_data := map[string]interface{}{ // "flag": "1008", // "account": "N000000029739", // "dbType": "0001", // "accessToken": token, // "cusObj": updateData, // } // update_data_byte, _ := json.Marshal(&update_data) bs, err := doGet(urls) if err != nil { log.Println("调用接口失败", unique_id, err) } resMap := common.StringToMap(string(bs)) if resMap["success"].(bool) { ok := TiDbData.Update("customer", map[string]interface{}{"unique_id": unique_id}, map[string]interface{}{"belongTo": "市场部"}) if ok { log.Println("更新成功", unique_id) } else { log.Println("更新失败", unique_id) } } else { log.Println("调用接口失败!!", unique_id) } } } } func clueSync1() { /*处理错误数据逻辑: 找到之前批量导入的线索,找到入库时间点。判断是否在通讯里可以找到两条,一个是批量导入的时间,另一条是老数据。 如果是,将批量导入新增的uid拿出来,删除通讯录,删除用户表,删除线索表*/ data := TiDb.SelectBySql(`SELECT phone,uid,userid from dwd_f_crm_clue_info where sub_cluetype = 504 or sub_cluetype = 505`) count := 0 if data != nil && len(*data) > 0 { log.Println("数量", len(*data)) for _, v := range *data { count++ log.Println(count) uid := common.ObjToString(v["uid"]) userid := common.ObjToString(v["userid"]) if userid != "" { TiDb.Update("dwd_f_userbase_baseinfo", map[string]interface{}{"uid": uid}, map[string]interface{}{"userid": userid}) } } } }