users.go 11 KB

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