user.go 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620
  1. package controllers
  2. import (
  3. "eta/eta_mini_crm_ht/models"
  4. "eta/eta_mini_crm_ht/models/response"
  5. "eta/eta_mini_crm_ht/services"
  6. "eta/eta_mini_crm_ht/utils"
  7. "fmt"
  8. "github.com/rdlucklib/rdluck_tools/paging"
  9. "github.com/xuri/excelize/v2"
  10. "net/http"
  11. "net/url"
  12. "strconv"
  13. "strings"
  14. "time"
  15. )
  16. type UserController struct {
  17. BaseAuthController
  18. }
  19. var (
  20. templateCols = map[string]utils.ExcelColMapping{
  21. "A": {"手机号", "Mobile"},
  22. "B": {"最近一次阅读时间", "LastReadTime"},
  23. "C": {"累计阅读次数", "ReadCount"},
  24. "D": {"注册时间", "CreatedTime"},
  25. }
  26. )
  27. // TemplateList
  28. // @Title 临时用户列表
  29. // @Description 临时用户列表
  30. // @Param PageSize query int true "每页数据条数"
  31. // @Param CurrentIndex query int true "当前页页码,从1开始"
  32. // @Param Keyword query string false "手机号"
  33. // @Param SortParam query string false "排序字段参数,用来排序的字段, 枚举值:0:注册时间,1:阅读数,2:最近一次阅读时间"
  34. // @Param SortType query string true "如何排序,是正序还是倒序,0:倒序,1:正序"
  35. // @Success 200 {object} response.TemplateUserListResp
  36. // @router /temporary/list [get]
  37. func (this *UserController) TemplateList() {
  38. br := new(models.BaseResponse).Init()
  39. defer func() {
  40. this.Data["json"] = br
  41. this.ServeJSON()
  42. }()
  43. pageSize, _ := this.GetInt("PageSize")
  44. currentIndex, _ := this.GetInt("CurrentIndex")
  45. keyword := this.GetString("Keyword")
  46. if pageSize <= 0 {
  47. pageSize = utils.PageSize20
  48. } else if pageSize > utils.PageSize100 {
  49. pageSize = utils.PageSize100
  50. }
  51. if currentIndex <= 0 {
  52. currentIndex = 1
  53. }
  54. if pageSize <= 0 {
  55. pageSize = utils.PageSize20
  56. } else if pageSize > utils.PageSize100 {
  57. pageSize = utils.PageSize100
  58. }
  59. if currentIndex <= 0 {
  60. currentIndex = 1
  61. }
  62. startSize := utils.StartIndex(currentIndex, pageSize)
  63. sortParamInt, _ := this.GetInt("SortParam", 0)
  64. sortTypeInt, _ := this.GetInt("SortType", 0)
  65. var sortStr = ``
  66. var condition string
  67. var pars []interface{}
  68. sortParamMap := map[int]string{0: "created_time", 1: "read_count", 2: "last_read_time"}
  69. sortTypeMap := map[int]string{0: "desc", 1: "asc"}
  70. sortParam, ok := sortParamMap[sortParamInt]
  71. if !ok {
  72. br.Msg = "错误的排序字段参数"
  73. br.ErrMsg = fmt.Sprint("错误的排序字段:", sortParamInt)
  74. return
  75. }
  76. sortType, ok := sortTypeMap[sortTypeInt]
  77. if !ok {
  78. br.Msg = "错误的排序字段"
  79. br.ErrMsg = fmt.Sprint("错误的排序字段:", sortTypeInt)
  80. return
  81. }
  82. sortStr = fmt.Sprintf("%s %s,updated_time desc ", sortParam, sortType)
  83. if keyword != "" {
  84. condition += ` AND mobile LIKE ? `
  85. pars = utils.GetLikeKeywordPars(pars, keyword, 1)
  86. }
  87. resp := new(response.TemplateUserListResp)
  88. total, userList, err := models.GetPageTemplateUserList(condition, pars, sortStr, startSize, pageSize)
  89. if err != nil {
  90. br.Msg = "查询用户失败"
  91. br.Msg = "查询用户失败,系统错误,Err:" + err.Error()
  92. return
  93. }
  94. list := make([]models.TemplateUsersItem, 0)
  95. for _, v := range userList {
  96. list = append(list, v.ToItem())
  97. }
  98. page := paging.GetPaging(currentIndex, pageSize, total)
  99. resp.Paging = page
  100. resp.List = list
  101. br.Data = resp
  102. br.Ret = 200
  103. br.Success = true
  104. br.Msg = "获取成功"
  105. }
  106. // OfficialList
  107. // @Title 正式用户列表
  108. // @Description 正式用户列表
  109. // @Param PageSize query int true "每页数据条数"
  110. // @Param CurrentIndex query int true "当前页页码,从1开始"
  111. // @Param Keyword query string false "手机号"
  112. // @Param SortParam query string false "排序字段参数,用来排序的字段, 枚举值:0:注册时间,1:阅读数,2:最近一次阅读时间"
  113. // @Param SortType query string true "如何排序,是正序还是倒序,0:倒序,1:正序"
  114. // @Success 200 {object} response.TemplateUserListResp
  115. // @router /official/list [get]
  116. func (this *UserController) OfficialList() {
  117. br := new(models.BaseResponse).Init()
  118. defer func() {
  119. this.Data["json"] = br
  120. this.ServeJSON()
  121. }()
  122. pageSize, _ := this.GetInt("PageSize")
  123. currentIndex, _ := this.GetInt("CurrentIndex")
  124. keyword := this.GetString("Keyword")
  125. FollowingGzh := this.GetString("FollowingGzh")
  126. RegisterBeginDate := this.GetString("RegisterBeginDate")
  127. RegisterEndDate := this.GetString("RegisterEndDate")
  128. if pageSize <= 0 {
  129. pageSize = utils.PageSize20
  130. } else if pageSize > utils.PageSize100 {
  131. pageSize = utils.PageSize100
  132. }
  133. if currentIndex <= 0 {
  134. currentIndex = 1
  135. }
  136. if pageSize <= 0 {
  137. pageSize = utils.PageSize20
  138. } else if pageSize > utils.PageSize100 {
  139. pageSize = utils.PageSize100
  140. }
  141. if currentIndex <= 0 {
  142. currentIndex = 1
  143. }
  144. startSize := utils.StartIndex(currentIndex, pageSize)
  145. sortParamInt, _ := this.GetInt("SortParam", 0)
  146. sortTypeInt, _ := this.GetInt("SortType", 0)
  147. var sortStr = ``
  148. var condition string
  149. var pars []interface{}
  150. sortParamMap := map[int]string{0: "created_time", 1: "read_count", 2: "last_read_time"}
  151. sortTypeMap := map[int]string{0: "desc", 1: "asc"}
  152. sortParam, ok := sortParamMap[sortParamInt]
  153. if !ok {
  154. br.Msg = "错误的排序字段参数"
  155. br.ErrMsg = fmt.Sprint("错误的排序字段:", sortParamInt)
  156. return
  157. }
  158. sortType, ok := sortTypeMap[sortTypeInt]
  159. if !ok {
  160. br.Msg = "错误的排序字段"
  161. br.ErrMsg = fmt.Sprintf("错误的排序字段:%v", sortTypeInt)
  162. return
  163. }
  164. sortStr = fmt.Sprintf("%s %s,updated_time desc ", sortParam, sortType)
  165. if FollowingGzh != "" {
  166. switch FollowingGzh {
  167. case "true":
  168. condition += ` AND following_gzh=1 `
  169. case "false":
  170. condition += ` AND following_gzh=0 `
  171. default:
  172. br.Msg = "关注公众号字段非法字段"
  173. br.ErrMsg = fmt.Sprintf("错误的关注公众号字段:%s", FollowingGzh)
  174. return
  175. }
  176. }
  177. if RegisterBeginDate != "" || RegisterEndDate != "" {
  178. var beginDate, endDate time.Time
  179. var parseErr error
  180. if RegisterBeginDate != "" {
  181. beginDate, parseErr = time.Parse(time.DateOnly, RegisterBeginDate)
  182. if parseErr != nil {
  183. br.Msg = "注册时间开始字段非法字段"
  184. br.ErrMsg = fmt.Sprintf("错误的注册时间开始字段:%s", RegisterBeginDate)
  185. return
  186. }
  187. }
  188. if RegisterEndDate != "" {
  189. endDate, parseErr = time.Parse(time.DateOnly, RegisterEndDate)
  190. if parseErr != nil {
  191. br.Msg = "注册时间结束字段非法字段"
  192. br.ErrMsg = fmt.Sprintf("错误的注册时间结束字段:%s", RegisterEndDate)
  193. return
  194. }
  195. }
  196. if RegisterBeginDate != "" {
  197. if RegisterEndDate != "" {
  198. if beginDate.After(endDate) {
  199. br.Msg = "结束时间不能早于开始时间"
  200. br.ErrMsg = fmt.Sprintf("错误的注册时间结束字段:开始时间:%s,结束时间:%s", RegisterBeginDate, RegisterEndDate)
  201. return
  202. }
  203. condition += ` AND DATE_FORMAT(created_time,'%Y-%m-%d') BETWEEN ? AND ?`
  204. pars = append(pars, RegisterBeginDate, RegisterEndDate)
  205. } else {
  206. condition += ` AND DATE_FORMAT(created_time,'%Y-%m-%d') >= ?`
  207. pars = append(pars, RegisterBeginDate)
  208. }
  209. } else {
  210. condition += ` AND DATE_FORMAT(created_time,'%Y-%m-%d') <= ?`
  211. pars = append(pars, RegisterEndDate)
  212. }
  213. }
  214. if keyword != "" {
  215. condition += ` AND ( mobile LIKE ? or real_name like ?)`
  216. pars = utils.GetLikeKeywordPars(pars, keyword, 2)
  217. }
  218. resp := new(response.UserListResp)
  219. total, userList, err := models.GetPageOfficialUserList(condition, pars, sortStr, startSize, pageSize)
  220. if err != nil {
  221. br.Msg = "查询用户失败"
  222. br.Msg = "查询用户失败,系统错误,Err:" + err.Error()
  223. return
  224. }
  225. //list := make([]*models.UserView, 0)
  226. //var wg sync.WaitGroup
  227. //wg.Add(len(userList))
  228. //for _, v := range userList {
  229. // go func(v *models.User) {
  230. // defer wg.Done()
  231. // tempUser, _ := models.GetTemplateUser(v.TemplateUserId)
  232. // userView := v.FillUserInfo(tempUser)
  233. // list = append(list, &userView)
  234. // }(&v)
  235. //}
  236. //wg.Wait()
  237. page := paging.GetPaging(currentIndex, pageSize, total)
  238. resp.Paging = page
  239. resp.List = userList
  240. br.Data = resp
  241. br.Ret = 200
  242. br.Success = true
  243. br.Msg = "获取成功"
  244. }
  245. // readRecordList
  246. // @Title 用户阅读记录
  247. // @Description 用户阅读记录
  248. // @Param PageSize query int true "每页数据条数"
  249. // @Param CurrentIndex query int true "当前页页码,从1开始"
  250. // @Param ChartPermissionIds query string true "品种列表"
  251. // @Param ClassifyIds query string true "品种列表"
  252. // @Success 200 {object} models.LoginResp
  253. // @router /readRecordList [get]
  254. func (this *UserController) ReadRecordList() {
  255. br := new(models.BaseResponse).Init()
  256. defer func() {
  257. this.Data["json"] = br
  258. this.ServeJSON()
  259. }()
  260. UserId, _ := this.GetInt("UserId")
  261. pageSize, _ := this.GetInt("PageSize")
  262. currentIndex, _ := this.GetInt("CurrentIndex")
  263. permissionIds := this.GetString("PermissionIds")
  264. productType := this.GetString("ProductType")
  265. if UserId <= 0 {
  266. br.Msg = "查询用户失败,用户id不合法"
  267. return
  268. }
  269. if pageSize <= 0 {
  270. pageSize = utils.PageSize20
  271. } else if pageSize > utils.PageSize100 {
  272. pageSize = utils.PageSize100
  273. }
  274. if currentIndex <= 0 {
  275. currentIndex = 1
  276. }
  277. startSize := utils.StartIndex(currentIndex, pageSize)
  278. user, err := models.GetTemplateUser(UserId)
  279. if err != nil {
  280. if err.Error() == utils.ErrNoRow() {
  281. br.Msg = "用户不存在或已删除,请刷新页面"
  282. return
  283. }
  284. br.Msg = "查询用户失败"
  285. br.ErrMsg = "查询用户失败,系统错误,Err:" + err.Error()
  286. return
  287. }
  288. if user == nil {
  289. br.Msg = "用户不存在或已删除,请刷新页面"
  290. return
  291. }
  292. var condition string
  293. var pars []interface{}
  294. var sourceType models.SourceType
  295. if productType != "" {
  296. sourceType = transSourceType(productType)
  297. if sourceType == "" {
  298. br.Msg = "错误的产品类型"
  299. br.ErrMsg = "错误的产品类型:" + productType
  300. return
  301. }
  302. condition += `and source_type= ?`
  303. pars = append(pars, sourceType)
  304. }
  305. var permissionIdList []int
  306. if permissionIds != "" {
  307. permissionIdStrList := strings.Split(permissionIds, ",")
  308. for _, permissionIdStr := range permissionIdStrList {
  309. permissionId, parseErr := strconv.Atoi(permissionIdStr)
  310. if parseErr != nil {
  311. continue
  312. }
  313. permissionIdList = append(permissionIdList, permissionId)
  314. }
  315. }
  316. total, condition, pars, err := services.GetUserSourceClickFlowListCountByUserId(UserId, condition, pars, permissionIdList, sourceType)
  317. if err != nil {
  318. br.Msg = "查询阅读记录失败"
  319. br.ErrMsg = "查询阅读记录失败,Err:" + err.Error()
  320. return
  321. }
  322. if total <= 0 {
  323. br.Msg = "暂无数据"
  324. br.Data = new(response.UserSourceClickFlowResp)
  325. br.Success = true
  326. br.Ret = 200
  327. return
  328. }
  329. readList, err := services.GetUserSourceClickFlowListByUserId(UserId, condition, pars, startSize, pageSize)
  330. if err != nil {
  331. br.Msg = "查询阅读记录失败"
  332. br.ErrMsg = "查询阅读记录失败,系统错误,Err:" + err.Error()
  333. return
  334. }
  335. page := paging.GetPaging(currentIndex, pageSize, total)
  336. resp := new(response.UserSourceClickFlowResp)
  337. resp.Paging = page
  338. resp.List = readList
  339. br.Msg = "获取成功"
  340. br.Data = resp
  341. br.Success = true
  342. br.Ret = 200
  343. }
  344. func transSourceType(productType string) (sourceType models.SourceType) {
  345. if productType == "" {
  346. return ""
  347. }
  348. switch productType {
  349. case Report:
  350. sourceType = models.ReportSourceType
  351. return
  352. case Video:
  353. sourceType = models.VideoSourceType
  354. return
  355. case Audio:
  356. sourceType = models.AudioSourceType
  357. return
  358. default:
  359. return ""
  360. }
  361. }
  362. // ExportTemplateUsers
  363. // @Title 临时用户列表
  364. // @Description 临时用户列表
  365. // @Param PageSize query int true "每页数据条数"
  366. // @Param CurrentIndex query int true "当前页页码,从1开始"
  367. // @Param Keyword query string false "手机号"
  368. // @Param SortParam query string false "排序字段参数,用来排序的字段, 枚举值:0:注册时间,1:阅读数,2:最近一次阅读时间"
  369. // @Param SortType query string true "如何排序,是正序还是倒序,0:倒序,1:正序"
  370. // @Success 200 {object} response.TemplateUserListResp
  371. // @router /temporary/export [get]
  372. func (this *UserController) ExportTemplateUsers() {
  373. br := new(models.BaseResponse).Init()
  374. defer func() {
  375. this.Data["json"] = br
  376. this.ServeJSON()
  377. }()
  378. keyword := this.GetString("Keyword")
  379. sortParamInt, _ := this.GetInt("SortParam", 0)
  380. sortTypeInt, _ := this.GetInt("SortType", 0)
  381. var sortStr = ``
  382. var condition string
  383. var pars []interface{}
  384. sortParamMap := map[int]string{0: "created_time", 1: "read_count", 2: "last_read_time"}
  385. sortTypeMap := map[int]string{0: "desc", 1: "asc"}
  386. sortParam, ok := sortParamMap[sortParamInt]
  387. if !ok {
  388. br.Msg = "错误的排序字段参数"
  389. br.ErrMsg = fmt.Sprint("错误的排序字段:", sortParamInt)
  390. return
  391. }
  392. sortType, ok := sortTypeMap[sortTypeInt]
  393. if !ok {
  394. br.Msg = "错误的排序字段"
  395. br.ErrMsg = fmt.Sprint("错误的排序字段:", sortTypeInt)
  396. return
  397. }
  398. sortStr = fmt.Sprintf("%s %s,updated_time desc ", sortParam, sortType)
  399. if keyword != "" {
  400. condition += ` AND mobile LIKE ? `
  401. pars = utils.GetLikeKeywordPars(pars, keyword, 1)
  402. }
  403. userList, err := models.GetTemplateUserListByCondition(condition, pars, sortStr)
  404. if err != nil {
  405. br.Msg = "查询用户失败"
  406. br.Msg = "查询用户失败,系统错误,Err:" + err.Error()
  407. return
  408. }
  409. list := make([]models.TemplateUsersItem, 0)
  410. for _, v := range userList {
  411. list = append(list, v.ToItem())
  412. }
  413. year, month, day := time.Now().Date()
  414. yearStr := strconv.Itoa(year)[2:]
  415. fileName := fmt.Sprintf("临时用户表%s.%d.%d.xlsx", yearStr, month, day)
  416. file, err := utils.ExportExcel("用户列表", templateCols, models.TemplateUsersItem{}, list)
  417. _ = this.downloadExcelFile(file, fileName)
  418. br.Ret = 200
  419. br.Success = true
  420. br.Msg = "下载成功"
  421. }
  422. // encodeChineseFilename 将中文文件名编码为 ISO-8859-1
  423. func (this *UserController) downloadExcelFile(file *excelize.File, filename string) (err error) {
  424. // 对文件名进行 ISO-8859-1 编码
  425. fn := url.PathEscape(filename)
  426. if filename == fn {
  427. fn = "filename=" + fn
  428. } else {
  429. fn = "filename=" + filename + "; filename*=utf-8''" + fn
  430. }
  431. this.Ctx.ResponseWriter.Header().Set("Content-Disposition", "attachment; "+fn)
  432. this.Ctx.ResponseWriter.Header().Set("Content-Description", "File Transfer")
  433. this.Ctx.ResponseWriter.Header().Set("Content-Type", "application/octet-stream")
  434. this.Ctx.ResponseWriter.Header().Set("Content-Transfer-Encoding", "binary")
  435. this.Ctx.ResponseWriter.Header().Set("Expires", "0")
  436. this.Ctx.ResponseWriter.Header().Set("Cache-Control", "must-revalidate")
  437. this.Ctx.ResponseWriter.Header().Set("Pragma", "public")
  438. // 写入文件
  439. if err = file.Write(this.Ctx.ResponseWriter); err != nil {
  440. utils.FileLog.Error("导出excel文件失败:", err)
  441. http.Error(this.Ctx.ResponseWriter, "导出excel文件失败", http.StatusInternalServerError)
  442. }
  443. return
  444. }
  445. // ExportOfficialUsers
  446. // @Title 正式用户列表
  447. // @Description 正式用户列表
  448. // @Param PageSize query int true "每页数据条数"
  449. // @Param CurrentIndex query int true "当前页页码,从1开始"
  450. // @Param Keyword query string false "手机号"
  451. // @Param SortParam query string false "排序字段参数,用来排序的字段, 枚举值:0:注册时间,1:阅读数,2:最近一次阅读时间"
  452. // @Param SortType query string true "如何排序,是正序还是倒序,0:倒序,1:正序"
  453. // @Success 200 {object} response.TemplateUserListResp
  454. // @router /official/export [get]
  455. func (this *UserController) ExportOfficialUsers() {
  456. br := new(models.BaseResponse).Init()
  457. defer func() {
  458. this.Data["json"] = br
  459. this.ServeJSON()
  460. }()
  461. pageSize, _ := this.GetInt("PageSize")
  462. currentIndex, _ := this.GetInt("CurrentIndex")
  463. keyword := this.GetString("Keyword")
  464. FollowingGzh := this.GetString("FollowingGzh")
  465. RegisterBeginDate := this.GetString("RegisterBeginDate")
  466. RegisterEndDate := this.GetString("RegisterEndDate")
  467. if pageSize <= 0 {
  468. pageSize = utils.PageSize20
  469. } else if pageSize > utils.PageSize100 {
  470. pageSize = utils.PageSize100
  471. }
  472. if currentIndex <= 0 {
  473. currentIndex = 1
  474. }
  475. if pageSize <= 0 {
  476. pageSize = utils.PageSize20
  477. } else if pageSize > utils.PageSize100 {
  478. pageSize = utils.PageSize100
  479. }
  480. if currentIndex <= 0 {
  481. currentIndex = 1
  482. }
  483. startSize := utils.StartIndex(currentIndex, pageSize)
  484. sortParamInt, _ := this.GetInt("SortParam", 0)
  485. sortTypeInt, _ := this.GetInt("SortType", 0)
  486. var sortStr = ``
  487. var condition string
  488. var pars []interface{}
  489. sortParamMap := map[int]string{0: "created_time", 1: "read_count", 2: "last_read_time"}
  490. sortTypeMap := map[int]string{0: "desc", 1: "asc"}
  491. sortParam, ok := sortParamMap[sortParamInt]
  492. if !ok {
  493. br.Msg = "错误的排序字段参数"
  494. br.ErrMsg = fmt.Sprint("错误的排序字段:", sortParamInt)
  495. return
  496. }
  497. sortType, ok := sortTypeMap[sortTypeInt]
  498. if !ok {
  499. br.Msg = "错误的排序字段"
  500. br.ErrMsg = fmt.Sprintf("错误的排序字段:%v", sortTypeInt)
  501. return
  502. }
  503. sortStr = fmt.Sprintf("%s %s,updated_time desc ", sortParam, sortType)
  504. if FollowingGzh != "" {
  505. switch FollowingGzh {
  506. case "true":
  507. condition += ` AND following_gzh=1 `
  508. case "false":
  509. condition += ` AND following_gzh=0 `
  510. default:
  511. br.Msg = "关注公众号字段非法字段"
  512. br.ErrMsg = fmt.Sprintf("错误的关注公众号字段:%s", FollowingGzh)
  513. return
  514. }
  515. }
  516. if RegisterBeginDate != "" || RegisterEndDate != "" {
  517. var beginDate, endDate time.Time
  518. var parseErr error
  519. if RegisterBeginDate != "" {
  520. beginDate, parseErr = time.Parse(time.DateOnly, RegisterBeginDate)
  521. if parseErr != nil {
  522. br.Msg = "注册时间开始字段非法字段"
  523. br.ErrMsg = fmt.Sprintf("错误的注册时间开始字段:%s", RegisterBeginDate)
  524. return
  525. }
  526. }
  527. if RegisterEndDate != "" {
  528. endDate, parseErr = time.Parse(time.DateOnly, RegisterEndDate)
  529. if parseErr != nil {
  530. br.Msg = "注册时间结束字段非法字段"
  531. br.ErrMsg = fmt.Sprintf("错误的注册时间结束字段:%s", RegisterEndDate)
  532. return
  533. }
  534. }
  535. if RegisterBeginDate != "" {
  536. if RegisterEndDate != "" {
  537. if beginDate.After(endDate) {
  538. br.Msg = "结束时间不能早于开始时间"
  539. br.ErrMsg = fmt.Sprintf("错误的注册时间结束字段:开始时间:%s,结束时间:%s", RegisterBeginDate, RegisterEndDate)
  540. return
  541. }
  542. condition += ` AND DATE_FORMAT(created_time,'%Y-%m-%d') BETWEEN ? AND ?`
  543. pars = append(pars, RegisterBeginDate, RegisterEndDate)
  544. } else {
  545. condition += ` AND DATE_FORMAT(created_time,'%Y-%m-%d') >= ?`
  546. pars = append(pars, RegisterBeginDate)
  547. }
  548. } else {
  549. condition += ` AND DATE_FORMAT(created_time,'%Y-%m-%d') <= ?`
  550. pars = append(pars, RegisterEndDate)
  551. }
  552. }
  553. if keyword != "" {
  554. condition += ` AND ( mobile LIKE ? or real_name like ?)`
  555. pars = utils.GetLikeKeywordPars(pars, keyword, 2)
  556. }
  557. resp := new(response.UserListResp)
  558. total, userList, err := models.GetPageOfficialUserList(condition, pars, sortStr, startSize, pageSize)
  559. if err != nil {
  560. br.Msg = "查询用户失败"
  561. br.Msg = "查询用户失败,系统错误,Err:" + err.Error()
  562. return
  563. }
  564. //list := make([]*models.UserView, 0)
  565. //var wg sync.WaitGroup
  566. //wg.Add(len(userList))
  567. //for _, v := range userList {
  568. // go func(v *models.User) {
  569. // defer wg.Done()
  570. // tempUser, _ := models.GetTemplateUser(v.TemplateUserId)
  571. // userView := v.FillUserInfo(tempUser)
  572. // list = append(list, &userView)
  573. // }(&v)
  574. //}
  575. //wg.Wait()
  576. page := paging.GetPaging(currentIndex, pageSize, total)
  577. resp.Paging = page
  578. resp.List = userList
  579. br.Data = resp
  580. br.Ret = 200
  581. br.Success = true
  582. br.Msg = "获取成功"
  583. }