@@ -0,0 +1,89 @@ | |||||
package consume | |||||
import ( | |||||
"applet/app/db" | |||||
"applet/app/utils" | |||||
"applet/app/utils/logx" | |||||
"applet/consume/md" | |||||
"code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git/rabbit" | |||||
"encoding/json" | |||||
"errors" | |||||
"fmt" | |||||
"github.com/cc14514/go-geoip2" | |||||
geoip2db "github.com/cc14514/go-geoip2-db" | |||||
"github.com/streadway/amqp" | |||||
"strings" | |||||
) | |||||
func CanalGuideOrderByUserUpLvConsume(queue md.MqQueue) { | |||||
fmt.Println(">>>>>>>>>>>>>>>>>>>>>>>>") | |||||
ch, err := rabbit.Cfg.Pool.GetChannel() | |||||
if err != nil { | |||||
logx.Error(err) | |||||
return | |||||
} | |||||
defer ch.Release() | |||||
//1、将自己绑定到交换机上 | |||||
ch.Bind(queue.Name, queue.ExchangeName, queue.RoutKey) | |||||
//2、取出数据进行消费 | |||||
ch.Qos(1000) | |||||
delivery := ch.Consume(queue.Name, true) //设置自动应答 | |||||
geoIp2db, _ := geoip2db.NewGeoipDbByStatik() | |||||
defer geoIp2db.Close() | |||||
var res amqp.Delivery | |||||
var ok bool | |||||
for { | |||||
res, ok = <-delivery | |||||
if ok == true { | |||||
//fmt.Println(string(res.Body)) | |||||
fmt.Println(">>>>>>>>>>>>>>>>>>CanalGuideOrderConsume<<<<<<<<<<<<<<<<<<<<<<<<<") | |||||
err = handleCanalGuideOrderByUserUpLvConsume(res.Body, geoIp2db) | |||||
//_ = res.Reject(false) | |||||
//_ = res.Ack(true) | |||||
_ = res.Ack(true) | |||||
} else { | |||||
panic(errors.New("error getting message")) | |||||
} | |||||
} | |||||
fmt.Println("get msg done") | |||||
} | |||||
func handleCanalGuideOrderByUserUpLvConsume(msg []byte, geoIp2db *geoip2.DBReader) error { | |||||
//1、解析canal采集至mq中queue的数据结构体 | |||||
var canalMsg *md.CanalOrderMessage[md.CanalGuideOrder] | |||||
err := json.Unmarshal(msg, &canalMsg) | |||||
if err != nil { | |||||
return err | |||||
} | |||||
masterId := strings.Split(canalMsg.Database, "_")[1] | |||||
uids := make([]string, 0) | |||||
for _, data := range canalMsg.Data { | |||||
uids = append(uids, data.Uid) | |||||
} | |||||
eg := db.DBs[masterId] | |||||
if eg == nil { | |||||
return nil | |||||
} | |||||
levelList, _ := db.UserLevlEgAll(eg) | |||||
isAuto := 0 | |||||
for _, v := range levelList { | |||||
if v.AutoUpdate == 1 { | |||||
isAuto = 1 | |||||
} | |||||
} | |||||
if isAuto == 0 { | |||||
return nil | |||||
} | |||||
for _, v := range uids { | |||||
FindUser(eg, v, masterId, levelList) | |||||
oneUser, _ := db.UserProfileFindByID(eg, v) | |||||
if oneUser == nil || (oneUser != nil && oneUser.ParentUid == 0) { | |||||
continue | |||||
} | |||||
FindUser(eg, utils.IntToStr(oneUser.ParentUid), masterId, levelList) | |||||
} | |||||
return nil | |||||
} |
@@ -17,6 +17,8 @@ func Init() { | |||||
// 增加消费任务队列 | // 增加消费任务队列 | ||||
func initConsumes() { | func initConsumes() { | ||||
jobs[consumeMd.ZhiosUserUpLvFunName] = ZhiosUserUpLv | |||||
jobs[consumeMd.CanalGuideOrderByUserUpLvConsume] = CanalGuideOrderByUserUpLvConsume | |||||
jobs[consumeMd.ZhiosOrderFreeFunName] = ZhiosOrderFree | jobs[consumeMd.ZhiosOrderFreeFunName] = ZhiosOrderFree | ||||
jobs[consumeMd.ZhiosOrderTotalFunName] = ZhiosOrderTotal | jobs[consumeMd.ZhiosOrderTotalFunName] = ZhiosOrderTotal | ||||
jobs[consumeMd.ZhiosOrderTotalSecondFunName] = ZhiosOrderTotalSecond | jobs[consumeMd.ZhiosOrderTotalSecondFunName] = ZhiosOrderTotalSecond | ||||
@@ -47,6 +47,15 @@ var RabbitMqQueueKeyList = []*MqQueue{ | |||||
BindKey: "", | BindKey: "", | ||||
ConsumeFunName: "CanalGuideOrderConsume", | ConsumeFunName: "CanalGuideOrderConsume", | ||||
}, | }, | ||||
{ | |||||
ExchangeName: "canal.topic", | |||||
Name: "canal_guide_order_by_user_up_lv", | |||||
Type: TopicQueueType, | |||||
IsPersistent: false, | |||||
RoutKey: "canal_order_list", | |||||
BindKey: "", | |||||
ConsumeFunName: "CanalGuideOrderByUserUpLvConsume", | |||||
}, | |||||
{ | { | ||||
ExchangeName: "zhios.app.user.visit.ip.address.exchange", | ExchangeName: "zhios.app.user.visit.ip.address.exchange", | ||||
Name: "zhios_user_visit_ip_address_queue", | Name: "zhios_user_visit_ip_address_queue", | ||||
@@ -335,6 +344,15 @@ var RabbitMqQueueKeyList = []*MqQueue{ | |||||
BindKey: "", | BindKey: "", | ||||
ConsumeFunName: "ZhiosOrderFree", | ConsumeFunName: "ZhiosOrderFree", | ||||
}, | }, | ||||
{ | |||||
ExchangeName: "zhios.user_up_lv.exchange", | |||||
Name: "zhios_user_up_lv", | |||||
Type: DirectQueueType, | |||||
IsPersistent: false, | |||||
RoutKey: "user_up_lv", | |||||
BindKey: "", | |||||
ConsumeFunName: "ZhiosUserUpLv", | |||||
}, | |||||
//{ | //{ | ||||
// ExchangeName: "zhios.order_buckle.exchange", | // ExchangeName: "zhios.order_buckle.exchange", | ||||
// Name: "zhios_order_buckle_dev", | // Name: "zhios_order_buckle_dev", | ||||
@@ -347,6 +365,8 @@ var RabbitMqQueueKeyList = []*MqQueue{ | |||||
} | } | ||||
const ( | const ( | ||||
ZhiosUserUpLvFunName = "ZhiosUserUpLv" | |||||
CanalGuideOrderByUserUpLvConsume = "CanalGuideOrderByUserUpLvConsume" | |||||
ZhiosOrderFreeFunName = "ZhiosOrderFree" | ZhiosOrderFreeFunName = "ZhiosOrderFree" | ||||
ZhiosOrderSettleTotalFunName = "ZhiosOrderSettleTotal" | ZhiosOrderSettleTotalFunName = "ZhiosOrderSettleTotal" | ||||
ZhiosOrderTotalFunName = "ZhiosOrderTotal" | ZhiosOrderTotalFunName = "ZhiosOrderTotal" | ||||
@@ -0,0 +1,83 @@ | |||||
package consume | |||||
import ( | |||||
"applet/app/db" | |||||
"applet/app/utils" | |||||
"applet/app/utils/logx" | |||||
"applet/consume/md" | |||||
"code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git/rabbit" | |||||
"encoding/json" | |||||
"errors" | |||||
"fmt" | |||||
"github.com/streadway/amqp" | |||||
) | |||||
//自动升级 | |||||
func ZhiosUserUpLv(queue md.MqQueue) { | |||||
fmt.Println(">>>>>>>>>>>>>>>>>>>>>>>>") | |||||
ch, err := rabbit.Cfg.Pool.GetChannel() | |||||
if err != nil { | |||||
logx.Error(err) | |||||
return | |||||
} | |||||
defer ch.Release() | |||||
//1、将自己绑定到交换机上 | |||||
ch.Bind(queue.Name, queue.ExchangeName, queue.RoutKey) | |||||
//2、取出数据进行消费 | |||||
ch.Qos(1000) | |||||
delivery := ch.Consume(queue.Name, false) | |||||
var res amqp.Delivery | |||||
var ok bool | |||||
for { | |||||
res, ok = <-delivery | |||||
if ok == true { | |||||
//fmt.Println(string(res.Body)) | |||||
fmt.Println(">>>>>>>>>>>>>>>>CanalOrderConsume<<<<<<<<<<<<<<<<<<<<<<<<<") | |||||
err = handleUserUpLv(res.Body) | |||||
//_ = res.Reject(false) | |||||
fmt.Println(err) | |||||
_ = res.Ack(true) | |||||
} else { | |||||
panic(errors.New("error getting message")) | |||||
} | |||||
} | |||||
fmt.Println("get msg done") | |||||
} | |||||
func handleUserUpLv(msg []byte) error { | |||||
//1、解析canal采集至mq中queue的数据结构体 | |||||
var canalMsg *md.ZhiosAcquisition | |||||
fmt.Println(string(msg)) | |||||
var tmpString string | |||||
err := json.Unmarshal(msg, &tmpString) | |||||
if err != nil { | |||||
fmt.Println(err.Error()) | |||||
return err | |||||
} | |||||
fmt.Println(tmpString) | |||||
err = json.Unmarshal([]byte(tmpString), &canalMsg) | |||||
if err != nil { | |||||
return err | |||||
} | |||||
mid := canalMsg.Mid | |||||
eg := db.DBs[mid] | |||||
uid := canalMsg.Uid | |||||
levelList, _ := db.UserLevlEgAll(eg) | |||||
isAuto := 0 | |||||
for _, v := range levelList { | |||||
if v.AutoUpdate == 1 { | |||||
isAuto = 1 | |||||
} | |||||
} | |||||
if isAuto == 0 { | |||||
return nil | |||||
} | |||||
FindUser(eg, uid, mid, levelList) | |||||
oneUser, _ := db.UserProfileFindByID(eg, uid) | |||||
if oneUser == nil || (oneUser != nil && oneUser.ParentUid == 0) { | |||||
return nil | |||||
} | |||||
FindUser(eg, utils.IntToStr(oneUser.ParentUid), mid, levelList) | |||||
return nil | |||||
} |