UiSimpleQR 本文介绍了两个Go语言结构体UiStudentTrainFlow和UiStudentTrainFlowcancel,用于处理学生训练流转和取消的相关操作。UiStudentTrainFlow包含查询转训历史的功能,通过TrainFlowQuery结构体定义查询条件,使用TransDto存储转训状态、教练信息等数据。UiStudentTrainFlowcancel则处理取消训练流程,通过CancelDto存储取消相关信息。两个结构体都实现了分页查询功能,支持按学生ID和训练类型筛选,并默认按创建时间降序排序。
type UiStudentTrainFlow struct {
    basedto.BaseEntity `json:"-"`
    uiframe.UiSimpleQR[trainflow.TrainFlowQuery, *uitraintype.StudentTrainFlow, *trainflow.TransDto]
}
type TrainFlowQuery struct {
    basedto.BaseEntitySingle
    // 学生ID
    StudentId int64 `json:"studentId,string"`
    // 试训类型
    TrialTrainType apitype.TrainType `json:"trialTrainType"`

    User *model.User `json:"-"`
}
type StudentTrainFlowDto struct {
    // basedto.BaseEntity
    StudentTrainFlow
}
type TransDto struct {
    basedto.BaseEntity
    // 试训状态
    TrialStatus int `json:"trialStatus"`
    // 提交时间
    CommitAt time.Time `json:"commitAt"`
    // 审核时间
    ReviewAt time.Time `json:"reviewAt"`
    // 转出教练ID
    TrialCoachFrom int64 `json:"fromId,string"`
    // 转收教练ID
    TrialCoachAccept int64 `json:"toId,string"`
    // 试训类型
    TrialTrainType int `json:"trialTrainType"`
    //转出教练姓名
    FromName string `json:"fromName"`
    //转收教练姓名
    ToName string `json:"toName"`
    // 提交意见
    CommitOpinion string `json:"commitOpinion"`
    // 审核意见
    ReviewOpinion string `json:"reviewOpinion"`
}

表结构

type TrialTrain struct {
    TrialReservation
    // 转训类型(请求)
    TransOption string `json:"transOption,omitempty" gorm:"-"` //all new self
    // 转训状态
    TransStatus int32 `json:"transStatus" gorm:"column:trans_status;type:integer"`
    // 试训转出 0 未转 >0 已转
    TrialCoachFrom int64 `json:"trialCoachFrom,string" gorm:"default:0"`
    // 转出方姓名
    TrialCoachFromName string `json:"trialCoachFromName" gorm:"-"`
    // 转移接收者
    TrialCoachAccept int64 `json:"trialCoachAccept,string" gorm:"default:0"`
    // 转出接收方同意
    TrialCoachAgree bool `json:"trialCoachAgree"`

    // 试训状态    T 100 //未训  200 //已训 201 取消
    TrialStatus int32 `json:"trialStatus" gorm:"column:trial_status;type:integer"`
    // 试训状态名称
    TrialStatusName string `json:"trialStatusName" gorm:"-"`
    // 训练状态
    TrialPassed bool `json:"trialPassed" gorm:"column:trial_passed;type:boolean;default:false;not null"`
    // 通过时间
    PassedAt time.Time `json:"passedAt" gorm:"column:passed_at;type:timestamp with time zone"`
    // 是否来自转训
    FromOther bool `json:"fromOther" gorm:"column:from_other;type:boolean;default:false;"`
    // 提交时间
    SubmitAt time.Time `json:"submitAt" gorm:"column:submit_at;type:timestamp with time zone"`
    // 提交意见
    SubmitOpinion string `json:"submitOpinion" gorm:"column:submit_opinion;type:character varying;default:'';"`
    //审核时间
    ReviewAt time.Time `json:"reviewAt" gorm:"column:review_at;type:timestamp with time zone"`
    // 审核意见
    ReviewOpinion string `json:"reviewOpinion" gorm:"column:review_opinion;type:character varying;default:'';"`
    // 训练计划名称
    TrainPlanName string `json:"trainPlanName"`
    // 训练号
    TrainPlanNo string `json:"trainPlanNo"`
}

type UiStudentTrainFlow struct {
    basedto.BaseEntity `json:"-"`
    uiframe.UiSimpleQR[trainflow.TrainFlowQuery, *uitraintype.StudentTrainFlow, *trainflow.TransDto]
}

func NewUiStudentTrainFlow() *UiStudentTrainFlow {
    var req = &UiStudentTrainFlow{}

    req.InitDao()
    req.initQuery()
    return req
}

func (self *UiStudentTrainFlow) initQuery() *UiStudentTrainFlow {

    self.SetBeforeQuery(func() {
       self.BuildGeneralParams(self.PageDbRequest)
       if self.Query.StudentId > 0 {
          self.DbEq("student_id", self.Query.StudentId)
       }
       if self.Query.TrialTrainType > 0 {
          self.DbEq("trial_train_type", self.Query.TrialTrainType)
       }

       self.DbEq("flow_type", apiconst.TransTransFlowType)

    })
    return self
}
func (self *UiStudentTrainFlow) UiQueryTransFlow() *pagemodel.PageResult[*trainflow.TransDto] {
    var uiret = self.List()
    if uiret.ExistRecord() {
       for _, item := range uiret.Data {
          userservice.FindBeanUserService().CacheFillName(&item.FromName, item.TrialCoachFrom)
          userservice.FindBeanUserService().CacheFillName(&item.ToName, item.TrialCoachAccept)
       }
    }
    return uiret
}

// 查询Query
func (self *UiStudentTrainFlow) List() *pagemodel.PageResult[*trainflow.TransDto] {

    self.BuildRequest().BeforeQuery()()
    if self.OrderBys == "" {
       self.OrderByDesc("created_at")
    }
    return self.QueryModelR()

}
func (self *UiSimpleR[E, R]) QueryModelR(pagesize ...int) *pagemodel.PageResult[R] {
    var ret = self.QueryModel(pagesize...)
    return self.PageTo(ret)
}
以上查询转训历史

下面是取消的流水

package traintype

import (
    "gitea.super-study.com/ys-study/gotrain/beapi/db/apiconst"
    "gitea.super-study.com/ys-study/gotrain/beapi/db/dbentity/stuentity/uitraintype"
    "gitea.super-study.com/ys-study/gotrain/beapi/dbopc/opcdto/trainflow"
    "gitea.super-study.com/ys-study/gotrain/beapi/gotool/dbframe/uiframe"
    "gitee.com/gowebframe3/webframe.git/goconfig/base/basedto"
    "gitee.com/gowebframe3/webframe.git/goweb/pagemodel"
)

type UiStudentTrainFlowcancel struct {
    basedto.BaseEntity `json:"-"`
    uiframe.UiSimpleQR[trainflow.TrainFlowQuery, *uitraintype.StudentTrainFlow, *trainflow.CancelDto]
}

func NewUiStudentTrainFlowcancel() *UiStudentTrainFlowcancel {
    var req = &UiStudentTrainFlowcancel{}

    req.InitDao()
    req.initQuery()
    return req
}

func (self *UiStudentTrainFlowcancel) initQuery() *UiStudentTrainFlowcancel {

    self.SetBeforeQuery(func() {
       self.BuildGeneralParams(self.PageDbRequest)
       if self.Query.StudentId > 0 {
          self.DbEq("student_id", self.Query.StudentId)
       }
       if self.Query.TrialTrainType > 0 {
          self.DbEq("trial_train_type", self.Query.TrialTrainType)
       }

       self.DbIn("flow_type", apiconst.TransCancelFlowType, apiconst.TransCancelPlanType)

    })
    return self
}
func (self *UiStudentTrainFlowcancel) UiQueryCancelFlow() *pagemodel.PageResult[*trainflow.CancelDto] {

    return self.List()

}

// 查询Query
func (self *UiStudentTrainFlowcancel) List() *pagemodel.PageResult[*trainflow.CancelDto] {

    self.BuildRequest().BeforeQuery()()
    if self.OrderBys == "" {
       self.OrderByDesc("created_at")
    }
    return self.QueryModelR()

}

代码通用整洁!

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐