package rcrt import ( "hongze/hrms_api/global" "hongze/hrms_api/models/base" "time" ) // 招聘流程表 type Process struct { ProcessId int64 `gorm:"primaryKey;column:process_id" json:"process_id"` //流程序号 CvId int64 `gorm:"column:cv_id" json:"cv_id"` //简历ID CvName string `gorm:"column:cv_name" json:"cv_name"` //求职者姓名 CvUrl string `gorm:"column:cv_url" json:"cv_url"` //简历地址 Status int8 `gorm:"column:status" json:"status"` //流程状态:0待一面结果、1待二面结果、2已通过;3已淘汰 FirstTime time.Time `gorm:"column:first_time" json:"first_time"` //一面面试时间 FirstDetail string `gorm:"column:first_detail" json:"first_detail"` //一面评分细节 FirstRemark string `gorm:"column:first_remark" json:"first_remark"` //一面备注 FirstAdminId uint64 `gorm:"column:first_admin_id" json:"first_admin_id"` //一面面试官账号ID FirstResultTime time.Time `gorm:"column:first_result_time" json:"first_result_time"` //一面结果确认时间 FirstResult int8 `gorm:"column:first_result" json:"first_result"` //一面结果0 未处理,1通过,2淘汰 FirstRecommend int8 `gorm:"column:first_recommend" json:"first_recommend"` //一面建议0 未处理,1通过,2淘汰 FirstResultAdminId uint64 `gorm:"column:first_result_admin_id" json:"first_result_admin_id"` //一面确认管理员ID SecondTime time.Time `gorm:"column:second_time" json:"second_time"` //二面面试时间 SecondVideoUrl string `gorm:"column:second_video_url" json:"second_video_url"` //二面视频地址 SecondRemark string `gorm:"column:second_remark" json:"second_remark"` //二面备注 SecondAdminId uint64 `gorm:"column:second_admin_id" json:"second_admin_id"` //二面面试官账号ID SecondResultTime time.Time `gorm:"column:second_result_time" json:"second_result_time"` //二面结果确认时间 SecondResult int8 `gorm:"column:second_result" json:"second_result"` //二面结果0 未处理,1通过,2淘汰 SecondRecommend int8 `gorm:"column:second_recommend" json:"second_recommend"` //二面建议0 未处理,1通过,2淘汰 SecondResultAdminId uint64 `gorm:"column:second_result_admin_id" json:"second_result_admin_id"` //二面确认管理员ID HrEmailId int `gorm:"column:hr_email_id" json:"hr_email_id"` //关联的hr邮箱序号 CvFileName string `gorm:"column:cv_file_name" json:"cv_file_name"` //简历文件名 CvTitle string `gorm:"column:cv_title" json:"cv_title"` //简历标题 ThirdResult int8 `gorm:"column:third_result" json:"third_result"` //三面结果0 未处理,1通过,2淘汰 ThirdResultTime time.Time `gorm:"column:third_result_time" json:"third_result_time"` //三面结果确认时间 ThirdResultAdminId uint64 `gorm:"column:third_result_admin_id" json:"third_result_admin_id"` //三面确认管理员ID PersonTest string `gorm:"column:person_test" json:"person_test"` //性格测试 base.TimeBase } // TableName get sql table name.获取数据库表名 func (p *Process) TableName() string { return "rcrt_process" } // Add 新增 func (p *Process) Add() (err error) { err = global.DEFAULT_MYSQL.Create(p).Error return } // 修改 func (p *Process) Update(updateCols []string) (err error) { err = global.DEFAULT_MYSQL.Model(p).Select(updateCols).Updates(p).Error return } // 删除 func (p *Process) Delete() (err error) { err = global.DEFAULT_MYSQL.Delete(p).Error return } func (p *Process) GetProcessByProcessId(id int64) (item *Process, err error) { err = global.DEFAULT_MYSQL.Model(p).Where("process_id = ? ", id).First(&item).Error return } func (p *Process) GetProcessByCvId(id int64) (item *Process, err error) { err = global.DEFAULT_MYSQL.Model(p).Where("cv_id = ? ", id).First(&item).Error return } type ProcessListTmpItem struct { Process AdminName string `json:"admin_name"` AdminId int64 `json:"admin_id"` Position string `json:"position"` ReceiveTime time.Time `json:"receive_time"` //投递时间 } type ProcessListItem struct { ProcessId int64 `json:"process_id"` //流程序号 CvId int64 `json:"cv_id"` //简历ID CvName string `json:"cv_name"` //求职者姓名 CvUrl string `json:"cv_url"` //简历地址 Status int8 `json:"status"` //流程状态:0待一面结果、1待二面结果、2已通过;3已淘汰 FirstTime string `json:"first_time"` //一面面试时间 FirstDetail string `json:"first_detail"` //一面评分细节 FirstRemark string `json:"first_remark"` //一面备注 FirstAdminId uint64 `json:"first_admin_id"` //一面面试官账号ID FirstResultTime string `json:"first_result_time"` //一面结果确认时间 FirstResult int8 `json:"first_result"` //一面结果0 未处理,1通过,2淘汰 FirstRecommend int8 `json:"first_recommend"` //一面建议0 未处理,1通过,2淘汰 FirstResultAdminId uint64 `json:"first_result_admin_id"` //一面确认管理员ID SecondTime string `json:"second_time"` //二面面试时间 SecondVideoUrl string `json:"second_video_url"` //二面视频地址 SecondRemark string `json:"second_remark"` //二面备注 SecondAdminId uint64 `json:"second_admin_id"` //二面面试官账号ID SecondResultTime string `json:"second_result_time"` //二面结果确认时间 SecondResult int8 `json:"second_result"` //二面结果0 未处理,1通过,2淘汰 SecondRecommend int8 `json:"second_recommend"` //二面建议0 未处理,1通过,2淘汰 SecondResultAdminId uint64 `json:"second_result_admin_id"` //二面确认管理员ID ThirdResult int8 `json:"third_result"` //三面结果0 未处理,1通过,2淘汰 ThirdResultTime string `json:"third_result_time"` //三面结果确认时间 ThirdResultAdminId uint64 `json:"third_result_admin_id"` //三面确认管理员ID PersonTest string `json:"person_test"` //性格测试 HrEmailId int `json:"hr_email_id"` //关联的hr邮箱序号 HrName string `json:"hr_name"` HrAdminId int64 `json:"hr_admin_id"` CvTitle string `json:"cv_title"` //简历标题 CvFileName string `json:"cv_file_name"` //简历文件名 CreateTime string `json:"create_time"` //创建时间 ModifyTime string `json:"modify_time"` //最后更新时间 } type ProcessPassListItem struct { ProcessId int64 `json:"process_id"` //流程序号 CvId int64 `json:"cv_id"` //简历ID CvName string `json:"cv_name"` //求职者姓名 CvUrl string `json:"cv_url"` //简历地址 Position string `json:"position"` //应聘职位 PassTime string `json:"pass_time"` //三面结果确认时间 AdminId uint64 `json:"admin_id"` //三面确认管理员ID AdminName string `json:"admin_name"` //三面确认管理员ID CvTitle string `json:"cv_title"` //简历标题 CvFileName string `json:"cv_file_name"` //简历文件名 CreateTime string `json:"create_time"` //投递时间 } type ProcessListReq struct { FirstTime string `json:"first_time" form:"first_time" ` //投递时间 SecondTime string `json:"second_time" form:"second_time"` //投递时间 Status string `json:"status" form:"status"` //流程状态:0待一面结果、1待二面结果、2已通过 base.PageReq } type ProcessPassListReq struct { PassTime string `json:"pass_time" form:"pass_time"` //通过时间 AdminId int `json:"admin_id" form:"admin_id"` //账号列表 base.PageReq } type ProcessFirstRecommendReq struct { ProcessId int64 `json:"process_id" binding:"required,gte=1"` //流程序号 FirstTime string `json:"first_time" binding:"required,datetime=2006-01-02"` //一面时间 FirstDetail string `json:"first_detail" binding:"required"` //一面评分细节 FirstRemark string `json:"first_remark"` //一面备注 FirstRecommend int8 `json:"first_recommend" binding:"required" binding:"oneof=1 2"` //一面结果建议:1通过,2淘汰 } type ProcessSecondRecommendReq struct { ProcessId int64 `json:"process_id" binding:"required,gte=1"` //流程序号 SecondTime string `json:"second_time" binding:"required,datetime=2006-01-02"` //二面时间 SecondVideoUrl string `json:"second_video_url" binding:"required"` //视频录像地址 PersonTest string `json:"person_test" binding:"required"` //视频录像地址 SecondRecommend int8 `json:"second_recommend" binding:"required" binding:"oneof=1 2"` //二面结果建议 } type ProcessResultReq struct { ProcessId int64 `json:"process_id" binding:"required,gte=1"` //流程序号 Status int8 `json:"status" binding:"oneof=1 2"` //筛选状态:1通过,2淘汰 Stage int8 `json:"stage" binding:"oneof=0 1 2 3"` //第几轮面试的确认操作:1,2,3 } type ProcessDelReq struct { ProcessId int64 `json:"process_id" binding:"required,gte=1"` //流程序号 } func (p *Process) SelectPage(page base.IPage, condition string, pars []interface{}) (count int64, results []*ProcessListTmpItem, err error) { query := global.DEFAULT_MYSQL.Model(p). Table("rcrt_process as p "). Select("p.*, cv.receive_time"). Joins("Left JOIN rcrt_cv cv ON cv.cv_id = p.cv_id"). Where(condition, pars...) query.Count(&count) if len(page.GetOrderItemsString()) > 0 { query = query.Order(page.GetOrderItemsString()) } err = query.Limit(int(page.GetPageSize())).Offset(int(page.Offset())).Find(&results).Error return } func (p *Process) PassSelectPage(page base.IPage, condition string, pars []interface{}) (count int64, results []*ProcessListTmpItem, err error) { query := global.DEFAULT_MYSQL. Table("rcrt_process as p "). Select("p.*, a.real_name as admin_name, a.admin_id as admin_id, cv.position, cv.receive_time"). Joins("Left JOIN rcrt_cv cv ON cv.cv_id = p.cv_id"). Joins("Left JOIN sys_admin a ON a.admin_id = p.third_result_admin_id"). Where(condition, pars...) query.Count(&count) if len(page.GetOrderItemsString()) > 0 { query = query.Order(page.GetOrderItemsString()) } err = query.Limit(int(page.GetPageSize())).Offset(int(page.Offset())).Find(&results).Error return } type ProcessAdminItem struct { AdminId uint64 `json:"admin_id"` //账号id RealName string `json:"real_name"` //真实姓名 } func (c *Process) GetThirdAdmins() (list []*ProcessAdminItem, err error) { err = global.DEFAULT_MYSQL.Model(c). Table("rcrt_process as p "). Select("distinct a.admin_id, a.real_name"). Joins("Left JOIN sys_admin a ON p.third_result_admin_id = a.admin_id"). Where("a.enabled = 1"). Find(&list).Error return } // ProcessResetReq 重置流程请求 type ProcessResetReq struct { ProcessId int64 `json:"process_id" binding:"required,gte=1"` //流程序号 Stage int8 `json:"stage" binding:"oneof=0 1 2 3"` //第几轮面试的确认操作:1,2,3 }