diff --git a/db/db_extend_commission.go b/db/db_extend_commission.go new file mode 100644 index 0000000..bcc3646 --- /dev/null +++ b/db/db_extend_commission.go @@ -0,0 +1,23 @@ +package db + +import ( + "code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/db/model" + "xorm.io/xorm" +) + +func GetExtendAgentCommissionRelate(eg *xorm.Engine, oid, pvd string) (*model.ExtendAgentCommissionRelate, error) { + var ord model.ExtendAgentCommissionRelate + has, err := eg.Where("oid=? and pvd=?", oid, pvd).Get(&ord) + if has == false || err != nil { + return nil, err + } + return &ord, nil +} +func GetExtendAgentCommissionRelateWithSession(session *xorm.Session, oid, pvd string) (*model.ExtendAgentCommissionRelate, error) { + var ord model.ExtendAgentCommissionRelate + has, err := session.Where("oid=? and pvd=?", oid, pvd).Get(&ord) + if has == false || err != nil { + return nil, err + } + return &ord, nil +} diff --git a/db/db_regional_agent_user.go b/db/db_regional_agent_user.go new file mode 100644 index 0000000..e12ebbd --- /dev/null +++ b/db/db_regional_agent_user.go @@ -0,0 +1,18 @@ +package db + +import ( + "code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/db/model" + zhios_order_relate_logx "code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/utils/logx" + "fmt" + "xorm.io/xorm" +) + +// GetCountByRegionalAgentUserInfoByParams 通过传入的参数查询数据(单条) +func GetCountByRegionalAgentUserInfoByParams(Db *xorm.Engine, params map[string]interface{}) (*model.RegionalAgentUser, error) { + var m model.RegionalAgentUser + var query = fmt.Sprintf("%s =?", params["key"]) + if has, err := Db.Where(query, params["value"]).And("deleted_time is null").Get(&m); err != nil || has == false { + return nil, zhios_order_relate_logx.Error(err) + } + return &m, nil +} diff --git a/db/model/extend_agent_commission_relate.go b/db/model/extend_agent_commission_relate.go new file mode 100644 index 0000000..50df8d5 --- /dev/null +++ b/db/model/extend_agent_commission_relate.go @@ -0,0 +1,18 @@ +package model + +import ( + "time" +) + +type ExtendAgentCommissionRelate struct { + Id int `json:"id" xorm:"not null pk autoincr INT(11)"` + Uid int `json:"uid" xorm:"default 0 comment('奖励用户id') INT(11)"` + FormUid int `json:"form_uid" xorm:"default 0 comment('来自用户id') INT(11)"` + Pvd string `json:"pvd" xorm:"default '' comment('渠道') VARCHAR(255)"` + Oid string `json:"oid" xorm:"default '' comment('子订单') VARCHAR(255)"` + CreateTime time.Time `json:"create_time" xorm:"DATETIME"` + Amount string `json:"amount" xorm:"default 0.0000 comment('金额') DECIMAL(11,4)"` + Rate string `json:"rate" xorm:"default 0.0000 comment('当时比例') DECIMAL(11,4)"` + SettleTime time.Time `json:"settle_time" xorm:"DATETIME"` + CoinId int `json:"coin_id" xorm:"default 0 comment('积分id 0为佣金') INT(11)"` +} diff --git a/db/model/regional_agent_user.go b/db/model/regional_agent_user.go new file mode 100644 index 0000000..c571c6f --- /dev/null +++ b/db/model/regional_agent_user.go @@ -0,0 +1,25 @@ +package model + +import ( + "time" +) + +type RegionalAgentUser struct { + Id int64 `json:"id" xorm:"pk autoincr BIGINT(20)"` + SchemeId int `json:"scheme_id" xorm:"not null comment('方案id') INT(11)"` + Uid int `json:"uid" xorm:"not null comment('参与区域代理的用户id') index(mgbgu_uid_ord_id_group_id_index) INT(11)"` + RegionId int `json:"region_id" xorm:"not null comment('区域id') index(mgbgu_uid_ord_id_group_id_index) INT(11)"` + IsFailure int `json:"is_failure" xorm:"not null default 0 comment('是否已失效:0否 1是') TINYINT(1)"` + FailureTime int `json:"failure_time" xorm:"not null comment('剩下失效时间(单位:月)0代表永久') INT(11)"` + ProvinceId int64 `json:"province_id" xorm:"comment('省级区域id') BIGINT(20)"` + CityId int64 `json:"city_id" xorm:"comment('市级区域id') BIGINT(20)"` + DistrictId int64 `json:"district_id" xorm:"comment('区/县级id') BIGINT(20)"` + SiteId int64 `json:"site_id" xorm:"comment('网点id') BIGINT(20)"` + RegionalName string `json:"regional_name" xorm:"not null comment('地区名:(例如:广东省;广东省-珠海市;广东省-珠海市-香洲区;广东省-珠海市-香洲区-港湾一号)') VARCHAR(255)"` + Level int `json:"level" xorm:"not null default 0 comment('等级(1:省级;2:市级;3:区/县 级;4:网点)') TINYINT(1)"` + CreateTime time.Time `json:"create_time" xorm:"not null default 'CURRENT_TIMESTAMP' comment('创建时间') index(mgbgu_uid_ord_id_group_id_index) TIMESTAMP"` + UpdateTime time.Time `json:"update_time" xorm:"not null default 'CURRENT_TIMESTAMP' comment('更新时间') TIMESTAMP"` + DeletedTime time.Time `json:"deleted_time" xorm:"comment('删除时间') TIMESTAMP"` + DateType int `json:"date_type" xorm:"not null comment('1:包月,2:包季,3:包年,4:永久') TINYINT(1)"` + AutoRenewal int `json:"auto_renewal" xorm:"not null comment('是否自动续费0否 1是') TINYINT(1)"` +} diff --git a/md/extend_price_reward.go b/md/extend_price_reward.go index f6519d2..deef7a6 100644 --- a/md/extend_price_reward.go +++ b/md/extend_price_reward.go @@ -18,4 +18,5 @@ type ExtendPriceRewardListDetail struct { BaseVal string `json:"base_val"` Bili string `json:"bili"` PositionBili string `json:"position_bili"` + ExtendAgentBili string `json:"extend_agent_bili"` } diff --git a/svc/extend_agent_commission.go b/svc/extend_agent_commission.go new file mode 100644 index 0000000..f3c4c41 --- /dev/null +++ b/svc/extend_agent_commission.go @@ -0,0 +1,113 @@ +package svc + +import ( + "code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/db" + "code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/db/model" + "code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/md" + zhios_order_relate_utils "code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/utils" + "encoding/json" + "time" + "xorm.io/xorm" +) + +//加入区域代理直推上级分佣 抽成部分 +/*** +commission 总佣金 +bili 抽成 除以100之后的 +uid 用户id +oid 订单号 +pvd 渠道 +*/ +func AddExtendAgentCommission(eg *xorm.Engine, args map[string]string) { + user, err := db.UserProfileFindByID(eg, args["uid"]) + if err != nil || user == nil { + return + } + if user.ParentUid == 0 { + return + } + //判断是不是代理 + //查出用户是否区域代理 + agentUser, err := db.GetCountByRegionalAgentUserInfoByParams(eg, map[string]interface{}{ + "key": "uid", + "value": user.Uid, + }) + if agentUser == nil || err != nil { + return + } + // 有效期计算 + if agentUser.IsFailure == 1 { + return + } + now := time.Now().Unix() + if agentUser.FailureTime > 0 && agentUser.FailureTime < int(now) { + return + } + + commissionOpt, err := db.DbsPlanCommissionById(eg, zhios_order_relate_utils.StrToInt(args["plan_commission_id"])) + if err != nil || commissionOpt == nil || commissionOpt.Id == 0 { + return + } + var subsidyTmp = make(map[int]*md.ExtendRewardLvGrade) + var tmp map[int]*md.ExtendRewardLvGrade + if err := json.Unmarshal([]byte(commissionOpt.Data), &tmp); err != nil { + return + } + for _, v := range tmp { + subsidyTmp[v.Lv] = v + } + userProfile, err := db.UserProfileFindByID(eg, args["uid"]) + if err != nil || userProfile == nil { + return + } + if userProfile.ParentUid == 0 { + return + } + //查询用户等级 + parentUser, err := db.UserFindByID(eg, userProfile.ParentUid) + if err != nil || parentUser == nil { + return + } + lvGrade := subsidyTmp[parentUser.Level] + var rewardList = make(map[string]md.ExtendPriceRewardList) + for _, v := range lvGrade.ExtendPriceRewardList { + rewardList[v.CoinID] = v + } + //判断有没有存过 + relate, _ := db.GetExtendAgentCommissionRelate(eg, args["oid"], args["pvd"]) + if relate != nil { + return + } + + for k, v := range rewardList { + var amount float64 = 0 + rewardData := v + reward := md.ExtendPriceRewardListDetail{} + if agentUser.Level == 1 { + reward = rewardData.ProvinceAgent + } + if agentUser.Level == 2 { + reward = rewardData.CityAgent + } + if agentUser.Level == 3 { + reward = rewardData.AreaAgent + } + amount = zhios_order_relate_utils.StrToFloat64(args["commission"]) * zhios_order_relate_utils.StrToFloat64(reward.ExtendAgentBili) / 100 + if amount == 0 { + continue + } + var ord = model.ExtendAgentCommissionRelate{ + Uid: user.ParentUid, + FormUid: user.Uid, + Pvd: args["pvd"], + Oid: args["oid"], + CreateTime: time.Now(), + Amount: zhios_order_relate_utils.Float64ToStrByPrec(amount, 4), + Rate: args["bili"], + CoinId: zhios_order_relate_utils.StrToInt(k), + } + eg.InsertOne(&ord) + } + + return +}