|
@@ -7,6 +7,8 @@ import (
|
|
|
"github.com/gogf/gf/util/gconv"
|
|
|
"log"
|
|
|
"net/url"
|
|
|
+ "os"
|
|
|
+ "path/filepath"
|
|
|
"strings"
|
|
|
"time"
|
|
|
|
|
@@ -28,7 +30,7 @@ func everythingSync() {
|
|
|
|
|
|
codeArr := []string{}
|
|
|
if len(UserChannel) > 0 {
|
|
|
- for i, _ := range UserChannel {
|
|
|
+ for i := range UserChannel {
|
|
|
codeArr = append(codeArr, fmt.Sprintf(`"%s"`, i))
|
|
|
}
|
|
|
}
|
|
@@ -549,7 +551,7 @@ func bigCustomer() {
|
|
|
for _, v := range dataArr {
|
|
|
minemail := ""
|
|
|
if gconv.String(v["appoint_email"]) == "" {
|
|
|
- minemail, _ = EmailSelect("dk")
|
|
|
+ minemail, _ = EmailSelect("dk", "")
|
|
|
} else {
|
|
|
minemail = gconv.String(v["appoint_email"])
|
|
|
}
|
|
@@ -702,59 +704,35 @@ func FindBatchData(moudle string) map[string]interface{} {
|
|
|
|
|
|
}
|
|
|
|
|
|
-// 咨询组线索
|
|
|
-func AdvisoryCommittee() {
|
|
|
- if !isRunning() {
|
|
|
- log.Println("不是工作日,任务暂停")
|
|
|
- return
|
|
|
- }
|
|
|
- log.Println("咨询部线索定时任务开始")
|
|
|
-
|
|
|
- sourceMap := buildSourceMap("咨询组")
|
|
|
- nowTime := time.Now().Format(date.Date_Full_Layout)
|
|
|
- startTime := getCommitteeTime(cfg.AdvisoryCommitteeTime)
|
|
|
- dataArr, endtime := processLeads("zx", startTime, sourceMap, nowTime)
|
|
|
-
|
|
|
- cfg.AdvisoryCommitteeTime = endtime
|
|
|
- exportToExcel(dataArr, "咨询服务销售线索", "zx")
|
|
|
- log.Println("咨询部线索定时任务结束")
|
|
|
- common.WriteSysConfig(&cfg)
|
|
|
-}
|
|
|
-
|
|
|
-// 运营部线索
|
|
|
-func SelectionDepartment() {
|
|
|
- if !isRunning() {
|
|
|
- log.Println("不是工作日,任务暂停")
|
|
|
- return
|
|
|
- }
|
|
|
- log.Println("运营部线索定时任务开始")
|
|
|
-
|
|
|
- sourceMap := buildSourceMap("运营部")
|
|
|
- nowTime := time.Now().Format(date.Date_Full_Layout)
|
|
|
- startTime := getCommitteeTime(cfg.SelectionDepartmentTime)
|
|
|
- dataArr, endtime := processLeads("yy", startTime, sourceMap, nowTime)
|
|
|
- cfg.SelectionDepartmentTime = endtime
|
|
|
- exportToExcel(dataArr, "运营部销售线索", "yy")
|
|
|
- log.Println("运营部线索定时任务结束")
|
|
|
- common.WriteSysConfig(&cfg)
|
|
|
-}
|
|
|
-
|
|
|
-// 市场部线索
|
|
|
-func MarketCustomer() {
|
|
|
- if !isRunning() {
|
|
|
+// 特殊留资
|
|
|
+func SpecialSaleLeads() {
|
|
|
+ /*if !isRunning() {
|
|
|
log.Println("不是工作日,任务暂停")
|
|
|
return
|
|
|
+ }*/
|
|
|
+ saleLeadsConfig := TiDb.Find("saleLeads_config", map[string]interface{}{
|
|
|
+ "status": 0,
|
|
|
+ }, "", "", -1, -1)
|
|
|
+ log.Println("特殊留资线索定时任务开始")
|
|
|
+ for _, v := range *saleLeadsConfig {
|
|
|
+ log.Println(fmt.Sprintf("%s留资线索定时任务开始", gconv.String(v["groupName"])), gconv.String(v["lastTime"]))
|
|
|
+ //留来源获取
|
|
|
+ sourceMap := buildSourceMap(gconv.String(v["groupName"]))
|
|
|
+ if len(sourceMap) == 0 {
|
|
|
+ log.Println(fmt.Sprintf("%s留资线索定时任务结束", gconv.String(v["groupName"])))
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ dataArr, endtime := processLeads(v, sourceMap)
|
|
|
+ //最后一次数据修改
|
|
|
+ TiDb.Update("saleLeads_config", map[string]interface{}{
|
|
|
+ "id": gconv.Int64(v["id"]),
|
|
|
+ }, map[string]interface{}{
|
|
|
+ "lastTime": endtime,
|
|
|
+ })
|
|
|
+ exportToExcel(dataArr, gconv.String(v["title"]), gconv.String(v["groupCode"]), gconv.String(v["mail"]))
|
|
|
+ log.Println(fmt.Sprintf("%s留资线索定时任务结束", gconv.String(v["groupName"])))
|
|
|
}
|
|
|
- log.Println("市场部线索定时任务开始")
|
|
|
-
|
|
|
- sourceMap := buildSourceMap("市场组")
|
|
|
- nowTime := time.Now().Format(date.Date_Full_Layout)
|
|
|
- startTime := getCommitteeTime(cfg.MarketSaleTime)
|
|
|
- dataArr, endtime := processLeads("sc", startTime, sourceMap, nowTime)
|
|
|
- cfg.MarketSaleTime = endtime
|
|
|
- exportToExcel(dataArr, "商务合作销售线索", "sc")
|
|
|
- common.WriteSysConfig(&cfg)
|
|
|
- log.Println("市场部线索定时任务结束")
|
|
|
+ log.Println("特殊留资线索定时任务结束")
|
|
|
}
|
|
|
|
|
|
// 判断是否在工作日
|
|
@@ -798,17 +776,18 @@ func getCommitteeTime(cfgTime int64) int64 {
|
|
|
return cfgTime
|
|
|
}
|
|
|
|
|
|
-// 处理线索
|
|
|
-func processLeads(batch string, committeeTime int64, sourceMap map[string]map[string]interface{}, nowTime string) ([]map[string]interface{}, int64) {
|
|
|
+// 处理留资信息
|
|
|
+func processLeads(saleLeadsMap map[string]interface{}, sourceMap map[string]map[string]interface{}) ([]map[string]interface{}, int64) {
|
|
|
+ batch := gconv.String(saleLeadsMap["groupCode"])
|
|
|
+ lastTime := gconv.Int64(saleLeadsMap["lastTime"])
|
|
|
dataArr := []map[string]interface{}{}
|
|
|
- endtime := int64(0)
|
|
|
- saleleadsData, ok := Mgo.Find("saleLeads", map[string]interface{}{"createtime": map[string]interface{}{"$gt": committeeTime}}, `{"phone":1,"createtime":1}`, nil, false, -1, -1)
|
|
|
- //saleleadsData, ok := Mgo.Find("saleLeads", map[string]interface{}{"createtime": committeeTime}, `{"phone":1,"createtime":1}`, nil, false, -1, -1)
|
|
|
+ endtime := lastTime
|
|
|
+ saleleadsData, ok := Mgo.Find("saleLeads", map[string]interface{}{"createtime": map[string]interface{}{"$gt": lastTime}}, `{"phone":1,"createtime":1}`, nil, false, -1, -1)
|
|
|
if ok && saleleadsData != nil {
|
|
|
data := FindBatchData(batch)
|
|
|
for _, v := range *saleleadsData {
|
|
|
lead := map[string]interface{}{}
|
|
|
- lead, endtime = processLead(v, sourceMap, nowTime, committeeTime, data)
|
|
|
+ lead, endtime = processLead(v, sourceMap, lastTime, data)
|
|
|
if lead != nil {
|
|
|
dataArr = append(dataArr, lead)
|
|
|
}
|
|
@@ -819,29 +798,43 @@ func processLeads(batch string, committeeTime int64, sourceMap map[string]map[st
|
|
|
return dataArr, endtime
|
|
|
}
|
|
|
|
|
|
+<<<<<<< HEAD
|
|
|
// 处理单个线索
|
|
|
func processLead(v map[string]interface{}, sourceMap map[string]map[string]interface{}, nowTime string, committeeTime int64, data map[string]interface{}) (map[string]interface{}, int64) {
|
|
|
sources := gconv.String(v["source"])
|
|
|
// 更新委员会时间
|
|
|
if gconv.Int64(v["createtime"]) > committeeTime {
|
|
|
committeeTime = gconv.Int64(v["createtime"])
|
|
|
+=======
|
|
|
+// 处理单个留资信息
|
|
|
+func processLead(v map[string]interface{}, sourceMap map[string]map[string]interface{}, lastTime int64, data map[string]interface{}) (map[string]interface{}, int64) {
|
|
|
+ nowTime := time.Now().Format(date.Date_Full_Layout)
|
|
|
+ sources := common.ObjToString(v["source"])
|
|
|
+ // 更新最后会时间
|
|
|
+ if gconv.Int64(v["createtime"]) > lastTime {
|
|
|
+ lastTime = gconv.Int64(v["createtime"])
|
|
|
+>>>>>>> master
|
|
|
}
|
|
|
sourceData, exist := sourceMap[sources]
|
|
|
if !exist {
|
|
|
- return nil, committeeTime
|
|
|
+ return nil, lastTime
|
|
|
}
|
|
|
phone := gconv.String(v["phone"])
|
|
|
if IsInternal(phone) {
|
|
|
- return nil, committeeTime
|
|
|
+ return nil, lastTime
|
|
|
}
|
|
|
// 获取用户信息
|
|
|
userData := getUserData(v)
|
|
|
if userData == nil || isUserInBlackList(userData) {
|
|
|
- return nil, committeeTime
|
|
|
+ return nil, lastTime
|
|
|
}
|
|
|
+<<<<<<< HEAD
|
|
|
key := fmt.Sprintf("%s_%s_%s", sourceMap[sources], phone, gconv.String(v["interest"]))
|
|
|
+=======
|
|
|
+ key := fmt.Sprintf("%s_%s_%s", sources, phone, common.ObjToString(v["interest"]))
|
|
|
+>>>>>>> master
|
|
|
if _, exists := data[key]; exists {
|
|
|
- return nil, committeeTime
|
|
|
+ return nil, lastTime
|
|
|
}
|
|
|
data[key] = true
|
|
|
|
|
@@ -852,14 +845,19 @@ func processLead(v map[string]interface{}, sourceMap map[string]map[string]inter
|
|
|
"company": gconv.String(v["company"]),
|
|
|
"phone": phone,
|
|
|
"source": gconv.String(sourceData["name"]),
|
|
|
+<<<<<<< HEAD
|
|
|
"belongTo": "咨询组/市场组", // 根据需要修改
|
|
|
"interest": gconv.String(v["interest"]),
|
|
|
"data_requirement": gconv.String(v["data_requirement"]),
|
|
|
+=======
|
|
|
+ "interest": common.ObjToString(v["interest"]),
|
|
|
+ "data_requirement": common.ObjToString(v["data_requirement"]),
|
|
|
+>>>>>>> master
|
|
|
"branch": v["branch"],
|
|
|
"job": v["position"],
|
|
|
"email": gconv.String(v["mail"]),
|
|
|
"appointEmail": gconv.String(sourceData["appointEmail"]),
|
|
|
- }, committeeTime
|
|
|
+ }, lastTime
|
|
|
}
|
|
|
|
|
|
// 获取用户数据
|
|
@@ -891,7 +889,7 @@ func isABHLead(lead map[string]interface{}) bool {
|
|
|
}
|
|
|
|
|
|
// 导出到 Excel
|
|
|
-func exportToExcel(dataArr []map[string]interface{}, title, batch string) {
|
|
|
+func exportToExcel(dataArr []map[string]interface{}, title, batch, mails string) {
|
|
|
if len(dataArr) == 0 {
|
|
|
return
|
|
|
}
|
|
@@ -899,7 +897,7 @@ func exportToExcel(dataArr []map[string]interface{}, title, batch string) {
|
|
|
for _, v := range dataArr {
|
|
|
appointEmail := gconv.String(v["appointEmail"])
|
|
|
if appointEmail == "" {
|
|
|
- appointEmail, _ = EmailSelect(batch)
|
|
|
+ appointEmail, _ = EmailSelect(batch, mails)
|
|
|
}
|
|
|
bigArr[appointEmail] = append(bigArr[appointEmail], v)
|
|
|
}
|
|
@@ -935,6 +933,12 @@ func exportToExcel(dataArr []map[string]interface{}, title, batch string) {
|
|
|
row.AddCell().SetString(gconv.Time(gconv.Int64(v["createtime"])).Format(date.Date_Full_Layout))
|
|
|
}
|
|
|
dir := fmt.Sprintf("./xlsx/%s/%s.xlsx", batch, fileName)
|
|
|
+ // 确保目录存在(自动创建)
|
|
|
+ dirPath := filepath.Dir(dir) // 提取目录部分(如 "./xlsx/batch")
|
|
|
+ if err := os.MkdirAll(dirPath, 0755); err != nil {
|
|
|
+ log.Println("创建目录失败:", err)
|
|
|
+ return
|
|
|
+ }
|
|
|
if err := xf.Save(dir); err != nil {
|
|
|
log.Println("xls error", err, dir)
|
|
|
return
|
|
@@ -963,11 +967,45 @@ func saveDataToRedis(data map[string]interface{}, batch string) {
|
|
|
}
|
|
|
|
|
|
// 邮箱选择处理
|
|
|
-func EmailSelect(batch string) (string, string) {
|
|
|
+func EmailSelect(batch, mailStr string) (string, string) {
|
|
|
name := ""
|
|
|
minemail := ""
|
|
|
bigData := TiDb.SelectBySql("select * from dwd_f_crm_clue_big_autodraw_record where type =? ", batch)
|
|
|
if bigData != nil && len(*bigData) > 0 {
|
|
|
+ //查看有没有新增人员 人名-邮箱,邮箱|人名-邮箱,
|
|
|
+ mailMap := map[string]string{}
|
|
|
+ if mailStr != "" {
|
|
|
+ for _, s := range strings.Split(mailStr, "|") {
|
|
|
+ if len(strings.Split(s, "-")) > 1 {
|
|
|
+ arr := strings.Split(s, "-")
|
|
|
+ personName := arr[0]
|
|
|
+ mailMap[personName] = arr[1]
|
|
|
+ }
|
|
|
+ }
|
|
|
+ for personName, mail := range mailMap {
|
|
|
+ isOk := false
|
|
|
+ for _, m := range *bigData {
|
|
|
+ tablePersonName := gconv.String(m["name"])
|
|
|
+ if tablePersonName == personName {
|
|
|
+ isOk = true
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if !isOk {
|
|
|
+ rData := TiDb.FindOne("dwd_f_crm_clue_big_autodraw_record", map[string]interface{}{
|
|
|
+ "type": batch,
|
|
|
+ }, "", "count desc")
|
|
|
+ //这是一个新人
|
|
|
+ TiDb.Insert("dwd_f_crm_clue_big_autodraw_record", map[string]interface{}{
|
|
|
+ "name": personName,
|
|
|
+ "count": common.Int64All((*rData)["count"]),
|
|
|
+ "email": mail,
|
|
|
+ "type": batch,
|
|
|
+ })
|
|
|
+ return minemail, name
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
mincount := common.IntAll((*bigData)[0]["count"])
|
|
|
for _, vv := range *bigData {
|
|
|
vcount := common.IntAll(vv["count"])
|
|
@@ -979,6 +1017,23 @@ func EmailSelect(batch string) (string, string) {
|
|
|
name = vName
|
|
|
}
|
|
|
}
|
|
|
+ } else {
|
|
|
+ for k, s := range strings.Split(mailStr, "|") {
|
|
|
+ if len(strings.Split(s, "-")) > 1 {
|
|
|
+ arr := strings.Split(s, "-")
|
|
|
+ if k == 0 {
|
|
|
+ minemail, name = arr[1], arr[0]
|
|
|
+ }
|
|
|
+ personName := arr[0]
|
|
|
+ TiDb.Insert("dwd_f_crm_clue_big_autodraw_record", map[string]interface{}{
|
|
|
+ "name": personName,
|
|
|
+ "count": 0,
|
|
|
+ "email": arr[1],
|
|
|
+ "type": batch,
|
|
|
+ })
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
TiDb.UpdateOrDeleteBySql(`update dwd_f_crm_clue_big_autodraw_record set count = count + 1 where name = ? and type=?`, name, batch)
|
|
|
return minemail, name
|