|
@@ -572,82 +572,63 @@ func bigCustomer() {
|
|
|
}
|
|
|
xlsxArr := []string{"用户昵称", "姓名", "公司名称", "职位", "联系人电话", "购买条数", "用户邮箱", "已支付订单信息", "未支付订单类型", "销售线索来源", "具体来源", "数据需求"}
|
|
|
if len(dataArr) > 0 {
|
|
|
- bigData := TiDb.SelectBySql("select * from dwd_f_crm_clue_big_autodraw_record")
|
|
|
- if bigData != nil && len(*bigData) > 0 {
|
|
|
- cdata := *bigData
|
|
|
- bigArr := map[string][]map[string]interface{}{}
|
|
|
- for _, v := range dataArr {
|
|
|
- mincount := common.IntAll(cdata[0]["count"])
|
|
|
- minindex := 0
|
|
|
- minemail := ""
|
|
|
- for kk, vv := range cdata {
|
|
|
- vcount := common.IntAll(vv["count"])
|
|
|
- vemail := common.ObjToString(vv["email"])
|
|
|
- if vcount <= mincount {
|
|
|
- minindex = kk
|
|
|
- mincount = vcount
|
|
|
- minemail = vemail
|
|
|
- }
|
|
|
- }
|
|
|
- bigArr[minemail] = append(bigArr[minemail], v)
|
|
|
- cdata[minindex]["count"] = mincount + 1
|
|
|
- name := common.ObjToString(cdata[minindex]["name"])
|
|
|
- TiDb.UpdateOrDeleteBySql(`update dwd_f_crm_clue_big_autodraw_record set count = count + 1 where name = ?`, name)
|
|
|
+ bigArr := map[string][]map[string]interface{}{}
|
|
|
+ for _, v := range dataArr {
|
|
|
+ minemail, _ := EmailSelect("dk")
|
|
|
+ bigArr[minemail] = append(bigArr[minemail], v)
|
|
|
+ }
|
|
|
+ for k, vb := range bigArr {
|
|
|
+ batch := FindBatch("dk")
|
|
|
+ fileName, detailName := time.Now().Format(date.Date_Short_Layout)+"-"+batch+"大客户销售线索", ""
|
|
|
+ xf := xlsx.NewFile()
|
|
|
+ style := xlsx.NewStyle()
|
|
|
+ style.Font.Size = 12
|
|
|
+ style.Font.Bold = true
|
|
|
+ style.Alignment.Vertical = "center"
|
|
|
+ style.Alignment.Horizontal = "center"
|
|
|
+ detailName = time.Now().Format(date.Date_Short_Layout) + "数据详情请查看附件"
|
|
|
+ sh, _ := xf.AddSheet("线索数据")
|
|
|
+ row1 := sh.AddRow()
|
|
|
+ for _, x := range xlsxArr {
|
|
|
+ cell := row1.AddCell()
|
|
|
+ cell.SetString(x)
|
|
|
+ cell.SetStyle(style)
|
|
|
}
|
|
|
- for k, vb := range bigArr {
|
|
|
- batch := FindBatch("dk")
|
|
|
- fileName, detailName := time.Now().Format(date.Date_Short_Layout)+"-"+batch+"大客户销售线索", ""
|
|
|
- xf := xlsx.NewFile()
|
|
|
- style := xlsx.NewStyle()
|
|
|
- style.Font.Size = 12
|
|
|
- style.Font.Bold = true
|
|
|
- style.Alignment.Vertical = "center"
|
|
|
- style.Alignment.Horizontal = "center"
|
|
|
- detailName = time.Now().Format(date.Date_Short_Layout) + "数据详情请查看附件"
|
|
|
- sh, _ := xf.AddSheet("线索数据")
|
|
|
- row1 := sh.AddRow()
|
|
|
- for _, x := range xlsxArr {
|
|
|
- cell := row1.AddCell()
|
|
|
- cell.SetString(x)
|
|
|
- cell.SetStyle(style)
|
|
|
- }
|
|
|
- for _, v := range vb {
|
|
|
- row := sh.AddRow()
|
|
|
- row.AddCell().SetString(common.ObjToString(v["usernickname"]))
|
|
|
- row.AddCell().SetString(common.ObjToString(v["username"]))
|
|
|
- row.AddCell().SetString(common.ObjToString(v["company"]))
|
|
|
- row.AddCell().SetString(common.ObjToString(v["job"]))
|
|
|
- row.AddCell().SetString(common.ObjToString(v["phone"]))
|
|
|
- row.AddCell().SetValue(common.IntAll(v["data_count"]))
|
|
|
- row.AddCell().SetString(common.ObjToString(v["email"]))
|
|
|
- row.AddCell().SetString(common.ObjToString(v["payorderinfo"]))
|
|
|
- row.AddCell().SetString(common.ObjToString(v["unpayorderinfo"]))
|
|
|
- row.AddCell().SetString(common.ObjToString(v["source"]))
|
|
|
- row.AddCell().SetString(common.ObjToString(v["interest"]))
|
|
|
- row.AddCell().SetString(common.ObjToString(v["data_requirement"]))
|
|
|
- //增加客户需求
|
|
|
+ for _, v := range vb {
|
|
|
+ row := sh.AddRow()
|
|
|
+ row.AddCell().SetString(common.ObjToString(v["usernickname"]))
|
|
|
+ row.AddCell().SetString(common.ObjToString(v["username"]))
|
|
|
+ row.AddCell().SetString(common.ObjToString(v["company"]))
|
|
|
+ row.AddCell().SetString(common.ObjToString(v["job"]))
|
|
|
+ row.AddCell().SetString(common.ObjToString(v["phone"]))
|
|
|
+ row.AddCell().SetValue(common.IntAll(v["data_count"]))
|
|
|
+ row.AddCell().SetString(common.ObjToString(v["email"]))
|
|
|
+ row.AddCell().SetString(common.ObjToString(v["payorderinfo"]))
|
|
|
+ row.AddCell().SetString(common.ObjToString(v["unpayorderinfo"]))
|
|
|
+ row.AddCell().SetString(common.ObjToString(v["source"]))
|
|
|
+ row.AddCell().SetString(common.ObjToString(v["interest"]))
|
|
|
+ row.AddCell().SetString(common.ObjToString(v["data_requirement"]))
|
|
|
+ //增加客户需求
|
|
|
+ }
|
|
|
+ email := k
|
|
|
+ //email = "wanghao@jianyu360.com"
|
|
|
+ dir := "./xlsx/dk/" + fileName + ".xlsx"
|
|
|
+ err := xf.Save(dir)
|
|
|
+ if err != nil {
|
|
|
+ log.Println("xls error", err, dir)
|
|
|
+ } else {
|
|
|
+ gmail := &mail.GmailAuth{
|
|
|
+ SmtpHost: "smtp.exmail.qq.com",
|
|
|
+ SmtpPort: 465,
|
|
|
+ User: "public03@topnet.net.cn",
|
|
|
+ Pwd: "ue9Rg9Sf4CVtdm5a",
|
|
|
}
|
|
|
- email := k
|
|
|
- //email = "wanghao@jianyu360.com"
|
|
|
- dir := "./xlsx/dk/" + fileName + ".xlsx"
|
|
|
- err := xf.Save(dir)
|
|
|
- if err != nil {
|
|
|
- log.Println("xls error", err, dir)
|
|
|
- } else {
|
|
|
- gmail := &mail.GmailAuth{
|
|
|
- SmtpHost: "smtp.exmail.qq.com",
|
|
|
- SmtpPort: 465,
|
|
|
- User: "public03@topnet.net.cn",
|
|
|
- Pwd: "ue9Rg9Sf4CVtdm5a",
|
|
|
- }
|
|
|
- status := mail.GSendMail_q("剑鱼标讯", email, "", "", fileName, detailName, dir, fileName+".xlsx", gmail)
|
|
|
- if status {
|
|
|
- log.Println("send mail success", fileName, email)
|
|
|
- }
|
|
|
+ status := mail.GSendMail_q("剑鱼标讯", email, "", "", fileName, detailName, dir, fileName+".xlsx", gmail)
|
|
|
+ if status {
|
|
|
+ log.Println("send mail success", fileName, email)
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
common.WriteSysConfig(&cfg)
|
|
|
log.Println("大客户线索定时任务结束")
|
|
@@ -662,81 +643,101 @@ func IsInternal(phone string) bool {
|
|
|
return false
|
|
|
}
|
|
|
|
|
|
+/*
|
|
|
// 咨询组线索
|
|
|
-func AdvisoryCommittee() {
|
|
|
- runOk := getRunOk()
|
|
|
- if !runOk {
|
|
|
- log.Println("不是工作日,任务暂停")
|
|
|
- return
|
|
|
- }
|
|
|
- log.Println("咨询部线索定时任务开始")
|
|
|
- dataArr := []map[string]interface{}{}
|
|
|
- filterArr := []string{"-pc", "-app", "-wx", "-h5"}
|
|
|
- sourceMap := map[string]string{} //根据留资维表:tidb/Jianyu_subjectdb/d_saleleads_code
|
|
|
- saleSource := TiDb.SelectBySql(`SELECT source,name FROM d_saleleads_code WHERE department LIKE '%咨询组%' AND is_delete = 1`)
|
|
|
- if saleSource != nil && len(*saleSource) > 0 {
|
|
|
- for _, v := range *saleSource {
|
|
|
- source := common.ObjToString(v["source"])
|
|
|
- name := common.ObjToString(v["name"])
|
|
|
- for _, s := range filterArr {
|
|
|
- name = strings.ReplaceAll(name, s, "")
|
|
|
- }
|
|
|
- sourceMap[source] = name
|
|
|
+
|
|
|
+ func AdvisoryCommittee() {
|
|
|
+ runOk := getRunOk()
|
|
|
+ if !runOk {
|
|
|
+ log.Println("不是工作日,任务暂停")
|
|
|
+ return
|
|
|
}
|
|
|
- }
|
|
|
- nowTime := time.Now().Format(date.Date_Full_Layout)
|
|
|
- advisoryCommitteeTime := cfg.AdvisoryCommitteeTime
|
|
|
- if advisoryCommitteeTime == 0 {
|
|
|
- advisoryCommitteeTime = time.Now().Unix()
|
|
|
- }
|
|
|
- abhList := []map[string]interface{}{}
|
|
|
- saleleadsData, ok := Mgo.Find("saleLeads", map[string]interface{}{"createtime": map[string]interface{}{"$gte": advisoryCommitteeTime}}, `{"phone":1,"createtime":1}`, nil, false, -1, -1)
|
|
|
- if ok && saleleadsData != nil && len(*saleleadsData) > 0 {
|
|
|
- data := FindBatchData("zx")
|
|
|
- for _, v := range *saleleadsData {
|
|
|
- sources := common.ObjToString(v["source"])
|
|
|
- userid := common.ObjToString(v["userid"])
|
|
|
- uid := ""
|
|
|
- if !mongodb.IsObjectIdHex(userid) {
|
|
|
- userMapping := TiDb.FindOne("dwd_f_userbase_id_mapping", map[string]interface{}{"position_id": userid}, "", "")
|
|
|
- if userMapping != nil && len(*userMapping) > 0 {
|
|
|
- userid = common.ObjToString((*userMapping)["userid"])
|
|
|
- uid = common.ObjToString((*userMapping)["uid"])
|
|
|
- }
|
|
|
- } else {
|
|
|
- userMapping := TiDb.FindOne("dwd_f_userbase_id_mapping", map[string]interface{}{"userid": userid}, "", "")
|
|
|
- if userMapping != nil && len(*userMapping) > 0 {
|
|
|
- userid = common.ObjToString((*userMapping)["userid"])
|
|
|
- uid = common.ObjToString((*userMapping)["uid"])
|
|
|
+ log.Println("咨询部线索定时任务开始")
|
|
|
+ dataArr := []map[string]interface{}{}
|
|
|
+ filterArr := []string{"-pc", "-app", "-wx", "-h5"}
|
|
|
+ sourceMap := map[string]string{} //根据留资维表:tidb/Jianyu_subjectdb/d_saleleads_code
|
|
|
+ saleSource := TiDb.SelectBySql(`SELECT source,name FROM d_saleleads_code WHERE department LIKE '%咨询组%' AND is_delete = 1`)
|
|
|
+ if saleSource != nil && len(*saleSource) > 0 {
|
|
|
+ for _, v := range *saleSource {
|
|
|
+ source := common.ObjToString(v["source"])
|
|
|
+ name := common.ObjToString(v["name"])
|
|
|
+ for _, s := range filterArr {
|
|
|
+ name = strings.ReplaceAll(name, s, "")
|
|
|
}
|
|
|
+ sourceMap[source] = name
|
|
|
}
|
|
|
- if sourceMap[sources] != "" {
|
|
|
- company := common.ObjToString(v["company"])
|
|
|
- phone := common.ObjToString(v["phone"])
|
|
|
- if IsInternal(phone) {
|
|
|
- continue
|
|
|
+ }
|
|
|
+ nowTime := time.Now().Format(date.Date_Full_Layout)
|
|
|
+ advisoryCommitteeTime := cfg.AdvisoryCommitteeTime
|
|
|
+ if advisoryCommitteeTime == 0 {
|
|
|
+ advisoryCommitteeTime = time.Now().Unix()
|
|
|
+ }
|
|
|
+ abhList := []map[string]interface{}{}
|
|
|
+ saleleadsData, ok := Mgo.Find("saleLeads", map[string]interface{}{"createtime": map[string]interface{}{"$gte": advisoryCommitteeTime}}, `{"phone":1,"createtime":1}`, nil, false, -1, -1)
|
|
|
+ if ok && saleleadsData != nil && len(*saleleadsData) > 0 {
|
|
|
+ data := FindBatchData("zx")
|
|
|
+ for _, v := range *saleleadsData {
|
|
|
+ sources := common.ObjToString(v["source"])
|
|
|
+ userid := common.ObjToString(v["userid"])
|
|
|
+ uid := ""
|
|
|
+ if !mongodb.IsObjectIdHex(userid) {
|
|
|
+ userMapping := TiDb.FindOne("dwd_f_userbase_id_mapping", map[string]interface{}{"position_id": userid}, "", "")
|
|
|
+ if userMapping != nil && len(*userMapping) > 0 {
|
|
|
+ userid = common.ObjToString((*userMapping)["userid"])
|
|
|
+ uid = common.ObjToString((*userMapping)["uid"])
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ userMapping := TiDb.FindOne("dwd_f_userbase_id_mapping", map[string]interface{}{"userid": userid}, "", "")
|
|
|
+ if userMapping != nil && len(*userMapping) > 0 {
|
|
|
+ userid = common.ObjToString((*userMapping)["userid"])
|
|
|
+ uid = common.ObjToString((*userMapping)["uid"])
|
|
|
+ }
|
|
|
}
|
|
|
- username := common.ObjToString(v["name"])
|
|
|
- email := common.ObjToString(v["mail"])
|
|
|
- interest := common.ObjToString(v["interest"])
|
|
|
- data_requirement := common.ObjToString(v["data_requirement"])
|
|
|
- source := sourceMap[sources]
|
|
|
- belongTo := "咨询组"
|
|
|
- userData := TiDb.FindOne("dwd_f_userbase_baseinfo", map[string]interface{}{"uid": uid}, "", "")
|
|
|
- if userData != nil {
|
|
|
- bt := common.ObjToString((*userData)["belong_to"])
|
|
|
- if strings.HasPrefix(bt, "03") || bt == "0102" {
|
|
|
+ if sourceMap[sources] != "" {
|
|
|
+ company := common.ObjToString(v["company"])
|
|
|
+ phone := common.ObjToString(v["phone"])
|
|
|
+ if IsInternal(phone) {
|
|
|
continue
|
|
|
}
|
|
|
- }
|
|
|
- key := fmt.Sprintf("%s_%s_%s", source, phone, interest)
|
|
|
- if _, ok := data[key]; ok {
|
|
|
- continue
|
|
|
- }
|
|
|
- data[key] = true
|
|
|
- s_sourceid := common.ObjToString((*userData)["s_sourceid"])
|
|
|
- if s_sourceid == db.Sourceid {
|
|
|
- abhList = append(abhList, map[string]interface{}{
|
|
|
+ username := common.ObjToString(v["name"])
|
|
|
+ email := common.ObjToString(v["mail"])
|
|
|
+ interest := common.ObjToString(v["interest"])
|
|
|
+ data_requirement := common.ObjToString(v["data_requirement"])
|
|
|
+ source := sourceMap[sources]
|
|
|
+ belongTo := "咨询组"
|
|
|
+ userData := TiDb.FindOne("dwd_f_userbase_baseinfo", map[string]interface{}{"uid": uid}, "", "")
|
|
|
+ if userData != nil {
|
|
|
+ bt := common.ObjToString((*userData)["belong_to"])
|
|
|
+ if strings.HasPrefix(bt, "03") || bt == "0102" {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ }
|
|
|
+ key := fmt.Sprintf("%s_%s_%s", source, phone, interest)
|
|
|
+ if _, ok := data[key]; ok {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ data[key] = true
|
|
|
+ s_sourceid := common.ObjToString((*userData)["s_sourceid"])
|
|
|
+ if s_sourceid == db.Sourceid {
|
|
|
+ abhList = append(abhList, map[string]interface{}{
|
|
|
+ "createTime": nowTime,
|
|
|
+ "createtime": v["createtime"],
|
|
|
+ "username": username,
|
|
|
+ "company": company,
|
|
|
+ "phone": phone,
|
|
|
+ "source": source,
|
|
|
+ "belongTo": belongTo,
|
|
|
+ "interest": interest,
|
|
|
+ "data_requirement": data_requirement,
|
|
|
+ "branch": v["branch"],
|
|
|
+ "email": email,
|
|
|
+ })
|
|
|
+ if gconv.Int64(v["createtime"]) > advisoryCommitteeTime {
|
|
|
+ advisoryCommitteeTime = gconv.Int64(v["createtime"])
|
|
|
+ }
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ dataArr = append(dataArr, map[string]interface{}{
|
|
|
"createTime": nowTime,
|
|
|
"createtime": v["createtime"],
|
|
|
"username": username,
|
|
@@ -749,168 +750,175 @@ func AdvisoryCommittee() {
|
|
|
"branch": v["branch"],
|
|
|
"email": email,
|
|
|
})
|
|
|
- if gconv.Int64(v["createtime"]) > advisoryCommitteeTime {
|
|
|
- advisoryCommitteeTime = gconv.Int64(v["createtime"])
|
|
|
- }
|
|
|
- continue
|
|
|
+
|
|
|
}
|
|
|
- dataArr = append(dataArr, map[string]interface{}{
|
|
|
- "createTime": nowTime,
|
|
|
- "createtime": v["createtime"],
|
|
|
- "username": username,
|
|
|
- "company": company,
|
|
|
- "phone": phone,
|
|
|
- "source": source,
|
|
|
- "belongTo": belongTo,
|
|
|
- "interest": interest,
|
|
|
- "data_requirement": data_requirement,
|
|
|
- "branch": v["branch"],
|
|
|
- "email": email,
|
|
|
- })
|
|
|
|
|
|
}
|
|
|
-
|
|
|
- }
|
|
|
- keyContent := fmt.Sprintf("data_%s_%s", time.Now().Format("2006-01-02"), "zx")
|
|
|
- redis.Put("newother", keyContent, data, 86400)
|
|
|
- }
|
|
|
- if len(abhList) > 0 {
|
|
|
- //安博会发邮件高翔
|
|
|
- ABHEmail("advisory", abhList)
|
|
|
- }
|
|
|
- cfg.AdvisoryCommitteeTime = advisoryCommitteeTime
|
|
|
- xlsxArr := []string{"姓名", "联系方式", "邮箱", "公司名称", "咨询需求", "销售线索来源", "具体来源", "留资时间"}
|
|
|
- if len(dataArr) > 0 {
|
|
|
- //排序:首先按照“联系方式”排序,即同1个用户的留资放在一起,其次按照留资时间正序排序。
|
|
|
- batch := FindBatch("zx")
|
|
|
- fileName, detailName := "咨询服务销售线索 "+time.Now().Format(date.Date_Short_Layout)+"-"+batch, ""
|
|
|
- xf := xlsx.NewFile()
|
|
|
- style := xlsx.NewStyle()
|
|
|
- style.Font.Size = 12
|
|
|
- style.Font.Bold = true
|
|
|
- style.Alignment.Vertical = "center"
|
|
|
- style.Alignment.Horizontal = "center"
|
|
|
- detailName = "今日新增咨询服务销售线索,请查收附件,及时跟进。"
|
|
|
- sh, _ := xf.AddSheet("线索数据")
|
|
|
- row1 := sh.AddRow()
|
|
|
- for _, x := range xlsxArr {
|
|
|
- cell := row1.AddCell()
|
|
|
- cell.SetString(x)
|
|
|
- cell.SetStyle(style)
|
|
|
+ keyContent := fmt.Sprintf("data_%s_%s", time.Now().Format("2006-01-02"), "zx")
|
|
|
+ redis.Put("newother", keyContent, data, 86400)
|
|
|
}
|
|
|
- for _, v := range dataArr {
|
|
|
- row := sh.AddRow()
|
|
|
- row.AddCell().SetString(common.ObjToString(v["username"]))
|
|
|
- row.AddCell().SetString(common.ObjToString(v["phone"]))
|
|
|
- row.AddCell().SetString(common.ObjToString(v["email"]))
|
|
|
- row.AddCell().SetString(common.ObjToString(v["company"]))
|
|
|
- row.AddCell().SetString(common.ObjToString(v["data_requirement"]))
|
|
|
- row.AddCell().SetString(common.ObjToString(v["source"]))
|
|
|
- row.AddCell().SetString(common.ObjToString(v["interest"]))
|
|
|
- row.AddCell().SetString(gconv.Time(gconv.Int64(v["createtime"])).Format(date.Date_Full_Layout))
|
|
|
- //增加客户需求
|
|
|
+ if len(abhList) > 0 {
|
|
|
+ //安博会发邮件高翔
|
|
|
+ ABHEmail("advisory", abhList)
|
|
|
}
|
|
|
- email := db.AdvisoryCommitteeMail
|
|
|
- dir := "./xlsx/zx/" + fileName + ".xlsx"
|
|
|
- err := xf.Save(dir)
|
|
|
- if err != nil {
|
|
|
- log.Println("xls error", err, dir)
|
|
|
- } else {
|
|
|
- gmail := &mail.GmailAuth{
|
|
|
- SmtpHost: "smtp.exmail.qq.com",
|
|
|
- SmtpPort: 465,
|
|
|
- User: "public03@topnet.net.cn",
|
|
|
- Pwd: "ue9Rg9Sf4CVtdm5a",
|
|
|
+ cfg.AdvisoryCommitteeTime = advisoryCommitteeTime
|
|
|
+ xlsxArr := []string{"姓名", "联系方式", "邮箱", "公司名称", "咨询需求", "销售线索来源", "具体来源", "留资时间"}
|
|
|
+ if len(dataArr) > 0 {
|
|
|
+ //排序:首先按照“联系方式”排序,即同1个用户的留资放在一起,其次按照留资时间正序排序。
|
|
|
+ batch := FindBatch("zx")
|
|
|
+ fileName, detailName := "咨询服务销售线索 "+time.Now().Format(date.Date_Short_Layout)+"-"+batch, ""
|
|
|
+ xf := xlsx.NewFile()
|
|
|
+ style := xlsx.NewStyle()
|
|
|
+ style.Font.Size = 12
|
|
|
+ style.Font.Bold = true
|
|
|
+ style.Alignment.Vertical = "center"
|
|
|
+ style.Alignment.Horizontal = "center"
|
|
|
+ detailName = "今日新增咨询服务销售线索,请查收附件,及时跟进。"
|
|
|
+ sh, _ := xf.AddSheet("线索数据")
|
|
|
+ row1 := sh.AddRow()
|
|
|
+ for _, x := range xlsxArr {
|
|
|
+ cell := row1.AddCell()
|
|
|
+ cell.SetString(x)
|
|
|
+ cell.SetStyle(style)
|
|
|
}
|
|
|
- for _, v := range email {
|
|
|
- status := mail.GSendMail_q("剑鱼标讯", v, "", "", fileName, detailName, dir, fileName+".xlsx", gmail)
|
|
|
- if status {
|
|
|
- log.Println("send mail success", fileName, v)
|
|
|
+ for _, v := range dataArr {
|
|
|
+ row := sh.AddRow()
|
|
|
+ row.AddCell().SetString(common.ObjToString(v["username"]))
|
|
|
+ row.AddCell().SetString(common.ObjToString(v["phone"]))
|
|
|
+ row.AddCell().SetString(common.ObjToString(v["email"]))
|
|
|
+ row.AddCell().SetString(common.ObjToString(v["company"]))
|
|
|
+ row.AddCell().SetString(common.ObjToString(v["data_requirement"]))
|
|
|
+ row.AddCell().SetString(common.ObjToString(v["source"]))
|
|
|
+ row.AddCell().SetString(common.ObjToString(v["interest"]))
|
|
|
+ row.AddCell().SetString(gconv.Time(gconv.Int64(v["createtime"])).Format(date.Date_Full_Layout))
|
|
|
+ //增加客户需求
|
|
|
+ }
|
|
|
+ email := db.AdvisoryCommitteeMail
|
|
|
+ dir := "./xlsx/zx/" + fileName + ".xlsx"
|
|
|
+ err := xf.Save(dir)
|
|
|
+ if err != nil {
|
|
|
+ log.Println("xls error", err, dir)
|
|
|
+ } else {
|
|
|
+ gmail := &mail.GmailAuth{
|
|
|
+ SmtpHost: "smtp.exmail.qq.com",
|
|
|
+ SmtpPort: 465,
|
|
|
+ User: "public03@topnet.net.cn",
|
|
|
+ Pwd: "ue9Rg9Sf4CVtdm5a",
|
|
|
+ }
|
|
|
+ for _, v := range email {
|
|
|
+ status := mail.GSendMail_q("剑鱼标讯", v, "", "", fileName, detailName, dir, fileName+".xlsx", gmail)
|
|
|
+ if status {
|
|
|
+ log.Println("send mail success", fileName, v)
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+ common.WriteSysConfig(&cfg)
|
|
|
+ log.Println("咨询部线索定时任务结束")
|
|
|
}
|
|
|
- common.WriteSysConfig(&cfg)
|
|
|
- log.Println("咨询部线索定时任务结束")
|
|
|
-}
|
|
|
|
|
|
// 市场部线索
|
|
|
-func marketCustomer() {
|
|
|
- runOk := getRunOk()
|
|
|
- if !runOk {
|
|
|
- log.Println("不是工作日,任务暂停")
|
|
|
- return
|
|
|
- }
|
|
|
- log.Println("市场部线索定时任务开始")
|
|
|
- dataArr := []map[string]interface{}{}
|
|
|
- filterArr := []string{"-pc", "-app", "-wx", "-h5"}
|
|
|
- sourceMap := map[string]string{} //根据留资维表:tidb/Jianyu_subjectdb/d_saleleads_code
|
|
|
- saleSource := TiDb.SelectBySql(`SELECT source,name FROM d_saleleads_code WHERE department LIKE '%市场组%' AND is_delete = 1`)
|
|
|
- if saleSource != nil && len(*saleSource) > 0 {
|
|
|
- for _, v := range *saleSource {
|
|
|
- source := common.ObjToString(v["source"])
|
|
|
- name := common.ObjToString(v["name"])
|
|
|
- for _, s := range filterArr {
|
|
|
- name = strings.ReplaceAll(name, s, "")
|
|
|
- }
|
|
|
- sourceMap[source] = name
|
|
|
+
|
|
|
+ func marketCustomer() {
|
|
|
+ runOk := getRunOk()
|
|
|
+ if !runOk {
|
|
|
+ log.Println("不是工作日,任务暂停")
|
|
|
+ return
|
|
|
}
|
|
|
- }
|
|
|
- nowTime := time.Now().Format(date.Date_Full_Layout)
|
|
|
- marketSaleTime := cfg.MarketSaleTime
|
|
|
- if marketSaleTime == 0 {
|
|
|
- marketSaleTime = time.Now().Unix()
|
|
|
- }
|
|
|
- abhList := []map[string]interface{}{}
|
|
|
- saleleadsData, ok := Mgo.Find("saleLeads", map[string]interface{}{"createtime": map[string]interface{}{"$gte": marketSaleTime}}, `{"phone":1,"createtime":1}`, nil, false, -1, -1)
|
|
|
- if ok && saleleadsData != nil && len(*saleleadsData) > 0 {
|
|
|
- data := FindBatchData("sc")
|
|
|
- for _, v := range *saleleadsData {
|
|
|
- sources := common.ObjToString(v["source"])
|
|
|
- userid := common.ObjToString(v["userid"])
|
|
|
- uid := ""
|
|
|
- if !mongodb.IsObjectIdHex(userid) {
|
|
|
- userMapping := TiDb.FindOne("dwd_f_userbase_id_mapping", map[string]interface{}{"position_id": userid}, "", "")
|
|
|
- if userMapping != nil && len(*userMapping) > 0 {
|
|
|
- userid = common.ObjToString((*userMapping)["userid"])
|
|
|
- uid = common.ObjToString((*userMapping)["uid"])
|
|
|
- }
|
|
|
- } else {
|
|
|
- userMapping := TiDb.FindOne("dwd_f_userbase_id_mapping", map[string]interface{}{"userid": userid}, "", "")
|
|
|
- if userMapping != nil && len(*userMapping) > 0 {
|
|
|
- userid = common.ObjToString((*userMapping)["userid"])
|
|
|
- uid = common.ObjToString((*userMapping)["uid"])
|
|
|
+ log.Println("市场部线索定时任务开始")
|
|
|
+ dataArr := []map[string]interface{}{}
|
|
|
+ filterArr := []string{"-pc", "-app", "-wx", "-h5"}
|
|
|
+ sourceMap := map[string]string{} //根据留资维表:tidb/Jianyu_subjectdb/d_saleleads_code
|
|
|
+ saleSource := TiDb.SelectBySql(`SELECT source,name FROM d_saleleads_code WHERE department LIKE '%市场组%' AND is_delete = 1`)
|
|
|
+ if saleSource != nil && len(*saleSource) > 0 {
|
|
|
+ for _, v := range *saleSource {
|
|
|
+ source := common.ObjToString(v["source"])
|
|
|
+ name := common.ObjToString(v["name"])
|
|
|
+ for _, s := range filterArr {
|
|
|
+ name = strings.ReplaceAll(name, s, "")
|
|
|
}
|
|
|
+ sourceMap[source] = name
|
|
|
}
|
|
|
- if sourceMap[sources] != "" {
|
|
|
- company := common.ObjToString(v["company"])
|
|
|
- phone := common.ObjToString(v["phone"])
|
|
|
- if IsInternal(phone) {
|
|
|
- continue
|
|
|
+ }
|
|
|
+ nowTime := time.Now().Format(date.Date_Full_Layout)
|
|
|
+ marketSaleTime := cfg.MarketSaleTime
|
|
|
+ if marketSaleTime == 0 {
|
|
|
+ marketSaleTime = time.Now().Unix()
|
|
|
+ }
|
|
|
+ abhList := []map[string]interface{}{}
|
|
|
+ saleleadsData, ok := Mgo.Find("saleLeads", map[string]interface{}{"createtime": map[string]interface{}{"$gte": marketSaleTime}}, `{"phone":1,"createtime":1}`, nil, false, -1, -1)
|
|
|
+ if ok && saleleadsData != nil && len(*saleleadsData) > 0 {
|
|
|
+ data := FindBatchData("sc")
|
|
|
+ for _, v := range *saleleadsData {
|
|
|
+ sources := common.ObjToString(v["source"])
|
|
|
+ userid := common.ObjToString(v["userid"])
|
|
|
+ uid := ""
|
|
|
+ if !mongodb.IsObjectIdHex(userid) {
|
|
|
+ userMapping := TiDb.FindOne("dwd_f_userbase_id_mapping", map[string]interface{}{"position_id": userid}, "", "")
|
|
|
+ if userMapping != nil && len(*userMapping) > 0 {
|
|
|
+ userid = common.ObjToString((*userMapping)["userid"])
|
|
|
+ uid = common.ObjToString((*userMapping)["uid"])
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ userMapping := TiDb.FindOne("dwd_f_userbase_id_mapping", map[string]interface{}{"userid": userid}, "", "")
|
|
|
+ if userMapping != nil && len(*userMapping) > 0 {
|
|
|
+ userid = common.ObjToString((*userMapping)["userid"])
|
|
|
+ uid = common.ObjToString((*userMapping)["uid"])
|
|
|
+ }
|
|
|
}
|
|
|
- job := common.ObjToString(v["position"])
|
|
|
- username := common.ObjToString(v["name"])
|
|
|
- email := common.ObjToString(v["mail"])
|
|
|
- interest := common.ObjToString(v["interest"])
|
|
|
- data_requirement := common.ObjToString(v["data_requirement"])
|
|
|
- source := sourceMap[sources]
|
|
|
- belongTo, usernickname := "市场组", ""
|
|
|
- userData := TiDb.FindOne("dwd_f_userbase_baseinfo", map[string]interface{}{"uid": uid}, "", "")
|
|
|
- if userData != nil {
|
|
|
- usernickname = common.ObjToString((*userData)["nickname"])
|
|
|
- bt := common.ObjToString((*userData)["belong_to"])
|
|
|
- if strings.HasPrefix(bt, "03") || bt == "0102" {
|
|
|
+ if sourceMap[sources] != "" {
|
|
|
+ company := common.ObjToString(v["company"])
|
|
|
+ phone := common.ObjToString(v["phone"])
|
|
|
+ if IsInternal(phone) {
|
|
|
continue
|
|
|
}
|
|
|
- }
|
|
|
- key := fmt.Sprintf("%s_%s", source, phone)
|
|
|
- if _, ok := data[key]; ok {
|
|
|
- continue
|
|
|
- }
|
|
|
- s_sourceid := common.ObjToString((*userData)["s_sourceid"])
|
|
|
- data[key] = true
|
|
|
- if s_sourceid == db.Sourceid {
|
|
|
- abhList = append(abhList, map[string]interface{}{
|
|
|
+ job := common.ObjToString(v["position"])
|
|
|
+ username := common.ObjToString(v["name"])
|
|
|
+ email := common.ObjToString(v["mail"])
|
|
|
+ interest := common.ObjToString(v["interest"])
|
|
|
+ data_requirement := common.ObjToString(v["data_requirement"])
|
|
|
+ source := sourceMap[sources]
|
|
|
+ belongTo, usernickname := "市场组", ""
|
|
|
+ userData := TiDb.FindOne("dwd_f_userbase_baseinfo", map[string]interface{}{"uid": uid}, "", "")
|
|
|
+ if userData != nil {
|
|
|
+ usernickname = common.ObjToString((*userData)["nickname"])
|
|
|
+ bt := common.ObjToString((*userData)["belong_to"])
|
|
|
+ if strings.HasPrefix(bt, "03") || bt == "0102" {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ }
|
|
|
+ key := fmt.Sprintf("%s_%s", source, phone)
|
|
|
+ if _, ok := data[key]; ok {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ s_sourceid := common.ObjToString((*userData)["s_sourceid"])
|
|
|
+ data[key] = true
|
|
|
+ if s_sourceid == db.Sourceid {
|
|
|
+ abhList = append(abhList, map[string]interface{}{
|
|
|
+ "createTime": nowTime,
|
|
|
+ "lastUpdateTime": nowTime,
|
|
|
+ "createtime": v["createtime"],
|
|
|
+ "uid": uid,
|
|
|
+ "userid": userid,
|
|
|
+ "username": username,
|
|
|
+ "usernickname": usernickname,
|
|
|
+ "company": company,
|
|
|
+ "job": job,
|
|
|
+ "phone": phone,
|
|
|
+ "email": email,
|
|
|
+ "source": source,
|
|
|
+ "belongTo": belongTo,
|
|
|
+ "interest": interest,
|
|
|
+ "data_requirement": data_requirement,
|
|
|
+ "branch": v["branch"],
|
|
|
+ "s_sourceid": s_sourceid,
|
|
|
+ })
|
|
|
+ if gconv.Int64(v["createtime"]) > marketSaleTime {
|
|
|
+ marketSaleTime = gconv.Int64(v["createtime"])
|
|
|
+ }
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ dataArr = append(dataArr, map[string]interface{}{
|
|
|
"createTime": nowTime,
|
|
|
"lastUpdateTime": nowTime,
|
|
|
"createtime": v["createtime"],
|
|
@@ -929,98 +937,75 @@ func marketCustomer() {
|
|
|
"branch": v["branch"],
|
|
|
"s_sourceid": s_sourceid,
|
|
|
})
|
|
|
- if gconv.Int64(v["createtime"]) > marketSaleTime {
|
|
|
- marketSaleTime = gconv.Int64(v["createtime"])
|
|
|
- }
|
|
|
- continue
|
|
|
- }
|
|
|
- dataArr = append(dataArr, map[string]interface{}{
|
|
|
- "createTime": nowTime,
|
|
|
- "lastUpdateTime": nowTime,
|
|
|
- "createtime": v["createtime"],
|
|
|
- "uid": uid,
|
|
|
- "userid": userid,
|
|
|
- "username": username,
|
|
|
- "usernickname": usernickname,
|
|
|
- "company": company,
|
|
|
- "job": job,
|
|
|
- "phone": phone,
|
|
|
- "email": email,
|
|
|
- "source": source,
|
|
|
- "belongTo": belongTo,
|
|
|
- "interest": interest,
|
|
|
- "data_requirement": data_requirement,
|
|
|
- "branch": v["branch"],
|
|
|
- "s_sourceid": s_sourceid,
|
|
|
- })
|
|
|
|
|
|
+ }
|
|
|
+ if gconv.Int64(v["createtime"]) > marketSaleTime {
|
|
|
+ marketSaleTime = gconv.Int64(v["createtime"])
|
|
|
+ }
|
|
|
}
|
|
|
- if gconv.Int64(v["createtime"]) > marketSaleTime {
|
|
|
- marketSaleTime = gconv.Int64(v["createtime"])
|
|
|
+ if len(abhList) > 0 {
|
|
|
+ //安博会发邮件高翔
|
|
|
+ ABHEmail("market", abhList)
|
|
|
}
|
|
|
- }
|
|
|
- if len(abhList) > 0 {
|
|
|
- //安博会发邮件高翔
|
|
|
- ABHEmail("market", abhList)
|
|
|
- }
|
|
|
- keyContent := fmt.Sprintf("data_%s_%s", time.Now().Format("2006-01-02"), "sc")
|
|
|
- redis.Put("newother", keyContent, data, 86400)
|
|
|
+ keyContent := fmt.Sprintf("data_%s_%s", time.Now().Format("2006-01-02"), "sc")
|
|
|
+ redis.Put("newother", keyContent, data, 86400)
|
|
|
|
|
|
- }
|
|
|
- cfg.MarketSaleTime = marketSaleTime
|
|
|
- xlsxArr := []string{"姓名", "联系人电话", "公司名称", "职位", "部门", "销售线索来源", "留资时间"}
|
|
|
- if len(dataArr) > 0 {
|
|
|
- //排序:首先按照“联系方式”排序,即同1个用户的留资放在一起,其次按照留资时间正序排序。
|
|
|
- batch := FindBatch("sc")
|
|
|
- fileName, detailName := "商务合作销售线索 "+time.Now().Format(date.Date_Short_Layout)+"-"+batch, ""
|
|
|
- xf := xlsx.NewFile()
|
|
|
- style := xlsx.NewStyle()
|
|
|
- style.Font.Size = 12
|
|
|
- style.Font.Bold = true
|
|
|
- style.Alignment.Vertical = "center"
|
|
|
- style.Alignment.Horizontal = "center"
|
|
|
- detailName = "今日新增商务合作销售线索,请查收附件,及时跟进。"
|
|
|
- sh, _ := xf.AddSheet("线索数据")
|
|
|
- row1 := sh.AddRow()
|
|
|
- for _, x := range xlsxArr {
|
|
|
- cell := row1.AddCell()
|
|
|
- cell.SetString(x)
|
|
|
- cell.SetStyle(style)
|
|
|
}
|
|
|
- for _, v := range dataArr {
|
|
|
+ cfg.MarketSaleTime = marketSaleTime
|
|
|
+ xlsxArr := []string{"姓名", "联系人电话", "公司名称", "职位", "部门", "销售线索来源", "留资时间"}
|
|
|
+ if len(dataArr) > 0 {
|
|
|
+ //排序:首先按照“联系方式”排序,即同1个用户的留资放在一起,其次按照留资时间正序排序。
|
|
|
+ batch := FindBatch("sc")
|
|
|
+ fileName, detailName := "商务合作销售线索 "+time.Now().Format(date.Date_Short_Layout)+"-"+batch, ""
|
|
|
+ xf := xlsx.NewFile()
|
|
|
+ style := xlsx.NewStyle()
|
|
|
+ style.Font.Size = 12
|
|
|
+ style.Font.Bold = true
|
|
|
+ style.Alignment.Vertical = "center"
|
|
|
+ style.Alignment.Horizontal = "center"
|
|
|
+ detailName = "今日新增商务合作销售线索,请查收附件,及时跟进。"
|
|
|
+ sh, _ := xf.AddSheet("线索数据")
|
|
|
+ row1 := sh.AddRow()
|
|
|
+ for _, x := range xlsxArr {
|
|
|
+ cell := row1.AddCell()
|
|
|
+ cell.SetString(x)
|
|
|
+ cell.SetStyle(style)
|
|
|
+ }
|
|
|
+ for _, v := range dataArr {
|
|
|
|
|
|
- row := sh.AddRow()
|
|
|
- row.AddCell().SetString(common.ObjToString(v["username"]))
|
|
|
- row.AddCell().SetString(common.ObjToString(v["phone"]))
|
|
|
- row.AddCell().SetString(common.ObjToString(v["company"]))
|
|
|
- row.AddCell().SetString(common.ObjToString(v["job"]))
|
|
|
- row.AddCell().SetString(common.ObjToString(v["branch"]))
|
|
|
- row.AddCell().SetString(common.ObjToString(v["source"]))
|
|
|
- row.AddCell().SetString(gconv.Time(gconv.Int64(v["createtime"])).Format(date.Date_Full_Layout))
|
|
|
- //增加客户需求
|
|
|
- }
|
|
|
- email := db.MarketSaleMail
|
|
|
- dir := "./xlsx/sc/" + fileName + ".xlsx"
|
|
|
- err := xf.Save(dir)
|
|
|
- if err != nil {
|
|
|
- log.Println("xls error", err, dir)
|
|
|
- } else {
|
|
|
- gmail := &mail.GmailAuth{
|
|
|
- SmtpHost: "smtp.exmail.qq.com",
|
|
|
- SmtpPort: 465,
|
|
|
- User: "public03@topnet.net.cn",
|
|
|
- Pwd: "ue9Rg9Sf4CVtdm5a",
|
|
|
+ row := sh.AddRow()
|
|
|
+ row.AddCell().SetString(common.ObjToString(v["username"]))
|
|
|
+ row.AddCell().SetString(common.ObjToString(v["phone"]))
|
|
|
+ row.AddCell().SetString(common.ObjToString(v["company"]))
|
|
|
+ row.AddCell().SetString(common.ObjToString(v["job"]))
|
|
|
+ row.AddCell().SetString(common.ObjToString(v["branch"]))
|
|
|
+ row.AddCell().SetString(common.ObjToString(v["source"]))
|
|
|
+ row.AddCell().SetString(gconv.Time(gconv.Int64(v["createtime"])).Format(date.Date_Full_Layout))
|
|
|
+ //增加客户需求
|
|
|
}
|
|
|
- status := mail.GSendMail_q("剑鱼标讯", email, "", "", fileName, detailName, dir, fileName+".xlsx", gmail)
|
|
|
- if status {
|
|
|
- log.Println("send mail success", fileName, email)
|
|
|
+ email := db.MarketSaleMail
|
|
|
+ dir := "./xlsx/sc/" + fileName + ".xlsx"
|
|
|
+ err := xf.Save(dir)
|
|
|
+ if err != nil {
|
|
|
+ log.Println("xls error", err, dir)
|
|
|
+ } else {
|
|
|
+ gmail := &mail.GmailAuth{
|
|
|
+ SmtpHost: "smtp.exmail.qq.com",
|
|
|
+ SmtpPort: 465,
|
|
|
+ User: "public03@topnet.net.cn",
|
|
|
+ Pwd: "ue9Rg9Sf4CVtdm5a",
|
|
|
+ }
|
|
|
+ status := mail.GSendMail_q("剑鱼标讯", email, "", "", fileName, detailName, dir, fileName+".xlsx", gmail)
|
|
|
+ if status {
|
|
|
+ log.Println("send mail success", fileName, email)
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
+ }
|
|
|
+ common.WriteSysConfig(&cfg)
|
|
|
+ log.Println("大客户线索定时任务结束")
|
|
|
}
|
|
|
- common.WriteSysConfig(&cfg)
|
|
|
- log.Println("大客户线索定时任务结束")
|
|
|
-}
|
|
|
+*/
|
|
|
func eventReg() {
|
|
|
lastEventRegTime := cfg.LastEventRegTime
|
|
|
sql := fmt.Sprintf(`select * from exhibition_sign_up where is_del = 0 and update_time > "%s" order by update_time asc`, lastEventRegTime)
|
|
@@ -1105,3 +1090,284 @@ 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, abhList := processLeads("zx", startTime, sourceMap, nowTime)
|
|
|
+ if len(abhList) > 0 {
|
|
|
+ ABHEmail("advisory", abhList)
|
|
|
+ }
|
|
|
+
|
|
|
+ cfg.AdvisoryCommitteeTime = startTime
|
|
|
+ exportToExcel(dataArr, "咨询服务销售线索", "zx")
|
|
|
+ log.Println("咨询部线索定时任务结束")
|
|
|
+}
|
|
|
+
|
|
|
+// 运营部线索
|
|
|
+func SelectionDepartment() {
|
|
|
+ if !isRunning() {
|
|
|
+ log.Println("不是工作日,任务暂停")
|
|
|
+ return
|
|
|
+ }
|
|
|
+ log.Println("运营部部线索定时任务开始")
|
|
|
+
|
|
|
+ sourceMap := buildSourceMap("运营部")
|
|
|
+ nowTime := time.Now().Format(date.Date_Full_Layout)
|
|
|
+ startTime := getCommitteeTime(cfg.SelectionDepartmentTime)
|
|
|
+ dataArr, abhList := processLeads("yy", startTime, sourceMap, nowTime)
|
|
|
+ if len(abhList) > 0 {
|
|
|
+ ABHEmail("selection", abhList)
|
|
|
+ }
|
|
|
+ cfg.SelectionDepartmentTime = startTime
|
|
|
+ exportToExcel(dataArr, "运营部服务销售线索", "zx")
|
|
|
+ log.Println("运营部部线索定时任务结束")
|
|
|
+}
|
|
|
+
|
|
|
+// 市场部线索
|
|
|
+func MarketCustomer() {
|
|
|
+ if !isRunning() {
|
|
|
+ log.Println("不是工作日,任务暂停")
|
|
|
+ return
|
|
|
+ }
|
|
|
+ log.Println("市场部线索定时任务开始")
|
|
|
+
|
|
|
+ sourceMap := buildSourceMap("市场组")
|
|
|
+ nowTime := time.Now().Format(date.Date_Full_Layout)
|
|
|
+ startTime := getCommitteeTime(cfg.MarketSaleTime)
|
|
|
+ dataArr, abhList := processLeads("sc", startTime, sourceMap, nowTime)
|
|
|
+
|
|
|
+ if len(abhList) > 0 {
|
|
|
+ ABHEmail("market", abhList)
|
|
|
+ }
|
|
|
+
|
|
|
+ cfg.MarketSaleTime = startTime
|
|
|
+ exportToExcel(dataArr, "商务合作销售线索", "sc")
|
|
|
+
|
|
|
+ log.Println("市场部线索定时任务结束")
|
|
|
+}
|
|
|
+
|
|
|
+// 判断是否在工作日
|
|
|
+func isRunning() bool {
|
|
|
+ return getRunOk()
|
|
|
+}
|
|
|
+
|
|
|
+// 从数据库构建来源映射
|
|
|
+func buildSourceMap(department string) map[string]string {
|
|
|
+ sourceMap := map[string]string{}
|
|
|
+ saleSource := TiDb.SelectBySql(fmt.Sprintf(`SELECT source,name FROM d_saleleads_code WHERE department LIKE '%%%s%%' AND is_delete = 1`, department))
|
|
|
+ if saleSource != nil {
|
|
|
+ for _, v := range *saleSource {
|
|
|
+ source := common.ObjToString(v["source"])
|
|
|
+ name := common.ObjToString(v["name"])
|
|
|
+ name = filterSourceName(name)
|
|
|
+ sourceMap[source] = name
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return sourceMap
|
|
|
+}
|
|
|
+
|
|
|
+// 过滤来源名称
|
|
|
+func filterSourceName(name string) string {
|
|
|
+ filterArr := []string{"-pc", "-app", "-wx", "-h5"}
|
|
|
+ for _, s := range filterArr {
|
|
|
+ name = strings.ReplaceAll(name, s, "")
|
|
|
+ }
|
|
|
+ return name
|
|
|
+}
|
|
|
+
|
|
|
+// 获取最后一条数据时间
|
|
|
+func getCommitteeTime(cfgTime int64) int64 {
|
|
|
+ if cfgTime == 0 {
|
|
|
+ return time.Now().Unix()
|
|
|
+ }
|
|
|
+ return cfgTime
|
|
|
+}
|
|
|
+
|
|
|
+// 处理线索
|
|
|
+func processLeads(batch string, committeeTime int64, sourceMap map[string]string, nowTime string) ([]map[string]interface{}, []map[string]interface{}) {
|
|
|
+ dataArr := []map[string]interface{}{}
|
|
|
+ abhList := []map[string]interface{}{}
|
|
|
+ saleleadsData, ok := Mgo.Find("saleLeads", map[string]interface{}{"createtime": map[string]interface{}{"$gte": committeeTime}}, `{"phone":1,"createtime":1}`, nil, false, -1, -1)
|
|
|
+ if ok && saleleadsData != nil {
|
|
|
+ data := FindBatchData(batch)
|
|
|
+ for _, v := range *saleleadsData {
|
|
|
+ if lead := processLead(v, sourceMap, nowTime, committeeTime, data); lead != nil {
|
|
|
+ if isABHLead(lead) {
|
|
|
+ abhList = append(abhList, lead)
|
|
|
+ } else {
|
|
|
+ dataArr = append(dataArr, lead)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ saveDataToRedis(data, batch)
|
|
|
+ }
|
|
|
+
|
|
|
+ return dataArr, abhList
|
|
|
+}
|
|
|
+
|
|
|
+// 处理单个线索
|
|
|
+func processLead(v map[string]interface{}, sourceMap map[string]string, nowTime string, committeeTime int64, data map[string]interface{}) map[string]interface{} {
|
|
|
+ sources := common.ObjToString(v["source"])
|
|
|
+ if sourceMap[sources] == "" {
|
|
|
+ return nil
|
|
|
+ }
|
|
|
+ phone := common.ObjToString(v["phone"])
|
|
|
+ if IsInternal(phone) {
|
|
|
+ return nil
|
|
|
+ }
|
|
|
+ // 获取用户信息
|
|
|
+ userData := getUserData(v)
|
|
|
+ if userData == nil || isUserInBlackList(userData) {
|
|
|
+ return nil
|
|
|
+ }
|
|
|
+ key := fmt.Sprintf("%s_%s_%s", sourceMap[sources], phone, common.ObjToString(v["interest"]))
|
|
|
+ if _, exists := data[key]; exists {
|
|
|
+ return nil
|
|
|
+ }
|
|
|
+ data[key] = true
|
|
|
+
|
|
|
+ // 更新委员会时间
|
|
|
+ if gconv.Int64(v["createtime"]) > committeeTime {
|
|
|
+ committeeTime = gconv.Int64(v["createtime"])
|
|
|
+ }
|
|
|
+
|
|
|
+ return map[string]interface{}{
|
|
|
+ "createTime": nowTime,
|
|
|
+ "createtime": v["createtime"],
|
|
|
+ "username": common.ObjToString(v["name"]),
|
|
|
+ "company": common.ObjToString(v["company"]),
|
|
|
+ "phone": phone,
|
|
|
+ "source": sourceMap[sources],
|
|
|
+ "belongTo": "咨询组/市场组", // 根据需要修改
|
|
|
+ "interest": common.ObjToString(v["interest"]),
|
|
|
+ "data_requirement": common.ObjToString(v["data_requirement"]),
|
|
|
+ "branch": v["branch"],
|
|
|
+ "email": common.ObjToString(v["mail"]),
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// 获取用户数据
|
|
|
+func getUserData(v map[string]interface{}) map[string]interface{} {
|
|
|
+ userid := common.ObjToString(v["userid"])
|
|
|
+ userMapping := &map[string]interface{}{}
|
|
|
+ if !mongodb.IsObjectIdHex(userid) {
|
|
|
+ userMapping = TiDb.FindOne("dwd_f_userbase_id_mapping", map[string]interface{}{"position_id": userid}, "", "")
|
|
|
+ } else {
|
|
|
+ userMapping = TiDb.FindOne("dwd_f_userbase_id_mapping", map[string]interface{}{"userid": userid}, "", "")
|
|
|
+ }
|
|
|
+
|
|
|
+ if userMapping != nil && len(*userMapping) > 0 {
|
|
|
+ return *userMapping
|
|
|
+ }
|
|
|
+ return nil
|
|
|
+}
|
|
|
+
|
|
|
+// 判断用户是否在黑名单
|
|
|
+func isUserInBlackList(userData map[string]interface{}) bool {
|
|
|
+ bt := common.ObjToString(userData["belong_to"])
|
|
|
+ return strings.HasPrefix(bt, "03") || bt == "0102"
|
|
|
+}
|
|
|
+
|
|
|
+// 判断是否是安博会线索
|
|
|
+func isABHLead(lead map[string]interface{}) bool {
|
|
|
+ s_sourceid := common.ObjToString(lead["s_sourceid"])
|
|
|
+ return s_sourceid == db.Sourceid
|
|
|
+}
|
|
|
+
|
|
|
+// 导出到 Excel
|
|
|
+func exportToExcel(dataArr []map[string]interface{}, title, batch string) {
|
|
|
+ if len(dataArr) == 0 {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ bigArr := map[string][]map[string]interface{}{}
|
|
|
+ for _, v := range dataArr {
|
|
|
+ minemail, _ := EmailSelect(batch)
|
|
|
+ bigArr[minemail] = append(bigArr[minemail], v)
|
|
|
+ }
|
|
|
+ for email, arr := range bigArr {
|
|
|
+ data := FindBatch(batch)
|
|
|
+ xlsxArr := []string{"姓名", "联系方式", "邮箱", "公司名称", "咨询需求", "销售线索来源", "具体来源", "留资时间"}
|
|
|
+ fileName, detailName := fmt.Sprintf("%s %s-%s", title, time.Now().Format(date.Date_Short_Layout), data), "今日新增销售线索,请查收附件,及时跟进。"
|
|
|
+ xf := xlsx.NewFile()
|
|
|
+ style := xlsx.NewStyle()
|
|
|
+ style.Font.Size = 12
|
|
|
+ style.Font.Bold = true
|
|
|
+ style.Alignment.Vertical = "center"
|
|
|
+ style.Alignment.Horizontal = "center"
|
|
|
+ sh, _ := xf.AddSheet("线索数据")
|
|
|
+ row1 := sh.AddRow()
|
|
|
+ for _, x := range xlsxArr {
|
|
|
+ cell := row1.AddCell()
|
|
|
+ cell.SetString(x)
|
|
|
+ cell.SetStyle(style)
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, v := range arr {
|
|
|
+ row := sh.AddRow()
|
|
|
+ row.AddCell().SetString(common.ObjToString(v["username"]))
|
|
|
+ row.AddCell().SetString(common.ObjToString(v["phone"]))
|
|
|
+ row.AddCell().SetString(common.ObjToString(v["email"]))
|
|
|
+ row.AddCell().SetString(common.ObjToString(v["company"]))
|
|
|
+ row.AddCell().SetString(common.ObjToString(v["data_requirement"]))
|
|
|
+ row.AddCell().SetString(common.ObjToString(v["source"]))
|
|
|
+ row.AddCell().SetString(common.ObjToString(v["interest"]))
|
|
|
+ row.AddCell().SetString(gconv.Time(gconv.Int64(v["createtime"])).Format(date.Date_Full_Layout))
|
|
|
+ }
|
|
|
+ dir := fmt.Sprintf("./xlsx/%s/%s.xlsx", batch, fileName)
|
|
|
+ if err := xf.Save(dir); err != nil {
|
|
|
+ log.Println("xls error", err, dir)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ sendEmail(fileName, detailName, dir, email)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// 发送邮件
|
|
|
+func sendEmail(fileName, detailName, dir, email string) {
|
|
|
+ gmail := &mail.GmailAuth{
|
|
|
+ SmtpHost: "smtp.exmail.qq.com",
|
|
|
+ SmtpPort: 465,
|
|
|
+ User: "public03@topnet.net.cn",
|
|
|
+ Pwd: "ue9Rg9Sf4CVtdm5a",
|
|
|
+ }
|
|
|
+ if status := mail.GSendMail_q("剑鱼标讯", email, "", "", fileName, detailName, dir, fileName+".xlsx", gmail); status {
|
|
|
+ log.Println("send mail success", fileName, email)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// 保存数据到 Redis
|
|
|
+func saveDataToRedis(data map[string]interface{}, batch string) {
|
|
|
+ keyContent := fmt.Sprintf("data_%s_%s", time.Now().Format("2006-01-02"), batch)
|
|
|
+ redis.Put("newother", keyContent, data, 86400)
|
|
|
+}
|
|
|
+
|
|
|
+// 邮箱选择处理
|
|
|
+func EmailSelect(batch 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 {
|
|
|
+ mincount := common.IntAll((*bigData)[0]["count"])
|
|
|
+ for _, vv := range *bigData {
|
|
|
+ vcount := common.IntAll(vv["count"])
|
|
|
+ vemail := common.ObjToString(vv["email"])
|
|
|
+ vName := common.ObjToString(vv["name"])
|
|
|
+ if vcount <= mincount {
|
|
|
+ mincount = vcount
|
|
|
+ minemail = vemail
|
|
|
+ name = vName
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ TiDb.UpdateOrDeleteBySql(`update dwd_f_crm_clue_big_autodraw_record set count = count + 1 where name = ? and type=?`, name, batch)
|
|
|
+ return minemail, name
|
|
|
+}
|