@@ -6,6 +6,7 @@ import (
"fmt"
"strconv"
"strings"
"time"
"xorm.io/builder"
)
@@ -29,6 +30,18 @@ func (r SourceType) Name() string {
return ""
}
}
func (r SourceType) ChineseName() string {
switch r {
case SourceTypeAccomplishTask:
return "积分任务"
case SourceTypeAdminOperate:
return "管理员操作"
case SourceTypeRunCloudbrainTask:
return "运行云脑任务"
default:
return ""
}
}
type RewardType string
@@ -260,6 +273,7 @@ type RewardOperateRecordShow struct {
SourceType string
SourceTemplateId string
UserName string
UserId int64
LastOperateDate timeutil.TimeStamp
UnitPrice int64
SuccessCount int
@@ -268,6 +282,88 @@ type RewardOperateRecordShow struct {
AdminLog *RewardAdminLogShow
}
type Column struct {
Name string
Value string
}
func (r *RewardOperateRecordShow) ConvertToExcelColumn() []Column {
source := SourceType(r.SourceType).ChineseName()
action := TaskType(r.SourceTemplateId).ChineseName()
date := time.Unix(int64(r.LastOperateDate), 0).Format("2006-01-02 15:04:05")
var operator = "--"
var detail = r.Remark
if r.AdminLog != nil {
operator = r.AdminLog.CreatorName
}
result := make([]Column, 0)
if r.OperateType == string(OperateTypeIncrease) {
result = []Column{
{Name: "流水号", Value: r.SerialNo},
{Name: "用户名", Value: r.UserName},
{Name: "用户ID", Value: fmt.Sprint(r.UserId)},
{Name: "时间", Value: date},
{Name: "场景", Value: source},
{Name: "积分行为", Value: action},
{Name: "说明", Value: detail},
{Name: "操作者", Value: operator},
{Name: "数量", Value: fmt.Sprint(r.Amount)},
{Name: "积分余额", Value: fmt.Sprint(r.BalanceAfter)},
}
} else if r.OperateType == string(OperateTypeDecrease) {
var status string
switch r.Status {
case OperateStatusOperating:
status = "消耗中"
case OperateStatusSucceeded:
status = "已完成"
case OperateStatusFailed:
status = "失败"
}
var duration = "--"
var displayJobName = "--"
var aiCenter = "--"
var spec = "--"
if r.Cloudbrain != nil {
duration = r.Cloudbrain.Duration
displayJobName = r.Cloudbrain.DisplayJobName
if r.Cloudbrain.ResourceSpec != nil {
spec = "【" + r.Cloudbrain.GetChineseJobType() + "】" + "【" + r.Cloudbrain.ResourceSpec.ToShowString() + "】"
clusterName := ""
switch r.Cloudbrain.ResourceSpec.Cluster {
case "OpenI":
clusterName = "启智集群"
case "C2Net":
clusterName = "智算集群"
}
aiCenter = r.Cloudbrain.ResourceSpec.QueueCode + "(" + clusterName + "-" + r.Cloudbrain.ResourceSpec.AiCenterName + ")"
}
} else {
spec = r.Remark
}
result = []Column{
{Name: "流水号", Value: r.SerialNo},
{Name: "时间", Value: date},
{Name: "状态", Value: status},
{Name: "运行时长", Value: duration},
{Name: "用户名", Value: r.UserName},
{Name: "用户ID", Value: fmt.Sprint(r.UserId)},
{Name: "场景", Value: source},
{Name: "任务名称", Value: displayJobName},
{Name: "智算中心", Value: aiCenter},
{Name: "资源规格", Value: spec},
{Name: "操作者", Value: operator},
{Name: "资源单价", Value: fmt.Sprint(r.UnitPrice)},
{Name: "数量", Value: fmt.Sprint(r.SuccessCount)},
{Name: "总额", Value: fmt.Sprint(r.Amount)},
}
}
return result
}
func getPointOperateRecord(tl *RewardOperateRecord) (*RewardOperateRecord, error) {
has, err := x.Get(tl)
if err != nil {
@@ -443,7 +539,7 @@ func GetAdminRewardRecordShowList(opts *RewardRecordListOpts) (RewardRecordShowL
err = x.Table("reward_operate_record").Cols("reward_operate_record.source_id", "reward_operate_record.serial_no",
"reward_operate_record.status", "reward_operate_record.operate_type", "reward_operate_record.amount",
"reward_operate_record.loss_amount", "reward_operate_record.remark", "reward_operate_record.source_type", "reward_operate_record.source_template_id",
"reward_operate_record.last_operate_unix as last_operate_date", "public.user.name as user_name",
"reward_operate_record.last_operate_unix as last_operate_date", "public.user.name as user_name", "public.user.id as user_id",
"point_account_log.balance_after").
Join("LEFT", "public.user", "reward_operate_record.user_id = public.user.id").
Join("LEFT", "point_account_log", " reward_operate_record.serial_no = point_account_log.source_id").
@@ -452,7 +548,7 @@ func GetAdminRewardRecordShowList(opts *RewardRecordListOpts) (RewardRecordShowL
err = x.Table("reward_operate_record").Cols("reward_operate_record.source_id", "reward_operate_record.serial_no",
"reward_operate_record.status", "reward_operate_record.operate_type", "reward_operate_record.amount",
"reward_operate_record.loss_amount", "reward_operate_record.remark", "reward_operate_record.source_type", "reward_operate_record.source_template_id",
"reward_operate_record.last_operate_unix as last_operate_date", "public.user.name as user_name",
"reward_operate_record.last_operate_unix as last_operate_date", "public.user.name as user_name", "public.user.id as user_id",
"reward_periodic_task.amount as unit_price", "reward_periodic_task.success_count").
Join("LEFT", "public.user", "reward_operate_record.user_id = public.user.id").
Join("LEFT", "reward_periodic_task", "reward_operate_record.serial_no = reward_periodic_task.operate_serial_no").