user.go 37 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310
  1. package controllers
  2. import (
  3. "encoding/json"
  4. "eta/eta_mini_crm/models"
  5. "eta/eta_mini_crm/models/request"
  6. "eta/eta_mini_crm/models/response"
  7. "eta/eta_mini_crm/services"
  8. "eta/eta_mini_crm/utils"
  9. "math"
  10. "os"
  11. "path/filepath"
  12. "strings"
  13. "time"
  14. "github.com/beego/beego/v2/client/orm"
  15. "github.com/rdlucklib/rdluck_tools/paging"
  16. "github.com/tealeg/xlsx"
  17. )
  18. type UserController struct {
  19. BaseAuthController
  20. }
  21. // Add
  22. // @Title 添加新客户
  23. // @Description 添加新客户
  24. // @Param request body request.UserAddReq true "type json string"
  25. // @Success 200 {object} request.UserAddReq
  26. // @router /add [post]
  27. func (this *UserController) Add() {
  28. br := new(models.BaseResponse).Init()
  29. defer func() {
  30. this.Data["json"] = br
  31. this.ServeJSON()
  32. }()
  33. var req request.UserAddReq
  34. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  35. if err != nil {
  36. br.Msg = "参数解析异常!"
  37. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  38. return
  39. }
  40. if req.RealName == "" {
  41. br.Msg = "请输入姓名"
  42. return
  43. }
  44. req.Phone = strings.TrimSpace(req.Phone)
  45. req.Email = strings.TrimSpace(req.Email)
  46. if req.Phone == "" && req.Email == "" {
  47. br.Msg = "至少输入一个手机号或邮箱"
  48. return
  49. }
  50. var userByPhone, userByEmail *models.User
  51. if req.Phone != "" {
  52. if req.AreaCode == "86" {
  53. if !utils.ValidateMobileFormatat(req.Phone) {
  54. br.Msg = "手机号格式有误, 请检查"
  55. return
  56. }
  57. }
  58. userByPhone, err = models.GetUserByPhone(req.Phone, req.AreaCode)
  59. if err != nil && err != orm.ErrNoRows {
  60. br.Msg = "添加用户失败"
  61. br.ErrMsg = "查询用户失败,系统错误,Err:" + err.Error()
  62. return
  63. }
  64. if userByPhone != nil {
  65. switch userByPhone.Status {
  66. case 0:
  67. userByPhone.Status = 2
  68. case 1:
  69. userByPhone.Status = 2
  70. default:
  71. br.Msg = "手机号已存在,请重新输入"
  72. return
  73. }
  74. }
  75. }
  76. if req.Email != "" {
  77. if !utils.ValidateEmailFormatat(req.Email) {
  78. br.Msg = "邮箱格式有误, 请检查"
  79. return
  80. }
  81. userByEmail, err = models.GetUserByEmail(req.Email)
  82. if err != nil && err != orm.ErrNoRows {
  83. br.Msg = "添加用户失败"
  84. br.ErrMsg = "查询用户失败,系统错误,Err:" + err.Error()
  85. return
  86. }
  87. if userByEmail != nil {
  88. switch userByEmail.Status {
  89. case 0:
  90. userByEmail.Status = 2
  91. case 1:
  92. userByEmail.Status = 2
  93. default:
  94. br.Msg = "邮箱已存在,请重新输入"
  95. return
  96. }
  97. }
  98. }
  99. if req.SellerDepartmentId <= 0 {
  100. br.Msg = "请选择营业部"
  101. return
  102. }
  103. if req.ValidStartTime == "" || req.ValidEndTime == "" {
  104. br.Msg = "请选择合理的有效期范围"
  105. return
  106. }
  107. validStartTime, err := time.Parse(utils.FormatDate, req.ValidStartTime)
  108. if err != nil {
  109. br.Msg = "错误的日期格式"
  110. return
  111. }
  112. validEndTime, err := time.Parse(utils.FormatDate, req.ValidEndTime)
  113. if err != nil {
  114. br.Msg = "错误的日期格式"
  115. return
  116. }
  117. if !validStartTime.Before(validEndTime) {
  118. br.Msg = "请选择合理的有效期范围"
  119. return
  120. }
  121. if req.Company == "" {
  122. br.Msg = "请输入所属公司"
  123. return
  124. }
  125. if userByPhone != nil && userByEmail != nil && userByPhone.UserId != userByEmail.UserId {
  126. br.Msg = "邮箱已存在,请重新输入"
  127. return
  128. }
  129. user := &models.User{}
  130. curTime := time.Now()
  131. if userByPhone == nil && userByEmail == nil {
  132. user.CreateTime = curTime
  133. user.ModifyTime = curTime
  134. }
  135. if userByEmail != nil {
  136. user = userByEmail
  137. }
  138. if userByPhone != nil {
  139. user = userByPhone
  140. }
  141. validStartTime = validStartTime.Local().Add(-time.Hour * 8)
  142. validEndTime = validEndTime.Local().Add(-time.Hour*8 + time.Hour*24 - time.Second)
  143. if curTime.Before(validEndTime) {
  144. user.Status = 2
  145. } else {
  146. br.Msg = "有效期截至时间必须大于当前时间"
  147. return
  148. }
  149. sysDepartment, err := models.GetSysDepartmentById(req.SellerDepartmentId)
  150. if err != nil {
  151. br.Msg = "添加用户失败"
  152. br.ErrMsg = "查询营业部失败,系统错误,Err:" + err.Error()
  153. return
  154. }
  155. user.RealName = req.RealName
  156. user.AreaCode = req.AreaCode
  157. user.Phone = req.Phone
  158. user.Email = req.Email
  159. user.SellerDepartmentId = req.SellerDepartmentId
  160. user.SellerDepartmentName = sysDepartment.SysDepartmentName
  161. user.ValidStartTime = validStartTime
  162. user.ValidEndTime = validEndTime
  163. user.Company = req.Company
  164. user.ModifyTime = curTime
  165. err = models.SaveUser(user, req.ChartPermission)
  166. if err != nil {
  167. br.Msg = "添加客户失败"
  168. br.ErrMsg = "添加客户失败,系统错误,Err:" + err.Error()
  169. return
  170. }
  171. if user.Status == 2 {
  172. userRecord := &models.UserChangeRecord{}
  173. userRecord.UserId = user.UserId
  174. userRecord.SysUserId = this.SysUser.SysUserId
  175. userRecord.Content = this.SysUser.SysRealName + "新增用户"
  176. userRecord.Insert()
  177. }
  178. br.Msg = "添加成功"
  179. br.Success = true
  180. br.Ret = 200
  181. }
  182. // edit
  183. // @Title 编辑客户
  184. // @Description 编辑客户
  185. // @Param request body request.UserEidtReq true "type json string"
  186. // @Success 200 {object} request.UserAddReq
  187. // @router /edit [post]
  188. func (this *UserController) Edit() {
  189. br := new(models.BaseResponse).Init()
  190. defer func() {
  191. this.Data["json"] = br
  192. this.ServeJSON()
  193. }()
  194. var req request.UserEditReq
  195. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  196. if err != nil {
  197. br.Msg = "参数解析异常!"
  198. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  199. return
  200. }
  201. if req.RealName == "" {
  202. br.Msg = "请输入姓名"
  203. return
  204. }
  205. req.Phone = strings.TrimSpace(req.Phone)
  206. req.Email = strings.TrimSpace(req.Email)
  207. if req.Phone == "" && req.Email == "" {
  208. br.Msg = "至少输入一个手机号或邮箱"
  209. return
  210. }
  211. if req.Phone != "" {
  212. if req.AreaCode == "86" {
  213. if !utils.ValidateMobileFormatat(req.Phone) {
  214. br.Msg = "手机号格式有误, 请检查"
  215. return
  216. }
  217. }
  218. user, err := models.GetUserByPhone(req.Phone, req.AreaCode)
  219. if err != nil && err != orm.ErrNoRows {
  220. br.Msg = "编辑用户失败"
  221. br.ErrMsg = "查询用户失败,系统错误,Err:" + err.Error()
  222. return
  223. }
  224. if user != nil && user.UserId != req.UserId {
  225. br.Msg = "手机号已存在,请重新输入"
  226. return
  227. }
  228. }
  229. if req.Email != "" {
  230. if !utils.ValidateEmailFormatat(req.Email) {
  231. br.Msg = "邮箱格式有误, 请检查"
  232. return
  233. }
  234. user, err := models.GetUserByEmail(req.Email)
  235. if err != nil && err != orm.ErrNoRows {
  236. br.Msg = "编辑用户失败"
  237. br.ErrMsg = "查询用户失败,系统错误,Err:" + err.Error()
  238. return
  239. }
  240. if user != nil && user.UserId != req.UserId {
  241. br.Msg = "邮箱已存在,请重新输入"
  242. return
  243. }
  244. }
  245. if req.SellerDepartmentId <= 0 {
  246. br.Msg = "请选择营业部"
  247. return
  248. }
  249. if req.ValidStartTime == "" || req.ValidEndTime == "" {
  250. br.Msg = "请选择合理的有效期范围"
  251. return
  252. }
  253. validStartTime, err := time.Parse(utils.FormatDate, req.ValidStartTime)
  254. if err != nil {
  255. br.Msg = "错误的日期格式"
  256. return
  257. }
  258. validStartTime = validStartTime.In(time.Local).Add(-time.Hour * 8)
  259. validEndTime, err := time.Parse(utils.FormatDate, req.ValidEndTime)
  260. if err != nil {
  261. br.Msg = "错误的日期格式"
  262. return
  263. }
  264. validEndTime = validEndTime.In(time.Local).Add(-time.Hour*8 + time.Hour*24 - time.Second)
  265. if !validStartTime.Before(validEndTime) {
  266. br.Msg = "请选择合理的有效期范围"
  267. return
  268. }
  269. if req.Company == "" {
  270. br.Msg = "请输入所属公司"
  271. return
  272. }
  273. if req.IsEnabled && time.Now().After(validEndTime) {
  274. br.Msg = "启用后,有效期必须大于当前时间"
  275. return
  276. }
  277. user, err := models.GetUserById(req.UserId)
  278. if err != nil {
  279. if err.Error() == utils.ErrNoRow() {
  280. br.Msg = "用户不存在或已删除,请重新刷新页面"
  281. br.ErrMsg = "用户不存在或已删除,请重新刷新页面,Err:" + err.Error()
  282. return
  283. }
  284. br.Msg = "编辑用户失败"
  285. br.ErrMsg = "编辑用户失败, 系统错误,Err:" + err.Error()
  286. return
  287. }
  288. sysDepartment, err := models.GetSysDepartmentById(req.SellerDepartmentId)
  289. if err != nil {
  290. br.Msg = "添加用户失败"
  291. br.ErrMsg = "查询营业部失败,系统错误,Err:" + err.Error()
  292. return
  293. }
  294. user.RealName = req.RealName
  295. user.AreaCode = req.AreaCode
  296. user.Phone = req.Phone
  297. user.Email = req.Email
  298. user.SellerDepartmentId = req.SellerDepartmentId
  299. user.SellerDepartmentName = sysDepartment.SysDepartmentName
  300. user.ValidStartTime = validStartTime
  301. user.ValidEndTime = validEndTime
  302. user.Company = req.Company
  303. user.ModifyTime = time.Now()
  304. // 当用户状态初始为潜在客户时,才更新创建时间
  305. if user.Status == utils.UserStatusPotential {
  306. user.CreateTime = time.Now()
  307. }
  308. oldStatus := user.Status
  309. if !req.IsEnabled {
  310. user.Status = 0
  311. } else {
  312. user.Status = 2
  313. }
  314. err = models.SaveUser(user, req.ChartPermission)
  315. if err != nil {
  316. br.Msg = "添加客户失败"
  317. br.ErrMsg = "添加客户失败,系统错误,Err:" + err.Error()
  318. return
  319. }
  320. record := &models.UserChangeRecord{}
  321. record.UserId = req.UserId
  322. record.SysUserId = this.SysUser.SysUserId
  323. if oldStatus == utils.UserStatusPotential && user.Status == utils.UserStatusFormal {
  324. record.Content = this.SysUser.SysRealName + "新增用户"
  325. } else {
  326. record.Content = this.SysUser.SysRealName + "编辑用户"
  327. }
  328. record.Insert()
  329. br.Msg = "编辑成功"
  330. br.Success = true
  331. br.Ret = 200
  332. }
  333. // Check
  334. // @Title 编辑客户
  335. // @Description 编辑客户
  336. // @Param request body request.UserEidtReq true "type json string"
  337. // @Success 200 {object} request.UserAddReq
  338. // @router /check [post]
  339. func (this *UserController) Check() {
  340. br := new(models.BaseResponse).Init()
  341. defer func() {
  342. this.Data["json"] = br
  343. this.ServeJSON()
  344. }()
  345. var req request.UserCheckReq
  346. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  347. if err != nil {
  348. br.Msg = "参数解析异常!"
  349. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  350. return
  351. }
  352. req.Phone = strings.TrimSpace(req.Phone)
  353. req.Email = strings.TrimSpace(req.Email)
  354. if req.Phone == "" && req.Email == "" {
  355. br.Msg = "至少输入一个手机号或邮箱"
  356. return
  357. }
  358. userCheckResp := new(response.UserCheckResp)
  359. if req.Phone != "" {
  360. if req.AreaCode == "86" {
  361. if !utils.ValidateMobileFormatat(req.Phone) {
  362. br.Msg = "手机号格式有误, 请检查"
  363. return
  364. }
  365. }
  366. user, err := models.GetUserByPhone(req.Phone, req.AreaCode)
  367. if err != nil && err != orm.ErrNoRows {
  368. br.Msg = "编辑用户失败"
  369. br.ErrMsg = "查询用户失败,系统错误,Err:" + err.Error()
  370. return
  371. }
  372. if user != nil {
  373. userCheckResp.UserId = user.UserId
  374. userCheckResp.Status = user.Status
  375. if user.Status == utils.UserStatusNo {
  376. br.Ret = 200
  377. br.Success = true
  378. br.Msg = "该用户已被禁用,确认启用并更新用户信息吗?"
  379. br.Data = userCheckResp
  380. return
  381. }
  382. if user.Status == utils.UserStatusPotential {
  383. br.Ret = 200
  384. br.Success = true
  385. br.Msg = "该用户已在潜在列表,确认转客户并更新用户信息吗?"
  386. br.Data = userCheckResp
  387. return
  388. }
  389. if user.Status == utils.UserStatusFormal {
  390. br.Msg = "手机号已存在,请重新输入"
  391. return
  392. }
  393. }
  394. }
  395. if req.Email != "" {
  396. if !utils.ValidateEmailFormatat(req.Email) {
  397. br.Msg = "邮箱格式有误, 请检查"
  398. return
  399. }
  400. user, err := models.GetUserByEmail(req.Email)
  401. if err != nil && err != orm.ErrNoRows {
  402. br.Msg = "编辑用户失败"
  403. br.ErrMsg = "查询用户失败,系统错误,Err:" + err.Error()
  404. return
  405. }
  406. if user != nil {
  407. userCheckResp.UserId = user.UserId
  408. if user.Status == 0 {
  409. br.Ret = 200
  410. br.Success = true
  411. br.Msg = "该用户已被禁用,确认启用并更新用户信息吗?"
  412. br.Data = userCheckResp
  413. return
  414. }
  415. if user.Status == 1 {
  416. br.Ret = 200
  417. br.Success = true
  418. br.Msg = "该用户已被禁用,确认启用并更新用户信息吗?"
  419. br.Data = userCheckResp
  420. return
  421. }
  422. if user.Status == 2 {
  423. br.Msg = "邮箱已存在,请重新输入"
  424. return
  425. }
  426. return
  427. }
  428. }
  429. br.Ret = 200
  430. br.Success = true
  431. br.Msg = "邮箱或手机号合格"
  432. }
  433. // List
  434. // @Title 用户列表
  435. // @Description 用户列表
  436. // @Param PageSize query int true "每页数据条数"
  437. // @Param CurrentIndex query int true "当前页页码,从1开始"
  438. // @Param SellerId query string true "销售id"
  439. // @Param Status query int true "用户状态"
  440. // @Param KeyWord query string true "手机号/邮箱/姓名"
  441. // @Param IsRegistered query string true "是否注册"
  442. // @Param IsSubscribed query string true "是否关注"
  443. // @Param RegisterStartDate query string true "注册开始时间"
  444. // @Param RegisterEndDate query string true "注册结束时间"
  445. // @Param CreateStartDate query string true "创建开始时间"
  446. // @Param CreateEndDate query string true "创建结束时间"
  447. // @Param SortParam query string true "排序字段"
  448. // @Param SortType query string true "排序方式"
  449. // @Success 200 {object} response.UserListResp
  450. // @router /list [get]
  451. func (this *UserController) List() {
  452. br := new(models.BaseResponse).Init()
  453. defer func() {
  454. this.Data["json"] = br
  455. this.ServeJSON()
  456. }()
  457. pageSize, _ := this.GetInt("PageSize")
  458. currentIndex, _ := this.GetInt("CurrentIndex")
  459. sellerIdStr := this.GetString("SellerId")
  460. status := this.GetString("Status")
  461. keyWord := this.GetString("KeyWord")
  462. IsRegistered := this.GetString("IsRegistered")
  463. IsSubscribed := this.GetString("IsSubscribed")
  464. registerStartDate := this.GetString("RegisterStartDate")
  465. registerEndDate := this.GetString("RegisterEndDate")
  466. createStartDate := this.GetString("CreateStartDate")
  467. createEndDate := this.GetString("CreateEndDate")
  468. sortParma := this.GetString("SortParam")
  469. sortType := this.GetString("SortType")
  470. var condition string
  471. var sortCondition string
  472. var pars []interface{}
  473. if keyWord != "" {
  474. condition += ` AND (u.real_name LIKE ? OR u.phone LIKE ? OR u.email LIKE ?) `
  475. pars = utils.GetLikeKeywordPars(pars, keyWord, 3)
  476. }
  477. if pageSize <= 0 {
  478. pageSize = utils.PageSize20
  479. } else if pageSize > utils.PageSize100 {
  480. pageSize = utils.PageSize100
  481. }
  482. if currentIndex <= 0 {
  483. currentIndex = 1
  484. }
  485. if sortParma != "" && sortType != "" {
  486. sortCondition = " ORDER BY "
  487. var param, sort string
  488. switch sortParma {
  489. case "RegisterTime":
  490. param = "u.register_time"
  491. case "CreateTime":
  492. param = "u.create_time"
  493. case "RestDate":
  494. param = "u.valid_end_time"
  495. }
  496. switch sortType {
  497. case "asc":
  498. sort = " ASC "
  499. case "desc":
  500. sort = " DESC "
  501. }
  502. if param != "" && sort != "" {
  503. sortCondition += param + " " + sort
  504. } else {
  505. sortCondition = ""
  506. }
  507. }
  508. if sortCondition == "" {
  509. sortCondition = " ORDER BY u.create_time DESC"
  510. }
  511. if sellerIdStr != "" {
  512. sellerIds := strings.Split(sellerIdStr, ",")
  513. if len(sellerIds) != 0 {
  514. condition += ` AND ( `
  515. for i, id := range sellerIds {
  516. if i == 0 {
  517. condition += ` u.seller_id = ? `
  518. pars = append(pars, id)
  519. } else {
  520. condition += ` OR u.seller_id = ? `
  521. pars = append(pars, id)
  522. }
  523. }
  524. condition += `) `
  525. }
  526. }
  527. switch status {
  528. case "禁用":
  529. condition += " AND u.status=? "
  530. pars = append(pars, 0)
  531. case "潜在":
  532. condition += " AND u.status=? "
  533. pars = append(pars, 1)
  534. case "正式":
  535. condition += " AND u.status=? "
  536. pars = append(pars, 2)
  537. case "":
  538. condition += " AND (u.status=? OR u.status=?) "
  539. pars = append(pars, 0, 2)
  540. }
  541. switch IsRegistered {
  542. case "是":
  543. condition += " AND u.is_registered=? "
  544. pars = append(pars, true)
  545. case "否":
  546. condition += " AND u.is_registered=? "
  547. pars = append(pars, false)
  548. }
  549. switch IsSubscribed {
  550. case "是":
  551. condition += " AND u.is_subscribed=? "
  552. pars = append(pars, true)
  553. case "否":
  554. condition += " AND u.is_subscribed=? "
  555. pars = append(pars, false)
  556. }
  557. if registerStartDate != "" {
  558. registerStartTime, er := time.Parse(utils.FormatDate, registerStartDate)
  559. if er != nil {
  560. br.Msg = "日期格式有误"
  561. return
  562. }
  563. condition += " AND u.register_time>=? "
  564. registerStartDateStr := registerStartTime.Format(utils.FormatDateTime)
  565. pars = append(pars, registerStartDateStr)
  566. }
  567. if registerEndDate != "" {
  568. registerEndTime, er := time.Parse(utils.FormatDate, registerEndDate)
  569. if er != nil {
  570. br.Msg = "日期格式有误"
  571. return
  572. }
  573. condition += " AND u.register_time<=? "
  574. // 结束时间包含今天
  575. registerEndTime = registerEndTime.Add(23*time.Hour + 59*time.Minute + 59*time.Second)
  576. registerEndDateStr := registerEndTime.Format(utils.FormatDateTime)
  577. pars = append(pars, registerEndDateStr)
  578. }
  579. if createStartDate != "" {
  580. createStartTime, er := time.Parse(utils.FormatDate, createStartDate)
  581. if er != nil {
  582. br.Msg = "日期格式有误"
  583. return
  584. }
  585. condition += " AND u.create_time>=? "
  586. createStartDateStr := createStartTime.Format(utils.FormatDateTime)
  587. pars = append(pars, createStartDateStr)
  588. }
  589. if createEndDate != "" {
  590. createEndTime, er := time.Parse(utils.FormatDate, createEndDate)
  591. if er != nil {
  592. br.Msg = "日期格式有误"
  593. return
  594. }
  595. condition += " AND u.create_time<=? "
  596. // 结束时间包含今天
  597. createEndTime = createEndTime.Add(23*time.Hour + 59*time.Minute + 59*time.Second)
  598. createEndDateStr := createEndTime.Format(utils.FormatDateTime)
  599. pars = append(pars, createEndDateStr)
  600. }
  601. if pageSize <= 0 {
  602. pageSize = utils.PageSize20
  603. } else if pageSize > utils.PageSize100 {
  604. pageSize = utils.PageSize100
  605. }
  606. if currentIndex <= 0 {
  607. currentIndex = 1
  608. }
  609. startSize := utils.StartIndex(currentIndex, pageSize)
  610. total, err := models.GetUserCount(condition, pars)
  611. if err != nil {
  612. br.Msg = "获取失败"
  613. br.ErrMsg = "获取失败,Err:" + err.Error()
  614. return
  615. }
  616. userList, err := models.GetUserListByConditonSort(condition, sortCondition, pars, startSize, pageSize)
  617. if err != nil {
  618. br.Msg = "查询用户失败"
  619. br.Msg = "查询用户失败,系统错误,Err:" + err.Error()
  620. return
  621. }
  622. for _, u := range userList {
  623. if u.ValidEndTime == "" {
  624. u.RestDate = 0
  625. } else {
  626. endTime, err := time.Parse(utils.FormatDateTime, u.ValidEndTime)
  627. if err != nil {
  628. br.Msg = "用户有效时间格式有误"
  629. br.ErrMsg = "用户有效时间格式有误,Err:" + err.Error()
  630. return
  631. }
  632. // 对天数向上取整
  633. daysBetween := int(math.Ceil(time.Until(endTime).Hours() / 24))
  634. if daysBetween < 0 {
  635. daysBetween = 0
  636. }
  637. u.RestDate = daysBetween
  638. }
  639. }
  640. page := paging.GetPaging(currentIndex, pageSize, total)
  641. resp := new(response.UserListResp)
  642. resp.Paging = page
  643. resp.List = userList
  644. br.Data = resp
  645. br.Ret = 200
  646. br.Success = true
  647. br.Msg = "获取成功"
  648. }
  649. // PotentialList
  650. // @Title 潜在用户列表
  651. // @Description 潜在用户列表
  652. // @Param PageSize query int true "每页数据条数"
  653. // @Param CurrentIndex query int true "当前页页码,从1开始"
  654. // @Param KeyWord query string true "手机号/邮箱"
  655. // @Param SellerDepartmentId query int true "营业部id"
  656. // @Param ApplyStatus query int true "申请状态"
  657. // @Param RegisterStartDate query string true "注册开始时间"
  658. // @Param RegisterEndDate query string true "注册结束时间"
  659. // @Param LastUpdateStartDate query string true "最后一次阅读开始时间"
  660. // @Param LastUpdateEndDate query string true "最后一次阅读结束时间"
  661. // @Param ApplyStartDate query string true "申请开始时间"
  662. // @Param ApplyEndDate query string true "申请结束时间"
  663. // @Param SortParam query string true "排序字段"
  664. // @Param SortType query string true "排序方式"
  665. // @Success 200 {object} response.UserListResp
  666. // @router /potential/list [get]
  667. func (this *UserController) PotentialList() {
  668. br := new(models.BaseResponse).Init()
  669. defer func() {
  670. this.Data["json"] = br
  671. this.ServeJSON()
  672. }()
  673. pageSize, _ := this.GetInt("PageSize")
  674. currentIndex, _ := this.GetInt("CurrentIndex")
  675. keyWord := this.GetString("KeyWord")
  676. sellerDepartmentId, _ := this.GetInt("SellerDepartmentId")
  677. applyStatus := this.GetString("ApplyStatus")
  678. applyStartDate := this.GetString("ApplyStartDate")
  679. applyEndDate := this.GetString("ApplyEndDate")
  680. registerStartDate := this.GetString("RegisterStartDate")
  681. registerEndDate := this.GetString("RegisterEndDate")
  682. lastUpdateStartDate := this.GetString("LastUpdateStartDate")
  683. lastUpdateEndDate := this.GetString("LastUpdateEndDate")
  684. sortParam := this.GetString("SortParam")
  685. sortType := this.GetString("SortType")
  686. userList, total, errMsg, msg, err := services.GetPotentialList(keyWord, sellerDepartmentId, applyStatus, pageSize, currentIndex, sortParam, sortType, registerStartDate, registerEndDate, lastUpdateStartDate, lastUpdateEndDate, applyStartDate, applyEndDate)
  687. if err != nil {
  688. if msg != "" {
  689. br.Msg = msg
  690. } else {
  691. br.Msg = "获取失败"
  692. }
  693. if errMsg != "" {
  694. br.ErrMsg = errMsg + ", Err:" + err.Error()
  695. } else {
  696. br.ErrMsg = "获取失败, Err:" + err.Error()
  697. }
  698. }
  699. resp := new(response.UserListResp)
  700. page := paging.GetPaging(currentIndex, pageSize, total)
  701. resp.Paging = page
  702. resp.List = userList
  703. br.Data = resp
  704. br.Ret = 200
  705. br.Success = true
  706. br.Msg = "获取成功"
  707. }
  708. // PotentialEdit
  709. // @Title 编辑潜在客户(转客户)
  710. // @Description 编辑潜在客户(转客户)
  711. // @Param request body request.UserEidtReq true "type json string"
  712. // @Success 200 {object} request.UserAddReq
  713. // @router /potential/edit [post]
  714. func (this *UserController) PotentialEdit() {
  715. br := new(models.BaseResponse).Init()
  716. defer func() {
  717. this.Data["json"] = br
  718. this.ServeJSON()
  719. }()
  720. var req request.UserEditReq
  721. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  722. if err != nil {
  723. br.Msg = "参数解析异常!"
  724. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  725. return
  726. }
  727. if req.RealName == "" {
  728. br.Msg = "请输入姓名"
  729. return
  730. }
  731. req.Phone = strings.TrimSpace(req.Phone)
  732. req.Email = strings.TrimSpace(req.Email)
  733. if req.Phone == "" && req.Email == "" {
  734. br.Msg = "至少输入一个手机号或邮箱"
  735. return
  736. }
  737. if req.Phone != "" {
  738. if req.AreaCode == "86" {
  739. if !utils.ValidateMobileFormatat(req.Phone) {
  740. br.Msg = "手机号格式有误, 请检查"
  741. return
  742. }
  743. }
  744. user, err := models.GetUserByPhone(req.Phone, req.AreaCode)
  745. if err != nil && err != orm.ErrNoRows {
  746. br.Msg = "编辑用户失败"
  747. br.ErrMsg = "查询用户失败,系统错误,Err:" + err.Error()
  748. return
  749. }
  750. if user != nil && user.UserId != req.UserId {
  751. br.Msg = "手机号已存在,请重新输入"
  752. return
  753. }
  754. }
  755. if req.Email != "" {
  756. if !utils.ValidateEmailFormatat(req.Email) {
  757. br.Msg = "邮箱格式有误, 请检查"
  758. return
  759. }
  760. user, err := models.GetUserByEmail(req.Email)
  761. if err != nil && err != orm.ErrNoRows {
  762. br.Msg = "编辑用户失败"
  763. br.ErrMsg = "查询用户失败,系统错误,Err:" + err.Error()
  764. return
  765. }
  766. if user != nil && user.UserId != req.UserId {
  767. br.Msg = "邮箱已存在,请重新输入"
  768. return
  769. }
  770. }
  771. if req.SellerDepartmentId <= 0 {
  772. br.Msg = "请选择营业部"
  773. return
  774. }
  775. if req.ValidStartTime == "" || req.ValidEndTime == "" {
  776. br.Msg = "请选择合理的有效期范围"
  777. return
  778. }
  779. validStartTime, err := time.Parse(utils.FormatDate, req.ValidStartTime)
  780. if err != nil {
  781. br.Msg = "错误的日期格式"
  782. return
  783. }
  784. validStartTime = validStartTime.In(time.Local).Add(-time.Hour * 8)
  785. validEndTime, err := time.Parse(utils.FormatDate, req.ValidEndTime)
  786. if err != nil {
  787. br.Msg = "错误的日期格式"
  788. return
  789. }
  790. validEndTime = validEndTime.In(time.Local).Add(-time.Hour*8 + time.Hour*24 - time.Second)
  791. if !validStartTime.Before(validEndTime) {
  792. br.Msg = "请选择合理的有效期范围"
  793. return
  794. }
  795. if req.Company == "" {
  796. br.Msg = "请输入所属公司"
  797. return
  798. }
  799. if req.IsEnabled && time.Now().After(validEndTime) {
  800. br.Msg = "启用后,有效期必须大于当前时间"
  801. return
  802. }
  803. user, err := models.GetUserById(req.UserId)
  804. if err != nil {
  805. if err.Error() == utils.ErrNoRow() {
  806. br.Msg = "用户不存在或已删除,请重新刷新页面"
  807. br.ErrMsg = "用户不存在或已删除,请重新刷新页面,Err:" + err.Error()
  808. return
  809. }
  810. br.Msg = "编辑用户失败"
  811. br.ErrMsg = "编辑用户失败, 系统错误,Err:" + err.Error()
  812. return
  813. }
  814. department, err := models.GetSysDepartmentById(req.SellerDepartmentId)
  815. if err != nil {
  816. br.Msg = "编辑用户失败"
  817. br.ErrMsg = "编辑用户失败, 系统错误,Err:" + err.Error()
  818. return
  819. }
  820. user.RealName = req.RealName
  821. user.AreaCode = req.AreaCode
  822. user.Phone = req.Phone
  823. user.Email = req.Email
  824. user.SellerDepartmentId = req.SellerDepartmentId
  825. user.SellerDepartmentName = department.SysDepartmentName
  826. user.ValidStartTime = validStartTime
  827. user.ValidEndTime = validEndTime
  828. user.Company = req.Company
  829. user.ModifyTime = time.Now()
  830. // 当用户状态初始为潜在客户时,才更新创建时间
  831. if user.Status == utils.UserStatusPotential {
  832. user.CreateTime = time.Now()
  833. }
  834. oldStatus := user.Status
  835. if !req.IsEnabled {
  836. user.Status = 0
  837. } else {
  838. user.Status = 2
  839. }
  840. err = models.SaveUser(user, req.ChartPermission)
  841. if err != nil {
  842. br.Msg = "添加客户失败"
  843. br.ErrMsg = "添加客户失败,系统错误,Err:" + err.Error()
  844. return
  845. }
  846. record := &models.UserChangeRecord{}
  847. record.UserId = req.UserId
  848. record.SysUserId = this.SysUser.SysUserId
  849. if oldStatus == utils.UserStatusPotential && user.Status == utils.UserStatusFormal {
  850. record.Content = this.SysUser.SysRealName + "新增用户"
  851. } else {
  852. record.Content = this.SysUser.SysRealName + "编辑用户"
  853. }
  854. record.Insert()
  855. br.Msg = "编辑成功"
  856. br.Success = true
  857. br.Ret = 200
  858. }
  859. // ExportPotentialExcel
  860. // @Title 导出潜在用户Excel
  861. // @Description 导出潜在用户Excel
  862. // @Param KeyWord query string true "手机号/邮箱"
  863. // @Param SellerDepartmentId query int true "营业部id"
  864. // @Param ApplyStatus query int true "申请状态"
  865. // @Param RegisterStartDate query string true "注册开始时间"
  866. // @Param RegisterEndDate query string true "注册结束时间"
  867. // @Param LastUpdateStartDate query string true "最后一次阅读开始时间"
  868. // @Param LastUpdateEndDate query string true "最后一次阅读结束时间"
  869. // @Param ApplyStartDate query string true "申请开始时间"
  870. // @Param ApplyEndDate query string true "申请结束时间"
  871. // @Success 200 {object} request.UserAddReq
  872. // @router /potential/export/excel [get]
  873. func (this *UserController) ExportPotentialExcel() {
  874. br := new(models.BaseResponse).Init()
  875. defer func() {
  876. this.Data["json"] = br
  877. this.ServeJSON()
  878. }()
  879. keyword := this.GetString("KeyWord")
  880. sellerDepartmentId, _ := this.GetInt("SellerDepartmentId")
  881. applyStatus := this.GetString("ApplyStatus")
  882. registerStartDate := this.GetString("RegisterStartDate")
  883. registerEndDate := this.GetString("RegisterEndDate")
  884. lastUpdateStartDate := this.GetString("LastUpdateStartDate")
  885. lastUpdateEndDate := this.GetString("LastUpdateEndDate")
  886. applyStartDate := this.GetString("ApplyStartDate")
  887. applyEndDate := this.GetString("ApplyEndDate")
  888. total, err := models.GetPotentialUserTotal()
  889. if err != nil {
  890. br.Msg = "获取数据失败"
  891. br.ErrMsg = "获取数据失败,系统错误,Err:" + err.Error()
  892. return
  893. }
  894. userList, _, errMsg, msg, err := services.GetPotentialList(keyword, sellerDepartmentId, applyStatus, total, 0, "", "", registerStartDate, registerEndDate, lastUpdateStartDate, lastUpdateEndDate, applyStartDate, applyEndDate)
  895. if err != nil {
  896. if msg != "" {
  897. br.Msg = msg
  898. } else {
  899. br.Msg = "获取失败"
  900. }
  901. if errMsg != "" {
  902. br.ErrMsg = errMsg + ", Err:" + err.Error()
  903. } else {
  904. br.ErrMsg = "获取失败, Err:" + err.Error()
  905. }
  906. }
  907. dir, _ := os.Executable()
  908. exPath := filepath.Dir(dir)
  909. downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  910. xlsxFile := xlsx.NewFile()
  911. sheetNew := new(xlsx.Sheet)
  912. sheetNew, err = xlsxFile.AddSheet("潜在客户列表")
  913. if err != nil {
  914. br.Msg = "创建sheet失败"
  915. br.ErrMsg = "创建sheet失败,系统错误,Err:" + err.Error()
  916. return
  917. }
  918. titleRow := sheetNew.AddRow()
  919. titleRow.AddCell().SetString("手机号")
  920. titleRow.AddCell().SetString("姓名")
  921. titleRow.AddCell().SetString("营业部")
  922. titleRow.AddCell().SetString("邮箱")
  923. titleRow.AddCell().SetString("注册时间")
  924. titleRow.AddCell().SetString("申请时间")
  925. titleRow.AddCell().SetString("最近一次阅读")
  926. titleRow.AddCell().SetString("累计阅读次数")
  927. titleRow.AddCell().SetString("申请状态")
  928. for _, user := range userList {
  929. row := sheetNew.AddRow()
  930. row.AddCell().SetString(user.Phone)
  931. row.AddCell().SetString(user.RealName)
  932. row.AddCell().SetString(user.SellerDepartmentName)
  933. row.AddCell().SetString(user.Email)
  934. row.AddCell().SetString(user.RegisterTime)
  935. row.AddCell().SetString(user.ApplyTime)
  936. row.AddCell().SetString(user.LastUpdateTime)
  937. row.AddCell().SetInt(user.ReadCnt)
  938. switch user.ApplyStatus {
  939. case 0:
  940. row.AddCell().SetString("未申请")
  941. case 1:
  942. row.AddCell().SetString("已申请")
  943. }
  944. }
  945. err = xlsxFile.Save(downLoadnFilePath)
  946. if err != nil {
  947. sheet, err := xlsxFile.AddSheet("无数据")
  948. if err != nil {
  949. br.Msg = "创建sheet失败"
  950. br.ErrMsg = "创建sheet失败,系统错误,Err:" + err.Error()
  951. return
  952. }
  953. rowSecName := sheet.AddRow()
  954. celSecName := rowSecName.AddCell()
  955. celSecName.SetString("无数据")
  956. err = xlsxFile.Save(downLoadnFilePath)
  957. if err != nil {
  958. br.Msg = "保存文件失败"
  959. br.ErrMsg = "保存文件失败,系统错误,Err:" + err.Error()
  960. return
  961. }
  962. }
  963. fileName := "潜在客户列表" + time.Now().Format("06.1.2")
  964. this.Ctx.Output.Download(downLoadnFilePath, fileName)
  965. defer os.Remove(downLoadnFilePath)
  966. br.Ret = 200
  967. br.Success = true
  968. br.Msg = "success"
  969. }
  970. // Detail
  971. // @Title 用户详情信息
  972. // @Description 用户详情信息
  973. // @Param UserId query int true "用户id"
  974. // @Success 200 {object} models.LoginResp
  975. // @router /detail [get]
  976. func (this *UserController) Detail() {
  977. br := new(models.BaseResponse).Init()
  978. defer func() {
  979. this.Data["json"] = br
  980. this.ServeJSON()
  981. }()
  982. UserId, _ := this.GetInt("UserId")
  983. if UserId <= 0 {
  984. br.Msg = "查询用户不存在"
  985. return
  986. }
  987. user, err := models.GetUserViewById(UserId)
  988. if err != nil {
  989. if err.Error() == utils.ErrNoRow() {
  990. br.Msg = "用户不存在或已删除,请刷新页面"
  991. return
  992. }
  993. br.Msg = "查询用户失败"
  994. br.ErrMsg = "查询用户失败,系统错误,Err:" + err.Error()
  995. return
  996. }
  997. if user == nil {
  998. br.Msg = "用户不存在或已删除,请刷新页面"
  999. return
  1000. }
  1001. permissionList, err := services.GetUserPermissionById(UserId)
  1002. if err != nil {
  1003. br.Msg = "用户权限获取失败,请重新尝试"
  1004. return
  1005. }
  1006. permissionMap := make(map[string][]string)
  1007. for _, pm := range permissionList {
  1008. permissionMap[pm.ParentName] = append(permissionMap[pm.ParentName], pm.PermissionName)
  1009. }
  1010. resp := new(response.UserDetailResp)
  1011. resp.Detail = user
  1012. resp.Permission = permissionMap
  1013. br.Msg = "查询成功"
  1014. br.Ret = 200
  1015. br.Success = true
  1016. br.Data = resp
  1017. }
  1018. // Delete
  1019. // @Title 系统用户详情信息
  1020. // @Description 用户详情信息
  1021. // @Param request body request.UserDeleteReq true "type json string"
  1022. // @Success 200 {object} models.LoginResp
  1023. // @router /delete [post]
  1024. func (this *UserController) Delete() {
  1025. br := new(models.BaseResponse).Init()
  1026. defer func() {
  1027. this.Data["json"] = br
  1028. this.ServeJSON()
  1029. }()
  1030. var req request.UserDeleteReq
  1031. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  1032. if err != nil {
  1033. br.Msg = "参数解析异常!"
  1034. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  1035. return
  1036. }
  1037. err = models.DeleteUserById(req.UserId)
  1038. if err != nil {
  1039. br.Msg = "删除失败"
  1040. br.ErrMsg = "删除失败,系统错误,Err:" + err.Error()
  1041. return
  1042. }
  1043. br.Msg = "删除成功"
  1044. br.Success = true
  1045. br.Ret = 200
  1046. }
  1047. // @Title 开启/禁用用户
  1048. // @Description 开启/禁用用户接口
  1049. // @Param request body system.SysuserEditReq true "type json string"
  1050. // @Success 200 操作成功
  1051. // @router /editEnabled [post]
  1052. func (this *UserController) EditEnabled() {
  1053. br := new(models.BaseResponse).Init()
  1054. defer func() {
  1055. this.Data["json"] = br
  1056. this.ServeJSON()
  1057. }()
  1058. var req request.UserEditEnabledReq
  1059. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  1060. if err != nil {
  1061. br.Msg = "参数解析异常!"
  1062. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  1063. return
  1064. }
  1065. user, err := models.GetUserById(req.UserId)
  1066. if err != nil {
  1067. br.Msg = "获取数据失败"
  1068. br.ErrMsg = "获取系统用户数据失败,Err:" + err.Error()
  1069. return
  1070. }
  1071. if !req.IsEnabled {
  1072. user.Status = 0
  1073. err = user.Update([]string{"status"})
  1074. if err != nil {
  1075. br.Msg = "修改失败"
  1076. br.ErrMsg = "修改系统用户数据失败,Err:" + err.Error()
  1077. return
  1078. }
  1079. } else {
  1080. validStartTime, err := time.Parse(utils.FormatDate, req.ValidStartTime)
  1081. if err != nil {
  1082. br.Msg = "日期格式不正确"
  1083. return
  1084. }
  1085. validEndTime, err := time.Parse(utils.FormatDate, req.ValidEndTime)
  1086. if err != nil {
  1087. br.Msg = "日期格式不正确"
  1088. return
  1089. }
  1090. if !validEndTime.After(validStartTime) {
  1091. br.Msg = "有效期结束日期在开始日期之前,日期格式不正确"
  1092. return
  1093. }
  1094. validStartTime = validStartTime.Local().Add(-time.Hour * 8)
  1095. validEndTime = validEndTime.Local().Add(-time.Hour*8 + time.Hour*24 - time.Second)
  1096. curTime := time.Now()
  1097. if curTime.After(validEndTime) {
  1098. br.Msg = "有效期已到期,请重新设置"
  1099. return
  1100. }
  1101. user.Status = 2
  1102. user.ModifyTime = curTime
  1103. user.ValidStartTime = validStartTime
  1104. user.ValidEndTime = validEndTime
  1105. err = user.Update([]string{"status", "modify_time", "valid_start_time", "valid_end_time"})
  1106. if err != nil {
  1107. br.Msg = "修改失败"
  1108. br.ErrMsg = "修改系统用户数据失败,Err:" + err.Error()
  1109. return
  1110. }
  1111. }
  1112. // 记录操作
  1113. record := &models.UserChangeRecord{}
  1114. record.UserId = req.UserId
  1115. record.SysUserId = this.SysUser.SysUserId
  1116. if user.Status == 0 {
  1117. record.Content = this.SysUser.SysRealName + "禁用用户"
  1118. } else {
  1119. record.Content = this.SysUser.SysRealName + "启用用户"
  1120. }
  1121. record.Insert()
  1122. br.Ret = 200
  1123. br.Success = true
  1124. br.Msg = "操作成功"
  1125. }
  1126. // @Title 用户信息变更记录
  1127. // @Description 用户信息变更记录
  1128. // @Param UserId query int true "用户id"
  1129. // @Success 200 操作成功
  1130. // @router /change_list [get]
  1131. func (this *UserController) ChangeList() {
  1132. br := new(models.BaseResponse).Init()
  1133. defer func() {
  1134. this.Data["json"] = br
  1135. this.ServeJSON()
  1136. }()
  1137. userId, _ := this.GetInt("UserId")
  1138. if userId <= 0 {
  1139. br.Msg = "用户信息错误"
  1140. return
  1141. }
  1142. userRcord, err := models.GetUserChangeRecordListById(userId)
  1143. if err != nil {
  1144. br.Msg = "用户信息变更查询失败"
  1145. br.ErrMsg = "用户信息变更查询失败,系统错误,Err:" + err.Error()
  1146. return
  1147. }
  1148. resp := new(response.UserChangeRecordResp)
  1149. resp.List = userRcord
  1150. br.Data = resp
  1151. br.Msg = "查询成功"
  1152. br.Success = true
  1153. br.Ret = 200
  1154. }
  1155. // GlobalSearch
  1156. // @Title 全局用户列表
  1157. // @Description 全局用户列表
  1158. // @Param PageSize query int true "每页数据条数"
  1159. // @Param CurrentIndex query int true "当前页页码,从1开始"
  1160. // @Param KeyWord query string true "手机号/邮箱/姓名"
  1161. // @Param SortParam query string true "排序字段"
  1162. // @Param SortType query string true "排序方式"
  1163. // @Success 200 {object} response.UserListResp
  1164. // @router /global/list [get]
  1165. func (this *UserController) GlobalSearch() {
  1166. br := new(models.BaseResponse).Init()
  1167. defer func() {
  1168. this.Data["json"] = br
  1169. this.ServeJSON()
  1170. }()
  1171. pageSize, _ := this.GetInt("PageSize")
  1172. currentIndex, _ := this.GetInt("CurrentIndex")
  1173. keyWord := this.GetString("KeyWord")
  1174. sortParam := this.GetString("SortParam")
  1175. sortType := this.GetString("SortType")
  1176. if pageSize <= 0 {
  1177. pageSize = utils.PageSize20
  1178. }
  1179. if currentIndex <= 0 {
  1180. currentIndex = 1
  1181. }
  1182. var condition string
  1183. var pars []interface{}
  1184. var sortCondition string
  1185. if keyWord == "" {
  1186. br.Ret = 200
  1187. br.Msg = "查询成功"
  1188. br.Success = true
  1189. return
  1190. } else {
  1191. condition = ` AND (real_name like ? OR phone like ? OR email like ?)`
  1192. pars = utils.GetLikeKeywordPars(pars, keyWord, 3)
  1193. }
  1194. if sortParam != "" && sortType != "" {
  1195. var param, sort string
  1196. switch sortParam {
  1197. case "RegisterTime":
  1198. param = "register_time"
  1199. case "ReadCnt":
  1200. param = "read_cnt"
  1201. case "LastUpdateTime":
  1202. param = "last_update_time"
  1203. }
  1204. switch sortType {
  1205. case "asc":
  1206. sort = "ASC"
  1207. case "desc":
  1208. sort = "DESC"
  1209. }
  1210. if param != "" && sort != "" {
  1211. sortCondition = ` ORDER BY ` + param + ` ` + sort
  1212. }
  1213. }
  1214. if sortCondition == "" {
  1215. sortCondition = ` ORDER BY u.register_time DESC`
  1216. }
  1217. startSize := utils.StartIndex(currentIndex, pageSize)
  1218. userIds, err := models.GetUserIdListByCondition(condition, pars)
  1219. if err != nil {
  1220. br.Msg = "查询失败"
  1221. br.ErrMsg = "查询失败,系统错误,Err:" + err.Error()
  1222. return
  1223. }
  1224. userList, err := models.GetGlobalUserByCondition(userIds, sortCondition, startSize, pageSize)
  1225. if err != nil {
  1226. br.Msg = "查询失败"
  1227. br.ErrMsg = "查询失败,系统错误,Err:" + err.Error()
  1228. return
  1229. }
  1230. page := paging.GetPaging(currentIndex, pageSize, len(userIds))
  1231. resp := new(response.UserListResp)
  1232. resp.List = userList
  1233. resp.Paging = page
  1234. br.Data = resp
  1235. br.Msg = "查询成功"
  1236. br.Success = true
  1237. br.Ret = 200
  1238. }