浏览代码

update

master
DengBiao 1年前
父节点
当前提交
d0efb55ff2
共有 1 个文件被更改,包括 120 次插入0 次删除
  1. +120
    -0
      rule/public_platoon_relate_commission.go

+ 120
- 0
rule/public_platoon_relate_commission.go 查看文件

@@ -9,6 +9,7 @@ import (
zhios_order_relate_logx "code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/utils/logx"
"errors"
"math"
"math/rand"
"strings"
"time"
"xorm.io/xorm"
@@ -439,3 +440,122 @@ func DealCommonWealthPunish(engine *xorm.Engine, uid int, reason string) (err er
err = session.Commit()
return
}

// JudgeUserBelowLevel 判断当前用户下几级排满
func JudgeUserBelowLevel(engine *xorm.Engine, uid int) (level int, err error) {
//1、查找 `user_public_platoon_setting` 基础设置
userPublicPlatoonSetting, err := db.UserPublicPlatoonSettingGetOneByParams(engine, map[string]interface{}{
"key": "is_open",
"value": 1,
})
if err != nil {
return
}

//2、查找当前用户所在的公排记录
var m model.UserPublicPlatoonRelation
has, err := engine.Where("uid =?", uid).Get(&m)
if err != nil {
return
}
if !has {
err = errors.New("未查询到当前用户的公排记录")
return
}

//3、查找当前用户下最下级的层数
var son model.UserPublicPlatoonRelation
hasSon, err := engine.Where("father_uid LIKE ?", "%-"+zhios_order_relate_utils.IntToStr(m.Id)).
Or("father_uid LIKE ?", zhios_order_relate_utils.IntToStr(m.Id)+"-%").
Or("father_uid LIKE ?", "%-"+zhios_order_relate_utils.IntToStr(m.Id)+"-%").
Or("father_uid = ?", m.Id).
OrderBy("id Desc").Get(&son)
if err != nil {
return
}
if !hasSon {
return
}

level = son.Level - 1
levelEndPosition := getLevelForLastPosition(son.Level, userPublicPlatoonSetting.SeveralTimes)
if son.Position == levelEndPosition {
level++
}
return
}

func FindRandUser(engine *xorm.Engine, nums int) (resp []int64, err error) {
//1、查找最小、最大 位置的公排位置
var minM, maxM model.UserPublicPlatoonRelation
has, err := engine.Desc("id").Get(&minM)
if err != nil {
return
}
if !has {
err = errors.New("未查询到最小公排记录")
return
}

has, err = engine.Desc("id").Get(&maxM)
if err != nil {
return
}
if !has {
err = errors.New("未查询到最大公排记录")
return
}
var m model.UserPublicPlatoonRelation
count, err := engine.Count(&m)
if err != nil {
return
}
if int(count) < nums {
nums = int(count)
}

var uniqueMap = map[int64]bool{}
var j = 0
for {
ids := randSeedInt(int64(minM.Id), int64(maxM.Id), nums-len(resp), uniqueMap)
var list []model.UserPublicPlatoonRelation
if err1 := engine.In("id", ids).
Find(&list); err1 != nil {
return nil, zhios_order_relate_logx.Warn(err1)
}

for _, v := range list {
resp = append(resp, int64(v.Uid))
uniqueMap[int64(v.Id)] = true
}

if len(resp) == nums {
break
}

if j == 10 {
//TODO::避免出现死循环
break
}
j++
}

return
}

func randSeedInt(start, end int64, nums int, uniqueMap map[int64]bool) (resp []int64) {
rand.Seed(time.Now().UnixNano())
for {
result := rand.Int63n(end) + start
if !uniqueMap[result] {
resp = append(resp, result)
uniqueMap[result] = true
break
}
}

if len(resp) < nums {
randSeedInt(start, end, nums, uniqueMap)
}
return
}

正在加载...
取消
保存