Commit fbd05c07 by 朱继来

添加线上销售离职队列消费

parent 6c0ece06
Showing with 140 additions and 0 deletions
package main
import (
"crm-server/cmd/follow/handle"
"crm-server/configs"
"crm-server/internal/dao"
"crm-server/internal/model"
"crm-server/internal/service"
"encoding/json"
"flag"
"fmt"
"github.com/ichunt2019/logger"
"github.com/streadway/amqp"
"strconv"
"time"
)
// 线上销售离职人员释放未成交用户
// 日志目录
var LogDir string
// 解析命令行参数
func initArgs() {
flag.StringVar(&LogDir, "logDir", "", "日志目录")
flag.Parse()
}
type BomOrder struct {
UserId int `json:"user_id"`
BomId int `json:"bom_id"`
BomSn string `json:"bom_sn"`
}
// 后台用户ID
type Sales struct {
SaleId int `json:"sale_id"`
}
func main() {
initArgs()
logConfig := make(map[string]string)
logConfig["log_path"] = LogDir+"/bom_order"
logConfig["log_chan_size"] = "10"
logger.InitLogger("file",logConfig)
logger.Init()
conn, err := amqp.Dial("amqp://"+configs.RABBITMQDSN+"/")
if err != nil {
logger.Info("Failed to connect to RabbitMQ ", err.Error())
service.DingAlert(configs.Ding_crm_token, "线上销售离职队列任务,连接MQ失败,原因:"+err.Error(), "")
}
defer conn.Close()
ch, err := conn.Channel()
if err != nil {
logger.Info("Failed to open a channel ", err.Error())
service.DingAlert(configs.Ding_crm_token, "线上销售离职队列任务,打开channel失败,原因:"+err.Error(), "")
}
defer ch.Close()
q, err := ch.QueueDeclare(
"crm_online_sales_leave", // name
true, // durable
false, // delete when unused
false, // exclusive
false, // no-wait
nil, // arguments
)
if err != nil {
logger.Info("Failed to declare a queue ", err.Error())
service.DingAlert(configs.Ding_crm_token, "线上销售离职队列任务,声明queue失败,原因:"+err.Error(), "")
}
msgs, err := ch.Consume(
q.Name, // queue
"", // consumer
true, // auto-ack
false, // exclusive
false, // no-local
false, // no-wait
nil, // args
)
if err != nil {
logger.Info("Failed to register a consumer ", err.Error())
service.DingAlert(configs.Ding_crm_token, "线上销售离职队列任务,注册消费者失败,原因:"+err.Error(), "")
}
forever := make(chan bool)
var sale_id Sales
go func() {
for d := range msgs {
fmt.Println(string(d.Body))
json.Unmarshal(d.Body, &sale_id)
consume(sale_id.SaleId)
}
}()
<-forever
}
// 处理
func consume(sale_id int) {
// 获取该客服绑定的所有客户
row, err := dao.GetDb().Queryx("select id,user_id,sale_id,assign_time,update_time,sys_limit,limit_follow_time from lie_salesman where sale_id = ?", sale_id)
if err != nil {
logger.Info("consume method error:", err.Error())
return
}
// 2、遍历数据
for row.Next() {
var sales model.Salesman
err = row.StructScan(&sales)
is_order := handle.IsOrder(sales.User_Id)
if !is_order { // 释放未下单用户
curr_time := time.Now().Unix()
_, err := dao.GetDb().Exec("update lie_user set is_free = ?, free_time = ?, is_churn = ? where user_id = ?", 1, curr_time, 0, sales.User_Id)
if err != nil {
logger.Info("释放用户失败,客服ID:"+strconv.Itoa(sale_id)+",CRM用户ID:"+ strconv.Itoa(sales.User_Id) +"原因:" + err.Error())
service.DingAlert(configs.Ding_crm_task_token, "线上销售离职队列任务告警:释放用户失败,客服ID:"+strconv.Itoa(sale_id)+",CRM用户ID:"+ strconv.Itoa(sales.User_Id) +"原因:" + err.Error(), "")
return
}
// 删除跟进记录
dao.GetDb().Exec("delete from lie_salesman where user_id = ?", sales.User_Id)
// 添加释放日志
dao.GetDb().Exec("insert into lie_action_log (user_id, type, event, remark, create_time) values (?, ?, ?, ?, ?)", sales.User_Id, 2, "释放用户", "客服离职", curr_time)
service.DingAlert(configs.Ding_crm_token, "线上销售离职队列任务告警:释放用户成功,客服ID:"+strconv.Itoa(sale_id)+",CRM用户ID:"+ strconv.Itoa(sales.User_Id), "")
}
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment