process.go 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. package rcrt
  2. import (
  3. "hongze/hrms_api/global"
  4. "hongze/hrms_api/models/base"
  5. "time"
  6. )
  7. // 招聘流程表
  8. type Process struct {
  9. ProcessId int64 `gorm:"primaryKey;column:process_id" json:"process_id"` //流程序号
  10. CvId int64 `gorm:"column:cv_id" json:"cv_id"` //简历ID
  11. CvName string `gorm:"column:cv_name" json:"cv_name"` //求职者姓名
  12. CvUrl string `gorm:"column:cv_url" json:"cv_url"` //简历地址
  13. Status int8 `gorm:"column:status" json:"status"` //流程状态:0待一面结果、1待二面结果、2已通过;3已淘汰
  14. FirstTime time.Time `gorm:"column:first_time" json:"first_time"` //一面面试时间
  15. FirstDetail string `gorm:"column:first_detail" json:"first_detail"` //一面评分细节
  16. FirstRemark string `gorm:"column:first_remark" json:"first_remark"` //一面备注
  17. FirstAdminId uint64 `gorm:"column:first_admin_id" json:"first_admin_id"` //一面面试官账号ID
  18. FirstResultTime time.Time `gorm:"column:first_result_time" json:"first_result_time"` //一面结果确认时间
  19. FirstResult int8 `gorm:"column:first_result" json:"first_result"` //一面结果0 未处理,1通过,2淘汰
  20. FirstRecommend int8 `gorm:"column:first_recommend" json:"first_recommend"` //一面建议0 未处理,1通过,2淘汰
  21. FirstResultAdminId uint64 `gorm:"column:first_result_admin_id" json:"first_result_admin_id"` //一面确认管理员ID
  22. SecondTime time.Time `gorm:"column:second_time" json:"second_time"` //二面面试时间
  23. SecondVideoUrl string `gorm:"column:second_video_url" json:"second_video_url"` //二面视频地址
  24. SecondRemark string `gorm:"column:second_remark" json:"second_remark"` //二面备注
  25. SecondAdminId uint64 `gorm:"column:second_admin_id" json:"second_admin_id"` //二面面试官账号ID
  26. SecondResultTime time.Time `gorm:"column:second_result_time" json:"second_result_time"` //二面结果确认时间
  27. SecondResult int8 `gorm:"column:second_result" json:"second_result"` //二面结果0 未处理,1通过,2淘汰
  28. SecondRecommend int8 `gorm:"column:second_recommend" json:"second_recommend"` //二面建议0 未处理,1通过,2淘汰
  29. SecondResultAdminId uint64 `gorm:"column:second_result_admin_id" json:"second_result_admin_id"` //二面确认管理员ID
  30. HrEmailId int `gorm:"column:hr_email_id" json:"hr_email_id"` //关联的hr邮箱序号
  31. CvFileName string `gorm:"column:cv_file_name" json:"cv_file_name"` //简历文件名
  32. CvTitle string `gorm:"column:cv_title" json:"cv_title"` //简历标题
  33. ThirdResult int8 `gorm:"column:third_result" json:"third_result"` //三面结果0 未处理,1通过,2淘汰
  34. ThirdResultTime time.Time `gorm:"column:third_result_time" json:"third_result_time"` //三面结果确认时间
  35. ThirdResultAdminId uint64 `gorm:"column:third_result_admin_id" json:"third_result_admin_id"` //三面确认管理员ID
  36. PersonTest string `gorm:"column:person_test" json:"person_test"` //性格测试
  37. base.TimeBase
  38. }
  39. // TableName get sql table name.获取数据库表名
  40. func (p *Process) TableName() string {
  41. return "rcrt_process"
  42. }
  43. // Add 新增
  44. func (p *Process) Add() (err error) {
  45. err = global.DEFAULT_MYSQL.Create(p).Error
  46. return
  47. }
  48. // 修改
  49. func (p *Process) Update(updateCols []string) (err error) {
  50. err = global.DEFAULT_MYSQL.Model(p).Select(updateCols).Updates(p).Error
  51. return
  52. }
  53. // 删除
  54. func (p *Process) Delete() (err error) {
  55. err = global.DEFAULT_MYSQL.Delete(p).Error
  56. return
  57. }
  58. func (p *Process) GetProcessByProcessId(id int64) (item *Process, err error) {
  59. err = global.DEFAULT_MYSQL.Model(p).Where("process_id = ? ", id).First(&item).Error
  60. return
  61. }
  62. func (p *Process) GetProcessByCvId(id int64) (item *Process, err error) {
  63. err = global.DEFAULT_MYSQL.Model(p).Where("cv_id = ? ", id).First(&item).Error
  64. return
  65. }
  66. type ProcessListTmpItem struct {
  67. Process
  68. AdminName string `json:"admin_name"`
  69. AdminId int64 `json:"admin_id"`
  70. Position string `json:"position"`
  71. ReceiveTime time.Time `json:"receive_time"` //投递时间
  72. }
  73. type ProcessListItem struct {
  74. ProcessId int64 `json:"process_id"` //流程序号
  75. CvId int64 `json:"cv_id"` //简历ID
  76. CvName string `json:"cv_name"` //求职者姓名
  77. CvUrl string `json:"cv_url"` //简历地址
  78. Status int8 `json:"status"` //流程状态:0待一面结果、1待二面结果、2已通过;3已淘汰
  79. FirstTime string `json:"first_time"` //一面面试时间
  80. FirstDetail string `json:"first_detail"` //一面评分细节
  81. FirstRemark string `json:"first_remark"` //一面备注
  82. FirstAdminId uint64 `json:"first_admin_id"` //一面面试官账号ID
  83. FirstResultTime string `json:"first_result_time"` //一面结果确认时间
  84. FirstResult int8 `json:"first_result"` //一面结果0 未处理,1通过,2淘汰
  85. FirstRecommend int8 `json:"first_recommend"` //一面建议0 未处理,1通过,2淘汰
  86. FirstResultAdminId uint64 `json:"first_result_admin_id"` //一面确认管理员ID
  87. SecondTime string `json:"second_time"` //二面面试时间
  88. SecondVideoUrl string `json:"second_video_url"` //二面视频地址
  89. SecondRemark string `json:"second_remark"` //二面备注
  90. SecondAdminId uint64 `json:"second_admin_id"` //二面面试官账号ID
  91. SecondResultTime string `json:"second_result_time"` //二面结果确认时间
  92. SecondResult int8 `json:"second_result"` //二面结果0 未处理,1通过,2淘汰
  93. SecondRecommend int8 `json:"second_recommend"` //二面建议0 未处理,1通过,2淘汰
  94. SecondResultAdminId uint64 `json:"second_result_admin_id"` //二面确认管理员ID
  95. ThirdResult int8 `json:"third_result"` //三面结果0 未处理,1通过,2淘汰
  96. ThirdResultTime string `json:"third_result_time"` //三面结果确认时间
  97. ThirdResultAdminId uint64 `json:"third_result_admin_id"` //三面确认管理员ID
  98. PersonTest string `json:"person_test"` //性格测试
  99. HrEmailId int `json:"hr_email_id"` //关联的hr邮箱序号
  100. HrName string `json:"hr_name"`
  101. HrAdminId int64 `json:"hr_admin_id"`
  102. CvTitle string `json:"cv_title"` //简历标题
  103. CvFileName string `json:"cv_file_name"` //简历文件名
  104. CreateTime string `json:"create_time"` //创建时间
  105. ModifyTime string `json:"modify_time"` //最后更新时间
  106. }
  107. type ProcessPassListItem struct {
  108. ProcessId int64 `json:"process_id"` //流程序号
  109. CvId int64 `json:"cv_id"` //简历ID
  110. CvName string `json:"cv_name"` //求职者姓名
  111. CvUrl string `json:"cv_url"` //简历地址
  112. Position string `json:"position"` //应聘职位
  113. PassTime string `json:"pass_time"` //三面结果确认时间
  114. AdminId uint64 `json:"admin_id"` //三面确认管理员ID
  115. AdminName string `json:"admin_name"` //三面确认管理员ID
  116. CvTitle string `json:"cv_title"` //简历标题
  117. CvFileName string `json:"cv_file_name"` //简历文件名
  118. CreateTime string `json:"create_time"` //投递时间
  119. }
  120. type ProcessListReq struct {
  121. FirstTime string `json:"first_time" form:"first_time" ` //投递时间
  122. SecondTime string `json:"second_time" form:"second_time"` //投递时间
  123. Status string `json:"status" form:"status"` //流程状态:0待一面结果、1待二面结果、2已通过
  124. base.PageReq
  125. }
  126. type ProcessPassListReq struct {
  127. PassTime string `json:"pass_time" form:"pass_time"` //通过时间
  128. AdminId int `json:"admin_id" form:"admin_id"` //账号列表
  129. base.PageReq
  130. }
  131. type ProcessFirstRecommendReq struct {
  132. ProcessId int64 `json:"process_id" binding:"required,gte=1"` //流程序号
  133. FirstTime string `json:"first_time" binding:"required,datetime=2006-01-02"` //一面时间
  134. FirstDetail string `json:"first_detail" binding:"required"` //一面评分细节
  135. FirstRemark string `json:"first_remark"` //一面备注
  136. FirstRecommend int8 `json:"first_recommend" binding:"required" binding:"oneof=1 2"` //一面结果建议:1通过,2淘汰
  137. }
  138. type ProcessSecondRecommendReq struct {
  139. ProcessId int64 `json:"process_id" binding:"required,gte=1"` //流程序号
  140. SecondTime string `json:"second_time" binding:"required,datetime=2006-01-02"` //二面时间
  141. SecondVideoUrl string `json:"second_video_url" binding:"required"` //视频录像地址
  142. PersonTest string `json:"person_test" binding:"required"` //视频录像地址
  143. SecondRecommend int8 `json:"second_recommend" binding:"required" binding:"oneof=1 2"` //二面结果建议
  144. }
  145. type ProcessResultReq struct {
  146. ProcessId int64 `json:"process_id" binding:"required,gte=1"` //流程序号
  147. Status int8 `json:"status" binding:"oneof=1 2"` //筛选状态:1通过,2淘汰
  148. Stage int8 `json:"stage" binding:"oneof=0 1 2 3"` //第几轮面试的确认操作:1,2,3
  149. }
  150. type ProcessDelReq struct {
  151. ProcessId int64 `json:"process_id" binding:"required,gte=1"` //流程序号
  152. }
  153. func (p *Process) SelectPage(page base.IPage, condition string, pars []interface{}) (count int64, results []*ProcessListTmpItem, err error) {
  154. query := global.DEFAULT_MYSQL.Model(p).
  155. Table("rcrt_process as p ").
  156. Select("p.*, cv.receive_time").
  157. Joins("Left JOIN rcrt_cv cv ON cv.cv_id = p.cv_id").
  158. Where(condition, pars...)
  159. query.Count(&count)
  160. if len(page.GetOrderItemsString()) > 0 {
  161. query = query.Order(page.GetOrderItemsString())
  162. }
  163. err = query.Limit(int(page.GetPageSize())).Offset(int(page.Offset())).Find(&results).Error
  164. return
  165. }
  166. func (p *Process) PassSelectPage(page base.IPage, condition string, pars []interface{}) (count int64, results []*ProcessListTmpItem, err error) {
  167. query := global.DEFAULT_MYSQL.
  168. Table("rcrt_process as p ").
  169. Select("p.*, a.real_name as admin_name, a.admin_id as admin_id, cv.position, cv.receive_time").
  170. Joins("Left JOIN rcrt_cv cv ON cv.cv_id = p.cv_id").
  171. Joins("Left JOIN sys_admin a ON a.admin_id = p.third_result_admin_id").
  172. Where(condition, pars...)
  173. query.Count(&count)
  174. if len(page.GetOrderItemsString()) > 0 {
  175. query = query.Order(page.GetOrderItemsString())
  176. }
  177. err = query.Limit(int(page.GetPageSize())).Offset(int(page.Offset())).Find(&results).Error
  178. return
  179. }
  180. type ProcessAdminItem struct {
  181. AdminId uint64 `json:"admin_id"` //账号id
  182. RealName string `json:"real_name"` //真实姓名
  183. }
  184. func (c *Process) GetThirdAdmins() (list []*ProcessAdminItem, err error) {
  185. err = global.DEFAULT_MYSQL.Model(c).
  186. Table("rcrt_process as p ").
  187. Select("distinct a.admin_id, a.real_name").
  188. Joins("Left JOIN sys_admin a ON p.third_result_admin_id = a.admin_id").
  189. Where("a.enabled = 1").
  190. Find(&list).Error
  191. return
  192. }
  193. // ProcessResetReq 重置流程请求
  194. type ProcessResetReq struct {
  195. ProcessId int64 `json:"process_id" binding:"required,gte=1"` //流程序号
  196. Stage int8 `json:"stage" binding:"oneof=0 1 2 3"` //第几轮面试的确认操作:1,2,3
  197. }