student_model.go 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. package model
  2. import (
  3. "database/sql"
  4. "fmt"
  5. "strings"
  6. "git.i2edu.net/i2/go-zero/core/stores/cache"
  7. "git.i2edu.net/i2/go-zero/core/stores/sqlc"
  8. "git.i2edu.net/i2/go-zero/core/stores/sqlx"
  9. "git.i2edu.net/i2/go-zero/core/stringx"
  10. "git.i2edu.net/i2/go-zero/tools/goctl/model/sql/builderx"
  11. )
  12. var (
  13. studentFieldNames = builderx.RawFieldNames(&Student{})
  14. studentRows = strings.Join(studentFieldNames, ",")
  15. studentRowsExpectAutoSet = strings.Join(stringx.Remove(studentFieldNames, "`create_time`", "`update_time`"), ",")
  16. studentRowsWithPlaceHolder = strings.Join(stringx.Remove(studentFieldNames, "`id`", "`create_time`", "`update_time`"), "=?,") + "=?"
  17. cacheStudentIdPrefix = "cache#student#id#"
  18. )
  19. type (
  20. StudentModel interface {
  21. Insert(data Student) (sql.Result, error)
  22. FindOne(id int64) (*Student, error)
  23. Update(data Student) error
  24. Delete(id int64) error
  25. }
  26. defaultStudentModel struct {
  27. sqlc.CachedConn
  28. table string
  29. }
  30. Student struct {
  31. StuSex sql.NullInt64 `db:"stu_sex"` // 性别(数据字典)
  32. DelFlag int64 `db:"del_flag"`
  33. Wechatid sql.NullString `db:"wechatid"` // 微信ID
  34. StuWxdqDate sql.NullTime `db:"stu_wxdq_date"`
  35. RecipientInfo sql.NullInt64 `db:"recipient_info"`
  36. DegreeDepositMoney sql.NullFloat64 `db:"degree_deposit_money"` // 学位订金
  37. AgreementId sql.NullInt64 `db:"agreement_id"`
  38. StuBir sql.NullTime `db:"stu_bir"` // 学员出生日
  39. Remark sql.NullString `db:"remark"`
  40. Plfpbz sql.NullString `db:"plfpbz"`
  41. StuZcMoney sql.NullFloat64 `db:"stu_zc_money"` // 暂存总金额
  42. NewAllotDate sql.NullTime `db:"new_allot_date"`
  43. SchId sql.NullInt64 `db:"sch_id"` // 资源跟进校区ID
  44. AttendSchool sql.NullString `db:"attend_school"` // 就读学校
  45. NetworkDetail sql.NullInt64 `db:"network_detail"` // 渠道细分(NETWORK_DETAIL表)
  46. StuLevel sql.NullInt64 `db:"stu_level"`
  47. OrtherCard sql.NullString `db:"orther_card"` // 其他证件号码
  48. KaoqinTime sql.NullTime `db:"kaoqin_time"`
  49. CreateTime sql.NullTime `db:"create_time"`
  50. Age sql.NullInt64 `db:"age"` // 年龄
  51. Relation2 sql.NullInt64 `db:"relation2"` // 联系人2关系(数据字典)
  52. HeadImage sql.NullInt64 `db:"head_image"`
  53. StuWxksDate sql.NullTime `db:"stu_wxks_date"` // 无效到期日期
  54. OsName sql.NullString `db:"os_name"` // 资源收集校区
  55. TmkCity sql.NullInt64 `db:"tmk_city"`
  56. StuLinkPerson sql.NullString `db:"stu_link_person"` // 联系人1
  57. StudentCustomerId sql.NullString `db:"student_customer_id"` // 跟进客服(新增字段)
  58. IsChildOfEmployee sql.NullInt64 `db:"is_child_of_employee"`
  59. StuFollowUpMonthly sql.NullInt64 `db:"stu_follow_up_monthly"` // 新生跟进月状态(数据字典)
  60. StuJifen sql.NullFloat64 `db:"stu_jifen"` // 学员积分
  61. EmployeeReferralArea sql.NullString `db:"employee_referral_area"`
  62. UselessRemark sql.NullString `db:"useless_remark"`
  63. Id int64 `db:"id"`
  64. LastUpdateBy sql.NullString `db:"last_update_by"`
  65. StuDjMoney sql.NullFloat64 `db:"stu_dj_money"` // 定金金额
  66. AgeGroup sql.NullInt64 `db:"age_group"` // 年龄段(数据字典)
  67. EmployeeReferralDepart sql.NullString `db:"employee_referral_depart"`
  68. StuLoadSchool sql.NullInt64 `db:"stu_load_school"` // 资源收集校区
  69. Stuschcount sql.NullFloat64 `db:"stuschcount"`
  70. StuMydTypeMark sql.NullString `db:"stu_myd_type_mark"`
  71. StuRemark sql.NullString `db:"stu_remark"`
  72. TurnUserType sql.NullString `db:"turn_user_type"`
  73. CrmId sql.NullInt64 `db:"crm_id"`
  74. Relation1 sql.NullInt64 `db:"relation1"` // 联系人1关系(数据字典)
  75. LoadUser sql.NullString `db:"load_user"` // 资源收集人
  76. TjUser sql.NullString `db:"tj_user"` // 员工推荐人
  77. UserLoginState sql.NullInt64 `db:"user_login_state"`
  78. StuParentId sql.NullInt64 `db:"stu_parent_id"`
  79. QuaoYji sql.NullInt64 `db:"quao_yji"` // 渠道一级
  80. Idcard sql.NullString `db:"idcard"` // 身份证号码
  81. StuName sql.NullString `db:"stu_name"` // 学员姓名
  82. LastUpdateTime sql.NullTime `db:"last_update_time"`
  83. StuEnName sql.NullString `db:"stu_en_name"` // 学员英文
  84. PkCurrentPay sql.NullInt64 `db:"pk_current_pay"`
  85. StuSale sql.NullString `db:"stu_sale"` // 销售
  86. StuCityId sql.NullInt64 `db:"stu_city_id"` // 资源收集城市ID
  87. IsImportant sql.NullInt64 `db:"is_important"` // 是否重点(0否,1是)
  88. StuNowJc sql.NullInt64 `db:"stu_now_jc"`
  89. StuAddress sql.NullString `db:"stu_address"` // 家庭住址
  90. ParentsProfession sql.NullString `db:"parents_profession"`
  91. MaTypeRemark sql.NullString `db:"ma_type_remark"` // 来源备注
  92. KhType sql.NullInt64 `db:"kh_type"` // 客户类型(数据字典)
  93. PtuserId sql.NullInt64 `db:"ptuser_id"` // 兼职人员ID
  94. NewPlanDate sql.NullTime `db:"new_plan_date"` // 计划回访日期
  95. MaType sql.NullInt64 `db:"ma_type"` // 来源渠道(活动渠道数据字典)
  96. StuLinkPerson2 sql.NullString `db:"stu_link_person2"` // 联系人2
  97. StuInvalidDate sql.NullTime `db:"stu_invalid_date"`
  98. StuCity sql.NullString `db:"stu_city"` // 资源收集城市
  99. StuMydType sql.NullString `db:"stu_myd_type"`
  100. StuType sql.NullInt64 `db:"stu_type"` // 学员类型(数据字典)
  101. StuPhone2 sql.NullString `db:"stu_phone2"` // 联系人2电话
  102. TimerVisitTime sql.NullTime `db:"timer_visit_time"` // 定时回访日期
  103. StuAllotTmkdate sql.NullTime `db:"stu_allot_tmkdate"`
  104. TmkZxsUsername sql.NullString `db:"tmk_zxs_username"`
  105. IdcardType sql.NullInt64 `db:"idcard_type"` // 证件号类型
  106. RecommendStu sql.NullInt64 `db:"recommend_stu"` // 推荐学生ID
  107. StuSysState sql.NullInt64 `db:"stu_sys_state"` // 学员系统状态(数据字典)
  108. CreateBy sql.NullString `db:"create_by"` // 资源录入人ID
  109. CallType sql.NullInt64 `db:"call_type"` // 咨询类型(数据字典)
  110. NewVisitDate sql.NullTime `db:"new_visit_date"` // 最近回访时间
  111. ZzxsDate sql.NullTime `db:"zzxs_date"`
  112. HfCs sql.NullFloat64 `db:"hf_cs"` // 回访次数
  113. TmkZxsDate sql.NullTime `db:"tmk_zxs_date"`
  114. StuPhone sql.NullString `db:"stu_phone"` // 联系人1电话
  115. BaobanTime sql.NullTime `db:"baoban_time"`
  116. }
  117. )
  118. func NewStudentModel(conn sqlx.SqlConn, c cache.CacheConf) StudentModel {
  119. return &defaultStudentModel{
  120. CachedConn: sqlc.NewConn(conn, c),
  121. table: "`student`",
  122. }
  123. }
  124. func (m *defaultStudentModel) Insert(data Student) (sql.Result, error) {
  125. query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", m.table, studentRowsExpectAutoSet)
  126. ret, err := m.ExecNoCache(query, data.StuSex, data.DelFlag, data.Wechatid, data.StuWxdqDate, data.RecipientInfo, data.DegreeDepositMoney, data.AgreementId, data.StuBir, data.Remark, data.Plfpbz, data.StuZcMoney, data.NewAllotDate, data.SchId, data.AttendSchool, data.NetworkDetail, data.StuLevel, data.OrtherCard, data.KaoqinTime, data.Age, data.Relation2, data.HeadImage, data.StuWxksDate, data.OsName, data.TmkCity, data.StuLinkPerson, data.StudentCustomerId, data.IsChildOfEmployee, data.StuFollowUpMonthly, data.StuJifen, data.EmployeeReferralArea, data.UselessRemark, data.Id, data.LastUpdateBy, data.StuDjMoney, data.AgeGroup, data.EmployeeReferralDepart, data.StuLoadSchool, data.Stuschcount, data.StuMydTypeMark, data.StuRemark, data.TurnUserType, data.CrmId, data.Relation1, data.LoadUser, data.TjUser, data.UserLoginState, data.StuParentId, data.QuaoYji, data.Idcard, data.StuName, data.LastUpdateTime, data.StuEnName, data.PkCurrentPay, data.StuSale, data.StuCityId, data.IsImportant, data.StuNowJc, data.StuAddress, data.ParentsProfession, data.MaTypeRemark, data.KhType, data.PtuserId, data.NewPlanDate, data.MaType, data.StuLinkPerson2, data.StuInvalidDate, data.StuCity, data.StuMydType, data.StuType, data.StuPhone2, data.TimerVisitTime, data.StuAllotTmkdate, data.TmkZxsUsername, data.IdcardType, data.RecommendStu, data.StuSysState, data.CreateBy, data.CallType, data.NewVisitDate, data.ZzxsDate, data.HfCs, data.TmkZxsDate, data.StuPhone, data.BaobanTime)
  127. return ret, err
  128. }
  129. func (m *defaultStudentModel) FindOne(id int64) (*Student, error) {
  130. studentIdKey := fmt.Sprintf("%s%v", cacheStudentIdPrefix, id)
  131. var resp Student
  132. err := m.QueryRow(&resp, studentIdKey, func(conn sqlx.SqlConn, v interface{}) error {
  133. query := fmt.Sprintf("select %s from %s where `id` = ? limit 1", studentRows, m.table)
  134. return conn.QueryRow(v, query, id)
  135. })
  136. switch err {
  137. case nil:
  138. return &resp, nil
  139. case sqlc.ErrNotFound:
  140. return nil, ErrNotFound
  141. default:
  142. return nil, err
  143. }
  144. }
  145. func (m *defaultStudentModel) Update(data Student) error {
  146. studentIdKey := fmt.Sprintf("%s%v", cacheStudentIdPrefix, data.Id)
  147. _, err := m.Exec(func(conn sqlx.SqlConn) (result sql.Result, err error) {
  148. query := fmt.Sprintf("update %s set %s where `id` = ?", m.table, studentRowsWithPlaceHolder)
  149. return conn.Exec(query, data.StuSex, data.DelFlag, data.Wechatid, data.StuWxdqDate, data.RecipientInfo, data.DegreeDepositMoney, data.AgreementId, data.StuBir, data.Remark, data.Plfpbz, data.StuZcMoney, data.NewAllotDate, data.SchId, data.AttendSchool, data.NetworkDetail, data.StuLevel, data.OrtherCard, data.KaoqinTime, data.Age, data.Relation2, data.HeadImage, data.StuWxksDate, data.OsName, data.TmkCity, data.StuLinkPerson, data.StudentCustomerId, data.IsChildOfEmployee, data.StuFollowUpMonthly, data.StuJifen, data.EmployeeReferralArea, data.UselessRemark, data.LastUpdateBy, data.StuDjMoney, data.AgeGroup, data.EmployeeReferralDepart, data.StuLoadSchool, data.Stuschcount, data.StuMydTypeMark, data.StuRemark, data.TurnUserType, data.CrmId, data.Relation1, data.LoadUser, data.TjUser, data.UserLoginState, data.StuParentId, data.QuaoYji, data.Idcard, data.StuName, data.LastUpdateTime, data.StuEnName, data.PkCurrentPay, data.StuSale, data.StuCityId, data.IsImportant, data.StuNowJc, data.StuAddress, data.ParentsProfession, data.MaTypeRemark, data.KhType, data.PtuserId, data.NewPlanDate, data.MaType, data.StuLinkPerson2, data.StuInvalidDate, data.StuCity, data.StuMydType, data.StuType, data.StuPhone2, data.TimerVisitTime, data.StuAllotTmkdate, data.TmkZxsUsername, data.IdcardType, data.RecommendStu, data.StuSysState, data.CreateBy, data.CallType, data.NewVisitDate, data.ZzxsDate, data.HfCs, data.TmkZxsDate, data.StuPhone, data.BaobanTime, data.Id)
  150. }, studentIdKey)
  151. return err
  152. }
  153. func (m *defaultStudentModel) Delete(id int64) error {
  154. studentIdKey := fmt.Sprintf("%s%v", cacheStudentIdPrefix, id)
  155. _, err := m.Exec(func(conn sqlx.SqlConn) (result sql.Result, err error) {
  156. query := fmt.Sprintf("delete from %s where `id` = ?", m.table)
  157. return conn.Exec(query, id)
  158. }, studentIdKey)
  159. return err
  160. }
  161. func (m *defaultStudentModel) formatPrimary(primary interface{}) string {
  162. return fmt.Sprintf("%s%v", cacheStudentIdPrefix, primary)
  163. }
  164. func (m *defaultStudentModel) queryPrimary(conn sqlx.SqlConn, v, primary interface{}) error {
  165. query := fmt.Sprintf("select %s from %s where `id` = ? limit 1", studentRows, m.table)
  166. return conn.QueryRow(v, query, primary)
  167. }