users.go 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298
  1. package models
  2. import (
  3. "eta/eta_mini_crm/utils"
  4. "fmt"
  5. "github.com/beego/beego/v2/client/orm"
  6. "strings"
  7. "time"
  8. )
  9. // Users 用户表
  10. type Users struct {
  11. UserId int `orm:"column(user_id);pk"`
  12. RealName string `description:"用户姓名"`
  13. Mobile string `description:"手机号"`
  14. AreaCode string `description:"区号"`
  15. SellerId int `description:"销售ID"`
  16. SellerName string `description:"销售名称"`
  17. SysUserId int `description:"操作人ID"`
  18. SysUserRealName string `description:"操作人姓名"`
  19. CompanyId int `description:"所属机构ID"`
  20. CompanyName string `description:"所属机构名称"`
  21. Status int `description:"用户类型:1-试用用户;2-正式用户"`
  22. AuthStatus int `description:"权限状态:0-关闭;1-开启"`
  23. IsRegistered int `description:"注册状态:0-未注册;1-已注册"`
  24. RegisterTime time.Time `description:"注册时间"`
  25. Subscribe int `description:"是否关注公众号:0-未关注;1-已关注"`
  26. LastReadTime time.Time `description:"最后一次阅读时间"`
  27. ReadTimes int `description:"阅读次数"`
  28. OpenId string `description:"open_id"`
  29. UnionId string `description:"用户统一标识"`
  30. IsDeleted int `description:"删除状态:0-正常;1-已删除"`
  31. CreateTime time.Time `description:"创建时间"`
  32. ModifyTime time.Time `description:"修改时间"`
  33. }
  34. func (m *Users) TableName() string {
  35. return "users"
  36. }
  37. type UsersCols struct {
  38. PrimaryId string
  39. RealName string
  40. Mobile string
  41. AreaCode string
  42. SellerId string
  43. SellerName string
  44. SysUserId string
  45. SysUserRealName string
  46. CompanyId string
  47. CompanyName string
  48. Status string
  49. AuthStatus string
  50. IsRegistered string
  51. RegisterTime string
  52. LastReadTime string
  53. ReadTimes string
  54. OpenId string
  55. UnionId string
  56. IsDeleted string
  57. CreateTime string
  58. ModifyTime string
  59. }
  60. func (m *Users) Cols() UsersCols {
  61. return UsersCols{
  62. PrimaryId: "user_id",
  63. RealName: "real_name",
  64. Mobile: "mobile",
  65. AreaCode: "area_code",
  66. SellerId: "seller_id",
  67. SellerName: "seller_name",
  68. SysUserId: "sys_user_id",
  69. SysUserRealName: "sys_user_real_name",
  70. CompanyId: "company_id",
  71. CompanyName: "company_name",
  72. Status: "status",
  73. AuthStatus: "auth_status",
  74. IsRegistered: "is_registered",
  75. RegisterTime: "register_time",
  76. LastReadTime: "last_read_time",
  77. ReadTimes: "read_times",
  78. OpenId: "open_id",
  79. UnionId: "union_id",
  80. IsDeleted: "is_deleted",
  81. CreateTime: "create_time",
  82. ModifyTime: "modify_time",
  83. }
  84. }
  85. func (m *Users) Create() (err error) {
  86. o := orm.NewOrm()
  87. id, err := o.Insert(m)
  88. if err != nil {
  89. return
  90. }
  91. m.UserId = int(id)
  92. return
  93. }
  94. func (m *Users) CreateMulti(items []*Users) (err error) {
  95. if len(items) == 0 {
  96. return
  97. }
  98. o := orm.NewOrm()
  99. _, err = o.InsertMulti(len(items), items)
  100. return
  101. }
  102. func (m *Users) Update(cols []string) (err error) {
  103. o := orm.NewOrm()
  104. _, err = o.Update(m, cols...)
  105. return
  106. }
  107. func (m *Users) Remove() (err error) {
  108. o := orm.NewOrm()
  109. sql := fmt.Sprintf(`UPDATE %s SET %s = %d WHERE %s = ? LIMIT 1`, m.TableName(), m.Cols().IsDeleted, RowDeleted, m.Cols().PrimaryId)
  110. _, err = o.Raw(sql, m.UserId).Exec()
  111. return
  112. }
  113. func (m *Users) MultiRemove(ids []int) (err error) {
  114. if len(ids) == 0 {
  115. return
  116. }
  117. o := orm.NewOrm()
  118. sql := fmt.Sprintf(`UPDATE %s SET %s = %d WHERE %s IN (%s)`, m.TableName(), m.Cols().IsDeleted, RowDeleted, m.Cols().PrimaryId, utils.GetOrmInReplace(len(ids)))
  119. _, err = o.Raw(sql, ids).Exec()
  120. return
  121. }
  122. func (m *Users) RemoveByCondition(condition string, pars []interface{}) (err error) {
  123. if condition == "" {
  124. return
  125. }
  126. o := orm.NewOrm()
  127. sql := fmt.Sprintf(`UPDATE %s SET %s = %d WHERE %s`, m.TableName(), m.Cols().IsDeleted, RowDeleted, condition)
  128. _, err = o.Raw(sql, pars).Exec()
  129. return
  130. }
  131. func (m *Users) GetItemById(id int) (item *Users, err error) {
  132. o := orm.NewOrm()
  133. sql := fmt.Sprintf(`SELECT * FROM %s WHERE %s = %d AND %s = ? LIMIT 1`, m.TableName(), m.Cols().IsDeleted, RowDeletedDefault, m.Cols().PrimaryId)
  134. err = o.Raw(sql, id).QueryRow(&item)
  135. return
  136. }
  137. func (m *Users) GetItemByCondition(condition string, pars []interface{}, orderRule string) (item *Users, err error) {
  138. o := orm.NewOrm()
  139. order := ``
  140. if orderRule != "" {
  141. order = ` ORDER BY ` + orderRule
  142. }
  143. sql := fmt.Sprintf(`SELECT * FROM %s WHERE %s = %d %s %s LIMIT 1`, m.TableName(), m.Cols().IsDeleted, RowDeletedDefault, condition, order)
  144. err = o.Raw(sql, pars).QueryRow(&item)
  145. return
  146. }
  147. func (m *Users) GetCountByCondition(condition string, pars []interface{}) (count int, err error) {
  148. o := orm.NewOrm()
  149. sql := fmt.Sprintf(`SELECT COUNT(1) FROM %s WHERE %s = %d %s`, m.TableName(), m.Cols().IsDeleted, RowDeletedDefault, condition)
  150. err = o.Raw(sql, pars).QueryRow(&count)
  151. return
  152. }
  153. func (m *Users) GetItemsByCondition(condition string, pars []interface{}, fieldArr []string, orderRule string) (items []*Users, err error) {
  154. o := orm.NewOrm()
  155. fields := strings.Join(fieldArr, ",")
  156. if len(fieldArr) == 0 {
  157. fields = `*`
  158. }
  159. order := fmt.Sprintf(`ORDER BY %s DESC`, m.Cols().CreateTime)
  160. if orderRule != "" {
  161. order = ` ORDER BY ` + orderRule
  162. }
  163. sql := fmt.Sprintf(`SELECT %s FROM %s WHERE %s = %d %s %s`, fields, m.TableName(), m.Cols().IsDeleted, RowDeletedDefault, condition, order)
  164. _, err = o.Raw(sql, pars).QueryRows(&items)
  165. return
  166. }
  167. func (m *Users) GetPageItemsByCondition(condition string, pars []interface{}, fieldArr []string, orderRule string, startSize, pageSize int) (items []*Users, err error) {
  168. o := orm.NewOrm()
  169. fields := strings.Join(fieldArr, ",")
  170. if len(fieldArr) == 0 {
  171. fields = `*`
  172. }
  173. order := fmt.Sprintf(`ORDER BY %s DESC`, m.Cols().CreateTime)
  174. if orderRule != "" {
  175. order = ` ORDER BY ` + orderRule
  176. }
  177. sql := fmt.Sprintf(`SELECT %s FROM %s WHERE %s = %d %s %s LIMIT ?,?`, fields, m.TableName(), m.Cols().IsDeleted, RowDeletedDefault, condition, order)
  178. _, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
  179. return
  180. }
  181. // UsersItem 用户信息
  182. type UsersItem struct {
  183. UserId int `description:"用户ID"`
  184. RealName string `description:"用户姓名"`
  185. Mobile string `description:"手机号"`
  186. MobileHidden string `description:"手机号(隐藏中间四位)"`
  187. AreaCode string `description:"区号"`
  188. SellerId int `description:"销售ID"`
  189. SellerName string `description:"销售名称"`
  190. CompanyId int `description:"所属机构ID"`
  191. CompanyName string `description:"所属机构名称"`
  192. Status int `description:"用户类型:1-试用用户;2-正式用户"`
  193. AuthStatus int `description:"权限状态:0-关闭;1-开启"`
  194. IsRegistered int `description:"注册状态:0-未注册;1-已注册"`
  195. RegisterTime string `description:"注册时间"`
  196. Subscribe int `description:"是否关注公众号:0-未关注;1-已关注"`
  197. LastReadTime string `description:"最后一次阅读时间"`
  198. ReadTimes int `description:"阅读次数"`
  199. TrialExpired bool `description:"试用到期:true-已到期"`
  200. CreateTime string `description:"创建时间"`
  201. ModifyTime string `description:"修改时间"`
  202. }
  203. func (m *Users) Format2Item() (item *UsersItem) {
  204. item = new(UsersItem)
  205. item.UserId = m.UserId
  206. item.RealName = m.RealName
  207. item.Mobile = m.Mobile
  208. item.MobileHidden = utils.HideMobileMiddle(m.Mobile)
  209. item.AreaCode = m.AreaCode
  210. item.SellerId = m.SellerId
  211. item.SellerName = m.SellerName
  212. item.CompanyId = m.CompanyId
  213. item.CompanyName = m.CompanyName
  214. item.Status = m.Status
  215. item.AuthStatus = m.AuthStatus
  216. item.IsRegistered = m.IsRegistered
  217. item.RegisterTime = utils.TimeTransferString(utils.FormatDateTime, m.RegisterTime)
  218. item.Subscribe = m.Subscribe
  219. item.LastReadTime = utils.TimeTransferString(utils.FormatDateTime, m.LastReadTime)
  220. item.ReadTimes = m.ReadTimes
  221. // 试用到期
  222. if m.Status == UserStatusTrial && !m.RegisterTime.IsZero() {
  223. expiredTime := m.RegisterTime.Add(3 * 24 * time.Hour)
  224. if expiredTime.Before(time.Now().Local()) {
  225. item.TrialExpired = true
  226. }
  227. }
  228. item.CreateTime = utils.TimeTransferString(utils.FormatDateTime, m.CreateTime)
  229. item.ModifyTime = utils.TimeTransferString(utils.FormatDateTime, m.ModifyTime)
  230. return
  231. }
  232. func (m *Users) UpdateCompanyNameById(companyId int, companyName string) (err error) {
  233. o := orm.NewOrm()
  234. sql := fmt.Sprintf(`UPDATE %s SET %s = ? WHERE %s = ?`, m.TableName(), m.Cols().CompanyName, m.Cols().CompanyId)
  235. _, err = o.Raw(sql, companyName, companyId).Exec()
  236. return
  237. }
  238. func (m *Users) GetCompanyIdsByKeywords(keywords string) (companyIds []int, err error) {
  239. o := orm.NewOrm()
  240. sql := fmt.Sprintf(`SELECT DISTINCT %s FROM %s WHERE %s = %d AND (%s LIKE ? OR %s LIKE ?) AND %s > 0`, m.Cols().CompanyId, m.TableName(), m.Cols().IsDeleted, RowDeletedDefault, m.Cols().RealName, m.Cols().Mobile, m.Cols().CompanyId)
  241. _, err = o.Raw(sql, keywords, keywords).QueryRows(&companyIds)
  242. return
  243. }
  244. func (m *Users) RemoveUsersAndUserRecord(userId int) (err error) {
  245. if userId <= 0 {
  246. err = fmt.Errorf("user id is zero")
  247. return
  248. }
  249. o := orm.NewOrm()
  250. tx, e := o.Begin()
  251. if e != nil {
  252. err = fmt.Errorf("orm begin err: %v", e)
  253. return
  254. }
  255. defer func() {
  256. if err != nil {
  257. _ = tx.Rollback()
  258. return
  259. }
  260. _ = tx.Commit()
  261. }()
  262. sql := fmt.Sprintf(`UPDATE %s SET %s = ? WHERE %s = ? LIMIT 1`, m.TableName(), m.Cols().IsDeleted, m.Cols().PrimaryId)
  263. if _, e = tx.Raw(sql, RowDeleted, userId).Exec(); e != nil {
  264. err = fmt.Errorf("delete user err: %v", e)
  265. return
  266. }
  267. // 移除微信用户的UserId关联
  268. recordOb := new(UserRecord)
  269. sql = fmt.Sprintf(`UPDATE %s SET %s = ? WHERE %s = ?`, recordOb.TableName(), recordOb.Cols().UserId, recordOb.Cols().UserId)
  270. if _, e = tx.Raw(sql, 0, userId).Exec(); e != nil {
  271. err = fmt.Errorf("delete company users err: %v", e)
  272. return
  273. }
  274. return
  275. }