瀏覽代碼

test

master
huangjiajun 1 年之前
父節點
當前提交
a7bf45abfa
共有 10 個文件被更改,包括 1032 次插入1 次删除
  1. +122
    -0
      db/db_user_level.go
  2. +19
    -0
      db/db_user_level_audit.go
  3. +30
    -0
      db/model/user.go
  4. +21
    -0
      db/model/user_level.go
  5. +21
    -0
      db/model/user_level_audit.go
  6. +18
    -0
      db/model/user_level_change_log.go
  7. +24
    -0
      db/model/user_level_upgrade_task.go
  8. +0
    -1
      go.mod
  9. +767
    -0
      hdl/hdl_upgrade.go
  10. +10
    -0
      md/md_upgrade.go

+ 122
- 0
db/db_user_level.go 查看文件

@@ -0,0 +1,122 @@
package db

import (
"code.fnuoos.com/go_rely_warehouse/zyos_go_condition_statistics.git/db/model"
zhios_condition_statistics_logx "code.fnuoos.com/go_rely_warehouse/zyos_go_condition_statistics.git/utils/logx"
"errors"
"fmt"
"reflect"
"xorm.io/xorm"
)

//UserLevelByID is 根据用户id 获取对应的等级信息
func UserLevelByID(Db *xorm.Engine, id interface{}) (*model.UserLevel, error) {
m := new(model.UserLevel)
has, err := Db.Where("id = ?", id).Get(m)
if err != nil {
return nil, err
}
if !has {
return nil, errors.New("not found")
}

return m, nil
}
func UserLevelAuditInsertWithEngine(Db *xorm.Engine, data *model.UserLevelAudit) (int64, error) {
affect, err := Db.Insert(data)
if err != nil || affect != 1 {
return 0, err
}

return affect, nil
}

func UserLevelAuditUpdateById(eg *xorm.Engine, id int, audit *model.UserLevelAudit, forceColumns ...string) (int64, error) {
var (
affected int64
err error
)
if forceColumns != nil {
affected, err = eg.Where("id=?", id).Cols(forceColumns...).Update(audit)
} else {
affected, err = eg.Where("id=?", id).Update(audit)
}
if err != nil {
return 0, err
}
return affected, nil
}

func UserLevelOrderById(Db *xorm.Engine, id string) (*model.UserLevelOrd, error) {
var m model.UserLevelOrd
has, err := Db.Where("id = ? ", id).Desc("expire_at").Get(&m)
if err != nil || has == false {
return nil, err
}
return &m, nil
}

//UserLevelOrdUpdateOne is 更新付费升级订单
func UserLevelOrdUpdateOne(Db *xorm.Engine, order *model.UserLevelOrd) (int64, error) {
affect, err := Db.ID(order.Id).Update(order)
if err != nil {
return 0, err
}
return affect, nil
}

func UserUpdate(Db *xorm.Engine, uid interface{}, user *model.User, forceColums ...string) (int64, error) {
var (
affected int64
err error
)
if forceColums != nil {
affected, err = Db.Where("uid=?", uid).Cols(forceColums...).Update(user)
} else {
affected, err = Db.Where("uid=?", uid).Update(user)
}
if err != nil {
return 0, err
}
return affected, nil
}
func BatchSelectUserLevelUpgradeTasks(Db *xorm.Engine, params map[string]interface{}) (*[]model.UserLevelUpgradeTask, error) {
var m []model.UserLevelUpgradeTask

if params["key"] == nil {
//查询全部数据
err := Db.Find(&m)
if err != nil {
return nil, err
}
return &m, nil
} else {
if reflect.TypeOf(params["value"]).Kind() == reflect.Slice {
//指定In查询
if err := Db.In(zhios_condition_statistics_logx.AnyToString(params["key"]), params["value"]).Find(&m); err != nil {
return nil, err
}
return &m, nil
} else {
var query = fmt.Sprintf("%s =?", params["key"])
err := Db.Where(query, params["value"]).Find(&m)
if err != nil {
return nil, err
}
return &m, nil
}

}
}
func UserLevelByAllMap(Db *xorm.Engine) map[int]*model.UserLevel {
var maps = make(map[int]*model.UserLevel, 0)
var m []*model.UserLevel
err := Db.Where("is_use = ?", 1).Asc("level_weight").Find(&m)
if err != nil {
return maps
}
for _, v := range m {
maps[v.Id] = v
}
return maps
}

+ 19
- 0
db/db_user_level_audit.go 查看文件

@@ -0,0 +1,19 @@
package db

import (
"code.fnuoos.com/go_rely_warehouse/zyos_go_condition_statistics.git/db/model"
"xorm.io/xorm"
)

// 用户正在审核中的记录
func UserLevelAuditingFindByUid(Db *xorm.Engine, uid int) (*model.UserLevelAudit, error) {
var m model.UserLevelAudit
has, err := Db.Where("uid=?", uid).Desc("id").Get(&m)
if err != nil || !has {
return nil, err
}
if m.State == 1 {
return &m, nil
}
return nil, nil
}

+ 30
- 0
db/model/user.go 查看文件

@@ -0,0 +1,30 @@
package model

import (
"time"
)

type User struct {
Uid int `json:"uid" xorm:"not null pk autoincr comment('主键ID') INT(10)"`
Username string `json:"username" xorm:"not null default '' comment('用户名') index VARCHAR(50)"`
Password string `json:"password" xorm:"not null default '' comment('密码') CHAR(32)"`
Email string `json:"email" xorm:"not null default '' comment('邮箱') VARCHAR(128)"`
Phone string `json:"phone" xorm:"not null default '' comment('联系电话') VARCHAR(20)"`
Nickname string `json:"nickname" xorm:"not null default '' comment('昵称') VARCHAR(20)"`
Level int `json:"level" xorm:"not null default 0 comment('用户等级id') INT(11)"`
InviteTotal int `json:"invite_total" xorm:"not null default 0 comment('直推邀请总人数') INT(11)"`
FirstArriveAt time.Time `json:"first_arrive_at" xorm:"not null default CURRENT_TIMESTAMP comment('到达该等级的时间') TIMESTAMP"`
LevelArriveAt time.Time `json:"level_arrive_at" xorm:"not null default CURRENT_TIMESTAMP comment('到达该等级的时间') TIMESTAMP"`
LevelExpireAt time.Time `json:"level_expire_at" xorm:"not null default CURRENT_TIMESTAMP comment('该等级过期时间') TIMESTAMP"`
CreateAt time.Time `json:"create_at" xorm:"created not null default CURRENT_TIMESTAMP comment('创建时间') TIMESTAMP"`
UpdateAt time.Time `json:"update_at" xorm:"updated default CURRENT_TIMESTAMP comment('最后修改资料时间') TIMESTAMP"`
LastLoginAt time.Time `json:"last_login_at" xorm:"default CURRENT_TIMESTAMP comment('最近登录时间') TIMESTAMP"`
DeleteAt int `json:"delete_at" xorm:"not null default 0 comment('是否删除;0未删除;1已删除') TINYINT(1)"`
State int `json:"state" xorm:"not null default 1 comment('0未激活,1正常,2冻结,3删除') TINYINT(1)"`
LastLoginIp string `json:"last_login_ip" xorm:"not null default '' comment('最后登录IP') VARCHAR(64)"`
RegisterIp string `json:"register_ip" xorm:"not null default '' comment('注册IP') VARCHAR(64)"`
Zone string `json:"zone" xorm:"not null default '86' comment('区号') VARCHAR(100)"`
SalePhone string `json:"sale_phone" xorm:"not null default '' comment('') VARCHAR(100)"`
IsFake int `json:"is_fake" xorm:"not null default 0 comment('0真实 1虚拟') TINYINT(1)"`
IsMarketer int `json:"is_marketer" xorm:"not null default 0 comment('是否市商 0否 1是') TINYINT(1)"`
}

+ 21
- 0
db/model/user_level.go 查看文件

@@ -0,0 +1,21 @@
package model

import (
"time"
)

type UserLevel struct {
Id int `json:"id" xorm:"not null pk autoincr comment('等级id') INT(11)"`
BenefitIds string `json:"benefit_ids" xorm:"comment('该等级拥有的权益id【json】') TEXT"`
LevelName string `json:"level_name" xorm:"not null default '' comment('等级名称') VARCHAR(255)"`
LevelWeight int `json:"level_weight" xorm:"not null default 0 comment('等级权重') INT(11)"`
LevelUpdateCondition int `json:"level_update_condition" xorm:"not null default 2 comment('2是条件升级,1是无条件升级') TINYINT(1)"`
AutoAudit int `json:"auto_audit" xorm:"not null default 0 comment('(自动审核)0关闭,1开启') TINYINT(1)"`
AutoUpdate int `json:"auto_update" xorm:"not null default 0 comment('(自动升级)0关闭,1开启') TINYINT(1)"`
LevelDate int `json:"level_date" xorm:"default 0 comment('会员有效期(0永久有效,单位月)') INT(11)"`
IsUse int `json:"is_use" xorm:"not null default 1 comment('是否开启(0否,1是)') TINYINT(1)"`
ChoosableNum int `json:"choosable_num" xorm:"default 0 comment('可选任务数量(当is_must_task为0时生效)') INT(6)"`
Memo string `json:"memo" xorm:"default '' comment('备注') VARCHAR(255)"`
CssSet string `json:"css_set" xorm:"TEXT"`
CreateAt time.Time `json:"create_at" xorm:"not null default CURRENT_TIMESTAMP TIMESTAMP"`
}

+ 21
- 0
db/model/user_level_audit.go 查看文件

@@ -0,0 +1,21 @@
package model

import (
"time"
)

type UserLevelAudit struct {
Id int `json:"id" xorm:"not null pk autoincr comment('自增ID') INT(10)"`
Uid int `json:"uid" xorm:"not null default 0 comment('uid') index INT(10)"`
CurrentLevelId int `json:"current_level_id" xorm:"not null default 0 comment('用户当前等级id') INT(10)"`
NextLevelId int `json:"next_level_id" xorm:"not null default 0 comment('要升级到的等级id(续费情况id=当前等级id)') INT(10)"`
ConditionType int `json:"condition_type" xorm:"not null default 0 comment('升级方式:1无条件升级 2条件升级') TINYINT(1)"`
AutoAudit int `json:"auto_audit" xorm:"not null default 0 comment('自动审核:0关闭(手动审核),1开启(自动审核)') TINYINT(1)"`
DateType int `json:"date_type" xorm:"not null default 0 comment('1:包月,2:包季,3:包年,4:永久,0:非付费升级') TINYINT(1)"`
State int `json:"state" xorm:"not null default 1 comment('审核状态:1待审核;2审核通过;3审核拒绝') TINYINT(1)"`
CreateAt time.Time `json:"create_at" xorm:"not null default 'CURRENT_TIMESTAMP' comment('创建时间') TIMESTAMP"`
UpdateAt time.Time `json:"update_at" xorm:"not null default 'CURRENT_TIMESTAMP' comment('更新时间') TIMESTAMP"`
RelateOid int64 `json:"relate_oid" xorm:"comment('关联的订单id(如果是付费)') BIGINT(22)"`
Reason string `json:"reason" xorm:"comment('拒绝理由') TEXT"`
LevelDate int `json:"level_date" xorm:"not null default 0 comment('会员有效期:0永久;其他为x月') INT(11)"`
}

+ 18
- 0
db/model/user_level_change_log.go 查看文件

@@ -0,0 +1,18 @@
package model

import (
"time"
)

type UserLevelChangeLog struct {
Id int `json:"id" xorm:"not null pk autoincr INT(11)"`
Uid int `json:"uid" xorm:"default 0 comment('用户id') INT(11)"`
BeforeLv int `json:"before_lv" xorm:"default 0 comment('更改前的等级') INT(11)"`
AfterLv int `json:"after_lv" xorm:"default 0 comment('更改后的等级') INT(11)"`
Time int `json:"time" xorm:"INT(11)"`
BeforeLevelExpireAt time.Time `json:"before_level_expire_at" xorm:"default 'CURRENT_TIMESTAMP' comment('更新前过期时间') TIMESTAMP"`
AfterLevelExpireAt time.Time `json:"after_level_expire_at" xorm:"default 'CURRENT_TIMESTAMP' comment('更新后过期时间') TIMESTAMP"`
Type string `json:"type" xorm:"default '' comment('类型') VARCHAR(255)"`
BeforeLevelArriveAt time.Time `json:"before_level_arrive_at" xorm:"default 'CURRENT_TIMESTAMP' comment('更新前到达该等级的时间') TIMESTAMP"`
AfterLevelArriveAt time.Time `json:"after_level_arrive_at" xorm:"default 'CURRENT_TIMESTAMP' comment('更新后到达该等级的时间') TIMESTAMP"`
}

+ 24
- 0
db/model/user_level_upgrade_task.go 查看文件

@@ -0,0 +1,24 @@
package model

import (
"time"
)

type UserLevelUpgradeTask struct {
Id int `json:"id" xorm:"not null pk autoincr comment('主键id') INT(11)"`
Pid int `json:"pid" xorm:"default 0 comment('父级任务id') INT(11)"`
SchemeId int `json:"scheme_id" xorm:"not null default 0 comment('区域代理方案id') INT(11)"`
IsMustTask int `json:"is_must_task" xorm:"not null default 0 comment('是否必做(0,1)') TINYINT(1)"`
TaskTypePvd int `json:"task_type_pvd" xorm:"not null default 0 comment('task_type=15时生效,表示店铺渠道 0 o2o+b2c 1 o2o 3b2c') INT(10)"`
TaskTypeCount int `json:"task_type_count" xorm:"not null default 0 comment('task_type=15时生效,表示店铺的数量') INT(10)"`
TaskTypeSecondCount int `json:"task_type_second_count" xorm:"not null default 0 comment('task_type=17时生效,表示每条链的数量') INT(10)"`
TaskType int `json:"task_type" xorm:"not null default 0 comment('1:累计自购订单总数,2:累计到账佣金,3:累计直推粉丝数量,4:累计团队有效直推人数,5:累计团队符合相应等级的人数,6:付费任务') TINYINT(2)"`
TaskTypeLevelId int `json:"task_type_level_id" xorm:"not null default 0 comment('task_type=5时生效,表示等级id') INT(10)"`
WithinDays int `json:"within_days" xorm:"default 0 comment('多少天内完成') INT(11)"`
FinishCount string `json:"finish_count" xorm:"not null default '' comment('多少天内完成的指标数') VARCHAR(11)"`
FinishTaskNum int `json:"finish_task_num" xorm:"comment('完成任务数量(如果是组合条件,则该数指的是完成几组)') INT(11)"`
IsUnifyAgentPrice int `json:"is_unify_agent_price" xorm:"comment('是否统一代理价格(1统一价格,2按区域设置不用价格)') TINYINT(1)"`
PayLevels string `json:"pay_levels" xorm:"not null default '' comment('表示开启1月2季3年4永久 amount 价格 ,cost_price 原价') VARCHAR(255)"`
CreateAt time.Time `json:"create_at" xorm:"not null default 'CURRENT_TIMESTAMP' comment('创建时间') TIMESTAMP"`
UpdateAt time.Time `json:"update_at" xorm:"default 'CURRENT_TIMESTAMP' comment('更新时间') TIMESTAMP"`
}

+ 0
- 1
go.mod 查看文件

@@ -5,7 +5,6 @@ go 1.15
require (
github.com/syyongx/php2go v0.9.6
go.uber.org/zap v1.13.0
golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f
gopkg.in/natefinch/lumberjack.v2 v2.0.0
xorm.io/xorm v1.3.1
)

+ 767
- 0
hdl/hdl_upgrade.go 查看文件

@@ -0,0 +1,767 @@
package zyos_go_condition_hdl

import (
"code.fnuoos.com/go_rely_warehouse/zyos_go_condition_statistics.git/db"
"code.fnuoos.com/go_rely_warehouse/zyos_go_condition_statistics.git/db/model"
"code.fnuoos.com/go_rely_warehouse/zyos_go_condition_statistics.git/md"
zhios_condition_statistics_utils "code.fnuoos.com/go_rely_warehouse/zyos_go_condition_statistics.git/utils"
"errors"
"fmt"
"time"
"xorm.io/xorm"
)

func CommUpdate(blockStarChain string, eg *xorm.Engine, dbName string, user *model.User, DataDetail md.DataDetail) error {
uid := DataDetail.Uid
//判断有没有审核通过或审核中的记录
has, err := db.UserLevelAuditingFindByUid(eg, zhios_condition_statistics_utils.StrToInt(uid))
if err != nil {
return err
}
if has != nil {
var msg = "您已审核通过,请勿重复申请"
if has.State == 1 {
msg = "正在审核中,请稍后再查看"
}
return errors.New(msg)
}
lv := user.Level
result := CommUplv(blockStarChain, eg, dbName, user, lv, DataDetail)
if result == false {
return errors.New("升级失败")
}
return nil
}
func CommUplv(blockStarChain string, eg *xorm.Engine, dbName string, user *model.User, lv int, DataDetail md.DataDetail) bool {
levelExpireAt := user.LevelExpireAt
levelArriveAt := user.LevelArriveAt
oldLevel := user.Level
uid := zhios_condition_statistics_utils.IntToStr(user.Uid)
result, _, payOrdId := IsCompleteSchemeTask(blockStarChain, eg, user, DataDetail.AgentType, DataDetail.IsChangeTime)
if result {
level, err := db.UserLevelByID(eg, zhios_condition_statistics_utils.StrToInt(DataDetail.AgentType))
if err != nil || level == nil {
return false
}
date := time.Now()
var auditData = model.UserLevelAudit{
Uid: zhios_condition_statistics_utils.StrToInt(uid),
CurrentLevelId: lv,
NextLevelId: zhios_condition_statistics_utils.StrToInt(DataDetail.AgentType),
ConditionType: 2,
AutoAudit: level.AutoAudit,
DateType: 5,
State: 1,
RelateOid: payOrdId,
CreateAt: date,
UpdateAt: date,
LevelDate: level.LevelDate,
}
has, err := db.UserLevelAuditInsertWithEngine(eg, &auditData)
if has == 0 || err != nil {
return false
}
//自动审核
if level.AutoAudit == 1 {
//写入日志
var log = &model.UserLevelChangeLog{
Uid: user.Uid,
BeforeLv: oldLevel,
AfterLv: zhios_condition_statistics_utils.StrToInt(DataDetail.AgentType),
Time: int(time.Now().Unix()),
BeforeLevelExpireAt: levelExpireAt,
AfterLevelExpireAt: user.LevelExpireAt,
BeforeLevelArriveAt: levelArriveAt,
AfterLevelArriveAt: user.LevelArriveAt,
Type: "level_up",
}
fmt.Println(log)
eg.InsertOne(log)
auditData.State = 2
//审核记录修改
if _, err := db.UserLevelAuditUpdateById(eg, auditData.Id, &auditData, "state"); err != nil {
return false
}
t := time.Now()
var expire time.Time
//订单时间修改
if payOrdId > 0 {
ord, err := db.UserLevelOrderById(eg, zhios_condition_statistics_utils.Int64ToStr(payOrdId))
if err != nil {
return false
}
//过期时间在当前时间之前 并且 创建时间跟过期时间不相等 相等的话是永久会员
if ord.ExpireAt.Unix() < t.Unix() && ord.CreateAt.Format("2006-01-02 15:04:05") != ord.ExpireAt.Format("2006-01-02 15:04:05") && ord.DateType != 4 {
return false
}
switch ord.DateType {
case 1:
// 月
expire = t.AddDate(0, 1, 0)
ord.ExpireAt = expire
case 2:
// 季
expire = t.AddDate(0, 3, 0)
ord.ExpireAt = expire
case 3:
// 年
expire = t.AddDate(1, 0, 0)
ord.ExpireAt = expire
case 4:
// 永久(设置为与创建时间相同)
ord.ExpireAt = t
}
if _, err := db.UserLevelOrdUpdateOne(eg, ord); err != nil {
return false
}
}
user.Level = zhios_condition_statistics_utils.StrToInt(DataDetail.AgentType)
user.LevelArriveAt = t
if user.FirstArriveAt.IsZero() {
user.FirstArriveAt = t
}
if payOrdId > 0 {
user.LevelExpireAt = expire
} else {
if level.LevelDate == 0 { // 永久
user.LevelExpireAt = t
} else {
user.LevelExpireAt = t.AddDate(0, level.LevelDate, 0)
}
}
//用户等级修改
// 更新user level 和 过期时间
if _, err := db.UserUpdate(eg, user.Uid, user, "level,level_expire_at,level_arrive_at,first_arrive_at"); err != nil {
return false
}

}
}
return result
}

// IsCompleteSchemeTask 根据传入的 level 判断是否可以升级
func IsCompleteSchemeTask(blockStarChain string, engine *xorm.Engine, user *model.User, level, IsChangeTime string) (bool, bool, int64) {
uid := zhios_condition_statistics_utils.IntToStr(user.Uid)
userLevel, err := db.UserLevelByID(engine, user.Level)
if err != nil {
return false, false, 0
}
becomeLevel, err := db.UserLevelByID(engine, level)
if err != nil {
return false, false, 0
}
if userLevel == nil {
if level == "" {
level = "1"
}
} else {
if becomeLevel.LevelWeight <= userLevel.LevelWeight && IsChangeTime != "1" {
return false, false, 0
}
}
//获取用户等级方案内容

schemeTasks, err := db.BatchSelectUserLevelUpgradeTasks(engine, map[string]interface{}{
"key": "scheme_id",
"value": becomeLevel.Id,
})
if err != nil {
return false, false, 0
}

return CheckSchemeTasksComplete(blockStarChain, engine, schemeTasks, uid, becomeLevel, level, "")
}

func CheckSchemeTasksComplete(blockStarChain string, engine *xorm.Engine, tasks *[]model.UserLevelUpgradeTask, uid interface{}, scheme *model.UserLevel, level string, regionalId string) (bool, bool, int64) {
//分离出 必做/选做 途径(任务组) && 分离出 必做/选做
var tasksGroup []map[string]interface{}
mustTasks := make(map[string][]interface{})
selectTasks := make(map[string][]interface{})
var (
hasLevelPay = false
LevelPayOrdId int64
)
allLvMap := db.UserLevelByAllMap(engine)
for _, item := range *tasks {
var temp = map[string]interface{}{}
temp["id"] = item.Id
temp["pid"] = item.Pid
temp["schemeId"] = item.SchemeId
temp["isMustTask"] = item.IsMustTask
temp["taskType"] = item.TaskType
temp["taskTypeLevelId"] = item.TaskTypeLevelId
temp["withinDays"] = item.WithinDays
temp["finishCount"] = item.FinishCount
temp["payLevels"] = item.PayLevels
temp["finish_task_num"] = item.FinishTaskNum

if item.Pid == 0 && item.IsMustTask == 1 {
temp["is_must"] = "1"
tasksGroup = append(tasksGroup, temp)
}
if item.Pid == 0 && item.IsMustTask != 1 {
temp["is_must"] = "0"
tasksGroup = append(tasksGroup, temp)
}

name := GetTaskName(item.TaskType)

finish, hasPay, payOrdId := GetFinishCount(blockStarChain, engine, uid, &item, level, regionalId, allLvMap)
total := "" // 总共需完成的数
if item.TaskType == 6 {
// 当是付费条件是否,total的指标只能是1
total = "1"
hasLevelPay = hasPay
LevelPayOrdId = payOrdId
} else {
total = item.FinishCount
}
temp["name"] = name
temp["total"] = total //需完成数
temp["finish"] = finish //已完成数
//fmt.Println("finish:::::::::::::", finish)
//fmt.Println("total:::::::::::::", total)
if zhios_condition_statistics_utils.AnyToFloat64(finish) >= zhios_condition_statistics_utils.AnyToFloat64(total) {
temp["result"] = "1"
} else {
temp["result"] = "0"
}
if item.Pid != 0 && item.IsMustTask == 1 {
mustTasks[zhios_condition_statistics_utils.AnyToString(item.Pid)] = append(mustTasks[zhios_condition_statistics_utils.AnyToString(item.Pid)], temp)
}
if item.Pid != 0 && item.IsMustTask == 0 {
selectTasks[zhios_condition_statistics_utils.AnyToString(item.Pid)] = append(selectTasks[zhios_condition_statistics_utils.AnyToString(item.Pid)], temp)
}
}

alreadyCompleteTasksGroup := 0 // 完成“选做途径”数量
for _, v := range tasksGroup {
fmt.Println(">>>>>>>>>>>>>>>>>>>>", v)
if v["finish_task_num"] == nil {
v["finishCount"] = 0
}

//处理必做途径
if zhios_condition_statistics_utils.AnyToString(v["isMustTask"]) == "1" {
if mustTasks[zhios_condition_statistics_utils.AnyToString(v["id"])] != nil {
needFinishTaskNum := v["finish_task_num"] // 需完成选做任务数
alreadyFinishTaskNum := 0 // 已完成选做任务数
for _, vv := range mustTasks[zhios_condition_statistics_utils.AnyToString(v["id"])] {
tmp := vv.(map[string]interface{})
// 必做任务 且 未完成
if tmp["isMustTask"] == 1 && tmp["result"] != "1" {
return false, hasLevelPay, LevelPayOrdId
}
// 非必做任务 且 已完成
if tmp["isMustTask"] != 1 && tmp["result"] == "1" {
alreadyFinishTaskNum++
}
}
// 需完成选做任务数 大于 已完成选做任务数
if zhios_condition_statistics_utils.AnyToInt64(needFinishTaskNum) > zhios_condition_statistics_utils.AnyToInt64(alreadyFinishTaskNum) {
return false, hasLevelPay, LevelPayOrdId
}
}
}
//处理选做途径
if selectTasks[zhios_condition_statistics_utils.AnyToString(v["id"])] != nil {
needFinishTaskNum := v["finish_task_num"] // 需完成选做任务数
alreadyFinishTaskNum := 0 // 已完成选做任务数
alreadyFinishMustTask := true // 是否已完成必做任务
for _, vv := range selectTasks[zhios_condition_statistics_utils.AnyToString(v["id"])] {
tmp := vv.(map[string]interface{})
// 非必做任务 且 已完成
if tmp["isMustTask"] != "1" && tmp["result"] == "1" {
alreadyFinishTaskNum++
}
// 必做任务 且 未完成
if tmp["isMustTask"] == "1" && tmp["result"] != "1" {
alreadyFinishMustTask = false
}
}

// 已完成必做任务 且 需完成选做任务数 小于等于 已完成选做任务数
if alreadyFinishMustTask && zhios_condition_statistics_utils.AnyToInt64(needFinishTaskNum) <= zhios_condition_statistics_utils.AnyToInt64(alreadyFinishTaskNum) {
alreadyCompleteTasksGroup++
}
}
}

//方案中设定的 需完成“选做途径”数 与 实际完成“选做途径”数 比较
if scheme.ChoosableNum > alreadyCompleteTasksGroup {
return false, hasLevelPay, LevelPayOrdId
}
return true, hasLevelPay, LevelPayOrdId
}

// GetTaskName is 获取任务名
func GetTaskName(id int) string {
switch id {
case 1:
return "累计自购订单总数"
case 2:
return "累计到账佣金"
case 3:
return "累计直推粉丝数量"
case 4:
return "累计团队有效直推人数"
case 5:
return "累计团队符合相应等级的人数"
case 11:
return "累计直推符合相应等级的人数"
case 6:
return "月付价格"
case 7:
return "季付价格"
case 8:
return "年付价格"
case 9:
return "永久价格"
case 10:
return "累计自购消费金额"
case 12:
return "累计团队消费金额"
case 13:
return "累计小市场团队符合等级人数"
case 15:
return "直推前N个店铺营业额"
case 17:
return "团队N条线中各有N个相应等级用户"
case 18:
return "小区累计自营消费金额"
default:
return "无效名称"
}
}

//

// GetFinishCount is 计算规定时间内完成的指标的数量
func GetFinishCount(blockStarChain string, engine *xorm.Engine, uid interface{}, task *model.UserLevelUpgradeTask, level string, regionalId string, allLvMap map[int]*model.UserLevel) (string, bool, int64) {
t := time.Now()
hasPay := false
var payOrdId int64
switch task.TaskType {
case 1:
// 累计自购数
stime := time.Date(t.Year(), t.Month(), t.Day()-task.WithinDays, t.Hour(), 0, 0, 0, t.Location()).Unix()
etime := t.Unix()
//联盟结算后的
total, err := db.OrderListCountByUIDByOrderTypeByTime(engine, uid, 0, "3,5", stime, etime)
if err != nil {
return "", hasPay, payOrdId
}
mallStime := time.Date(t.Year(), t.Month(), t.Day()-task.WithinDays, t.Hour(), 0, 0, 0, t.Location())
mallEtime := t
//确认收货的才算
mallTotal, err := db.MallOrdByTimeWithCount(engine, uid, 0, "3", mallStime.Format("2006-01-02 15:04:05"), mallEtime.Format("2006-01-02 15:04:05"))
if err != nil {
return zhios_condition_statistics_utils.Int64ToStr(total), hasPay, payOrdId
}
total += mallTotal
return zhios_condition_statistics_utils.Int64ToStr(total), hasPay, payOrdId
case 10:
// 累计自购消费金额
var total float64 = 0
var err error
if zhios_condition_statistics_utils.InArr(zhios_condition_statistics_utils.IntToStr(task.TaskTypePvd), []string{"0", "1"}) {
stime := time.Date(t.Year(), t.Month(), t.Day()-task.WithinDays, t.Hour(), 0, 0, 0, t.Location()).Unix()
etime := t.Unix()
total, err = db.OrderListPaidPriceByUIDByOrderTypeByTime(engine, uid, 0, []string{"3", "5"}, stime, etime)
if err != nil {
return "", hasPay, payOrdId
}
}
if zhios_condition_statistics_utils.InArr(zhios_condition_statistics_utils.IntToStr(task.TaskTypePvd), []string{"0", "2", "8", "9"}) {
mallStime := time.Date(t.Year(), t.Month(), t.Day()-task.WithinDays, t.Hour(), 0, 0, 0, t.Location())
mallEtime := t
orderType := 0
if zhios_condition_statistics_utils.InArr(zhios_condition_statistics_utils.IntToStr(task.TaskTypePvd), []string{"8", "9"}) {
orderType = task.TaskTypePvd
}
//确认收货的才算
mallTotal, err := db.MallOrdByTime(engine, uid, orderType, []string{"3"}, mallStime.Format("2006-01-02 15:04:05"), mallEtime.Format("2006-01-02 15:04:05"))
if err != nil {
return zhios_condition_statistics_utils.Float64ToStr(total), hasPay, payOrdId
}
total += mallTotal
}
if zhios_condition_statistics_utils.InArr(zhios_condition_statistics_utils.IntToStr(task.TaskTypePvd), []string{"0", "3"}) {
mallStime := time.Date(t.Year(), t.Month(), t.Day()-task.WithinDays, t.Hour(), 0, 0, 0, t.Location())
mallEtime := t
//确认收货的才算
o2oTotal, err := db.O2oOrdByTime(engine, uid, 0, []string{"3"}, mallStime.Format("2006-01-02 15:04:05"), mallEtime.Format("2006-01-02 15:04:05"))
if err != nil {
return zhios_condition_statistics_utils.Float64ToStr(total), hasPay, payOrdId
}
total += o2oTotal
o2oTotal1, err := db.O2oOrdPayToMerchantByTime(engine, uid, 0, []string{"1", "4"}, mallStime.Format("2006-01-02 15:04:05"), mallEtime.Format("2006-01-02 15:04:05"))
if err != nil {
return zhios_condition_statistics_utils.Float64ToStr(total), hasPay, payOrdId
}
total += o2oTotal1
}
if zhios_condition_statistics_utils.InArr(zhios_condition_statistics_utils.IntToStr(task.TaskTypePvd), []string{"0", "4"}) {
mallStime := time.Date(t.Year(), t.Month(), t.Day()-task.WithinDays, t.Hour(), 0, 0, 0, t.Location())
mallEtime := t
//确认收货的才算
b2cTotal, err := db.B2cOrdByTime(engine, uid, 0, []string{"3"}, mallStime.Format("2006-01-02 15:04:05"), mallEtime.Format("2006-01-02 15:04:05"))
if err != nil {
return zhios_condition_statistics_utils.Float64ToStr(total), hasPay, payOrdId
}
total += b2cTotal
}
return zhios_condition_statistics_utils.Float64ToStr(zhios_condition_statistics_utils.FloatFormat(total, 2)), hasPay, payOrdId

case 2:
// 累计已结算佣金
stime := time.Date(t.Year(), t.Month(), t.Day()-task.WithinDays, t.Hour(), 0, 0, 0, t.Location()).Unix()
etime := t.Unix()
// 用户分佣的订单
idAmountMap, err := db.OrderRelateListByTimeByState(engine, uid, "3,5", stime, etime)
if err != nil {
return "", hasPay, payOrdId
}
var sum float64
for _, item := range *idAmountMap {
sum += item
}
mallStime := time.Date(t.Year(), t.Month(), t.Day()-task.WithinDays, t.Hour(), 0, 0, 0, t.Location())
mallEtime := t
_, mallSum, err := db.MallOrderRelateListByTimeByState(engine, uid, 3, mallStime, mallEtime)
if err != nil {
return zhios_condition_statistics_utils.Float64ToStr(sum), hasPay, payOrdId
}
sum += mallSum
return zhios_condition_statistics_utils.Float64ToStr(sum), hasPay, payOrdId
case 3:
// 累计直推人数
stime := time.Date(t.Year(), t.Month(), t.Day()-task.WithinDays, t.Hour(), 0, 0, 0, t.Location()).Format("2006-1-02 15:04:05")
etime := t.Format("2006-1-02 15:04:05")
sqlTpl := `SELECT count(*) as count
FROM user_profile as up
LEFT JOIN user as u ON u.uid=up.uid
WHERE %s;`
condStr := fmt.Sprintf("up.parent_uid=%s AND u.create_at>'%s' AND u.create_at<'%s'", zhios_condition_statistics_utils.AnyToString(uid), stime, etime)
sql := fmt.Sprintf(sqlTpl, condStr)
results, err := db.QueryNativeString(engine, sql)
if err != nil {
return "", hasPay, payOrdId
}
count := ""
if len(results) > 0 {
count = zhios_condition_statistics_utils.AnyToString(results[0]["count"])
}
return count, hasPay, payOrdId
case 4:
// 累计团队有效直推人数
stime := time.Date(t.Year(), t.Month(), t.Day()-task.WithinDays, t.Hour(), 0, 0, 0, t.Location()).Format("2006-1-02 15:04:05")
etime := t.Format("2006-1-02 15:04:05")
sqlTpl := `SELECT count(*) as count
FROM user_profile as up
LEFT JOIN user as u ON u.uid=up.uid
WHERE %s;`
condStr := fmt.Sprintf("up.parent_uid=%s AND u.create_at>'%s' AND u.create_at<'%s' and up.is_verify=%d", zhios_condition_statistics_utils.AnyToString(uid), stime, etime, 1)
sql := fmt.Sprintf(sqlTpl, condStr)
results, err := db.QueryNativeString(engine, sql)
if err != nil {
return "", hasPay, payOrdId
}
count := ""
if len(results) > 0 {
count = zhios_condition_statistics_utils.AnyToString(results[0]["count"])
}
return count, hasPay, payOrdId
case 5:
// 累计团队符合相应等级的人数
stime := time.Date(t.Year(), t.Month(), t.Day()-task.WithinDays, t.Hour(), 0, 0, 0, t.Location()).Format("2006-1-02 15:04:05")
etime := t.Format("2006-1-02 15:04:05")
sqlTpl := `SELECT count(*) as count
FROM user_relate as ur
LEFT JOIN user as u ON u.uid=ur.uid
LEFT JOIN user_level ul on u.level=ul.id
WHERE %s;`
levelList := allLvMap[task.TaskTypeLevelId]
levelWeight := 0
if levelList != nil {
levelWeight = levelList.LevelWeight
}
condStr := fmt.Sprintf("ur.parent_uid=%s AND ul.level_weight>='%s' AND u.create_at>'%s' AND u.create_at<'%s'", zhios_condition_statistics_utils.AnyToString(uid), zhios_condition_statistics_utils.IntToStr(levelWeight), stime, etime)

if blockStarChain == "1" {
condStr = fmt.Sprintf("ur.parent_uid=%s AND ul.level_weight>='%s' AND u.level_arrive_at>'%s' AND u.level_arrive_at<'%s'", zhios_condition_statistics_utils.AnyToString(uid), zhios_condition_statistics_utils.IntToStr(levelWeight), stime, etime)
}
sql := fmt.Sprintf(sqlTpl, condStr)
fmt.Println(sql)
results, err := db.QueryNativeString(engine, sql)
if err != nil {

return "", hasPay, payOrdId
}
count := ""
if len(results) > 0 {
count = zhios_condition_statistics_utils.AnyToString(results[0]["count"])
}
return count, hasPay, payOrdId
case 11:
// 累计直推符合相应等级的人数
stime := time.Date(t.Year(), t.Month(), t.Day()-task.WithinDays, t.Hour(), 0, 0, 0, t.Location()).Format("2006-1-02 15:04:05")
etime := t.Format("2006-1-02 15:04:05")

sqlTpl := `SELECT count(*) as count
FROM user_relate as ur
LEFT JOIN user as u ON u.uid=ur.uid
LEFT JOIN user_level ul on u.level=ul.id
WHERE %s;`
levelList := allLvMap[task.TaskTypeLevelId]
levelWeight := 0
if levelList != nil {
levelWeight = levelList.LevelWeight
}
condStr := fmt.Sprintf("ur.parent_uid=%s AND ur.level=%s AND ul.level_weight>='%s' AND u.create_at>'%s' AND u.create_at<'%s'", zhios_condition_statistics_utils.AnyToString(uid), "1", zhios_condition_statistics_utils.IntToStr(levelWeight), stime, etime)

if blockStarChain == "1" {
condStr = fmt.Sprintf("ur.parent_uid=%s AND ur.level=%s AND ul.level_weight>='%s' AND u.level_arrive_at>'%s' AND u.level_arrive_at<'%s'", zhios_condition_statistics_utils.AnyToString(uid), "1", zhios_condition_statistics_utils.IntToStr(levelWeight), stime, etime)
}
sql := fmt.Sprintf(sqlTpl, condStr)
fmt.Println(sql)

results, err := db.QueryNativeString(engine, sql)
if err != nil {

return "", hasPay, payOrdId
}
count := ""
if len(results) > 0 {
count = zhios_condition_statistics_utils.AnyToString(results[0]["count"])
}
return count, hasPay, payOrdId
case 12: //累计团队消费金额
var total float64 = 0
if zhios_condition_statistics_utils.InArr(zhios_condition_statistics_utils.IntToStr(task.TaskTypePvd), []string{"0", "2", "8", "9"}) {
sqlTpl := `SELECT SUM(ol.cost_price) AS amount
FROM mall_ord_list_relate olr
JOIN mall_ord ol ON olr.oid = ol.ord_id
WHERE olr.uid = ?
AND ol.state =3 and olr.level>0 ?;
`
str := ""
if zhios_condition_statistics_utils.InArr(zhios_condition_statistics_utils.IntToStr(task.TaskTypePvd), []string{"8", "9"}) {
str += " and ol.order_type=" + zhios_condition_statistics_utils.IntToStr(task.TaskTypePvd)
}
result, err := db.QueryNativeString(engine, sqlTpl, uid, str)
if err == nil {
total += zhios_condition_statistics_utils.StrToFloat64(result[0]["amount"])
}
}
if zhios_condition_statistics_utils.InArr(zhios_condition_statistics_utils.IntToStr(task.TaskTypePvd), []string{"0", "3"}) {

o2oSqlTpl := `SELECT SUM(ol.cost_price) AS amount
FROM o2o_ord_list_relate olr
JOIN o2o_ord ol ON olr.oid = ol.ord_id
WHERE olr.uid = ?
AND ol.state =3 and olr.level>0;
`
o2oResult, err := db.QueryNativeString(engine, o2oSqlTpl, uid)
if err == nil {
total += zhios_condition_statistics_utils.StrToFloat64(o2oResult[0]["amount"])
}
}
if zhios_condition_statistics_utils.InArr(zhios_condition_statistics_utils.IntToStr(task.TaskTypePvd), []string{"0", "4"}) {

b2cSqlTpl := `SELECT SUM(ol.cost_price) AS amount
FROM b2c_ord_list_relate olr
JOIN b2c_ord ol ON olr.oid = ol.ord_id
WHERE olr.uid = ?
AND ol.state =3 and olr.level>0;
`
b2cResult, err := db.QueryNativeString(engine, b2cSqlTpl, uid)
if err == nil {
total += zhios_condition_statistics_utils.StrToFloat64(b2cResult[0]["amount"])
}
}
if zhios_condition_statistics_utils.InArr(zhios_condition_statistics_utils.IntToStr(task.TaskTypePvd), []string{"0", "1"}) {

guideSqlTpl := `SELECT SUM(ol.paid_price) AS amount
FROM ord_list_relate olr
JOIN ord_list ol ON olr.oid = ol.ord_id
WHERE olr.uid = ?
AND ol.state in(3,5) and olr.level>0;
`
guideResult, err := db.QueryNativeString(engine, guideSqlTpl, uid)
if err == nil {
total += zhios_condition_statistics_utils.StrToFloat64(guideResult[0]["amount"])
}
}
return zhios_condition_statistics_utils.Float64ToStr(zhios_condition_statistics_utils.FloatFormat(total, 2)), hasPay, payOrdId
case 13:
//小市场团队符合条件人数
smallUid := TotalSmallTeam(engine, zhios_condition_statistics_utils.AnyToString(uid))
sqlTpl := `SELECT count(*) as count
FROM user_relate as ur
LEFT JOIN user as u ON u.uid=ur.uid
WHERE %s;`
condStr := fmt.Sprintf("ur.parent_uid=%s AND u.level='%s' ", smallUid, zhios_condition_statistics_utils.IntToStr(task.TaskTypeLevelId))
sql := fmt.Sprintf(sqlTpl, condStr)
results, err := db.QueryNativeString(engine, sql)
if err != nil {

return "", hasPay, payOrdId
}
count := ""
if len(results) > 0 {
count = zhios_condition_statistics_utils.AnyToString(results[0]["count"])
}
return count, hasPay, payOrdId
case 15:
if task.TaskTypeCount == 0 {
return "0", hasPay, payOrdId
}
//stime := time.Date(t.Year(), t.Month(), t.Day()-task.WithinDays, t.Hour(), 0, 0, 0, t.Location()).Format("2006-01-02 15:04:05")
//etime := t.Format("2006-01-02 15:04:05")
if zhios_condition_statistics_utils.InArr(zhios_condition_statistics_utils.IntToStr(task.TaskTypePvd), []string{"1"}) { //o2o
sqlTpl := `SELECT os.id
FROM user_relate ur
LEFT JOIN o2o_merchant om ON ur.uid = om.uid
LEFT JOIN o2o_store os on om.id=os.store_manager
WHERE ur.parent_uid = ?
AND ur.level =1 ORDER BY ur.invite_time asc LIMIT 0,?;
`
var ids = make([]string, 0)
result, err := db.QueryNativeString(engine, sqlTpl, uid, task.TaskTypeCount)
if err == nil {
for _, v := range result {
ids = append(ids, v["id"])
}
}
if len(ids) > 0 {
sum, _ := engine.In("belong_store_id", ids).In("state", []string{"3", "4"}).Sum(&model.O2oOrd{}, "cost_price")
sum1, _ := engine.In("belong_store_id", ids).Sum(&model.O2oPayToMerchant{}, "actual_pay_amount")
return zhios_condition_statistics_utils.Float64ToStrByPrec(sum+sum1, 4), hasPay, payOrdId
}
}
if zhios_condition_statistics_utils.InArr(zhios_condition_statistics_utils.IntToStr(task.TaskTypePvd), []string{"2"}) { //b2c
sqlTpl := `SELECT os.id
FROM user_relate ur
LEFT JOIN o2o_merchant om ON ur.uid = om.uid
LEFT JOIN b2c_ord os on om.id=os.store_manager
WHERE ur.parent_uid = ?
AND ur.level =1 ORDER BY ur.invite_time asc LIMIT 0,?;
`
var ids = make([]string, 0)
result, err := db.QueryNativeString(engine, sqlTpl, uid, task.TaskTypeCount)
if err == nil {
for _, v := range result {
ids = append(ids, v["id"])
}
}
if len(ids) > 0 {
sum, _ := engine.In("belong_store_id", ids).In("state", []string{"4"}).Sum(&model.B2cOrd{}, "cost_price")
return zhios_condition_statistics_utils.Float64ToStrByPrec(sum, 4), hasPay, payOrdId
}
}
return "0", hasPay, payOrdId
case 6:
hasPay = true
//TODO::根据 RegionalAgentSchemeTask 表中的 task_id 判断是否完成付费任务
regionalAgentUserOrd, err := db.UserLevelOrderByTaskId(engine, zhios_condition_statistics_utils.AnyToString(uid), zhios_condition_statistics_utils.IntToStr(task.Id))
if err != nil {
return "", hasPay, payOrdId
}
if regionalAgentUserOrd != nil {
if regionalAgentUserOrd.ExpireAt.Unix() < t.Unix() && regionalAgentUserOrd.CreateAt.Format("2006-01-02 15:04:05") != regionalAgentUserOrd.ExpireAt.Format("2006-01-02 15:04:05") && regionalAgentUserOrd.DateType != 4 {
return "0", hasPay, payOrdId
}
payOrdId = regionalAgentUserOrd.Id
return "1", hasPay, payOrdId
} else {
return "0", hasPay, payOrdId
}

return "1", hasPay, payOrdId
case 17:
stime := time.Date(t.Year(), t.Month(), t.Day()-task.WithinDays, t.Hour(), 0, 0, 0, t.Location()).Format("2006-01-02 15:04:05")
etime := t.Format("2006-01-02 15:04:05")
// 团队N条线中各有N个相应等级用户
sqlTpl := `select ur.parent_uid,COUNT(*) as count FROM user_relate ur
LEFT JOIN user u on u.uid=ur.uid
LEFT JOIN user_level ul on u.level=ul.id
where ur.parent_uid in(SELECT uid FROM user_relate WHERE parent_uid=%s and level=1 ) and ul.level_weight>=%s and u.level_arrive_at>='%s' and u.level_arrive_at<='%s' GROUP BY ur.parent_uid;`
levelList := allLvMap[task.TaskTypeLevelId]
levelWeight := 0
if levelList != nil {
levelWeight = levelList.LevelWeight
}
sql := fmt.Sprintf(sqlTpl, zhios_condition_statistics_utils.AnyToString(uid), zhios_condition_statistics_utils.IntToStr(levelWeight), stime, etime)
results, err := db.QueryNativeString(engine, sql)
if err != nil {

return "", hasPay, payOrdId
}
sqlTpl1 := `select ur.uid FROM user_relate ur
LEFT JOIN user u on u.uid=ur.uid
LEFT JOIN user_level ul on u.level=ul.id
where ur.parent_uid=%s and ur.level=1 and ul.level_weight>=%s and u.level_arrive_at>='%s' and u.level_arrive_at<='%s' ;`
sql1 := fmt.Sprintf(sqlTpl1, zhios_condition_statistics_utils.AnyToString(uid), zhios_condition_statistics_utils.IntToStr(levelWeight), stime, etime)
results1, err1 := db.QueryNativeString(engine, sql1)
if err1 != nil {
return "", hasPay, payOrdId
}
var firstList = make(map[string]string)
if len(results1) > 0 {
for _, v := range results1 {
firstList[v["uid"]] = "1"
}
}
if len(results) > 0 {
for _, v := range results {
firstList[v["parent_uid"]] = zhios_condition_statistics_utils.IntToStr(zhios_condition_statistics_utils.StrToInt(v["count"]) + zhios_condition_statistics_utils.StrToInt(firstList[v["parent_uid"]]))
}
}
count := 0
if len(firstList) > 0 {
for _, v := range firstList {
if zhios_condition_statistics_utils.StrToInt(v) >= task.TaskTypeSecondCount && task.TaskTypeSecondCount > 0 {
count++
}
}
}
return zhios_condition_statistics_utils.IntToStr(count), hasPay, payOrdId
case 18:
stime := time.Date(t.Year(), t.Month(), t.Day()-task.WithinDays, t.Hour(), 0, 0, 0, t.Location()).Format("2006-01-02 15:04:05")
etime := t.Format("2006-01-02 15:04:05")
// 小区消费金额
sqlTpl := `SELECT SUM(molr.goods_price) as price FROM mall_ord_list_relate molr
LEFT JOIN mall_ord mo on mo.ord_id=molr.oid and mo.state in (%s)
WHERE molr.uid in(SELECT uid FROM user_relate WHERE parent_uid=%s and level=1) and mo.create_time>='%s' and mo.create_time<='%s' GROUP BY molr.uid ;`
state := "1,2,3"
if task.TaskTypePvd == 1 {
state = "2,3"
}
if task.TaskTypePvd == 2 {
state = "3"
}
sql := fmt.Sprintf(sqlTpl, state, zhios_condition_statistics_utils.AnyToString(uid), stime, etime)
results, err := db.QueryNativeString(engine, sql)
if err != nil {

return "", hasPay, payOrdId
}
var count float64 = 0
if len(results) > 0 {
var max float64 = 0
for _, v := range results {
if zhios_condition_statistics_utils.StrToFloat64(v["price"]) > max {
max = zhios_condition_statistics_utils.StrToFloat64(v["price"])
}
count += zhios_condition_statistics_utils.StrToFloat64(v["price"])
}
count -= max
}

return zhios_condition_statistics_utils.Float64ToStrByPrec(count, 2), hasPay, payOrdId
default:
return "", hasPay, payOrdId
}
}

+ 10
- 0
md/md_upgrade.go 查看文件

@@ -0,0 +1,10 @@
package md

type DataDetail struct {
//TaskIds []int `json:"task_ids" binding:"required"`
AgentType string `json:"level"`
Comment string `json:"remark"` // 备注
MasterId string `json:"master_id"`
Uid string `json:"uid"`
IsChangeTime string `json:"is_change_time"`
}

Loading…
取消
儲存