작성자 | SHA1 | 메시지 | 날짜 |
---|---|---|---|
huangjiajun | 82a5772c0f | 更新 | 4 달 전 |
huangjiajun | 1bebd31d24 | 更新 | 4 달 전 |
huangjiajun | 9025f3d707 | 更新 | 5 달 전 |
huangjiajun | 80663a67da | 更新 | 5 달 전 |
huangjiajun | f3b93cc126 | 更新 | 5 달 전 |
huangjiajun | 47bf318d94 | 更新 | 5 달 전 |
@@ -0,0 +1,15 @@ | |||
package db | |||
import ( | |||
"applet/app/db/model" | |||
"xorm.io/xorm" | |||
) | |||
func GetFinUserFlow(sess *xorm.Session, id string) *model.FinUserFlow { | |||
var data model.FinUserFlow | |||
get, err := sess.Where("id=?", id).Get(&data) | |||
if get == false || err != nil { | |||
return nil | |||
} | |||
return &data | |||
} |
@@ -0,0 +1,15 @@ | |||
package db | |||
import ( | |||
"applet/app/db/model" | |||
"xorm.io/xorm" | |||
) | |||
func GetGuideOrderMonthTotal(sess *xorm.Session, month, unionType string) *model.GuideOrderMonthTotal { | |||
var data model.GuideOrderMonthTotal | |||
get, err := sess.Where("month=? and union_type=?", month, unionType).Get(&data) | |||
if get == false || err != nil { | |||
return nil | |||
} | |||
return &data | |||
} |
@@ -0,0 +1,15 @@ | |||
package db | |||
import ( | |||
"applet/app/db/model" | |||
"xorm.io/xorm" | |||
) | |||
func GetWithdrawMonthTotal(sess *xorm.Session, month string) *model.WithdrawMonthTotal { | |||
var data model.WithdrawMonthTotal | |||
get, err := sess.Where("month=? ", month).Get(&data) | |||
if get == false || err != nil { | |||
return nil | |||
} | |||
return &data | |||
} |
@@ -0,0 +1,15 @@ | |||
package model | |||
import ( | |||
"time" | |||
) | |||
type GuideOrderMonthTotal struct { | |||
Id int `json:"id" xorm:"not null pk autoincr INT(11)"` | |||
Month int `json:"month" xorm:"default 0 comment('202407') INT(11)"` | |||
UnionSettleAmount string `json:"union_settle_amount" xorm:"default 0.00 comment('联盟结算') DECIMAL(20,2)"` | |||
StationSettleAmount string `json:"station_settle_amount" xorm:"default 0.000000 comment('平台结算') DECIMAL(20,6)"` | |||
UnionType string `json:"union_type" xorm:"default 0.000000 comment('平台结算') VARCHAR(255)"` | |||
CreateAt time.Time `json:"create_at" xorm:"DATETIME"` | |||
UpdateAt time.Time `json:"update_at" xorm:"DATETIME"` | |||
} |
@@ -60,4 +60,5 @@ type OrdList struct { | |||
OrderFormType int `xorm:"not null default 0 INT(1)" json:"order_form_type"` | |||
HjyOid int `xorm:"not null default 0 INT(11)" json:"hjy_oid"` | |||
TikTokTeamRealCommission string `json:"tik_tok_team_real_commission" xorm:"not null default 0.00 comment('') DECIMAL(20,8)"` | |||
Ext string `json:"ext" xorm:"not null default 0.00 comment('') varchar(255)"` | |||
} |
@@ -0,0 +1,15 @@ | |||
package model | |||
import ( | |||
"time" | |||
) | |||
type WithdrawMonthTotal struct { | |||
Id int `json:"id" xorm:"not null pk autoincr INT(11)"` | |||
Month int `json:"month" xorm:"default 0 comment('202407') INT(11)"` | |||
WithdrawAmount string `json:"withdraw_amount" xorm:"default 0.00 comment('平台提现') DECIMAL(20,2)"` | |||
CreateAt time.Time `json:"create_at" xorm:"DATETIME"` | |||
UpdateAt time.Time `json:"update_at" xorm:"DATETIME"` | |||
RealWithdrawAmount string `json:"real_withdraw_amount" xorm:"default 0.00 DECIMAL(20,2)"` | |||
Fee string `json:"fee" xorm:"default 0.00 DECIMAL(20,2)"` | |||
} |
@@ -0,0 +1,109 @@ | |||
package consume | |||
import ( | |||
"applet/app/db" | |||
"applet/app/db/model" | |||
"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" | |||
"time" | |||
) | |||
func CanalFinWithdrawApplyForStatistics(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(500) | |||
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 = CanalFinWithdrawApplyForStatisticsDetail(res.Body, geoIp2db) | |||
//_ = res.Reject(false) | |||
//_ = res.Ack(true) | |||
} else { | |||
panic(errors.New("error getting message")) | |||
} | |||
} | |||
fmt.Println("get msg done") | |||
} | |||
func CanalFinWithdrawApplyForStatisticsDetail(msg []byte, geoIp2db *geoip2.DBReader) error { | |||
//1、解析canal采集至mq中queue的数据结构体 | |||
var canalMsg *md.CanalFinWithdrawApplyMessage[md.CanalFinWithdrawApply] | |||
err := json.Unmarshal(msg, &canalMsg) | |||
if err != nil { | |||
return err | |||
} | |||
//2、判断操作(目前只针对insert进行修改) | |||
if canalMsg.Type == md.CanalMsgUpdateSqlType { | |||
//4、构造数据结构体 && 插入es文档 | |||
masterId := strings.Split(canalMsg.Database, "_")[1] | |||
sess := db.DBs[masterId].NewSession() | |||
defer sess.Close() | |||
sess.Begin() | |||
for _, data := range canalMsg.Data { | |||
if utils.InArr(data.State, []string{"2", "3"}) { | |||
flow := db.GetFinUserFlow(sess, data.Id) | |||
fee := "0" | |||
if flow != nil { | |||
fee = flow.SysFee | |||
} | |||
WithdrawAmount := data.Amount | |||
RealWithdrawAmount := data.Amount | |||
if data.FeeType == "1" { | |||
RealWithdrawAmount = utils.Float64ToStrByPrec(utils.StrToFloat64(RealWithdrawAmount)-utils.StrToFloat64(fee), 6) | |||
} | |||
month := utils.TimeParseStd(data.CreateAt).Format("200601") | |||
total := db.GetWithdrawMonthTotal(sess, month) | |||
if total == nil { | |||
total = &model.WithdrawMonthTotal{ | |||
Month: utils.StrToInt(month), | |||
WithdrawAmount: "", | |||
CreateAt: utils.TimeParseStd(data.CreateAt), | |||
UpdateAt: time.Now(), | |||
} | |||
_, err = sess.Insert(total) | |||
if err != nil { | |||
sess.Rollback() | |||
return err | |||
} | |||
} | |||
total.Fee = utils.Float64ToStrByPrec(utils.StrToFloat64(total.Fee)+utils.StrToFloat64(fee), 6) | |||
total.WithdrawAmount = utils.Float64ToStrByPrec(utils.StrToFloat64(total.WithdrawAmount)+utils.StrToFloat64(WithdrawAmount), 6) | |||
total.RealWithdrawAmount = utils.Float64ToStrByPrec(utils.StrToFloat64(total.RealWithdrawAmount)+utils.StrToFloat64(RealWithdrawAmount), 6) | |||
_, err = sess.Where("id=?", total.Id).Update(total) | |||
if err != nil { | |||
sess.Rollback() | |||
return err | |||
} | |||
} | |||
} | |||
sess.Commit() | |||
} | |||
return nil | |||
} |
@@ -1,83 +0,0 @@ | |||
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" | |||
"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) //设置自动应答 | |||
var res amqp.Delivery | |||
var ok bool | |||
for { | |||
res, ok = <-delivery | |||
if ok == true { | |||
//fmt.Println(string(res.Body)) | |||
fmt.Println(">>>>>>>>>>>>>>>>>>CanalGuideOrderConsume<<<<<<<<<<<<<<<<<<<<<<<<<") | |||
handleCanalGuideOrderByUserUpLvConsume(res.Body) | |||
//_ = res.Reject(false) | |||
//_ = res.Ack(true) | |||
} else { | |||
panic(errors.New("error getting message")) | |||
} | |||
} | |||
fmt.Println("get msg done") | |||
} | |||
func handleCanalGuideOrderByUserUpLvConsume(msg []byte) error { | |||
//1、解析canal采集至mq中queue的数据结构体 | |||
var canalMsg *md.CanalOrderMessage[md.CanalGuideOrder] | |||
err := json.Unmarshal(msg, &canalMsg) | |||
if err != nil { | |||
return nil | |||
} | |||
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 | |||
} |
@@ -1,234 +0,0 @@ | |||
package consume | |||
import ( | |||
"applet/app/db" | |||
"applet/app/utils" | |||
"applet/app/utils/logx" | |||
"applet/consume/md" | |||
esMd "applet/es/md" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_es.git/es" | |||
"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" | |||
"net" | |||
"strings" | |||
"time" | |||
"xorm.io/xorm" | |||
) | |||
func CanalGuideOrderConsume(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(500) | |||
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 = handleGuideOrdTable(res.Body, geoIp2db) | |||
//_ = res.Reject(false) | |||
//_ = res.Ack(true) | |||
} else { | |||
panic(errors.New("error getting message")) | |||
} | |||
} | |||
fmt.Println("get msg done") | |||
} | |||
func handleGuideOrdTable(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 | |||
} | |||
//2、判断操作(目前只针对insert进行修改) | |||
if canalMsg.Type == md.CanalMsgInsertSqlType { | |||
//3、TODO::判断es索引是否创建(因为这里我已经手动创建了,省略此步骤) | |||
//err := es.CreateIndexIfNotExists(esMd.ZhiosOrdersEsIndex, esMd.ZhiosOrdersEsMapping) | |||
//if err != nil { | |||
// panic(err) | |||
//} | |||
//4、构造数据结构体 && 插入es文档 | |||
masterId := strings.Split(canalMsg.Database, "_")[1] | |||
for _, data := range canalMsg.Data { | |||
var uniqueId = masterId + "_" + data.OrdId //es的唯一键,每个文档必须要有唯一键 | |||
user, err := db.UserFindByID(db.DBs[masterId], data.Uid) | |||
if err != nil { | |||
return err | |||
} | |||
provinceId, cityId, countyId, provinceName, cityName, countyName := getUserAddress(db.DBs[masterId], data.Uid, geoIp2db) | |||
now := time.Now() | |||
esData := esMd.ZhiosOrdersEs{ | |||
OrdKind: "guide", | |||
MasterId: utils.StrToInt(masterId), | |||
OrdId: data.OrdId, | |||
MainOrdId: data.ParentOrdId, | |||
StoreOrdId: data.PvdOid, | |||
GoodsId: data.ItemId, | |||
Uid: data.Uid, | |||
BuyerPhone: user.Phone, | |||
CostPrice: utils.StrToFloat64(data.PaidPrice), | |||
//Gmv: utils.StrToFloat64(data.CostPrice) * float64(utils.StrToInt(data.ItemNum)), | |||
Gmv: utils.StrToFloat64(data.PaidPrice), | |||
State: int32(utils.StrToInt(data.State)), | |||
StateZh: md.CanalGuideOrderState(int32(utils.StrToInt(data.State))).String(), | |||
GoodsNum: utils.StrToInt(data.ItemNum), | |||
PayChannel: 0, | |||
PayChannelZh: "", | |||
ReceiverPhone: user.Phone, | |||
ReceiverName: user.Nickname, | |||
ReceiverAddressDetail: "", | |||
ProvinceId: provinceId, | |||
CityId: cityId, | |||
CountyId: countyId, | |||
Province: provinceName, | |||
City: cityName, | |||
County: countyName, | |||
OrderType: int32(utils.StrToInt(data.OrderType)), | |||
EstimateCommission: utils.StrToFloat64(data.SysCommission), | |||
LogisticCompany: "", | |||
PayTime: "", | |||
OrdCreateTime: utils.TimeToStr(data.CreateAt), | |||
CreatedAt: now.Format("2006-01-02 15:04:05"), | |||
UpdatedAt: now.Format("2006-01-02 15:04:05"), | |||
} | |||
if esData.GoodsNum == 0 { | |||
esData.GoodsNum = 1 | |||
} | |||
if esData.PayTime == "" { | |||
esData.PayTime = "1970-01-01 00:00:00" | |||
} | |||
createDocRet, err := es.CreateDoc(esMd.ZhiosOrdersEsIndex, uniqueId, esData) | |||
if err != nil { | |||
return err | |||
} | |||
fmt.Printf("CreateDoc CanalGuide ==> %+v \n\n", createDocRet) | |||
} | |||
} | |||
return nil | |||
} | |||
func getUserAddress(Db *xorm.Engine, uid string, geoIp2db *geoip2.DBReader) (provinceId, cityId, countyId, provinceName, cityName, countyName string) { | |||
regionalAgentUserBelong, err := db.RegionalAgentUserBelongGetOneByParams(Db, map[string]interface{}{ | |||
"key": "uid", | |||
"value": uid, | |||
}) | |||
if err != nil { | |||
return | |||
} | |||
if regionalAgentUserBelong == nil { | |||
//TODO::没开区域代理的,使用用户ip归属地 | |||
userLoginIpList, err := db.UserLoginIpListGetOneByParams(Db, map[string]interface{}{ | |||
"key": "uid", | |||
"value": uid, | |||
}) | |||
if err != nil || userLoginIpList == nil { | |||
provinceName = "广东省" | |||
provinceId = "440000000000" | |||
return | |||
} | |||
utils.FilePutContents("getUserAddress", utils.SerializeStr(userLoginIpList)) | |||
record, _ := geoIp2db.City(net.ParseIP(userLoginIpList.NowIp)) | |||
if record.Country.Names != nil && record.Subdivisions != nil && record.City.Names != nil { | |||
province, err := db.ProvinceGetOneByName(record.Subdivisions[0].Names["zh-CN"]) | |||
if err != nil { | |||
return | |||
} | |||
provinceId = province.Id | |||
provinceName = province.Name | |||
city, err := db.CityGetOneByName(record.City.Names["zh-CN"]) | |||
if err != nil { | |||
return | |||
} | |||
cityId = city.Id | |||
cityName = city.Name | |||
return | |||
} | |||
//TODO::没开区域代理的,默认归属到广东 | |||
provinceName = "广东省" | |||
provinceId = "440000000000" | |||
return | |||
} | |||
var regionalId int64 | |||
if regionalAgentUserBelong.DistrictId != 0 { | |||
regionalId = regionalAgentUserBelong.DistrictId | |||
} else { | |||
regionalId = int64(regionalAgentUserBelong.RegionId) | |||
} | |||
regionalAgentRegion, err := db.RegionalAgentRegionGetOneByParams(Db, map[string]interface{}{ | |||
"key": "id", | |||
"value": regionalId, | |||
}) | |||
if err != nil || regionalAgentRegion.WebsiteRegionId == "" { | |||
return "", "", "", "", "", "" | |||
} | |||
switch regionalAgentRegion.Level { | |||
case 1: | |||
province, err := db.ProvinceGetOne(regionalAgentRegion.WebsiteRegionId) | |||
if err != nil { | |||
return "", "", "", "", "", "" | |||
} | |||
provinceId = province.Id | |||
provinceName = province.Name | |||
break | |||
case 2: | |||
city, err := db.CityGetOne(regionalAgentRegion.WebsiteRegionId) | |||
if err != nil { | |||
return "", "", "", "", "", "" | |||
} | |||
province, err := db.ProvinceGetOne(city.ProvinceId) | |||
if err != nil { | |||
return "", "", "", "", "", "" | |||
} | |||
provinceId = province.Id | |||
provinceName = province.Name | |||
cityId = city.Id | |||
cityName = city.Name | |||
break | |||
case 3: | |||
county, err := db.CountyGetOne(regionalAgentRegion.WebsiteRegionId) | |||
if err != nil { | |||
return "", "", "", "", "", "" | |||
} | |||
city, err := db.CityGetOne(county.CityId) | |||
if err != nil { | |||
return "", "", "", "", "", "" | |||
} | |||
province, err := db.ProvinceGetOne(city.ProvinceId) | |||
if err != nil { | |||
return "", "", "", "", "", "" | |||
} | |||
provinceId = province.Id | |||
provinceName = province.Name | |||
cityId = city.Id | |||
cityName = city.Name | |||
countyId = county.Id | |||
countyName = county.Name | |||
break | |||
} | |||
return | |||
} |
@@ -0,0 +1,140 @@ | |||
package consume | |||
import ( | |||
"applet/app/db" | |||
"applet/app/db/model" | |||
"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" | |||
"time" | |||
"xorm.io/xorm" | |||
) | |||
func CanalGuideOrderForStatistics(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(1) | |||
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 = CanalGuideOrderForStatisticsDetail(res.Body, geoIp2db) | |||
//_ = res.Reject(false) | |||
//_ = res.Ack(true) | |||
} else { | |||
panic(errors.New("error getting message")) | |||
} | |||
} | |||
fmt.Println("get msg done") | |||
} | |||
func CanalGuideOrderForStatisticsDetail(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 | |||
} | |||
//2、判断操作(目前只针对update进行修改) | |||
if canalMsg.Type == md.CanalMsgUpdateSqlType { | |||
//4、构造数据结构体 && 插入es文档 | |||
masterId := strings.Split(canalMsg.Database, "_")[1] | |||
sess := db.DBs[masterId].NewSession() | |||
defer sess.Close() | |||
sess.Begin() | |||
for _, data := range canalMsg.Data { | |||
if utils.StrToInt(data.PvdSettleAt) > 0 && strings.Contains(data.Ext, "pvd_settle_at") == false { | |||
err = comm(sess, data.OrdId, data.BenefitAll, "pvd_settle_at", data.PvdSettleAt, data.Pvd) | |||
if err != nil { | |||
sess.Rollback() | |||
return err | |||
} | |||
} | |||
if utils.StrToInt(data.SettleAt) > 0 && strings.Contains(data.Ext, "station_settle_at") == false { | |||
err = comm(sess, data.OrdId, data.BenefitAll, "station_settle_at", data.SettleAt, data.Pvd) | |||
if err != nil { | |||
sess.Rollback() | |||
return err | |||
} | |||
} | |||
} | |||
sess.Commit() | |||
} | |||
return nil | |||
} | |||
func comm(sess *xorm.Session, oid, commission, types, times, pvd string) error { | |||
byOid, _ := db.OrderListByOid(sess, oid) | |||
if byOid == nil { | |||
return nil | |||
} | |||
if strings.Contains(byOid.Ext, "station_settle_at") && types == "station_settle_at" { | |||
return nil | |||
} | |||
if strings.Contains(byOid.Ext, "pvd_settle_at") && types == "pvd_settle_at" { | |||
return nil | |||
} | |||
extData := make(map[string]interface{}) | |||
json.Unmarshal([]byte(byOid.Ext), &extData) | |||
extData[types] = types | |||
byOid.Ext = utils.SerializeStr(extData) | |||
_, err2 := sess.Where("ord_id=?", byOid.OrdId).Cols("ext").Update(byOid) | |||
if err2 != nil { | |||
return err2 | |||
} | |||
month := time.Unix(utils.StrToInt64(times), 0).Format("200601") | |||
total := db.GetGuideOrderMonthTotal(sess, month, pvd) | |||
if total == nil { | |||
total = &model.GuideOrderMonthTotal{ | |||
Month: utils.StrToInt(month), | |||
UnionType: pvd, | |||
CreateAt: time.Unix(utils.StrToInt64(times), 0), | |||
UpdateAt: time.Now(), | |||
} | |||
_, err := sess.Insert(total) | |||
if err != nil { | |||
return err | |||
} | |||
} | |||
if types == "station_settle_at" { | |||
sql := `select sum(amount) as amount from ord_list_relate where oid=%s ` | |||
sql = fmt.Sprintf(sql, oid) | |||
data, _ := db.QueryNativeStringWithSession(sess, sql) | |||
if len(data) > 0 { | |||
total.StationSettleAmount = utils.Float64ToStrByPrec(utils.StrToFloat64(total.StationSettleAmount)+utils.StrToFloat64(data[0]["amount"]), 6) | |||
} | |||
} | |||
if types == "pvd_settle_at" { | |||
total.UnionSettleAmount = utils.Float64ToStrByPrec(utils.StrToFloat64(total.UnionSettleAmount)+utils.StrToFloat64(commission), 6) | |||
} | |||
_, err := sess.Where("id=?", total.Id).Update(total) | |||
if err != nil { | |||
return err | |||
} | |||
return nil | |||
} |
@@ -1,123 +0,0 @@ | |||
package consume | |||
import ( | |||
"applet/app/db" | |||
model2 "applet/app/db/model" | |||
"applet/app/utils" | |||
"applet/app/utils/logx" | |||
"applet/consume/md" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_condition_statistics.git/db/model" | |||
zyos_go_condition_hdl "code.fnuoos.com/go_rely_warehouse/zyos_go_condition_statistics.git/hdl" | |||
md2 "code.fnuoos.com/go_rely_warehouse/zyos_go_condition_statistics.git/md" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git/rabbit" | |||
"encoding/json" | |||
"errors" | |||
"fmt" | |||
"github.com/jinzhu/copier" | |||
"github.com/streadway/amqp" | |||
"strings" | |||
"xorm.io/xorm" | |||
) | |||
func CanalMallOrdForYouMiShang(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(10) | |||
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 = handleCanalMallOrdForYouMiShang(res.Body) | |||
//_ = res.Reject(false) | |||
_ = res.Ack(true) | |||
} else { | |||
panic(errors.New("error getting message")) | |||
} | |||
} | |||
fmt.Println("get msg done") | |||
} | |||
func handleCanalMallOrdForYouMiShang(msg []byte) error { | |||
var canalMsg *md.CanalMallOrdForYouMiShang | |||
err := json.Unmarshal(msg, &canalMsg) | |||
if err != nil { | |||
fmt.Println("=======================", err) | |||
return err | |||
} | |||
database := strings.ReplaceAll(canalMsg.Database, "zhios_", "") | |||
if utils.InArr(database, []string{"88164961"}) == false { | |||
return nil | |||
} | |||
fmt.Println("==========================", 123333) | |||
eg := db.DBs[database] | |||
levelList, _ := db.UserLevlEgAll(eg) | |||
userId := make(map[string]string, 0) | |||
for _, v := range canalMsg.Data { | |||
if utils.StrToInt(v.Uid) == 0 || utils.InArr(v.State, []string{"1", "2", "3"}) == false { | |||
continue | |||
} | |||
userId[v.Uid] = v.Uid | |||
} | |||
fmt.Println(userId) | |||
for _, v := range userId { | |||
FindUser(eg, v, database, levelList) | |||
oneUser, _ := db.UserProfileFindByID(eg, v) | |||
if oneUser == nil || (oneUser != nil && oneUser.ParentUid == 0) { | |||
continue | |||
} | |||
FindUser(eg, utils.IntToStr(oneUser.ParentUid), database, levelList) | |||
} | |||
return nil | |||
} | |||
func FindUser(eg *xorm.Engine, uid string, dbName string, levelList []*model2.UserLevel) { | |||
oneUser, _ := db.UserFindByID(eg, uid) | |||
if oneUser == nil { | |||
return | |||
} | |||
if oneUser.IsNotUpLevel == 1 { | |||
return | |||
} | |||
levelWeight := 0 | |||
for _, v1 := range levelList { | |||
if v1.Id == oneUser.Level { | |||
levelWeight = v1.LevelWeight | |||
} | |||
} | |||
nextLv := "" | |||
for _, v1 := range levelList { | |||
if v1.LevelWeight <= levelWeight || v1.AutoUpdate == 0 { //小于当前等级或没开自动升级的都跳过 | |||
continue | |||
} | |||
if nextLv == "" { | |||
nextLv = utils.IntToStr(v1.Id) | |||
} | |||
} | |||
if nextLv != "" { | |||
DataDetail1 := md2.DataDetail{ | |||
AgentType: nextLv, | |||
Comment: "自动等级", | |||
MasterId: dbName, | |||
Uid: utils.IntToStr(oneUser.Uid), | |||
IsChangeTime: "1", | |||
} | |||
var info model.User | |||
copier.Copy(&info, &oneUser) | |||
fmt.Println(DataDetail1) | |||
zyos_go_condition_hdl.CommUplv(map[string]string{}, "", eg, dbName, &info, oneUser.Level, DataDetail1) | |||
} | |||
} |
@@ -1,221 +0,0 @@ | |||
package consume | |||
import ( | |||
"applet/app/db" | |||
model2 "applet/app/db/gim/model" | |||
"applet/app/db/model" | |||
"applet/app/utils" | |||
"applet/app/utils/logx" | |||
"applet/consume/md" | |||
esMd "applet/es/md" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_es.git/es" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git/rabbit" | |||
"encoding/json" | |||
"errors" | |||
"fmt" | |||
"github.com/streadway/amqp" | |||
"strings" | |||
"time" | |||
) | |||
func CanalOrderConsumev2(queue md.MqQueue) { | |||
var list []model.DouShenImGroup | |||
err := db.Db.Where("kind =2 and id = 43140").Find(&list) | |||
eg := db.DBs["68823769"] | |||
for _, v := range list { | |||
var m model.RegionalAgentUser | |||
has, err := eg.Where("uid =?", v.Uid).Get(&m) | |||
if err != nil { | |||
panic(err) | |||
} | |||
if !has { | |||
fmt.Println(">>>", v) | |||
} | |||
var group model2.Group | |||
has, err = db.ImDb.Where("id =?", v.GroupId).Get(&group) | |||
if err != nil { | |||
panic(err) | |||
} | |||
if !has { | |||
fmt.Println("<<<", v) | |||
} | |||
regionalAgentRegion, err := db.RegionalAgentRegionGetOneByParams(eg, map[string]interface{}{ | |||
"key": "id", | |||
"value": m.RegionId, | |||
}) | |||
if err != nil { | |||
panic(err) | |||
} | |||
groupName := "抖省" + regionalAgentRegion.Name + "运营中心【1】群" | |||
group.Name = groupName | |||
_, err = db.ImDb.Where("id =?", v.GroupId).Cols("name").Update(group) | |||
if err != nil { | |||
panic(err) | |||
} | |||
v.Name = groupName | |||
_, err = db.Db.Where("id =?", v.Id).Cols("name").Update(v) | |||
if err != nil { | |||
panic(err) | |||
} | |||
} | |||
return | |||
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(1) | |||
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 = handleMallOrdTable(res.Body) | |||
//_ = res.Reject(false) | |||
_ = res.Ack(true) | |||
} else { | |||
panic(errors.New("error getting message")) | |||
} | |||
} | |||
fmt.Println("get msg done") | |||
} | |||
func CanalOrderConsume(queue md.MqQueue) { | |||
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(100) | |||
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 = handleMallOrdTable(res.Body) | |||
//_ = res.Reject(false) | |||
_ = res.Ack(true) | |||
} else { | |||
panic(errors.New("error getting message")) | |||
} | |||
} | |||
fmt.Println("get msg done") | |||
} | |||
func handleMallOrdTable(msg []byte) error { | |||
//1、解析canal采集至mq中queue的数据结构体 | |||
var canalMsg *md.CanalOrderMessage[md.CanalOrder] | |||
err := json.Unmarshal(msg, &canalMsg) | |||
if err != nil { | |||
return err | |||
} | |||
//2、判断操作(目前只针对insert进行修改) | |||
if canalMsg.Type == md.CanalMsgInsertSqlType { | |||
//3、TODO::判断es索引是否创建(因为这里我已经手动创建了,省略此步骤) | |||
//err := es.CreateIndexIfNotExists(esMd.ZhiosOrdersEsIndex, esMd.ZhiosOrdersEsMapping) | |||
//if err != nil { | |||
// panic(err) | |||
//} | |||
//4、构造数据结构体 && 插入es文档 | |||
masterId := strings.Split(canalMsg.Database, "_")[1] | |||
var ordList []string | |||
for _, data := range canalMsg.Data { | |||
ordList = append(ordList, data.OrdId) | |||
} | |||
ordItemList, err := db.MallOrdItemFindByParams(db.DBs[masterId], map[string]interface{}{ | |||
"key": "ord_id", | |||
"value": ordList, | |||
}) | |||
if err != nil { | |||
return err | |||
} | |||
var ordItemListMap = map[string]int{} | |||
for _, item := range *ordItemList { | |||
ordItemListMap[utils.AnyToString(item.OrdId)] = item.GoodsNum | |||
} | |||
for _, data := range canalMsg.Data { | |||
var uniqueId = masterId + "_" + data.OrdId //es的唯一键,每个文档必须要有唯一键 | |||
province, err := db.ProvinceGetOne(data.ProvinceId) | |||
if err != nil { | |||
return err | |||
} | |||
city, err := db.CityGetOne(data.CityId) | |||
if err != nil { | |||
return err | |||
} | |||
county, err := db.CountyGetOne(data.CountyId) | |||
if err != nil { | |||
return err | |||
} | |||
now := time.Now() | |||
var goodsNum = 1 | |||
if ordItemListMap[data.OrdId] != 0 { | |||
goodsNum = ordItemListMap[data.OrdId] | |||
} | |||
esData := esMd.ZhiosOrdersEs{ | |||
OrdKind: "mall", | |||
MasterId: utils.StrToInt(masterId), | |||
OrdId: data.OrdId, | |||
MainOrdId: data.MainOrdId, | |||
StoreOrdId: data.StoreOrdId, | |||
GoodsId: data.GoodsId, | |||
Uid: data.Uid, | |||
BuyerPhone: data.BuyerPhone, | |||
CostPrice: utils.StrToFloat64(data.CostPrice), | |||
Gmv: utils.StrToFloat64(data.CostPrice) * float64(goodsNum), | |||
State: int32(utils.StrToInt(data.State)), | |||
StateZh: md.CanalOrderState(int32(utils.StrToInt(data.State))).String(), | |||
PayChannel: int32(utils.StrToInt(data.PayChannel)), | |||
PayChannelZh: md.CanalOrderPayChannel(int32(utils.StrToInt(data.PayChannel))).String(), | |||
ReceiverPhone: data.ReceiverPhone, | |||
ReceiverName: data.ReceiverName, | |||
ReceiverAddressDetail: data.ReceiverAddressDetail, | |||
ProvinceId: data.ProvinceId, | |||
CityId: data.CityId, | |||
CountyId: data.CountyId, | |||
Province: province.Name, | |||
City: city.Name, | |||
County: county.Name, | |||
OrderType: int32(utils.StrToInt(data.OrderType)), | |||
GoodsNum: goodsNum, | |||
EstimateCommission: utils.StrToFloat64(data.EstimateCommission), | |||
LogisticCompany: data.LogisticCompany, | |||
PayTime: data.PayTime, | |||
OrdCreateTime: data.CreateTime, | |||
CreatedAt: now.Format("2006-01-02 15:04:05"), | |||
UpdatedAt: now.Format("2006-01-02 15:04:05"), | |||
} | |||
if esData.PayTime == "" { | |||
esData.PayTime = "1970-01-01 00:00:00" | |||
} | |||
createDocRet, err := es.CreateDoc(esMd.ZhiosOrdersEsIndex, uniqueId, esData) | |||
if err != nil { | |||
return err | |||
} | |||
fmt.Printf("CreateDoc CanalOrder ==> %+v \n\n", createDocRet) | |||
} | |||
} | |||
return nil | |||
} |
@@ -1,130 +0,0 @@ | |||
package consume | |||
import ( | |||
"applet/app/db" | |||
"applet/app/db/model" | |||
"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/shopspring/decimal" | |||
"github.com/streadway/amqp" | |||
"strings" | |||
"time" | |||
) | |||
func CanalUserVirtualCoinFlowConsume(queue md.MqQueue) { | |||
fmt.Println(">>>>>>>>>>>>CanalUserVirtualCoinFlowConsume>>>>>>>>>>>>") | |||
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(1) | |||
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(">>>>>>>>>>>>>>>>CanalUserVirtualCoinFlowConsume<<<<<<<<<<<<<<<<<<<<<<<<<") | |||
err = handleCanalUserVirtualCoinFlow(res.Body) | |||
if err != nil { | |||
fmt.Println("handleCanalUserVirtualCoinFlow_ERR:::::", err.Error()) | |||
} | |||
//_ = res.Reject(false) | |||
err = res.Ack(true) | |||
fmt.Println("err ::: ", err) | |||
} else { | |||
panic(errors.New("error getting message")) | |||
} | |||
} | |||
fmt.Println("get msg done") | |||
} | |||
func handleCanalUserVirtualCoinFlow(msg []byte) error { | |||
//1、解析canal采集至mq中queue的数据结构体 | |||
var canalMsg *md.CanalUserVirtualCoinFlowOrderMessage[md.CanalUserVirtualCoinFlowOrder] | |||
err := json.Unmarshal(msg, &canalMsg) | |||
if err != nil { | |||
return err | |||
} | |||
masterId := strings.Split(canalMsg.Database, "_")[1] | |||
if masterId != "32053480" { | |||
return nil | |||
} | |||
engine := db.DBs[masterId] | |||
now := time.Now() | |||
//2、查找 one_circles_green_energy_basic_setting 基础设置 | |||
userPublicPlatoonDoubleNetworkSetting, err := db.UserPublicPlatoonDoubleNetworkSettingGetOneByParams(engine, map[string]interface{}{ | |||
"key": "is_open", | |||
"value": 1, | |||
}) | |||
if err != nil { | |||
return err | |||
} | |||
if userPublicPlatoonDoubleNetworkSetting == nil { | |||
return errors.New("公排双网未开启") | |||
} | |||
if canalMsg.Type == md.CanalMsgInsertSqlType { | |||
if canalMsg.Data[0].CoinId == utils.IntToStr(userPublicPlatoonDoubleNetworkSetting.CoinId) { | |||
//3、查找 user_public_platoon_double_network_user_coin_record | |||
userPublicPlatoonDoubleNetworkUserCoinRecord, err1 := db.UserPublicPlatoonDoubleNetworkUserCoinRecordGetOneByParams(engine, map[string]interface{}{ | |||
"key": "uid", | |||
"value": canalMsg.Data[0].Uid, | |||
}) | |||
if err1 != nil { | |||
return err1 | |||
} | |||
if userPublicPlatoonDoubleNetworkUserCoinRecord == nil { | |||
userProfile, err2 := db.UserProfileFindByIDSess(engine.NewSession(), canalMsg.Data[0].Uid) | |||
if userProfile == nil { | |||
return errors.New("用户不存在") | |||
} | |||
if err2 != nil { | |||
return err2 | |||
} | |||
//新增记录 | |||
_, err3 := db.UserPublicPlatoonDoubleNetworkUserCoinRecordInsert(engine, &model.UserPublicPlatoonDoubleNetworkUserCoinRecord{ | |||
Uid: utils.StrToInt(canalMsg.Data[0].Uid), | |||
LastAmount: canalMsg.Data[0].AfterAmout, | |||
Amount: canalMsg.Data[0].AfterAmout, | |||
RecommendUid: userProfile.ParentUid, | |||
CoinId: utils.StrToInt(canalMsg.Data[0].CoinId), | |||
CreateAt: now.Format("2006-01-02 15:04:05"), | |||
UpdateAt: now.Format("2006-01-02 15:04:05"), | |||
}) | |||
if err3 != nil { | |||
return err3 | |||
} | |||
} else { | |||
//更新记录 | |||
afterAmount, _ := decimal.NewFromString(canalMsg.Data[0].AfterAmout) | |||
amount, _ := decimal.NewFromString(userPublicPlatoonDoubleNetworkUserCoinRecord.Amount) | |||
lastAmount, _ := decimal.NewFromString(userPublicPlatoonDoubleNetworkUserCoinRecord.LastAmount) | |||
if canalMsg.Data[0].Direction == "1" || canalMsg.Data[0].Direction == "2" { | |||
//收入 && 支出 | |||
userPublicPlatoonDoubleNetworkUserCoinRecord.Amount = amount.Add(afterAmount.Sub(lastAmount)).String() | |||
} | |||
userPublicPlatoonDoubleNetworkUserCoinRecord.LastAmount = canalMsg.Data[0].AfterAmout | |||
_, err2 := db.UserPublicPlatoonDoubleNetworkUserCoinRecordUpdate(engine, userPublicPlatoonDoubleNetworkUserCoinRecord.Id, userPublicPlatoonDoubleNetworkUserCoinRecord, "amount", "last_amount") | |||
if err2 != nil { | |||
return err2 | |||
} | |||
} | |||
} | |||
} | |||
return nil | |||
} |
@@ -1,125 +0,0 @@ | |||
package consume | |||
import ( | |||
"applet/app/cfg" | |||
"applet/app/db" | |||
"applet/app/utils" | |||
"applet/app/utils/cache" | |||
tool "applet/app/utils/cloud_issuance" | |||
"applet/app/utils/logx" | |||
md2 "applet/cloud_issuance/md" | |||
"applet/consume/md" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git/rabbit" | |||
"encoding/json" | |||
"errors" | |||
"fmt" | |||
"github.com/streadway/amqp" | |||
"strconv" | |||
"time" | |||
) | |||
func CloudIssuanceAsyncMLoginConsume(queue md.MqQueue) { | |||
fmt.Println(">>>>>>>>>>>>>>>>>>>>>>>>") | |||
ch, err := rabbit.Cfg.Pool.GetChannel() | |||
if err != nil { | |||
logx.Error(err) | |||
return | |||
} | |||
defer ch.Release() | |||
//2、取出数据进行消费 | |||
ch.Qos(1) | |||
delivery := ch.Consume(queue.Name, false) | |||
var res amqp.Delivery | |||
var ok bool | |||
for { | |||
res, ok = <-delivery | |||
if ok == true { | |||
fmt.Println(">>>>>>>>>>>>>>>>CloudIssuanceAsyncMLoginConsume<<<<<<<<<<<<<<<<<<<<<<<<<") | |||
//解析mq中queue的数据结构体 | |||
var msg *md2.CloudIssuanceAsyncMLogin | |||
err = json.Unmarshal(res.Body, &msg) | |||
if err != nil { | |||
panic(err) | |||
} | |||
go func() { | |||
err := handleAsyncMLogin(msg.WId, msg.MasterId, msg.UserId, msg.RobotId) | |||
if err != nil { | |||
fmt.Println("<<<<<<<<<<<< handleAsyncMLogin err>>>>>>>>", err.Error()) | |||
} | |||
}() | |||
_ = res.Ack(true) | |||
} else { | |||
panic(errors.New("error getting message")) | |||
} | |||
} | |||
fmt.Println("get msg done") | |||
} | |||
func handleAsyncMLogin(wId, masterId, userId string, robotId int) error { | |||
var timeTotal = 0 | |||
for { | |||
err, resp := robotAsyncMacLogin(md2.RobotAsyncMacLoginRequest{ | |||
WId: wId, | |||
RobotId: robotId, | |||
}) | |||
if err == nil { | |||
fmt.Println("success <<<<<<<", resp) | |||
if cfg.Prd { | |||
engine := db.DBs[masterId] | |||
cloudIssuanceUserRobotDb := db.CloudIssuanceUserRobotDb{} | |||
cloudIssuanceUserRobotDb.Set(engine, utils.StrToInt(userId)) | |||
robot, err := cloudIssuanceUserRobotDb.GetCloudIssuanceUserRobot() | |||
if err != nil { | |||
return err | |||
} | |||
if robot == nil { | |||
return errors.New("未查询到机器人记录") | |||
} | |||
robot.WcId = resp.WcId | |||
robot.WcNickname = resp.NickName | |||
robot.WcHeadUrl = resp.HeadUrl | |||
robot.LoginStatus = 1 | |||
_, err = cloudIssuanceUserRobotDb.SaveCloudIssuanceUserRobot(robot.Id, robot, "wc_id", "wc_nickname", "wc_head_url", "login_status") | |||
if err != nil { | |||
return err | |||
} | |||
} else { | |||
//TODO::测试环境, 简化操作 通过redis 桥接 | |||
cache.SetEx(fmt.Sprintf("cloud_issuance_async_login_success:%s:%s", masterId, userId), utils.SerializeStr(resp), 60*5) | |||
} | |||
return nil | |||
} | |||
fmt.Println("err>>>>>>>>", err.Error()) | |||
if err != nil && err.Error() != "未登录" { | |||
return err | |||
} | |||
//TODO::休眠5s | |||
time.Sleep(time.Duration(5) * time.Second) | |||
timeTotal += 5 | |||
if timeTotal >= 240 { | |||
return errors.New("超时未登录") | |||
} | |||
} | |||
} | |||
func robotAsyncMacLogin(args md2.RobotAsyncMacLoginRequest) (err error, result md2.RobotAsyncMacLoginResponse) { // 同步登录状态 | |||
url := tool.HttpBuild("itaoke.robot.async.mlogin", "127.0.0.1", map[string]string{ | |||
"robot_id": strconv.Itoa(args.RobotId), | |||
"wId": args.WId, | |||
}) | |||
data, err := tool.SendPost(url, args) | |||
if err != nil { | |||
return | |||
} | |||
resByte, err := json.Marshal(data.Data) | |||
if err != nil { | |||
return | |||
} | |||
err = json.Unmarshal(resByte, &result) | |||
if err != nil { | |||
return | |||
} | |||
return | |||
} |
@@ -1,72 +0,0 @@ | |||
package consume | |||
import ( | |||
"applet/app/utils" | |||
"applet/app/utils/logx" | |||
db "applet/cloud_issuance/db/official" | |||
md2 "applet/cloud_issuance/md" | |||
"applet/cloud_issuance/svc" | |||
"applet/consume/md" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git/rabbit" | |||
"encoding/json" | |||
"errors" | |||
"fmt" | |||
"github.com/gin-gonic/gin" | |||
"github.com/streadway/amqp" | |||
"time" | |||
) | |||
func CloudIssuanceMsgCallBackConsume(queue md.MqQueue) { | |||
fmt.Println(">>>>>>>>>>>>>>>>>>>>>>>>") | |||
ch, err := rabbit.Cfg.Pool.GetChannel() | |||
if err != nil { | |||
logx.Error(err) | |||
return | |||
} | |||
defer ch.Release() | |||
//2、取出数据进行消费 | |||
ch.Qos(10) | |||
delivery := ch.Consume(queue.Name, false) | |||
var res amqp.Delivery | |||
var ok bool | |||
for { | |||
res, ok = <-delivery | |||
if ok == true { | |||
fmt.Println(">>>>>>>>>>>>>>>>CloudIssuanceMsgCallBackConsume<<<<<<<<<<<<<<<<<<<<<<<<<") | |||
//解析mq中queue的数据结构体 | |||
var msg *md2.CallbackRequest | |||
err = json.Unmarshal(res.Body, &msg) | |||
if err != nil { | |||
panic(err) | |||
} | |||
randInt := utils.RandIntRand(100, 200) | |||
time.Sleep(time.Millisecond * time.Duration(randInt)) // 等待100 ~ 200毫秒 | |||
go func() { | |||
//设置masterId | |||
cloudIssuanceRobotRecords, err := db.CloudIssuanceRobotRecordsGetOneByParams(map[string]interface{}{ | |||
"key": "robot_id", | |||
"value": msg.RobotId, | |||
}) | |||
if err != nil { | |||
fmt.Println("CallBackErr:::::", err.Error()) | |||
return | |||
} | |||
if cloudIssuanceRobotRecords == nil { | |||
//TODO::未查询到机器人,不需要处理 | |||
utils.FilePutContents("cloud_issuance_call_back_not_found", utils.SerializeStr(msg)) | |||
return | |||
} | |||
var c = &gin.Context{} | |||
c.Set("mid", cloudIssuanceRobotRecords.MasterId) | |||
dealCloudIssuanceCallBackService := svc.DealCloudIssuanceCallBackService{} | |||
dealCloudIssuanceCallBackService.Set(c) | |||
dealCloudIssuanceCallBackService.DealCallBack(c, *msg) | |||
}() | |||
_ = res.Ack(true) | |||
} else { | |||
panic(errors.New("error getting message")) | |||
} | |||
} | |||
fmt.Println("get msg done") | |||
} |
@@ -1,77 +0,0 @@ | |||
package consume | |||
import ( | |||
"applet/app/utils" | |||
"applet/app/utils/logx" | |||
"bytes" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git/rabbit" | |||
"encoding/json" | |||
jsoniter "github.com/json-iterator/go" | |||
"github.com/streadway/amqp" | |||
"log" | |||
"strings" | |||
) | |||
var Json = jsoniter.ConfigCompatibleWithStandardLibrary | |||
type Message struct { | |||
MessageType string `json:"message_type"` | |||
Data int `json:"data"` | |||
} | |||
func WorkReceive(name string) { | |||
ch, err := rabbit.Cfg.Pool.GetChannel() | |||
if err != nil { | |||
logx.Error(err) | |||
return | |||
} | |||
defer ch.Release() | |||
//接收消息时,指定 | |||
msgs := ch.Consume(name, false) | |||
for msg := range msgs { | |||
var message2 Message | |||
jsonStr := string(msg.Body) | |||
jsonStr = strings.Trim(jsonStr, "\"") | |||
jsonStr = strings.ReplaceAll(jsonStr, "\\", "") | |||
utils.Unserialize([]byte(jsonStr), &message2) | |||
switch message2.MessageType { | |||
case "test": | |||
go func(msg *amqp.Delivery) { | |||
log.Printf("recevie1 Received a message: %s", msg.Body) | |||
msg.Ack(true) | |||
}(&msg) | |||
} | |||
} | |||
} | |||
func TestWorkSend() { | |||
// 推入rabbitMq | |||
ch, err := rabbit.Cfg.Pool.GetChannel() | |||
if err != nil { | |||
logx.Error(err) | |||
} | |||
defer ch.Release() | |||
var message struct { | |||
MessageType string `json:"message_type"` | |||
Data int `json:"data"` | |||
} | |||
message.MessageType = "test" | |||
message.Data = 1 | |||
for message.Data < 2 { | |||
ch.Publish("test_work_queue_processor", utils.SerializeStr(message), "") | |||
message.Data += 1 | |||
//time.Sleep(time.Second * 5) | |||
} | |||
} | |||
// 去除json中的转义字符 | |||
func disableEscapeHtml(data interface{}) (string, error) { | |||
bf := bytes.NewBuffer([]byte{}) | |||
jsonEncoder := json.NewEncoder(bf) | |||
jsonEncoder.SetEscapeHTML(true) | |||
if err := jsonEncoder.Encode(data); err != nil { | |||
return "", err | |||
} | |||
return bf.String(), nil | |||
} |
@@ -1,146 +0,0 @@ | |||
package consume | |||
import ( | |||
"applet/app/cfg" | |||
"applet/app/db" | |||
db2 "applet/app/db/gim" | |||
model2 "applet/app/db/gim/model" | |||
"applet/app/db/model" | |||
utils2 "applet/app/utils" | |||
"applet/app/utils/logx" | |||
utils "applet/app/utils/rpc" | |||
"applet/consume/md" | |||
"applet/pkg/pb" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git/rabbit" | |||
"encoding/json" | |||
"errors" | |||
"fmt" | |||
"github.com/streadway/amqp" | |||
"strconv" | |||
"time" | |||
) | |||
func DouShenUserRegisterConsumeForMyFans(queue md.MqQueue) { | |||
fmt.Println(">>>>>>>>>>>>DouShenUserRegisterConsumeForMyFans>>>>>>>>>>>>") | |||
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(1) | |||
delivery := ch.Consume(queue.Name, false) | |||
var res amqp.Delivery | |||
var ok bool | |||
for { | |||
res, ok = <-delivery | |||
if ok == true { | |||
fmt.Println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>") | |||
err = handleDouShenUserRegisterConsumeForMyFans(res.Body) | |||
if err != nil { | |||
fmt.Println("!!!!!!!err!!!!!!!", err) | |||
_ = res.Reject(false) | |||
utils2.FilePutContents("douShenUserRegisterConsumeForMyFans_err", "[err]:"+err.Error()) | |||
if err.Error() == "用户暂未注册im系统" { | |||
//TODO::重新推回队列末尾,避免造成队列堵塞 | |||
var msg *md.DouShenUserRegisterMessageStructForMyFans | |||
json.Unmarshal(res.Body, &msg) | |||
ch.Publish(queue.ExchangeName, msg, queue.RoutKey) | |||
} | |||
} else { | |||
_ = res.Ack(true) | |||
} | |||
} else { | |||
panic(errors.New("error getting message")) | |||
} | |||
} | |||
fmt.Println("get msg done") | |||
} | |||
func handleDouShenUserRegisterConsumeForMyFans(msgData []byte) error { | |||
time.Sleep(time.Duration(15) * time.Second) | |||
//1、解析mq中queue的数据结构体 | |||
var msg *md.DouShenUserRegisterMessageStructForMyFans | |||
err := json.Unmarshal(msgData, &msg) | |||
if err != nil { | |||
return err | |||
} | |||
//2、查找用户对应im系统中的数据 | |||
gimUser, err := db2.UserGetOneByParams(db.ImDb, msg.MasterId, map[string]interface{}{ | |||
"key": "phone_number", | |||
"value": msg.Phone, | |||
}) | |||
if err != nil { | |||
return err | |||
} | |||
if gimUser == nil { | |||
if db.DBs[msg.MasterId] == nil { | |||
return nil | |||
} | |||
user, err := db.UserFindByMobile(db.DBs[msg.MasterId], strconv.FormatInt(msg.Phone, 10)) | |||
if err != nil { | |||
return err | |||
} | |||
userProfile, err := db.UserProfileFindByID(db.DBs[msg.MasterId], user.Uid) | |||
if err != nil { | |||
return err | |||
} | |||
gimUserId, err := db2.UserInsert(db.ImDb, &model2.User{ | |||
PhoneNumber: strconv.FormatInt(msg.Phone, 10), | |||
Nickname: user.Nickname, | |||
AvatarUrl: userProfile.AvatarUrl, | |||
Sex: userProfile.Gender, | |||
CreateTime: time.Now().Format("2006-01-02 15:04:05"), | |||
UpdateTime: time.Now().Format("2006-01-02 15:04:05"), | |||
MasterId: utils2.StrToInt64(msg.MasterId), | |||
IsAutoAddedFriends: 0, | |||
}) | |||
if err != nil { | |||
return errors.New("用户暂未注册im系统") | |||
} | |||
gimUser, err = db2.UserGetOneByParams(db.ImDb, msg.MasterId, map[string]interface{}{ | |||
"key": "id", | |||
"value": gimUserId, | |||
}) | |||
if gimUser == nil { | |||
return errors.New("用户暂未注册im系统") | |||
} | |||
} | |||
groupName := "我的粉丝【1】群" | |||
//3、创建群 | |||
resp, err := utils.GetLogicExtClient(cfg.ImLogicRpc.URL, cfg.ImLogicRpc.PORT).CreateGroup(utils.GetCtx("", utils2.Int64ToStr(gimUser.Id), "", msg.MasterId), &pb.CreateGroupReq{ | |||
Name: groupName, | |||
AvatarUrl: "", | |||
//Introduction: gimUser.Nickname + "的粉丝群", | |||
Introduction: "", | |||
Extra: "", | |||
MemberIds: nil, | |||
}) | |||
if err != nil { | |||
return err | |||
} | |||
//插入 dou_shen_im_group 记录 | |||
now := time.Now() | |||
_, err = db.DouShenImGroupInsert(db.Db, &model.DouShenImGroup{ | |||
Kind: 3, | |||
Uid: int(msg.Uid), | |||
GroupId: int(resp.GroupId), | |||
IsFull: 0, | |||
Name: groupName, | |||
CreateTime: now, | |||
UpdateTime: now, | |||
}) | |||
if err != nil { | |||
return err | |||
} | |||
return nil | |||
} |
@@ -1,207 +0,0 @@ | |||
package consume | |||
import ( | |||
"applet/app/cfg" | |||
"applet/app/db" | |||
db2 "applet/app/db/gim" | |||
"applet/app/db/gim/model" | |||
model2 "applet/app/db/model" | |||
utils2 "applet/app/utils" | |||
"applet/app/utils/logx" | |||
utils "applet/app/utils/rpc" | |||
"applet/consume/md" | |||
"applet/pkg/pb" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git/rabbit" | |||
"encoding/json" | |||
"errors" | |||
"fmt" | |||
"github.com/streadway/amqp" | |||
"strconv" | |||
"time" | |||
) | |||
func DouShenUserRegisterConsumeForMyRecommender(queue md.MqQueue) { | |||
fmt.Println(">>>>>>>>>>>>DouShenUserRegisterConsumeForMyRecommender>>>>>>>>>>>>") | |||
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(1) | |||
delivery := ch.Consume(queue.Name, false) | |||
var res amqp.Delivery | |||
var ok bool | |||
for { | |||
res, ok = <-delivery | |||
if ok == true { | |||
fmt.Println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>") | |||
err = handleDouShenUserRegisterConsumeForMyRecommender(res.Body) | |||
if err != nil { | |||
fmt.Println("!!!!!!!err!!!!!!!", err) | |||
_ = res.Reject(false) | |||
utils2.FilePutContents("douShenUserRegisterConsumeForMyRecommender_err", "[err]:"+err.Error()) | |||
if err.Error() == "用户暂未注册im系统" { | |||
//TODO::重新推回队列末尾,避免造成队列堵塞 | |||
var msg *md.DouShenUserRegisterMessageStructForMyRecommender | |||
json.Unmarshal(res.Body, &msg) | |||
ch.Publish(queue.ExchangeName, msg, queue.RoutKey) | |||
} | |||
} else { | |||
_ = res.Ack(true) | |||
} | |||
} else { | |||
panic(errors.New("error getting message")) | |||
} | |||
} | |||
fmt.Println("get msg done") | |||
} | |||
func handleDouShenUserRegisterConsumeForMyRecommender(msgData []byte) error { | |||
time.Sleep(time.Duration(20) * time.Second) | |||
//1、解析mq中queue的数据结构体 | |||
var msg *md.DouShenUserRegisterMessageStructForMyRecommender | |||
err := json.Unmarshal(msgData, &msg) | |||
if err != nil { | |||
return err | |||
} | |||
//2、查找用户对应im系统中的数据 | |||
gimUser, err := db2.UserGetOneByParams(db.ImDb, msg.MasterId, map[string]interface{}{ | |||
"key": "phone_number", | |||
"value": msg.Phone, | |||
}) | |||
if err != nil { | |||
return err | |||
} | |||
if gimUser == nil { | |||
if db.DBs[msg.MasterId] == nil { | |||
return nil | |||
} | |||
user, err := db.UserFindByMobile(db.DBs[msg.MasterId], strconv.FormatInt(msg.Phone, 10)) | |||
if err != nil { | |||
return err | |||
} | |||
userProfile, err := db.UserProfileFindByID(db.DBs[msg.MasterId], user.Uid) | |||
if err != nil { | |||
return err | |||
} | |||
gimUserId, err := db2.UserInsert(db.ImDb, &model.User{ | |||
PhoneNumber: strconv.FormatInt(msg.Phone, 10), | |||
Nickname: user.Nickname, | |||
AvatarUrl: userProfile.AvatarUrl, | |||
Sex: userProfile.Gender, | |||
CreateTime: time.Now().Format("2006-01-02 15:04:05"), | |||
UpdateTime: time.Now().Format("2006-01-02 15:04:05"), | |||
MasterId: utils2.StrToInt64(msg.MasterId), | |||
IsAutoAddedFriends: 0, | |||
}) | |||
if err != nil { | |||
return errors.New("用户暂未注册im系统") | |||
} | |||
gimUser, err = db2.UserGetOneByParams(db.ImDb, msg.MasterId, map[string]interface{}{ | |||
"key": "id", | |||
"value": gimUserId, | |||
}) | |||
if gimUser == nil { | |||
return errors.New("用户暂未注册im系统") | |||
} | |||
} | |||
//2、查找是否有群 | |||
var fansGroup model2.DouShenImGroup | |||
fansGroups, err := db.DouShenImGroupFindByParamsByKind(db.Db, 3, map[string]interface{}{ | |||
"key": "uid", | |||
"value": msg.RecommenderUid, | |||
}) | |||
if err != nil { | |||
return err | |||
} | |||
for _, group := range *fansGroups { | |||
//统计当前群有多少人 | |||
userGroups, err := db2.GroupUserFindByParams(db.ImDb, map[string]interface{}{ | |||
"key": "group_id", | |||
"value": group.GroupId, | |||
}) | |||
if err != nil { | |||
return err | |||
} | |||
if len(*userGroups) < 500 { | |||
fansGroup = group | |||
} | |||
} | |||
if fansGroup.GroupId == 0 { | |||
recommenderUser, err := db.UserFindByID(db.DBs[msg.MasterId], msg.RecommenderUid) | |||
if err != nil { | |||
return err | |||
} | |||
recommenderGimUser, err := db2.UserGetOneByParams(db.ImDb, msg.MasterId, map[string]interface{}{ | |||
"key": "phone_number", | |||
"value": recommenderUser.Phone, | |||
}) | |||
if recommenderGimUser == nil { | |||
return errors.New("当前推荐人信息有误,请联系管理员!!!") | |||
} | |||
groupName := "我的粉丝【" + utils2.AnyToString(len(*fansGroups)+1) + "】群" | |||
//3、创建群 | |||
resp, err := utils.GetLogicExtClient(cfg.ImLogicRpc.URL, cfg.ImLogicRpc.PORT).CreateGroup(utils.GetCtx("", strconv.FormatInt(recommenderGimUser.Id, 10), "0", msg.MasterId), &pb.CreateGroupReq{ | |||
Name: groupName, | |||
AvatarUrl: "", | |||
//Introduction: "官方群", | |||
Introduction: "", | |||
Extra: "", | |||
MemberIds: []int64{}, | |||
}) | |||
if err != nil { | |||
return err | |||
} | |||
//插入 dou_shen_im_group 记录 | |||
now := time.Now() | |||
_, err = db.DouShenImGroupInsert(db.Db, &model2.DouShenImGroup{ | |||
Kind: 3, | |||
Uid: int(msg.RecommenderUid), | |||
GroupId: int(resp.GroupId), | |||
IsFull: 0, | |||
Name: groupName, | |||
CreateTime: now, | |||
UpdateTime: now, | |||
}) | |||
if err != nil { | |||
return err | |||
} | |||
tempFansGroup, err := db.DouShenImGroupGetOneByParams(db.Db, 2, map[string]interface{}{ | |||
"group_id": resp.GroupId, | |||
}) | |||
if err != nil { | |||
return err | |||
} | |||
fansGroup = *tempFansGroup | |||
} | |||
userGroup, err2 := db2.GroupUserGetOneByParams(db.ImDb, 1, map[string]interface{}{ | |||
"key": "group_id", | |||
"value": fansGroup.GroupId, | |||
}) | |||
if err2 != nil { | |||
return err2 | |||
} | |||
if userGroup == nil { | |||
return errors.New("当前推荐人群暂未设置群主,请联系管理员!!!") | |||
} | |||
//加入群 | |||
_, err = utils.GetLogicExtClient(cfg.ImLogicRpc.URL, cfg.ImLogicRpc.PORT).AddGroupMembers( | |||
utils.GetCtx("", strconv.FormatInt(userGroup.UserId, 10), "", msg.MasterId), | |||
&pb.AddGroupMembersReq{ | |||
GroupId: int64(fansGroup.GroupId), | |||
UserIds: []int64{gimUser.Id}, | |||
}) | |||
return nil | |||
} |
@@ -1,194 +0,0 @@ | |||
package consume | |||
import ( | |||
"applet/app/cfg" | |||
"applet/app/db" | |||
db2 "applet/app/db/gim" | |||
model2 "applet/app/db/gim/model" | |||
"applet/app/db/model" | |||
utils2 "applet/app/utils" | |||
"applet/app/utils/logx" | |||
utils "applet/app/utils/rpc" | |||
"applet/consume/md" | |||
"applet/pkg/pb" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git/rabbit" | |||
"encoding/json" | |||
"errors" | |||
"fmt" | |||
"github.com/streadway/amqp" | |||
"strconv" | |||
"time" | |||
) | |||
func DouShenUserRegisterConsumeForOfficial(queue md.MqQueue) { | |||
fmt.Println(">>>>>>>>>>>>DouShenUserRegisterConsumeForOfficial>>>>>>>>>>>>") | |||
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(1) | |||
delivery := ch.Consume(queue.Name, false) | |||
var res amqp.Delivery | |||
var ok bool | |||
for { | |||
res, ok = <-delivery | |||
if ok == true { | |||
fmt.Println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>") | |||
err = handleDouShenUserRegisterConsumeForOfficial(res.Body) | |||
if err != nil { | |||
fmt.Println("!!!!!!!err!!!!!!!", err) | |||
_ = res.Reject(false) | |||
utils2.FilePutContents("douShenUserRegisterConsumeForOfficial_err", "[err]:"+err.Error()) | |||
if err.Error() == "用户暂未注册im系统" { | |||
//TODO::重新推回队列末尾,避免造成队列堵塞 | |||
var msg *md.DouShenUserRegisterMessageStructForOfficial | |||
json.Unmarshal(res.Body, &msg) | |||
ch.Publish(queue.ExchangeName, msg, queue.RoutKey) | |||
} | |||
} else { | |||
_ = res.Ack(true) | |||
} | |||
} else { | |||
panic(errors.New("error getting message")) | |||
} | |||
} | |||
fmt.Println("get msg done") | |||
} | |||
func handleDouShenUserRegisterConsumeForOfficial(msgData []byte) error { | |||
time.Sleep(time.Duration(5) * time.Second) | |||
//1、解析mq中queue的数据结构体 | |||
var msg *md.DouShenUserRegisterMessageStructForOfficial | |||
err := json.Unmarshal(msgData, &msg) | |||
if err != nil { | |||
return err | |||
} | |||
//2、查找用户对应im系统中的数据 | |||
gimUser, err := db2.UserGetOneByParams(db.ImDb, msg.MasterId, map[string]interface{}{ | |||
"key": "phone_number", | |||
"value": msg.Phone, | |||
}) | |||
if err != nil { | |||
return err | |||
} | |||
if gimUser == nil { | |||
if db.DBs[msg.MasterId] == nil { | |||
return nil | |||
} | |||
fmt.Println("===========================", msg.Phone) | |||
user, err := db.UserFindByMobile(db.DBs[msg.MasterId], strconv.FormatInt(msg.Phone, 10)) | |||
if err != nil { | |||
return err | |||
} | |||
if user == nil { | |||
return nil | |||
} | |||
userProfile, err := db.UserProfileFindByID(db.DBs[msg.MasterId], user.Uid) | |||
if err != nil { | |||
return err | |||
} | |||
gimUserId, err := db2.UserInsert(db.ImDb, &model2.User{ | |||
PhoneNumber: strconv.FormatInt(msg.Phone, 10), | |||
Nickname: user.Nickname, | |||
AvatarUrl: userProfile.AvatarUrl, | |||
Sex: userProfile.Gender, | |||
CreateTime: time.Now().Format("2006-01-02 15:04:05"), | |||
UpdateTime: time.Now().Format("2006-01-02 15:04:05"), | |||
MasterId: utils2.StrToInt64(msg.MasterId), | |||
IsAutoAddedFriends: 0, | |||
}) | |||
if err != nil { | |||
return errors.New("用户暂未注册im系统") | |||
} | |||
gimUser, err = db2.UserGetOneByParams(db.ImDb, msg.MasterId, map[string]interface{}{ | |||
"key": "id", | |||
"value": gimUserId, | |||
}) | |||
if gimUser == nil { | |||
return errors.New("用户暂未注册im系统") | |||
} | |||
} | |||
//2、查找是否有群 | |||
//officialGroup, err := db.DouShenImGroupGetOneByParamsForOfficial(db.Db, 1) | |||
var officialGroup model.DouShenImGroup | |||
officialGroups, err := db.DouShenImGroupFindByParams(db.Db, map[string]interface{}{ | |||
"key": "kind", | |||
"value": 1, | |||
}) | |||
if err != nil { | |||
return err | |||
} | |||
for _, group := range *officialGroups { | |||
if officialGroup.GroupId != 0 { | |||
continue | |||
} | |||
//统计当前群有多少人 | |||
userGroups, _ := db2.GroupUserFindByParams(db.ImDb, map[string]interface{}{ | |||
"key": "group_id", | |||
"value": group.GroupId, | |||
}) | |||
if len(*userGroups) < 500 { | |||
officialGroup = group | |||
} | |||
} | |||
if officialGroup.GroupId == 0 { | |||
groupName := "官方【" + utils2.AnyToString(len(*officialGroups)+1) + "】群" | |||
//3、创建群 | |||
resp, err := utils.GetLogicExtClient(cfg.ImLogicRpc.URL, cfg.ImLogicRpc.PORT).CreateGroup(utils.GetCtx("", strconv.FormatInt(gimUser.Id, 10), "0", msg.MasterId), &pb.CreateGroupReq{ | |||
Name: groupName, | |||
AvatarUrl: "", | |||
//Introduction: "官方群", | |||
Introduction: "", | |||
Extra: "", | |||
MemberIds: []int64{}, | |||
}) | |||
if err != nil { | |||
return err | |||
} | |||
//插入 dou_shen_im_group 记录 | |||
now := time.Now() | |||
_, err = db.DouShenImGroupInsert(db.Db, &model.DouShenImGroup{ | |||
Kind: 1, | |||
Uid: int(msg.Uid), | |||
GroupId: int(resp.GroupId), | |||
IsFull: 0, | |||
Name: groupName, | |||
CreateTime: now, | |||
UpdateTime: now, | |||
}) | |||
if err != nil { | |||
return err | |||
} | |||
} else { | |||
userGroup, err2 := db2.GroupUserGetOneByParams(db.ImDb, 1, map[string]interface{}{ | |||
"key": "group_id", | |||
"value": officialGroup.GroupId, | |||
}) | |||
if err2 != nil { | |||
return err2 | |||
} | |||
if userGroup == nil { | |||
return errors.New("当前官方群暂未设置群主,请联系管理员!!!") | |||
} | |||
//加入群 | |||
_, err = utils.GetLogicExtClient(cfg.ImLogicRpc.URL, cfg.ImLogicRpc.PORT).AddGroupMembers( | |||
utils.GetCtx("", strconv.FormatInt(userGroup.UserId, 10), "", msg.MasterId), | |||
&pb.AddGroupMembersReq{ | |||
GroupId: int64(officialGroup.GroupId), | |||
UserIds: []int64{gimUser.Id}, | |||
}) | |||
} | |||
return nil | |||
} |
@@ -1,289 +0,0 @@ | |||
package consume | |||
import ( | |||
"applet/app/cfg" | |||
"applet/app/db" | |||
db2 "applet/app/db/gim" | |||
"applet/app/db/gim/model" | |||
model2 "applet/app/db/model" | |||
"applet/app/svc" | |||
utils2 "applet/app/utils" | |||
"applet/app/utils/logx" | |||
utils "applet/app/utils/rpc" | |||
"applet/consume/md" | |||
"applet/pkg/pb" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git/rabbit" | |||
"encoding/json" | |||
"errors" | |||
"fmt" | |||
"github.com/streadway/amqp" | |||
"strconv" | |||
"time" | |||
) | |||
func DouShenUserRegisterConsumeForOperationCenter(queue md.MqQueue) { | |||
fmt.Println(">>>>>>>>>>>>DouShenUserRegisterConsumeForOperationCenter>>>>>>>>>>>>") | |||
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(1) | |||
delivery := ch.Consume(queue.Name, false) | |||
var res amqp.Delivery | |||
var ok bool | |||
for { | |||
res, ok = <-delivery | |||
if ok == true { | |||
fmt.Println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>") | |||
err = handleDouShenUserRegisterConsumeForOperationCenter(res.Body) | |||
if err != nil { | |||
fmt.Println("!!!!!!!err!!!!!!!", err) | |||
_ = res.Reject(false) | |||
utils2.FilePutContents("douShenUserRegisterConsumeForOperationCenter_err", "[err]:"+err.Error()) | |||
if err.Error() == "用户暂未注册im系统" { | |||
//TODO::重新推回队列末尾,避免造成队列堵塞 | |||
var msg *md.DouShenUserRegisterMessageStructForOperationCenter | |||
json.Unmarshal(res.Body, &msg) | |||
ch.Publish(queue.ExchangeName, msg, queue.RoutKey) | |||
} | |||
} else { | |||
_ = res.Ack(true) | |||
} | |||
} else { | |||
panic(errors.New("error getting message")) | |||
} | |||
} | |||
fmt.Println("get msg done") | |||
} | |||
func handleDouShenUserRegisterConsumeForOperationCenter(msgData []byte) error { | |||
time.Sleep(time.Duration(30) * time.Second) | |||
//1、解析mq中queue的数据结构体 | |||
var msg *md.DouShenUserRegisterMessageStructForOperationCenter | |||
err := json.Unmarshal(msgData, &msg) | |||
if err != nil { | |||
return err | |||
} | |||
//2、查找用户对应im系统中的数据 | |||
gimUser, err := db2.UserGetOneByParams(db.ImDb, msg.MasterId, map[string]interface{}{ | |||
"key": "phone_number", | |||
"value": msg.Phone, | |||
}) | |||
if err != nil { | |||
return err | |||
} | |||
if gimUser == nil { | |||
if db.DBs[msg.MasterId] == nil { | |||
return nil | |||
} | |||
user, err := db.UserFindByMobile(db.DBs[msg.MasterId], strconv.FormatInt(msg.Phone, 10)) | |||
if err != nil { | |||
return err | |||
} | |||
if user == nil { | |||
return nil | |||
} | |||
userProfile, err := db.UserProfileFindByID(db.DBs[msg.MasterId], user.Uid) | |||
if err != nil { | |||
return err | |||
} | |||
if userProfile == nil { | |||
return nil | |||
} | |||
gimUserId, err := db2.UserInsert(db.ImDb, &model.User{ | |||
PhoneNumber: strconv.FormatInt(msg.Phone, 10), | |||
Nickname: user.Nickname, | |||
AvatarUrl: userProfile.AvatarUrl, | |||
Sex: userProfile.Gender, | |||
CreateTime: time.Now().Format("2006-01-02 15:04:05"), | |||
UpdateTime: time.Now().Format("2006-01-02 15:04:05"), | |||
MasterId: utils2.StrToInt64(msg.MasterId), | |||
IsAutoAddedFriends: 0, | |||
}) | |||
if err != nil { | |||
return errors.New("用户暂未注册im系统") | |||
} | |||
gimUser, err = db2.UserGetOneByParams(db.ImDb, msg.MasterId, map[string]interface{}{ | |||
"key": "id", | |||
"value": gimUserId, | |||
}) | |||
if gimUser == nil { | |||
return errors.New("用户暂未注册im系统") | |||
} | |||
} | |||
//2、查找是否有群 | |||
//OperationGroup, err := db.DouShenImGroupGetOneByParamsForFans(db.Db, 2, msg.OperationCenterUid) | |||
var OperationGroup model2.DouShenImGroup | |||
operationGroups, err := db.DouShenImGroupFindByParamsByKind(db.Db, 2, map[string]interface{}{ | |||
"key": "uid", | |||
"value": msg.OperationCenterUid, | |||
}) | |||
if err != nil { | |||
return err | |||
} | |||
for _, group := range *operationGroups { | |||
//统计当前群有多少人 | |||
userGroups, err := db2.GroupUserFindByParams(db.ImDb, map[string]interface{}{ | |||
"key": "group_id", | |||
"value": group.GroupId, | |||
}) | |||
if err != nil { | |||
return err | |||
} | |||
if len(*userGroups) < 500 { | |||
OperationGroup = group | |||
} | |||
} | |||
if OperationGroup.GroupId == 0 { | |||
//创建运营中心群 | |||
operationCenterUser, err := db.UserFindByID(db.DBs[msg.MasterId], msg.OperationCenterUid) | |||
if err != nil { | |||
return err | |||
} | |||
operationCenterGimUser, err := db2.UserGetOneByParams(db.ImDb, msg.MasterId, map[string]interface{}{ | |||
"key": "phone_number", | |||
"value": operationCenterUser.Phone, | |||
}) | |||
if operationCenterGimUser == nil { | |||
return errors.New("运营中心用户暂未注册im系统") | |||
} | |||
var m model2.RegionalAgentUser | |||
_, err = db.DBs[msg.MasterId].Where("uid =?", msg.OperationCenterUid).Get(&m) | |||
if err != nil { | |||
panic(err) | |||
} | |||
regionalAgentRegion, err := db.RegionalAgentRegionGetOneByParams(db.DBs[msg.MasterId], map[string]interface{}{ | |||
"key": "id", | |||
"value": m.RegionId, | |||
}) | |||
if err != nil { | |||
panic(err) | |||
} | |||
groupName := "抖省" + regionalAgentRegion.Name + "运营中心【" + utils2.AnyToString(len(*operationGroups)) + "】群" | |||
resp, err := utils.GetLogicExtClient(cfg.ImLogicRpc.URL, cfg.ImLogicRpc.PORT).CreateGroup(utils.GetCtx("", utils2.Int64ToStr(operationCenterGimUser.Id), "", msg.MasterId), &pb.CreateGroupReq{ | |||
Name: groupName, | |||
AvatarUrl: "", | |||
//Introduction: gimUser.Nickname + "的粉丝群", | |||
Introduction: "", | |||
Extra: "", | |||
MemberIds: nil, | |||
}) | |||
if err != nil { | |||
return err | |||
} | |||
//插入 dou_shen_im_group 记录 | |||
now := time.Now() | |||
_, err = db.DouShenImGroupInsert(db.Db, &model2.DouShenImGroup{ | |||
Kind: 2, | |||
Uid: int(msg.OperationCenterUid), | |||
GroupId: int(resp.GroupId), | |||
IsFull: 0, | |||
Name: groupName, | |||
CreateTime: now, | |||
UpdateTime: now, | |||
}) | |||
if err != nil { | |||
return err | |||
} | |||
tmpOperationGroup, err := db.DouShenImGroupGetOneByParams(db.Db, 2, map[string]interface{}{ | |||
"group_id": resp.GroupId, | |||
}) | |||
if err != nil { | |||
return err | |||
} | |||
OperationGroup = *tmpOperationGroup | |||
} | |||
userGroup, err2 := db2.GroupUserGetOneByParams(db.ImDb, 1, map[string]interface{}{ | |||
"key": "group_id", | |||
"value": OperationGroup.GroupId, | |||
}) | |||
if err2 != nil { | |||
return err2 | |||
} | |||
if userGroup == nil { | |||
return errors.New("当前运营中心群暂未设置群主,请联系管理员!!!") | |||
} | |||
//加入群 | |||
_, err = utils.GetLogicExtClient(cfg.ImLogicRpc.URL, cfg.ImLogicRpc.PORT).AddGroupMembers(utils.GetCtx("", strconv.FormatInt(userGroup.UserId, 10), "", msg.MasterId), &pb.AddGroupMembersReq{ | |||
GroupId: int64(OperationGroup.GroupId), | |||
UserIds: []int64{gimUser.Id}, | |||
}) | |||
//发送专属红包 | |||
gimSendSpeciallyRedPackageUser, err := db2.DbSysCfg.SysCfgGetOne("send_specially_red_package_user", msg.MasterId) | |||
if err != nil { | |||
return err | |||
} | |||
if gimSendSpeciallyRedPackageUser == nil { | |||
return errors.New("暂未设置专属红包发送用户") | |||
} | |||
sendSpeciallyRedPackageUser, err := db.SysCfgGetOne(db.DBs[msg.MasterId], "send_specially_red_package_user") | |||
if err != nil { | |||
return err | |||
} | |||
amount, err := getSendAmount(msg.MasterId) | |||
if err != nil { | |||
return err | |||
} | |||
args := md.SendRedPackageReq{ | |||
UserId: gimSendSpeciallyRedPackageUser.Val, | |||
DeviceId: "", | |||
Token: "", | |||
Amount: amount, | |||
RedPacketType: 5, | |||
RedPacketNums: 1, | |||
RedPacketContent: "抖省赚钱,大吉大利", | |||
RedPacketSmallContent: gimUser.Nickname + "的专属红包", | |||
ReceiverType: 2, | |||
ReceiverId: int64(OperationGroup.GroupId), | |||
SendTime: utils2.UnixMilliTime(time.Now()), | |||
ToUserIds: []int64{gimUser.Id}, | |||
RedPackageCover: "", | |||
} | |||
err, _ = svc.CurlSendRedPackage(args, msg.MasterId, sendSpeciallyRedPackageUser.Val) | |||
if err != nil { | |||
return err | |||
} | |||
return nil | |||
} | |||
func getSendAmount(masterId string) (string, error) { | |||
speciallyRedPackageAmountRadio, err := db.SysCfgGetOne(db.DBs[masterId], "specially_red_package_amount_radio") | |||
if err != nil { | |||
return "", err | |||
} | |||
var speciallyRedPackageAmountRadioData []*md.SpeciallyRedPackageAmountRadio | |||
err = json.Unmarshal([]byte(speciallyRedPackageAmountRadio.Val), &speciallyRedPackageAmountRadioData) | |||
if err != nil { | |||
return "", err | |||
} | |||
var tempSpeciallyRedPackageAmountRadioData []*md.SpeciallyRedPackageAmountRadio | |||
for _, v := range speciallyRedPackageAmountRadioData { | |||
for i := 0; i < utils2.StrToInt(v.Value); i++ { | |||
tempSpeciallyRedPackageAmountRadioData = append(tempSpeciallyRedPackageAmountRadioData, v) | |||
} | |||
} | |||
if len(tempSpeciallyRedPackageAmountRadioData) < 100 { | |||
return "", errors.New("红包金额比例设置有误!") | |||
} | |||
randInt := utils2.RandInt(99) | |||
min := tempSpeciallyRedPackageAmountRadioData[randInt].From | |||
max := tempSpeciallyRedPackageAmountRadioData[randInt].To | |||
amount := utils2.AnyToString(utils2.RandFloats(utils2.AnyToFloat64(min), utils2.AnyToFloat64(max))) | |||
return amount, nil | |||
} |
@@ -1,68 +0,0 @@ | |||
package consume | |||
import ( | |||
"applet/app/db" | |||
utils2 "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" | |||
"strconv" | |||
"time" | |||
) | |||
func DouShenUserRegisterConsumeForUserRegisterUpLv(queue md.MqQueue) { | |||
fmt.Println(">>>>>>>>>>>>DouShenUserRegisterConsumeForUserRegisterUpLv>>>>>>>>>>>>") | |||
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(1) | |||
delivery := ch.Consume(queue.Name, false) | |||
var res amqp.Delivery | |||
var ok bool | |||
for { | |||
res, ok = <-delivery | |||
if ok == true { | |||
fmt.Println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>") | |||
err = handleDouShenUserRegisterConsumeForUserRegisterUpLv(res.Body) | |||
if err != nil { | |||
fmt.Println("!!!!!!!err!!!!!!!", err) | |||
utils2.FilePutContents("douShenUserRegisterConsumeForUserRegisterUpLv_err", "[err]:"+err.Error()) | |||
_ = res.Reject(false) | |||
} else { | |||
_ = res.Ack(true) | |||
} | |||
} else { | |||
panic(errors.New("error getting message")) | |||
} | |||
} | |||
fmt.Println("get msg done") | |||
} | |||
func handleDouShenUserRegisterConsumeForUserRegisterUpLv(msgData []byte) error { | |||
time.Sleep(time.Duration(10) * time.Second) | |||
//1、解析mq中queue的数据结构体 | |||
var msg *md.DouShenUserRegisterMessageStructForUserRegisterUpLv | |||
err := json.Unmarshal(msgData, &msg) | |||
if err != nil { | |||
return err | |||
} | |||
if db.DBs[msg.MasterId] == nil { | |||
return nil | |||
} | |||
eg := db.DBs[msg.MasterId] | |||
levelList, _ := db.UserLevlEgAll(eg) | |||
FindUser(eg, strconv.FormatInt(msg.Uid, 10), msg.MasterId, levelList) | |||
return nil | |||
} |
@@ -17,90 +17,10 @@ func Init() { | |||
// 增加消费任务队列 | |||
func initConsumes() { | |||
//jobs[consumeMd.ZhiosGuideStoreOrderFunName] = ZhiosGuideStoreOrder | |||
//jobs[consumeMd.ZhiosIntegralProxyRechargeFunName] = ZhiosIntegralProxyRecharge | |||
//jobs[consumeMd.ZhiosUserUpLvFunName] = ZhiosUserUpLv | |||
//jobs[consumeMd.CanalGuideOrderByUserUpLvConsume] = CanalGuideOrderByUserUpLvConsume | |||
//jobs[consumeMd.ZhiosOrderFreeFunName] = ZhiosOrderFree | |||
//jobs[consumeMd.ZhiosOrderTotalFunName] = ZhiosOrderTotal | |||
//jobs[consumeMd.ZhiosOrderTotalSecondFunName] = ZhiosOrderTotalSecond | |||
//// | |||
//jobs[consumeMd.ZhiosOrderSettleTotalFunName] = ZhiosSettleTotal | |||
//jobs[consumeMd.ZhiosOrderHjyFunName] = ZhiosOrderHjy | |||
//jobs[consumeMd.ZhiosOrderBuckleFunName] = ZhiosOrderBuckle | |||
//// | |||
//jobs[consumeMd.ZhiosSupplierAfterOrderFunName] = ZhiosSupplierAfterOrder | |||
// | |||
//jobs[consumeMd.ZhiosAppreciationFunName] = ZhiosAppreciation | |||
//jobs[consumeMd.ZhiosValidUserFunName] = ZhiosValidUser | |||
// | |||
//jobs[consumeMd.ZhiosAcquisitionConditionFunName] = ZhiosAcquisitionCondition | |||
// | |||
//jobs[consumeMd.DouShenUserRegisterConsumeForOfficialFunName] = DouShenUserRegisterConsumeForOfficial | |||
//jobs[consumeMd.DouShenUserRegisterConsumeForOperationCenterFunName] = DouShenUserRegisterConsumeForOperationCenter | |||
//jobs[consumeMd.DouShenUserRegisterConsumeForMyRecommenderFunName] = DouShenUserRegisterConsumeForMyRecommender | |||
//jobs[consumeMd.DouShenUserRegisterConsumeForMyFansFunName] = DouShenUserRegisterConsumeForMyFans | |||
//jobs[consumeMd.DouShenUserRegisterConsumeForUserRegisterUpLvFunName] = DouShenUserRegisterConsumeForUserRegisterUpLv | |||
// | |||
//jobs[consumeMd.ZhiosFastReturnOrderPayFunName] = ZhiosFastReturnOrderPay | |||
//jobs[consumeMd.ZhiosFastReturnOrderSuccessFunName] = ZhiosFastReturnOrderSuccess | |||
//jobs[consumeMd.ZhiosFastReturnOrderRefundFunName] = ZhiosFastReturnOrderRefund | |||
//jobs[consumeMd.ZhiosFastReturnOrderRefundSecondFunName] = ZhiosFastReturnOrderRefundSecond | |||
// | |||
//jobs[consumeMd.YoumishangExchangeStoreFunName] = YoumishangExchangeStore | |||
// | |||
//jobs[consumeMd.ZhiosRechargeOrderFailFunName] = ZhiosRechargeOrderFail | |||
// | |||
//jobs[consumeMd.CloudIssuanceAsyncMLoginFunName] = CloudIssuanceAsyncMLoginConsume | |||
//jobs[consumeMd.ZhiosTikTokUpdateFunName] = ZhiosTikTokUpdate | |||
//jobs[consumeMd.ZhiosTikTokAllUpdateFunName] = ZhiosTikTokAllUpdate | |||
// | |||
//jobs[consumeMd.ZhiosCapitalPoolOrderTotalFunName] = ZhiosCapitalPoolOrderTotal | |||
//jobs[consumeMd.ZhiosExpressOrderFail] = ZhiosExpressOrderFail | |||
//jobs[consumeMd.ZhiosWithdrawReward] = ZhiosWithdrawReward | |||
//jobs[consumeMd.ZhiosTaskTotal] = ZhiosTaskTotal | |||
// | |||
////////////////////////////////////// V1 ///////////////////////////////////////////////////// | |||
//jobs[consumeMd.CloudIssuanceMsgCallBackFunName] = CloudIssuanceMsgCallBackConsume | |||
//////////////////////////////////////// V2 ///////////////////////////////////////////////////// | |||
//jobs[consumeMd.SupplyCloudChainFenxiaoNewChangeFunName] = SupplyCloudChainFenxiaoNewChangeConsume | |||
//////////////////////////////////////// V3 ///////////////////////////////////////////////////// | |||
//jobs[consumeMd.MallAddSupplyGoodsFunName] = MallAddSupplyGoodsConsume | |||
//////////////////////////////////////// bigData ///////////////////////////////////////////////////// | |||
//jobs[consumeMd.CanalOrderConsumeFunName] = CanalOrderConsume | |||
//jobs[consumeMd.CanalGuideOrderConsumeFunName] = CanalGuideOrderConsume | |||
//jobs[consumeMd.ZhiOsUserVisitIpAddressConsumeFunName] = ZhiOsUserVisitIpAddressConsume | |||
//jobs[consumeMd.CanalUserVirtualCcoinFlowFunName] = CanalUserVirtualCoinFlowConsume | |||
//////////////////////////////////////// oneCircles ///////////////////////////////////////////////////// | |||
//jobs[consumeMd.OneCirclesSignInGreenEnergyFunName] = OneCirclesSignInGreenEnergyConsume | |||
//jobs[consumeMd.OneCirclesStartLevelDividendFunName] = OneCirclesStartLevelDividendConsume | |||
//jobs[consumeMd.OneCirclesActivityCoinAutoExchangeGreenEnergyFunName] = OneCirclesActivityCoinAutoExchangeGreenEnergyConsume | |||
//jobs[consumeMd.OneCirclesActivityCoinAutoExchangeGreenEnergyForTeamFunName] = OneCirclesActivityCoinAutoExchangeGreenEnergyForTeamConsume | |||
//jobs[consumeMd.OneCirclesSettlementPublicGiveActivityCoinFunName] = OneCirclesSettlementPublicGiveActivityCoinConsume | |||
//jobs[consumeMd.OneCirclesSignInCopyGreenEnergyFunName] = OneCirclesSignInCopyGreenEnergyConsume | |||
//////////////////////////////////////// withdraw ///////////////////////////////////////////////////// | |||
//jobs[consumeMd.WithdrawConsumeFunName] = WithdrawConsume | |||
//jobs[consumeMd.FlexibleEmploymentWithdrawForGongMaoConsumeFunName] = FlexibleEmploymentWithdrawForGongMaoConsume | |||
//jobs[consumeMd.FlexibleEmploymentWithdrawForPupiaoConsumeFunName] = FlexibleEmploymentWithdrawForPupiaoConsume | |||
//jobs[consumeMd.ZhiosMallGreenCoinConsumeFunName] = ZhiosMallGreenCoinConsume //绿色双链积分 | |||
//jobs[consumeMd.ZhiosOneCirclesCoinConsumeFunName] = ZhiosOneCirclesCoinConsume //一个圈圈虚拟币变化 | |||
//////////////////////////////////////// autoRepaid ///////////////////////////////////////////////////// | |||
jobs[consumeMd.InstallmentPaymentAutoRepaidConsumeFunName] = InstallmentPaymentAutoRepaidConsume //分期付 - 自动扣款 | |||
////////////////////////////////////// SuperCloudIssuance ///////////////////////////////////////////////////// | |||
//jobs[consumeMd.SuperCloudIssuanceMsgCallBackFunName] = SuperCloudIssuanceMsgCallBackConsume | |||
//jobs[consumeMd.SuperCloudIssuanceAsyncMLoginFunName] = SuperCloudIssuanceAsyncMLoginConsume | |||
////////////////////////////////////// order_statistics ///////////////////////////////////////////////////// | |||
jobs[consumeMd.CanalGuideOrderForStatistics] = CanalGuideOrderForStatistics | |||
jobs[consumeMd.CanalFinWithdrawApplyForStatistics] = CanalFinWithdrawApplyForStatistics | |||
} | |||
func Run() { | |||
@@ -1,91 +0,0 @@ | |||
package consume | |||
import ( | |||
svc2 "applet/app/svc" | |||
"applet/app/utils/logx" | |||
"applet/consume/md" | |||
md3 "applet/mall/md" | |||
"applet/mall/svc" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git/rabbit" | |||
"encoding/json" | |||
"errors" | |||
"fmt" | |||
"github.com/gin-gonic/gin" | |||
"github.com/jinzhu/copier" | |||
"github.com/streadway/amqp" | |||
"strings" | |||
) | |||
func MallAddSupplyGoodsConsume(queue md.MqQueue) { | |||
fmt.Println(">>>>>>>>>>>>>>>>>>>>>>>>") | |||
ch, err := rabbit.Cfg.Pool.GetChannel() | |||
if err != nil { | |||
logx.Error(err) | |||
return | |||
} | |||
defer ch.Release() | |||
//2、取出数据进行消费 | |||
ch.Qos(1) | |||
delivery := ch.Consume(queue.Name, false) | |||
var res amqp.Delivery | |||
var ok bool | |||
for { | |||
res, ok = <-delivery | |||
if ok == true { | |||
fmt.Println(">>>>>>>>>>>>>>>>MallAddSupplyGoodsConsume<<<<<<<<<<<<<<<<<<<<<<<<<") | |||
err = handleMallAddSupplyGoodsConsume(res.Body) | |||
if err != nil { | |||
fmt.Println("*****************err*************************", err) | |||
} | |||
_ = res.Ack(true) | |||
} else { | |||
panic(errors.New("error getting message")) | |||
} | |||
} | |||
fmt.Println("get msg done") | |||
} | |||
func handleMallAddSupplyGoodsConsume(msgData []byte) error { | |||
//解析mq中queue的数据结构体 | |||
var pushStuct struct { | |||
Args struct { | |||
GoodsInfo []*md3.OfficialGoods `json:"goods_info"` | |||
md3.OfficialGoodsConditions | |||
} `json:"args"` | |||
Mid string `json:"mid"` | |||
} | |||
err := json.Unmarshal(msgData, &pushStuct) | |||
if err != nil { | |||
panic(err) | |||
} | |||
//设置masterId | |||
var c = &gin.Context{} | |||
if pushStuct.Mid == "123456" { | |||
return nil | |||
} | |||
c.Set("mid", pushStuct.Mid) | |||
var t struct { | |||
GoodsInfo []*md3.OfficialGoods `json:"goods_info"` | |||
md3.OfficialGoodsConditions | |||
} | |||
t = pushStuct.Args | |||
var conditions md3.OfficialGoodsConditions | |||
conditions.CategoryId = t.CategoryId | |||
conditions.AddPriceBase = t.AddPriceBase | |||
conditions.AddPriceNum = t.AddPriceNum | |||
conditions.AddPriceType = t.AddPriceType | |||
conditions.NumType = t.NumType | |||
engine := svc2.MasterDb(c) | |||
for _, goods := range t.GoodsInfo { | |||
var b2cGoods md3.OfficialGoods | |||
copier.Copy(&b2cGoods, goods) | |||
ex := strings.Split(b2cGoods.Price, "-") | |||
b2cGoods.Price = ex[0] | |||
err1 := svc.AddOfficialGoods(c, engine, &b2cGoods, &conditions) | |||
if err1 != nil { | |||
return err1 | |||
} | |||
} | |||
return nil | |||
} |
@@ -11,578 +11,27 @@ type MqQueue struct { | |||
} | |||
var RabbitMqQueueKeyList = []*MqQueue{ | |||
{ | |||
ExchangeName: "", | |||
Name: "cloud_issuance_async_mlogin", | |||
Type: SimpleQueueType, | |||
IsPersistent: false, | |||
RoutKey: "", | |||
BindKey: "", | |||
ConsumeFunName: "CloudIssuanceAsyncMLoginConsume", | |||
}, | |||
{ | |||
ExchangeName: "", | |||
Name: "super_cloud_issuance_async_mlogin", | |||
Type: SimpleQueueType, | |||
IsPersistent: false, | |||
RoutKey: "", | |||
BindKey: "", | |||
ConsumeFunName: "SuperCloudIssuanceAsyncMLoginConsume", | |||
}, | |||
{ | |||
ExchangeName: "zhios.cloud.issuance.msg.callback.exchange", | |||
Name: "cloud_issuance_msg_call_back", | |||
Type: DirectQueueType, | |||
IsPersistent: false, | |||
RoutKey: "", | |||
BindKey: "", | |||
ConsumeFunName: "CloudIssuanceMsgCallBackConsume", | |||
}, | |||
{ | |||
ExchangeName: "zhios.super.cloud.issuance.msg.callback.exchange", | |||
Name: "super_cloud_issuance_msg_call_back", | |||
Type: DirectQueueType, | |||
IsPersistent: false, | |||
RoutKey: "", | |||
BindKey: "", | |||
ConsumeFunName: "SuperCloudIssuanceMsgCallBackConsume", | |||
}, | |||
{ | |||
ExchangeName: "zhios.cloud_chain.fenxiao.newChange.exchange", | |||
Name: "cloud_chain_fenxiao_newChange", | |||
Type: FanOutQueueType, | |||
IsPersistent: false, | |||
RoutKey: "", | |||
BindKey: "", | |||
ConsumeFunName: "SupplyCloudChainFenxiaoNewChangeConsume", | |||
}, | |||
{ | |||
ExchangeName: "zhios.addSupplyGoods.exchange", | |||
Name: "mall_add_supply_goods", | |||
Type: FanOutQueueType, | |||
IsPersistent: false, | |||
RoutKey: "", | |||
BindKey: "", | |||
ConsumeFunName: "MallAddSupplyGoodsConsume", | |||
}, | |||
{ | |||
ExchangeName: "canal.topic", | |||
Name: "canal_order", | |||
Type: TopicQueueType, | |||
IsPersistent: false, | |||
RoutKey: "canal_mall_order", | |||
BindKey: "", | |||
ConsumeFunName: "CanalOrderConsume", | |||
}, | |||
{ | |||
ExchangeName: "canal.topic", | |||
Name: "canal_guide_order", | |||
Type: TopicQueueType, | |||
IsPersistent: false, | |||
RoutKey: "canal_order_list", | |||
BindKey: "", | |||
ConsumeFunName: "CanalGuideOrderConsume", | |||
}, | |||
{ | |||
ExchangeName: "canal.topic", | |||
Name: "canal_guide_order_by_user_up_lv", | |||
Name: "canal_guide_order_for_statistics", | |||
Type: TopicQueueType, | |||
IsPersistent: false, | |||
RoutKey: "canal_order_list", | |||
BindKey: "", | |||
ConsumeFunName: "CanalGuideOrderByUserUpLvConsume", | |||
}, | |||
{ | |||
ExchangeName: "zhios.app.user.visit.ip.address.exchange", | |||
Name: "zhios_user_visit_ip_address_queue", | |||
Type: FanOutQueueType, | |||
IsPersistent: false, | |||
RoutKey: "queue_one", | |||
BindKey: "", | |||
ConsumeFunName: "ZhiOsUserVisitIpAddressConsume", | |||
}, | |||
{ | |||
ExchangeName: "zhios.order.fast.return.exchange", | |||
Name: "zhios_fast_return_order_pay", | |||
Type: DirectQueueType, | |||
IsPersistent: false, | |||
RoutKey: "order_pay", | |||
BindKey: "", | |||
ConsumeFunName: "ZhiosFastReturnOrderPay", | |||
}, | |||
{ | |||
ExchangeName: "zhios.order.fast.return.exchange", | |||
Name: "zhios_fast_return_order_success", | |||
Type: DirectQueueType, | |||
IsPersistent: false, | |||
RoutKey: "order_success", | |||
BindKey: "", | |||
ConsumeFunName: "ZhiosFastReturnOrderSuccess", | |||
}, | |||
{ | |||
ExchangeName: "zhios.order.fast.return.exchange", | |||
Name: "zhios_fast_return_order_refund", | |||
Type: DirectQueueType, | |||
IsPersistent: false, | |||
RoutKey: "order_refund", | |||
BindKey: "", | |||
ConsumeFunName: "ZhiosFastReturnOrderRefund", | |||
}, | |||
{ | |||
ExchangeName: "zhios.order.fast.return.exchange", | |||
Name: "zhios_fast_return_order_refund_second", | |||
Type: DirectQueueType, | |||
IsPersistent: false, | |||
RoutKey: "order_refund_second", | |||
BindKey: "", | |||
ConsumeFunName: "ZhiosFastReturnOrderRefundSecond", | |||
}, | |||
{ | |||
ExchangeName: "zhios.doushen.user.register.exchange", | |||
Name: "zhios_doushen_user_register_my_fans", | |||
Type: DirectQueueType, | |||
IsPersistent: false, | |||
RoutKey: "my_fans", | |||
BindKey: "my_fans", | |||
ConsumeFunName: "DouShenUserRegisterConsumeForMyFans", | |||
}, | |||
{ | |||
ExchangeName: "zhios.doushen.user.register.exchange", | |||
Name: "zhios_doushen_user_register_operation_center", | |||
Type: DirectQueueType, | |||
IsPersistent: false, | |||
RoutKey: "operation_center", | |||
BindKey: "operation_center", | |||
ConsumeFunName: "DouShenUserRegisterConsumeForOperationCenter", | |||
}, | |||
{ | |||
ExchangeName: "zhios.doushen.user.register.exchange", | |||
Name: "zhios_doushen_user_register_my_recommender", | |||
Type: DirectQueueType, | |||
IsPersistent: false, | |||
RoutKey: "my_recommender", | |||
BindKey: "my_recommender", | |||
ConsumeFunName: "DouShenUserRegisterConsumeForMyRecommender", | |||
}, | |||
{ | |||
ExchangeName: "zhios.doushen.user.register.exchange", | |||
Name: "zhios_doushen_user_register_official", | |||
Type: DirectQueueType, | |||
IsPersistent: false, | |||
RoutKey: "official", | |||
BindKey: "official", | |||
ConsumeFunName: "DouShenUserRegisterConsumeForOfficial", | |||
}, | |||
{ | |||
ExchangeName: "zhios.doushen.user.register.exchange", | |||
Name: "zhios_doushen_user_register_user_comm_up_lv", | |||
Type: DirectQueueType, | |||
IsPersistent: false, | |||
RoutKey: "user_register_comm_up_lv", | |||
BindKey: "user_register_comm_up_lv", | |||
ConsumeFunName: "DouShenUserRegisterConsumeForUserRegisterUpLv", | |||
}, | |||
{ | |||
ExchangeName: "canal.topic", | |||
Name: "canal_mall_ord_for_you_mi_shang", | |||
Type: DirectQueueType, | |||
IsPersistent: false, | |||
RoutKey: "canal_mall_order", | |||
BindKey: "", | |||
ConsumeFunName: "CanalMallOrdForYouMiShang", | |||
}, | |||
{ | |||
ExchangeName: "zhios.youmishang.exchange", | |||
Name: "zhios_youmishang_exchange_store", | |||
Type: DirectQueueType, | |||
IsPersistent: false, | |||
RoutKey: "store", | |||
BindKey: "store", | |||
ConsumeFunName: "YoumishangExchangeStore", | |||
}, | |||
{ | |||
ExchangeName: "zhios.recharge.order.exchange", | |||
Name: "zhios_recharge_order_fail", | |||
Type: DirectQueueType, | |||
IsPersistent: false, | |||
RoutKey: "order_fail", | |||
BindKey: "", | |||
ConsumeFunName: "ZhiosRechargeOrderFail", | |||
}, | |||
{ | |||
ExchangeName: "zhios.tikTok.exchange", | |||
Name: "zhios_tikTok_update", | |||
Type: DirectQueueType, | |||
IsPersistent: false, | |||
RoutKey: "update", | |||
BindKey: "", | |||
ConsumeFunName: "ZhiosTikTokUpdate", | |||
}, | |||
{ | |||
ExchangeName: "zhios.tikTok.exchange", | |||
Name: "zhios_tikTok_all_update", | |||
Type: DirectQueueType, | |||
IsPersistent: false, | |||
RoutKey: "all_update", | |||
BindKey: "", | |||
ConsumeFunName: "ZhiosTikTokAllUpdate", | |||
}, | |||
{ | |||
ExchangeName: "zhios.capital_pool.order_total.exchange", | |||
Name: "zhios_capital_pool_order_total", | |||
Type: DirectQueueType, | |||
IsPersistent: false, | |||
RoutKey: "order_total", | |||
BindKey: "", | |||
ConsumeFunName: "ZhiosCapitalPoolOrderTotal", | |||
}, | |||
{ | |||
ExchangeName: "zhios.acquisition.exchange", | |||
Name: "zhios_acquisition_condition", | |||
Type: DirectQueueType, | |||
IsPersistent: false, | |||
RoutKey: "condition", | |||
BindKey: "", | |||
ConsumeFunName: "ZhiosAcquisitionCondition", | |||
}, | |||
{ | |||
ExchangeName: "zhios.acquisition.exchange", | |||
Name: "zhios_acquisition_condition_dev", | |||
Type: DirectQueueType, | |||
IsPersistent: false, | |||
RoutKey: "acq_dev", | |||
BindKey: "", | |||
ConsumeFunName: "ZhiosAcquisitionConditionDev", | |||
}, | |||
{ | |||
ExchangeName: "zhios.recharge.order.exchange", | |||
Name: "zhios_recharge_order_fail_dev", | |||
Type: DirectQueueType, | |||
IsPersistent: false, | |||
RoutKey: "order_fail_dev", | |||
BindKey: "", | |||
ConsumeFunName: "ZhiosRechargeOrderFailDev", | |||
}, | |||
{ | |||
ExchangeName: "zhios.express.order.exchange", | |||
Name: "zhios_express_order_fail", | |||
Type: DirectQueueType, | |||
IsPersistent: false, | |||
RoutKey: "order_fail", | |||
BindKey: "", | |||
ConsumeFunName: "zhiosExpressOrderFail", | |||
}, | |||
{ | |||
ExchangeName: "zhios.withdraw.reward.exchange", | |||
Name: "zhios_withdraw_reward", | |||
Type: DirectQueueType, | |||
IsPersistent: false, | |||
RoutKey: "withdraw_reward", | |||
BindKey: "", | |||
ConsumeFunName: "zhiosWithdrawReward", | |||
}, | |||
{ | |||
ExchangeName: "zhios.task.exchange", | |||
Name: "zhios_task_total", | |||
Type: DirectQueueType, | |||
IsPersistent: false, | |||
RoutKey: "task_total", | |||
BindKey: "", | |||
ConsumeFunName: "zhiosTaskTotal", | |||
}, | |||
{ | |||
ExchangeName: "zhios.user_valid.exchange", | |||
Name: "zhios_user_valid", | |||
Type: DirectQueueType, | |||
IsPersistent: false, | |||
RoutKey: "user_valid", | |||
BindKey: "", | |||
ConsumeFunName: "ZhiosValidUser", | |||
}, | |||
{ | |||
ExchangeName: "zhios.appreciation.exchange", | |||
Name: "zhios_appreciation", | |||
Type: DirectQueueType, | |||
IsPersistent: false, | |||
RoutKey: "appreciation", | |||
BindKey: "", | |||
ConsumeFunName: "ZhiosAppreciation", | |||
}, | |||
{ | |||
ExchangeName: "zhios.appreciation.exchange", | |||
Name: "zhios_appreciation_dev", | |||
Type: DirectQueueType, | |||
IsPersistent: false, | |||
RoutKey: "appreciation_dev", | |||
BindKey: "", | |||
ConsumeFunName: "ZhiosAppreciationDev", | |||
}, | |||
{ | |||
ExchangeName: "zhios.guide_store.exchange", | |||
Name: "zhios_guide_store_order", | |||
Type: DirectQueueType, | |||
IsPersistent: false, | |||
RoutKey: "guide_store_order", | |||
BindKey: "", | |||
ConsumeFunName: "ZhiosGuideStoreOrder", | |||
}, | |||
{ | |||
ExchangeName: "zhios.supplier_after_order.exchange", | |||
Name: "zhios_supplier_after_order", | |||
Type: DirectQueueType, | |||
IsPersistent: false, | |||
RoutKey: "refund", | |||
BindKey: "", | |||
ConsumeFunName: "ZhiosSupplierAfterOrder", | |||
}, | |||
{ | |||
ExchangeName: "zhios.order_buckle.exchange", | |||
Name: "zhios_order_buckle", | |||
Type: DirectQueueType, | |||
IsPersistent: false, | |||
RoutKey: "order_buckle", | |||
BindKey: "", | |||
ConsumeFunName: "ZhiosOrderBuckle", | |||
}, | |||
{ | |||
ExchangeName: "zhios.order_hjy.exchange", | |||
Name: "zhios_order_hjy", | |||
Type: DirectQueueType, | |||
IsPersistent: false, | |||
RoutKey: "order_hjy", | |||
BindKey: "", | |||
ConsumeFunName: "ZhiosOrderHjy", | |||
}, | |||
{ | |||
ExchangeName: "zhios.order_settle_total.exchange", | |||
Name: "zhios_order_settle_total", | |||
Type: DirectQueueType, | |||
IsPersistent: false, | |||
RoutKey: "order_settle_total", | |||
BindKey: "", | |||
ConsumeFunName: "ZhiosOrderSettleTotal", | |||
}, | |||
{ | |||
ExchangeName: "zhios.order_total.exchange", | |||
Name: "zhios_order_total", | |||
Type: DirectQueueType, | |||
IsPersistent: false, | |||
RoutKey: "order_total", | |||
BindKey: "", | |||
ConsumeFunName: "ZhiosOrderTotal", | |||
}, | |||
{ | |||
ExchangeName: "zhios.order_total.exchange", | |||
Name: "zhios_order_total_second", | |||
Type: DirectQueueType, | |||
IsPersistent: false, | |||
RoutKey: "order_total_second", | |||
BindKey: "", | |||
ConsumeFunName: "ZhiosOrderTotalSecond", | |||
}, | |||
{ | |||
ExchangeName: "zhios.order_free.exchange", | |||
Name: "zhios_order_free", | |||
Type: DirectQueueType, | |||
IsPersistent: false, | |||
RoutKey: "order_free", | |||
BindKey: "", | |||
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.integral_proxy_recharge.exchange", | |||
Name: "zhios_integral_proxy_recharge", | |||
Type: DirectQueueType, | |||
IsPersistent: false, | |||
RoutKey: "integral_proxy_recharge", | |||
BindKey: "", | |||
ConsumeFunName: "ZhiosIntegralProxyRecharge", | |||
}, | |||
{ | |||
ExchangeName: "zhios.mall_green_coin_consume.exchange", | |||
Name: "zhios_mall_green_coin_consume", | |||
Type: DirectQueueType, | |||
IsPersistent: false, | |||
RoutKey: "mall_green_coin_consume", | |||
BindKey: "", | |||
ConsumeFunName: "ZhiosMallGreenCoinConsume", | |||
ConsumeFunName: "CanalGuideOrderForStatistics", | |||
}, | |||
{ | |||
ExchangeName: "canal.topic", | |||
Name: "user_virtual_coin_flow_aggregation", | |||
Name: "canal_fin_withdraw_apply_for_statistics", | |||
Type: TopicQueueType, | |||
IsPersistent: false, | |||
RoutKey: "canal_user_virtual_coin_flow_aggregation", | |||
BindKey: "", | |||
ConsumeFunName: "ZhiosOneCirclesCoinConsume", | |||
}, | |||
{ | |||
ExchangeName: "canal.topic", | |||
Name: "canal_user_virtual_coin_flow", | |||
Type: TopicQueueType, | |||
IsPersistent: false, | |||
RoutKey: "canal_user_virtual_coin_flow", | |||
BindKey: "", | |||
ConsumeFunName: "CanalUserVirtualCoinFlowConsume", | |||
}, | |||
{ | |||
ExchangeName: "one.circles", | |||
Name: "one_circles_sign_in_green_energy", | |||
Type: TopicQueueType, | |||
IsPersistent: false, | |||
RoutKey: "sign_in", | |||
BindKey: "", | |||
ConsumeFunName: "OneCirclesSignInGreenEnergyConsume", | |||
}, | |||
{ | |||
ExchangeName: "one.circles", | |||
Name: "one_circles_start_level_dividend", | |||
Type: TopicQueueType, | |||
IsPersistent: false, | |||
RoutKey: "star_level_dividend", | |||
BindKey: "", | |||
ConsumeFunName: "OneCirclesStartLevelDividendConsume", | |||
}, | |||
{ | |||
ExchangeName: "one.circles", | |||
Name: "one_circles_auto_exchange_green_energy_to_person_1", | |||
Type: TopicQueueType, | |||
IsPersistent: false, | |||
RoutKey: "auto_exchange_green_energy_to_person_1", | |||
BindKey: "", | |||
ConsumeFunName: "OneCirclesActivityCoinAutoExchangeGreenEnergyConsume", | |||
}, | |||
{ | |||
ExchangeName: "one.circles", | |||
Name: "one_circles_auto_exchange_green_energy_to_team", | |||
Type: TopicQueueType, | |||
IsPersistent: false, | |||
RoutKey: "auto_exchange_green_energy_to_team", | |||
BindKey: "", | |||
ConsumeFunName: "OneCirclesActivityCoinAutoExchangeGreenEnergyForTeamConsume", | |||
}, | |||
{ | |||
ExchangeName: "one.circles", | |||
Name: "one_circles_settlement_public_give_activity_coin", | |||
Type: TopicQueueType, | |||
IsPersistent: false, | |||
RoutKey: "settlement_public_give_activity_coin", | |||
BindKey: "", | |||
ConsumeFunName: "OneCirclesSettlementPublicGiveActivityCoinConsume", | |||
}, | |||
{ | |||
ExchangeName: "one.circles", | |||
Name: "one_circles_sign_in_green_energy_copy", | |||
Type: TopicQueueType, | |||
IsPersistent: false, | |||
RoutKey: "sign_in_copy", | |||
BindKey: "", | |||
ConsumeFunName: "OneCirclesSignInCopyGreenEnergyConsume", | |||
}, | |||
{ | |||
ExchangeName: "zhios.app.user.withdraw.apply.exchange", | |||
Name: "zhios_app_user_withdraw_apply_queue", | |||
Type: FanOutQueueType, | |||
IsPersistent: false, | |||
RoutKey: "queues_one", | |||
BindKey: "", | |||
ConsumeFunName: "WithdrawConsume", | |||
}, | |||
{ | |||
ExchangeName: "zhios.app.user.withdraw.apply.flexible.employment.exchange", | |||
Name: "zhios_app_user_withdraw_apply_gongmao_queue", | |||
Type: DirectQueueType, | |||
IsPersistent: false, | |||
RoutKey: "gongmao", | |||
BindKey: "", | |||
ConsumeFunName: "FlexibleEmploymentWithdrawForGongMaoConsume", | |||
}, | |||
{ | |||
ExchangeName: "zhios.app.user.withdraw.apply.flexible.employment.exchange", | |||
Name: "zhios_app_user_withdraw_apply_pupiao_queue", | |||
Type: DirectQueueType, | |||
IsPersistent: false, | |||
RoutKey: "pupiao", | |||
BindKey: "", | |||
ConsumeFunName: "FlexibleEmploymentWithdrawForPupiaoConsume", | |||
}, | |||
{ | |||
ExchangeName: "installment.payment", | |||
Name: "zhios_installment_payment_auto_repaid", | |||
Type: DirectQueueType, | |||
IsPersistent: false, | |||
RoutKey: "auto_repaid", | |||
RoutKey: "canal_fin_withdraw_apply", | |||
BindKey: "", | |||
ConsumeFunName: "InstallmentPaymentAutoRepaidConsume", | |||
ConsumeFunName: "CanalFinWithdrawApplyForStatistics", | |||
}, | |||
} | |||
const ( | |||
ZhiosUserRelateFunName = "ZhiosUserRelate" | |||
ZhiosIntegralProxyRechargeFunName = "ZhiosIntegralProxyRecharge" | |||
ZhiosMallGreenCoinConsumeFunName = "ZhiosMallGreenCoinConsume" | |||
ZhiosOneCirclesCoinConsumeFunName = "ZhiosOneCirclesCoinConsume" | |||
ZhiosUserUpLvFunName = "ZhiosUserUpLv" | |||
CanalGuideOrderByUserUpLvConsume = "CanalGuideOrderByUserUpLvConsume" | |||
ZhiosOrderFreeFunName = "ZhiosOrderFree" | |||
ZhiosOrderSettleTotalFunName = "ZhiosOrderSettleTotal" | |||
ZhiosOrderTotalFunName = "ZhiosOrderTotal" | |||
ZhiosOrderTotalSecondFunName = "ZhiosOrderTotalSecond" | |||
ZhiosOrderHjyFunName = "ZhiosOrderHjy" | |||
ZhiosOrderBuckleFunName = "ZhiosOrderBuckle" | |||
ZhiosSupplierAfterOrderFunName = "ZhiosSupplierAfterOrder" | |||
CanalOrderConsumeFunName = "CanalOrderConsume" | |||
CanalGuideOrderConsumeFunName = "CanalGuideOrderConsume" | |||
ZhiOsUserVisitIpAddressConsumeFunName = "ZhiOsUserVisitIpAddressConsume" | |||
DouShenUserRegisterConsumeForOfficialFunName = "DouShenUserRegisterConsumeForOfficial" | |||
DouShenUserRegisterConsumeForOperationCenterFunName = "DouShenUserRegisterConsumeForOperationCenter" | |||
DouShenUserRegisterConsumeForMyRecommenderFunName = "DouShenUserRegisterConsumeForMyRecommender" | |||
DouShenUserRegisterConsumeForMyFansFunName = "DouShenUserRegisterConsumeForMyFans" | |||
DouShenUserRegisterConsumeForUserRegisterUpLvFunName = "DouShenUserRegisterConsumeForUserRegisterUpLv" | |||
ZhiosFastReturnOrderPayFunName = "ZhiosFastReturnOrderPay" | |||
ZhiosFastReturnOrderSuccessFunName = "ZhiosFastReturnOrderSuccess" | |||
ZhiosFastReturnOrderRefundFunName = "ZhiosFastReturnOrderRefund" | |||
ZhiosFastReturnOrderRefundSecondFunName = "ZhiosFastReturnOrderRefundSecond" | |||
CanalMallOrdForYouMiShangFunName = "CanalMallOrdForYouMiShang" | |||
YoumishangExchangeStoreFunName = "YoumishangExchangeStore" | |||
ZhiosRechargeOrderFailFunName = "ZhiosRechargeOrderFail" | |||
ZhiosRechargeOrderFailDevFunName = "ZhiosRechargeOrderFailDev" | |||
ZhiosCapitalPoolOrderTotalFunName = "ZhiosCapitalPoolOrderTotal" | |||
ZhiosExpressOrderFail = "zhiosExpressOrderFail" | |||
ZhiosWithdrawReward = "zhiosWithdrawReward" | |||
ZhiosTikTokUpdateFunName = "ZhiosTikTokUpdate" | |||
ZhiosTikTokAllUpdateFunName = "ZhiosTikTokAllUpdate" | |||
CloudIssuanceAsyncMLoginFunName = "CloudIssuanceAsyncMLoginConsume" | |||
CloudIssuanceMsgCallBackFunName = "CloudIssuanceMsgCallBackConsume" | |||
SuperCloudIssuanceAsyncMLoginFunName = "SuperCloudIssuanceAsyncMLoginConsume" | |||
SuperCloudIssuanceMsgCallBackFunName = "SuperCloudIssuanceMsgCallBackConsume" | |||
ZhiosAcquisitionConditionFunName = "ZhiosAcquisitionCondition" | |||
ZhiosValidUserFunName = "ZhiosValidUser" | |||
ZhiosAppreciationFunName = "ZhiosAppreciation" | |||
ZhiosAppreciationDevFunName = "ZhiosAppreciationDev" | |||
ZhiosGuideStoreOrderFunName = "ZhiosGuideStoreOrder" | |||
ZhiosAcquisitionConditionDevFunName = "ZhiosAcquisitionConditionDev" | |||
SupplyCloudChainFenxiaoNewChangeFunName = "SupplyCloudChainFenxiaoNewChangeConsume" | |||
MallAddSupplyGoodsFunName = "MallAddSupplyGoodsConsume" | |||
CanalUserVirtualCcoinFlowFunName = "CanalUserVirtualCoinFlowConsume" | |||
OneCirclesSignInGreenEnergyFunName = "OneCirclesSignInGreenEnergyConsume" | |||
OneCirclesStartLevelDividendFunName = "OneCirclesStartLevelDividendConsume" | |||
OneCirclesSignInCopyGreenEnergyFunName = "OneCirclesSignInCopyGreenEnergyConsume" | |||
OneCirclesActivityCoinAutoExchangeGreenEnergyFunName = "OneCirclesActivityCoinAutoExchangeGreenEnergyConsume" | |||
OneCirclesActivityCoinAutoExchangeGreenEnergyForTeamFunName = "OneCirclesActivityCoinAutoExchangeGreenEnergyForTeamConsume" | |||
OneCirclesSettlementPublicGiveActivityCoinFunName = "OneCirclesSettlementPublicGiveActivityCoinConsume" | |||
WithdrawConsumeFunName = "WithdrawConsume" | |||
FlexibleEmploymentWithdrawForGongMaoConsumeFunName = "FlexibleEmploymentWithdrawForGongMaoConsume" | |||
FlexibleEmploymentWithdrawForPupiaoConsumeFunName = "FlexibleEmploymentWithdrawForPupiaoConsume" | |||
ZhiosTaskTotal = "zhiosTaskTotal" | |||
InstallmentPaymentAutoRepaidConsumeFunName = "InstallmentPaymentAutoRepaidConsume" | |||
CanalFinWithdrawApplyForStatistics = "CanalFinWithdrawApplyForStatistics" | |||
CanalGuideOrderForStatistics = "CanalGuideOrderForStatistics" | |||
) |
@@ -0,0 +1,22 @@ | |||
package md | |||
type CanalFinWithdrawApply struct { | |||
Id string `json:"id"` | |||
Amount string `json:"amount"` | |||
State string `json:"state"` | |||
CreateAt string `json:"create_at"` | |||
FeeType string `json:"fee_type"` | |||
} | |||
type CanalFinWithdrawApplyMessage[T any] struct { | |||
Data []T `json:"data"` | |||
Database string `json:"database"` | |||
ES int64 `json:"es"` | |||
ID int64 `json:"id"` | |||
IsDdl bool `json:"isDdl"` | |||
Old []T `json:"old"` | |||
PkNames []string `json:"pkNames"` | |||
Table string `json:"table"` | |||
TS int64 `json:"ts"` | |||
Type string `json:"type"` | |||
} |
@@ -16,6 +16,11 @@ type CanalGuideOrder struct { | |||
ItemNum string `json:"item_num"` | |||
SysCommission string `json:"sys_commission"` | |||
CreateAt string `json:"create_at"` | |||
PvdSettleAt string `json:"pvd_settle_at"` | |||
SettleAt string `json:"settle_at"` | |||
Pvd string `json:"pvd"` | |||
Ext string `json:"ext"` | |||
BenefitAll string `json:"benefit_all"` | |||
} | |||
type CanalGuideOrderMessage[T any] struct { | |||
@@ -1,159 +0,0 @@ | |||
package consume | |||
import ( | |||
"applet/app/cfg" | |||
"applet/app/db" | |||
utils2 "applet/app/utils" | |||
"applet/app/utils/logx" | |||
"applet/consume/md" | |||
"applet/mall/utils" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git/rabbit" | |||
db2 "code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/db" | |||
md2 "code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/md" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/rule" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/rule/one_circles" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/rule/one_circles/enum" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/rule/one_circles/svc" | |||
"encoding/json" | |||
"errors" | |||
"fmt" | |||
"github.com/streadway/amqp" | |||
"time" | |||
) | |||
func OneCirclesActivityCoinAutoExchangeGreenEnergyConsume(queue md.MqQueue) { | |||
fmt.Println(">>>>>>>>>>>>OneCirclesActivityCoinAutoExchangeGreenEnergyConsume>>>>>>>>>>>>") | |||
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(40) | |||
delivery := ch.Consume(queue.Name, false) | |||
one_circles.Init(cfg.RedisAddr) | |||
var res amqp.Delivery | |||
var ok bool | |||
for { | |||
res, ok = <-delivery | |||
if ok == true { | |||
err = handleOneCirclesActivityCoinAutoExchangeGreenEnergyConsume(res.Body) | |||
if err != nil { | |||
fmt.Println("OneCirclesActivityCoinAutoExchangeGreenEnergyConsume_ERR:::::", err.Error()) | |||
utils2.FilePutContents("OneCirclesActivityCoinAutoExchangeGreenEnergyConsume_ERR", utils2.SerializeStr(map[string]interface{}{ | |||
"body": res.Body, | |||
"err": err.Error(), | |||
})) | |||
} | |||
//_ = res.Reject(false) | |||
err = res.Ack(true) | |||
fmt.Println("err ::: ", err) | |||
} else { | |||
panic(errors.New("error getting message")) | |||
} | |||
} | |||
fmt.Println("get msg done") | |||
} | |||
func handleOneCirclesActivityCoinAutoExchangeGreenEnergyConsume(msgData []byte) error { | |||
time.Sleep(time.Duration(100) * time.Microsecond) //休眠0.1毫秒 | |||
//1、解析mq中queue的数据结构体 | |||
var msg *md2.OneCirclesStructForAutoExchangeGreenEnergy | |||
err := json.Unmarshal(msgData, &msg) | |||
if err != nil { | |||
return err | |||
} | |||
engine := db.DBs[msg.MasterId] | |||
//2、查找 `one_circles_green_energy_basic_setting` 基础设置 | |||
oneCirclesGreenEnergyBasicSetting, cb, err := svc.GetPrice(engine, msg.MasterId) | |||
if err != nil { | |||
return err | |||
} | |||
if cb != nil { | |||
defer cb() // 释放锁 | |||
} | |||
//oneCirclesGreenEnergyBasicSetting, err := db2.OneCirclesGreenEnergyBasicSettingGetOneByParams(engine, map[string]interface{}{ | |||
// "key": "is_open", | |||
// "value": 1, | |||
//}) | |||
//if err != nil { | |||
// return err | |||
//} | |||
//if oneCirclesGreenEnergyBasicSetting == nil { | |||
// return nil | |||
//} | |||
session := engine.NewSession() | |||
defer func() { | |||
session.Close() | |||
if err := recover(); err != nil { | |||
_ = logx.Error(err) | |||
} | |||
}() | |||
session.Begin() | |||
//3.1计算涨价公式 | |||
err1, values, _, afterPriceValue := one_circles.NewCalcPriceIncreaseFormula(msg.AutoExchangeNumsAmount, oneCirclesGreenEnergyBasicSetting) | |||
if err1 != nil { | |||
_ = session.Rollback() | |||
return err1 | |||
} | |||
//3.2给相应的用户加上个人的绿色积分(可用数量) | |||
err = rule.DealUserCoin(session, md2.DealUserCoinReq{ | |||
Kind: "add", | |||
Mid: msg.MasterId, | |||
Title: md2.OneCirclesPersonalActiveCoinExchangeGreenEnergy, | |||
TransferType: md2.OneCirclesPersonalActiveCoinExchangeGreenEnergyForUserVirtualCoinFlow, | |||
OrdId: "", | |||
CoinId: oneCirclesGreenEnergyBasicSetting.PersonGreenEnergyCoinId, | |||
Uid: msg.Uid, | |||
Amount: utils.StrToFloat64(values), | |||
}) | |||
if err != nil { | |||
_ = session.Rollback() | |||
fmt.Println("err:::::33333", err.Error()) | |||
return err | |||
} | |||
//4.1给相应的用户减去个人活跃积分 | |||
err = rule.DealUserCoin(session, md2.DealUserCoinReq{ | |||
Kind: "sub", | |||
Mid: msg.MasterId, | |||
Title: md2.OneCirclesPersonalActiveCoinExchangeToBeGreenEnergy, | |||
TransferType: md2.OneCirclesPersonalActiveCoinExchangeToBeGreenEnergyForUserVirtualCoinFlow, | |||
OrdId: "", | |||
CoinId: msg.CoinId, | |||
Uid: msg.Uid, | |||
Amount: utils.StrToFloat64(msg.Amount), | |||
}) | |||
if err != nil { | |||
_ = session.Rollback() | |||
fmt.Println("err:::::33333", err.Error()) | |||
return err | |||
} | |||
//4.2减少“原始数量”中的绿色能量 | |||
err = one_circles.DealAvailableGreenEnergyCoin(session, int(enum.PersonalActivePointRedemption), utils.StrToFloat64(values), utils.StrToFloat64(msg.AutoExchangeNumsAmount), enum.PersonalActivePointRedemption.String(), oneCirclesGreenEnergyBasicSetting, afterPriceValue) | |||
if err != nil { | |||
_ = session.Rollback() | |||
fmt.Println("err:::::44444", err.Error()) | |||
return err | |||
} | |||
//5、修改 one_circles_green_energy_basic_setting 的 now_price | |||
_, err = db2.OneCirclesGreenEnergyBasicSettingUpdate(session, oneCirclesGreenEnergyBasicSetting.Id, oneCirclesGreenEnergyBasicSetting) | |||
if err != nil { | |||
_ = session.Rollback() | |||
fmt.Println("err:::::77777", err.Error()) | |||
return err | |||
} | |||
err = session.Commit() | |||
if err != nil { | |||
_ = session.Rollback() | |||
return errors.New("事务提交失败") | |||
} | |||
return nil | |||
} |
@@ -1,160 +0,0 @@ | |||
package consume | |||
import ( | |||
"applet/app/cfg" | |||
"applet/app/db" | |||
utils2 "applet/app/utils" | |||
"applet/app/utils/logx" | |||
"applet/consume/md" | |||
"applet/mall/utils" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git/rabbit" | |||
db2 "code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/db" | |||
md2 "code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/md" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/rule" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/rule/one_circles" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/rule/one_circles/enum" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/rule/one_circles/svc" | |||
"encoding/json" | |||
"errors" | |||
"fmt" | |||
"github.com/streadway/amqp" | |||
"time" | |||
) | |||
func OneCirclesActivityCoinAutoExchangeGreenEnergyForTeamConsume(queue md.MqQueue) { | |||
fmt.Println(">>>>>>>>>>>>OneCirclesActivityCoinAutoExchangeGreenEnergyForTeamConsume>>>>>>>>>>>>") | |||
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(20) | |||
delivery := ch.Consume(queue.Name, false) | |||
one_circles.Init(cfg.RedisAddr) | |||
var res amqp.Delivery | |||
var ok bool | |||
for { | |||
res, ok = <-delivery | |||
if ok == true { | |||
err = handleOneCirclesActivityCoinAutoExchangeGreenEnergyForTeamConsume(res.Body) | |||
if err != nil { | |||
fmt.Println("OneCirclesActivityCoinAutoExchangeGreenEnergyForTeamConsume_ERR:::::", err.Error()) | |||
utils2.FilePutContents("OneCirclesActivityCoinAutoExchangeGreenEnergyForTeamConsume_ERR", utils2.SerializeStr(map[string]interface{}{ | |||
"body": res.Body, | |||
"err": err.Error(), | |||
})) | |||
} | |||
//_ = res.Reject(false) | |||
err = res.Ack(true) | |||
fmt.Println("err ::: ", err) | |||
} else { | |||
panic(errors.New("error getting message")) | |||
} | |||
} | |||
fmt.Println("get msg done") | |||
} | |||
func handleOneCirclesActivityCoinAutoExchangeGreenEnergyForTeamConsume(msgData []byte) error { | |||
time.Sleep(time.Duration(200) * time.Microsecond) //休眠0.2毫秒 | |||
//1、解析mq中queue的数据结构体 | |||
var msg *md2.OneCirclesStructForAutoExchangeGreenEnergy | |||
err := json.Unmarshal(msgData, &msg) | |||
if err != nil { | |||
return err | |||
} | |||
engine := db.DBs[msg.MasterId] | |||
//2、查找 `one_circles_green_energy_basic_setting` 基础设置 | |||
oneCirclesGreenEnergyBasicSetting, cb, err := svc.GetPrice(engine, msg.MasterId) | |||
if err != nil { | |||
return err | |||
} | |||
if cb != nil { | |||
defer cb() // 释放锁 | |||
} | |||
// | |||
//oneCirclesGreenEnergyBasicSetting, err := db2.OneCirclesGreenEnergyBasicSettingGetOneByParams(engine, map[string]interface{}{ | |||
// "key": "is_open", | |||
// "value": 1, | |||
//}) | |||
//if err != nil { | |||
// return err | |||
//} | |||
//if oneCirclesGreenEnergyBasicSetting == nil { | |||
// return nil | |||
//} | |||
session := engine.NewSession() | |||
defer func() { | |||
session.Close() | |||
if err := recover(); err != nil { | |||
_ = logx.Error(err) | |||
} | |||
}() | |||
session.Begin() | |||
//3.1计算涨价公式 | |||
err1, values, _, afterPriceValue := one_circles.NewCalcPriceIncreaseFormula(msg.AutoExchangeNumsAmount, oneCirclesGreenEnergyBasicSetting) | |||
if err1 != nil { | |||
_ = session.Rollback() | |||
return err1 | |||
} | |||
//3.2给相应的用户加上个人的绿色积分(结算数量) | |||
err = rule.DealUserCoin(session, md2.DealUserCoinReq{ | |||
Kind: "add", | |||
Mid: msg.MasterId, | |||
Title: md2.OneCirclesTeamActiveCoinExchangeGreenEnergy, | |||
TransferType: md2.OneCirclesTeamActiveCoinExchangeGreenEnergyForUserVirtualCoinFlow, | |||
OrdId: "", | |||
CoinId: oneCirclesGreenEnergyBasicSetting.TeamGreenEnergyCoinId, | |||
Uid: msg.Uid, | |||
Amount: utils.StrToFloat64(values), | |||
}) | |||
if err != nil { | |||
_ = session.Rollback() | |||
fmt.Println("err:::::33333", err.Error()) | |||
return err | |||
} | |||
//4.1给相应的用户减去团队活跃积分 | |||
err = rule.DealUserCoin(session, md2.DealUserCoinReq{ | |||
Kind: "sub", | |||
Mid: msg.MasterId, | |||
Title: md2.OneCirclesTeamActiveCoinExchangeToBeGreenEnergy, | |||
TransferType: md2.OneCirclesTeamActiveCoinExchangeToBeGreenEnergyForUserVirtualCoinFlow, | |||
OrdId: "", | |||
CoinId: msg.CoinId, | |||
Uid: msg.Uid, | |||
Amount: utils.StrToFloat64(msg.Amount), | |||
}) | |||
if err != nil { | |||
_ = session.Rollback() | |||
fmt.Println("err:::::33333", err.Error()) | |||
return err | |||
} | |||
//4.2减少“原始数量”中的绿色能量 | |||
err = one_circles.DealAvailableGreenEnergyCoin(session, int(enum.TeamActivePointRedemption), utils.StrToFloat64(values), utils.StrToFloat64(msg.AutoExchangeNumsAmount), enum.TeamActivePointRedemption.String(), oneCirclesGreenEnergyBasicSetting, afterPriceValue) | |||
if err != nil { | |||
_ = session.Rollback() | |||
fmt.Println("err:::::44444", err.Error()) | |||
return err | |||
} | |||
//5、修改 one_circles_green_energy_basic_setting 的 now_price | |||
_, err = db2.OneCirclesGreenEnergyBasicSettingUpdate(session, oneCirclesGreenEnergyBasicSetting.Id, oneCirclesGreenEnergyBasicSetting) | |||
if err != nil { | |||
_ = session.Rollback() | |||
fmt.Println("err:::::77777", err.Error()) | |||
return err | |||
} | |||
err = session.Commit() | |||
if err != nil { | |||
_ = session.Rollback() | |||
return errors.New("事务提交失败") | |||
} | |||
return nil | |||
} |
@@ -1,100 +0,0 @@ | |||
package consume | |||
import ( | |||
"applet/app/cfg" | |||
"applet/app/db" | |||
utils2 "applet/app/utils" | |||
"applet/app/utils/logx" | |||
"applet/consume/md" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git/rabbit" | |||
md2 "code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/md" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/rule" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/rule/one_circles" | |||
"encoding/json" | |||
"errors" | |||
"fmt" | |||
"github.com/streadway/amqp" | |||
"time" | |||
) | |||
func OneCirclesSettlementPublicGiveActivityCoinConsume(queue md.MqQueue) { | |||
fmt.Println(">>>>>>>>>>>>OneCirclesSettlementPublicGiveActivityCoinConsume>>>>>>>>>>>>") | |||
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(1) | |||
delivery := ch.Consume(queue.Name, false) | |||
one_circles.Init(cfg.RedisAddr) | |||
var res amqp.Delivery | |||
var ok bool | |||
for { | |||
res, ok = <-delivery | |||
if ok == true { | |||
err = handleOneCirclesSettlementPublicGiveActivityCoinConsume(res.Body) | |||
if err != nil { | |||
fmt.Println("OneCirclesSettlementPublicGiveActivityCoinConsume_ERR:::::", err.Error()) | |||
utils2.FilePutContents("OneCirclesSettlementPublicGiveActivityCoinConsume_ERR", utils2.SerializeStr(map[string]interface{}{ | |||
"body": res.Body, | |||
"err": err.Error(), | |||
})) | |||
} | |||
//_ = res.Reject(false) | |||
err = res.Ack(true) | |||
fmt.Println("err ::: ", err) | |||
} else { | |||
panic(errors.New("error getting message")) | |||
} | |||
} | |||
fmt.Println("get msg done") | |||
} | |||
func handleOneCirclesSettlementPublicGiveActivityCoinConsume(msgData []byte) error { | |||
time.Sleep(time.Duration(2) * time.Millisecond) //休眠2毫秒 | |||
//1、解析mq中queue的数据结构体 | |||
var msg *md2.DealUserCoinReq | |||
err := json.Unmarshal(msgData, &msg) | |||
if err != nil { | |||
return err | |||
} | |||
engine := db.DBs[msg.Mid] | |||
session := engine.NewSession() | |||
defer func() { | |||
session.Close() | |||
if err := recover(); err != nil { | |||
_ = logx.Error(err) | |||
} | |||
}() | |||
session.Begin() | |||
err = rule.DealUserCoin(session, md2.DealUserCoinReq{ | |||
Kind: "add", | |||
Mid: msg.Mid, | |||
Title: msg.Title, | |||
TransferType: msg.TransferType, | |||
OrdId: "", | |||
CoinId: msg.CoinId, | |||
Uid: msg.Uid, | |||
Amount: msg.Amount, | |||
}) | |||
if err != nil { | |||
_ = session.Rollback() | |||
fmt.Println("err:::::2222", err) | |||
return err | |||
} | |||
err = session.Commit() | |||
if err != nil { | |||
_ = session.Rollback() | |||
return errors.New("事务提交失败") | |||
} | |||
return nil | |||
} |
@@ -1,66 +0,0 @@ | |||
package consume | |||
import ( | |||
"applet/app/cfg" | |||
"applet/app/db" | |||
"applet/app/utils/logx" | |||
"applet/consume/md" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git/rabbit" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/rule/one_circles" | |||
"encoding/json" | |||
"errors" | |||
"fmt" | |||
"github.com/streadway/amqp" | |||
) | |||
func OneCirclesSignInGreenEnergyConsume(queue md.MqQueue) { | |||
fmt.Println(">>>>>>>>>>>>OneCirclesSignInGreenEnergyConsume>>>>>>>>>>>>") | |||
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(1) | |||
delivery := ch.Consume(queue.Name, false) | |||
one_circles.Init(cfg.RedisAddr) | |||
var res amqp.Delivery | |||
var ok bool | |||
for { | |||
res, ok = <-delivery | |||
if ok == true { | |||
err = handleOneCirclesSignInGreenEnergy(res.Body) | |||
if err != nil { | |||
fmt.Println("OneCirclesSignInGreenEnergyConsume_ERR:::::", err.Error()) | |||
} | |||
//_ = res.Reject(false) | |||
err = res.Ack(true) | |||
fmt.Println("err ::: ", err) | |||
} else { | |||
panic(errors.New("error getting message")) | |||
} | |||
} | |||
fmt.Println("get msg done") | |||
} | |||
func handleOneCirclesSignInGreenEnergy(msgData []byte) error { | |||
//1、解析mq中queue的数据结构体 | |||
var msg *md.OneCirclesStructForSignIn | |||
err := json.Unmarshal(msgData, &msg) | |||
if err != nil { | |||
return err | |||
} | |||
engine := db.DBs[msg.MasterId] | |||
err = one_circles.HandleSettlementSignInGreenEnergy(engine, msg.MasterId, msg.Id, msg.Uid, msg.EndTime) | |||
fmt.Println("err::::", err) | |||
if err != nil { | |||
return err | |||
} | |||
return nil | |||
} |
@@ -1,66 +0,0 @@ | |||
package consume | |||
import ( | |||
"applet/app/cfg" | |||
"applet/app/db" | |||
"applet/app/utils/logx" | |||
"applet/consume/md" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git/rabbit" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/rule/one_circles" | |||
"encoding/json" | |||
"errors" | |||
"fmt" | |||
"github.com/streadway/amqp" | |||
) | |||
func OneCirclesSignInCopyGreenEnergyConsume(queue md.MqQueue) { | |||
fmt.Println(">>>>>>>>>>>>OneCirclesSignInCopyGreenEnergyConsume>>>>>>>>>>>>") | |||
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(1) | |||
delivery := ch.Consume(queue.Name, false) | |||
one_circles.Init(cfg.RedisAddr) | |||
var res amqp.Delivery | |||
var ok bool | |||
for { | |||
res, ok = <-delivery | |||
if ok == true { | |||
err = handleOneCirclesSignInCopyGreenEnergy(res.Body) | |||
if err != nil { | |||
fmt.Println("OneCirclesSignInCopyGreenEnergyConsume_ERR:::::", err.Error()) | |||
} | |||
//_ = res.Reject(false) | |||
err = res.Ack(true) | |||
fmt.Println("err ::: ", err) | |||
} else { | |||
panic(errors.New("error getting message")) | |||
} | |||
} | |||
fmt.Println("get msg done") | |||
} | |||
func handleOneCirclesSignInCopyGreenEnergy(msgData []byte) error { | |||
//1、解析mq中queue的数据结构体 | |||
var msg *md.OneCirclesStructForSignIn | |||
err := json.Unmarshal(msgData, &msg) | |||
if err != nil { | |||
return err | |||
} | |||
engine := db.DBs[msg.MasterId] | |||
err = one_circles.HandleSettlementSignInGreenEnergy(engine, msg.MasterId, msg.Id, msg.Uid, msg.EndTime) | |||
fmt.Println("err::::", err) | |||
if err != nil { | |||
return err | |||
} | |||
return nil | |||
} |
@@ -1,97 +0,0 @@ | |||
package consume | |||
import ( | |||
"applet/app/cfg" | |||
"applet/app/db" | |||
utils2 "applet/app/utils" | |||
"applet/app/utils/logx" | |||
"applet/consume/md" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git/rabbit" | |||
db2 "code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/db" | |||
md2 "code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/md" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/rule" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/rule/one_circles" | |||
"encoding/json" | |||
"errors" | |||
"fmt" | |||
"github.com/streadway/amqp" | |||
"time" | |||
) | |||
func OneCirclesStartLevelDividendConsume(queue md.MqQueue) { | |||
fmt.Println(">>>>>>>>>>>>OneCirclesStartLevelDividendConsume>>>>>>>>>>>>") | |||
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(1) | |||
delivery := ch.Consume(queue.Name, false) | |||
one_circles.Init(cfg.RedisAddr) | |||
var res amqp.Delivery | |||
var ok bool | |||
for { | |||
res, ok = <-delivery | |||
if ok == true { | |||
err = handleOneCirclesStartLevelDividendConsume(res.Body) | |||
if err != nil { | |||
fmt.Println("OneCirclesStartLevelDividendConsume_ERR:::::", err.Error()) | |||
utils2.FilePutContents("OneCirclesStartLevelDividendConsume_ERR", utils2.SerializeStr(map[string]interface{}{ | |||
"body": res.Body, | |||
"err": err.Error(), | |||
})) | |||
} | |||
//_ = res.Reject(false) | |||
err = res.Ack(true) | |||
fmt.Println("err ::: ", err) | |||
} else { | |||
panic(errors.New("error getting message")) | |||
} | |||
} | |||
fmt.Println("get msg done") | |||
} | |||
func handleOneCirclesStartLevelDividendConsume(msgData []byte) error { | |||
time.Sleep(time.Duration(100) * time.Millisecond) //休眠100毫秒 | |||
//1、解析mq中queue的数据结构体 | |||
var msg *md.OneCirclesStructForStarLevelDividends | |||
err := json.Unmarshal(msgData, &msg) | |||
if err != nil { | |||
return err | |||
} | |||
engine := db.DBs[msg.MasterId] | |||
//2、查找 `one_circles_green_energy_basic_setting` 基础设置 | |||
oneCirclesGreenEnergyBasicSetting, err := db2.OneCirclesGreenEnergyBasicSettingGetOneByParams(engine, map[string]interface{}{ | |||
"key": "is_open", | |||
"value": 1, | |||
}) | |||
if err != nil { | |||
return err | |||
} | |||
if oneCirclesGreenEnergyBasicSetting == nil { | |||
return nil | |||
} | |||
//3、给相应的用户加上个人的绿色积分(结算数量) | |||
session := engine.NewSession() | |||
err = rule.DealUserCoin(session, md2.DealUserCoinReq{ | |||
Kind: "add", | |||
Mid: msg.MasterId, | |||
Title: md2.OneCirclesSettlementStarLevelDividends, | |||
TransferType: md2.OneCirclesSettlementStarLevelDividendsForUserVirtualCoinFlow, | |||
OrdId: "", | |||
CoinId: oneCirclesGreenEnergyBasicSetting.TeamGreenEnergyCoinId, | |||
Uid: msg.Uid, | |||
Amount: msg.SignDividend, | |||
}) | |||
if err != nil { | |||
return err | |||
} | |||
return nil | |||
} |
@@ -1,125 +0,0 @@ | |||
package consume | |||
import ( | |||
"applet/app/cfg" | |||
"applet/app/db" | |||
"applet/app/utils" | |||
"applet/app/utils/cache" | |||
tool "applet/app/utils/cloud_issuance" | |||
"applet/app/utils/logx" | |||
md2 "applet/cloud_issuance/md" | |||
"applet/consume/md" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git/rabbit" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_model.git/src/implement" | |||
"encoding/json" | |||
"errors" | |||
"fmt" | |||
"github.com/streadway/amqp" | |||
"strconv" | |||
"time" | |||
) | |||
func SuperCloudIssuanceAsyncMLoginConsume(queue md.MqQueue) { | |||
fmt.Println(">>>>>>>>>>>>>>>>>>>>>>>>") | |||
ch, err := rabbit.Cfg.Pool.GetChannel() | |||
if err != nil { | |||
logx.Error(err) | |||
return | |||
} | |||
defer ch.Release() | |||
//2、取出数据进行消费 | |||
ch.Qos(1) | |||
delivery := ch.Consume(queue.Name, false) | |||
var res amqp.Delivery | |||
var ok bool | |||
for { | |||
res, ok = <-delivery | |||
if ok == true { | |||
fmt.Println(">>>>>>>>>>>>>>>>SuperCloudIssuanceAsyncMLoginConsume<<<<<<<<<<<<<<<<<<<<<<<<<") | |||
//解析mq中queue的数据结构体 | |||
var msg *md2.CloudIssuanceAsyncMLogin | |||
err = json.Unmarshal(res.Body, &msg) | |||
if err != nil { | |||
panic(err) | |||
} | |||
go func() { | |||
err := handleSuperAsyncMLogin(msg.WId, msg.MasterId, msg.UserId, msg.RobotId) | |||
if err != nil { | |||
fmt.Println("<<<<<<<<<<<< handleSuperAsyncMLogin err>>>>>>>>", err.Error()) | |||
} | |||
}() | |||
_ = res.Ack(true) | |||
} else { | |||
panic(errors.New("error getting message")) | |||
} | |||
} | |||
fmt.Println("get msg done") | |||
} | |||
func handleSuperAsyncMLogin(wId, masterId, userId string, robotId int) error { | |||
var timeTotal = 0 | |||
for { | |||
err, resp := robotSuperAsyncMacLogin(md2.RobotAsyncMacLoginRequest{ | |||
WId: wId, | |||
RobotId: robotId, | |||
}) | |||
if err == nil { | |||
fmt.Println("success <<<<<<<", resp) | |||
if cfg.Prd { | |||
engine := db.DBs[masterId] | |||
cloudIssuanceUserRobotDb := implement.NewSuperCloudIssuanceUserRobotDb(engine, utils.StrToInt(userId), masterId) | |||
robot, err := cloudIssuanceUserRobotDb.GetSuperCloudIssuanceUserRobot() | |||
if err != nil { | |||
return err | |||
} | |||
if robot == nil { | |||
return errors.New("未查询到机器人记录") | |||
} | |||
robot.WcId = resp.WcId | |||
robot.WcNickname = resp.NickName | |||
robot.WcHeadUrl = resp.HeadUrl | |||
robot.LoginStatus = 1 | |||
_, err = cloudIssuanceUserRobotDb.SaveSuperCloudIssuanceUserRobot(robot.Id, robot, "wc_id", "wc_nickname", "wc_head_url", "login_status") | |||
if err != nil { | |||
return err | |||
} | |||
} else { | |||
//TODO::测试环境, 简化操作 通过redis 桥接 | |||
cache.SetEx(fmt.Sprintf("super_cloud_issuance_async_login_success:%s:%s", masterId, userId), utils.SerializeStr(resp), 60*5) | |||
} | |||
return nil | |||
} | |||
fmt.Println("err>>>>>>>>", err.Error()) | |||
if err != nil && err.Error() != "未登录" { | |||
return err | |||
} | |||
//TODO::休眠5s | |||
time.Sleep(time.Duration(5) * time.Second) | |||
timeTotal += 5 | |||
if timeTotal >= 240 { | |||
return errors.New("超时未登录") | |||
} | |||
} | |||
} | |||
func robotSuperAsyncMacLogin(args md2.RobotAsyncMacLoginRequest) (err error, result md2.RobotAsyncMacLoginResponse) { // 同步登录状态 | |||
url := tool.HttpBuild("itaoke.robot.async.mlogin", "127.0.0.1", map[string]string{ | |||
"robot_id": strconv.Itoa(args.RobotId), | |||
"wId": args.WId, | |||
}) | |||
data, err := tool.SendPost(url, args) | |||
if err != nil { | |||
return | |||
} | |||
resByte, err := json.Marshal(data.Data) | |||
if err != nil { | |||
return | |||
} | |||
err = json.Unmarshal(resByte, &result) | |||
if err != nil { | |||
return | |||
} | |||
return | |||
} |
@@ -1,72 +0,0 @@ | |||
package consume | |||
import ( | |||
"applet/app/utils" | |||
"applet/app/utils/logx" | |||
"applet/consume/md" | |||
db "applet/super_cloud_issuance/db/official" | |||
md2 "applet/super_cloud_issuance/md" | |||
"applet/super_cloud_issuance/svc" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git/rabbit" | |||
"encoding/json" | |||
"errors" | |||
"fmt" | |||
"github.com/gin-gonic/gin" | |||
"github.com/streadway/amqp" | |||
"time" | |||
) | |||
func SuperCloudIssuanceMsgCallBackConsume(queue md.MqQueue) { | |||
fmt.Println(">>>>>>>>>>>>>>>>>>>>>>>>") | |||
ch, err := rabbit.Cfg.Pool.GetChannel() | |||
if err != nil { | |||
logx.Error(err) | |||
return | |||
} | |||
defer ch.Release() | |||
//2、取出数据进行消费 | |||
ch.Qos(10) | |||
delivery := ch.Consume(queue.Name, false) | |||
var res amqp.Delivery | |||
var ok bool | |||
for { | |||
res, ok = <-delivery | |||
if ok == true { | |||
fmt.Println(">>>>>>>>>>>>>>>>CloudIssuanceMsgCallBackConsume<<<<<<<<<<<<<<<<<<<<<<<<<") | |||
//解析mq中queue的数据结构体 | |||
var msg *md2.CallbackRequest | |||
err = json.Unmarshal(res.Body, &msg) | |||
if err != nil { | |||
panic(err) | |||
} | |||
randInt := utils.RandIntRand(100, 200) | |||
time.Sleep(time.Millisecond * time.Duration(randInt)) // 等待100 ~ 200毫秒 | |||
go func() { | |||
//设置masterId | |||
cloudIssuanceRobotRecords, err := db.SuperCloudIssuanceRobotRecordsGetOneByParams(map[string]interface{}{ | |||
"key": "robot_id", | |||
"value": msg.RobotId, | |||
}) | |||
if err != nil { | |||
fmt.Println("CallBackErr:::::", err.Error()) | |||
return | |||
} | |||
if cloudIssuanceRobotRecords == nil { | |||
//TODO::未查询到机器人,不需要处理 | |||
utils.FilePutContents("cloud_issuance_call_back_not_found", utils.SerializeStr(msg)) | |||
return | |||
} | |||
var c = &gin.Context{} | |||
c.Set("mid", cloudIssuanceRobotRecords.MasterId) | |||
dealCloudIssuanceCallBackService := svc.DealSuperCloudIssuanceCallBackService{} | |||
dealCloudIssuanceCallBackService.Set(c) | |||
dealCloudIssuanceCallBackService.DealCallBack(c, *msg) | |||
}() | |||
_ = res.Ack(true) | |||
} else { | |||
panic(errors.New("error getting message")) | |||
} | |||
} | |||
fmt.Println("get msg done") | |||
} |
@@ -1,227 +0,0 @@ | |||
package consume | |||
import ( | |||
svc2 "applet/app/svc" | |||
"applet/app/utils" | |||
"applet/app/utils/logx" | |||
"applet/consume/md" | |||
utils1688 "applet/supply/1688/utils" | |||
"applet/supply/db" | |||
"applet/supply/db/model" | |||
"applet/supply/enum" | |||
md2 "applet/supply/md" | |||
"applet/supply/svc" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git/rabbit" | |||
"encoding/json" | |||
"errors" | |||
"fmt" | |||
"github.com/gin-gonic/gin" | |||
"github.com/streadway/amqp" | |||
"strings" | |||
"time" | |||
) | |||
func SupplyCloudChainFenxiaoNewChangeConsume(queue md.MqQueue) { | |||
fmt.Println(">>>>>>>>>>>>>>>>>>>>>>>>") | |||
ch, err := rabbit.Cfg.Pool.GetChannel() | |||
if err != nil { | |||
logx.Error(err) | |||
return | |||
} | |||
defer ch.Release() | |||
//2、取出数据进行消费 | |||
ch.Qos(1) | |||
delivery := ch.Consume(queue.Name, false) | |||
var res amqp.Delivery | |||
var ok bool | |||
for { | |||
res, ok = <-delivery | |||
if ok == true { | |||
fmt.Println(">>>>>>>>>>>>>>>>SupplyCloudChainFenxiaoNewChangeConsume<<<<<<<<<<<<<<<<<<<<<<<<<") | |||
err = handleSupplyCloudChainFenxiaoNewChangeConsume(res.Body) | |||
if err != nil { | |||
fmt.Println("*****************err*************************", err) | |||
} | |||
_ = res.Ack(true) | |||
} else { | |||
panic(errors.New("error getting message")) | |||
} | |||
} | |||
fmt.Println("get msg done") | |||
} | |||
func RemoveRepeatedElement(arr []string) (newArr []string) { | |||
newArr = make([]string, 0) | |||
for i := 0; i < len(arr); i++ { | |||
repeat := false | |||
for j := i + 1; j < len(arr); j++ { | |||
if arr[i] == arr[j] { | |||
repeat = true | |||
break | |||
} | |||
} | |||
if !repeat { | |||
newArr = append(newArr, arr[i]) | |||
} | |||
} | |||
return | |||
} | |||
func handleSupplyCloudChainFenxiaoNewChangeConsume(msgData []byte) error { | |||
//解析mq中queue的数据结构体 | |||
var pushStuct struct { | |||
Args struct { | |||
md2.GoodsAddPriceConditions | |||
} `json:"args"` | |||
Mid string `json:"mid"` | |||
} | |||
err := json.Unmarshal(msgData, &pushStuct) | |||
if err != nil { | |||
panic(err) | |||
} | |||
//设置masterId | |||
var c = &gin.Context{} | |||
c.Set("mid", pushStuct.Mid) | |||
var t struct { | |||
md2.GoodsAddPriceConditions | |||
} | |||
t = pushStuct.Args | |||
var idsMap = map[string]string{} | |||
for _, v := range t.Ids { | |||
idsMap[v] = v | |||
} | |||
var idsArray []string | |||
for _, v := range idsMap { | |||
idsArray = append(idsArray, v) | |||
} | |||
t.Ids = idsArray | |||
basicSetting, _ := svc.GetSupplyBasicSetting(c) | |||
if basicSetting == nil { | |||
return errors.New("!!!!!功能开发中") | |||
} | |||
if basicSetting.AliCloudChainFenXiaoAppkey == "" || basicSetting.AliCloudChainFenXiaoAppsecret == "" || basicSetting.AliCloudChainFenXiaoAccesstoken == "" { | |||
return errors.New("!!!!!必要参数没有填写,功能已暂停") | |||
} | |||
get, systemMerchant, err1 := db.GetSystemMerchant(svc2.MasterDb(c)) | |||
if err1 != nil { | |||
return err1 | |||
} | |||
if !get { | |||
return errors.New("!!!!!请先去设置官方商家信息") | |||
} | |||
ids := RemoveRepeatedElement(t.Ids) | |||
var tmpIds []string | |||
var resultList []interface{} | |||
for _, v := range ids { | |||
tmpIds = append(tmpIds, v) | |||
if len(tmpIds) >= 20 { | |||
goodsFrom1688s, err := utils1688.GetFenXiaoProductInfoFrom1688(basicSetting.AliCloudChainFenXiaoAppkey, basicSetting.AliCloudChainFenXiaoAppsecret, basicSetting.AliCloudChainFenXiaoAccesstoken, tmpIds) | |||
if err != nil { | |||
return err | |||
} | |||
result, ok := goodsFrom1688s["result"].(map[string]interface{}) | |||
if !ok { | |||
return errors.New("!!!!!错误的数据") | |||
} | |||
if message, ok := result["message"]; ok { | |||
fmt.Println("!!!!!!!!!!!!", message, "!!!!!!!!!!") | |||
return errors.New("message 反射失败1") | |||
} | |||
tmpResultList, ok := result["result"].([]interface{}) | |||
if !ok { | |||
return errors.New("!!!!!!错误的数据2") | |||
} | |||
if len(tmpResultList) == 0 { | |||
return errors.New("!!!!!!错误的数据3") | |||
} | |||
for _, vv := range tmpResultList { | |||
resultList = append(resultList, vv) | |||
} | |||
tmpIds = []string{} | |||
} | |||
} | |||
if len(tmpIds) >= 0 { | |||
goodsFrom1688s, err := utils1688.GetFenXiaoProductInfoFrom1688(basicSetting.AliCloudChainFenXiaoAppkey, basicSetting.AliCloudChainFenXiaoAppsecret, basicSetting.AliCloudChainFenXiaoAccesstoken, tmpIds) | |||
if err != nil { | |||
return err | |||
} | |||
result, ok := goodsFrom1688s["result"].(map[string]interface{}) | |||
if !ok { | |||
return errors.New("!!!!!!错误的数据4") | |||
} | |||
if message, ok := result["message"]; ok { | |||
fmt.Println("!!!!!", message) | |||
return errors.New("message 反射失败2") | |||
} | |||
tmpResultList, ok := result["result"].([]interface{}) | |||
if !ok { | |||
return errors.New("!!!!!!错误的数据4") | |||
} | |||
if len(tmpResultList) == 0 { | |||
return errors.New("!!!!!!错误的数据5") | |||
} | |||
for _, vv := range tmpResultList { | |||
resultList = append(resultList, vv) | |||
} | |||
} | |||
var cloudChainGoods = map[string]map[string]interface{}{} | |||
for _, v := range resultList { | |||
tmp, ok1 := v.(map[string]interface{}) | |||
if !ok1 { | |||
return errors.New("!!!!!!错误的数据6") | |||
} | |||
productInfo, ok1 := tmp["productInfo"].(map[string]interface{}) | |||
if !ok1 { | |||
return errors.New("!!!!!!错误的数据7") | |||
} | |||
var productId = utils.AnyToString(productInfo["productID"]) | |||
for strings.HasSuffix(productId, "0") { | |||
productId = strings.TrimSuffix(productId, "0") | |||
} | |||
if strings.HasSuffix(productId, ".") { | |||
productId = strings.TrimSuffix(productId, ".") | |||
} | |||
cloudChainGoods[productId] = tmp | |||
} | |||
utils.FilePutContents("cloudChainGoods", utils.SerializeStr(cloudChainGoods)) | |||
for _, id := range ids { | |||
if cloudChainGoods[id] == nil { | |||
continue | |||
} | |||
var goods model.MallGoods | |||
goods.CloudChainGoodsId = id | |||
goods.MerchantId = systemMerchant.Id | |||
getV2, err11 := goods.GetV2(svc2.MasterDb(c)) | |||
if err11 != nil { | |||
fmt.Println("!!!!!!", err11.Error()) | |||
continue | |||
} | |||
if getV2 { | |||
continue | |||
} | |||
var req md2.AddGoodsReq | |||
req.Base.GoodsType = 1 | |||
req.Base.CloudChainGoodsId = id | |||
req.Base.SaleState = enum.MallGoodsSaleStateOnShelf | |||
req.Base.CategoryId = utils.StrToInt(t.CategoryId) | |||
req.Base.MerchantId = systemMerchant.Id | |||
err := svc.CloudChainFenXiaoGoodsChangeMallGoods(c, cloudChainGoods[id], &req) | |||
if err != nil { | |||
return err | |||
} | |||
err111 := svc.AddMallGoods(c, &req) | |||
if err111 != nil { | |||
return err111 | |||
} | |||
time.Sleep(12 * time.Millisecond) | |||
} | |||
return nil | |||
} |
@@ -1,100 +0,0 @@ | |||
package consume | |||
import ( | |||
"applet/app/cfg" | |||
"applet/app/utils" | |||
"applet/app/utils/logx" | |||
"applet/consume/md" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git/rabbit" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/rule/one_circles" | |||
"encoding/json" | |||
"errors" | |||
"fmt" | |||
"github.com/streadway/amqp" | |||
"time" | |||
) | |||
func WithdrawConsume(queue md.MqQueue) { | |||
fmt.Println(">>>>>>>>>>>>WithdrawConsume>>>>>>>>>>>>") | |||
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(1) | |||
delivery := ch.Consume(queue.Name, false) | |||
one_circles.Init(cfg.RedisAddr) | |||
var res amqp.Delivery | |||
var ok bool | |||
for { | |||
res, ok = <-delivery | |||
if ok == true { | |||
err = handleWithdrawConsume(res.Body) | |||
fmt.Println("err ::: ", err) | |||
if err != nil { | |||
fmt.Println("WithdrawConsume_ERR:::::", err.Error()) | |||
//_ = res.Reject(true) | |||
_ = res.Reject(false) | |||
var msg interface{} | |||
json.Unmarshal(res.Body, &msg) | |||
if err.Error() == "Connection timed out" { | |||
//TODO::重新推回队列末尾,避免造成队列堵塞 | |||
ch.Publish(queue.ExchangeName, msg, queue.RoutKey) | |||
} else { | |||
//TODO::推入新的队列中备份 | |||
utils.FilePutContents("WithdrawConsume_ERR", utils.SerializeStr(err.Error())) | |||
ch.Publish("zhios.app.user.withdraw.apply.exception.exchange", msg, "queues_one") | |||
} | |||
} else { | |||
err = res.Ack(true) | |||
} | |||
} else { | |||
panic(errors.New("error getting message")) | |||
} | |||
} | |||
fmt.Println("get msg done") | |||
} | |||
func handleWithdrawConsume(msgData []byte) error { | |||
time.Sleep(time.Microsecond * 200) // 等待200毫秒 | |||
//1、解析mq中queue的数据结构体 | |||
var msg interface{} | |||
err := json.Unmarshal(msgData, &msg) | |||
if err != nil { | |||
return err | |||
} | |||
fmt.Println("message:::::::::::>>>>>>>>>") | |||
fmt.Println(msg) | |||
var url = "http://admin.99813608.zhiyingos.com/index/transfer" | |||
if cfg.Prd { | |||
url = "http://zhios-admin/index/transfer" | |||
} | |||
post, err := utils.CurlPost(url, msg, nil) | |||
if err != nil { | |||
return err | |||
} | |||
fmt.Println("transfer:::::::::::<<<<<<<<<") | |||
fmt.Println(string(post), "\n========================================\n\n") | |||
var postResult struct { | |||
Code int `json:"code"` | |||
Msg string `json:"msg"` | |||
Data struct { | |||
IsOk bool `json:"isOk"` | |||
Msg string `json:"msg"` | |||
} `json:"data"` | |||
} | |||
err = json.Unmarshal(post, &postResult) | |||
if err != nil { | |||
return err | |||
} | |||
if !postResult.Data.IsOk { | |||
return errors.New(postResult.Data.Msg) | |||
} | |||
return nil | |||
} |
@@ -1,165 +0,0 @@ | |||
package consume | |||
import ( | |||
"applet/app/cfg" | |||
"applet/app/db" | |||
db2 "applet/app/flexible_employment/db" | |||
"applet/app/flexible_employment/enum" | |||
"applet/app/flexible_employment/svc" | |||
"applet/app/lib/flexible_employment" | |||
"applet/app/utils" | |||
"applet/app/utils/logx" | |||
"applet/consume/md" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git/rabbit" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/rule/one_circles" | |||
"encoding/json" | |||
"errors" | |||
"fmt" | |||
"github.com/streadway/amqp" | |||
"time" | |||
) | |||
func FlexibleEmploymentWithdrawForGongMaoConsume(queue md.MqQueue) { | |||
fmt.Println(">>>>>>>>>>>>FlexibleEmploymentWithdrawForGongMaoConsume>>>>>>>>>>>>") | |||
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(1) | |||
delivery := ch.Consume(queue.Name, false) | |||
one_circles.Init(cfg.RedisAddr) | |||
var res amqp.Delivery | |||
var ok bool | |||
for { | |||
res, ok = <-delivery | |||
if ok == true { | |||
err = handleFlexibleEmploymentWithdrawForGongMaoConsume(res.Body) | |||
fmt.Println("err ::: ", err) | |||
if err != nil { | |||
fmt.Println("FlexibleEmploymentWithdrawForGongMaoConsume_ERR:::::", err.Error()) | |||
_ = res.Reject(true) //TODO::拒绝 Ack | |||
//_ = res.Reject(false) | |||
var msg interface{} | |||
json.Unmarshal(res.Body, &msg) | |||
if err.Error() == "Connection timed out" { | |||
//TODO::重新推回队列末尾,避免造成队列堵塞 | |||
ch.Publish(queue.ExchangeName, msg, queue.RoutKey) | |||
} else { | |||
//TODO::推入新的队列中备份 | |||
utils.FilePutContents("FlexibleEmploymentWithdrawForGongMaoConsume_ERR", utils.SerializeStr(err.Error())) | |||
ch.Publish("zhios.app.user.withdraw.apply.exception.exchange", msg, "gongmao") | |||
} | |||
} else { | |||
err = res.Ack(true) | |||
} | |||
} else { | |||
panic(errors.New("error getting message")) | |||
} | |||
} | |||
fmt.Println("get msg done") | |||
} | |||
func handleFlexibleEmploymentWithdrawForGongMaoConsume(msgData []byte) error { | |||
var ms string | |||
err := json.Unmarshal(msgData, &ms) | |||
if err != nil { | |||
return err | |||
} | |||
time.Sleep(time.Microsecond * 200) // 等待200毫秒 | |||
//1、解析mq中queue的数据结构体 | |||
var msg struct { | |||
Uid string `json:"uid"` | |||
Nickname string `json:"nickname"` | |||
MasterId string `json:"master_id"` | |||
AppName string `json:"app_name"` | |||
ApplyOrder string `json:"apply_order"` | |||
ActualAmount string `json:"actual_amount"` | |||
MobCfg interface{} `json:"mob_cfg"` | |||
} | |||
err = json.Unmarshal([]byte(ms), &msg) | |||
if err != nil { | |||
return err | |||
} | |||
fmt.Println("gongmao_message:::::::::::>>>>>>>>>") | |||
fmt.Println(msg) | |||
if db.DBs[msg.MasterId] == nil { | |||
return nil | |||
} | |||
engine := db.DBs[msg.MasterId] | |||
//1、查找对应记录 | |||
flexibleEmploymentOrdDb := db2.FlexibleEmploymentOrdDb{} | |||
flexibleEmploymentOrdDb.Set(msg.MasterId) | |||
flexibleEmploymentOrd, err := flexibleEmploymentOrdDb.Get(msg.ApplyOrder) | |||
if err != nil { | |||
return err | |||
} | |||
if flexibleEmploymentOrd == nil { | |||
return errors.New("未查询到对应订单记录") | |||
} | |||
flexibleEmploymentBasicDb := db2.FlexibleEmploymentBasicDb{} | |||
flexibleEmploymentBasicDb.Set() | |||
basic, err := flexibleEmploymentBasicDb.Get(msg.MasterId) | |||
if err != nil { | |||
return err | |||
} | |||
gongMao := flexible_employment.New(basic.AppKey, basic.AppSecret, basic.SecretId) | |||
result, err := gongMao.Curl(enum.MerchantDoSinglePayment, map[string]interface{}{ | |||
"requestId": flexibleEmploymentOrd.RequestId, | |||
"mobile": flexibleEmploymentOrd.Mobile, | |||
"name": flexibleEmploymentOrd.Name, | |||
"amount": flexibleEmploymentOrd.Amount, | |||
"identity": flexibleEmploymentOrd.Identity, | |||
"bankAccount": flexibleEmploymentOrd.BankAccount, | |||
"dateTime": time.Now().Format("20060102150405"), | |||
"salaryType": flexibleEmploymentOrd.SettleType, | |||
}) | |||
if err != nil { | |||
return err | |||
} | |||
var response struct { | |||
Success bool `json:"success"` | |||
ErrorCode string `json:"errorCode"` | |||
ErrorMsg string `json:"errorMsg"` | |||
Data struct { | |||
RequestId string `json:"requestId"` | |||
AppmentTime string `json:"appmentTime"` | |||
} `json:"data"` | |||
} | |||
if err = json.Unmarshal(utils.Serialize(result), &response); err != nil { | |||
return err | |||
} | |||
if !response.Success { | |||
//TODO::发起提现失败,将处理提现失败状态 | |||
finWithdrawApply, err := db.UserWithDrawApplyByUIDById(engine, flexibleEmploymentOrd.RequestId) | |||
if err != nil { | |||
return err | |||
} | |||
session := engine.NewSession() | |||
defer session.Close() | |||
session.Begin() | |||
err = svc.DealFailResult(session, finWithdrawApply, msg.MasterId, response.ErrorMsg) | |||
if err != nil { | |||
_ = session.Rollback() | |||
return err | |||
} | |||
return session.Commit() | |||
} | |||
flexibleEmploymentOrd.State = 1 | |||
updateAck, err := flexibleEmploymentOrdDb.Update(flexibleEmploymentOrd.Id, flexibleEmploymentOrd, "state") | |||
if err != nil { | |||
return err | |||
} | |||
if updateAck <= 0 { | |||
return errors.New("更新 flexible_employment_ord 状态失败") | |||
} | |||
return nil | |||
} |
@@ -1,185 +0,0 @@ | |||
package consume | |||
import ( | |||
"applet/app/cfg" | |||
"applet/app/db" | |||
db2 "applet/app/flexible_employment/db" | |||
"applet/app/flexible_employment/enum" | |||
"applet/app/flexible_employment/svc" | |||
"applet/app/flexible_employment/utils/aes" | |||
"applet/app/lib/flexible_employment" | |||
"applet/app/utils" | |||
"applet/app/utils/logx" | |||
"applet/consume/md" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git/rabbit" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/rule/one_circles" | |||
"encoding/json" | |||
"errors" | |||
"fmt" | |||
"github.com/streadway/amqp" | |||
"time" | |||
) | |||
func FlexibleEmploymentWithdrawForPupiaoConsume(queue md.MqQueue) { | |||
fmt.Println(">>>>>>>>>>>>FlexibleEmploymentWithdrawForPupiaoConsume>>>>>>>>>>>>") | |||
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(1) | |||
delivery := ch.Consume(queue.Name, false) | |||
one_circles.Init(cfg.RedisAddr) | |||
var res amqp.Delivery | |||
var ok bool | |||
for { | |||
res, ok = <-delivery | |||
if ok == true { | |||
err = handleFlexibleEmploymentWithdrawForPupiaoConsume(res.Body) | |||
fmt.Println("err ::: ", err) | |||
if err != nil { | |||
fmt.Println("FlexibleEmploymentWithdrawForPupiaoConsume_ERR:::::", err.Error()) | |||
//_ = res.Reject(true) | |||
_ = res.Reject(false) | |||
var msg interface{} | |||
json.Unmarshal(res.Body, &msg) | |||
if err.Error() == "Connection timed out" { | |||
//TODO::重新推回队列末尾,避免造成队列堵塞 | |||
ch.Publish(queue.ExchangeName, msg, queue.RoutKey) | |||
} else { | |||
//TODO::推入新的队列中备份 | |||
utils.FilePutContents("FlexibleEmploymentWithdrawForPupiaoConsume_ERR", utils.SerializeStr(err.Error())) | |||
ch.Publish("zhios.app.user.withdraw.apply.exception.exchange", msg, "pupiao") | |||
} | |||
} else { | |||
err = res.Ack(true) | |||
} | |||
} else { | |||
panic(errors.New("error getting message")) | |||
} | |||
} | |||
fmt.Println("get msg done") | |||
} | |||
func handleFlexibleEmploymentWithdrawForPupiaoConsume(msgData []byte) error { | |||
var ms string | |||
err := json.Unmarshal(msgData, &ms) | |||
if err != nil { | |||
return err | |||
} | |||
time.Sleep(time.Microsecond * 200) // 等待200毫秒 | |||
//1、解析mq中queue的数据结构体 | |||
var msg struct { | |||
Uid string `json:"uid"` | |||
Nickname string `json:"nickname"` | |||
MasterId string `json:"master_id"` | |||
AppName string `json:"app_name"` | |||
ApplyOrder string `json:"apply_order"` | |||
ActualAmount string `json:"actual_amount"` | |||
Oid string `json:"oid"` | |||
MobCfg interface{} `json:"mob_cfg"` | |||
} | |||
err = json.Unmarshal([]byte(ms), &msg) | |||
if err != nil { | |||
return err | |||
} | |||
fmt.Println("pupiao_message:::::::::::>>>>>>>>>") | |||
fmt.Println(msg) | |||
if db.DBs[msg.MasterId] == nil { | |||
return nil | |||
} | |||
engine := db.DBs[msg.MasterId] | |||
//1、查找对应记录 | |||
flexibleEmploymentPupiaoOrdDb := db2.FlexibleEmploymentPupiaoOrdDb{} | |||
flexibleEmploymentPupiaoOrdDb.Set(msg.MasterId) | |||
flexibleEmploymentPupiaoOrd, err := flexibleEmploymentPupiaoOrdDb.Get(msg.Oid) | |||
if err != nil { | |||
return err | |||
} | |||
if flexibleEmploymentPupiaoOrd == nil { | |||
return errors.New("未查询到对应订单记录") | |||
} | |||
flexibleEmploymentPuiaoBasicDb := db2.FlexibleEmploymentPuiaoBasicDb{} | |||
flexibleEmploymentPuiaoBasicDb.Set() | |||
basic, err := flexibleEmploymentPuiaoBasicDb.GetBasic(msg.MasterId) | |||
if err != nil { | |||
return err | |||
} | |||
//2、发起制单 | |||
puPiao := flexible_employment.NewPuPiao(basic.AppId, basic.AppSecret) | |||
var userAESData = []map[string]string{ | |||
{ | |||
"outTradeNo": "o_" + utils.Int64ToStr(flexibleEmploymentPupiaoOrd.WithdrawApplyId), | |||
"settleType": flexibleEmploymentPupiaoOrd.SettleType, | |||
"payeeName": flexibleEmploymentPupiaoOrd.PayeeName, | |||
"payeeIdCard": flexibleEmploymentPupiaoOrd.PayeeIdCard, | |||
"payeePhone": flexibleEmploymentPupiaoOrd.PayeePhone, | |||
"payeeNo": flexibleEmploymentPupiaoOrd.PayeeNo, | |||
"orderAmount": flexibleEmploymentPupiaoOrd.TotalAmount, | |||
}, | |||
} | |||
str, _ := json.Marshal(userAESData) | |||
itemAESContent, _ := aes.AesEncryptByECB([]byte(basic.AppSecret), string(str)) | |||
settleAccountId := basic.SettleAccountId | |||
if flexibleEmploymentPupiaoOrd.SettleType == "ALIPAY" { | |||
settleAccountId = basic.SettleAccountIdForAli | |||
} | |||
result, err := puPiao.Curl(enum.OpenApiPaymentReceiveOrder, map[string]interface{}{ | |||
"outBatchNo": flexibleEmploymentPupiaoOrd.OutBatchNo, | |||
"hrcompanyId": basic.HrCompanyId, | |||
"settleAccountId": settleAccountId, | |||
"totalCount": "1", | |||
"totalAmount": flexibleEmploymentPupiaoOrd.TotalAmount, | |||
"itemAESContent": itemAESContent, | |||
}) | |||
if err != nil { | |||
return err | |||
} | |||
var response struct { | |||
IsSuccess string `json:"isSuccess"` | |||
Charset string `json:"charset"` | |||
ErrorCode string `json:"errorCode"` | |||
ErrorMsg string `json:"errorMsg"` | |||
Data struct { | |||
PlatformBatchNo string `json:"platformBatchNo"` | |||
OutBatchNo string `json:"outBatchNo"` | |||
} `json:"data"` | |||
} | |||
if err = json.Unmarshal(utils.Serialize(result), &response); err != nil { | |||
return err | |||
} | |||
if response.IsSuccess == "F" { | |||
flexibleEmploymentPupiaoOrd.BatchStatus = 1 | |||
updateAck, err := flexibleEmploymentPupiaoOrdDb.Update(flexibleEmploymentPupiaoOrd.Id, flexibleEmploymentPupiaoOrd, "batch_status") | |||
if err != nil { | |||
return err | |||
} | |||
if updateAck <= 0 { | |||
return errors.New("更新 flexible_employment_pupiao_ord 状态失败") | |||
} | |||
//TODO::制单失败,将处理提现失败状态 | |||
finWithdrawApply, err := db.UserWithDrawApplyByUIDById(engine, utils.Int64ToStr(flexibleEmploymentPupiaoOrd.WithdrawApplyId)) | |||
if err != nil { | |||
return err | |||
} | |||
session := engine.NewSession() | |||
defer session.Close() | |||
session.Begin() | |||
err = svc.DealFailResultForPuPiao(session, finWithdrawApply, msg.MasterId, response.ErrorMsg) | |||
if err != nil { | |||
_ = session.Rollback() | |||
return err | |||
} | |||
return session.Commit() | |||
} | |||
return nil | |||
} |
@@ -1,679 +0,0 @@ | |||
package consume | |||
import ( | |||
"applet/app/db" | |||
"applet/app/db/model" | |||
"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" | |||
"strings" | |||
"time" | |||
"xorm.io/xorm" | |||
) | |||
func ZhiosAcquisitionCondition(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(300) | |||
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(">>>>>>>>>>>>>>>>ZhiosAcquisitionCondition<<<<<<<<<<<<<<<<<<<<<<<<<") | |||
err = handleZhiosAcquisition(res.Body) | |||
//_ = res.Reject(false) | |||
fmt.Println(err) | |||
if err == nil { | |||
_ = res.Ack(true) | |||
} else { | |||
var canalMsg *md.ZhiosAcquisition | |||
var tmpString string | |||
err := json.Unmarshal(res.Body, &tmpString) | |||
if err == nil { | |||
fmt.Println(tmpString) | |||
err = json.Unmarshal([]byte(tmpString), &canalMsg) | |||
if err == nil { | |||
ch.Publish(queue.ExchangeName, utils.SerializeStr(canalMsg), queue.RoutKey) | |||
} | |||
} | |||
} | |||
} else { | |||
panic(errors.New("error getting message")) | |||
} | |||
} | |||
fmt.Println("get msg done") | |||
} | |||
func handleZhiosAcquisition(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] | |||
if eg == nil { | |||
return nil | |||
} | |||
if canalMsg.Uid == "" { | |||
return nil | |||
} | |||
userInfo, _ := db.UserFindByID(eg, canalMsg.Uid) | |||
if userInfo == nil { | |||
return nil | |||
} | |||
userProfile, _ := db.UserProfileFindByID(eg, canalMsg.Uid) | |||
if userProfile == nil { | |||
return nil | |||
} | |||
cfg := db.GetAcquisitionCfg(eg, canalMsg.Id, userInfo.CreateAt) | |||
if cfg == nil { | |||
return nil | |||
} | |||
nextUserProfile, _ := db.UserProfileFindByID(eg, userProfile.ParentUid) | |||
var user = &md.User{Info: userInfo, Profile: userProfile} | |||
bools, str := checkAllCompleteTmp(eg, user, cfg) | |||
isFull := 0 | |||
fullTime := 0 | |||
toRewardTime := 0 | |||
if bools { | |||
isFull = 1 | |||
fullTime = int(time.Now().Unix()) | |||
toRewardTime = int(time.Now().Unix()) + utils.StrToInt(cfg.RewardAccountDay)*86400 | |||
} | |||
//写入奖励记录 | |||
//新的设置 读第一个新注册的奖励 | |||
lv := 0 | |||
if len(cfg.RewardRule.LvRewardList) > 0 { | |||
isEnd := 0 | |||
for k, v := range cfg.RewardRule.LvRewardList { | |||
if isEnd == 1 { | |||
continue | |||
} | |||
if utils.StrToInt(v.Id) == user.Info.Level { | |||
isEnd = 1 | |||
} | |||
lv = utils.StrToInt(v.Id) | |||
if cfg.RewardRule.NewRewardCoinId != "" { | |||
ex := strings.Split(cfg.RewardRule.NewRewardCoinId, ",") | |||
for _, v1 := range v.CoinList { | |||
if utils.InArr(v1.CoinId, ex) { | |||
InvitedReward := v1.InvitedReward | |||
if cfg.RewardRule.RewardType == "1" { | |||
InvitedReward = Rands(v1.InvitedReward, v1.InvitedRewardMax) | |||
} | |||
//直推 | |||
DirectSuccess := v1.DirectSuccess | |||
if cfg.RewardRule.RewardType == "1" { | |||
DirectSuccess = Rands(v1.DirectSuccess, v1.DirectSuccessMax) | |||
} | |||
//间推 | |||
IndirectSuccess := v1.IndirectSuccess | |||
if cfg.RewardRule.RewardType == "1" { | |||
IndirectSuccess = Rands(v1.IndirectSuccess, v1.IndirectSuccessMax) | |||
} | |||
InvitedSource := 0 | |||
DirectSource := 1 | |||
IndirectSource := 2 | |||
InvitedSourceStr := "注册奖励" | |||
DirectSourceStr := "直推好友" | |||
IndirectSourceStr := "间推好友" | |||
if k > 0 { | |||
InvitedSource = 3 | |||
DirectSource = 4 | |||
IndirectSource = 5 | |||
InvitedSourceStr = "升级" + v.Name + "奖励" | |||
DirectSourceStr = "直推好友升级" + v.Name + "奖励" | |||
IndirectSourceStr = "间推好友升级" + v.Name + "奖励" | |||
} | |||
if utils.StrToFloat64(InvitedReward) > 0 { | |||
ownRewardLog, ownhas, _ := db.GetNewAcquisitionRewardLogWhereCoinId(eg, userProfile.Uid, user.Profile.Uid, lv, utils.StrToInt(v1.CoinId)) | |||
if !ownhas { | |||
ownRewardLog = &model.NewAcquisitionRewardLog{ | |||
Uid: user.Profile.Uid, | |||
ToUid: user.Profile.Uid, | |||
Title: user.Info.Nickname, | |||
Source: InvitedSource, | |||
SourceText: InvitedSourceStr, | |||
Money: InvitedReward, | |||
CreatedAt: int(time.Now().Unix()), | |||
State: 0, | |||
CoinId: utils.StrToInt(v1.CoinId), | |||
RewardType: utils.StrToInt(cfg.RewardRule.RewardType), | |||
InviteTime: int(userInfo.CreateAt.Unix()), | |||
Lv: lv, | |||
} | |||
db.InsertNewRewardLog(eg, ownRewardLog) | |||
} | |||
if ownRewardLog.GivenAt == 0 { | |||
ownRewardLog.CompleteCon = str | |||
ownRewardLog.IsFull = isFull | |||
if ownRewardLog.FullTime == 0 { | |||
ownRewardLog.FullTime = fullTime | |||
} | |||
if ownRewardLog.ToRewardTime == 0 { | |||
ownRewardLog.ToRewardTime = toRewardTime | |||
} | |||
eg.Where("id=?", ownRewardLog.Id).Update(ownRewardLog) | |||
} | |||
} | |||
if utils.StrToFloat64(DirectSuccess) > 0 { | |||
if userProfile.ParentUid > 0 { | |||
//写入奖励记录 | |||
extendRewardLog, extendHas, _ := db.GetNewAcquisitionRewardLogWhereCoinId(eg, userProfile.ParentUid, userProfile.Uid, lv, utils.StrToInt(v1.CoinId)) | |||
if !extendHas { | |||
extendRewardLog = &model.NewAcquisitionRewardLog{ | |||
Uid: user.Profile.ParentUid, | |||
ToUid: user.Profile.Uid, | |||
Title: user.Info.Nickname, | |||
Source: DirectSource, | |||
SourceText: DirectSourceStr, | |||
Money: DirectSuccess, | |||
CreatedAt: int(time.Now().Unix()), | |||
State: 0, | |||
CoinId: utils.StrToInt(v1.CoinId), | |||
RewardType: utils.StrToInt(cfg.RewardRule.RewardType), | |||
InviteTime: int(userInfo.CreateAt.Unix()), | |||
Lv: lv, | |||
} | |||
db.InsertNewRewardLog(eg, extendRewardLog) | |||
} | |||
if extendRewardLog.GivenAt == 0 { | |||
extendRewardLog.CompleteCon = str | |||
extendRewardLog.IsFull = isFull | |||
if extendRewardLog.FullTime == 0 { | |||
extendRewardLog.FullTime = fullTime | |||
} | |||
if extendRewardLog.ToRewardTime == 0 { | |||
extendRewardLog.ToRewardTime = toRewardTime | |||
} | |||
eg.Where("id=?", extendRewardLog.Id).Update(extendRewardLog) | |||
} | |||
} | |||
} | |||
if utils.StrToFloat64(IndirectSuccess) > 0 { | |||
if nextUserProfile != nil && nextUserProfile.ParentUid > 0 { | |||
IndirectRewardLog, IndirectHas, _ := db.GetNewAcquisitionRewardLogWhereCoinId(eg, nextUserProfile.ParentUid, userProfile.Uid, lv, utils.StrToInt(v1.CoinId)) | |||
if !IndirectHas { | |||
IndirectRewardLog = &model.NewAcquisitionRewardLog{ | |||
Uid: nextUserProfile.ParentUid, | |||
ToUid: user.Profile.Uid, | |||
Title: user.Info.Nickname, | |||
Source: IndirectSource, | |||
SourceText: IndirectSourceStr, | |||
Money: IndirectSuccess, | |||
CreatedAt: int(time.Now().Unix()), | |||
State: 0, | |||
CoinId: utils.StrToInt(v1.CoinId), | |||
RewardType: utils.StrToInt(cfg.RewardRule.RewardType), | |||
InviteTime: int(userInfo.CreateAt.Unix()), | |||
Lv: lv, | |||
} | |||
db.InsertNewRewardLog(eg, IndirectRewardLog) | |||
} | |||
if IndirectRewardLog.GivenAt == 0 { | |||
IndirectRewardLog.CompleteCon = str | |||
IndirectRewardLog.IsFull = isFull | |||
if IndirectRewardLog.FullTime == 0 { | |||
IndirectRewardLog.FullTime = fullTime | |||
} | |||
if IndirectRewardLog.ToRewardTime == 0 { | |||
IndirectRewardLog.ToRewardTime = toRewardTime | |||
} | |||
eg.Where("id=?", IndirectRewardLog.Id).Update(IndirectRewardLog) | |||
} | |||
} | |||
} | |||
} | |||
} | |||
} else { | |||
InvitedReward := v.InvitedReward | |||
if cfg.RewardRule.RewardType == "1" { | |||
InvitedReward = Rands(v.InvitedReward, v.InvitedRewardMax) | |||
} | |||
//直推 | |||
DirectSuccess := v.DirectSuccess | |||
if cfg.RewardRule.RewardType == "1" { | |||
DirectSuccess = Rands(v.DirectSuccess, v.DirectSuccessMax) | |||
} | |||
//间推 | |||
IndirectSuccess := v.IndirectSuccess | |||
if cfg.RewardRule.RewardType == "1" { | |||
IndirectSuccess = Rands(v.IndirectSuccess, v.IndirectSuccessMax) | |||
} | |||
InvitedSource := 0 | |||
DirectSource := 1 | |||
IndirectSource := 2 | |||
InvitedSourceStr := "注册奖励" | |||
DirectSourceStr := "直推好友" | |||
IndirectSourceStr := "间推好友" | |||
if k > 0 { | |||
InvitedSource = 3 | |||
DirectSource = 4 | |||
IndirectSource = 5 | |||
InvitedSourceStr = "升级" + v.Name + "奖励" | |||
DirectSourceStr = "直推好友升级" + v.Name + "奖励" | |||
IndirectSourceStr = "间推好友升级" + v.Name + "奖励" | |||
} | |||
if utils.StrToFloat64(InvitedReward) > 0 { | |||
ownRewardLog, ownhas, _ := db.GetNewAcquisitionRewardLogWhere(eg, userProfile.Uid, user.Profile.Uid, lv) | |||
if !ownhas { | |||
ownRewardLog = &model.NewAcquisitionRewardLog{ | |||
Uid: user.Profile.Uid, | |||
ToUid: user.Profile.Uid, | |||
Title: user.Info.Nickname, | |||
Source: InvitedSource, | |||
SourceText: InvitedSourceStr, | |||
Money: InvitedReward, | |||
CreatedAt: int(time.Now().Unix()), | |||
State: 0, | |||
CoinId: utils.StrToInt(cfg.RewardRule.RewardCoinId), | |||
RewardType: utils.StrToInt(cfg.RewardRule.RewardType), | |||
InviteTime: int(userInfo.CreateAt.Unix()), | |||
Lv: lv, | |||
} | |||
db.InsertNewRewardLog(eg, ownRewardLog) | |||
} | |||
if ownRewardLog.GivenAt == 0 { | |||
ownRewardLog.CompleteCon = str | |||
ownRewardLog.IsFull = isFull | |||
if ownRewardLog.FullTime == 0 { | |||
ownRewardLog.FullTime = fullTime | |||
} | |||
if ownRewardLog.ToRewardTime == 0 { | |||
ownRewardLog.ToRewardTime = toRewardTime | |||
} | |||
eg.Where("id=?", ownRewardLog.Id).Update(ownRewardLog) | |||
} | |||
} | |||
if utils.StrToFloat64(DirectSuccess) > 0 { | |||
if userProfile.ParentUid > 0 { | |||
//写入奖励记录 | |||
extendRewardLog, extendHas, _ := db.GetNewAcquisitionRewardLogWhere(eg, userProfile.ParentUid, userProfile.Uid, lv) | |||
if !extendHas { | |||
extendRewardLog = &model.NewAcquisitionRewardLog{ | |||
Uid: user.Profile.ParentUid, | |||
ToUid: user.Profile.Uid, | |||
Title: user.Info.Nickname, | |||
Source: DirectSource, | |||
SourceText: DirectSourceStr, | |||
Money: DirectSuccess, | |||
CreatedAt: int(time.Now().Unix()), | |||
State: 0, | |||
CoinId: utils.StrToInt(cfg.RewardRule.RewardCoinId), | |||
RewardType: utils.StrToInt(cfg.RewardRule.RewardType), | |||
InviteTime: int(userInfo.CreateAt.Unix()), | |||
Lv: lv, | |||
} | |||
db.InsertNewRewardLog(eg, extendRewardLog) | |||
} | |||
if extendRewardLog.GivenAt == 0 { | |||
extendRewardLog.CompleteCon = str | |||
extendRewardLog.IsFull = isFull | |||
if extendRewardLog.FullTime == 0 { | |||
extendRewardLog.FullTime = fullTime | |||
} | |||
if extendRewardLog.ToRewardTime == 0 { | |||
extendRewardLog.ToRewardTime = toRewardTime | |||
} | |||
eg.Where("id=?", extendRewardLog.Id).Update(extendRewardLog) | |||
} | |||
} | |||
} | |||
if utils.StrToFloat64(IndirectSuccess) > 0 { | |||
if nextUserProfile != nil && nextUserProfile.ParentUid > 0 { | |||
IndirectRewardLog, IndirectHas, _ := db.GetNewAcquisitionRewardLogWhere(eg, nextUserProfile.ParentUid, userProfile.Uid, lv) | |||
if !IndirectHas { | |||
IndirectRewardLog = &model.NewAcquisitionRewardLog{ | |||
Uid: nextUserProfile.ParentUid, | |||
ToUid: user.Profile.Uid, | |||
Title: user.Info.Nickname, | |||
Source: IndirectSource, | |||
SourceText: IndirectSourceStr, | |||
Money: IndirectSuccess, | |||
CreatedAt: int(time.Now().Unix()), | |||
State: 0, | |||
CoinId: utils.StrToInt(cfg.RewardRule.RewardCoinId), | |||
RewardType: utils.StrToInt(cfg.RewardRule.RewardType), | |||
InviteTime: int(userInfo.CreateAt.Unix()), | |||
Lv: lv, | |||
} | |||
db.InsertNewRewardLog(eg, IndirectRewardLog) | |||
} | |||
if IndirectRewardLog.GivenAt == 0 { | |||
IndirectRewardLog.CompleteCon = str | |||
IndirectRewardLog.IsFull = isFull | |||
if IndirectRewardLog.FullTime == 0 { | |||
IndirectRewardLog.FullTime = fullTime | |||
} | |||
if IndirectRewardLog.ToRewardTime == 0 { | |||
IndirectRewardLog.ToRewardTime = toRewardTime | |||
} | |||
eg.Where("id=?", IndirectRewardLog.Id).Update(IndirectRewardLog) | |||
} | |||
} | |||
} | |||
} | |||
} | |||
} else { | |||
InvitedReward := cfg.RewardRule.InvitedReward | |||
if cfg.RewardRule.RewardType == "1" { | |||
InvitedReward = Rands(cfg.RewardRule.InvitedReward, cfg.RewardRule.InvitedRewardMax) | |||
} | |||
//直推 | |||
DirectSuccess := cfg.RewardRule.DirectSuccess | |||
if cfg.RewardRule.RewardType == "1" { | |||
DirectSuccess = Rands(cfg.RewardRule.DirectSuccess, cfg.RewardRule.DirectSuccessMax) | |||
} | |||
//间推 | |||
IndirectSuccess := cfg.RewardRule.IndirectSuccess | |||
if cfg.RewardRule.RewardType == "1" { | |||
IndirectSuccess = Rands(cfg.RewardRule.IndirectSuccess, cfg.RewardRule.IndirectSuccessMax) | |||
} | |||
if utils.StrToFloat64(InvitedReward) > 0 { | |||
ownRewardLog, ownhas, _ := db.GetNewAcquisitionRewardLog(eg, &model.NewAcquisitionRewardLog{ | |||
Uid: user.Profile.Uid, | |||
ToUid: user.Profile.Uid, | |||
}) | |||
if !ownhas { | |||
ownRewardLog = &model.NewAcquisitionRewardLog{ | |||
Uid: user.Profile.Uid, | |||
ToUid: user.Profile.Uid, | |||
Title: user.Info.Nickname, | |||
Source: 0, | |||
SourceText: "注册奖励", | |||
Money: InvitedReward, | |||
CreatedAt: int(time.Now().Unix()), | |||
State: 0, | |||
CoinId: utils.StrToInt(cfg.RewardRule.RewardCoinId), | |||
RewardType: utils.StrToInt(cfg.RewardRule.RewardType), | |||
InviteTime: int(userInfo.CreateAt.Unix()), | |||
Lv: lv, | |||
} | |||
db.InsertNewRewardLog(eg, ownRewardLog) | |||
} | |||
if ownRewardLog.GivenAt == 0 { | |||
ownRewardLog.CompleteCon = str | |||
ownRewardLog.IsFull = isFull | |||
if ownRewardLog.FullTime == 0 { | |||
ownRewardLog.FullTime = fullTime | |||
} | |||
if ownRewardLog.ToRewardTime == 0 { | |||
ownRewardLog.ToRewardTime = toRewardTime | |||
} | |||
eg.Where("id=?", ownRewardLog.Id).Update(ownRewardLog) | |||
} | |||
} | |||
if utils.StrToFloat64(DirectSuccess) > 0 { | |||
if userProfile.ParentUid > 0 { | |||
//写入奖励记录 | |||
extendRewardLog, extendHas, _ := db.GetNewAcquisitionRewardLog(eg, &model.NewAcquisitionRewardLog{ | |||
Uid: userProfile.ParentUid, | |||
ToUid: userProfile.Uid, | |||
}) | |||
if !extendHas { | |||
extendRewardLog = &model.NewAcquisitionRewardLog{ | |||
Uid: user.Profile.ParentUid, | |||
ToUid: user.Profile.Uid, | |||
Title: user.Info.Nickname, | |||
Source: 1, | |||
SourceText: "直推好友", | |||
Money: DirectSuccess, | |||
CreatedAt: int(time.Now().Unix()), | |||
State: 0, | |||
CoinId: utils.StrToInt(cfg.RewardRule.RewardCoinId), | |||
RewardType: utils.StrToInt(cfg.RewardRule.RewardType), | |||
InviteTime: int(userInfo.CreateAt.Unix()), | |||
Lv: lv, | |||
} | |||
db.InsertNewRewardLog(eg, extendRewardLog) | |||
} | |||
if extendRewardLog.GivenAt == 0 { | |||
extendRewardLog.CompleteCon = str | |||
extendRewardLog.IsFull = isFull | |||
if extendRewardLog.FullTime == 0 { | |||
extendRewardLog.FullTime = fullTime | |||
} | |||
if extendRewardLog.ToRewardTime == 0 { | |||
extendRewardLog.ToRewardTime = toRewardTime | |||
} | |||
eg.Where("id=?", extendRewardLog.Id).Update(extendRewardLog) | |||
} | |||
} | |||
} | |||
if utils.StrToFloat64(IndirectSuccess) > 0 { | |||
if nextUserProfile != nil && nextUserProfile.ParentUid > 0 { | |||
IndirectRewardLog, IndirectHas, _ := db.GetNewAcquisitionRewardLog(eg, &model.NewAcquisitionRewardLog{ | |||
Uid: nextUserProfile.ParentUid, | |||
ToUid: userProfile.Uid, | |||
}) | |||
if !IndirectHas { | |||
IndirectRewardLog = &model.NewAcquisitionRewardLog{ | |||
Uid: nextUserProfile.ParentUid, | |||
ToUid: user.Profile.Uid, | |||
Title: user.Info.Nickname, | |||
Source: 2, | |||
SourceText: "间推好友", | |||
Money: IndirectSuccess, | |||
CreatedAt: int(time.Now().Unix()), | |||
State: 0, | |||
CoinId: utils.StrToInt(cfg.RewardRule.RewardCoinId), | |||
RewardType: utils.StrToInt(cfg.RewardRule.RewardType), | |||
InviteTime: int(userInfo.CreateAt.Unix()), | |||
Lv: lv, | |||
} | |||
db.InsertNewRewardLog(eg, IndirectRewardLog) | |||
} | |||
if IndirectRewardLog.GivenAt == 0 { | |||
IndirectRewardLog.CompleteCon = str | |||
IndirectRewardLog.IsFull = isFull | |||
if IndirectRewardLog.FullTime == 0 { | |||
IndirectRewardLog.FullTime = fullTime | |||
} | |||
if IndirectRewardLog.ToRewardTime == 0 { | |||
IndirectRewardLog.ToRewardTime = toRewardTime | |||
} | |||
eg.Where("id=?", IndirectRewardLog.Id).Update(IndirectRewardLog) | |||
} | |||
} | |||
} | |||
} | |||
return nil | |||
} | |||
func Rands(minVal, maxVal string) string { | |||
min := int(utils.StrToFloat64(minVal) * 100) | |||
max := int(utils.StrToFloat64(maxVal) * 100) | |||
return utils.Float64ToStrByPrec(float64(utils.RandIntRand(min, max))/100, 3) | |||
} | |||
//判断是否符合条件 | |||
func checkAllCompleteTmp(eg *xorm.Engine, user *md.User, acqCfg *md.AcquisitionCfg) (bool, string) { | |||
res := true | |||
str := "" | |||
if acqCfg.SuccessConditions.Register.Open == "1" { | |||
res = res && AcqRegisterTmp(user, acqCfg) | |||
if res { | |||
str += ",Register" | |||
} | |||
} | |||
if acqCfg.SuccessConditions.TaobaoAuthorization.Open == "1" { | |||
res = res && AcqTaoBaoAuthTmp(user, acqCfg) | |||
if res { | |||
str += ",TaobaoAuthorization" | |||
} | |||
} | |||
if acqCfg.SuccessConditions.FirstOrder.Open == "1" { | |||
res = res && AcqFirstOrder(eg, user, acqCfg) | |||
if res { | |||
str += ",FirstOrder" | |||
} | |||
} | |||
if acqCfg.SuccessConditions.SelfOrder.Open == "1" { | |||
res = res && AcqSelfOrder(eg, user, acqCfg) | |||
if res { | |||
str += ",SelfOrder" | |||
} | |||
} | |||
if acqCfg.SuccessConditions.OrderPay.Open == "1" { | |||
//AcqOrderPay(eg, user, acqCfg) | |||
res = res && AcqOrderPay(eg, user, acqCfg) | |||
if res { | |||
str += ",OrderPay" | |||
} | |||
} | |||
if len(str) > 0 { | |||
str = str[1:] | |||
} | |||
return res, str | |||
} | |||
func AcqRegisterTmp(user *md.User, acqCfg *md.AcquisitionCfg) bool { | |||
var startTime = utils.TimeStdParseUnix(acqCfg.StartTime) | |||
var endTime = utils.TimeStdParseUnix(acqCfg.EndTime) | |||
if startTime == 0 || endTime == 0 { | |||
return false | |||
} | |||
//时间不在活动范围之内返回false | |||
if user.Info.CreateAt.Unix() < startTime { | |||
return false | |||
} | |||
if user.Info.CreateAt.Unix() > endTime { | |||
return false | |||
} | |||
return true | |||
} | |||
func AcqTaoBaoAuthTmp(user *md.User, acqCfg *md.AcquisitionCfg) bool { | |||
if user.Profile.AccTaobaoAuthTime > 0 { | |||
return true | |||
} | |||
return false | |||
} | |||
func AcqFirstOrder(eg *xorm.Engine, user *md.User, acqCfg *md.AcquisitionCfg) bool { | |||
endTime := int(user.Info.CreateAt.Unix()) + utils.StrToInt(acqCfg.SuccessConditions.FirstOrder.Day)*86400 | |||
return commAmount(eg, utils.IntToStr(user.Info.Uid), endTime, 0, acqCfg) | |||
} | |||
func AcqSelfOrder(eg *xorm.Engine, user *md.User, acqCfg *md.AcquisitionCfg) bool { | |||
return commAmount(eg, utils.IntToStr(user.Info.Uid), 0, 2, acqCfg) | |||
} | |||
func AcqOrderPay(eg *xorm.Engine, user *md.User, acqCfg *md.AcquisitionCfg) bool { | |||
return commAmount(eg, utils.IntToStr(user.Info.Uid), 0, 1, acqCfg) | |||
} | |||
func sqlSelect(eg *xorm.Engine, uid string, endTime, types int, acqCfg *md.AcquisitionCfg, arr []string) int { | |||
sql := `SELECT COUNT(*) as count FROM %s ol | |||
LEFT JOIN %s olr on olr.oid=%s and olr.uid=%s | |||
WHERE ol.uid=? %s %s | |||
` | |||
str := "" | |||
if endTime > 0 { | |||
str += " AND olr.create_at<=" + utils.IntToStr(endTime) | |||
} | |||
if types == 2 { | |||
str += " AND olr.amount>=" + acqCfg.SuccessConditions.SelfOrder.Money | |||
} | |||
if types == 1 { | |||
str += " AND %s>=" + acqCfg.SuccessConditions.OrderPay.Money | |||
str = fmt.Sprintf(str, arr[0]) | |||
} | |||
sqlOrd := fmt.Sprintf(sql, arr[1], arr[2], arr[3], arr[4], str, arr[5]) | |||
ordResult, err := db.QueryNativeString(eg, sqlOrd, uid) | |||
fmt.Println(sqlOrd) | |||
fmt.Println(err) | |||
count := 0 | |||
for _, v := range ordResult { | |||
count = utils.StrToInt(v["count"]) | |||
} | |||
return count | |||
} | |||
func commAmount(eg *xorm.Engine, uid string, endTime, types int, acqCfg *md.AcquisitionCfg) bool { | |||
state := "0,1,2,3,5" | |||
psoState := "'订单付款','订单结算'" | |||
mallState := "1,2,3" | |||
o2oState := "1,2,3,4" | |||
b2cState := "1,2,3,4" | |||
if acqCfg.SuccessConditions.FirstOrder.Status == "1" { | |||
state = "1,2,3,5" | |||
mallState = "2,3" | |||
o2oState = "2,3,4" | |||
b2cState = "2,3,4" | |||
} | |||
if acqCfg.SuccessConditions.FirstOrder.Status == "2" { | |||
state = "2,3,5" | |||
mallState = "2,3" | |||
o2oState = "2,3,4" | |||
b2cState = "2,3,4" | |||
} | |||
if acqCfg.SuccessConditions.FirstOrder.Status == "3" { | |||
state = "3,5" | |||
mallState = "3" | |||
o2oState = "3,4" | |||
b2cState = "3,4" | |||
psoState = "'订单结算'" | |||
} | |||
arr := []string{"ol.paid_price", "ord_list", "ord_list_relate", "ol.ord_id", "ol.uid", " and ol.state in(" + state + ")"} | |||
count := sqlSelect(eg, uid, endTime, types, acqCfg, arr) | |||
arr = []string{"ol.paid_price", "privilege_card_ord", "ord_list_relate", "ol.ord_id", "ol.uid", " and ol.state=1"} | |||
count += sqlSelect(eg, uid, endTime, types, acqCfg, arr) | |||
arr = []string{"ol.money", "express_order", "ord_list_relate", "ol.oid", "ol.uid", " and ol.status in('待取件','运输中','已完成')"} | |||
count += sqlSelect(eg, uid, endTime, types, acqCfg, arr) | |||
arr = []string{"ol.commission", "duoyou_ord_list", "ord_list_relate", "ol.oid", "ol.uid", " and ol.id>0"} | |||
count += sqlSelect(eg, uid, endTime, types, acqCfg, arr) | |||
arr = []string{"ol.amount", "recharge_order", "ord_list_relate", "ol.oid", "ol.uid", " and ol.status<>'已退款'"} | |||
count += sqlSelect(eg, uid, endTime, types, acqCfg, arr) | |||
arr = []string{"ol.amount", "playlet_sale_order", "ord_list_relate", "ol.custom_oid", "ol.uid", " and ol.status in(" + psoState + ")"} | |||
count += sqlSelect(eg, uid, endTime, types, acqCfg, arr) | |||
arr = []string{"ol.cost_price", "mall_ord", "mall_ord_list_relate", "ol.ord_id", "ol.uid", " and ol.state in(" + mallState + ")"} | |||
count += sqlSelect(eg, uid, endTime, types, acqCfg, arr) | |||
arr = []string{"ol.cost_price", "o2o_ord", "o2o_ord_list_relate", "ol.ord_id", "ol.uid", " and ol.state in(" + o2oState + ")"} | |||
count += sqlSelect(eg, uid, endTime, types, acqCfg, arr) | |||
arr = []string{"ol.actual_pay_amount", "o2o_pay_to_merchant", "o2o_ord_list_relate", "ol.pay_id", "ol.uid", " and ol.state >=1"} | |||
count += sqlSelect(eg, uid, endTime, types, acqCfg, arr) | |||
arr = []string{"ol.cost_price", "b2c_ord", "b2c_ord_list_relate", "ol.ord_id", "ol.uid", " and ol.state in(" + b2cState + ")"} | |||
count += sqlSelect(eg, uid, endTime, types, acqCfg, arr) | |||
if count > 0 { | |||
return true | |||
} | |||
return false | |||
} |
@@ -1,59 +0,0 @@ | |||
package consume | |||
import ( | |||
"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 ZhiosAcquisitionConditionDev(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(300) | |||
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(">>>>>>>>>>>>>>>>ZhiosAcquisitionCondition<<<<<<<<<<<<<<<<<<<<<<<<<") | |||
err = handleZhiosAcquisition(res.Body) | |||
//_ = res.Reject(false) | |||
fmt.Println(err) | |||
if err == nil { | |||
_ = res.Ack(true) | |||
} else { | |||
var canalMsg *md.ZhiosAcquisition | |||
var tmpString string | |||
err := json.Unmarshal(res.Body, &tmpString) | |||
if err == nil { | |||
fmt.Println(tmpString) | |||
err = json.Unmarshal([]byte(tmpString), &canalMsg) | |||
if err == nil { | |||
ch.Publish(queue.ExchangeName, utils.SerializeStr(canalMsg), queue.RoutKey) | |||
} | |||
} | |||
} | |||
} else { | |||
panic(errors.New("error getting message")) | |||
} | |||
} | |||
fmt.Println("get msg done") | |||
} |
@@ -1,326 +0,0 @@ | |||
package consume | |||
import ( | |||
"applet/app/db" | |||
"applet/app/db/model" | |||
"applet/app/svc" | |||
"applet/app/utils" | |||
"applet/app/utils/logx" | |||
"applet/consume/md" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git/rabbit" | |||
md2 "code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/md" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/rule" | |||
"encoding/json" | |||
"errors" | |||
"fmt" | |||
"github.com/streadway/amqp" | |||
"xorm.io/xorm" | |||
) | |||
func ZhiosAppreciation(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(1) | |||
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 = handleZhiosAppreciation(res.Body) | |||
//_ = res.Reject(false) | |||
if err == nil { | |||
_ = res.Ack(true) | |||
} | |||
} else { | |||
panic(errors.New("error getting message")) | |||
} | |||
} | |||
fmt.Println("get msg done") | |||
} | |||
func handleZhiosAppreciation(msg []byte) error { | |||
//1、解析canal采集至mq中queue的数据结构体 | |||
var canalMsg *md.ZhiosAppreciation | |||
fmt.Println(string(msg)) | |||
var tmpString string | |||
err := json.Unmarshal(msg, &tmpString) | |||
if err != nil { | |||
fmt.Println("===with", err.Error()) | |||
return err | |||
} | |||
fmt.Println(tmpString) | |||
err = json.Unmarshal([]byte(tmpString), &canalMsg) | |||
if err != nil { | |||
fmt.Println("===with", err.Error()) | |||
return err | |||
} | |||
mid := canalMsg.Mid | |||
eg := db.DBs[mid] | |||
if eg == nil { | |||
return nil | |||
} | |||
//类型 转入 exchange | |||
if canalMsg.Type == "exchange" { | |||
err := exchange(eg, canalMsg) | |||
if err != nil { | |||
return err | |||
} | |||
} | |||
//类型 提现 withdraw 到余额 | |||
if canalMsg.Type == "withdraw" { | |||
err := withdraw(eg, canalMsg) | |||
if err != nil { | |||
return err | |||
} | |||
} | |||
//类型 购物销毁 | |||
if canalMsg.Type == "destroy" { | |||
err := destroy(eg, canalMsg) | |||
if err != nil { | |||
return err | |||
} | |||
} | |||
//类型 购物退回 | |||
if canalMsg.Type == "buy_refund" { | |||
err := buyRefund(eg, canalMsg) | |||
if err != nil { | |||
return err | |||
} | |||
} | |||
return nil | |||
} | |||
//转入 操作加入资金池和加入积分 | |||
func exchange(eg *xorm.Engine, msg *md.ZhiosAppreciation) error { | |||
sess := eg.NewSession() | |||
defer sess.Close() | |||
sess.Begin() | |||
//计算出当前的价值 | |||
args := make(map[string]string) | |||
json.Unmarshal([]byte(msg.Ext), &args) | |||
biliMap := caleBili(eg, sess, msg.Mid, args) | |||
ordId := utils.OrderUUID(utils.StrToInt(msg.Uid)) | |||
coinMapInUse, _ := db.VirtualCoinMapInUse(eg, msg.Mid, "") | |||
//积分加入 | |||
title := coinMapInUse[args["id"]].Name + "-转入" | |||
appreciationCoinId := db.SysCfgGetWithDb(eg, msg.Mid, "appreciation_coin_id") | |||
_, err := svc.ExchangeUserVirFinValidAndInterFlowWithSession(sess, | |||
utils.StrToFloat64(biliMap["in_coin"]), title, "0", 1, 109, utils.StrToInt(msg.Uid), utils.StrToInt(appreciationCoinId), 0, utils.StrToInt64(ordId), "", 0, 0) | |||
if err != nil { | |||
sess.Rollback() | |||
return err | |||
} | |||
base := db.GetAppreciationBase(sess) | |||
beforeValue := "0" | |||
beforeFlowValue := "0" | |||
if base != nil { | |||
beforeValue = base.Sum | |||
beforeFlowValue = base.FlowSum | |||
} | |||
err = db.InsertAppreciation(sess, appreciationCoinId, msg.Uid, "0", "0", msg.Oid, biliMap["coin"], biliMap["in_coin"], beforeValue, beforeFlowValue) | |||
if err != nil { | |||
sess.Rollback() | |||
return err | |||
} | |||
//加入资金池 | |||
sql := `UPDATE appreciation_base SET sum=sum+?,flow_sum=flow_sum+? WHERE is_use=1;` | |||
_, err = sess.Exec(sql, utils.StrToFloat64(biliMap["coin"]), utils.StrToFloat64(biliMap["in_coin"])) | |||
if err != nil { | |||
sess.Rollback() | |||
return err | |||
} | |||
sess.Commit() | |||
return nil | |||
} | |||
//提现 | |||
func withdraw(eg *xorm.Engine, msg *md.ZhiosAppreciation) error { | |||
sess := eg.NewSession() | |||
defer sess.Close() | |||
sess.Begin() | |||
args := make(map[string]string) | |||
json.Unmarshal([]byte(msg.Ext), &args) | |||
//资产价值 | |||
price := "" | |||
appreciationWithdrawFee := db.SysCfgGetWithDb(eg, msg.Mid, "appreciation_withdraw_fee") | |||
appreciationWithdrawBack := db.SysCfgGetWithDb(eg, msg.Mid, "appreciation_withdraw_back") | |||
feeMap := md2.DealWithdrawalFeeResp{ | |||
WithdrawalCommissionFee: utils.StrToFloat64(appreciationWithdrawFee) / 100, | |||
WithdrawalDestroyFee: (utils.StrToFloat64(appreciationWithdrawFee) - utils.StrToFloat64(appreciationWithdrawBack)) / 100, | |||
WithdrawalRefluxFee: utils.StrToFloat64(appreciationWithdrawBack) / 100, | |||
} | |||
_, resp := rule.DealWithdrawalAndDestroy(sess, feeMap, utils.StrToFloat64(args["amount"])) | |||
//这是到手的 | |||
newAmount := utils.GetPrec(utils.Float64ToStrByPrec(resp.TransferOutValue-resp.AmountOut, 5), "4") | |||
//扣的 | |||
coinSum := utils.GetPrec(utils.Float64ToStrByPrec(resp.TransferOutValue-resp.RefluxValue, 20), "4") | |||
price = utils.GetPrec(utils.Float64ToStrByPrec(resp.Price, 20), "4") | |||
err := svc.UpdateUserFinValidAndInterFlowSess(sess, | |||
newAmount, args["amount"]+"个数字资产转余额,价值"+price+"/个", "appreciation", 0, 56, utils.StrToInt(msg.Uid), utils.StrToInt(msg.Oid), utils.StrToInt64(msg.Oid), utils.StrToInt64(msg.Oid)) | |||
if err != nil { | |||
sess.Rollback() | |||
return err | |||
} | |||
base := db.GetAppreciationBase(sess) | |||
beforeValue := "0" | |||
beforeFlowValue := "0" | |||
if base != nil { | |||
beforeValue = base.Sum | |||
beforeFlowValue = base.FlowSum | |||
} | |||
appreciationCoinId := db.SysCfgGetWithDb(eg, msg.Mid, "appreciation_coin_id") | |||
//转出 | |||
err = db.InsertAppreciation(sess, appreciationCoinId, msg.Uid, "1", "1", msg.Oid, args["amount"], args["amount"], beforeValue, beforeFlowValue) | |||
if err != nil { | |||
sess.Rollback() | |||
return err | |||
} | |||
////销毁的 | |||
beforeValue = utils.GetPrec(utils.Float64ToStrByPrec(utils.StrToFloat64(beforeValue)-resp.TransferOutValue, 5), "4") | |||
beforeFlowValue = utils.GetPrec(utils.Float64ToStrByPrec(utils.StrToFloat64(beforeFlowValue)-utils.StrToFloat64(args["amount"]), 5), "4") | |||
//DestroyValue := utils.GetPrec(utils.Float64ToStrByPrec(resp.DestroyValue, 5), "4") | |||
//err = db.InsertAppreciation(sess, appreciationCoinId, args["uid"], "2", "1", DestroyValue, "0", beforeValue, beforeFlowValue) | |||
//if err != nil { | |||
// sess.Rollback() | |||
// return err | |||
//} | |||
//回流的 | |||
RefluxValue := utils.GetPrec(utils.Float64ToStrByPrec(resp.RefluxValue, 5), "4") | |||
err = db.InsertAppreciation(sess, appreciationCoinId, msg.Uid, "3", "0", msg.Oid, RefluxValue, "0", beforeValue, beforeFlowValue) | |||
if err != nil { | |||
sess.Rollback() | |||
return err | |||
} | |||
sql := `UPDATE appreciation_base SET sum=sum-?,flow_sum=flow_sum-? WHERE is_use=1;` | |||
_, err = eg.Exec(sql, utils.StrToFloat64(coinSum), utils.StrToFloat64(args["amount"])) | |||
if err != nil { | |||
sess.Rollback() | |||
return err | |||
} | |||
sess.Where("ord_id=?", msg.Oid).Cols("price").Update(&model.UserVirtualCoinFlow{Price: price}) | |||
sess.Commit() | |||
return nil | |||
} | |||
//购物销毁 | |||
func destroy(eg *xorm.Engine, msg *md.ZhiosAppreciation) error { | |||
args := make(map[string]string) | |||
json.Unmarshal([]byte(msg.Ext), &args) | |||
sess := eg.NewSession() | |||
defer sess.Close() | |||
sess.Begin() | |||
base := db.GetAppreciationBase(sess) | |||
beforeValue := "0" | |||
beforeFlowValue := "0" | |||
if base != nil { | |||
beforeValue = base.Sum | |||
beforeFlowValue = base.FlowSum | |||
} | |||
appreciationCoinId := db.SysCfgGetWithDb(eg, msg.Mid, "appreciation_coin_id") | |||
//转出 | |||
err := db.InsertAppreciation(sess, appreciationCoinId, msg.Uid, "4", "1", msg.Oid, args["coinPrice"], args["amount"], beforeValue, beforeFlowValue) | |||
if err != nil { | |||
sess.Rollback() | |||
return err | |||
} | |||
sql := `UPDATE appreciation_base SET sum=sum-?,flow_sum=flow_sum-? WHERE is_use=1;` | |||
_, err = eg.Exec(sql, utils.StrToFloat64(args["coinPrice"]), utils.StrToFloat64(args["amount"])) | |||
if err != nil { | |||
sess.Rollback() | |||
return err | |||
} | |||
sess.Commit() | |||
return nil | |||
} | |||
//购物退回 | |||
func buyRefund(eg *xorm.Engine, msg *md.ZhiosAppreciation) error { | |||
args := make(map[string]string) | |||
json.Unmarshal([]byte(msg.Ext), &args) | |||
sess := eg.NewSession() | |||
defer sess.Close() | |||
sess.Begin() | |||
base := db.GetAppreciationBase(sess) | |||
beforeValue := "0" | |||
beforeFlowValue := "0" | |||
if base != nil { | |||
beforeValue = base.Sum | |||
beforeFlowValue = base.FlowSum | |||
} | |||
appreciationCoinId := db.SysCfgGetWithDb(eg, msg.Mid, "appreciation_coin_id") | |||
//转出 | |||
err := db.InsertAppreciation(sess, appreciationCoinId, msg.Uid, "5", "0", msg.Oid, args["coinPrice"], args["amount"], beforeValue, beforeFlowValue) | |||
if err != nil { | |||
sess.Rollback() | |||
return err | |||
} | |||
sql := `UPDATE appreciation_base SET sum=sum+?,flow_sum=flow_sum+? WHERE is_use=1;` | |||
_, err = eg.Exec(sql, utils.StrToFloat64(args["coinPrice"]), utils.StrToFloat64(args["amount"])) | |||
if err != nil { | |||
sess.Rollback() | |||
return err | |||
} | |||
sess.Commit() | |||
return nil | |||
} | |||
func caleBili(eg *xorm.Engine, sess *xorm.Session, dbName string, args map[string]string) map[string]string { | |||
appreciationCoinId := db.SysCfgGetWithDb(eg, dbName, "appreciation_coin_id") | |||
bCoinStr := "" | |||
bcoin := "" | |||
if args["id"] == "cny" { | |||
bCoinStr = args["amount"] | |||
} else { | |||
ids := []string{args["id"], appreciationCoinId} | |||
coin := db.VirtualCoinByIds(eg, ids) | |||
aCoinBili := coin[args["id"]].ExchangeRatio | |||
//1:5=X:money X= 1:5*money | |||
amoney := (1 / utils.StrToFloat64(aCoinBili)) * utils.StrToFloat64(args["amount"]) | |||
bcoin = utils.GetPrec(utils.Float64ToStrByPrec(amoney, 5), "4") | |||
//这是只返70% | |||
appreciationCoinFee := db.SysCfgGetWithDb(eg, dbName, "appreciation_coin_fee") | |||
bCoins := amoney * (utils.StrToFloat64(appreciationCoinFee) / 100) | |||
//除以当前的资产价值 | |||
_, value := rule.DealTransferIn(sess, bCoins) | |||
bCoins = value | |||
bCoinStr = utils.GetPrec(utils.Float64ToStrByPrec(bCoins, 20), "4") | |||
} | |||
res := map[string]string{ | |||
"in_coin": bCoinStr, | |||
"coin": bcoin, | |||
} | |||
return res | |||
} | |||
func coinPriceEg(eg *xorm.Engine) map[string]string { | |||
base := db.GetAppreciationBaseEg(eg) | |||
sum := "0" | |||
flowSum := "0" | |||
price := "1" | |||
if base != nil { | |||
sum = base.Sum | |||
flowSum = base.FlowSum | |||
} | |||
price = utils.GetPrec(utils.Float64ToStrByPrec(utils.StrToFloat64(sum)/utils.StrToFloat64(flowSum), 5), "4") | |||
res := map[string]string{ | |||
"price": price, | |||
"sum": sum, | |||
"flow_sum": flowSum, | |||
} | |||
return res | |||
} |
@@ -1,168 +0,0 @@ | |||
package consume | |||
import ( | |||
"applet/app/db" | |||
model2 "applet/app/db/model" | |||
"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" | |||
"github.com/syyongx/php2go" | |||
"time" | |||
"xorm.io/xorm" | |||
) | |||
func ZhiosCapitalPoolOrderTotal(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(20) | |||
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 = handleZhiosCapitalPoolOrderTotal(res.Body) | |||
//_ = res.Reject(false) | |||
if err == nil { | |||
_ = res.Ack(true) | |||
} | |||
} else { | |||
panic(errors.New("error getting message")) | |||
} | |||
} | |||
fmt.Println("get msg done") | |||
} | |||
func handleZhiosCapitalPoolOrderTotal(msg []byte) error { | |||
//1、解析canal采集至mq中queue的数据结构体 | |||
var canalMsg *md.ZhiosCapitalPoolOrderTotal | |||
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] | |||
err = AddUserOrdTotal(eg, canalMsg.Mid, canalMsg.Uid, canalMsg.Runtime, canalMsg.TotalTime, canalMsg.BonusLevelType, canalMsg.Level) | |||
if err != nil { | |||
fmt.Println(err) | |||
return err | |||
} | |||
return nil | |||
} | |||
func AddUserOrdTotal(eg *xorm.Engine, dbName string, uids []string, runtime, totalTime int64, leveType int, level string) error { | |||
if len(uids) == 0 { | |||
return nil | |||
} | |||
m := GetUserOrdTotal(eg, uids, totalTime) | |||
var data []model2.CapitalPoolOrderTotal | |||
err := eg.In("uid", uids).And("create_time=? and level_type=? and level=?", time.Unix(runtime, 0).Format("2006-01-02"), leveType, level).Find(&data) | |||
var userData = make(map[string]model2.CapitalPoolOrderTotal) | |||
if err == nil { | |||
for _, v := range data { | |||
userData[utils.IntToStr(v.Uid)] = v | |||
} | |||
} | |||
for k, v := range m { | |||
user, ok := userData[k] | |||
if ok { | |||
user.Sum = utils.Float64ToStrByPrec(v, 2) | |||
user.UpdateTime = time.Now() | |||
eg.Where("id=?", user.Id).Cols("sum,update_time").Update(&user) | |||
} else { | |||
fmt.Println(time.Unix(runtime, 0).Format("2006-01-02")) | |||
var userDatas = &model2.CapitalPoolOrderTotal{ | |||
Uid: utils.StrToInt(k), | |||
Sum: utils.Float64ToStrByPrec(v, 2), | |||
CreateTime: time.Unix(runtime, 0).Format("2006-01-02"), | |||
UpdateTime: time.Now(), | |||
LevelType: leveType, | |||
Level: utils.StrToInt(level), | |||
} | |||
fmt.Println(userDatas) | |||
_, err := eg.InsertOne(userDatas) | |||
if err != nil { | |||
utils.FilePutContents(dbName+"capital", utils.SerializeStr(userDatas)) | |||
utils.FilePutContents(dbName+"capital", err.Error()) | |||
return err | |||
} | |||
} | |||
} | |||
sum, _ := eg.Where("create_time=? and level_type=? and level=?", time.Unix(runtime, 0).Format("2006-01-02"), leveType, level).Sum(&model2.CapitalPoolOrderTotal{}, "sum") | |||
fmt.Println(sum) | |||
sql := `UPDATE capital_pool_order_total SET all_sum=%f WHERE create_time='%s' and level_type=%d and level=%s;` | |||
sql = fmt.Sprintf(sql, sum, time.Unix(runtime, 0).Format("2006-01-02"), leveType, level) | |||
db.QueryNativeString(eg, sql) | |||
return nil | |||
} | |||
func GetUserOrdTotal(eg *xorm.Engine, uids []string, totalTime int64) map[string]float64 { | |||
totalTimeStr := time.Unix(totalTime, 0) | |||
var userMap = make(map[string]float64, 0) | |||
if len(uids) == 0 { | |||
return userMap | |||
} | |||
uidStr := php2go.Implode(",", uids) | |||
guideSql := `SELECT SUM(paid_price) AS amount,uid FROM ord_list WHERE uid IN (%s) AND state IN(%s) AND confirm_at>=%d GROUP BY uid;` | |||
guideSql = fmt.Sprintf(guideSql, uidStr, "1,2,3,5", totalTime) | |||
guide, err := db.QueryNativeString(eg, guideSql) | |||
fmt.Println(err) | |||
if len(guide) > 0 { | |||
for _, v := range guide { | |||
userMap[v["uid"]] += utils.StrToFloat64(v["amount"]) | |||
} | |||
} | |||
mallSql := `SELECT SUM(cost_price) AS amount,uid FROM mall_ord WHERE uid IN (%s) AND state IN(%s) AND confirm_time>='%s' GROUP BY uid;` | |||
mallSql = fmt.Sprintf(mallSql, uidStr, "3", totalTimeStr) | |||
mall, err := db.QueryNativeString(eg, mallSql) | |||
fmt.Println(err) | |||
if len(mall) > 0 { | |||
for _, v := range mall { | |||
userMap[v["uid"]] += utils.StrToFloat64(v["amount"]) | |||
} | |||
} | |||
cardSql := `SELECT SUM(paid_price) AS amount,uid FROM privilege_card_ord WHERE uid IN (%s) AND state IN(%s) AND created_at>=%d GROUP BY uid;` | |||
cardSql = fmt.Sprintf(cardSql, uidStr, "1", totalTime) | |||
card, err := db.QueryNativeString(eg, cardSql) | |||
fmt.Println(err) | |||
if len(card) > 0 { | |||
for _, v := range card { | |||
userMap[v["uid"]] += utils.StrToFloat64(v["amount"]) | |||
} | |||
} | |||
rechargeSql := `SELECT SUM(amount) AS amount,uid FROM recharge_order WHERE uid IN (%s) AND status='已付款' AND create_time>='%s' GROUP BY uid;` | |||
rechargeSql = fmt.Sprintf(rechargeSql, uidStr, time.Unix(totalTime, 0).Format("2006-01-02 15:04:05")) | |||
recharge, err := db.QueryNativeString(eg, rechargeSql) | |||
fmt.Println(err) | |||
if len(recharge) > 0 { | |||
for _, v := range recharge { | |||
userMap[v["uid"]] += utils.StrToFloat64(v["amount"]) | |||
} | |||
} | |||
return userMap | |||
} |
@@ -1,263 +0,0 @@ | |||
package consume | |||
import ( | |||
"applet/app/db" | |||
"applet/app/db/offical" | |||
"applet/app/db/offical/model" | |||
"applet/app/e" | |||
"applet/app/svc" | |||
"applet/app/utils" | |||
"applet/app/utils/cache" | |||
"applet/app/utils/logx" | |||
"applet/consume/md" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git/rabbit" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_third_party_api.git/express" | |||
"encoding/json" | |||
"errors" | |||
"fmt" | |||
"github.com/streadway/amqp" | |||
"github.com/tidwall/gjson" | |||
"time" | |||
) | |||
func ZhiosExpressOrderFail(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(1) | |||
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 = handleZhiosExpressOrderFail(res.Body) | |||
//_ = res.Reject(false) | |||
if err == nil { | |||
_ = res.Ack(true) | |||
} | |||
} else { | |||
panic(errors.New("error getting message")) | |||
} | |||
} | |||
fmt.Println("get msg done") | |||
} | |||
func handleZhiosExpressOrderFail(msg []byte) error { | |||
//1、解析canal采集至mq中queue的数据结构体 | |||
var canalMsg *md.ZhiosExpressOrderFails | |||
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] | |||
if eg == nil { | |||
return nil | |||
} | |||
//判断订单是否订单失败 | |||
ord := db.GetExpressWithOid(eg, canalMsg.Oid) | |||
officialOrd := offical.GetExpressWithOid(canalMsg.Oid) | |||
if ord.Status == "已退回" { | |||
return nil | |||
} | |||
ordExpressPlatform := utils.IntToStr(ord.ExpressPlatform) | |||
base := CommBase(mid, ordExpressPlatform) | |||
if canalMsg.IsFail != "1" { //查下订单详情 | |||
param := map[string]interface{}{ | |||
"clientOrderNo": canalMsg.Oid, | |||
} | |||
order, _ := express.ShowOrder(base, param) | |||
if gjson.Get(order, "code").Int() == 500 || gjson.Get(order, "code").String() != "00" || gjson.Get(order, "data.status").String() == "CANCELED" { | |||
ord.Status = "订单失败" | |||
} | |||
} | |||
if ord.Status == "订单失败" || ord.Status == "已取消" { | |||
ord.Status = "已退回" | |||
ord.IsRefund = 1 | |||
ord.RefundTime = time.Now() | |||
if ord.Own != 1 { | |||
officialOrd.Status = "已退回" | |||
officialOrd.IsRefund = 1 | |||
officialOrd.RefundTime = time.Now() | |||
db.Db.Where("oid=?", officialOrd.Oid).Update(officialOrd) | |||
} | |||
eg.Where("oid=?", ord.Oid).Update(ord) | |||
svc.DealMoneyWithEg(eg, ord.Uid, ord.Money, 56, utils.StrToInt64(ord.Oid), 0, 0, "快递退款", "express", 0) | |||
if ord.AgentPay == 1 { | |||
agentDeduct(ord.Oid, base, ord.AgentPrice) | |||
} | |||
if ord.StationPay == 1 { | |||
stationDeduct(mid, ord.Oid, base, ord.StationPrice) | |||
} | |||
} | |||
return nil | |||
} | |||
//站长预存款扣除 | |||
func stationDeduct(dbName, oid string, base map[string]string, price string) (error, int) { | |||
eg := db.Db | |||
var user model.ExpressUserMoney | |||
get, err := eg.Where("uid=? and agent_uid=?", dbName, base["puid"]).Get(&user) | |||
if get == false || err != nil { | |||
return e.NewErr(400, "站点预存款不足!"), 0 | |||
} | |||
user.Money = utils.Float64ToStr(utils.StrToFloat64(user.Money) + utils.StrToFloat64(price)) | |||
_, err = eg.Where("id=?", user.Id).Update(&user) | |||
if err != nil { | |||
return e.NewErr(400, "站点预存款扣除失败!"), 0 | |||
} | |||
var flow = &model.ExpressUserMoneyFlow{ | |||
Uid: user.Uid, | |||
Type: 0, | |||
Time: time.Now(), | |||
Amount: price, | |||
AfterAmount: user.Money, | |||
Oid: oid, | |||
Title: "快递退款", | |||
} | |||
_, err = eg.Insert(flow) | |||
if err != nil { | |||
return e.NewErr(400, "站点预存款扣除失败!"), 0 | |||
} | |||
return nil, 1 | |||
} | |||
func agentDeduct(oid string, base map[string]string, price string) (error, int) { | |||
eg := db.Db | |||
var user model.ExpressAgentMoney | |||
get, err := eg.Where("uid=?", base["puid"]).Get(&user) | |||
if get == false || err != nil { | |||
return e.NewErr(400, "平台预存款不足!"), 0 | |||
} | |||
user.Money = utils.Float64ToStr(utils.StrToFloat64(user.Money) + utils.StrToFloat64(price)) | |||
_, err = eg.Where("id=?", user.Id).Update(&user) | |||
if err != nil { | |||
return e.NewErr(400, "平台预存款扣除失败!"), 0 | |||
} | |||
var flow = &model.ExpressAgentMoneyFlow{ | |||
Puid: utils.StrToInt(base["puid"]), | |||
Uid: user.Uid, | |||
Type: 0, | |||
Time: time.Now(), | |||
Amount: price, | |||
AfterAmount: user.Money, | |||
Oid: oid, | |||
Title: "快递退款", | |||
} | |||
_, err = eg.Insert(flow) | |||
if err != nil { | |||
return e.NewErr(400, "平台预存款扣除失败!"), 0 | |||
} | |||
return nil, 1 | |||
} | |||
func AppUserListPuid(mid string) string { | |||
appList := offical.GetUserAppList(mid) | |||
uid := "0" | |||
if appList != nil && appList.Puid > 0 { | |||
uid = utils.IntToStr(appList.Puid) | |||
} | |||
return uid | |||
} | |||
func AppUserListPuidNew(mid string, ordExpressPlatform string) string { | |||
appList := offical.GetUserAppList(mid) | |||
uid := "0" | |||
if appList != nil && appList.Puid > 0 { | |||
uid = utils.IntToStr(appList.Puid) | |||
} | |||
expressPlatform := offical.MasterListCfgGetOneData(uid, "express_platform_type") | |||
if expressPlatform == "1" || ordExpressPlatform == "1" { //如果是1 走智莺官方 | |||
uid = "0" | |||
} | |||
return uid | |||
} | |||
func CommBase(mid, ordExpressPlatform string) map[string]string { | |||
puid := AppUserListPuidNew(mid, ordExpressPlatform) | |||
key := puid + "_official_express_info" | |||
stringStr, err := cache.GetString(key) | |||
stringMap := make(map[string]string) | |||
json.Unmarshal([]byte(stringStr), &stringMap) | |||
if len(stringMap) == 0 || err != nil { | |||
expressType := offical.MasterListCfgGetOneData(puid, "express_type") | |||
expressUrl := offical.MasterListCfgGetOneData(puid, "express_url") | |||
expressClientId := offical.MasterListCfgGetOneData(puid, "express_client_id") | |||
expressKey := offical.MasterListCfgGetOneData(puid, "express_key") | |||
expressMinSendMoney := offical.MasterListCfgGetOneData(puid, "express_min_send_money") //最低预存款 | |||
expressFeeSendMoney := offical.MasterListCfgGetOneData(puid, "express_fee_send_money") //充值预存款手续费 | |||
expressFirstPayBili := offical.MasterListCfgGetOneData(puid, "express_first_pay_bili") //首重加价 | |||
expressSecondPayBili := offical.MasterListCfgGetOneData(puid, "express_second_pay_bili") //续重加价 | |||
stringMap = map[string]string{ | |||
"puid": puid, | |||
"express_type": expressType, | |||
"express_url": expressUrl, | |||
"express_key": expressKey, | |||
"express_client_id": expressClientId, | |||
"express_min_send_money": "", | |||
"express_fee_send_money": "", | |||
"express_first_pay_bili": "", | |||
"express_second_pay_bili": "", | |||
"official_express_min_send_money": expressMinSendMoney, | |||
"official_express_fee_send_money": expressFeeSendMoney, | |||
"official_express_first_pay_bili": expressFirstPayBili, | |||
"official_express_second_pay_bili": expressSecondPayBili, | |||
} | |||
//如果是官方 不是代理就没有代理的设置 | |||
//如果是代理 就有代理的设置 | |||
if utils.StrToInt(puid) > 0 { | |||
stringMap["express_min_send_money"] = expressMinSendMoney | |||
stringMap["express_fee_send_money"] = expressFeeSendMoney | |||
stringMap["express_first_pay_bili"] = expressFirstPayBili | |||
stringMap["express_second_pay_bili"] = expressSecondPayBili | |||
if stringMap["express_type"] == "1" { //代理自有渠道,智莺的加价不用了 | |||
stringMap["official_express_min_send_money"] = "" | |||
stringMap["official_express_fee_send_money"] = "" | |||
stringMap["official_express_first_pay_bili"] = "" | |||
stringMap["official_express_second_pay_bili"] = "" | |||
} | |||
} | |||
cache.SetEx(key, utils.SerializeStr(stringMap), 300) | |||
} | |||
if utils.StrToInt(puid) > 0 && stringMap["express_type"] != "1" { //跟随官方 | |||
key1 := "0_official_express_info" | |||
stringStr1, err1 := cache.GetString(key1) | |||
stringMap1 := make(map[string]string) | |||
json.Unmarshal([]byte(stringStr1), &stringMap1) | |||
if len(stringMap1) == 0 || err1 != nil { //如果是代理 但只有官方设置 | |||
stringMap1 = make(map[string]string) | |||
stringMap1["express_url"] = offical.MasterListCfgGetOneData("0", "express_url") | |||
stringMap1["express_client_id"] = offical.MasterListCfgGetOneData("0", "express_client_id") | |||
stringMap1["express_key"] = offical.MasterListCfgGetOneData("0", "express_key") | |||
stringMap1["official_express_min_send_money"] = offical.MasterListCfgGetOneData("0", "express_min_send_money") //最低预存款 | |||
stringMap1["official_express_fee_send_money"] = offical.MasterListCfgGetOneData("0", "express_fee_send_money") //充值预存款手续费 | |||
stringMap1["official_express_first_pay_bili"] = offical.MasterListCfgGetOneData("0", "express_first_pay_bili") //首重加价 | |||
stringMap1["official_express_second_pay_bili"] = offical.MasterListCfgGetOneData("0", "express_second_pay_bili") //续重加价 | |||
cache.SetEx(key1, utils.SerializeStr(stringMap1), 300) | |||
} | |||
for k, v := range stringMap1 { | |||
stringMap[k] = v | |||
} | |||
} | |||
return stringMap | |||
} |
@@ -1,217 +0,0 @@ | |||
package consume | |||
import ( | |||
"applet/app/db" | |||
"applet/app/db/model" | |||
"applet/app/utils" | |||
"applet/app/utils/logx" | |||
"applet/consume/md" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git/rabbit" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_pay.git/pay" | |||
"encoding/json" | |||
"errors" | |||
"fmt" | |||
"github.com/streadway/amqp" | |||
"github.com/tidwall/gjson" | |||
"time" | |||
"xorm.io/xorm" | |||
) | |||
func ZhiosFastReturnOrderPay(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(10) | |||
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 = handleZhiosFastReturnOrderPay(res.Body) | |||
//_ = res.Reject(false) | |||
fmt.Println(err) | |||
if err == nil { | |||
_ = res.Ack(true) | |||
} else { | |||
//var canalMsg *md.ZhiosFatReturnOrderPay | |||
//var tmpString string | |||
//err := json.Unmarshal(res.Body, &tmpString) | |||
//if err == nil { | |||
// fmt.Println(tmpString) | |||
// err = json.Unmarshal([]byte(tmpString), &canalMsg) | |||
// if err == nil { | |||
// ch.Publish(queue.ExchangeName, utils.SerializeStr(canalMsg), queue.RoutKey) | |||
// } | |||
//} | |||
} | |||
} else { | |||
panic(errors.New("error getting message")) | |||
} | |||
} | |||
fmt.Println("get msg done") | |||
} | |||
func handleZhiosFastReturnOrderPay(msg []byte) error { | |||
//1、解析canal采集至mq中queue的数据结构体 | |||
var canalMsg *md.ZhiosFatReturnOrderPay | |||
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 := utils.StrToInt(canalMsg.Uid) | |||
oid := canalMsg.Oid | |||
isFastReturn, info := CommCheckFastReturn(eg, uid, mid) | |||
if isFastReturn == 0 { | |||
return nil | |||
} | |||
var orderData model.OrdList | |||
b, err2 := eg.Where("ord_id=?", oid).Get(&orderData) | |||
if b == false || err2 != nil { | |||
return errors.New("err") | |||
} | |||
if (orderData.IsFastSign == 1 && orderData.IsTransfer == 1) || orderData.State == 4 || orderData.IsWaitReduce > 0 { | |||
return nil | |||
} | |||
var data1 model.OrdListRelate | |||
get, err := eg.Where("uid=? and oid=? and level=?", uid, oid, 0).Get(&data1) | |||
if get == false || err != nil { | |||
return errors.New("err") | |||
} | |||
amount := int(data1.Amount * 100) | |||
if amount <= 0 { | |||
return nil | |||
} | |||
money := utils.Float64ToStr(float64(amount) / 100) | |||
fmt.Println(money) | |||
fastReturnMoney := db.SysCfgFindWithDb(eg, mid, "fast_return_money") | |||
if utils.StrToFloat64(info.Money)+utils.StrToFloat64(money) > utils.StrToFloat64(fastReturnMoney["fast_return_money"]) { | |||
return nil | |||
} | |||
if orderData.IsFastSign == 0 { | |||
args := map[string]string{ | |||
"out_order_no": oid, | |||
"credit_agreement_id": info.CreditAgreementId, | |||
"category_id": "pay_for_rebate_0001", | |||
"order_amount": money, | |||
"amount_type": "ORDER_AMOUNT", | |||
"subject": canalMsg.Name + oid, | |||
} | |||
args = CommInfo(eg, mid, args) | |||
fmt.Println(args) | |||
order, err := pay.CreditagreementOrder(args) | |||
if err != nil { | |||
utils.FilePutContents(mid+"CreditagreementOrder_err", err.Error()) | |||
} | |||
utils.FilePutContents(mid+"CreditagreementOrder", utils.SerializeStr(args)) | |||
utils.FilePutContents(mid+"CreditagreementOrder", utils.SerializeStr(order)) | |||
if err != nil || order == nil { | |||
return nil | |||
} | |||
if order.ZhimaCreditPayafteruseCreditbizorderOrderResponse.Code != "10000" { | |||
return nil | |||
} | |||
orderData.IsFastSign = 1 | |||
orderData.FastSignId = order.ZhimaCreditPayafteruseCreditbizorderOrderResponse.CreditBizOrderId | |||
eg.Where("ord_id=?", oid).Cols("is_fast_sign,fast_sign_id").Update(&orderData) | |||
sql := "UPDATE user_alipay_info SET money=money+? WHERE uid=?" | |||
db.QueryNativeString(eg, sql, money, orderData.Uid) | |||
} | |||
if info.AlipayId != "" && orderData.IsTransfer != 1 { | |||
//转账 | |||
args1 := map[string]string{ | |||
"out_biz_no": utils.Int64ToStr(orderData.OrdId), | |||
"trans_amount": money, | |||
"identity": info.AlipayId, | |||
"identity_type": "ALIPAY_USER_ID", | |||
"product_code": "TRANS_ACCOUNT_NO_PWD", | |||
"biz_scene": "DIRECT_TRANSFER", | |||
"order_title": canalMsg.Name + "秒返", | |||
} | |||
args1 = CommInfo(eg, mid, args1) | |||
fmt.Println(utils.SerializeStr(args1)) | |||
sign, err := pay.AlipayFundTransUniTransfer(args1) | |||
if err != nil { | |||
utils.FilePutContents(mid+"transfer_err", err.Error()) | |||
} | |||
fmt.Println(sign) | |||
utils.FilePutContents(mid+"transfer", utils.SerializeStr(args1)) | |||
utils.FilePutContents(mid+"transfer", utils.SerializeStr(sign)) | |||
if sign != nil && sign.AlipayFundTransUniTransferResponse.Code == "10000" { | |||
orderData.TransferSignId = sign.AlipayFundTransUniTransferResponse.OrderId | |||
if sign.AlipayFundTransUniTransferResponse.Status == "SUCCESS" { | |||
orderData.IsTransfer = 1 | |||
var flow = &model.FinUserFlow{ | |||
Type: 0, | |||
Uid: orderData.Uid, | |||
Amount: "", | |||
PaymentType: 3, | |||
BeforeAmount: "0", | |||
AfterAmount: "0", | |||
OrdType: "fast_return", | |||
OrdId: utils.AnyToString(orderData.OrdId), | |||
OrdAction: 103, | |||
OrdTitle: "佣金到账" + money + "元(已到支付宝)", | |||
State: 2, | |||
OtherId: 0, | |||
OrdTime: int(time.Now().Unix()), | |||
CreateAt: time.Now(), | |||
} | |||
eg.Insert(flow) | |||
} else { | |||
orderData.IsTransfer = 2 | |||
} | |||
eg.Where("ord_id=?", oid).Cols("is_transfer,transfer_sign_id").Update(&orderData) | |||
} else { | |||
fmt.Println(sign) | |||
return errors.New("失败") | |||
} | |||
} | |||
return nil | |||
} | |||
func CommCheckFastReturn(eg *xorm.Engine, uid int, mid string) (int, *model.UserAlipayInfo) { | |||
fastReturnOnoff := db.SysCfgFindWithDb(eg, mid, "fast_return_onoff") | |||
info := db.GetUserAlipayInfo(eg, uid) | |||
if info.IsSign == 0 || info.IsOpen == 0 || info.CreditAgreementId == "" || fastReturnOnoff["fast_return_onoff"] != "1" { | |||
return 0, nil | |||
} | |||
return 1, info | |||
} | |||
func CommInfo(eg *xorm.Engine, mid string, args map[string]string) map[string]string { | |||
fastReturnAlipay := db.SysCfgFindWithDb(eg, mid, "fast_return_alipay") | |||
fastReturnAlipayInfo := fastReturnAlipay["fast_return_alipay"] | |||
args["pay_app_cert_sn"] = gjson.Get(fastReturnAlipayInfo, "pay_app_cert_sn").String() | |||
args["pay_alipayrsa_public_key"] = gjson.Get(fastReturnAlipayInfo, "pay_alipayrsa_public_key").String() | |||
args["pay_ali_use_type"] = gjson.Get(fastReturnAlipayInfo, "pay_ali_use_type").String() | |||
args["private_key"] = gjson.Get(fastReturnAlipayInfo, "private_key").String() | |||
args["app_id"] = gjson.Get(fastReturnAlipayInfo, "app_id").String() | |||
//args["pay_app_cert_sn"] = "25024da974663c98d943ec355e561863" | |||
//args["pay_alipayrsa_public_key"] = "549086292366017b7710dcc74b7969c8" | |||
//args["pay_ali_use_type"] = "1" | |||
//args["private_key"] = "MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCunVhChSZGSjiuxNrvyd2a06XAT3J7NLH1fjWiy4HfdhH769xejqFdYFGvRrWCyXRNm/ionWmplzHBopnfTP/tbdoqM7HjZegORCDV3mnB4VVqFgXbrJHlh2lum75zysFbj/7pskGG/tzc8CdjbuTkqt3Z7EXBn8RyUvBi+42XAV51dg1k8DsucoSXuKBW6H2iR27HdDYsmsZmGMIa3NaOIq69i1vMq19bu+UsoBVFHA4DBzwwAHWZEiR+hFg99vhEDyby972kgnBCPnQL2Y8xiXufKpvKFzDCJ/aDNzoWhLfr7QAUKL3vleH8z53sQDy4hTYPLYPT2Y+gGAB6LPMpAgMBAAECggEAB3iL8iyoOpGqYy/g/ilw5dLwYI4Fo+fZRVulB9YVNG5kzpaE0zbfCJO6avlngrUD2N43gV9ayfrCEjrWwosU2B+/GdckYUpW52Va0ku10qnFcciHb6Kui1eD10uqlmGybCx5B56s1w3IfVt5E/QGrxHwdAZ75ZDkYs/RoSqKIE/IkfE3FpUYwBrj8vfvCsrzvThqTSXxq3KgyH8wzcSOca9UuO41po0n3my/4PdceBufMgm0sZS0IawOwuciXljXaCsRQ0Z9q2Wun5aYE5mGkUcVyZYbYl3of/VBBueq+egauvRq5n23JQ7UBCMpwZYgKrlHUTW2Szl8iibkVmMn0QKBgQDdzxeB/I0dg/UYs5lTjk9eQnyaEZhg+wulHnnhPkwPMAChUotzFa/r22ND+4Q/gLj9Q/6SzwOm8eFi20lX7teWJyEmy1/BWrRrhL/G7GMMg2zf4XWt4+TW7oSx4aHxCu2jbleUYqJ3f+eN4BfYSOKAwh1bxtAJmTxlhY7JwlLuOwKBgQDJh+U04CdJA6E0k8pkRa1XmR0K+zkQl8ksrj37zF91XCUejuLSu9a2ATPma/lgOT2DoV72f+a9Raqw7wR4r/iDQNucPkIUN/gyRfc4bRpIuUgm0W/RvHJc8WxmNuIrUigA2yaZE7SBWCDmphrueKY/WrOgWuVf2X4lBiMZBVGZ6wKBgQDExh+4tXALKzGYhFwVgD5xBNK9a7ae8pfWGD9Pz5ByOMeWVkBYDHlQ6AQcH1mnbG6wYE3Lt9Mpm5Ozu45JcB3Zm0URwYJlai584/uuYa9NPpqr0rwvU+mDs34MwHqF+IfxYMZZYVd4ZAPsHU2KFr66M3sQHEQa/9JQzjdqTfZ8WQKBgQCF6PmhT8xq1LGaORXD2RScX04QDOxXHTR8ru7a0GshlW/IxVLsignaeCQfWOGkUYSRYXmzOzt7yr3nwXpsIylzNXZ3dFr+Ck6uQRVLdht/9TV/La0qZRhsr7LCnHdeJ8ITB4u3LYPEamW6POcqTBrTgBZZV+yP6vnJ6jEKICGfrwKBgQDBpw0jV8/DO/8TXG6OuzdE+8HmF1umoQSo2NhmCAT1Khi0kuIZKoDdg0R/Y2Ccom5H8ROJIoHnviaDBM6IIDaBM//ifl/XgezVaB/oMa/OyXRs5xB/VW31RGyXRSO9maM5R/szXndzQ8rApodbKWxfn6uamDRJHYEWnAcFXTPkTA==" | |||
//args["app_id"] = "2021003156691664" | |||
return args | |||
} |
@@ -1,168 +0,0 @@ | |||
package consume | |||
import ( | |||
"applet/app/db" | |||
"applet/app/db/model" | |||
"applet/app/utils" | |||
"applet/app/utils/logx" | |||
"applet/consume/md" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git/rabbit" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_pay.git/pay" | |||
"encoding/json" | |||
"errors" | |||
"fmt" | |||
"github.com/streadway/amqp" | |||
"time" | |||
) | |||
func ZhiosFastReturnOrderRefund(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(1) | |||
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 = handleZhiosFastReturnOrderRefund(res.Body) | |||
//_ = res.Reject(false) | |||
if err == nil { | |||
_ = res.Ack(true) | |||
} | |||
} else { | |||
panic(errors.New("error getting message")) | |||
} | |||
} | |||
fmt.Println("get msg done") | |||
} | |||
func handleZhiosFastReturnOrderRefund(msg []byte) error { | |||
//1、解析canal采集至mq中queue的数据结构体 | |||
var canalMsg *md.ZhiosFatReturnOrderPay | |||
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 := utils.StrToInt(canalMsg.Uid) | |||
oid := canalMsg.Oid | |||
var orderData model.OrdList | |||
b, err2 := eg.Where("ord_id=?", oid).Get(&orderData) | |||
if b == false || err2 != nil { | |||
return errors.New("err") | |||
} | |||
if orderData.State != 4 || orderData.IsWaitReduce > 0 || orderData.FastSignId == "" { | |||
return nil | |||
} | |||
var data1 model.OrdListRelate | |||
get, err := eg.Where("uid=? and oid=? and level=?", uid, oid, 0).Get(&data1) | |||
if get == false || err != nil { | |||
return errors.New("err") | |||
} | |||
amount := int(data1.Amount * 100) | |||
if amount <= 0 { | |||
return nil | |||
} | |||
if orderData.IsTransfer == 0 { | |||
args := map[string]string{ | |||
"out_request_no": utils.Int64ToStr(orderData.OrdId), | |||
"is_fulfilled": "true", | |||
"credit_biz_order_id": orderData.FastSignId, | |||
"remark": "", | |||
} | |||
args = CommInfo(eg, mid, args) | |||
finish, err := pay.CreditagreementOrderFinish(args) | |||
fmt.Println(finish) | |||
if err != nil { | |||
fmt.Println(err) | |||
} | |||
if err != nil || finish == nil { | |||
return errors.New("err") | |||
} | |||
if finish.ZhimaCreditPayafteruseCreditbizorderFinishResponse.Code != "10000" { | |||
return errors.New("err") | |||
} | |||
orderData.IsWaitReduce = 3 | |||
eg.Where("ord_id=?", oid).Cols("is_wait_reduce").Update(&orderData) | |||
return nil | |||
} | |||
money := utils.Float64ToStr(float64(amount) / 100) | |||
args := map[string]string{ | |||
"out_trade_no": utils.Int64ToStr(orderData.OrdId), | |||
"creditTradeScene": "CREDIT_PAY_UNCERTAIN_FEE", | |||
"is_async_pay": "true", | |||
"total_amount": money, | |||
"auth_code": orderData.FastSignId, | |||
"scene": "ZHIMA_CREDIT_CODE", | |||
"subject": canalMsg.Name + "订单取消", | |||
"product_code": "GENERAL_WITHHOLDING", | |||
"notify_url": "", | |||
} | |||
if canalMsg.Prd == "true" { | |||
args["notify_url"] = "http://api.zhiyingos.com/api/v1/alipay/reduce/callback?master_id=" + mid | |||
} else { | |||
args["notify_url"] = "http://inapi.izhyin.cn/api/v1/alipay/reduce/callback?master_id=" + mid | |||
} | |||
args = CommInfo(eg, mid, args) | |||
fmt.Println(args) | |||
tradePay, _ := pay.AlipayTradePay(args) | |||
orderData.IsWaitReduce = 1 | |||
if tradePay != nil && tradePay.AlipayTradePayResponse.Code == "10000" { | |||
orderData.IsWaitReduce = 2 | |||
} | |||
sql := "UPDATE user_alipay_info SET money=money-? WHERE uid=?" | |||
db.QueryNativeString(eg, sql, money, orderData.Uid) | |||
eg.Where("ord_id=?", oid).Cols("is_wait_reduce").Update(&orderData) | |||
if orderData.IsWaitReduce == 2 { | |||
args1 := map[string]string{ | |||
"out_request_no": utils.Int64ToStr(orderData.OrdId), | |||
"is_fulfilled": "false", | |||
"credit_biz_order_id": orderData.FastSignId, | |||
"remark": "", | |||
} | |||
if orderData.State != 4 { | |||
args1["is_fulfilled"] = "true" | |||
} | |||
args1 = CommInfo(eg, mid, args1) | |||
pay.CreditagreementOrderFinish(args1) | |||
} | |||
var flow = &model.FinUserFlow{ | |||
Type: 1, | |||
Uid: orderData.Uid, | |||
Amount: "", | |||
PaymentType: 3, | |||
BeforeAmount: "0", | |||
AfterAmount: "0", | |||
OrdType: "fast_return", | |||
OrdId: utils.AnyToString(orderData.OrdId), | |||
OrdAction: 103, | |||
OrdTitle: "秒返订单退款扣除" + money + "元(支付宝)", | |||
State: 2, | |||
OtherId: 0, | |||
OrdTime: int(time.Now().Unix()), | |||
CreateAt: time.Now(), | |||
} | |||
eg.Insert(flow) | |||
return nil | |||
} |
@@ -1,163 +0,0 @@ | |||
package consume | |||
import ( | |||
"applet/app/db" | |||
"applet/app/db/model" | |||
"applet/app/utils" | |||
"applet/app/utils/logx" | |||
"applet/consume/md" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git/rabbit" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_pay.git/pay" | |||
"encoding/json" | |||
"errors" | |||
"fmt" | |||
"github.com/streadway/amqp" | |||
"time" | |||
) | |||
func ZhiosFastReturnOrderRefundSecond(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(1) | |||
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 = handleZhiosFastReturnOrderRefundSecond(res.Body) | |||
//_ = res.Reject(false) | |||
if err == nil { | |||
_ = res.Ack(true) | |||
} | |||
} else { | |||
panic(errors.New("error getting message")) | |||
} | |||
} | |||
fmt.Println("get msg done") | |||
} | |||
func handleZhiosFastReturnOrderRefundSecond(msg []byte) error { | |||
//1、解析canal采集至mq中queue的数据结构体 | |||
var canalMsg *md.ZhiosFatReturnOrderPay | |||
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] | |||
oid := canalMsg.Oid | |||
var orderData model.OrdList | |||
b, err2 := eg.Where("ord_id=?", oid).Get(&orderData) | |||
if b == false || err2 != nil { | |||
return errors.New("err") | |||
} | |||
if orderData.IsWaitReduce > 0 || orderData.FastSignId == "" { | |||
return nil | |||
} | |||
amount := canalMsg.Amount | |||
if amount <= 0 { | |||
return nil | |||
} | |||
if orderData.IsTransfer == 0 { | |||
args := map[string]string{ | |||
"out_request_no": utils.Int64ToStr(orderData.OrdId), | |||
"is_fulfilled": "true", | |||
"credit_biz_order_id": orderData.FastSignId, | |||
"remark": "", | |||
} | |||
args = CommInfo(eg, mid, args) | |||
finish, err := pay.CreditagreementOrderFinish(args) | |||
fmt.Println(finish) | |||
if err != nil { | |||
fmt.Println(err) | |||
} | |||
if err != nil || finish == nil { | |||
return errors.New("err") | |||
} | |||
if finish.ZhimaCreditPayafteruseCreditbizorderFinishResponse.Code != "10000" { | |||
return errors.New("err") | |||
} | |||
orderData.IsWaitReduce = 3 | |||
eg.Where("ord_id=?", oid).Cols("is_wait_reduce").Update(&orderData) | |||
return nil | |||
} | |||
money := utils.Float64ToStr(float64(amount) / 100) | |||
args := map[string]string{ | |||
"out_trade_no": utils.Int64ToStr(orderData.OrdId), | |||
"creditTradeScene": "CREDIT_PAY_UNCERTAIN_FEE", | |||
"is_async_pay": "true", | |||
"total_amount": money, | |||
"auth_code": orderData.FastSignId, | |||
"scene": "ZHIMA_CREDIT_CODE", | |||
"subject": canalMsg.Name + "订单取消", | |||
"product_code": "GENERAL_WITHHOLDING", | |||
"notify_url": "", | |||
} | |||
if canalMsg.Prd == "true" { | |||
args["notify_url"] = "http://api.zhiyingos.com/api/v1/alipay/reduce/callback?master_id=" + mid | |||
} else { | |||
args["notify_url"] = "http://inapi.izhyin.cn/api/v1/alipay/reduce/callback?master_id=" + mid | |||
} | |||
args = CommInfo(eg, mid, args) | |||
fmt.Println(args) | |||
tradePay, _ := pay.AlipayTradePay(args) | |||
orderData.IsWaitReduce = 1 | |||
if tradePay != nil && tradePay.AlipayTradePayResponse.Code == "10000" { | |||
orderData.IsWaitReduce = 2 | |||
} | |||
orderData.IsFastSign = 0 | |||
sql := "UPDATE user_alipay_info SET money=money-? WHERE uid=?" | |||
db.QueryNativeString(eg, sql, money, orderData.Uid) | |||
eg.Where("ord_id=?", oid).Cols("is_fast_sign,is_wait_reduce").Update(&orderData) | |||
if orderData.IsWaitReduce == 2 { | |||
args1 := map[string]string{ | |||
"out_request_no": utils.Int64ToStr(orderData.OrdId), | |||
"is_fulfilled": "false", | |||
"credit_biz_order_id": orderData.FastSignId, | |||
"remark": "", | |||
} | |||
if orderData.State != 4 { | |||
args1["is_fulfilled"] = "true" | |||
} | |||
args1 = CommInfo(eg, mid, args1) | |||
pay.CreditagreementOrderFinish(args1) | |||
} | |||
var flow = &model.FinUserFlow{ | |||
Type: 1, | |||
Uid: orderData.Uid, | |||
Amount: "", | |||
PaymentType: 3, | |||
BeforeAmount: "0", | |||
AfterAmount: "0", | |||
OrdType: "fast_return", | |||
OrdId: utils.AnyToString(orderData.OrdId), | |||
OrdAction: 103, | |||
OrdTitle: "秒返订单退款扣除" + money + "元(支付宝)", | |||
State: 2, | |||
OtherId: 0, | |||
OrdTime: int(time.Now().Unix()), | |||
CreateAt: time.Now(), | |||
} | |||
eg.Insert(flow) | |||
return nil | |||
} |
@@ -1,100 +0,0 @@ | |||
package consume | |||
import ( | |||
"applet/app/db" | |||
"applet/app/db/model" | |||
"applet/app/utils" | |||
"applet/app/utils/logx" | |||
"applet/consume/md" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git/rabbit" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_pay.git/pay" | |||
"encoding/json" | |||
"errors" | |||
"fmt" | |||
"github.com/streadway/amqp" | |||
) | |||
func ZhiosFastReturnOrderSuccess(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(1) | |||
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 = handleZhiosFastReturnOrderSuccess(res.Body) | |||
//_ = res.Reject(false) | |||
if err == nil { | |||
_ = res.Ack(true) | |||
} | |||
} else { | |||
panic(errors.New("error getting message")) | |||
} | |||
} | |||
fmt.Println("get msg done") | |||
} | |||
func handleZhiosFastReturnOrderSuccess(msg []byte) error { | |||
//1、解析canal采集至mq中queue的数据结构体 | |||
var canalMsg *md.ZhiosFatReturnOrderPay | |||
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] | |||
oid := canalMsg.Oid | |||
var orderData model.OrdList | |||
b, err2 := eg.Where("ord_id=?", oid).Get(&orderData) | |||
if b == false || err2 != nil { | |||
return errors.New("err") | |||
} | |||
if orderData.FastSignId == "" { | |||
return errors.New("err") | |||
} | |||
args := map[string]string{ | |||
"out_request_no": utils.Int64ToStr(orderData.OrdId), | |||
"is_fulfilled": "false", | |||
"credit_biz_order_id": orderData.FastSignId, | |||
"remark": "", | |||
} | |||
if orderData.State != 4 { | |||
args["is_fulfilled"] = "true" | |||
} | |||
args = CommInfo(eg, mid, args) | |||
finish, err := pay.CreditagreementOrderFinish(args) | |||
fmt.Println(finish) | |||
if err != nil { | |||
fmt.Println(err) | |||
} | |||
if err != nil || finish == nil { | |||
return errors.New("err") | |||
} | |||
if finish.ZhimaCreditPayafteruseCreditbizorderFinishResponse.Code != "10000" { | |||
return errors.New("err") | |||
} | |||
orderData.FastSuccess = 1 | |||
eg.Where("ord_id=?", orderData.OrdId).Cols("fast_success").Update(&orderData) | |||
return nil | |||
} |
@@ -1,315 +0,0 @@ | |||
package consume | |||
import ( | |||
"applet/app/db" | |||
"applet/app/db/model" | |||
"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" | |||
"time" | |||
"xorm.io/xorm" | |||
) | |||
func ZhiosGuideStoreOrder(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(1) | |||
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 = handleZhiosGuideStoreOrderSuccess(res.Body) | |||
//_ = res.Reject(false) | |||
if err == nil { | |||
_ = res.Ack(true) | |||
} | |||
} else { | |||
panic(errors.New("error getting message")) | |||
} | |||
} | |||
fmt.Println("get msg done") | |||
} | |||
func handleZhiosGuideStoreOrderSuccess(msg []byte) error { | |||
//1、解析canal采集至mq中queue的数据结构体 | |||
var canalMsg *md.ZhiosGuideStoreOrder | |||
fmt.Println(string(msg)) | |||
var tmpString string | |||
err := json.Unmarshal(msg, &tmpString) | |||
if err != nil { | |||
fmt.Println("===with", err.Error()) | |||
return err | |||
} | |||
fmt.Println(tmpString) | |||
err = json.Unmarshal([]byte(tmpString), &canalMsg) | |||
if err != nil { | |||
fmt.Println("===with", err.Error()) | |||
return err | |||
} | |||
mid := canalMsg.Mid | |||
eg := db.DBs[mid] | |||
if eg == nil { | |||
return nil | |||
} | |||
if canalMsg.Type == "success" { | |||
err := success(eg, canalMsg) | |||
if err != nil { | |||
return err | |||
} | |||
} | |||
if canalMsg.Type == "fail" { | |||
err := fail(eg, canalMsg) | |||
if err != nil { | |||
return err | |||
} | |||
} | |||
if canalMsg.Type == "down" { | |||
err := down(eg, canalMsg) | |||
if err != nil { | |||
return err | |||
} | |||
} | |||
return nil | |||
} | |||
func down(eg *xorm.Engine, canalMsg *md.ZhiosGuideStoreOrder) error { | |||
sess := eg.NewSession() | |||
defer sess.Close() | |||
sess.Begin() | |||
//退积分 | |||
sum := canalMsg.DeductPrice | |||
//退积分 | |||
// 111商家发布商品扣除 112商家商品审核失败退回 113 商家删除商品退回 114商品退款退回 115商家商品下架退回 | |||
err := UpdateUserFinValidAndInterFlowFreezeSess(sess, | |||
utils.AnyToString(sum), "商品("+canalMsg.ItemId+")删除"+canalMsg.Stock+"个退回", "0", 1, utils.StrToInt(canalMsg.Uid), utils.StrToInt(canalMsg.CoinId), 113, utils.StrToInt64(utils.OrderUUID(utils.StrToInt(canalMsg.Uid)))) | |||
if err != nil { | |||
sess.Rollback() | |||
return err | |||
} | |||
sess.Commit() | |||
return nil | |||
} | |||
func success(eg *xorm.Engine, canalMsg *md.ZhiosGuideStoreOrder) error { | |||
sess := eg.NewSession() | |||
defer sess.Close() | |||
sess.Begin() | |||
var data model.GuideStoreOrder | |||
get, _ := sess.Where("pvd_oid=?", canalMsg.Oid).Get(&data) | |||
var newOrd model.OrdList | |||
sess.Where("pvd_oid=?", canalMsg.Oid).Get(&newOrd) | |||
if get == false { | |||
deductPrice := canalMsg.DeductPrice | |||
var storeOrder = model.GuideStoreOrder{ | |||
Uid: newOrd.Uid, | |||
Time: time.Unix(int64(newOrd.CreateAt), 0), | |||
StoreId: utils.StrToInt(canalMsg.StoreId), | |||
Gid: newOrd.ItemId, | |||
State: newOrd.State, | |||
Title: canalMsg.ItemTitle, | |||
Pvd: canalMsg.Pvd, | |||
SubsidyPrice: canalMsg.SubsidyPrice, | |||
Fee: canalMsg.Fee, | |||
DeductPrice: deductPrice, | |||
OldDeductPrice: deductPrice, | |||
Price: utils.Float64ToStr(newOrd.PaidPrice), | |||
Oid: utils.Int64ToStr(newOrd.OrdId), | |||
PvdOid: newOrd.PvdOid, | |||
DeductState: 1, | |||
DeductAt: time.Now(), | |||
} | |||
if utils.StrToInt(canalMsg.State) == 4 { | |||
storeOrder.DeductState = 0 | |||
} | |||
_, err := sess.Insert(&storeOrder) | |||
if err == nil && storeOrder.DeductState == 1 { | |||
coinId := db.SysCfgGetWithDb(eg, canalMsg.Mid, "guide_store_coin_id") | |||
err := UpdateUserFinValidAndInterFlowFreeze(sess, | |||
utils.AnyToString(deductPrice), "商品("+newOrd.ItemId+")下单扣除冻结积分", "0", 2, utils.StrToInt(canalMsg.StoreId), utils.StrToInt(coinId), 117, newOrd.OrdId) | |||
if err != nil { | |||
sess.Rollback() | |||
return err | |||
} | |||
} | |||
newOrd.OrderFormType = -2 | |||
sess.Where("ord_id=?", newOrd.OrdId).Cols("order_form_type").Update(&newOrd) | |||
} | |||
sess.Commit() | |||
return nil | |||
} | |||
func fail(eg *xorm.Engine, canalMsg *md.ZhiosGuideStoreOrder) error { | |||
sess := eg.NewSession() | |||
defer sess.Close() | |||
sess.Begin() | |||
//m, _ := db.FreeProductByID(eg, canalMsg.ItemId, canalMsg.Pvd) | |||
//直接退回账号了 定制 | |||
storeOrder := db.GuideStoreOrderSess(sess, utils.StrToInt64(canalMsg.Oid)) | |||
//if m != nil { | |||
if storeOrder != nil && utils.StrToFloat64(storeOrder.DeductPrice) > 0 && storeOrder.DeductState == 1 { | |||
coinId := db.SysCfgGetWithDb(eg, canalMsg.Mid, "guide_store_coin_id") | |||
err := UpdateUserVirtualCoinFinValidAndInterFlow(sess, | |||
utils.AnyToString(storeOrder.DeductPrice), "商品("+storeOrder.Gid+")退款退回", "0", 1, storeOrder.StoreId, utils.StrToInt(coinId), 114, utils.StrToInt64(canalMsg.Oid)) | |||
if err != nil { | |||
sess.Rollback() | |||
return err | |||
} | |||
storeOrder.DeductPrice = "0" | |||
storeOrder.DeductState = 2 | |||
storeOrder.State = 4 | |||
_, err = sess.Where("id=?", storeOrder.Id).Update(storeOrder) | |||
if err != nil { | |||
sess.Rollback() | |||
return err | |||
} | |||
} | |||
//} | |||
sess.Commit() | |||
return nil | |||
} | |||
func UpdateUserFinValidAndInterFlowFreezeSess(session *xorm.Session, money, Title, fee string, types, uid, coinId, transferType int, ordId int64) error { | |||
UserVirtualAmount, err := db.UserVirtualAmountFindByIdWithSession(session, uid, coinId) | |||
if err != nil || UserVirtualAmount == nil { | |||
if err == nil { | |||
err = errors.New("获取用户余额信息失败") | |||
} | |||
return err | |||
} | |||
beforeAmount := UserVirtualAmount.Amount | |||
freezeBeforeAmount := UserVirtualAmount.FreezeAmount | |||
if types == 1 { | |||
UserVirtualAmount.Amount = utils.AnyToString(utils.AnyToFloat64(UserVirtualAmount.Amount) + utils.StrToFloat64(money)) | |||
UserVirtualAmount.FreezeAmount = utils.AnyToString(utils.AnyToFloat64(UserVirtualAmount.FreezeAmount) - utils.StrToFloat64(money)) | |||
} else if types == 2 { | |||
UserVirtualAmount.Amount = utils.AnyToString(utils.AnyToFloat64(UserVirtualAmount.Amount) - utils.StrToFloat64(money)) | |||
UserVirtualAmount.FreezeAmount = utils.AnyToString(utils.AnyToFloat64(UserVirtualAmount.FreezeAmount) + utils.StrToFloat64(money)) | |||
if utils.StrToFloat64(UserVirtualAmount.Amount) < 0 { | |||
return errors.New("额度不足") | |||
} | |||
} | |||
afterAmount := UserVirtualAmount.Amount | |||
freezeAfterAmount := UserVirtualAmount.FreezeAmount | |||
affected, err := db.UserVirtualAmountUpdateWithSession(session, uid, coinId, UserVirtualAmount, "amount,freeze_amount") | |||
if err != nil || affected == 0 { | |||
if err == nil { | |||
err = errors.New("更新用户余额信息失败") | |||
} | |||
return err | |||
} | |||
err = virtualCoinFlowInsert(session, uid, coinId, money, fee, ordId, Title, types, transferType, beforeAmount, afterAmount, freezeBeforeAmount, freezeAfterAmount) | |||
if err != nil { | |||
return err | |||
} | |||
return nil | |||
} | |||
func UpdateUserVirtualCoinFinValidAndInterFlow(sess *xorm.Session, money, Title, fee string, types, uid, coinId, transferType int, ordId int64) error { | |||
UserVirtualAmount, err := db.UserVirtualAmountFindById(sess, uid, coinId) | |||
if err != nil || UserVirtualAmount == nil { | |||
if err == nil { | |||
err = errors.New("获取用户余额信息失败") | |||
} | |||
return err | |||
} | |||
beforeAmount := UserVirtualAmount.Amount | |||
freezeBeforeAmount := UserVirtualAmount.FreezeAmount | |||
if types == 2 { | |||
UserVirtualAmount.Amount = utils.AnyToString(utils.AnyToFloat64(UserVirtualAmount.Amount) - utils.StrToFloat64(money)) | |||
UserVirtualAmount.UseAmount = utils.AnyToString(utils.AnyToFloat64(UserVirtualAmount.UseAmount) + utils.StrToFloat64(money)) | |||
} else if types == 1 { | |||
UserVirtualAmount.Amount = utils.AnyToString(utils.AnyToFloat64(UserVirtualAmount.Amount) + utils.StrToFloat64(money)) | |||
UserVirtualAmount.UseAmount = utils.AnyToString(utils.AnyToFloat64(UserVirtualAmount.UseAmount) - utils.StrToFloat64(money)) | |||
} | |||
afterAmount := UserVirtualAmount.Amount | |||
freezeAfterAmount := UserVirtualAmount.FreezeAmount | |||
affected, err := db.UserVirtualAmountUpdate(sess, uid, coinId, UserVirtualAmount, "amount") | |||
if err != nil || affected == 0 { | |||
if err == nil { | |||
err = errors.New("更新用户余额信息失败") | |||
} | |||
return err | |||
} | |||
err = virtualCoinFlowInsert(sess, uid, coinId, money, fee, ordId, Title, types, transferType, beforeAmount, afterAmount, freezeBeforeAmount, freezeAfterAmount) | |||
if err != nil { | |||
return err | |||
} | |||
return nil | |||
} | |||
func UpdateUserFinValidAndInterFlowFreeze(sess *xorm.Session, money, Title, fee string, types, uid, coinId, transferType int, ordId int64) error { | |||
UserVirtualAmount, err := db.UserVirtualAmountFindById(sess, uid, coinId) | |||
if err != nil || UserVirtualAmount == nil { | |||
if err == nil { | |||
err = errors.New("获取用户余额信息失败") | |||
} | |||
return err | |||
} | |||
beforeAmount := UserVirtualAmount.Amount | |||
freezeBeforeAmount := UserVirtualAmount.FreezeAmount | |||
if types == 2 { | |||
UserVirtualAmount.FreezeAmount = utils.AnyToString(utils.AnyToFloat64(UserVirtualAmount.FreezeAmount) - utils.StrToFloat64(money)) | |||
UserVirtualAmount.UseAmount = utils.AnyToString(utils.AnyToFloat64(UserVirtualAmount.UseAmount) + utils.StrToFloat64(money)) | |||
} else if types == 1 { | |||
UserVirtualAmount.FreezeAmount = utils.AnyToString(utils.AnyToFloat64(UserVirtualAmount.FreezeAmount) + utils.StrToFloat64(money)) | |||
UserVirtualAmount.UseAmount = utils.AnyToString(utils.AnyToFloat64(UserVirtualAmount.UseAmount) - utils.StrToFloat64(money)) | |||
} | |||
afterAmount := UserVirtualAmount.Amount | |||
freezeAfterAmount := UserVirtualAmount.FreezeAmount | |||
affected, err := db.UserVirtualAmountUpdate(sess, uid, coinId, UserVirtualAmount, "freeze_amount,use_amount") | |||
if err != nil || affected == 0 { | |||
if err == nil { | |||
err = errors.New("更新用户余额信息失败") | |||
} | |||
return err | |||
} | |||
err = virtualCoinFlowInsert(sess, uid, coinId, money, fee, ordId, Title, types, transferType, beforeAmount, afterAmount, freezeBeforeAmount, freezeAfterAmount) | |||
if err != nil { | |||
return err | |||
} | |||
return nil | |||
} | |||
func virtualCoinFlowInsert(sess *xorm.Session, uid, coinId int, money, SysFee string, ordId int64, ItemTitle string, types, transferType int, beforeAmount string, afterAmount string, freezeBeforeAmount string, freezeAfterAmount string) error { | |||
now := time.Now() | |||
if err := db.UserVirtualCoinFlowInsertOne( | |||
sess, | |||
&model.UserVirtualCoinFlow{ | |||
Uid: uid, | |||
OrdId: utils.Int64ToStr(ordId), | |||
CoinId: coinId, | |||
Direction: types, | |||
Title: ItemTitle, | |||
Amout: money, | |||
FreezeBeforeAmout: freezeBeforeAmount, | |||
FreezeAfterAmout: freezeAfterAmount, | |||
BeforeAmout: beforeAmount, | |||
AfterAmout: afterAmount, | |||
SysFee: SysFee, | |||
CreateTime: now, | |||
TransferType: transferType, | |||
}); err != nil { | |||
_ = logx.Warn(err) | |||
return err | |||
} | |||
return nil | |||
} |
@@ -1,67 +0,0 @@ | |||
package consume | |||
import ( | |||
"applet/app/cfg" | |||
"applet/app/db" | |||
"applet/app/utils/logx" | |||
"applet/consume/md" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git/rabbit" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/rule/installment_payment" | |||
md2 "code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/rule/installment_payment/md" | |||
"encoding/json" | |||
"errors" | |||
"fmt" | |||
"github.com/streadway/amqp" | |||
"time" | |||
) | |||
func InstallmentPaymentAutoRepaidConsume(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(1) | |||
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(">>>>>>>>>>>>>>>>InstallmentPaymentAutoRepaidConsume<<<<<<<<<<<<<<<<<<<<<<<<<") | |||
err = handleInstallmentPaymentAutoRepaidConsume(ch, res.Body) | |||
if err != nil { | |||
fmt.Println("handleInstallmentPaymentAutoRepaidConsumeERR:::::", err.Error()) | |||
} | |||
//_ = res.Reject(false) | |||
err = res.Ack(true) | |||
fmt.Println("err ::: ", err) | |||
} else { | |||
panic(errors.New("error getting message")) | |||
} | |||
} | |||
fmt.Println("get msg done") | |||
} | |||
func handleInstallmentPaymentAutoRepaidConsume(ch *rabbit.Channel, msgData []byte) error { | |||
time.Sleep(time.Duration(1) * time.Millisecond) //休眠1毫秒 | |||
//1、解析mq中queue的数据结构体 | |||
var msg *md2.InstallmentPaymentStructForAutoRepaid | |||
err := json.Unmarshal(msgData, &msg) | |||
if err != nil { | |||
return err | |||
} | |||
engine := db.DBs[msg.MasterId] | |||
installment_payment.Init(cfg.RedisAddr) | |||
//2、调用 `DealInstallmentPaymentAutoRepaid` 制度方法进行扣款 | |||
err = installment_payment.DealInstallmentPaymentAutoRepaid(engine, ch, *msg, msg.MasterId) | |||
return nil | |||
} |
@@ -1,138 +0,0 @@ | |||
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" | |||
"time" | |||
"xorm.io/xorm" | |||
) | |||
func ZhiosIntegralProxyRecharge(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(1) | |||
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 = handleZhiosIntegralProxyRecharge(res.Body) | |||
//_ = res.Reject(false) | |||
if err == nil { | |||
_ = res.Ack(true) | |||
} | |||
} else { | |||
panic(errors.New("error getting message")) | |||
} | |||
} | |||
fmt.Println("get msg done") | |||
} | |||
func handleZhiosIntegralProxyRecharge(msg []byte) error { | |||
//1、解析canal采集至mq中queue的数据结构体 | |||
var canalMsg *md.ZhiosAppreciation | |||
fmt.Println(string(msg)) | |||
var tmpString string | |||
err := json.Unmarshal(msg, &tmpString) | |||
if err != nil { | |||
fmt.Println("===with", err.Error()) | |||
return err | |||
} | |||
fmt.Println(tmpString) | |||
err = json.Unmarshal([]byte(tmpString), &canalMsg) | |||
if err != nil { | |||
fmt.Println("===with", err.Error()) | |||
return err | |||
} | |||
mid := canalMsg.Mid | |||
eg := db.DBs[mid] | |||
if eg == nil { | |||
return nil | |||
} | |||
sess := eg.NewSession() | |||
defer sess.Close() | |||
sess.Begin() | |||
order := db.GetIntegralProxyRecord(sess, canalMsg.Oid) | |||
now := int(time.Now().Unix()) | |||
if order.State != 1 || order.SendTime > now { | |||
sess.Rollback() | |||
return nil | |||
} | |||
day := order.Time.Format("02") | |||
if order.SendTime == 0 { | |||
order.SendTime = int(utils.TimeStdParseUnix(order.PayTime.Format("2006-01-02") + " 00:00:00")) | |||
} else if order.SendTime < int(time.Now().Unix()) { | |||
order.SendTime = int(utils.TimeStdParseUnix(time.Now().Format("2006-01-02") + " 00:00:00")) | |||
} | |||
order.SendTime += 30 * 86400 | |||
date := time.Unix(int64(order.SendTime), 0).Format("2006-01") | |||
order.SendTime = int(utils.TimeStdParseUnix(date + "-" + day + " 00:00:00")) | |||
amount := "0" | |||
title := "" | |||
str := "代充值" | |||
if order.Type == "gift_goods" { | |||
str = "购买礼包奖励" | |||
} | |||
if order.Type == "give" { | |||
str = "转赠" | |||
} | |||
if canalMsg.Type == "" || canalMsg.Type == "first" { | |||
amount = order.Amount | |||
title = str + "到账" | |||
if order.RealOnAccount > 0 { | |||
order.RealOnAccount-- | |||
title = str + "第" + utils.IntToStr(order.OnAccount-order.RealOnAccount) + "期到账" | |||
amount = order.EveryAmount | |||
} | |||
} | |||
if canalMsg.Type == "second" { | |||
if order.RealOnAccount <= 0 { //已经没了 | |||
sess.Rollback() | |||
return nil | |||
} | |||
order.RealOnAccount-- | |||
title = str + "第" + utils.IntToStr(order.OnAccount-order.RealOnAccount) + "期到账" | |||
amount = order.EveryAmount | |||
} | |||
err = addIntegral(sess, order.CoinId, order.Oid, amount, title, order.Uid) | |||
if err != nil { | |||
sess.Rollback() | |||
return err | |||
} | |||
order.RunTime = utils.StrToInt(time.Now().Format("200601")) | |||
update, err := sess.Where("id=?", order.Id).Cols("run_time,real_on_account,send_time").Update(order) | |||
if update == 0 || err != nil { | |||
sess.Rollback() | |||
return err | |||
} | |||
sess.Commit() | |||
return nil | |||
} | |||
func addIntegral(sess *xorm.Session, coinId int, oid int64, amount, title string, uid int) error { | |||
err := UpdateUserVirtualCoinFinValidAndInterFlow(sess, | |||
amount, title, "0", 1, uid, coinId, 125, oid) | |||
if err != nil { | |||
return err | |||
} | |||
return nil | |||
} |
@@ -1,90 +0,0 @@ | |||
package consume | |||
import ( | |||
"applet/app/cfg" | |||
"applet/app/db" | |||
"applet/app/utils" | |||
"applet/app/utils/logx" | |||
"applet/consume/md" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git/rabbit" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/rule" | |||
"encoding/json" | |||
"errors" | |||
"fmt" | |||
"github.com/streadway/amqp" | |||
) | |||
func ZhiosMallGreenCoinConsume(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(1) | |||
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(">>>>>>>>>>>>>>>>ZhiosMallGreenCoinConsume<<<<<<<<<<<<<<<<<<<<<<<<<") | |||
err = handleZhiosMallGreenCoinConsume(res.Body) | |||
//_ = res.Reject(false) | |||
if err != nil { | |||
var canalMsg *md.ZhiosMallConsume | |||
var tmpString string | |||
err1 := json.Unmarshal(res.Body, &tmpString) | |||
if err1 == nil { | |||
fmt.Println(tmpString) | |||
err1 = json.Unmarshal([]byte(tmpString), &canalMsg) | |||
if err1 == nil { | |||
canalMsg.Err = err.Error() | |||
ch.Publish(md.MallGreenCoinConsume, utils.SerializeStr(canalMsg), md.MallGreenCoinConsumeKeyErr) | |||
} | |||
} | |||
} | |||
_ = res.Ack(true) | |||
} else { | |||
panic(errors.New("error getting message")) | |||
} | |||
} | |||
fmt.Println("get msg done") | |||
} | |||
func handleZhiosMallGreenCoinConsume(msg []byte) error { | |||
//1、解析canal采集至mq中queue的数据结构体 | |||
var canalMsg *md.ZhiosMallConsume | |||
fmt.Println(string(msg)) | |||
var tmpString string | |||
err := json.Unmarshal(msg, &tmpString) | |||
if err != nil { | |||
fmt.Println("===with", err.Error()) | |||
return err | |||
} | |||
fmt.Println(tmpString) | |||
err = json.Unmarshal([]byte(tmpString), &canalMsg) | |||
if err != nil { | |||
fmt.Println("===with", err.Error()) | |||
return err | |||
} | |||
mid := canalMsg.Mid | |||
eg := db.DBs[mid] | |||
if eg == nil { | |||
return nil | |||
} | |||
rule.InitForGreenCoinDoubleChainIntegral(cfg.RedisAddr) | |||
err = rule.DealUserGreenCoinDoubleChainIntegral(eg, utils.StrToInt(canalMsg.Uid), canalMsg.Oid, canalMsg.Mid) | |||
fmt.Println(err) | |||
if err != nil { | |||
return err | |||
} | |||
return nil | |||
} |
@@ -1,120 +0,0 @@ | |||
package consume | |||
import ( | |||
"applet/app/db" | |||
"applet/app/db/model" | |||
"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/shopspring/decimal" | |||
"github.com/streadway/amqp" | |||
"strings" | |||
"time" | |||
) | |||
func ZhiosOneCirclesCoinConsume(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(50) | |||
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(">>>>>>>>>>>>>>>>ZhiosOneCirclesCoinConsume<<<<<<<<<<<<<<<<<<<<<<<<<") | |||
err = handleZhiosOneCirclesCoinConsume(res.Body) | |||
if err != nil { | |||
fmt.Println("handleZhiosOneCirclesCoinConsume:::::", err.Error()) | |||
} | |||
//_ = res.Reject(false) | |||
err = res.Ack(true) | |||
fmt.Println("err ::: ", err) | |||
} else { | |||
panic(errors.New("error getting message")) | |||
} | |||
} | |||
fmt.Println("get msg done") | |||
} | |||
func handleZhiosOneCirclesCoinConsume(msg []byte) error { | |||
//1、解析canal采集至mq中queue的数据结构体 | |||
var canalMsg *md.CanalUserVirtualCoinFlowOrderMessage[md.CanalUserVirtualCoinFlowOrder] | |||
err := json.Unmarshal(msg, &canalMsg) | |||
if err != nil { | |||
return err | |||
} | |||
masterId := strings.Split(canalMsg.Database, "_")[1] | |||
if masterId != "31585332" { | |||
return nil | |||
} | |||
engine := db.DBs[masterId] | |||
now := time.Now() | |||
if canalMsg.Type == md.CanalMsgInsertSqlType { | |||
////2、查找 one_circles_green_energy_basic_setting 基础设置 | |||
//userPublicPlatoonDoubleNetworkSetting, err := db.UserPublicPlatoonDoubleNetworkSettingGetOneByParams(engine, map[string]interface{}{ | |||
// "key": "is_open", | |||
// "value": 1, | |||
//}) | |||
//if err != nil { | |||
// return err | |||
//} | |||
if canalMsg.Data[0].CoinId == utils.IntToStr(7) { //TODO::数据量太大,减少查询直接写死 | |||
//3、查找 user_public_platoon_double_network_user_coin_record | |||
userVirtualCoinFlowAggregation, err1 := db.UserVirtualCoinFlowAggregationGetOneByParams(engine, map[string]interface{}{ | |||
"key": "uid", | |||
"value": canalMsg.Data[0].Uid, | |||
}) | |||
if err1 != nil { | |||
return err1 | |||
} | |||
if userVirtualCoinFlowAggregation == nil { | |||
//新增记录 | |||
_, err3 := db.UserVirtualCoinFlowAggregationInsert(engine, &model.UserVirtualCoinFlowAggregation{ | |||
Uid: utils.StrToInt(canalMsg.Data[0].Uid), | |||
CoinId: utils.StrToInt(canalMsg.Data[0].CoinId), | |||
TodayData: canalMsg.Data[0].Amout, | |||
ThisWeekData: canalMsg.Data[0].Amout, | |||
ThisMonthData: canalMsg.Data[0].Amout, | |||
NowData: canalMsg.Data[0].Amout, | |||
CreateAt: now.Format("2006-01-02 15:04:05"), | |||
UpdateAt: now.Format("2006-01-02 15:04:05"), | |||
}) | |||
if err3 != nil { | |||
return err3 | |||
} | |||
} else { | |||
//更新记录 | |||
amount, _ := decimal.NewFromString(canalMsg.Data[0].Amout) | |||
todayData, _ := decimal.NewFromString(userVirtualCoinFlowAggregation.TodayData) | |||
thisWeekData, _ := decimal.NewFromString(userVirtualCoinFlowAggregation.ThisWeekData) | |||
thisMonthData, _ := decimal.NewFromString(userVirtualCoinFlowAggregation.ThisMonthData) | |||
userVirtualCoinFlowAggregation.TodayData = todayData.Add(amount).String() | |||
userVirtualCoinFlowAggregation.ThisWeekData = thisWeekData.Add(amount).String() | |||
userVirtualCoinFlowAggregation.ThisMonthData = thisMonthData.Add(amount).String() | |||
userVirtualCoinFlowAggregation.NowData = canalMsg.Data[0].AfterAmout | |||
_, err2 := db.UserVirtualCoinFlowAggregationUpdate(engine, userVirtualCoinFlowAggregation.Id, userVirtualCoinFlowAggregation, "today_data", "this_week_data", "this_month_data", "now_data") | |||
if err2 != nil { | |||
return err2 | |||
} | |||
} | |||
} | |||
} | |||
return nil | |||
} |
@@ -1,646 +0,0 @@ | |||
package consume | |||
import ( | |||
"applet/app/db" | |||
"applet/app/db/model" | |||
md2 "applet/app/md" | |||
"applet/app/utils" | |||
"applet/app/utils/logx" | |||
"applet/consume/md" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git/rabbit" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/lib/comm_plan" | |||
md3 "code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/md" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/rule" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/svc" | |||
"encoding/json" | |||
"errors" | |||
"fmt" | |||
"github.com/jinzhu/copier" | |||
"github.com/streadway/amqp" | |||
"github.com/tidwall/gjson" | |||
"time" | |||
"xorm.io/xorm" | |||
) | |||
func ZhiosOrderBuckle(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(1) | |||
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 = handleZhiosOrderBuckle(res.Body) | |||
//_ = res.Reject(false) | |||
if err != nil { | |||
_ = res.Reject(false) | |||
//TODO::重新推回队列末尾,避免造成队列堵塞 | |||
var msg *md.ZhiosOrderBuckle | |||
var tmpString string | |||
err := json.Unmarshal(res.Body, &tmpString) | |||
if err != nil { | |||
return | |||
} | |||
fmt.Println(tmpString) | |||
err = json.Unmarshal([]byte(tmpString), &msg) | |||
if err != nil { | |||
return | |||
} | |||
ch.Publish(queue.ExchangeName, utils.SerializeStr(msg), queue.RoutKey) | |||
} else { | |||
_ = res.Ack(true) | |||
} | |||
} else { | |||
panic(errors.New("error getting message")) | |||
} | |||
} | |||
fmt.Println("get msg done") | |||
} | |||
func handleZhiosOrderBuckle(msg []byte) error { | |||
//1、解析canal采集至mq中queue的数据结构体 | |||
var canalMsg *md.ZhiosOrderBuckle | |||
fmt.Println(string(msg)) | |||
var tmpString string | |||
err := json.Unmarshal(msg, &tmpString) | |||
if err != nil { | |||
fmt.Println("===with", err.Error()) | |||
return err | |||
} | |||
fmt.Println(tmpString) | |||
err = json.Unmarshal([]byte(tmpString), &canalMsg) | |||
if err != nil { | |||
fmt.Println("===with", err.Error()) | |||
return err | |||
} | |||
mid := canalMsg.Mid | |||
eg := db.DBs[mid] | |||
if eg == nil { | |||
return nil | |||
} | |||
sess := eg.NewSession() | |||
defer sess.Close() | |||
sess.Begin() | |||
ordData, err := db.OrderListByPvdOid(sess, canalMsg.Oid) | |||
if err != nil || ordData == nil { | |||
return nil | |||
} | |||
if ordData.OrderFormType < 0 || ordData.State > 3 { | |||
sess.Commit() | |||
return nil | |||
} | |||
user, _ := db.UserFindByID(eg, ordData.Uid) | |||
if user == nil { | |||
sess.Commit() | |||
return nil | |||
} | |||
//判断是否符合条件 TODO | |||
bools := checkUser(eg, canalMsg.Mid, user, utils.FloatFormat(ordData.BenefitAll, 3)) | |||
if bools == false { | |||
sess.Commit() | |||
return nil | |||
} | |||
fmt.Println(ordData) | |||
//加入分佣关系链 | |||
opts, commissionOpts, _ := svc.GetAllPlan(eg, canalMsg.Mid) | |||
if opts == nil { | |||
sess.Commit() | |||
return nil | |||
} | |||
BenefitAll := ordData.BenefitAll | |||
pvd := ordData.Pvd | |||
if ordData.OrderFormType == 1 { //京东自营 | |||
pvd = md3.PVD_JDOwn | |||
} | |||
var rmd = md3.CommissionParam{IsTikTokTeamOrder: utils.IntToStr(ordData.IsTikTokTeamOrder)} | |||
opt, err := svc.GetPlanCfg(eg, pvd, canalMsg.Mid, opts, commissionOpts, map[int]string{}, &rmd) | |||
if err != nil { | |||
sess.Commit() | |||
return nil | |||
} | |||
if opt.BuckleRate == 0 { | |||
sess.Commit() | |||
return nil | |||
} | |||
//计算出暗扣的比例 TODO | |||
if opt.BuckleRate > 0 { | |||
BenefitAll = utils.FloatFormat(ordData.BenefitAll*(1-opt.BuckleRate), 9) | |||
} | |||
var ord = md2.OrderInfo{ | |||
PvdOid: ordData.PvdOid, | |||
Pvd: pvd, | |||
ItemId: ordData.ItemId, | |||
ItemNum: ordData.ItemNum, | |||
ItemPrice: ordData.ItemPrice, | |||
PaidPrice: ordData.PaidPrice, | |||
OrderType: ordData.OrderType, | |||
Commission: BenefitAll, | |||
State: ordData.State, | |||
} | |||
//调用公共的分佣 | |||
isShare := 0 | |||
if ord.OrderType == 1 { | |||
isShare = 1 | |||
} | |||
//计算每个用户的分佣 | |||
req := md2.CommissionFirstParam{ | |||
CommissionParam: md2.CommissionParam{ | |||
Commission: utils.Float64ToStr(ord.Commission), | |||
PaidPrice: utils.Float64ToStr(ord.PaidPrice), | |||
OldPrice: utils.Float64ToStr(ord.PaidPrice), | |||
IsTikTokTeamOrder: utils.IntToStr(ordData.IsTikTokTeamOrder), | |||
}, | |||
Uid: utils.IntToStr(ordData.Uid), | |||
IsShare: isShare, | |||
Provider: ord.Pvd, | |||
IsAllLevelReturn: 1, | |||
} | |||
if utils.InArr(ord.Pvd, []string{md3.PVD_TB, md3.PVD_TM, md3.PVD_PDD, md3.PVD_SN, md3.PVD_KL, md3.PVD_JD, md3.PVD_JDOwn, md3.PVD_VIP}) == false { | |||
req.CommissionParam.GoodsPrice = utils.Float64ToStr(ord.PaidPrice) | |||
} | |||
commissionList, err := GetCommissionByCommApi(eg, canalMsg.Mid, req) | |||
if err != nil || commissionList.LvUser == nil { | |||
sess.Commit() | |||
return nil | |||
} | |||
pvdFee := commissionList.PvdFee | |||
sysFee := commissionList.SysFee | |||
subsidyFee := commissionList.SubsidyFee | |||
lvUser := commissionList.LvUser | |||
profit := commissionList.Profit | |||
ordData.SubsidyFee = subsidyFee | |||
ordData.PvdCommission = pvdFee | |||
ordData.SysCommission = sysFee | |||
ordData.BuckleCommission = utils.Float64ToStr(BenefitAll) | |||
if ordData.OrderFormType == 2 { | |||
ordData.OrderFormType = -2 | |||
} else { | |||
ordData.OrderFormType = -1 | |||
} | |||
var selfRate float64 = 0 | |||
var subsidyRate float64 = 0 | |||
//处理记录佣金 | |||
if opt != nil { | |||
profit = lvUser.Profit | |||
//判断下这个等级有么有设置 | |||
ordData.UserCommission = profit | |||
ordData.SubsidyRate = subsidyRate | |||
ordData.UserCommissionRate = selfRate | |||
ordData.PlanCommissionId = opt.PlanCommissionId | |||
ordData.BenefitList = SerializeLvUser(NewCalcLvUserFee(lvUser)) | |||
} | |||
has, _ := db.OrderListByUpdateOrd(sess, ordData) | |||
if has == false { | |||
sess.Rollback() | |||
return nil | |||
} | |||
//批量写入 | |||
if lvUser != nil { | |||
err := OrderRelateInsert(eg, sess, ordData.OrdId, ordData.Pvd, ordData.CreateAt, lvUser, ordData, canalMsg.Mid, true, opt.Mode, "1") | |||
if err != nil { | |||
sess.Rollback() | |||
return err | |||
} | |||
} | |||
sess.Commit() | |||
return nil | |||
} | |||
func checkUser(eg *xorm.Engine, dbName string, user *model.User, commission float64) bool { | |||
buckleData := db.SysCfgGetWithDb(eg, dbName, "buckle_data") | |||
//注册时间 | |||
lastMonthEstimateCommission := gjson.Get(buckleData, "last_month_estimate_commission").String() //用户上个月预估佣金金额大于 | |||
monthOrderCount := gjson.Get(buckleData, "month_order_count").String() //用户每月订单笔数 | |||
orderCommissionEnd := gjson.Get(buckleData, "order_commission_end").String() //用户订单佣金金额:结束区间 | |||
orderCommissionStart := gjson.Get(buckleData, "order_commission_start").String() //用户订单佣金金额:开始区间 | |||
userRegDay := gjson.Get(buckleData, "user_reg_day").String() //用户注册时间 | |||
if (time.Now().Unix()-user.CreateAt.Unix())/86400 < utils.StrToInt64(userRegDay) && utils.StrToInt64(userRegDay) > 0 { | |||
fmt.Println("时间=============", (time.Now().Unix()-user.CreateAt.Unix())/86400) | |||
return false | |||
} | |||
if utils.StrToFloat64(lastMonthEstimateCommission) > 0 { | |||
lastMonthRange := utils.GetTimeRange("last_month") | |||
// 统计上月预估 (预估包含结算部分且是有效订单) | |||
sqlTpl2 := `SELECT cast(SUM(IF(ol.state<>4 or pco.state=1 or dol.id>0 or ro.status<>'已退款' or pso.status<>'订单退款', LEFT(olr.amount,LENGTH(olr.amount)-2), 0)) as decimal(50,4)) AS amount | |||
FROM ord_list_relate olr | |||
LEFT JOIN ord_list ol ON olr.oid = ol.ord_id | |||
LEFT JOIN privilege_card_ord pco ON olr.oid =pco.ord_id | |||
LEFT JOIN duoyou_ord_list dol ON olr.oid =dol.oid | |||
LEFT JOIN recharge_order ro ON olr.oid =ro.oid | |||
LEFT JOIN playlet_sale_order pso ON olr.oid =pso.custom_oid | |||
WHERE olr.uid = ? | |||
AND olr.create_at >= ? | |||
AND olr.create_at < ? | |||
` | |||
lastMonthResult, _ := db.QueryNativeString(eg, sqlTpl2, user.Uid, lastMonthRange["start"], lastMonthRange["end"]) | |||
if len(lastMonthRange) == 0 { | |||
return false | |||
} | |||
fmt.Println("上月预估佣金=============", lastMonthResult[0]["amount"]) | |||
if utils.StrToFloat64(lastMonthResult[0]["amount"]) < utils.StrToFloat64(lastMonthEstimateCommission) { | |||
return false | |||
} | |||
} | |||
if utils.StrToFloat64(monthOrderCount) > 0 { | |||
currentMonth := utils.GetTimeRange("current_month") | |||
count, _ := eg.Where("uid=? and create_at>=?", user.Uid, currentMonth["start"]).In("state", []string{"0", "1", "2", "3", "5"}).Count(&model.OrdList{}) | |||
fmt.Println("本月订单数=============", count) | |||
if count < utils.StrToInt64(monthOrderCount) { | |||
return false | |||
} | |||
} | |||
if utils.StrToFloat64(orderCommissionEnd) > 0 && utils.StrToFloat64(orderCommissionStart) > 0 { | |||
fmt.Println("订单佣金=============", commission) | |||
if commission < utils.StrToFloat64(orderCommissionStart) { | |||
return false | |||
} | |||
if commission > utils.StrToFloat64(orderCommissionEnd) { | |||
return false | |||
} | |||
} | |||
return true | |||
} | |||
func OrderRelateInsert(eg *xorm.Engine, sess *xorm.Session, oid int64, pvd string, createTime int, lvUser *comm_plan.LvUser, newOrd *model.OrdList, masterId string, isDelete bool, mode string, isNew string) error { | |||
if lvUser == nil { | |||
return nil | |||
} | |||
uid := lvUser.Uid | |||
if uid == 0 { | |||
return nil | |||
} | |||
oldLvUser := lvUser | |||
oldLevel := 0 | |||
byOid, _ := db.OrderListByOid(sess, utils.Int64ToStr(oid)) | |||
data := OrderRelateInsertComm(eg, oid, pvd, createTime, lvUser, newOrd, masterId, mode) | |||
fmt.Println(data) | |||
if data == nil || len(data) == 0 { | |||
return nil | |||
} | |||
list, _ := db.OrderRelateFindByOid(sess, oid, pvd) | |||
listMap := make(map[int]model.OrdListRelate) | |||
if list != nil { | |||
for _, v := range *list { | |||
listMap[v.Uid] = v | |||
} | |||
} | |||
for k, v := range data { | |||
tmp, ok := listMap[v.Uid] | |||
if ok { | |||
data[k].OldAmount = tmp.Amount | |||
leave := utils.FloatFormat(tmp.Amount-v.Amount, 6) | |||
if leave >= 0 { | |||
var tmps = model.BuckleRecord{ | |||
Date: time.Now().Format("2006-01"), | |||
Time: time.Now(), | |||
Uid: v.Uid, | |||
OrdId: utils.Int64ToStr(v.Oid), | |||
PvdOrdId: byOid.PvdOid, | |||
Amount: utils.Float64ToStrByPrec(leave, 6), | |||
BeforeAmount: utils.Float64ToStrByPrec(tmp.Amount, 6), | |||
AfterAmount: utils.Float64ToStrByPrec(v.Amount, 6), | |||
Level: v.Level, | |||
} | |||
_, err := sess.Insert(&tmps) | |||
if err != nil { | |||
return err | |||
} | |||
} | |||
} | |||
} | |||
fmt.Println(isDelete) | |||
_, err2 := db.OrderRelateDeleteByOid(sess, oid, pvd) | |||
if err2 != nil { | |||
return err2 | |||
} | |||
_, err2 = db.VirtualCoinOrderRelateDeleteByOid(sess, oid, pvd) | |||
if err2 != nil { | |||
return err2 | |||
} | |||
//后写入 | |||
err := db.DbInsertBatchSess(sess, data) | |||
if err != nil { | |||
return err | |||
} else if lvUser.ProfitList != nil { | |||
// 插入虚拟币数据 | |||
vcrData := CombineVirtualCoinRelateData(oldLvUser, oid, pvd, oldLevel, mode) | |||
if len(vcrData) == 0 { | |||
return nil | |||
} | |||
err := db.DbInsertBatchSess(sess, vcrData) | |||
if err != nil { | |||
return err | |||
} | |||
} | |||
if lvUser.TikTokOwnSubsidyFeeList != nil { | |||
_, err2 := db.TikTokTeamOrderRelateDeleteByOid(sess, oid, pvd) | |||
if err != nil { | |||
return err2 | |||
} | |||
var teamData []model.TikTokTeamOrderRelate | |||
TikTokTeamCommission := newOrd.TikTokTeamCommission | |||
if utils.StrToFloat64(newOrd.TikTokTeamRealCommission) > 0 { | |||
TikTokTeamCommission = newOrd.TikTokTeamRealCommission | |||
} | |||
for k, v := range lvUser.TikTokOwnSubsidyFeeList { | |||
tmp := model.TikTokTeamOrderRelate{ | |||
CoinId: utils.StrToInt(k), | |||
Uid: uid, | |||
Amount: utils.Float64ToStrByPrec(v, 8), | |||
Oid: utils.Int64ToStr(oid), | |||
Time: time.Now(), | |||
Commission: TikTokTeamCommission, | |||
Pvd: pvd, | |||
} | |||
teamData = append(teamData, tmp) | |||
} | |||
if len(teamData) == 0 { | |||
return nil | |||
} | |||
err := db.DbInsertBatchSess(sess, &teamData) | |||
if err != nil { | |||
return err | |||
} | |||
} | |||
return nil | |||
} | |||
func OrderRelateInsertNew(eg *xorm.Engine, sess *xorm.Session, oid int64, pvd string, createTime int, lvUser *comm_plan.LvUser, newOrd *model.OrdList, masterId string, isDelete bool, mode string, isNew string) error { | |||
if lvUser == nil { | |||
return nil | |||
} | |||
uid := lvUser.Uid | |||
if uid == 0 { | |||
return nil | |||
} | |||
oldLvUser := lvUser | |||
oldLevel := 0 | |||
data := OrderRelateInsertComm(eg, oid, pvd, createTime, lvUser, newOrd, masterId, mode) | |||
fmt.Println(data) | |||
if data == nil || len(data) == 0 { | |||
return nil | |||
} | |||
list, _ := db.OrderRelateFindByOid(sess, oid, pvd) | |||
listMap := make(map[int]model.OrdListRelate) | |||
if list != nil { | |||
for _, v := range *list { | |||
listMap[v.Uid] = v | |||
} | |||
} | |||
fmt.Println(isDelete) | |||
_, err2 := db.OrderRelateDeleteByOid(sess, oid, pvd) | |||
if err2 != nil { | |||
return err2 | |||
} | |||
_, err2 = db.VirtualCoinOrderRelateDeleteByOid(sess, oid, pvd) | |||
if err2 != nil { | |||
return err2 | |||
} | |||
//后写入 | |||
err := db.DbInsertBatchSess(sess, data) | |||
if err != nil { | |||
return err | |||
} else if lvUser.ProfitList != nil { | |||
// 插入虚拟币数据 | |||
vcrData := CombineVirtualCoinRelateData(oldLvUser, oid, pvd, oldLevel, mode) | |||
if len(vcrData) == 0 { | |||
return nil | |||
} | |||
err := db.DbInsertBatchSess(sess, vcrData) | |||
if err != nil { | |||
return err | |||
} | |||
} | |||
if lvUser.TikTokOwnSubsidyFeeList != nil { | |||
_, err2 := db.TikTokTeamOrderRelateDeleteByOid(sess, oid, pvd) | |||
if err != nil { | |||
return err2 | |||
} | |||
var teamData []model.TikTokTeamOrderRelate | |||
TikTokTeamCommission := newOrd.TikTokTeamCommission | |||
if utils.StrToFloat64(newOrd.TikTokTeamRealCommission) > 0 { | |||
TikTokTeamCommission = newOrd.TikTokTeamRealCommission | |||
} | |||
for k, v := range lvUser.TikTokOwnSubsidyFeeList { | |||
tmp := model.TikTokTeamOrderRelate{ | |||
CoinId: utils.StrToInt(k), | |||
Uid: uid, | |||
Amount: utils.Float64ToStrByPrec(v, 8), | |||
Oid: utils.Int64ToStr(oid), | |||
Time: time.Now(), | |||
Commission: TikTokTeamCommission, | |||
Pvd: pvd, | |||
} | |||
teamData = append(teamData, tmp) | |||
} | |||
if len(teamData) == 0 { | |||
return nil | |||
} | |||
err := db.DbInsertBatchSess(sess, &teamData) | |||
if err != nil { | |||
return err | |||
} | |||
} | |||
return nil | |||
} | |||
func CombineVirtualCoinRelateData(lvUser *comm_plan.LvUser, oid int64, pvd string, level int, mode string) []*model.VirtualCoinRelate { | |||
var data []*model.VirtualCoinRelate | |||
//可能没有极差返利 只有补贴 | |||
profitList := lvUser.ProfitList | |||
if len(profitList) == 0 { | |||
profitList = lvUser.SubsidyFeeList | |||
} | |||
if profitList != nil { | |||
var subsidyFeeList map[string]float64 | |||
if lvUser.SubsidyFeeList != nil && len(lvUser.ProfitList) > 0 { | |||
subsidyFeeList = convertList2Map(lvUser.SubsidyFeeList) | |||
} | |||
var coinList = make([]string, 0) | |||
for _, v := range profitList { | |||
coinList = append(coinList, v.Cid) | |||
} | |||
if utils.InArr(mode, []string{"lv_winery", "public_platoon"}) && lvUser.SubsidyFeeList != nil { //补贴类型 没有的要补上 | |||
subsidyFeeList = convertList2Map(lvUser.SubsidyFeeList) | |||
for _, v := range lvUser.SubsidyFeeList { | |||
if utils.InArr(v.Cid, coinList) == false && v.Val > 0 { | |||
v.Val = 0 | |||
profitList = append(profitList, v) | |||
} | |||
} | |||
} | |||
for _, item := range profitList { | |||
if item.Cid != "0" && item.Cid != "commission" { | |||
//加上补贴 | |||
subsidyFee := subsidyFeeList[item.Cid] | |||
var ownSubsidyFee float64 = 0 | |||
ownSubsidyFee1, ok := lvUser.OwnSubsidyFeeList[item.Cid] | |||
if ok { | |||
ownSubsidyFee = ownSubsidyFee1 | |||
} | |||
var additionalSubsidy float64 = 0 | |||
profit := utils.Float64ToStrByPrec(item.Val+subsidyFee+ownSubsidyFee, 9) | |||
if utils.InArr(mode, []string{"lv_winery", "public_platoon"}) { | |||
profit = utils.Float64ToStrByPrec(item.Val+ownSubsidyFee, 9) | |||
additionalSubsidy = subsidyFee | |||
} | |||
if mode == "public_platoon" && level > 1 { | |||
profit = "0" | |||
} | |||
if lvUser.Uid == 0 { | |||
continue | |||
} | |||
var virtualCoinRelate = &model.VirtualCoinRelate{ | |||
Oid: oid, | |||
Uid: lvUser.Uid, | |||
CoinId: utils.StrToInt(item.Cid), | |||
Amount: profit, | |||
Pvd: pvd, | |||
CreateAt: int(time.Now().Unix()), | |||
Level: level, | |||
Mode: mode, | |||
AdditionalSubsidy: utils.Float64ToStrByPrec(additionalSubsidy, 6), | |||
ExtendType: lvUser.ExtendType, | |||
} | |||
data = append(data, virtualCoinRelate) | |||
} | |||
} | |||
} | |||
if lvUser.ParentUser != nil { | |||
level += 1 | |||
data = append(data, CombineVirtualCoinRelateData(lvUser.ParentUser, oid, pvd, level, mode)...) | |||
} | |||
return data | |||
} | |||
func convertList2Map(a []*comm_plan.VirtualCoinCommission) (b map[string]float64) { | |||
b = make(map[string]float64) | |||
for _, i := range a { | |||
b[i.Cid] = i.Val | |||
} | |||
return b | |||
} | |||
func OrderRelateInsertComm(eg *xorm.Engine, oid int64, pvd string, createTime int, lvUser *comm_plan.LvUser, newOrd *model.OrdList, masterId string, mode string) []*model.OrdListRelate { | |||
var datas []*model.OrdListRelate | |||
if lvUser == nil { | |||
return datas | |||
} | |||
level := 0 | |||
fmt.Println("关系链---"+utils.Int64ToStr(oid)+"---"+pvd+"---", utils.SerializeStr(lvUser)) | |||
var ownSubsidyFee float64 = 0 | |||
ownSubsidyFee1, ok := lvUser.OwnSubsidyFeeList["0"] | |||
if ok { | |||
ownSubsidyFee = ownSubsidyFee1 | |||
} | |||
profit := utils.FloatFormat(lvUser.Profit+lvUser.SubsidyFee+ownSubsidyFee, 9) | |||
data := []*model.OrdListRelate{{Oid: oid, Uid: lvUser.Uid, Amount: profit, AdditionalSubsidy: utils.Float64ToStrByPrec(lvUser.AdditionalSubsidy, 9), Pvd: pvd, CreateAt: createTime, Level: level, Mode: mode, ExtendType: lvUser.ExtendType}} | |||
for lvUser.ParentUser != nil { | |||
lvUser = lvUser.ParentUser | |||
fmt.Println(lvUser) | |||
level = level + 1 | |||
profit = utils.FloatFormat(lvUser.Profit+lvUser.SubsidyFee, 9) | |||
var additionalSubsidy float64 = 0 | |||
if utils.InArr(mode, []string{"lv_winery", "public_platoon"}) { | |||
profit = utils.FloatFormat(lvUser.Profit, 6) | |||
additionalSubsidy = lvUser.SubsidyFee | |||
} | |||
if lvUser.Uid == 0 { | |||
continue | |||
} | |||
data = append(data, &model.OrdListRelate{ | |||
Oid: oid, | |||
Uid: lvUser.Uid, | |||
Amount: profit, | |||
Pvd: pvd, | |||
CreateAt: createTime, | |||
Level: level, | |||
Mode: mode, | |||
AdditionalSubsidy: utils.Float64ToStrByPrec(additionalSubsidy, 9), | |||
ExtendType: lvUser.ExtendType, | |||
}) | |||
} | |||
return data | |||
} | |||
func SerializeLvUser(lvUser map[int]float64) string { | |||
s := "" | |||
for k, v := range lvUser { | |||
s += "|" + utils.IntToStr(k) + ":" + utils.Float64ToStr(v) | |||
} | |||
return s | |||
} | |||
func NewCalcLvUserFee(lvUser *comm_plan.LvUser) map[int]float64 { | |||
fee := map[int]float64{} | |||
if lvUser == nil { | |||
return fee | |||
} | |||
if lvUser.ParentUser == nil { | |||
fee[lvUser.Uid] = lvUser.Profit | |||
} | |||
for lvUser.ParentUser != nil { | |||
fee[lvUser.Uid] = lvUser.Profit | |||
lvUser = lvUser.ParentUser | |||
} | |||
return fee | |||
} | |||
func SettleComm(eg *xorm.Engine, masterId string, CommissionParam md2.CommissionFirstParam) (float64, float64, float64, float64, *comm_plan.LvUser, error) { | |||
var CommissionParam1 = md3.CommissionFirstParam{} | |||
copier.Copy(&CommissionParam1, CommissionParam) | |||
profit, pvdFee, sysFee, subsidyFee, lvUser, err := rule.SettleCommWithOrder(eg, masterId, CommissionParam1) | |||
return profit, pvdFee, sysFee, subsidyFee, lvUser, err | |||
} | |||
// GetCommissionByCommApi 调用公共接口获取佣金 | |||
func GetCommissionByCommApi(eg *xorm.Engine, masterId string, req md2.CommissionFirstParam) (*comm_plan.SettleCommissionToGuide, error) { | |||
profit, pvdFee, sysFee, subsidyFee, lvUser, err := SettleComm(eg, masterId, req) | |||
if err != nil { | |||
return nil, err | |||
} | |||
result := &comm_plan.SettleCommissionToGuide{ | |||
Profit: profit, | |||
PvdFee: pvdFee, | |||
SysFee: sysFee, | |||
SubsidyFee: subsidyFee, | |||
LvUser: lvUser, | |||
} | |||
return result, nil | |||
} |
@@ -1,623 +0,0 @@ | |||
package consume | |||
import ( | |||
"applet/app/db" | |||
"applet/app/db/model" | |||
md2 "applet/app/md" | |||
svc2 "applet/app/svc" | |||
"applet/app/utils" | |||
"applet/app/utils/logx" | |||
"applet/consume/md" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git/rabbit" | |||
md3 "code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/md" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/svc" | |||
"encoding/json" | |||
"errors" | |||
"fmt" | |||
"github.com/streadway/amqp" | |||
"strings" | |||
"time" | |||
"xorm.io/xorm" | |||
) | |||
func ZhiosOrderFree(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(100) | |||
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 = handleZhiosOrderFree(res.Body) | |||
//_ = res.Reject(false) | |||
if err == nil { | |||
_ = res.Ack(true) | |||
} | |||
} else { | |||
panic(errors.New("error getting message")) | |||
} | |||
} | |||
fmt.Println("get msg done") | |||
} | |||
func handleZhiosOrderFree(msg []byte) error { | |||
time.Sleep(time.Microsecond * 20) // 等待500毫秒 | |||
//1、解析canal采集至mq中queue的数据结构体 | |||
var canalMsg *md.ZhiosOrderFree | |||
fmt.Println(string(msg)) | |||
var tmpString string | |||
err := json.Unmarshal(msg, &tmpString) | |||
if err != nil { | |||
fmt.Println("===with", err.Error()) | |||
return err | |||
} | |||
fmt.Println(tmpString) | |||
err = json.Unmarshal([]byte(tmpString), &canalMsg) | |||
if err != nil { | |||
fmt.Println("===with", err.Error()) | |||
return err | |||
} | |||
mid := canalMsg.Mid | |||
eg := db.DBs[mid] | |||
if eg == nil { | |||
return nil | |||
} | |||
sess := eg.NewSession() | |||
defer sess.Close() | |||
sess.Begin() | |||
ordData, err := db.OrderListByPvdOid(sess, canalMsg.Oid) | |||
if err != nil || ordData == nil { | |||
return nil | |||
} | |||
if ordData.State > 3 || ordData.PriceType > 0 || ordData.ThirdPriceType > 0 { | |||
return nil | |||
} | |||
if canalMsg.OrderType == "13" { | |||
freeNewType := db.SysCfgGetWithDb(eg, canalMsg.Mid, "more_free_new_type") | |||
freeOrder := moreOrderFreeCheck(eg, sess, canalMsg) | |||
if freeOrder != nil { | |||
priceType := freeOrder.PriceType | |||
ordData.ThirdPriceType = priceType | |||
fee := utils.StrToFloat64(freeOrder.Fee) | |||
allCommission := utils.StrToFloat64(freeOrder.ReturnMoney) | |||
ordData.BenefitAll = allCommission | |||
ownbuyReturnType := 0 | |||
if freeOrder.OwnbuyReturnType == 0 && freeOrder.ReturnType == 1 { //自购补贴等于0为关闭 并且是淘礼金商品 | |||
ownbuyReturnType = 1 | |||
} | |||
storeId := freeOrder.StoreId | |||
bili := utils.StrToFloat64(freeOrder.Bili) | |||
//加入分佣关系链 | |||
opts, commissionOpts, _ := svc.GetAllPlan(eg, canalMsg.Mid) | |||
if opts == nil { | |||
sess.Commit() | |||
return nil | |||
} | |||
BenefitAll := ordData.BenefitAll | |||
pvd := "moreFree_" + utils.IntToStr(priceType) | |||
var rmd = md3.CommissionParam{IsTikTokTeamOrder: utils.IntToStr(ordData.IsTikTokTeamOrder)} | |||
opt, err := svc.GetPlanCfg(eg, pvd, canalMsg.Mid, opts, commissionOpts, map[int]string{}, &rmd) | |||
if err != nil { | |||
sess.Commit() | |||
return nil | |||
} | |||
var ord = md2.OrderInfo{ | |||
PvdOid: ordData.PvdOid, | |||
Pvd: pvd, | |||
ItemId: ordData.ItemId, | |||
ItemNum: ordData.ItemNum, | |||
ItemPrice: ordData.ItemPrice, | |||
PaidPrice: ordData.PaidPrice, | |||
OrderType: ordData.OrderType, | |||
Commission: BenefitAll, | |||
State: ordData.State, | |||
} | |||
//调用公共的分佣 | |||
isShare := 0 | |||
if ord.OrderType == 1 { | |||
isShare = 1 | |||
} | |||
//计算每个用户的分佣 | |||
req := md2.CommissionFirstParam{ | |||
CommissionParam: md2.CommissionParam{ | |||
Commission: utils.Float64ToStr(ord.Commission), | |||
PaidPrice: utils.Float64ToStr(ord.PaidPrice), | |||
OldPrice: utils.Float64ToStr(ord.PaidPrice), | |||
IsTikTokTeamOrder: utils.IntToStr(ordData.IsTikTokTeamOrder), | |||
}, | |||
Uid: utils.IntToStr(ordData.Uid), | |||
IsShare: isShare, | |||
Provider: ord.Pvd, | |||
IsAllLevelReturn: 1, | |||
OwnbuyReturnType: ownbuyReturnType, | |||
} | |||
if utils.InArr(ord.Pvd, []string{md3.PVD_TB, md3.PVD_TM, md3.PVD_PDD, md3.PVD_SN, md3.PVD_KL, md3.PVD_JD, md3.PVD_JDOwn, md3.PVD_VIP}) == false { | |||
req.CommissionParam.GoodsPrice = utils.Float64ToStr(ord.PaidPrice) | |||
} | |||
commissionList, err := GetCommissionByCommApi(eg, canalMsg.Mid, req) | |||
if err != nil || commissionList.LvUser == nil { | |||
sess.Commit() | |||
return nil | |||
} | |||
pvdFee := commissionList.PvdFee | |||
sysFee := commissionList.SysFee | |||
subsidyFee := commissionList.SubsidyFee | |||
lvUser := commissionList.LvUser | |||
profit := commissionList.Profit | |||
ordData.SubsidyFee = subsidyFee | |||
ordData.PvdCommission = pvdFee | |||
ordData.SysCommission = sysFee | |||
var selfRate float64 = 0 | |||
var subsidyRate float64 = 0 | |||
//处理记录佣金 | |||
if opt != nil { | |||
profit = lvUser.Profit | |||
//判断下这个等级有么有设置 | |||
ordData.UserCommission = profit | |||
ordData.SubsidyRate = subsidyRate | |||
ordData.UserCommissionRate = selfRate | |||
ordData.PlanCommissionId = opt.PlanCommissionId | |||
ordData.BenefitList = SerializeLvUser(NewCalcLvUserFee(lvUser)) | |||
} | |||
if storeId > 0 { | |||
deductPrice := (allCommission + fee) * bili | |||
arg := md.ZhiosGuideStoreOrder{ | |||
Uid: utils.IntToStr(ordData.Uid), | |||
Mid: canalMsg.Mid, | |||
Oid: ordData.PvdOid, | |||
StoreId: utils.IntToStr(storeId), | |||
DeductPrice: utils.Float64ToStr(deductPrice), | |||
ItemTitle: ord.ItemTitle, | |||
Pvd: "free", | |||
SubsidyPrice: utils.Float64ToStr(allCommission), | |||
Fee: utils.Float64ToStr(fee), | |||
State: utils.IntToStr(ordData.State), | |||
Type: "success", | |||
} | |||
ordData.Data = utils.SerializeStr(arg) | |||
} | |||
has, _ := db.OrderListByUpdateOrd(sess, ordData) | |||
if has == false { | |||
sess.Rollback() | |||
return nil | |||
} | |||
//批量写入 | |||
if lvUser != nil { | |||
if freeNewType == "1" { | |||
lvUser.AdditionalSubsidy = ordData.BenefitAll | |||
} | |||
err := OrderRelateInsertNew(eg, sess, ordData.OrdId, ordData.Pvd, ordData.CreateAt, lvUser, ordData, canalMsg.Mid, true, opt.Mode, "1") | |||
if err != nil { | |||
sess.Rollback() | |||
return err | |||
} | |||
} | |||
} | |||
} else { | |||
freeNewType := db.SysCfgGetWithDb(eg, canalMsg.Mid, "free_new_type") | |||
freeOrder := orderFreeCheck(eg, sess, canalMsg) | |||
if freeOrder != nil { | |||
priceType := freeOrder.PriceType | |||
ordData.PriceType = priceType | |||
fee := utils.StrToFloat64(freeOrder.Fee) | |||
allCommission := utils.StrToFloat64(freeOrder.ReturnMoney) | |||
ordData.BenefitAll = allCommission | |||
ownbuyReturnType := 0 | |||
if freeOrder.OwnbuyReturnType == 0 && freeOrder.ReturnType == 1 { //自购补贴等于0为关闭 并且是淘礼金商品 | |||
ownbuyReturnType = 1 | |||
} | |||
storeId := freeOrder.StoreId | |||
bili := utils.StrToFloat64(freeOrder.Bili) | |||
//加入分佣关系链 | |||
opts, commissionOpts, _ := svc.GetAllPlan(eg, canalMsg.Mid) | |||
if opts == nil { | |||
sess.Commit() | |||
return nil | |||
} | |||
if canalMsg.OrderType == "6" || canalMsg.OrderType == "7" { | |||
ordData.OrderType = 3 //淘礼金免单 | |||
} | |||
BenefitAll := ordData.BenefitAll | |||
pvd := "free" | |||
var rmd = md3.CommissionParam{IsTikTokTeamOrder: utils.IntToStr(ordData.IsTikTokTeamOrder)} | |||
opt, err := svc.GetPlanCfg(eg, pvd, canalMsg.Mid, opts, commissionOpts, map[int]string{}, &rmd) | |||
if err != nil { | |||
sess.Commit() | |||
return nil | |||
} | |||
var ord = md2.OrderInfo{ | |||
PvdOid: ordData.PvdOid, | |||
Pvd: pvd, | |||
ItemId: ordData.ItemId, | |||
ItemNum: ordData.ItemNum, | |||
ItemPrice: ordData.ItemPrice, | |||
PaidPrice: ordData.PaidPrice, | |||
OrderType: ordData.OrderType, | |||
Commission: BenefitAll, | |||
State: ordData.State, | |||
} | |||
//调用公共的分佣 | |||
isShare := 0 | |||
if ord.OrderType == 1 { | |||
isShare = 1 | |||
} | |||
//计算每个用户的分佣 | |||
req := md2.CommissionFirstParam{ | |||
CommissionParam: md2.CommissionParam{ | |||
Commission: utils.Float64ToStr(ord.Commission), | |||
PaidPrice: utils.Float64ToStr(ord.PaidPrice), | |||
OldPrice: utils.Float64ToStr(ord.PaidPrice), | |||
IsTikTokTeamOrder: utils.IntToStr(ordData.IsTikTokTeamOrder), | |||
}, | |||
Uid: utils.IntToStr(ordData.Uid), | |||
IsShare: isShare, | |||
Provider: ord.Pvd, | |||
IsAllLevelReturn: 1, | |||
OwnbuyReturnType: ownbuyReturnType, | |||
} | |||
if utils.InArr(ord.Pvd, []string{md3.PVD_TB, md3.PVD_TM, md3.PVD_PDD, md3.PVD_SN, md3.PVD_KL, md3.PVD_JD, md3.PVD_JDOwn, md3.PVD_VIP}) == false { | |||
req.CommissionParam.GoodsPrice = utils.Float64ToStr(ord.PaidPrice) | |||
} | |||
commissionList, err := GetCommissionByCommApi(eg, canalMsg.Mid, req) | |||
if err != nil || commissionList.LvUser == nil { | |||
sess.Commit() | |||
return nil | |||
} | |||
pvdFee := commissionList.PvdFee | |||
sysFee := commissionList.SysFee | |||
subsidyFee := commissionList.SubsidyFee | |||
lvUser := commissionList.LvUser | |||
profit := commissionList.Profit | |||
ordData.SubsidyFee = subsidyFee | |||
ordData.PvdCommission = pvdFee | |||
ordData.SysCommission = sysFee | |||
var selfRate float64 = 0 | |||
var subsidyRate float64 = 0 | |||
//处理记录佣金 | |||
if opt != nil { | |||
profit = lvUser.Profit | |||
//判断下这个等级有么有设置 | |||
ordData.UserCommission = profit | |||
ordData.SubsidyRate = subsidyRate | |||
ordData.UserCommissionRate = selfRate | |||
ordData.PlanCommissionId = opt.PlanCommissionId | |||
ordData.BenefitList = SerializeLvUser(NewCalcLvUserFee(lvUser)) | |||
} | |||
if storeId > 0 { | |||
deductPrice := (allCommission + fee) * bili | |||
arg := md.ZhiosGuideStoreOrder{ | |||
Uid: utils.IntToStr(ordData.Uid), | |||
Mid: canalMsg.Mid, | |||
Oid: ordData.PvdOid, | |||
StoreId: utils.IntToStr(storeId), | |||
DeductPrice: utils.Float64ToStr(deductPrice), | |||
ItemTitle: ord.ItemTitle, | |||
Pvd: "free", | |||
SubsidyPrice: utils.Float64ToStr(allCommission), | |||
Fee: utils.Float64ToStr(fee), | |||
State: utils.IntToStr(ordData.State), | |||
Type: "success", | |||
} | |||
ordData.Data = utils.SerializeStr(arg) | |||
} | |||
has, _ := db.OrderListByUpdateOrd(sess, ordData) | |||
if has == false { | |||
sess.Rollback() | |||
return nil | |||
} | |||
//批量写入 | |||
if lvUser != nil { | |||
if freeNewType == "1" { | |||
lvUser.AdditionalSubsidy = ordData.BenefitAll | |||
} | |||
err := OrderRelateInsertNew(eg, sess, ordData.OrdId, ordData.Pvd, ordData.CreateAt, lvUser, ordData, canalMsg.Mid, true, opt.Mode, "1") | |||
if err != nil { | |||
sess.Rollback() | |||
return err | |||
} | |||
} | |||
} | |||
} | |||
sess.Commit() | |||
return nil | |||
} | |||
func orderFreeCheck(eg *xorm.Engine, sess *xorm.Session, canalMsg *md.ZhiosOrderFree) *model.NewcomersFreeProduct { | |||
m, err := db.FreeProductByID(sess, canalMsg.ItemId, canalMsg.OptPvd) | |||
stock := 0 | |||
if m != nil && m.StoreId > 0 { //小于多少份就不能出售了 | |||
guideStoreStock := db.SysCfgGetWithDb(eg, canalMsg.Mid, "guide_store_stock") | |||
stock = utils.StrToInt(guideStoreStock) | |||
} | |||
if err != nil || m == nil || (m != nil && m.Stock <= stock) { | |||
sess.Rollback() | |||
return nil | |||
} | |||
if strings.Contains(canalMsg.Pid, "free_") && m.ReturnType == 0 { | |||
mt, err := db.FreePriceTypeByID(sess, m.PriceType) | |||
if err != nil || mt == nil { | |||
sess.Rollback() | |||
return nil | |||
} | |||
limitBuyConditions := &md.LimitBuyCondition{} | |||
utils.Unserialize([]byte(mt.LimitBuyCondition), limitBuyConditions) | |||
//判断条件前,先判断下有没有限购 | |||
if mt.NeedLimitBuy == 1 { | |||
//判断当前栏目购买商品数量 并且开启了 | |||
if limitBuyConditions.OpenMoregoodsBuy == "1" && utils.StrToInt64(limitBuyConditions.MoregoodsBuyLimit) > 0 { | |||
moreGoodsCount, _ := db.OrderListCountByPriceType(sess, canalMsg.Uid, mt.Id, utils.StrToInt(limitBuyConditions.MoregoodsBuyLimitDay)) | |||
if moreGoodsCount+1 > utils.StrToInt64(limitBuyConditions.MoregoodsBuyLimit) { | |||
sess.Rollback() | |||
return nil | |||
} | |||
} | |||
//判断当前栏目购买商品数量 并且开启了 | |||
if limitBuyConditions.OpenOnegoodsBuy == "1" && utils.StrToInt64(limitBuyConditions.OnegoodsBuyLimit) > 0 { | |||
moreGoodsCount, _ := db.OrderListCountByItemId(sess, canalMsg.Uid, canalMsg.ItemId, utils.StrToInt(limitBuyConditions.OnegoodsBuyLimitDay)) | |||
if moreGoodsCount+1 > utils.StrToInt64(limitBuyConditions.OnegoodsBuyLimit) { | |||
sess.Rollback() | |||
return nil | |||
} | |||
} | |||
} | |||
// 查找用户剩余的免单资格数 | |||
profile, err := db.UserProfileFindByID(eg, canalMsg.Uid) | |||
if err != nil || profile == nil { | |||
logx.Warn(err) | |||
sess.Rollback() | |||
return nil | |||
} | |||
if m.StoreId > 0 { | |||
//商家放单 查下冻结 | |||
coinId := db.SysCfgGetWithDb(eg, canalMsg.Uid, "guide_store_coin_id") | |||
amount := db.GetUserVirtualCoinAmount(eg, m.StoreId, coinId) | |||
if amount == nil { | |||
sess.Rollback() | |||
return nil | |||
} | |||
if utils.StrToFloat64(amount.FreezeAmount) < utils.StrToFloat64(m.ReturnMoney) { | |||
sess.Rollback() | |||
return nil | |||
} | |||
} | |||
//判断要不要扣免单券 | |||
if mt.NeedUseQuan == 1 { | |||
// 更新剩余次数 | |||
isNeed := 1 | |||
if mt.NeedQuan == 0 { | |||
isNeed = 0 | |||
} | |||
if mt.NeedQuan > profile.FreeRemainTime { | |||
auth, perm := svc2.CheckNewOrderAuth(eg, utils.StrToInt(canalMsg.Uid), mt) | |||
if perm.AuthType == "all" || auth == false { | |||
sess.Rollback() | |||
return nil | |||
} | |||
if perm.AuthType != "all" && auth == true { | |||
isNeed = 0 | |||
} | |||
} | |||
if isNeed == 1 { | |||
profile.FreeRemainTime = profile.FreeRemainTime - mt.NeedQuan | |||
_, err = db.UserProfileUpdate(eg, profile.Uid, profile, "free_remain_time") | |||
if err != nil { | |||
logx.Warn(err) | |||
sess.Rollback() | |||
return nil | |||
} | |||
// 插入日志记录 | |||
db.FreeQualificationRecordInsertOne(eg, &model.NewcomersQualificationRecord{ | |||
Uid: profile.Uid, | |||
Source: 3, | |||
SourceText: "消费扣除", | |||
OrderId: utils.StrToInt64(canalMsg.Oid), | |||
ChangeNum: -mt.NeedQuan, | |||
AfterChangeNum: profile.FreeRemainTime, | |||
CreatedAt: time.Now(), | |||
UpdatedAt: time.Now(), | |||
}) | |||
} | |||
} | |||
m.Stock-- | |||
if m.Stock < 0 { | |||
m.Stock = 0 | |||
} | |||
m.Sale++ | |||
_, err = eg.Where("id=?", m.Id).Cols("stock,sale").Update(m) | |||
if err != nil { | |||
sess.Rollback() | |||
return nil | |||
} | |||
if m.StoreId > 0 { //扣库存 | |||
var storeGoods model.GuideStoreGoods | |||
_, err := sess.Where("gid=? and delete_time is null and stock>?", m.GoodId, 0).Get(&storeGoods) | |||
if err != nil { | |||
sess.Rollback() | |||
return nil | |||
} | |||
storeGoods.Stock-- | |||
if storeGoods.Stock < 0 { | |||
storeGoods.DownState = 3 | |||
storeGoods.EndTime = int(time.Now().Unix()) | |||
} | |||
_, err = sess.Where("id=?", storeGoods.Id).Cols("down_state,end_time,stock").Update(&storeGoods) | |||
if err != nil { | |||
sess.Rollback() | |||
return nil | |||
} | |||
} | |||
sess.Commit() | |||
return m | |||
} | |||
sess.Commit() | |||
return m | |||
} | |||
func moreOrderFreeCheck(eg *xorm.Engine, sess *xorm.Session, canalMsg *md.ZhiosOrderFree) *model.MoreNewcomersFreeProduct { | |||
m, err := db.MoreFreeProductByID(sess, canalMsg.ItemId, canalMsg.OptPvd) | |||
stock := 0 | |||
if m != nil && m.StoreId > 0 { //小于多少份就不能出售了 | |||
guideStoreStock := db.SysCfgGetWithDb(eg, canalMsg.Mid, "guide_store_stock") | |||
stock = utils.StrToInt(guideStoreStock) | |||
} | |||
if err != nil || m == nil || (m != nil && m.Stock <= stock) { | |||
sess.Rollback() | |||
return nil | |||
} | |||
if strings.Contains(canalMsg.Pid, "moreFree_") && m.ReturnType == 0 { | |||
mt, err := db.MoreFreePriceTypeByID(sess, m.PriceType) | |||
if err != nil || mt == nil { | |||
sess.Rollback() | |||
return nil | |||
} | |||
limitBuyConditions := &md.LimitBuyCondition{} | |||
utils.Unserialize([]byte(mt.LimitBuyCondition), limitBuyConditions) | |||
//判断条件前,先判断下有没有限购 | |||
if mt.NeedLimitBuy == 1 { | |||
//判断当前栏目购买商品数量 并且开启了 | |||
if limitBuyConditions.OpenMoregoodsBuy == "1" && utils.StrToInt64(limitBuyConditions.MoregoodsBuyLimit) > 0 { | |||
moreGoodsCount, _ := db.OrderListCountByMorePriceType(sess, canalMsg.Uid, mt.Id, utils.StrToInt(limitBuyConditions.MoregoodsBuyLimitDay)) | |||
if moreGoodsCount+1 > utils.StrToInt64(limitBuyConditions.MoregoodsBuyLimit) { | |||
sess.Rollback() | |||
return nil | |||
} | |||
} | |||
//判断当前栏目购买商品数量 并且开启了 | |||
if limitBuyConditions.OpenOnegoodsBuy == "1" && utils.StrToInt64(limitBuyConditions.OnegoodsBuyLimit) > 0 { | |||
moreGoodsCount, _ := db.OrderListCountByMoreItemId(sess, canalMsg.Uid, canalMsg.ItemId, utils.StrToInt(limitBuyConditions.OnegoodsBuyLimitDay)) | |||
if moreGoodsCount+1 > utils.StrToInt64(limitBuyConditions.OnegoodsBuyLimit) { | |||
sess.Rollback() | |||
return nil | |||
} | |||
} | |||
} | |||
// 查找用户剩余的免单资格数 | |||
profile, err := db.UserProfileFindByID(eg, canalMsg.Uid) | |||
if err != nil || profile == nil { | |||
logx.Warn(err) | |||
sess.Rollback() | |||
return nil | |||
} | |||
if m.StoreId > 0 { | |||
//商家放单 查下冻结 | |||
coinId := db.SysCfgGetWithDb(eg, canalMsg.Uid, "guide_store_coin_id") | |||
amount := db.GetUserVirtualCoinAmount(eg, m.StoreId, coinId) | |||
if amount == nil { | |||
sess.Rollback() | |||
return nil | |||
} | |||
if utils.StrToFloat64(amount.FreezeAmount) < utils.StrToFloat64(m.ReturnMoney) { | |||
sess.Rollback() | |||
return nil | |||
} | |||
} | |||
//判断要不要扣免单券 | |||
if mt.NeedUseQuan == 1 { | |||
// 更新剩余次数 | |||
isNeed := 1 | |||
if mt.NeedQuan == 0 { | |||
isNeed = 0 | |||
} | |||
if mt.NeedQuan > profile.ThirdFreeRemainTime { | |||
auth, perm := svc2.MoreCheckNewOrderAuth(eg, utils.StrToInt(canalMsg.Uid), mt) | |||
if perm.AuthType == "all" || auth == false { | |||
sess.Rollback() | |||
return nil | |||
} | |||
if perm.AuthType != "all" && auth == true { | |||
isNeed = 0 | |||
} | |||
} | |||
if isNeed == 1 { | |||
profile.ThirdFreeRemainTime = profile.ThirdFreeRemainTime - mt.NeedQuan | |||
_, err = db.UserProfileUpdate(eg, profile.Uid, profile, "third_free_remain_time") | |||
if err != nil { | |||
logx.Warn(err) | |||
sess.Rollback() | |||
return nil | |||
} | |||
// 插入日志记录 | |||
db.ThirdFreeQualificationRecordInsertOne(eg, &model.ThirdNewcomersQualificationRecord{ | |||
Uid: profile.Uid, | |||
Source: 3, | |||
SourceText: "消费扣除", | |||
OrderId: utils.StrToInt64(canalMsg.Oid), | |||
ChangeNum: -mt.NeedQuan, | |||
AfterChangeNum: profile.ThirdFreeRemainTime, | |||
CreatedAt: time.Now(), | |||
UpdatedAt: time.Now(), | |||
}) | |||
} | |||
} | |||
m.Stock-- | |||
if m.Stock < 0 { | |||
m.Stock = 0 | |||
} | |||
m.Sale++ | |||
_, err = eg.Where("id=?", m.Id).Cols("stock,sale").Update(m) | |||
if err != nil { | |||
sess.Rollback() | |||
return nil | |||
} | |||
if m.StoreId > 0 { //扣库存 | |||
var storeGoods model.GuideStoreGoods | |||
_, err := sess.Where("gid=? and delete_time is null and stock>?", m.GoodId, 0).Get(&storeGoods) | |||
if err != nil { | |||
sess.Rollback() | |||
return nil | |||
} | |||
storeGoods.Stock-- | |||
if storeGoods.Stock < 0 { | |||
storeGoods.DownState = 3 | |||
storeGoods.EndTime = int(time.Now().Unix()) | |||
} | |||
_, err = sess.Where("id=?", storeGoods.Id).Cols("down_state,end_time,stock").Update(&storeGoods) | |||
if err != nil { | |||
sess.Rollback() | |||
return nil | |||
} | |||
} | |||
sess.Commit() | |||
return m | |||
} | |||
sess.Commit() | |||
return m | |||
} |
@@ -1,373 +0,0 @@ | |||
package consume | |||
import ( | |||
"applet/app/db" | |||
"applet/app/db/model" | |||
md2 "applet/app/md" | |||
"applet/app/utils" | |||
"applet/app/utils/logx" | |||
"applet/consume/md" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git/rabbit" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/lib/comm_plan" | |||
md3 "code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/md" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/svc" | |||
"encoding/json" | |||
"errors" | |||
"fmt" | |||
"github.com/streadway/amqp" | |||
"github.com/syyongx/php2go" | |||
"sort" | |||
"time" | |||
"xorm.io/xorm" | |||
) | |||
func ZhiosOrderHjy(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(500) | |||
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 = handleZhiosOrderHjy(res.Body) | |||
//_ = res.Reject(false) | |||
if err != nil { | |||
_ = res.Reject(false) | |||
//TODO::重新推回队列末尾,避免造成队列堵塞 | |||
var msg *md.ZhiosOrderBuckle | |||
var tmpString string | |||
err := json.Unmarshal(res.Body, &tmpString) | |||
if err != nil { | |||
return | |||
} | |||
fmt.Println(tmpString) | |||
err = json.Unmarshal([]byte(tmpString), &msg) | |||
if err != nil { | |||
return | |||
} | |||
ch.Publish(queue.ExchangeName, utils.SerializeStr(msg), queue.RoutKey) | |||
} else { | |||
_ = res.Ack(true) | |||
} | |||
} else { | |||
panic(errors.New("error getting message")) | |||
} | |||
} | |||
fmt.Println("get msg done") | |||
} | |||
func GetHjyOrderCommission(eg *xorm.Engine, dbName, order_id string) (string, string) { | |||
url := "https://app.openapi.dhcc.wang" | |||
hjyAppkey := db.SysCfgGetWithDb(eg, dbName, "hjy_appkey") | |||
hjyAppSecret := db.SysCfgGetWithDb(eg, dbName, "hjy_app_secret") | |||
param := map[string]string{ | |||
"app_key": hjyAppkey, | |||
"time": utils.Int64ToStr(time.Now().Unix()), | |||
"order_id": order_id, | |||
"page": "1", | |||
"api_name": "dhcc.oauth.order.commission", | |||
"version": "v1", | |||
"pagesize": "1", | |||
} | |||
keys := KsortToStr(param) | |||
str := "" | |||
for _, v := range keys { | |||
if str == "" { | |||
str += v + "=" + php2go.URLEncode(param[v]) | |||
} else { | |||
str += "&" + v + "=" + php2go.URLEncode(param[v]) | |||
} | |||
} | |||
str += hjyAppSecret | |||
param["sign"] = utils.Md5(str) | |||
post, _ := utils.CurlPost(url, param, nil) | |||
fmt.Println(string(post)) | |||
var data md.HjyOrderCommisisonData | |||
json.Unmarshal(post, &data) | |||
if data.Code != 0 { | |||
return "0", "0" | |||
} | |||
for _, v := range data.Data.List { | |||
if v.SettlementStatus == "已结" { | |||
return "1", v.SettlementTime | |||
} | |||
} | |||
return "0", "" | |||
} | |||
func KsortToStr(params map[string]string) []string { | |||
keys := make([]string, len(params)) | |||
i := 0 | |||
for k, _ := range params { | |||
keys[i] = k | |||
i++ | |||
} | |||
sort.Strings(keys) | |||
return keys | |||
} | |||
func handleZhiosOrderHjy(msg []byte) error { | |||
//1、解析canal采集至mq中queue的数据结构体 | |||
var canalMsg *md.ZhiosOrderBuckle | |||
fmt.Println(string(msg)) | |||
var tmpString string | |||
err := json.Unmarshal(msg, &tmpString) | |||
if err != nil { | |||
fmt.Println("===with", err.Error()) | |||
return err | |||
} | |||
fmt.Println(tmpString) | |||
err = json.Unmarshal([]byte(tmpString), &canalMsg) | |||
if err != nil { | |||
fmt.Println("===with", err.Error()) | |||
return err | |||
} | |||
mid := canalMsg.Mid | |||
eg := db.DBs[mid] | |||
if eg == nil { | |||
return nil | |||
} | |||
sess := eg.NewSession() | |||
defer sess.Close() | |||
sess.Begin() | |||
ordData, err := db.OrderListByhjyOid(sess, canalMsg.Oid) | |||
if err != nil || ordData == nil { | |||
return nil | |||
} | |||
if ordData.OrderFormType < 0 { | |||
sess.Commit() | |||
return nil | |||
} | |||
user, _ := db.UserFindByID(eg, ordData.Uid) | |||
if user == nil { | |||
fmt.Println(user) | |||
sess.Commit() | |||
return nil | |||
} | |||
if ordData.State == 5 { | |||
sess.Commit() | |||
return nil | |||
} | |||
//if ordData.State == 1 || ordData.State == 3 { | |||
// if int64(ordData.ConfirmAt) >= utils.TimeStdParseUnix("2023-11-01 00:00:00") { | |||
// isSettle, settleTime := GetHjyOrderCommission(eg, canalMsg.Mid, utils.IntToStr(ordData.HjyOid)) | |||
// if isSettle == "1" { | |||
// ordData.State = 5 | |||
// ordData.SettleAt = int(utils.TimeStdParseUnix(settleTime)) | |||
// } | |||
// } | |||
// | |||
//} | |||
var ordRelate = make([]model.OrdListRelate, 0) | |||
sess.Where("oid=?", canalMsg.Oid).Find(&ordRelate) | |||
if len(ordRelate) > 0 { | |||
sess.Commit() | |||
return nil | |||
} | |||
if ordData.State != 4 && int64(ordData.ConfirmAt) > 0 && int64(ordData.ConfirmAt) < utils.TimeStdParseUnix("2023-11-01 00:00:00") { | |||
ordData.State = 5 | |||
ordData.SettleAt = ordData.ConfirmAt | |||
} | |||
fmt.Println(ordData) | |||
//加入分佣关系链 | |||
opts, commissionOpts, _ := svc.GetAllPlan(eg, canalMsg.Mid) | |||
if opts == nil { | |||
fmt.Println(opts) | |||
sess.Commit() | |||
return nil | |||
} | |||
BenefitAll := ordData.BenefitAll | |||
pvd := ordData.Pvd | |||
if ordData.OrderFormType == 1 { //京东自营 | |||
pvd = md3.PVD_JDOwn | |||
} | |||
var rmd = md3.CommissionParam{IsTikTokTeamOrder: utils.IntToStr(ordData.IsTikTokTeamOrder)} | |||
opt, err := svc.GetPlanCfg(eg, pvd, canalMsg.Mid, opts, commissionOpts, map[int]string{}, &rmd) | |||
if err != nil { | |||
fmt.Println(err) | |||
sess.Commit() | |||
return nil | |||
} | |||
var ord = md2.OrderInfo{ | |||
PvdOid: ordData.PvdOid, | |||
Pvd: pvd, | |||
ItemId: ordData.ItemId, | |||
ItemNum: ordData.ItemNum, | |||
ItemPrice: ordData.ItemPrice, | |||
PaidPrice: ordData.PaidPrice, | |||
OrderType: ordData.OrderType, | |||
Commission: BenefitAll, | |||
State: ordData.State, | |||
} | |||
//调用公共的分佣 | |||
isShare := 0 | |||
if ord.OrderType == 1 { | |||
isShare = 1 | |||
} | |||
//计算每个用户的分佣 | |||
req := md2.CommissionFirstParam{ | |||
CommissionParam: md2.CommissionParam{ | |||
Commission: utils.Float64ToStr(ord.Commission), | |||
PaidPrice: utils.Float64ToStr(ord.PaidPrice), | |||
OldPrice: utils.Float64ToStr(ord.PaidPrice), | |||
IsTikTokTeamOrder: utils.IntToStr(ordData.IsTikTokTeamOrder), | |||
}, | |||
Uid: utils.IntToStr(ordData.Uid), | |||
IsShare: isShare, | |||
Provider: ord.Pvd, | |||
IsAllLevelReturn: 1, | |||
} | |||
if utils.InArr(ord.Pvd, []string{md3.PVD_TB, md3.PVD_TM, md3.PVD_PDD, md3.PVD_SN, md3.PVD_KL, md3.PVD_JD, md3.PVD_JDOwn, md3.PVD_VIP}) == false { | |||
req.CommissionParam.GoodsPrice = utils.Float64ToStr(ord.PaidPrice) | |||
} | |||
commissionList, err := GetCommissionByCommApi(eg, canalMsg.Mid, req) | |||
if err != nil || commissionList.LvUser == nil { | |||
fmt.Println(err) | |||
sess.Commit() | |||
return nil | |||
} | |||
pvdFee := commissionList.PvdFee | |||
sysFee := commissionList.SysFee | |||
subsidyFee := commissionList.SubsidyFee | |||
lvUser := commissionList.LvUser | |||
profit := commissionList.Profit | |||
ordData.SubsidyFee = subsidyFee | |||
ordData.PvdCommission = pvdFee | |||
ordData.SysCommission = sysFee | |||
ordData.BuckleCommission = utils.Float64ToStr(BenefitAll) | |||
var selfRate float64 = 0 | |||
var subsidyRate float64 = 0 | |||
//处理记录佣金 | |||
if opt != nil { | |||
profit = lvUser.Profit | |||
//判断下这个等级有么有设置 | |||
ordData.UserCommission = profit | |||
ordData.SubsidyRate = subsidyRate | |||
ordData.UserCommissionRate = selfRate | |||
ordData.PlanCommissionId = opt.PlanCommissionId | |||
ordData.BenefitList = SerializeLvUser(NewCalcLvUserFee(lvUser)) | |||
} | |||
_, err = db.OrderListByUpdateOrd(sess, ordData) | |||
if err != nil { | |||
fmt.Println(err) | |||
sess.Rollback() | |||
return nil | |||
} | |||
fmt.Println(lvUser) | |||
//批量写入 | |||
if lvUser != nil { | |||
err := OrderRelateInsert1(eg, sess, ordData.OrdId, ordData.Pvd, ordData.CreateAt, lvUser, ordData, canalMsg.Mid, true, opt.Mode, "1") | |||
fmt.Println(err) | |||
if err != nil { | |||
sess.Rollback() | |||
return err | |||
} | |||
} | |||
sess.Commit() | |||
return nil | |||
} | |||
func OrderRelateInsert1(eg *xorm.Engine, sess *xorm.Session, oid int64, pvd string, createTime int, lvUser *comm_plan.LvUser, newOrd *model.OrdList, masterId string, isDelete bool, mode string, isNew string) error { | |||
if lvUser == nil { | |||
return nil | |||
} | |||
uid := lvUser.Uid | |||
if uid == 0 { | |||
return nil | |||
} | |||
oldLvUser := lvUser | |||
oldLevel := 0 | |||
data := OrderRelateInsertComm(eg, oid, pvd, createTime, lvUser, newOrd, masterId, mode) | |||
fmt.Println(data) | |||
if data == nil || len(data) == 0 { | |||
return nil | |||
} | |||
list, _ := db.OrderRelateFindByOid(sess, oid, pvd) | |||
listMap := make(map[int]model.OrdListRelate) | |||
if list != nil { | |||
for _, v := range *list { | |||
listMap[v.Uid] = v | |||
} | |||
} | |||
fmt.Println(isDelete) | |||
_, err2 := db.OrderRelateDeleteByOid(sess, oid, pvd) | |||
if err2 != nil { | |||
return err2 | |||
} | |||
_, err2 = db.VirtualCoinOrderRelateDeleteByOid(sess, oid, pvd) | |||
if err2 != nil { | |||
return err2 | |||
} | |||
//后写入 | |||
err := db.DbInsertBatchSess(sess, data) | |||
if err != nil { | |||
return err | |||
} else if lvUser.ProfitList != nil { | |||
// 插入虚拟币数据 | |||
vcrData := CombineVirtualCoinRelateData(oldLvUser, oid, pvd, oldLevel, mode) | |||
if len(vcrData) == 0 { | |||
return nil | |||
} | |||
err := db.DbInsertBatchSess(sess, vcrData) | |||
if err != nil { | |||
return err | |||
} | |||
} | |||
if lvUser.TikTokOwnSubsidyFeeList != nil { | |||
_, err2 := db.TikTokTeamOrderRelateDeleteByOid(sess, oid, pvd) | |||
if err != nil { | |||
return err2 | |||
} | |||
var teamData []model.TikTokTeamOrderRelate | |||
TikTokTeamCommission := newOrd.TikTokTeamCommission | |||
if utils.StrToFloat64(newOrd.TikTokTeamRealCommission) > 0 { | |||
TikTokTeamCommission = newOrd.TikTokTeamRealCommission | |||
} | |||
for k, v := range lvUser.TikTokOwnSubsidyFeeList { | |||
tmp := model.TikTokTeamOrderRelate{ | |||
CoinId: utils.StrToInt(k), | |||
Uid: uid, | |||
Amount: utils.Float64ToStrByPrec(v, 8), | |||
Oid: utils.Int64ToStr(oid), | |||
Time: time.Now(), | |||
Commission: TikTokTeamCommission, | |||
Pvd: pvd, | |||
} | |||
teamData = append(teamData, tmp) | |||
} | |||
if len(teamData) == 0 { | |||
return nil | |||
} | |||
err := db.DbInsertBatchSess(sess, &teamData) | |||
if err != nil { | |||
return err | |||
} | |||
} | |||
return nil | |||
} |
@@ -1,190 +0,0 @@ | |||
package consume | |||
import ( | |||
"applet/app/db" | |||
"applet/app/db/model" | |||
"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" | |||
"time" | |||
) | |||
func ZhiosSettleTotal(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(1) | |||
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 = handleZhiosOrderSettleTotal(res.Body) | |||
//_ = res.Reject(false) | |||
if err != nil { | |||
fmt.Println("==================", err.Error()) | |||
_ = res.Reject(false) | |||
//TODO::重新推回队列末尾,避免造成队列堵塞 | |||
var msg *md.ZhiosOrderBuckle | |||
var tmpString string | |||
err := json.Unmarshal(res.Body, &tmpString) | |||
if err != nil { | |||
return | |||
} | |||
fmt.Println(tmpString) | |||
err = json.Unmarshal([]byte(tmpString), &msg) | |||
if err != nil { | |||
return | |||
} | |||
ch.Publish(queue.ExchangeName, utils.SerializeStr(msg), queue.RoutKey) | |||
} else { | |||
_ = res.Ack(true) | |||
} | |||
} else { | |||
panic(errors.New("error getting message")) | |||
} | |||
} | |||
fmt.Println("get msg done") | |||
} | |||
func handleZhiosOrderSettleTotal(msg []byte) error { | |||
//time.Sleep(time.Microsecond * 20) // 等待500毫秒 | |||
//1、解析canal采集至mq中queue的数据结构体 | |||
var canalMsg *md.ZhiosOrderBuckle | |||
fmt.Println(string(msg)) | |||
var tmpString string | |||
err := json.Unmarshal(msg, &tmpString) | |||
if err != nil { | |||
fmt.Println("===with", err.Error()) | |||
return err | |||
} | |||
fmt.Println(tmpString) | |||
err = json.Unmarshal([]byte(tmpString), &canalMsg) | |||
if err != nil { | |||
fmt.Println("===with", err.Error()) | |||
return err | |||
} | |||
mid := canalMsg.Mid | |||
eg := db.DBs[mid] | |||
if eg == nil { | |||
return nil | |||
} | |||
sess := eg.NewSession() | |||
defer sess.Close() | |||
sess.Begin() | |||
times := time.Now() | |||
fmt.Println("==================", time.Since(times)) | |||
ordData, err := db.OrderListByPvdOid(sess, canalMsg.Oid) | |||
if err != nil || ordData == nil { | |||
return nil | |||
} | |||
fmt.Println("==================1", time.Since(times)) | |||
var ordRelate = make([]model.OrdListRelate, 0) | |||
sess.Where("oid=?", canalMsg.Oid).Find(&ordRelate) | |||
fmt.Println("==================2", time.Since(times)) | |||
if len(ordRelate) > 0 { | |||
for _, v := range ordRelate { | |||
if v.Amount == 0 && utils.StrToFloat64(v.AdditionalSubsidy) == 0 { | |||
continue | |||
} | |||
var userStatistics model.UserStatistics | |||
sess.Where("uid=?", v.Uid).Get(&userStatistics) | |||
if userStatistics.Id == 0 { | |||
userStatistics = model.UserStatistics{ | |||
ImportFinTotal: "", | |||
FinTotal: "", | |||
Uid: v.Uid, | |||
} | |||
_, err := sess.Insert(&userStatistics) | |||
if err != nil { | |||
sess.Rollback() | |||
return err | |||
} | |||
} | |||
userStatistics.FinTotal = utils.Float64ToStrByPrec(utils.StrToFloat64(userStatistics.FinTotal)+v.Amount+utils.StrToFloat64(v.AdditionalSubsidy), 4) | |||
_, err := sess.Where("id=?", userStatistics.Id).Cols("fin_total").Update(&userStatistics) | |||
if err != nil { | |||
return err | |||
} | |||
fmt.Println("==================3", time.Since(times)) | |||
var userStatistics1 model.UserWaitAmount | |||
sess.Where("uid=? ", v.Uid).Get(&userStatistics1) | |||
if userStatistics1.Id == 0 { | |||
continue | |||
} | |||
userStatistics1.Amount = utils.Float64ToStrByPrec(utils.StrToFloat64(userStatistics1.Amount)-v.Amount-utils.StrToFloat64(v.AdditionalSubsidy), 4) | |||
_, err1 := sess.Where("id=?", userStatistics1.Id).Cols("amount").Update(&userStatistics1) | |||
if err1 != nil { | |||
sess.Rollback() | |||
return err | |||
} | |||
fmt.Println("==================4", time.Since(times)) | |||
//if update1 == 0 { | |||
// sess.Rollback() | |||
// return errors.New("失败") | |||
//} | |||
var userStatistics2 model.UserMonthAmount | |||
if ordData.SettleAt == 0 { | |||
ordData.SettleAt = int(time.Now().Unix()) | |||
} | |||
now := time.Unix(int64(ordData.SettleAt), 0).Format("200601") | |||
sess.Where("uid=? and date=?", v.Uid, now).Get(&userStatistics2) | |||
fmt.Println("==================31", time.Since(times)) | |||
if userStatistics2.Id == 0 { | |||
userStatistics2 = model.UserMonthAmount{ | |||
Date: utils.StrToInt(now), | |||
Uid: v.Uid, | |||
} | |||
has, err := sess.Insert(&userStatistics2) | |||
if err != nil { | |||
sess.Rollback() | |||
return err | |||
} | |||
if has == 0 { | |||
sess.Rollback() | |||
return errors.New("失败") | |||
} | |||
} | |||
fmt.Println("==================41", time.Since(times)) | |||
userStatistics2.SettleAmount = utils.Float64ToStrByPrec(utils.StrToFloat64(userStatistics2.SettleAmount)+v.Amount+utils.StrToFloat64(v.AdditionalSubsidy), 4) | |||
_, err2 := sess.Where("id=?", userStatistics2.Id).Cols("settle_amount").Update(&userStatistics2) | |||
if err2 != nil { | |||
sess.Rollback() | |||
return err2 | |||
} | |||
fmt.Println("==================5", time.Since(times)) | |||
//if update2 == 0 { | |||
// sess.Rollback() | |||
// return errors.New("失败") | |||
//} | |||
} | |||
} | |||
sess.Commit() | |||
return nil | |||
} |
@@ -1,166 +0,0 @@ | |||
package consume | |||
import ( | |||
"applet/app/db" | |||
"applet/app/db/model" | |||
"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" | |||
"time" | |||
"xorm.io/xorm" | |||
) | |||
func ZhiosOrderTotal(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(100) | |||
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 = handleZhiosOrderTotal(res.Body) | |||
//_ = res.Reject(false) | |||
if err != nil { | |||
_ = res.Reject(false) | |||
//TODO::重新推回队列末尾,避免造成队列堵塞 | |||
var msg *md.ZhiosOrderBuckle | |||
var tmpString string | |||
err := json.Unmarshal(res.Body, &tmpString) | |||
if err != nil { | |||
return | |||
} | |||
fmt.Println(tmpString) | |||
err = json.Unmarshal([]byte(tmpString), &msg) | |||
if err != nil { | |||
return | |||
} | |||
ch.Publish(queue.ExchangeName, utils.SerializeStr(msg), queue.RoutKey) | |||
} else { | |||
_ = res.Ack(true) | |||
} | |||
} else { | |||
panic(errors.New("error getting message")) | |||
} | |||
} | |||
fmt.Println("get msg done") | |||
} | |||
func handleZhiosOrderTotal(msg []byte) error { | |||
time.Sleep(time.Microsecond * 20) // 等待500毫秒 | |||
//1、解析canal采集至mq中queue的数据结构体 | |||
var canalMsg *md.ZhiosOrderBuckle | |||
fmt.Println(string(msg)) | |||
var tmpString string | |||
err := json.Unmarshal(msg, &tmpString) | |||
if err != nil { | |||
fmt.Println("===with", err.Error()) | |||
return err | |||
} | |||
fmt.Println(tmpString) | |||
err = json.Unmarshal([]byte(tmpString), &canalMsg) | |||
if err != nil { | |||
fmt.Println("===with", err.Error()) | |||
return err | |||
} | |||
mid := canalMsg.Mid | |||
eg := db.DBs[mid] | |||
if eg == nil { | |||
return nil | |||
} | |||
statUserOrderMoney(eg, canalMsg) | |||
return nil | |||
} | |||
func statUserOrderMoney(eg *xorm.Engine, req *md.ZhiosOrderBuckle) (map[string]string, error) { | |||
result := make(map[string]string) | |||
thisMonthRange := utils.GetTimeRange("current_month") | |||
lastMonthRange := utils.GetTimeRange("last_month") | |||
var thisMonthData model.UserMonthAmount | |||
thismonth := time.Unix(thisMonthRange["start"], 0).Format("200601") | |||
eg.Where("uid=? and date=?", req.Uid, thismonth).Get(&thisMonthData) | |||
if thisMonthData.Id == 0 { | |||
thisMonthData.Uid = utils.StrToInt(req.Uid) | |||
thisMonthData.Date = utils.StrToInt(thismonth) | |||
eg.Insert(&thisMonthData) | |||
} | |||
var lastMonthData model.UserMonthAmount | |||
lastmonth := time.Unix(lastMonthRange["start"], 0).Format("200601") | |||
eg.Where("uid=? and date=?", req.Uid, lastmonth).Get(&lastMonthData) | |||
if lastMonthData.Id == 0 { | |||
lastMonthData.Uid = utils.StrToInt(req.Uid) | |||
lastMonthData.Date = utils.StrToInt(lastmonth) | |||
eg.Insert(&lastMonthData) | |||
} | |||
types := "" | |||
uid := req.Uid | |||
// 获取时间范围 | |||
// 统计预估 (预估包含结算部分且是有效订单) | |||
sqlTpl := `SELECT cast(SUM(LEFT(olr.amount,LENGTH(olr.amount)-2)) as decimal(50,4)) AS amount | |||
FROM ord_list_relate olr | |||
LEFT JOIN ord_list ol ON olr.oid = ol.ord_id | |||
LEFT JOIN privilege_card_ord pco ON olr.oid =pco.ord_id | |||
LEFT JOIN duoyou_ord_list dol ON olr.oid =dol.oid | |||
LEFT JOIN recharge_order ro ON olr.oid =ro.oid | |||
LEFT JOIN playlet_sale_order pso ON olr.oid =pso.custom_oid | |||
WHERE olr.uid = ? %s | |||
AND olr.create_at >= ? | |||
AND olr.create_at < ? AND (ol.state<>4 or pco.state=1 or dol.id>0 or ro.status<>'已退款' or pso.status<>'订单退款'); | |||
` | |||
sqlTpl = fmt.Sprintf(sqlTpl, types) | |||
fmt.Println(lastMonthRange) | |||
thisMonthResult, err := db.QueryNativeString(eg, sqlTpl, uid, thisMonthRange["start"], thisMonthRange["end"]) | |||
if err != nil { | |||
_ = logx.Warn(err) | |||
result["thisMonth"] = "0" | |||
} else { | |||
result["thisMonth"] = thisMonthResult[0]["amount"] | |||
} | |||
thisMonthData.Amount = result["thisMonth"] | |||
eg.Where("id=?", thisMonthData.Id).Update(&thisMonthData) | |||
// 统计上月预估 (预估包含结算部分且是有效订单) | |||
sqlTpl2 := `SELECT cast(SUM(IF(ol.state<>4 or pco.state=1 or dol.id>0 or ro.status<>'已退款' or pso.status<>'订单退款', LEFT(olr.amount,LENGTH(olr.amount)-2), 0)) as decimal(50,4)) AS amount | |||
FROM ord_list_relate olr | |||
LEFT JOIN ord_list ol ON olr.oid = ol.ord_id | |||
LEFT JOIN privilege_card_ord pco ON olr.oid =pco.ord_id | |||
LEFT JOIN duoyou_ord_list dol ON olr.oid =dol.oid | |||
LEFT JOIN recharge_order ro ON olr.oid =ro.oid | |||
LEFT JOIN playlet_sale_order pso ON olr.oid =pso.custom_oid | |||
WHERE olr.uid = ? %s | |||
AND olr.create_at >= ? | |||
AND olr.create_at < ? | |||
` | |||
sqlTpl2 = fmt.Sprintf(sqlTpl2, types) | |||
lastMonthResult, err := db.QueryNativeString(eg, sqlTpl2, uid, lastMonthRange["start"], lastMonthRange["end"]) | |||
if err != nil { | |||
_ = logx.Warn(err) | |||
result["lastMonth"] = "0" | |||
} else { | |||
result["lastMonth"] = lastMonthResult[0]["amount"] | |||
} | |||
lastMonthData.Amount = result["lastMonth"] | |||
eg.Where("id=?", lastMonthData.Id).Update(&lastMonthData) | |||
return result, nil | |||
} |
@@ -1,313 +0,0 @@ | |||
package consume | |||
import ( | |||
"applet/app/db" | |||
"applet/app/db/model" | |||
"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" | |||
"time" | |||
) | |||
func ZhiosOrderTotalSecond(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(1) | |||
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 = handleZhiosOrderTotalSecond(res.Body) | |||
//_ = res.Reject(false) | |||
if err != nil { | |||
_ = res.Reject(false) | |||
//TODO::重新推回队列末尾,避免造成队列堵塞 | |||
var msg *md.ZhiosOrderBuckle | |||
var tmpString string | |||
err := json.Unmarshal(res.Body, &tmpString) | |||
if err != nil { | |||
return | |||
} | |||
fmt.Println(tmpString) | |||
err = json.Unmarshal([]byte(tmpString), &msg) | |||
if err != nil { | |||
return | |||
} | |||
ch.Publish(queue.ExchangeName, utils.SerializeStr(msg), queue.RoutKey) | |||
} else { | |||
_ = res.Ack(true) | |||
} | |||
} else { | |||
panic(errors.New("error getting message")) | |||
} | |||
} | |||
fmt.Println("get msg done") | |||
} | |||
func handleZhiosOrderTotalSecond(msg []byte) error { | |||
time.Sleep(time.Microsecond * 20) // 等待500毫秒 | |||
//1、解析canal采集至mq中queue的数据结构体 | |||
var canalMsg *md.ZhiosOrderBuckle | |||
fmt.Println(string(msg)) | |||
var tmpString string | |||
err := json.Unmarshal(msg, &tmpString) | |||
if err != nil { | |||
fmt.Println("===with", err.Error()) | |||
return err | |||
} | |||
fmt.Println(tmpString) | |||
err = json.Unmarshal([]byte(tmpString), &canalMsg) | |||
if err != nil { | |||
fmt.Println("===with", err.Error()) | |||
return err | |||
} | |||
mid := canalMsg.Mid | |||
eg := db.DBs[mid] | |||
if eg == nil { | |||
return nil | |||
} | |||
sess := eg.NewSession() | |||
defer sess.Close() | |||
sess.Begin() | |||
ordData, err := db.OrderListByPvdOid(sess, canalMsg.Oid) | |||
if err != nil || ordData == nil { | |||
sess.Rollback() | |||
return nil | |||
} | |||
now := time.Unix(int64(ordData.CreateAt), 0).Format("200601") | |||
nowDay := time.Unix(int64(ordData.CreateAt), 0).Format("20060102") | |||
isTotal := ordData.IsTotal | |||
if ordData.OrderFormType >= 0 { | |||
if ordData.IsTotal == 1 && ordData.State != 4 { | |||
sess.Rollback() | |||
return nil | |||
} | |||
if ordData.IsTotal == 2 && ordData.State == 4 { | |||
sess.Rollback() | |||
return nil | |||
} | |||
var ordRelate = make([]model.OrdListRelate, 0) | |||
sess.Where("oid=?", canalMsg.Oid).Find(&ordRelate) | |||
if len(ordRelate) > 0 { | |||
for _, v := range ordRelate { | |||
if v.Amount == 0 && utils.StrToFloat64(v.AdditionalSubsidy) == 0 { | |||
continue | |||
} | |||
var userStatistics model.UserMonthAmount | |||
sess.Where("uid=? and date=?", v.Uid, now).Get(&userStatistics) | |||
if userStatistics.Id == 0 { | |||
userStatistics = model.UserMonthAmount{ | |||
Date: utils.StrToInt(now), | |||
Uid: v.Uid, | |||
} | |||
has, err := sess.Insert(&userStatistics) | |||
if err != nil { | |||
sess.Rollback() | |||
return err | |||
} | |||
if has == 0 { | |||
sess.Rollback() | |||
return errors.New("失败") | |||
} | |||
} | |||
isupdate := 0 | |||
if ordData.State == 4 && ordData.IsTotal == 1 { | |||
isupdate = 1 | |||
isTotal = 2 | |||
userStatistics.Amount = utils.Float64ToStrByPrec(utils.StrToFloat64(userStatistics.Amount)-v.Amount-utils.StrToFloat64(v.AdditionalSubsidy), 4) | |||
} | |||
if ordData.State != 4 && ordData.IsTotal == 0 { | |||
isupdate = 1 | |||
isTotal = 1 | |||
userStatistics.Amount = utils.Float64ToStrByPrec(utils.StrToFloat64(userStatistics.Amount)+v.Amount+utils.StrToFloat64(v.AdditionalSubsidy), 4) | |||
} | |||
update, err := sess.Where("id=?", userStatistics.Id).Cols("amount").Update(&userStatistics) | |||
if err != nil { | |||
sess.Rollback() | |||
return err | |||
} | |||
if update == 0 && isupdate == 1 { | |||
sess.Rollback() | |||
return errors.New("失败") | |||
} | |||
if v.CreateAt > 1711086661 { | |||
var userStatistics1 model.UserDayAmount | |||
sess.Where("uid=? and date=?", v.Uid, nowDay).Get(&userStatistics1) | |||
if userStatistics1.Id == 0 { | |||
userStatistics1 = model.UserDayAmount{ | |||
Date: utils.StrToInt(nowDay), | |||
Uid: v.Uid, | |||
} | |||
has, err := sess.Insert(&userStatistics1) | |||
if err != nil { | |||
sess.Rollback() | |||
return err | |||
} | |||
if has == 0 { | |||
sess.Rollback() | |||
return errors.New("失败") | |||
} | |||
} | |||
isupdate1 := 0 | |||
if ordData.State == 4 && ordData.IsTotal == 1 { | |||
isupdate1 = 1 | |||
userStatistics1.Amount = utils.Float64ToStrByPrec(utils.StrToFloat64(userStatistics1.Amount)-v.Amount-utils.StrToFloat64(v.AdditionalSubsidy), 4) | |||
} | |||
if ordData.State != 4 && ordData.IsTotal == 0 { | |||
isupdate1 = 1 | |||
userStatistics1.Amount = utils.Float64ToStrByPrec(utils.StrToFloat64(userStatistics1.Amount)+v.Amount+utils.StrToFloat64(v.AdditionalSubsidy), 4) | |||
} | |||
update1, err1 := sess.Where("id=?", userStatistics1.Id).Cols("amount").Update(&userStatistics1) | |||
if err1 != nil { | |||
sess.Rollback() | |||
return err | |||
} | |||
if update1 == 0 && isupdate1 == 1 { | |||
sess.Rollback() | |||
return errors.New("失败") | |||
} | |||
} | |||
var userStatistics1 model.UserWaitAmount | |||
sess.Where("uid=? ", v.Uid).Get(&userStatistics1) | |||
if userStatistics1.Id == 0 { | |||
userStatistics1 = model.UserWaitAmount{ | |||
Uid: v.Uid, | |||
} | |||
has, err := sess.Insert(&userStatistics1) | |||
if err != nil { | |||
sess.Rollback() | |||
return err | |||
} | |||
if has == 0 { | |||
sess.Rollback() | |||
return errors.New("失败") | |||
} | |||
} | |||
isupdate1 := 0 | |||
if ordData.State == 4 && ordData.IsTotal == 1 { | |||
isupdate1 = 1 | |||
userStatistics1.Amount = utils.Float64ToStrByPrec(utils.StrToFloat64(userStatistics1.Amount)-v.Amount-utils.StrToFloat64(v.AdditionalSubsidy), 4) | |||
} | |||
if ordData.State != 4 && ordData.IsTotal == 0 { | |||
isupdate1 = 1 | |||
userStatistics1.Amount = utils.Float64ToStrByPrec(utils.StrToFloat64(userStatistics1.Amount)+v.Amount+utils.StrToFloat64(v.AdditionalSubsidy), 4) | |||
} | |||
update1, err1 := sess.Where("id=?", userStatistics1.Id).Cols("amount").Update(&userStatistics1) | |||
if err1 != nil { | |||
sess.Rollback() | |||
return err | |||
} | |||
if update1 == 0 && isupdate1 == 1 { | |||
sess.Rollback() | |||
return errors.New("失败") | |||
} | |||
} | |||
} | |||
} else { | |||
if ordData.IsTotal == 3 && ordData.State != 4 { | |||
sess.Rollback() | |||
return nil | |||
} | |||
if ordData.IsTotal == 2 && ordData.State == 4 { | |||
sess.Rollback() | |||
return nil | |||
} | |||
var ordRelate = make([]model.BuckleRecord, 0) | |||
sess.Where("ord_id=?", canalMsg.Oid).Find(&ordRelate) | |||
if len(ordRelate) > 0 { | |||
for _, v := range ordRelate { | |||
if utils.StrToFloat64(v.Amount) == 0 { | |||
continue | |||
} | |||
var userStatistics model.UserMonthAmount | |||
sess.Where("uid=? and date=?", v.Uid, now).Get(&userStatistics) | |||
if userStatistics.Id == 0 { | |||
userStatistics = model.UserMonthAmount{ | |||
Date: utils.StrToInt(now), | |||
Uid: v.Uid, | |||
} | |||
_, err := sess.Insert(&userStatistics) | |||
if err != nil { | |||
sess.Rollback() | |||
return err | |||
} | |||
} | |||
if ordData.State == 4 && (ordData.IsTotal == 1 || ordData.IsTotal == 3) { | |||
isTotal = 2 | |||
userStatistics.Amount = utils.Float64ToStrByPrec(utils.StrToFloat64(userStatistics.Amount)-utils.StrToFloat64(v.AfterAmount), 4) | |||
} | |||
if ordData.State != 4 && (ordData.IsTotal == 0) { | |||
isTotal = 3 | |||
userStatistics.Amount = utils.Float64ToStrByPrec(utils.StrToFloat64(userStatistics.Amount)+utils.StrToFloat64(v.AfterAmount), 4) | |||
} | |||
if ordData.State != 4 && (ordData.IsTotal == 1) { | |||
isTotal = 3 | |||
userStatistics.Amount = utils.Float64ToStrByPrec(utils.StrToFloat64(userStatistics.Amount)-utils.StrToFloat64(v.Amount), 4) | |||
} | |||
_, err := sess.Where("id=?", userStatistics.Id).Cols("amount").Update(&userStatistics) | |||
if err != nil { | |||
sess.Rollback() | |||
return err | |||
} | |||
var userStatistics1 model.UserWaitAmount | |||
sess.Where("uid=? ", v.Uid).Get(&userStatistics1) | |||
if userStatistics1.Id == 0 { | |||
userStatistics1 = model.UserWaitAmount{ | |||
Uid: v.Uid, | |||
} | |||
has, err := sess.Insert(&userStatistics1) | |||
if err != nil { | |||
sess.Rollback() | |||
return err | |||
} | |||
if has == 0 { | |||
sess.Rollback() | |||
return errors.New("失败") | |||
} | |||
} | |||
if ordData.State == 4 && (ordData.IsTotal == 1 || ordData.IsTotal == 3) { | |||
isTotal = 2 | |||
userStatistics1.Amount = utils.Float64ToStrByPrec(utils.StrToFloat64(userStatistics1.Amount)-utils.StrToFloat64(v.AfterAmount), 4) | |||
} | |||
if ordData.State != 4 && (ordData.IsTotal == 0) { | |||
isTotal = 3 | |||
userStatistics1.Amount = utils.Float64ToStrByPrec(utils.StrToFloat64(userStatistics1.Amount)+utils.StrToFloat64(v.AfterAmount), 4) | |||
} | |||
if ordData.State != 4 && (ordData.IsTotal == 1) { | |||
isTotal = 3 | |||
userStatistics1.Amount = utils.Float64ToStrByPrec(utils.StrToFloat64(userStatistics1.Amount)-utils.StrToFloat64(v.Amount), 4) | |||
} | |||
_, err = sess.Where("id=?", userStatistics1.Id).Cols("amount").Update(&userStatistics) | |||
if err != nil { | |||
sess.Rollback() | |||
return err | |||
} | |||
} | |||
} | |||
} | |||
ordData.IsTotal = isTotal | |||
sess.Where("ord_id=?", ordData.OrdId).Update(ordData) | |||
sess.Commit() | |||
return nil | |||
} |
@@ -1,258 +0,0 @@ | |||
package consume | |||
import ( | |||
"applet/app/db" | |||
"applet/app/db/model" | |||
"applet/app/db/offical" | |||
model2 "applet/app/db/offical/model" | |||
"applet/app/e" | |||
md2 "applet/app/md" | |||
"applet/app/svc" | |||
"applet/app/utils" | |||
"applet/app/utils/logx" | |||
"applet/consume/md" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git/rabbit" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_pay.git/pay" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_third_party_api.git/recharge" | |||
"encoding/json" | |||
"errors" | |||
"fmt" | |||
"github.com/shopspring/decimal" | |||
"github.com/streadway/amqp" | |||
"github.com/tidwall/gjson" | |||
"strings" | |||
"time" | |||
"xorm.io/xorm" | |||
) | |||
func ZhiosRechargeOrderFail(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(1) | |||
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 = handleZhiosRechargeOrderFail(res.Body) | |||
//_ = res.Reject(false) | |||
if err == nil { | |||
_ = res.Ack(true) | |||
} | |||
} else { | |||
panic(errors.New("error getting message")) | |||
} | |||
} | |||
fmt.Println("get msg done") | |||
} | |||
func handleZhiosRechargeOrderFail(msg []byte) error { | |||
//1、解析canal采集至mq中queue的数据结构体 | |||
var canalMsg *md.ZhiosRechargeOrderPay | |||
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 := utils.StrToInt(canalMsg.Uid) | |||
oid := canalMsg.Oid | |||
var orderData model.RechargeOrder | |||
b, err2 := eg.Where("oid=? and uid=?", oid, uid).Get(&orderData) | |||
if err2 != nil { | |||
return errors.New("err") | |||
} | |||
if b == false { | |||
return nil | |||
} | |||
if orderData.Status != "已付款" { | |||
return nil | |||
} | |||
//查询官方接口看看有没有订单 | |||
param, aggregationRechargeApiKey := CommAggregation(eg, mid) | |||
param["out_trade_nums"] = oid | |||
aggregationRechargeApiUrl := GetApiUrl() | |||
order, err := recharge.GetOrder(aggregationRechargeApiUrl, aggregationRechargeApiKey, param) | |||
utils.FilePutContents(mid+"rech", utils.SerializeStr(param)) | |||
utils.FilePutContents(mid+"rech", aggregationRechargeApiKey) | |||
utils.FilePutContents(mid+"rech", utils.SerializeStr(order)) | |||
if err != nil { | |||
utils.FilePutContents(mid+"rech", err.Error()) | |||
return errors.New("err") | |||
} | |||
if gjson.Get(order, "errno").Int() == 0 && strings.Contains(order, oid) == false { | |||
utils.FilePutContents(mid+"rech", utils.SerializeStr(orderData)) | |||
NSFNTheSameBack := true | |||
if orderData.PayMethod == 3 { | |||
wechatP12ApiclientCert := db.SysCfgGetWithDb(eg, mid, "wechat_p12_apiclient_cert") | |||
wechatPayRefundType := db.SysCfgGetWithDb(eg, mid, "wechat_pay_refund_type") | |||
NSFNTheSameBack = false | |||
if wechatP12ApiclientCert == "" || orderData.TradeNo == "" || wechatPayRefundType != "1" || orderData.AppId == "" { | |||
NSFNTheSameBack = true | |||
} else { | |||
params := map[string]string{ | |||
"subject": "聚合充值" + orderData.Title + "退款", | |||
"total_fee": wxMoneyMulHundred(orderData.Amount), | |||
"amount": wxMoneyMulHundred(orderData.Amount), | |||
"out_refund_no": orderData.Oid, | |||
"p12_str": canalMsg.WxappletFilepathUrl + "/" + wechatP12ApiclientCert, | |||
"transaction_id": orderData.TradeNo, | |||
"pay_wx_mch_id": db.SysCfgGetWithDb(eg, mid, "pay_wx_mch_id"), | |||
"pay_wx_api_key": db.SysCfgGetWithDb(eg, mid, "pay_wx_api_key"), | |||
"uid": utils.IntToStr(orderData.Uid), | |||
"notify_url": canalMsg.DomainUrl + "/api/v1/refund/callback/" + mid, | |||
} | |||
params["pay_wx_appid"] = orderData.AppId | |||
r, r1, err := pay.WxAppRefund(params) | |||
utils.FilePutContents("mall_refund", utils.SerializeStr(params)) | |||
utils.FilePutContents("mall_refund", utils.SerializeStr(r)) | |||
utils.FilePutContents("mall_refund", utils.SerializeStr(r1)) | |||
if err != nil { | |||
utils.FilePutContents("mall_refund", err.Error()) | |||
return err | |||
} | |||
if r.ReturnCode != "SUCCESS" { | |||
return errors.New(r.ReturnMsg) | |||
} | |||
} | |||
} | |||
if orderData.PayMethod == 2 { | |||
alipayPayRefundType := db.SysCfgGetWithDb(eg, mid, "alipay_pay_refund_type") | |||
NSFNTheSameBack = false | |||
if orderData.TradeNo == "" || alipayPayRefundType != "1" { | |||
NSFNTheSameBack = true | |||
} else { | |||
var params = &md2.AliPayPayParams{} | |||
config, _ := svc.CommAlipayConfig(eg, mid, params) | |||
config["trade_no"] = orderData.TradeNo | |||
config["refund_amount"] = orderData.Amount | |||
config["refund_reason"] = "退款" | |||
config["out_request_no"] = utils.OrderUUID(orderData.Uid) | |||
refund, err := pay.AlipayTradeRefund(config) | |||
utils.FilePutContents("mall_refund", utils.SerializeStr(config)) | |||
utils.FilePutContents("mall_refund", utils.SerializeStr(refund)) | |||
if err != nil { | |||
return err | |||
} | |||
if refund.AlipayTradeRefundResponse.Code != "10000" { | |||
return errors.New(refund.AlipayTradeRefundResponse.SubMsg) | |||
} | |||
if refund.AlipayTradeRefundResponse.FundChange != "Y" { | |||
return errors.New("退款失败") | |||
} | |||
} | |||
} | |||
// 更改为已支付 | |||
orderData.Status = "已退款" | |||
orderData.RefundTime = time.Now() | |||
// 保存ord | |||
row, err := eg.ID(orderData.Id).Cols("status,pay_method,refund_time").Update(&orderData) | |||
if row > 0 && err == nil { | |||
if NSFNTheSameBack { | |||
svc.UpdateUserFinValidAndInterFlow(eg, | |||
orderData.Amount, "聚合充值"+orderData.Title+"退款", "aggregation_recharge", 0, 24, orderData.Uid, orderData.Id, int64(orderData.Id), utils.StrToInt64(orderData.Oid)) | |||
} | |||
} else { | |||
return errors.New("err") | |||
} | |||
rechargeNotPayMoney := db.SysCfgGetWithDb(eg, mid, "recharge_not_pay_money") | |||
if rechargeNotPayMoney != "1" { | |||
ZyRechargeMoneyDeal(mid, orderData.Oid, orderData.Uid, utils.StrToFloat64(orderData.ZyAmount), 0, orderData.Title+"退款", "refund") | |||
} | |||
} | |||
return nil | |||
} | |||
// 微信金额乘100 | |||
func wxMoneyMulHundred(m string) string { | |||
amount, _ := decimal.NewFromString(m) | |||
newM := amount.Mul(decimal.NewFromInt(100)) | |||
return newM.String() | |||
} | |||
func GetApiUrl() string { | |||
aggregationRechargeApiUrl := "" | |||
aggregationRechargeApiUrlData := offical.SysCfgByKey("aggregation_recharge_api_url") | |||
if aggregationRechargeApiUrlData != nil { | |||
aggregationRechargeApiUrl = aggregationRechargeApiUrlData.V | |||
} | |||
return aggregationRechargeApiUrl | |||
} | |||
func ZyRechargeMoneyDeal(mid string, orderId string, uid int, officalAmount float64, types int, title, orderType string) error { | |||
info := offical.GetAggregationUserInfo(mid) | |||
if info == nil { | |||
fmt.Println("获取价格失败") | |||
return e.NewErr(400, "获取价格失败") | |||
} | |||
if types == 1 { | |||
if utils.StrToFloat64(info.Amount)+utils.StrToFloat64(info.CreditAmount)-officalAmount < 0 { | |||
fmt.Println("预存款不足") | |||
return e.NewErr(400, "预存款不足") | |||
} | |||
info.Amount = utils.Float64ToStr(utils.StrToFloat64(info.Amount) - officalAmount) | |||
} else { | |||
info.Amount = utils.Float64ToStr(utils.StrToFloat64(info.Amount) + officalAmount) | |||
} | |||
update, err := db.Db.Where("id=?", info.Id).Cols("amount").Update(info) | |||
if update == 0 || err != nil { | |||
return e.NewErr(400, "预存款不足") | |||
} | |||
var flow = model2.AggregationUserRechargeOrd{ | |||
OrdId: orderId, | |||
Uid: utils.StrToInt(mid), | |||
Amount: utils.Float64ToStr(officalAmount), | |||
CostPrice: utils.Float64ToStr(officalAmount), | |||
Balance: info.Amount, | |||
PayWay: 0, | |||
State: 1, | |||
Memo: title, | |||
CreateAt: time.Now(), | |||
Type: types, | |||
OrdType: orderType, | |||
SubUid: uid, | |||
} | |||
//TODO 要不要判断失败呢 | |||
db.Db.Insert(&flow) | |||
return nil | |||
} | |||
func CommAggregation(eg *xorm.Engine, mid string) (map[string]string, string) { | |||
aggregationRechargeApiKey := db.SysCfgGetWithDb(eg, mid, "aggregation_recharge_api_key") | |||
aggregationRechargeUserId := db.SysCfgGetWithDb(eg, mid, "aggregation_recharge_user_id") | |||
if aggregationRechargeApiKey == "" { | |||
aggregationRechargeApiKeyMap := offical.SysCfgByKey("aggregation_recharge_api_key") | |||
if aggregationRechargeApiKeyMap != nil { | |||
aggregationRechargeApiKey = aggregationRechargeApiKeyMap.V | |||
} | |||
} | |||
if aggregationRechargeUserId == "" { | |||
aggregationRechargeUserIdMap := offical.SysCfgByKey("aggregation_recharge_user_id") | |||
if aggregationRechargeUserIdMap != nil { | |||
aggregationRechargeUserId = aggregationRechargeUserIdMap.V | |||
} | |||
} | |||
param := map[string]string{ | |||
"userid": aggregationRechargeUserId, | |||
} | |||
return param, aggregationRechargeApiKey | |||
} |
@@ -1,154 +0,0 @@ | |||
package consume | |||
import ( | |||
"applet/app/db" | |||
"applet/app/db/model" | |||
"applet/app/svc" | |||
"applet/app/utils" | |||
"applet/app/utils/logx" | |||
"applet/consume/md" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git/rabbit" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_pay.git/pay" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_third_party_api.git/recharge" | |||
"encoding/json" | |||
"errors" | |||
"fmt" | |||
"github.com/streadway/amqp" | |||
"github.com/tidwall/gjson" | |||
"strings" | |||
"time" | |||
) | |||
func ZhiosRechargeOrderFailDev(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(1) | |||
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 = handleZhiosRechargeOrderFailDev(res.Body) | |||
//_ = res.Reject(false) | |||
if err == nil { | |||
_ = res.Ack(true) | |||
} | |||
} else { | |||
panic(errors.New("error getting message")) | |||
} | |||
} | |||
fmt.Println("get msg done") | |||
} | |||
func handleZhiosRechargeOrderFailDev(msg []byte) error { | |||
//1、解析canal采集至mq中queue的数据结构体 | |||
var canalMsg *md.ZhiosRechargeOrderPay | |||
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 := utils.StrToInt(canalMsg.Uid) | |||
oid := canalMsg.Oid | |||
var orderData model.RechargeOrder | |||
b, err2 := eg.Where("oid=? and uid=?", oid, uid).Get(&orderData) | |||
if err2 != nil { | |||
return errors.New("err") | |||
} | |||
if b == false { | |||
return nil | |||
} | |||
if orderData.Status != "已付款" { | |||
return nil | |||
} | |||
//查询官方接口看看有没有订单 | |||
param, aggregationRechargeApiKey := CommAggregation(eg, mid) | |||
param["out_trade_nums"] = oid | |||
aggregationRechargeApiUrl := GetApiUrl() | |||
order, err := recharge.GetOrder(aggregationRechargeApiUrl, aggregationRechargeApiKey, param) | |||
utils.FilePutContents(mid+"rech", utils.SerializeStr(param)) | |||
utils.FilePutContents(mid+"rech", aggregationRechargeApiKey) | |||
utils.FilePutContents(mid+"rech", utils.SerializeStr(order)) | |||
if err != nil { | |||
utils.FilePutContents(mid+"rech", err.Error()) | |||
return errors.New("err") | |||
} | |||
if gjson.Get(order, "errno").Int() == 0 && strings.Contains(order, oid) == false { | |||
utils.FilePutContents(mid+"rech", utils.SerializeStr(orderData)) | |||
NSFNTheSameBack := true | |||
if orderData.PayMethod == 3 { | |||
wechatP12ApiclientCert := db.SysCfgGetWithDb(eg, mid, "wechat_p12_apiclient_cert") | |||
wechatPayRefundType := db.SysCfgGetWithDb(eg, mid, "wechat_pay_refund_type") | |||
NSFNTheSameBack = false | |||
if wechatP12ApiclientCert == "" || orderData.TradeNo == "" || wechatPayRefundType != "1" || orderData.AppId == "" { | |||
NSFNTheSameBack = true | |||
} else { | |||
params := map[string]string{ | |||
"subject": "聚合充值" + orderData.Title + "退款", | |||
"total_fee": wxMoneyMulHundred(orderData.Amount), | |||
"amount": wxMoneyMulHundred(orderData.Amount), | |||
"out_refund_no": orderData.Oid, | |||
"p12_str": canalMsg.WxappletFilepathUrl + "/" + wechatP12ApiclientCert, | |||
"transaction_id": orderData.TradeNo, | |||
"pay_wx_mch_id": db.SysCfgGetWithDb(eg, mid, "pay_wx_mch_id"), | |||
"pay_wx_api_key": db.SysCfgGetWithDb(eg, mid, "pay_wx_api_key"), | |||
"uid": utils.IntToStr(orderData.Uid), | |||
"notify_url": canalMsg.DomainUrl + "/api/v1/refund/callback/" + mid, | |||
} | |||
//params["p12_str"] = "D:\\Downloads\\WXCertUtil\\cert\\1534243971_20230825_cert\\" + wechatP12ApiclientCert | |||
//params["notify_url"] = strings.ReplaceAll(params["notify_url"], "http:", "https:") | |||
params["pay_wx_appid"] = orderData.AppId | |||
r, r1, err := pay.WxAppRefund(params) | |||
utils.FilePutContents("mall_refund", utils.SerializeStr(params)) | |||
utils.FilePutContents("mall_refund", utils.SerializeStr(r)) | |||
utils.FilePutContents("mall_refund", utils.SerializeStr(r1)) | |||
if err != nil { | |||
utils.FilePutContents("mall_refund", err.Error()) | |||
return err | |||
} | |||
if r.ReturnCode != "SUCCESS" { | |||
return errors.New(r.ReturnMsg) | |||
} | |||
} | |||
} | |||
// 更改为已支付 | |||
orderData.Status = "已退款" | |||
orderData.RefundTime = time.Now() | |||
// 保存ord | |||
row, err := eg.ID(orderData.Id).Cols("status,pay_method,refund_time").Update(&orderData) | |||
if row > 0 && err == nil { | |||
if NSFNTheSameBack { | |||
svc.UpdateUserFinValidAndInterFlow(eg, | |||
orderData.Amount, "聚合充值"+orderData.Title+"退款", "aggregation_recharge", 0, 24, orderData.Uid, orderData.Id, int64(orderData.Id), utils.StrToInt64(orderData.Oid)) | |||
} | |||
} else { | |||
return errors.New("err") | |||
} | |||
rechargeNotPayMoney := db.SysCfgGetWithDb(eg, mid, "recharge_not_pay_money") | |||
if rechargeNotPayMoney != "1" { | |||
ZyRechargeMoneyDeal(mid, orderData.Oid, orderData.Uid, utils.StrToFloat64(orderData.ZyAmount), 0, orderData.Title+"退款", "refund") | |||
} | |||
} | |||
return nil | |||
} |
@@ -1,214 +0,0 @@ | |||
package consume | |||
import ( | |||
"applet/app/cfg" | |||
"applet/app/db" | |||
"applet/app/db/model" | |||
"applet/app/e" | |||
md2 "applet/app/md" | |||
"applet/app/utils" | |||
"applet/app/utils/logx" | |||
"applet/consume/md" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git/rabbit" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_pay.git/pay" | |||
"encoding/json" | |||
"errors" | |||
"fmt" | |||
"github.com/iGoogle-ink/gopay/alipay" | |||
"github.com/streadway/amqp" | |||
"xorm.io/xorm" | |||
) | |||
func ZhiosSupplierAfterOrder(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(1) | |||
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 = handleZhiosSupplierAfterOrder(res.Body) | |||
//_ = res.Reject(false) | |||
if err == nil { | |||
_ = res.Ack(true) | |||
} | |||
} else { | |||
panic(errors.New("error getting message")) | |||
} | |||
} | |||
fmt.Println("get msg done") | |||
} | |||
func handleZhiosSupplierAfterOrder(msg []byte) error { | |||
//1、解析canal采集至mq中queue的数据结构体 | |||
var canalMsg *md.ZhiosAppreciation | |||
fmt.Println(string(msg)) | |||
var tmpString string | |||
err := json.Unmarshal(msg, &tmpString) | |||
if err != nil { | |||
fmt.Println("===with", err.Error()) | |||
return err | |||
} | |||
fmt.Println(tmpString) | |||
err = json.Unmarshal([]byte(tmpString), &canalMsg) | |||
if err != nil { | |||
fmt.Println("===with", err.Error()) | |||
return err | |||
} | |||
mid := canalMsg.Mid | |||
eg := db.DBs[mid] | |||
if eg == nil { | |||
return nil | |||
} | |||
var afterOrder model.MallOrdAfterSale | |||
get, err := eg.Where("ord_id=?", canalMsg.Oid).Get(&afterOrder) | |||
if get == false || err != nil { | |||
return nil | |||
} | |||
if afterOrder.IsRefund == 0 && afterOrder.State == 4 { | |||
var order model.MallOrd | |||
get, err = eg.Where("ord_id = ?", canalMsg.Oid).Get(&order) | |||
if get == false || err != nil { | |||
return nil | |||
} | |||
if utils.StrToFloat64(afterOrder.ActualRefundAmount) == 0 { | |||
afterOrder.ActualRefundAmount = afterOrder.ApplyRefundMoney | |||
} | |||
wechatP12ApiclientCert := db.SysCfgGetWithDb(eg, canalMsg.Mid, "wechat_p12_apiclient_cert") | |||
wechatPayRefundType := db.SysCfgGetWithDb(eg, canalMsg.Mid, "wechat_pay_refund_type") | |||
alipayPayRefundType := db.SysCfgGetWithDb(eg, canalMsg.Mid, "alipay_pay_refund_type") | |||
switch order.PayChannel { | |||
case 2: // 支付宝支付 | |||
if order.TransactionId != "" && alipayPayRefundType == "1" { | |||
var param = &md2.AliPayPayParams1{} | |||
config, _ := CommMasterConfig(eg, canalMsg.Mid, param) | |||
config["trade_no"] = order.TransactionId | |||
config["refund_amount"] = afterOrder.ActualRefundAmount | |||
config["refund_reason"] = "自营退货" | |||
config["out_request_no"] = utils.OrderUUID(order.Uid) | |||
refund, err := pay.AlipayTradeRefund(config) | |||
utils.FilePutContents("mall_refund", utils.SerializeStr(config)) | |||
utils.FilePutContents("mall_refund", utils.SerializeStr(refund)) | |||
if err != nil { | |||
utils.FilePutContents("mall_refund", err.Error()) | |||
order.ErrMsg = err.Error() | |||
eg.Where("ord_id=?", order.OrdId).Cols("err_msg").Update(&order) | |||
return nil | |||
} | |||
if refund.AlipayTradeRefundResponse.Code != "10000" { | |||
order.ErrMsg = utils.SerializeStr(refund) | |||
eg.Where("ord_id=?", order.OrdId).Cols("err_msg").Update(&order) | |||
return nil | |||
} | |||
if refund.AlipayTradeRefundResponse.FundChange != "Y" { | |||
order.ErrMsg = utils.SerializeStr(refund) | |||
eg.Where("ord_id=?", order.OrdId).Cols("err_msg").Update(&order) | |||
return nil | |||
} | |||
fmt.Println(refund) | |||
fmt.Println(err) | |||
order.MoneyInAccount = 1 | |||
afterOrder.IsRefund = 1 | |||
} | |||
case 3: // 微信支付 | |||
if wechatP12ApiclientCert == "" || order.TransactionId == "" || wechatPayRefundType != "1" || order.AppId == "" { | |||
} else { | |||
params := map[string]string{ | |||
"subject": "自营商城退款", | |||
"total_fee": wxMoneyMulHundred(afterOrder.ActualRefundAmount), | |||
"amount": wxMoneyMulHundred(afterOrder.ActualRefundAmount), | |||
"out_refund_no": utils.Int64ToStr(afterOrder.OrdId), | |||
"p12_str": cfg.WxappletFilepath.URL + "/" + wechatP12ApiclientCert, | |||
"transaction_id": order.TransactionId, | |||
"pay_wx_mch_id": db.SysCfgGetWithDb(eg, canalMsg.Mid, "pay_wx_mch_id"), | |||
"pay_wx_api_key": db.SysCfgGetWithDb(eg, canalMsg.Mid, "pay_wx_api_key"), | |||
"uid": utils.IntToStr(order.Uid), | |||
"notify_url": "http://api.zhiyingos.com/api/v1/mall/refund/callback/" + canalMsg.Mid, | |||
} | |||
//params["p12_str"] = "D:\\Downloads\\WXCertUtil\\cert\\1534243971_20230825_cert\\" + wechatP12ApiclientCert | |||
//params["notify_url"] = strings.ReplaceAll(params["notify_url"], "http:", "https:") | |||
params["pay_wx_appid"] = order.AppId | |||
r, r1, err := pay.WxAppRefund(params) | |||
utils.FilePutContents("mall_refund", utils.SerializeStr(params)) | |||
utils.FilePutContents("mall_refund", utils.SerializeStr(r)) | |||
utils.FilePutContents("mall_refund", utils.SerializeStr(r1)) | |||
if err != nil { | |||
utils.FilePutContents("mall_refund", err.Error()) | |||
order.ErrMsg = err.Error() | |||
eg.Where("ord_id=?", order.OrdId).Cols("err_msg").Update(&order) | |||
return nil | |||
} | |||
if r.ReturnCode != "SUCCESS" { | |||
order.ErrMsg = utils.SerializeStr(r) | |||
eg.Where("ord_id=?", order.OrdId).Cols("err_msg").Update(&order) | |||
return nil | |||
} | |||
order.MoneyInAccount = 1 | |||
afterOrder.IsRefund = 1 | |||
} | |||
default: | |||
} | |||
eg.Where("id=?", afterOrder.Id).Cols("is_refund").Update(&afterOrder) | |||
eg.Where("ord_id=?", order.OrdId).Cols("money_in_account").Update(&order) | |||
} | |||
return nil | |||
} | |||
func CommMasterConfig(eg *xorm.Engine, dbName string, p *md2.AliPayPayParams1) (map[string]string, error) { | |||
//获取支付配置 | |||
req := map[string]string{ | |||
"pay_ali_use_type": db.SysCfgGetWithDb(eg, dbName, "pay_ali_use_type"), | |||
"private_key": db.SysCfgGetWithDb(eg, dbName, "pay_ali_private_key"), | |||
"app_id": db.SysCfgGetWithDb(eg, dbName, "pay_ali_app_id"), | |||
"rsa": db.SysCfgGetWithDb(eg, dbName, "pay_ali_key_len_type"), | |||
"pkcs": db.SysCfgGetWithDb(eg, dbName, "pay_ali_key_format_type"), | |||
} | |||
if req["pay_ali_use_type"] == "1" { | |||
req["private_key"] = db.SysCfgGetWithDb(eg, dbName, "pay_ali_new_private_key") | |||
req["app_id"] = db.SysCfgGetWithDb(eg, dbName, "pay_ali_new_app_id") | |||
appCertSN, err := alipay.GetCertSN(cfg.WxappletFilepath.URL + "/" + db.SysCfgGetWithDb(eg, dbName, "pay_app_cert_sn")) | |||
if err != nil { | |||
fmt.Println(err) | |||
return nil, err | |||
} | |||
if appCertSN == "" { | |||
fmt.Println(err) | |||
return nil, err | |||
} | |||
req["pay_app_cert_sn"] = appCertSN | |||
aliPayPublicCertSN, err := alipay.GetCertSN(cfg.WxappletFilepath.URL + "/" + db.SysCfgGetWithDb(eg, dbName, "pay_alipayrsa_public_key")) | |||
if err != nil { | |||
fmt.Println(err) | |||
return nil, err | |||
} | |||
if aliPayPublicCertSN == "" { | |||
fmt.Println(err) | |||
return nil, err | |||
} | |||
req["pay_alipayrsa_public_key"] = aliPayPublicCertSN | |||
} | |||
if req["private_key"] == "" || req["app_id"] == "" { | |||
return req, e.NewErr(400, "请在后台正确配置支付宝") | |||
} | |||
req["ord_id"] = p.OrdId | |||
req["amount"] = p.Amount | |||
req["subject"] = p.Subject | |||
req["order_type"] = p.OrderType | |||
return req, nil | |||
} |
@@ -1,102 +0,0 @@ | |||
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" | |||
"time" | |||
) | |||
func ZhiosTaskTotal(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 = handleZhiosTaskTotal(res.Body) | |||
//_ = res.Reject(false) | |||
if err == nil { | |||
_ = res.Ack(true) | |||
} | |||
} else { | |||
panic(errors.New("error getting message")) | |||
} | |||
} | |||
fmt.Println("get msg done") | |||
} | |||
func handleZhiosTaskTotal(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] | |||
if eg == nil { | |||
return nil | |||
} | |||
sess := eg.NewSession() | |||
defer sess.Close() | |||
sess.Begin() | |||
list := db.GetTaskCenterRewardList(sess, canalMsg.Id) | |||
if list == nil { | |||
sess.Rollback() | |||
return nil | |||
} | |||
if list.IsSend == 1 { | |||
sess.Rollback() | |||
return nil | |||
} | |||
var tmp = make(map[string]string) | |||
json.Unmarshal([]byte(list.Reward), &tmp) | |||
for k, v := range tmp { | |||
if utils.StrToFloat64(v) == 0 { | |||
continue | |||
} | |||
err := db.GetTaskTotal(sess, utils.IntToStr(list.Uid), time.Unix(int64(list.CreateTime), 0).Format("20060102"), time.Unix(int64(list.CreateTime), 0).Format("200601"), k, list.Type, list.TaskType, list.Title, v) | |||
if err != nil { | |||
sess.Rollback() | |||
return err | |||
} | |||
} | |||
list.IsSend = 1 | |||
update, err := sess.Where("id=?", list.Id).Cols("is_send").Update(list) | |||
if update == 0 || err != nil { | |||
sess.Rollback() | |||
return errors.New("失败") | |||
} | |||
sess.Commit() | |||
return nil | |||
} |
@@ -1,160 +0,0 @@ | |||
package consume | |||
import ( | |||
"applet/app/db" | |||
"applet/app/db/model" | |||
"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" | |||
"time" | |||
) | |||
func ZhiosTikTokUpdate(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(1) | |||
delivery := ch.Consume(queue.Name, true) | |||
var res amqp.Delivery | |||
var ok bool | |||
for { | |||
res, ok = <-delivery | |||
if ok == true { | |||
//fmt.Println(string(res.Body)) | |||
fmt.Println(">>>>>>>>>>>>>>>>CanalOrderConsume<<<<<<<<<<<<<<<<<<<<<<<<<") | |||
err = handleZhiosTikTokGoodsUpdate(res.Body) | |||
//_ = res.Reject(false) | |||
//if err == nil { | |||
//_ = res.Ack(true) | |||
//} | |||
} else { | |||
panic(errors.New("error getting message")) | |||
} | |||
} | |||
fmt.Println("get msg done") | |||
} | |||
func ZhiosTikTokAllUpdate(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(1) | |||
delivery := ch.Consume(queue.Name, true) | |||
var res amqp.Delivery | |||
var ok bool | |||
for { | |||
res, ok = <-delivery | |||
if ok == true { | |||
//fmt.Println(string(res.Body)) | |||
fmt.Println(">>>>>>>>>>>>>>>>CanalOrderConsume<<<<<<<<<<<<<<<<<<<<<<<<<") | |||
err = handleZhiosTikTokGoodsUpdate(res.Body) | |||
//_ = res.Reject(false) | |||
//if err == nil { | |||
//_ = res.Ack(true) | |||
//} | |||
} else { | |||
panic(errors.New("error getting message")) | |||
} | |||
} | |||
fmt.Println("get msg done") | |||
} | |||
func handleZhiosTikTokGoodsUpdate(msg []byte) error { | |||
//1、解析canal采集至mq中queue的数据结构体 | |||
var canalMsg *md.TikTokExChangeRoutKeyForUpdateParam | |||
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] | |||
var v md.TikTokData | |||
json.Unmarshal([]byte(canalMsg.Data), &v) | |||
var tmp model.TikTokTeamGoods | |||
//cache.HSet("tik_"+canalMsg.Mid, canalMsg.Cid+"_"+v.GoodsID, string(msg)) | |||
get, _ := eg.Where("gid=? and activity_id=?", v.GoodsID, canalMsg.Cid).Get(&tmp) | |||
if get { | |||
//if tmp.IsDown == 1 { | |||
// continue | |||
//} | |||
tmp.IsDown = 0 | |||
tmp.ServiceRatio = v.ServiceRatio | |||
tmp.Price = v.Price | |||
tmp.TalentCommission = v.PublicCommission | |||
tmp.PublicCommission = v.PublicCommission | |||
tmp.Title = v.GoodsTitle | |||
tmp.CostPrice = v.CostPrice | |||
tmp.Commission = v.Commission | |||
tmp.GoodsImg = v.GoodsImg | |||
tmp.DetailUrl = v.DetailURL | |||
tmp.EndType = "已采集" | |||
tmp.LmType = "" | |||
tmp.Sales = utils.StrToInt(v.GoodsSales) | |||
tmp.ActivityId = utils.StrToInt(canalMsg.Cid) | |||
tmp.ActivityStartTime = utils.TimeParseStd(v.ActivityStartTime + " 00:00:00") | |||
tmp.ActivityEndTime = utils.TimeParseStd(v.ActivityEndTime + " 23:59:59") | |||
tmp.OldActivityEndTime = utils.TimeParseStd(v.ActivityEndTime + " 23:59:59") | |||
tmp.UpdateTime = time.Now() | |||
tmp.Status = utils.StrToInt(canalMsg.Status) | |||
if tmp.Status == 3 || tmp.Status == 6 { | |||
tmp.ActivityEndTime = time.Now() | |||
} | |||
eg.Where("id=?", tmp.Id).AllCols().Update(&tmp) | |||
} else { | |||
if utils.InArr(canalMsg.Status, []string{"3", "6"}) { | |||
return nil | |||
} | |||
tmp = model.TikTokTeamGoods{ | |||
Cid: utils.StrToInt(v.Cid), | |||
ServiceRatio: v.ServiceRatio, | |||
Title: v.GoodsTitle, | |||
Price: v.Price, | |||
CostPrice: v.CostPrice, | |||
Commission: v.Commission, | |||
TalentCommission: v.PublicCommission, | |||
PublicCommission: v.PublicCommission, | |||
Gid: v.GoodsID, | |||
Sales: utils.StrToInt(v.GoodsSales), | |||
GoodsImg: v.GoodsImg, | |||
DetailUrl: v.DetailURL, | |||
ShopName: v.ShopName, | |||
ActivityStartTime: utils.TimeParseStd(v.ActivityStartTime + " 00:00:00"), | |||
ActivityEndTime: utils.TimeParseStd(v.ActivityEndTime + " 23:59:59"), | |||
OldActivityEndTime: utils.TimeParseStd(v.ActivityEndTime + " 23:59:59"), | |||
ActivityId: utils.StrToInt(canalMsg.Cid), | |||
UpdateTime: time.Now(), | |||
EndType: "已采集", | |||
IsDown: 0, | |||
} | |||
eg.InsertOne(&tmp) | |||
} | |||
return nil | |||
} |
@@ -1,160 +0,0 @@ | |||
package consume | |||
import ( | |||
"applet/app/db" | |||
"applet/app/db/model" | |||
"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" | |||
"strings" | |||
"time" | |||
"xorm.io/xorm" | |||
) | |||
func ZhiosUserRelate(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(1) | |||
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 = handleZhiosUserRelate(res.Body) | |||
//_ = res.Reject(false) | |||
if err != nil { | |||
_ = res.Reject(false) | |||
//TODO::重新推回队列末尾,避免造成队列堵塞 | |||
var msg *md.ZhiosOrderBuckle | |||
var tmpString string | |||
err := json.Unmarshal(res.Body, &tmpString) | |||
if err != nil { | |||
return | |||
} | |||
fmt.Println(tmpString) | |||
err = json.Unmarshal([]byte(tmpString), &msg) | |||
if err != nil { | |||
return | |||
} | |||
ch.Publish(queue.ExchangeName, utils.SerializeStr(msg), queue.RoutKey) | |||
} else { | |||
_ = res.Ack(true) | |||
} | |||
} else { | |||
panic(errors.New("error getting message")) | |||
} | |||
} | |||
fmt.Println("get msg done") | |||
} | |||
func handleZhiosUserRelate(msg []byte) error { | |||
time.Sleep(time.Microsecond * 20) // 等待500毫秒 | |||
//1、解析canal采集至mq中queue的数据结构体 | |||
var canalMsg *md.ZhiosOrderBuckle | |||
fmt.Println(string(msg)) | |||
var tmpString string | |||
err := json.Unmarshal(msg, &tmpString) | |||
if err != nil { | |||
fmt.Println("===with", err.Error()) | |||
return err | |||
} | |||
fmt.Println(tmpString) | |||
err = json.Unmarshal([]byte(tmpString), &canalMsg) | |||
if err != nil { | |||
fmt.Println("===with", err.Error()) | |||
return err | |||
} | |||
mid := canalMsg.Mid | |||
eg := db.DBs[mid] | |||
if eg == nil { | |||
return nil | |||
} | |||
profile, err := db.UserProfileFindByID(eg, canalMsg.Uid) | |||
if err != nil || profile == nil { | |||
return nil | |||
} | |||
if profile.ParentUid > 0 { | |||
ur := new(model.UserRelate) | |||
//如果有上级要加入关系链 | |||
initLV := 1 | |||
ur.ParentUid = profile.ParentUid | |||
ur.Uid = profile.Uid | |||
ur.Level = initLV | |||
ur.InviteTime = time.Now() | |||
_, err = db.UserRelateInsert(eg, ur) | |||
if err != nil && strings.Contains(err.Error(), "Duplicate") == false { | |||
return err | |||
} | |||
// 插入多级关联 | |||
RoutineMultiRelate1(eg, ur.ParentUid, ur.Uid, initLV) | |||
} | |||
return nil | |||
} | |||
//RoutineMultiRelate is 多级关联 | |||
func RoutineMultiRelate1(eg *xorm.Engine, pid int, uid int, lv int) { | |||
for { | |||
if pid == 0 { | |||
break | |||
} | |||
m, err := db.UserProfileFindByID(eg, pid) | |||
if err != nil { | |||
logx.Warn(err) | |||
break | |||
} | |||
if m != nil { | |||
if m.ParentUid == 0 { | |||
break | |||
} | |||
lv++ | |||
ur := new(model.UserRelate) | |||
ur.ParentUid = m.ParentUid | |||
ur.Uid = uid | |||
ur.Level = lv | |||
ur.InviteTime = time.Now() | |||
_, err := db.UserRelateInsert(eg, ur) | |||
if err != nil && strings.Contains(err.Error(), "Duplicate") == false { | |||
logx.Warn(err) | |||
break | |||
} | |||
if err != nil && strings.Contains(err.Error(), "Duplicate") { | |||
tmp, _, _ := db.UserRelateByUIDAndPUID(eg, ur.Uid, ur.ParentUid) | |||
if tmp != nil && tmp.Level != ur.Level { | |||
db.UserRelateUpdate(eg, ur) | |||
} | |||
} | |||
// 还要关联当前的用户的所有下级,注意关联等级 | |||
//go RoutineInsertUserRelate(c, m.ParentUid, uid, lv) | |||
// 下级关联上上级 | |||
// 继续查询 | |||
logx.Info(fmt.Sprintf("关联pid(%v) -> uid(%v),lv:%v", ur.ParentUid, ur.Uid, lv)) | |||
logx.Info("继续查询") | |||
pid = m.ParentUid | |||
} | |||
if m == nil { | |||
logx.Info("查询结束,退出") | |||
break | |||
} | |||
} | |||
} |
@@ -1,86 +0,0 @@ | |||
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] | |||
if eg == nil { | |||
return nil | |||
} | |||
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 | |||
} |
@@ -1,172 +0,0 @@ | |||
package consume | |||
import ( | |||
"applet/app/db" | |||
"applet/app/db/model" | |||
"applet/app/utils" | |||
"applet/app/utils/cache" | |||
"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" | |||
"net" | |||
"strings" | |||
"time" | |||
) | |||
var data []*model.MasterAreaVisitsFlows | |||
func ZhiOsUserVisitIpAddressConsume(queue md.MqQueue) { | |||
fmt.Println(">>>>>>>>>>>>>>>>>>>>>>>>ZhiOsUserVisitIpAddressConsume<<<<<<<<<<<<<<<<<<<<<<<") | |||
ch, err := rabbit.Cfg.Pool.GetChannel() | |||
if err != nil { | |||
logx.Error(err) | |||
return | |||
} | |||
geoIp2db, _ := geoip2db.NewGeoipDbByStatik() | |||
defer geoIp2db.Close() | |||
defer ch.Release() | |||
//1、将自己绑定到交换机上 | |||
ch.Bind(queue.Name, queue.ExchangeName, queue.RoutKey) | |||
//2、取出数据进行消费 | |||
ch.Qos(100) | |||
delivery := ch.Consume(queue.Name, false) | |||
var res amqp.Delivery | |||
var ok bool | |||
for { | |||
res, ok = <-delivery | |||
if ok == true { | |||
fmt.Println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>") | |||
err = handleUserVisitIpAddress(res.Body, geoIp2db) | |||
//_ = res.Reject(false) | |||
_ = res.Ack(true) | |||
if len(data) >= 100 { | |||
db.BatchAddMasterAreaVisitsFlows(db.DataDb, data) | |||
data = []*model.MasterAreaVisitsFlows{} | |||
} | |||
} else { | |||
panic(errors.New("error getting message")) | |||
} | |||
} | |||
fmt.Println("get msg done") | |||
} | |||
func handleUserVisitIpAddress(msg []byte, geoIp2db *geoip2.DBReader) error { | |||
now := time.Now() | |||
today := now.Format("2006-01-02") | |||
var tmpString string | |||
err := json.Unmarshal(msg, &tmpString) | |||
if err != nil { | |||
fmt.Println(err.Error()) | |||
return err | |||
} | |||
var msgStruct md.ZhiOsUserVisitIpAddressMessage | |||
err = json.Unmarshal([]byte(tmpString), &msgStruct) | |||
if err != nil { | |||
fmt.Println(err.Error()) | |||
return err | |||
} | |||
if msgStruct.MasterId == "" { | |||
cacheKeyForUrl := fmt.Sprintf(md.ZhiOsMasterIdForUrlHashMapCacheKey) | |||
get, _ := cache.HGetString(cacheKeyForUrl, msgStruct.Url) | |||
if get == "" { | |||
msgStruct.MasterId = GetWebSiteDomainMasterId(msgStruct.Url) | |||
utils.FilePutContents("GetWebSiteDomainMasterId", utils.SerializeStr(msgStruct)) | |||
cache.HSet(cacheKeyForUrl, msgStruct.Url, msgStruct.MasterId) | |||
cache.Expire(cacheKeyForUrl, md.ZhiOsUserVisitIpAddressHashMapCacheTime) | |||
} else { | |||
msgStruct.MasterId = get | |||
} | |||
} | |||
//1、判断ip是否已统计 | |||
//cacheKey := fmt.Sprintf(md.ZhiOsUserVisitIpAddressHashMapCacheKey, msgStruct.MasterId, today) | |||
//get, _ := cache.HGetString(cacheKey, msgStruct.Ip) | |||
//if get == "" { | |||
if true { | |||
//2、分析ip归属地 | |||
countryName, provinceId, cityId, provinceName, cityName := getIpAddress(geoIp2db, msgStruct) | |||
if provinceId != "" || cityId != "" || countryName != "" || provinceName != "" || cityName != "" { | |||
//3、插入`master_area_visits_flows` 表 | |||
if provinceName == "" { | |||
provinceName = msgStruct.Province | |||
} | |||
if cityName == "" { | |||
cityName = msgStruct.City | |||
} | |||
data = append(data, &model.MasterAreaVisitsFlows{ | |||
Ip: msgStruct.Ip, | |||
MasterId: utils.StrToInt(msgStruct.MasterId), | |||
Date: today, | |||
CountryName: countryName, | |||
ProvinceName: provinceName, | |||
ProvinceId: provinceId, | |||
CityName: cityName, | |||
CityId: cityId, | |||
Pvd: msgStruct.Pvd, | |||
CreateAt: now, | |||
UpdateAt: now, | |||
}) | |||
//db.MasterAreaVisitsFlowsInsert(db.DataDb, ) | |||
} | |||
//4、加入到缓存map中 | |||
//cache.HSet(cacheKey, msgStruct.Ip, msgStruct.MasterId) | |||
//cache.Expire(cacheKey, md.ZhiOsUserVisitIpAddressHashMapCacheTime) | |||
} | |||
return nil | |||
} | |||
func getIpAddress(geoIp2db *geoip2.DBReader, message md.ZhiOsUserVisitIpAddressMessage) (countryName, provinceId, cityId, provinceName, cityName string) { | |||
record, _ := geoIp2db.City(net.ParseIP(message.Ip)) | |||
if record.Country.Names != nil && record.Subdivisions != nil && record.City.Names != nil { | |||
message.Country = record.Country.Names["zh-CN"] | |||
message.Province = record.Subdivisions[0].Names["zh-CN"] | |||
message.City = record.City.Names["zh-CN"] | |||
} | |||
countryName = message.Country | |||
if countryName == "中国" && message.Province != "" { | |||
if message.Province == "闽" { | |||
message.Province = "福建" | |||
} | |||
province, err := db.ProvinceGetOneByName(message.Province) | |||
if err != nil { | |||
return "", "", "", "", "" | |||
} | |||
provinceId = province.Id | |||
provinceName = province.Name | |||
if message.City != "" { | |||
city, err := db.CityGetOneByName(message.City) | |||
if err != nil { | |||
return "", "", "", "", "" | |||
} | |||
cityId = city.Id | |||
cityName = city.Name | |||
} | |||
} | |||
return | |||
} | |||
// 获取指定类型的域名对应的masterId:admin、wap、api | |||
func GetWebSiteDomainMasterId(host string) string { | |||
obj := new(model.UserAppDomain) | |||
has, err := db.Db.Where("domain=?", host).Get(obj) | |||
if err != nil || !has { | |||
hostList := strings.Split(host, ":") | |||
has, err = db.Db.Where("domain=?", hostList[0]).Get(obj) | |||
if err != nil || !has { | |||
return "" | |||
} | |||
} | |||
return utils.AnyToString(obj.Uuid) | |||
} |
@@ -1,187 +0,0 @@ | |||
package consume | |||
import ( | |||
"applet/app/db" | |||
"applet/app/db/model" | |||
"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" | |||
"xorm.io/xorm" | |||
) | |||
func ZhiosValidUser(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(300) | |||
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(">>>>>>>>>>>>>>>>ZhiosAcquisitionCondition<<<<<<<<<<<<<<<<<<<<<<<<<") | |||
err = handleValidUser(res.Body) | |||
//_ = res.Reject(false) | |||
fmt.Println(err) | |||
_ = res.Ack(true) | |||
} else { | |||
panic(errors.New("error getting message")) | |||
} | |||
} | |||
fmt.Println("get msg done") | |||
} | |||
func handleValidUser(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] | |||
if eg == nil { | |||
return nil | |||
} | |||
if canalMsg.Uid == "" { | |||
return nil | |||
} | |||
RoutineUpdateUserComm(eg, mid, canalMsg.Uid) | |||
return nil | |||
} | |||
func RoutineUpdateUserComm(eg *xorm.Engine, dbName, uid string) { | |||
if utils.StrToInt(uid) == 0 { | |||
return | |||
} | |||
user, _ := db.UserFindByID(eg, uid) | |||
if user == nil { | |||
return | |||
} | |||
userProfile, _ := db.UserProfileFindByID(eg, uid) | |||
if userProfile == nil { | |||
return | |||
} | |||
if userProfile.IsVerify == 1 { | |||
return | |||
} | |||
validConditionMap := map[string]interface{}{} | |||
checkMap := map[string]interface{}{} | |||
todone := 0 | |||
//有效会员 校验 | |||
vdata := db.SysCfgGetWithDb(eg, dbName, "valid_member_condition") | |||
if err := json.Unmarshal([]byte(vdata), &validConditionMap); err != nil { | |||
return | |||
logx.Warn(err) | |||
} | |||
for k, v := range validConditionMap { | |||
if v != "" && utils.AnyToFloat64(v) > 0 { | |||
todone++ | |||
checkMap[k] = v | |||
} | |||
} | |||
for k, v := range checkMap { | |||
switch k { | |||
case "taskVideo": | |||
sum, _ := eg.Where("uid=? and task_type=? and task_id>0", user.Uid, 3).Sum(&model.TaskVideoNum{}, "count") | |||
if sum >= utils.AnyToFloat64(v) { | |||
todone-- | |||
} | |||
case "realCheck": | |||
// 检查实名认证 | |||
one, _ := db.GetRealNameAuthByUidWithState(eg, user.Uid, 1) | |||
if one != nil && one.Uid == user.Uid { | |||
todone-- | |||
} | |||
case "bindPhone": | |||
// 检查绑定手机号 | |||
if user.Phone != "" { | |||
todone-- | |||
} | |||
case "goodsCommission": | |||
sqlTpl := `SELECT cast(SUM(LEFT(olr.amount,LENGTH(olr.amount)-2)) as decimal(50,4)) AS amount | |||
FROM ord_list_relate olr | |||
LEFT JOIN ord_list ol ON olr.oid = ol.ord_id | |||
LEFT JOIN privilege_card_ord pco ON olr.oid =pco.ord_id | |||
LEFT JOIN duoyou_ord_list dol ON olr.oid =dol.oid | |||
LEFT JOIN recharge_order ro ON olr.oid =ro.oid | |||
LEFT JOIN playlet_sale_order pso ON olr.oid =pso.custom_oid | |||
WHERE olr.uid = ? AND (ol.state<>4 or pco.state=1 or dol.id>0 or ro.status<>'已退款' or pso.status<>'订单退款'); | |||
` | |||
todayResult, err := db.QueryNativeString(eg, sqlTpl, uid) | |||
today := "0" | |||
if err == nil { | |||
today = todayResult[0]["amount"] | |||
} | |||
// 累计佣金 | |||
if utils.StrToFloat64(today) >= utils.AnyToFloat64(v) { | |||
todone-- | |||
} | |||
case "orderPay": | |||
// 付款订单满足v元 | |||
ms, err := db.OrderListByUIDByPaidPrice(eg, user.Uid, v, []string{"0", "1", "2", "3", "5"}) | |||
if err != nil { | |||
logx.Warn(err) | |||
} | |||
mss := *ms | |||
if len(mss) > 0 { | |||
todone-- | |||
} | |||
case "receive": | |||
// 已收货 | |||
ms, err := db.OrderListByUIDByState(eg, user.Uid, []string{"1", "2", "3", "5"}) | |||
if err != nil { | |||
logx.Warn(err) | |||
} | |||
mss := *ms | |||
if len(mss) > 0 { | |||
todone-- | |||
} | |||
case "tbAuth": | |||
// 是否淘宝授权 | |||
if userProfile.AccTaobaoAuthTime != 0 { | |||
todone-- | |||
} | |||
case "withdraw": | |||
// 提现 | |||
sum, err := db.UserWithDrawApplySumByState(eg, user.Uid, "1", "2") | |||
if err != nil { | |||
logx.Warn(err) | |||
} | |||
if sum > 0 { | |||
todone-- | |||
} | |||
} | |||
} | |||
// 满足条件则将改用户打为有效用户 | |||
if todone == 0 { | |||
userProfile.IsVerify = 1 | |||
} | |||
_, err := db.UserProfileUpdate(eg, userProfile.Uid, userProfile) | |||
if err != nil { | |||
logx.Warn(err) | |||
} | |||
return | |||
} |
@@ -1,144 +0,0 @@ | |||
package consume | |||
import ( | |||
"applet/app/db" | |||
"applet/app/db/model" | |||
"applet/app/utils" | |||
"applet/app/utils/logx" | |||
"applet/consume/md" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git/rabbit" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/rule" | |||
"encoding/json" | |||
"errors" | |||
"fmt" | |||
"github.com/streadway/amqp" | |||
"github.com/tidwall/gjson" | |||
"time" | |||
"xorm.io/xorm" | |||
) | |||
func ZhiosWithdrawReward(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(20) | |||
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 = handleZhiosWithdrawReward(res.Body) | |||
//_ = res.Reject(false) | |||
if err == nil { | |||
_ = res.Ack(true) | |||
} | |||
} else { | |||
panic(errors.New("error getting message")) | |||
} | |||
} | |||
fmt.Println("get msg done") | |||
} | |||
func handleZhiosWithdrawReward(msg []byte) error { | |||
//1、解析canal采集至mq中queue的数据结构体 | |||
var canalMsg *md.ZhiosWithdraw | |||
fmt.Println(string(msg)) | |||
var tmpString string | |||
err := json.Unmarshal(msg, &tmpString) | |||
if err != nil { | |||
fmt.Println("===with", err.Error()) | |||
return err | |||
} | |||
fmt.Println(tmpString) | |||
err = json.Unmarshal([]byte(tmpString), &canalMsg) | |||
if err != nil { | |||
fmt.Println("===with", err.Error()) | |||
return err | |||
} | |||
mid := canalMsg.Mid | |||
eg := db.DBs[mid] | |||
if eg == nil { | |||
return nil | |||
} | |||
//判断用户是什么等级 | |||
var apply model.FinWithdrawApply | |||
get, err := eg.Where("id=?", canalMsg.Id).Get(&apply) | |||
if get == false || err != nil { | |||
return nil | |||
} | |||
if apply.Uid == 0 { | |||
return nil | |||
} | |||
// | |||
withdrawSetting := db.SysCfgGetWithDb(eg, mid, "withdraw_setting") | |||
withdrawFirstBili := gjson.Get(withdrawSetting, "withdrawFirstBili").String() | |||
publicWithdrawTeamBili := db.SysCfgGetWithDb(eg, mid, "public_withdraw_team_bili") | |||
publicWithdrawTeamCount := db.SysCfgGetWithDb(eg, mid, "public_withdraw_team_count") | |||
if utils.StrToFloat64(withdrawFirstBili) > 0 { | |||
level := 0 | |||
all, _ := db.UserLevlEgAll(eg) | |||
for k, v := range all { | |||
if k == 0 { | |||
level = v.Id | |||
} | |||
} | |||
//分给粉丝 | |||
levelUser := db.UserFindByLevel(eg, level) | |||
if len(levelUser) == 0 { | |||
return nil | |||
} | |||
ids := make([]int64, 0) | |||
for _, v := range levelUser { | |||
ids = append(ids, int64(v.Uid)) | |||
} | |||
money := utils.FloatFormat(utils.StrToFloat64(apply.Amount)*(utils.StrToFloat64(withdrawFirstBili)/100)/float64(len(levelUser)), 6) | |||
comm(eg, canalMsg.Id, ids, money, "全网提现分红", "withdraw_reward", "92") | |||
} | |||
if utils.StrToFloat64(publicWithdrawTeamBili) > 0 && utils.StrToFloat64(publicWithdrawTeamCount) > 0 { | |||
//分给粉丝 | |||
user, _ := rule.FindRandUser(eg, utils.StrToInt(publicWithdrawTeamCount)) | |||
fmt.Println("=zhe", utils.SerializeStr(user)) | |||
money := utils.FloatFormat(utils.StrToFloat64(apply.Amount)*(utils.StrToFloat64(publicWithdrawTeamBili)/100)/float64(len(user)), 6) | |||
comm(eg, canalMsg.Id, user, money, "公排团队提现分红", "withdraw_team_reward", "93") | |||
} | |||
return nil | |||
} | |||
func comm(eg *xorm.Engine, id string, levelUser []int64, money float64, title, types, ordAction string) { | |||
for _, v := range levelUser { | |||
profile, err := db.UserProfileFindByID(eg, v) | |||
if err != nil || profile == nil { | |||
continue | |||
} | |||
oldAmount := profile.FinValid | |||
profile.FinValid = utils.Float64ToStrByPrec(utils.StrToFloat64(profile.FinValid)+money, 6) | |||
eg.Where("uid=?", profile.Uid).Update(profile) | |||
var flow = model.FinUserFlow{ | |||
Uid: int(v), | |||
Type: 0, | |||
Amount: utils.Float64ToStrByPrec(money, 6), | |||
BeforeAmount: oldAmount, | |||
AfterAmount: profile.FinValid, | |||
OrdType: types, | |||
OrdId: id, | |||
OrdTitle: title, | |||
OrdAction: utils.StrToInt(ordAction), | |||
OrdTime: int(time.Now().Unix()), | |||
State: 2, | |||
CreateAt: time.Now(), | |||
UpdateAt: time.Now(), | |||
} | |||
eg.Insert(&flow) | |||
} | |||
} |
@@ -1,75 +0,0 @@ | |||
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 YoumishangExchangeStore(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(1) | |||
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 = handleYoumishangExchangeStore(res.Body) | |||
//_ = res.Reject(false) | |||
fmt.Println(err) | |||
if err == nil { | |||
_ = res.Ack(true) | |||
} | |||
} else { | |||
panic(errors.New("error getting message")) | |||
} | |||
} | |||
fmt.Println("get msg done") | |||
} | |||
func handleYoumishangExchangeStore(msg []byte) error { | |||
//1、解析canal采集至mq中queue的数据结构体 | |||
var canalMsg *md.YouMiShangExchangeStoreStruct | |||
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.MasterId | |||
eg := db.DBs[mid] | |||
uid := canalMsg.Uid | |||
levelList, _ := db.UserLevlEgAll(eg) | |||
FindUser(eg, utils.Int64ToStr(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 | |||
} |