@@ -0,0 +1,249 @@ | |||||
package db | |||||
import ( | |||||
"applet/app/db/model" | |||||
"applet/app/utils/logx" | |||||
"xorm.io/xorm" | |||||
) | |||||
// UserRelateInsert is 插入一条数据到用户关系表 | |||||
func UserRelateInsert(Db *xorm.Engine, userRelate *model.UserRelate) (int64, error) { | |||||
affected, err := Db.Insert(userRelate) | |||||
if err != nil { | |||||
return 0, err | |||||
} | |||||
return affected, nil | |||||
} | |||||
func UserRelateInsertWithSess(sess *xorm.Session, userRelate *model.UserRelate) (int64, error) { | |||||
affected, err := sess.Insert(userRelate) | |||||
if err != nil { | |||||
return 0, err | |||||
} | |||||
return affected, nil | |||||
} | |||||
func UserRelateUpdate(Db *xorm.Engine, userRelate *model.UserRelate) (int64, error) { | |||||
affected, err := Db.Where("parent_uid=? and uid=?", userRelate.ParentUid, userRelate.Uid).Cols("level,invite_time").Update(userRelate) | |||||
if err != nil { | |||||
return 0, err | |||||
} | |||||
return affected, nil | |||||
} | |||||
//UserRelateByPuid is 获取用户关系列表 by puid | |||||
func UserRelatesByPuid(Db *xorm.Engine, puid interface{}, limit, start int) (*[]model.UserRelate, error) { | |||||
var m []model.UserRelate | |||||
if limit == 0 && start == 0 { | |||||
if err := Db.Where("parent_uid = ?", puid). | |||||
Cols(`id,parent_uid,uid,level,invite_time`). | |||||
Find(&m); err != nil { | |||||
return nil, logx.Warn(err) | |||||
} | |||||
return &m, nil | |||||
} | |||||
if err := Db.Where("parent_uid = ?", puid). | |||||
Cols(`id,parent_uid,uid,level,invite_time`).Limit(limit, start). | |||||
Find(&m); err != nil { | |||||
return nil, logx.Warn(err) | |||||
} | |||||
return &m, nil | |||||
} | |||||
//UserRelatesByPuidByLv is 获取用户关系列表 by puid 和lv | |||||
func UserRelatesByPuidByLv(Db *xorm.Engine, puid, lv interface{}, limit, start int) (*[]model.UserRelate, error) { | |||||
var m []model.UserRelate | |||||
if limit == 0 && start == 0 { | |||||
if err := Db.Where("parent_uid = ? AND level = ?", puid, lv). | |||||
Cols(`id,parent_uid,uid,level,invite_time`). | |||||
Find(&m); err != nil { | |||||
return nil, logx.Warn(err) | |||||
} | |||||
return &m, nil | |||||
} | |||||
if err := Db.Where("parent_uid = ? AND level = ?", puid, lv). | |||||
Cols(`id,parent_uid,uid,level,invite_time`).Limit(limit, start). | |||||
Find(&m); err != nil { | |||||
return nil, logx.Warn(err) | |||||
} | |||||
return &m, nil | |||||
} | |||||
//UserRelatesByPuidByLvByTime is 获取直属 level =1用户关系列表 by puid 和lv by time | |||||
func UserRelatesByPuidByLvByTime(Db *xorm.Engine, puid, lv, stime, etime interface{}, limit, start int) (*[]model.UserRelate, error) { | |||||
var m []model.UserRelate | |||||
if limit == 0 && start == 0 { | |||||
if err := Db.Where("parent_uid = ? AND level = ? AND invite_time > ? AND invite_time < ?", puid, lv, stime, etime). | |||||
Find(&m); err != nil { | |||||
return nil, logx.Warn(err) | |||||
} | |||||
return &m, nil | |||||
} | |||||
if err := Db.Where("parent_uid = ? AND level = ? AND invite_time > ? AND invite_time < ?", puid, lv, stime, etime). | |||||
Limit(limit, start). | |||||
Find(&m); err != nil { | |||||
return nil, logx.Warn(err) | |||||
} | |||||
return &m, nil | |||||
} | |||||
//UserRelatesByPuidByTime is 获取户关系列表 by puid 和lv by time | |||||
func UserRelatesByPuidByTime(Db *xorm.Engine, puid, stime, etime interface{}, limit, start int) (*[]model.UserRelate, error) { | |||||
var m []model.UserRelate | |||||
if limit == 0 && start == 0 { | |||||
if err := Db.Where("parent_uid = ? AND invite_time > ? AND invite_time < ?", puid, stime, etime). | |||||
Cols(`id,parent_uid,uid,level,invite_time`). | |||||
Find(&m); err != nil { | |||||
return nil, logx.Warn(err) | |||||
} | |||||
return &m, nil | |||||
} | |||||
if err := Db.Where("parent_uid = ? AND invite_time > ? AND invite_time < ?", puid, stime, etime). | |||||
Cols(`id,parent_uid,uid,level,invite_time`).Limit(limit, start). | |||||
Find(&m); err != nil { | |||||
return nil, logx.Warn(err) | |||||
} | |||||
return &m, nil | |||||
} | |||||
//UserRelatesByPuidExceptLv is 获取用户关系列表 by puid 和非 lv | |||||
func UserRelatesByPuidExceptLv(Db *xorm.Engine, puid, lv interface{}, limit, start int) (*[]model.UserRelate, error) { | |||||
var m []model.UserRelate | |||||
if limit == 0 && start == 0 { | |||||
if err := Db.Where("parent_uid = ? AND level != ?", puid, lv). | |||||
Cols(`id,parent_uid,uid,level,invite_time`). | |||||
Find(&m); err != nil { | |||||
return nil, logx.Warn(err) | |||||
} | |||||
return &m, nil | |||||
} | |||||
if err := Db.Where("parent_uid = ? AND level != ?", puid, lv). | |||||
Cols(`id,parent_uid,uid,level,invite_time`).Limit(limit, start). | |||||
Find(&m); err != nil { | |||||
return nil, logx.Warn(err) | |||||
} | |||||
return &m, nil | |||||
} | |||||
//UserRelateByUID is 获取用户关系表 by uid | |||||
func UserRelateByUID(Db *xorm.Engine, uid interface{}) (*model.UserRelate, bool, error) { | |||||
r := new(model.UserRelate) | |||||
has, err := Db.Where("uid=?", uid).Get(r) | |||||
if err != nil { | |||||
return nil, false, err | |||||
} | |||||
return r, has, nil | |||||
} | |||||
//UserRelateByUIDByLv is 获取用户关系表 by uid | |||||
func UserRelateByUIDByLv(Db *xorm.Engine, uid, lv interface{}) (*model.UserRelate, bool, error) { | |||||
r := new(model.UserRelate) | |||||
has, err := Db.Where("uid=? AND level=?", uid, lv).Get(r) | |||||
if err != nil { | |||||
return nil, false, err | |||||
} | |||||
return r, has, nil | |||||
} | |||||
//UserRelateByUIDAndPUID 根据 Puid 和uid 查找 ,用于确认关联 | |||||
func UserRelateByUIDAndPUID(Db *xorm.Engine, uid, puid interface{}) (*model.UserRelate, bool, error) { | |||||
r := new(model.UserRelate) | |||||
has, err := Db.Where("uid=? AND parent_uid=?", uid, puid).Get(r) | |||||
if err != nil { | |||||
return nil, false, err | |||||
} | |||||
return r, has, nil | |||||
} | |||||
//UserRelatesByPuIDAndLv is 查询用户关系表 获取指定等级和puid的关系 | |||||
func UserRelatesByPuIDAndLv(Db *xorm.Engine, puid, lv interface{}) (*[]model.UserRelate, error) { | |||||
var m []model.UserRelate | |||||
if err := Db.Where("parent_uid = ? AND level = ?", puid, lv). | |||||
Cols(`id,parent_uid,uid,level,invite_time`). | |||||
Find(&m); err != nil { | |||||
return nil, logx.Warn(err) | |||||
} | |||||
return &m, nil | |||||
} | |||||
// UserRelateInByUID is In查询 | |||||
func UserRelateInByUID(Db *xorm.Engine, ids []int) (*[]model.UserRelate, error) { | |||||
var m []model.UserRelate | |||||
if err := Db.In("uid", ids). | |||||
Find(&m); err != nil { | |||||
return nil, logx.Warn(err) | |||||
} | |||||
return &m, nil | |||||
} | |||||
// UserRelatesByUIDDescLv is Where 查询 根据level 降序 | |||||
func UserRelatesByUIDDescLv(Db *xorm.Engine, id interface{}) (*[]model.UserRelate, error) { | |||||
var m []model.UserRelate | |||||
if err := Db.Where("uid = ?", id).Desc("level"). | |||||
Find(&m); err != nil { | |||||
return nil, logx.Warn(err) | |||||
} | |||||
return &m, nil | |||||
} | |||||
func UserRelatesByInvite(Db *xorm.Engine, times interface{}) (*[]model.UserRelate, error) { | |||||
var m []model.UserRelate | |||||
if err := Db.Where("invite_time >= ?", times). | |||||
Find(&m); err != nil { | |||||
return nil, logx.Warn(err) | |||||
} | |||||
return &m, nil | |||||
} | |||||
//UserRelateCountByPUID is 根据puid 计数 | |||||
func UserRelateCountByPUID(Db *xorm.Engine, pid interface{}) (int64, error) { | |||||
count, err := Db.Where("parent_uid = ?", pid).Count(model.UserRelate{}) | |||||
if err != nil { | |||||
return 0, nil | |||||
} | |||||
return count, nil | |||||
} | |||||
//UserRelateDelete is 删除关联他上级的关系记录,以及删除他下级的关联记录 | |||||
func UserRelateDelete(Db *xorm.Engine, uid interface{}) (int64, error) { | |||||
// 删除与之上级的记录 | |||||
_, err := Db.Where("uid = ?", uid).Delete(model.UserRelate{}) | |||||
if err != nil { | |||||
return 0, err | |||||
} | |||||
// 删除与之下级的记录 | |||||
_, err = Db.Where("parent_uid = ?", uid).Delete(model.UserRelate{}) | |||||
if err != nil { | |||||
return 0, err | |||||
} | |||||
return 1, nil | |||||
} | |||||
func UserRelateDeleteWithSession(sess *xorm.Session, uid interface{}) (int64, error) { | |||||
// 删除与之上级的记录 | |||||
_, err := sess.Where("uid = ?", uid).Delete(model.UserRelate{}) | |||||
if err != nil { | |||||
return 0, err | |||||
} | |||||
// 删除与之下级的记录 | |||||
_, err = sess.Where("parent_uid = ?", uid).Delete(model.UserRelate{}) | |||||
if err != nil { | |||||
return 0, err | |||||
} | |||||
return 1, nil | |||||
} | |||||
//UserRelateDelete is 删除关联他上级的关系记录 | |||||
func UserRelateExtendDelete(Db *xorm.Engine, uid interface{}) (int64, error) { | |||||
// 删除与之上级的记录 | |||||
_, err := Db.Where("uid = ?", uid).Delete(model.UserRelate{}) | |||||
if err != nil { | |||||
return 0, err | |||||
} | |||||
return 1, nil | |||||
} |
@@ -21,7 +21,7 @@ func InitMapDbs(c *cfg.DBCfg, prd bool) { | |||||
logx.Fatalf("db_mapping not exists : %v", err) | logx.Fatalf("db_mapping not exists : %v", err) | ||||
} | } | ||||
// tables := MapAllDatabases(debug) | // tables := MapAllDatabases(debug) | ||||
if true { | |||||
if cfg.Prd { | |||||
tables = GetAllDatabasePrd() //debug 获取生产 | tables = GetAllDatabasePrd() //debug 获取生产 | ||||
} else { | } else { | ||||
tables = GetAllDatabaseDev() //debug 获取开发 | tables = GetAllDatabaseDev() //debug 获取开发 | ||||
@@ -0,0 +1,13 @@ | |||||
package model | |||||
import ( | |||||
"time" | |||||
) | |||||
type UserRelate struct { | |||||
Id int64 `json:"id" xorm:"pk autoincr comment('主键') BIGINT(10)"` | |||||
ParentUid int `json:"parent_uid" xorm:"not null default 0 comment('上级会员ID') unique(idx_union_u_p_id) INT(20)"` | |||||
Uid int `json:"uid" xorm:"not null default 0 comment('关联UserID') unique(idx_union_u_p_id) INT(20)"` | |||||
Level int `json:"level" xorm:"not null default 1 comment('推广等级(1直属,大于1非直属)') INT(10)"` | |||||
InviteTime time.Time `json:"invite_time" xorm:"not null default CURRENT_TIMESTAMP comment('邀请时间') TIMESTAMP"` | |||||
} |
@@ -17,48 +17,49 @@ func Init() { | |||||
// 增加消费任务队列 | // 增加消费任务队列 | ||||
func initConsumes() { | func initConsumes() { | ||||
//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.ZhiosGuideStoreOrderFunName] = ZhiosGuideStoreOrder | |||||
// | |||||
//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.ZhiosMallGreenCoinConsumeFunName] = ZhiosMallGreenCoinConsume | |||||
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.ZhiosCapitalPoolOrderTotalFunName] = ZhiosCapitalPoolOrderTotal | |||||
//jobs[consumeMd.ZhiosExpressOrderFail] = ZhiosExpressOrderFail | |||||
//jobs[consumeMd.ZhiosWithdrawReward] = ZhiosWithdrawReward | |||||
jobs[consumeMd.ZhiosOrderSettleTotalFunName] = ZhiosSettleTotal | |||||
jobs[consumeMd.ZhiosOrderHjyFunName] = ZhiosOrderHjy | |||||
jobs[consumeMd.ZhiosOrderBuckleFunName] = ZhiosOrderBuckle | |||||
// | // | ||||
jobs[consumeMd.ZhiosSupplierAfterOrderFunName] = ZhiosSupplierAfterOrder | |||||
jobs[consumeMd.ZhiosGuideStoreOrderFunName] = ZhiosGuideStoreOrder | |||||
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 | |||||
//// | |||||
////////////////////////////////////// V1 ///////////////////////////////////////////////////// | ////////////////////////////////////// V1 ///////////////////////////////////////////////////// | ||||
//jobs[consumeMd.CloudIssuanceMsgCallBackFunName] = CloudIssuanceMsgCallBackConsume | //jobs[consumeMd.CloudIssuanceMsgCallBackFunName] = CloudIssuanceMsgCallBackConsume | ||||
@@ -70,10 +71,10 @@ func initConsumes() { | |||||
//jobs[consumeMd.MallAddSupplyGoodsFunName] = MallAddSupplyGoodsConsume | //jobs[consumeMd.MallAddSupplyGoodsFunName] = MallAddSupplyGoodsConsume | ||||
//////////////////////////////////////// bigData ///////////////////////////////////////////////////// | //////////////////////////////////////// bigData ///////////////////////////////////////////////////// | ||||
jobs[consumeMd.CanalOrderConsumeFunName] = CanalOrderConsume | |||||
jobs[consumeMd.CanalGuideOrderConsumeFunName] = CanalGuideOrderConsume | |||||
jobs[consumeMd.ZhiOsUserVisitIpAddressConsumeFunName] = ZhiOsUserVisitIpAddressConsume | |||||
jobs[consumeMd.CanalUserVirtualCcoinFlowFunName] = CanalUserVirtualCoinFlowConsume | |||||
//jobs[consumeMd.CanalOrderConsumeFunName] = CanalOrderConsume | |||||
//jobs[consumeMd.CanalGuideOrderConsumeFunName] = CanalGuideOrderConsume | |||||
//jobs[consumeMd.ZhiOsUserVisitIpAddressConsumeFunName] = ZhiOsUserVisitIpAddressConsume | |||||
//jobs[consumeMd.CanalUserVirtualCcoinFlowFunName] = CanalUserVirtualCoinFlowConsume | |||||
} | } | ||||
func Run() { | func Run() { | ||||
@@ -380,6 +380,15 @@ var RabbitMqQueueKeyList = []*MqQueue{ | |||||
BindKey: "", | BindKey: "", | ||||
ConsumeFunName: "ZhiosIntegralProxyRecharge", | 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", | |||||
}, | |||||
{ | { | ||||
ExchangeName: "canal.topic", | ExchangeName: "canal.topic", | ||||
Name: "canal_user_virtual_coin_flow", | Name: "canal_user_virtual_coin_flow", | ||||
@@ -392,7 +401,9 @@ var RabbitMqQueueKeyList = []*MqQueue{ | |||||
} | } | ||||
const ( | const ( | ||||
ZhiosUserRelateFunName = "ZhiosUserRelate" | |||||
ZhiosIntegralProxyRechargeFunName = "ZhiosIntegralProxyRecharge" | ZhiosIntegralProxyRechargeFunName = "ZhiosIntegralProxyRecharge" | ||||
ZhiosMallGreenCoinConsumeFunName = "ZhiosMallGreenCoinConsume" | |||||
ZhiosUserUpLvFunName = "ZhiosUserUpLv" | ZhiosUserUpLvFunName = "ZhiosUserUpLv" | ||||
CanalGuideOrderByUserUpLvConsume = "CanalGuideOrderByUserUpLvConsume" | CanalGuideOrderByUserUpLvConsume = "CanalGuideOrderByUserUpLvConsume" | ||||
ZhiosOrderFreeFunName = "ZhiosOrderFree" | ZhiosOrderFreeFunName = "ZhiosOrderFree" | ||||
@@ -1,5 +1,10 @@ | |||||
package md | package md | ||||
const ( | |||||
MallGreenCoinConsume = "zhios.mall_green_coin_consume.exchange" | |||||
MallGreenCoinConsumeKeyErr = "mall_green_coin_consume_err" | |||||
) | |||||
type ZhiosCapitalPoolOrderTotal struct { | type ZhiosCapitalPoolOrderTotal struct { | ||||
Uid []string `json:"uid"` | Uid []string `json:"uid"` | ||||
Mid string `json:"mid"` | Mid string `json:"mid"` | ||||
@@ -23,6 +28,14 @@ type ZhiosOrderBuckle struct { | |||||
Uid string `json:"uid"` | Uid string `json:"uid"` | ||||
Mid string `json:"mid"` | Mid string `json:"mid"` | ||||
} | } | ||||
type ZhiosMallConsume struct { | |||||
Uid string `json:"uid"` | |||||
Mid string `json:"mid"` | |||||
Oid string `json:"oid"` | |||||
Amount string `json:"amount"` | |||||
Err string `json:"err"` | |||||
} | |||||
type ZhiosOrderFree struct { | type ZhiosOrderFree struct { | ||||
ItemId string `json:"item_id"` | ItemId string `json:"item_id"` | ||||
OptPvd string `json:"opt_pvd"` | OptPvd string `json:"opt_pvd"` | ||||
@@ -0,0 +1,92 @@ | |||||
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(">>>>>>>>>>>>>>>>CanalOrderConsume<<<<<<<<<<<<<<<<<<<<<<<<<") | |||||
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.Amount, canalMsg.Oid, canalMsg.Mid) | |||||
fmt.Println(err) | |||||
if err != nil { | |||||
return err | |||||
} | |||||
return nil | |||||
} |
@@ -0,0 +1,160 @@ | |||||
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 | |||||
} | |||||
} | |||||
} |
@@ -6,7 +6,7 @@ require ( | |||||
code.fnuoos.com/go_rely_warehouse/zyos_go_condition_statistics.git v1.1.2-0.20240222023917-c31b53f7e8cb | code.fnuoos.com/go_rely_warehouse/zyos_go_condition_statistics.git v1.1.2-0.20240222023917-c31b53f7e8cb | ||||
code.fnuoos.com/go_rely_warehouse/zyos_go_es.git v1.0.0 | code.fnuoos.com/go_rely_warehouse/zyos_go_es.git v1.0.0 | ||||
code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git v0.0.4 | code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git v0.0.4 | ||||
code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git v1.9.10-0.20240119104238-05c3962029ff | |||||
code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git v1.9.10-0.20240301103805-f71bf8ac0ab3 | |||||
code.fnuoos.com/go_rely_warehouse/zyos_go_pay.git v1.6.2-0.20231116085701-9ba6e19f877b | code.fnuoos.com/go_rely_warehouse/zyos_go_pay.git v1.6.2-0.20231116085701-9ba6e19f877b | ||||
code.fnuoos.com/go_rely_warehouse/zyos_go_third_party_api.git v1.1.21-0.20240126015516-38ca248db2fd | code.fnuoos.com/go_rely_warehouse/zyos_go_third_party_api.git v1.1.21-0.20240126015516-38ca248db2fd | ||||
github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5 | github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5 | ||||