user.go 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621
  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/utils"
  8. "strings"
  9. "time"
  10. "github.com/beego/beego/v2/client/orm"
  11. "github.com/rdlucklib/rdluck_tools/paging"
  12. )
  13. type UserController struct {
  14. BaseAuthController
  15. }
  16. // Add
  17. // @Title 添加新客户
  18. // @Description 添加新客户
  19. // @Param request body request.UserAddReq true "type json string"
  20. // @Success 200 {object} request.UserAddReq
  21. // @router /add [post]
  22. func (this *UserController) Add() {
  23. br := new(models.BaseResponse).Init()
  24. defer func() {
  25. this.Data["json"] = br
  26. this.ServeJSON()
  27. }()
  28. var req request.UserAddReq
  29. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  30. if err != nil {
  31. br.Msg = "参数解析异常!"
  32. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  33. return
  34. }
  35. if req.RealName == "" {
  36. br.Msg = "请输入姓名"
  37. return
  38. }
  39. req.Phone = strings.TrimSpace(req.Phone)
  40. req.Email = strings.TrimSpace(req.Email)
  41. if req.Phone == "" && req.Email == "" {
  42. br.Msg = "至少输入一个手机号或邮箱"
  43. return
  44. }
  45. var userByPhone, userByEmail *models.User
  46. if req.Phone != "" {
  47. if req.AreaCode == "86" {
  48. if !utils.ValidateMobileFormatat(req.Phone) {
  49. br.Msg = "手机号格式有误, 请检查"
  50. return
  51. }
  52. }
  53. userByPhone, err = models.GetUserByPhone(req.Phone, req.AreaCode)
  54. if err != nil && err != orm.ErrNoRows {
  55. br.Msg = "添加用户失败"
  56. br.ErrMsg = "查询用户失败,系统错误,Err:" + err.Error()
  57. return
  58. }
  59. if userByPhone != nil {
  60. switch userByPhone.Status {
  61. case 0:
  62. userByPhone.Status = 2
  63. case 1:
  64. userByPhone.Status = 2
  65. default:
  66. br.Msg = "手机号已存在,请重新输入"
  67. return
  68. }
  69. }
  70. }
  71. if req.Email != "" {
  72. if !utils.ValidateEmailFormatat(req.Email) {
  73. br.Msg = "邮箱格式有误, 请检查"
  74. return
  75. }
  76. userByEmail, err = models.GetUserByEmail(req.Email)
  77. if err != nil && err != orm.ErrNoRows {
  78. br.Msg = "添加用户失败"
  79. br.ErrMsg = "查询用户失败,系统错误,Err:" + err.Error()
  80. return
  81. }
  82. if userByEmail != nil {
  83. switch userByEmail.Status {
  84. case 0:
  85. userByEmail.Status = 2
  86. case 1:
  87. userByEmail.Status = 2
  88. default:
  89. br.Msg = "邮箱已存在,请重新输入"
  90. return
  91. }
  92. }
  93. }
  94. if req.SellerId <= 0 {
  95. br.Msg = "请选择营业部/销售"
  96. return
  97. }
  98. if req.ValidStartTime == "" || req.ValidEndTime == "" {
  99. br.Msg = "请选择合理的有效期范围"
  100. return
  101. }
  102. validStartTime, err := time.Parse("2006-01-02", req.ValidStartTime)
  103. if err != nil {
  104. br.Msg = "错误的日期格式"
  105. return
  106. }
  107. validEndTime, err := time.Parse("2006-01-02", req.ValidEndTime)
  108. if err != nil {
  109. br.Msg = "错误的日期格式"
  110. return
  111. }
  112. if !validStartTime.Before(validEndTime) {
  113. br.Msg = "请选择合理的有效期范围"
  114. return
  115. }
  116. if req.Company == "" {
  117. br.Msg = "请输入所属公司"
  118. return
  119. }
  120. if userByPhone != nil && userByEmail != nil && userByPhone.UserId != userByEmail.UserId {
  121. br.Msg = "邮箱已存在,请重新输入"
  122. return
  123. }
  124. user := &models.User{}
  125. if userByPhone == nil && userByEmail == nil {
  126. user.CreateTime = time.Now()
  127. user.ModifyTime = time.Now()
  128. }
  129. validStartTime = validStartTime.Local().Add(-time.Hour * 8)
  130. validEndTime = validEndTime.Local().Add(-time.Hour*8 + time.Hour*24)
  131. curTime := time.Now()
  132. if curTime.Before(validEndTime) && curTime.After(validStartTime) {
  133. user.Status = 2
  134. } else {
  135. user.Status = 0
  136. }
  137. user.RealName = req.RealName
  138. user.AreaCode = req.AreaCode
  139. user.Phone = req.Phone
  140. user.Email = req.Email
  141. user.SellerId = req.SellerId
  142. user.ValidStartTime = validStartTime
  143. user.ValidEndTime = validEndTime
  144. user.Company = req.Company
  145. user.ModifyTime = time.Now()
  146. err = models.SaveUser(user, req.ChartPermission)
  147. if err != nil {
  148. br.Msg = "添加客户失败"
  149. br.ErrMsg = "添加客户失败,系统错误,Err:" + err.Error()
  150. return
  151. }
  152. br.Msg = "添加成功"
  153. br.Success = true
  154. br.Ret = 200
  155. }
  156. // edit
  157. // @Title 编辑客户
  158. // @Description 编辑客户
  159. // @Param request body request.UserEidtReq true "type json string"
  160. // @Success 200 {object} request.UserAddReq
  161. // @router /edit [post]
  162. func (this *UserController) Edit() {
  163. br := new(models.BaseResponse).Init()
  164. defer func() {
  165. this.Data["json"] = br
  166. this.ServeJSON()
  167. }()
  168. var req request.UserEidtReq
  169. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  170. if err != nil {
  171. br.Msg = "参数解析异常!"
  172. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  173. return
  174. }
  175. if req.RealName == "" {
  176. br.Msg = "请输入姓名"
  177. return
  178. }
  179. req.Phone = strings.TrimSpace(req.Phone)
  180. req.Email = strings.TrimSpace(req.Email)
  181. if req.Phone == "" && req.Email == "" {
  182. br.Msg = "至少输入一个手机号或邮箱"
  183. return
  184. }
  185. if req.Phone != "" {
  186. if req.AreaCode == "86" {
  187. if !utils.ValidateMobileFormatat(req.Phone) {
  188. br.Msg = "手机号格式有误, 请检查"
  189. return
  190. }
  191. }
  192. user, err := models.GetUserByPhone(req.Phone, req.AreaCode)
  193. if err != nil && err != orm.ErrNoRows {
  194. br.Msg = "编辑用户失败"
  195. br.ErrMsg = "查询用户失败,系统错误,Err:" + err.Error()
  196. return
  197. }
  198. if user != nil && user.UserId != req.UserId {
  199. br.Msg = "手机号已存在,请重新输入"
  200. return
  201. }
  202. }
  203. if req.Email != "" {
  204. if !utils.ValidateEmailFormatat(req.Email) {
  205. br.Msg = "邮箱格式有误, 请检查"
  206. return
  207. }
  208. user, err := models.GetUserByEmail(req.Email)
  209. if err != nil && err != orm.ErrNoRows {
  210. br.Msg = "编辑用户失败"
  211. br.ErrMsg = "查询用户失败,系统错误,Err:" + err.Error()
  212. return
  213. }
  214. if user != nil && user.UserId != req.UserId {
  215. br.Msg = "邮箱已存在,请重新输入"
  216. return
  217. }
  218. }
  219. if req.SellerId <= 0 {
  220. br.Msg = "请选择营业部/销售"
  221. return
  222. }
  223. if req.ValidStartTime == "" || req.ValidEndTime == "" {
  224. br.Msg = "请选择合理的有效期范围"
  225. return
  226. }
  227. validStartTime, err := time.Parse("2006-01-02", req.ValidStartTime)
  228. if err != nil {
  229. br.Msg = "错误的日期格式"
  230. return
  231. }
  232. validStartTime = validStartTime.In(time.Local).Add(-time.Hour * 8)
  233. validEndTime, err := time.Parse("2006-01-02", req.ValidEndTime)
  234. if err != nil {
  235. br.Msg = "错误的日期格式"
  236. return
  237. }
  238. validEndTime = validEndTime.In(time.Local).Add(-time.Hour*8 + time.Hour*24)
  239. if !validStartTime.Before(validEndTime) {
  240. br.Msg = "请选择合理的有效期范围"
  241. return
  242. }
  243. if req.Company == "" {
  244. br.Msg = "请输入所属公司"
  245. return
  246. }
  247. user := &models.User{}
  248. user.UserId = req.UserId
  249. user.RealName = req.RealName
  250. user.AreaCode = req.AreaCode
  251. user.Phone = req.Phone
  252. user.Email = req.Email
  253. user.SellerId = req.SellerId
  254. user.ValidStartTime = validStartTime
  255. user.ValidEndTime = validEndTime
  256. user.Company = req.Company
  257. user.ModifyTime = time.Now()
  258. curTime := time.Now()
  259. if !req.IsEnabled {
  260. user.Status = 0
  261. } else if curTime.After(validStartTime) && curTime.Before(validEndTime) {
  262. user.Status = 2
  263. } else {
  264. user.Status = 1
  265. }
  266. err = models.SaveUser(user, req.ChartPermission)
  267. if err != nil {
  268. br.Msg = "添加客户失败"
  269. br.ErrMsg = "添加客户失败,系统错误,Err:" + err.Error()
  270. return
  271. }
  272. br.Msg = "编辑成功"
  273. br.Success = true
  274. br.Ret = 200
  275. }
  276. // Check
  277. // @Title 编辑客户
  278. // @Description 编辑客户
  279. // @Param request body request.UserEidtReq true "type json string"
  280. // @Success 200 {object} request.UserAddReq
  281. // @router /check [post]
  282. func (this *UserController) Check() {
  283. br := new(models.BaseResponse).Init()
  284. defer func() {
  285. this.Data["json"] = br
  286. this.ServeJSON()
  287. }()
  288. var req request.UserCheckReq
  289. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  290. if err != nil {
  291. br.Msg = "参数解析异常!"
  292. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  293. return
  294. }
  295. req.Phone = strings.TrimSpace(req.Phone)
  296. req.Email = strings.TrimSpace(req.Email)
  297. if req.Phone == "" && req.Email == "" {
  298. br.Msg = "至少输入一个手机号或邮箱"
  299. return
  300. }
  301. userCheckResp := new(response.UserCheckResp)
  302. if req.Phone != "" {
  303. if req.AreaCode == "86" {
  304. if !utils.ValidateMobileFormatat(req.Phone) {
  305. br.Msg = "手机号格式有误, 请检查"
  306. return
  307. }
  308. }
  309. user, err := models.GetUserByPhone(req.Phone, req.AreaCode)
  310. if err != nil && err != orm.ErrNoRows {
  311. br.Msg = "编辑用户失败"
  312. br.ErrMsg = "查询用户失败,系统错误,Err:" + err.Error()
  313. return
  314. }
  315. if user != nil {
  316. userCheckResp.UserId = user.UserId
  317. if user.Status == 0 {
  318. br.Ret = 200
  319. br.Success = true
  320. br.Msg = "该用户已被禁用,确认启用并更新用户信息吗?"
  321. br.Data = userCheckResp
  322. return
  323. }
  324. if user.Status == 1 {
  325. br.Ret = 200
  326. br.Success = true
  327. br.Msg = "该用户已被禁用,确认启用并更新用户信息吗?"
  328. br.Data = userCheckResp
  329. return
  330. }
  331. if user.Status == 2 {
  332. br.Msg = "手机号已存在,请重新输入"
  333. return
  334. }
  335. }
  336. }
  337. if req.Email != "" {
  338. if !utils.ValidateEmailFormatat(req.Email) {
  339. br.Msg = "邮箱格式有误, 请检查"
  340. return
  341. }
  342. user, err := models.GetUserByEmail(req.Email)
  343. if err != nil && err != orm.ErrNoRows {
  344. br.Msg = "编辑用户失败"
  345. br.ErrMsg = "查询用户失败,系统错误,Err:" + err.Error()
  346. return
  347. }
  348. if user != nil {
  349. userCheckResp.UserId = user.UserId
  350. if user.Status == 0 {
  351. br.Ret = 200
  352. br.Success = true
  353. br.Msg = "该用户已被禁用,确认启用并更新用户信息吗?"
  354. br.Data = userCheckResp
  355. return
  356. }
  357. if user.Status == 1 {
  358. br.Ret = 200
  359. br.Success = true
  360. br.Msg = "该用户已被禁用,确认启用并更新用户信息吗?"
  361. br.Data = userCheckResp
  362. return
  363. }
  364. if user.Status == 2 {
  365. br.Msg = "邮箱已存在,请重新输入"
  366. return
  367. }
  368. return
  369. }
  370. }
  371. br.Ret = 200
  372. br.Success = true
  373. br.Msg = "邮箱或手机号合格"
  374. }
  375. // List
  376. // @Title 用户列表
  377. // @Description 用户列表
  378. // @Param PageSize query int true "每页数据条数"
  379. // @Param CurrentIndex query int true "当前页页码,从1开始"
  380. // @Param SellerId query int true "销售id"
  381. // @Param Status query int true "用户状态"
  382. // @Param KeyWord query string true "手机号/邮箱/姓名"
  383. // @Param IsRegistered query string true "是否注册"
  384. // @Param IsSubscribed query string true "是否关注"
  385. // @Param RegisterStartDate query string true "注册开始时间"
  386. // @Param RegisterEndDate query string true "注册结束时间"
  387. // @Param CreateStartDate query string true "创建开始时间"
  388. // @Param CreateEndDate query string true "创建结束时间"
  389. // @Success 200 {object} models.LoginResp
  390. // @router /list [get]
  391. func (this *UserController) List() {
  392. br := new(models.BaseResponse).Init()
  393. defer func() {
  394. this.Data["json"] = br
  395. this.ServeJSON()
  396. }()
  397. pageSize, _ := this.GetInt("PageSize")
  398. currentIndex, _ := this.GetInt("CurrentIndex")
  399. sellerId, _ := this.GetInt("SellerId")
  400. status := this.GetString("Status")
  401. keyWord := this.GetString("KeyWord")
  402. IsRegistered := this.GetString("IsRegisterd")
  403. IsSubscribed := this.GetString("IsSubscribed")
  404. registerStartDate := this.GetString("RegisterStartDate")
  405. registerEndDate := this.GetString("RegisterEndDate")
  406. createStartDate := this.GetString("CreateStartDate")
  407. createEndDate := this.GetString("CreateEndDate")
  408. var condition string
  409. var pars []interface{}
  410. if keyWord != "" {
  411. condition += ` AND (real_name LIKE ? OR phone LIKE ? OR email LIKE ?) `
  412. pars = utils.GetLikeKeywordPars(pars, keyWord, 3)
  413. }
  414. if pageSize <= 0 {
  415. pageSize = utils.PageSize20
  416. } else if pageSize > utils.PageSize100 {
  417. pageSize = utils.PageSize100
  418. }
  419. if currentIndex <= 0 {
  420. currentIndex = 1
  421. }
  422. if sellerId > 0 {
  423. condition += " AND seller_id=? "
  424. pars = append(pars, sellerId)
  425. }
  426. switch status {
  427. case "禁用":
  428. condition += " AND status=? "
  429. pars = append(pars, 0)
  430. case "潜在":
  431. condition += " AND status=? "
  432. pars = append(pars, 1)
  433. case "正式":
  434. condition += " AND status=? "
  435. pars = append(pars, 2)
  436. }
  437. switch IsRegistered {
  438. case "是":
  439. condition += " AND is_registered=? "
  440. pars = append(pars, true)
  441. case "否":
  442. condition += " AND is_registered=? "
  443. pars = append(pars, false)
  444. }
  445. switch IsSubscribed {
  446. case "是":
  447. condition += " AND is_subscribed=? "
  448. pars = append(pars, true)
  449. case "否":
  450. condition += " AND is_subscribed=? "
  451. pars = append(pars, false)
  452. }
  453. if registerStartDate != "" {
  454. registerStartTime, er := time.Parse("2006-01-02 15:04:05", registerStartDate)
  455. if er != nil {
  456. br.Msg = "日期格式有误"
  457. return
  458. }
  459. condition += " AND register_time>? "
  460. pars = append(pars, registerStartTime)
  461. }
  462. if registerEndDate != "" {
  463. registerEndTime, er := time.Parse("2006-01-02 15:04:05", registerEndDate)
  464. if er != nil {
  465. br.Msg = "日期格式有误"
  466. return
  467. }
  468. condition += " AND register_time<? "
  469. pars = append(pars, registerEndTime)
  470. }
  471. if createStartDate != "" {
  472. createStartTime, er := time.Parse("2006-01-02 15:04:05", createStartDate)
  473. if er != nil {
  474. br.Msg = "日期格式有误"
  475. return
  476. }
  477. condition += " AND create_time>? "
  478. pars = append(pars, createStartTime)
  479. }
  480. if createEndDate != "" {
  481. createEndTime, er := time.Parse("2006-01-02 15:04:05", createEndDate)
  482. if er != nil {
  483. br.Msg = "日期格式有误"
  484. return
  485. }
  486. condition += " AND create_time<? "
  487. pars = append(pars, createEndTime)
  488. }
  489. if pageSize <= 0 {
  490. pageSize = utils.PageSize20
  491. } else if pageSize > utils.PageSize100 {
  492. pageSize = utils.PageSize100
  493. }
  494. if currentIndex <= 0 {
  495. currentIndex = 1
  496. }
  497. startSize := utils.StartIndex(currentIndex, pageSize)
  498. total, err := models.GetUserCount(condition, pars)
  499. if err != nil {
  500. br.Msg = "获取失败"
  501. br.ErrMsg = "获取失败,Err:" + err.Error()
  502. return
  503. }
  504. userList, err := models.GetUserList(condition, pars, startSize, pageSize)
  505. if err != nil {
  506. br.Msg = "查询用户失败"
  507. br.Msg = "查询用户失败,系统错误,Err:" + err.Error()
  508. return
  509. }
  510. page := paging.GetPaging(currentIndex, pageSize, total)
  511. resp := new(response.UserListResp)
  512. resp.Paging = page
  513. resp.List = userList
  514. br.Data = resp
  515. br.Ret = 200
  516. br.Success = true
  517. br.Msg = "获取成功"
  518. }
  519. // Detail
  520. // @Title 系统用户详情信息
  521. // @Description 用户详情信息
  522. // @Param UserId query int true "系统用户id"
  523. // @Success 200 {object} models.LoginResp
  524. // @router /detail [get]
  525. func (this *UserController) Detail() {
  526. br := new(models.BaseResponse).Init()
  527. defer func() {
  528. this.Data["json"] = br
  529. this.ServeJSON()
  530. }()
  531. UserId, err := this.GetInt("UserId")
  532. if err != nil {
  533. br.Msg = "参数解析错误"
  534. return
  535. }
  536. if UserId <= 0 {
  537. br.Msg = "查询用户不存在"
  538. return
  539. }
  540. user, err := models.GetUserById(UserId)
  541. if err != nil {
  542. if err == orm.ErrNoRows {
  543. br.Msg = "用户不存在或已删除,请刷新页面"
  544. return
  545. }
  546. br.Msg = "查询用户失败"
  547. br.ErrMsg = "查询用户失败,系统错误,Err:" + err.Error()
  548. return
  549. }
  550. if user == nil {
  551. br.Msg = "用户不存在或已删除,请刷新页面"
  552. return
  553. }
  554. br.Msg = "查询成功"
  555. br.Ret = 200
  556. br.Success = true
  557. br.Data = user
  558. }
  559. // Delete
  560. // @Title 系统用户详情信息
  561. // @Description 用户详情信息
  562. // @Param request body request.UserDeleteReq true "type json string"
  563. // @Success 200 {object} models.LoginResp
  564. // @router /delete [post]
  565. func (this *UserController) Delete() {
  566. br := new(models.BaseResponse).Init()
  567. defer func() {
  568. this.Data["json"] = br
  569. this.ServeJSON()
  570. }()
  571. var req request.UserDeleteReq
  572. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  573. if err != nil {
  574. br.Msg = "参数解析异常!"
  575. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  576. return
  577. }
  578. err = models.DeleteUserById(req.UserId)
  579. if err != nil {
  580. br.Msg = "删除失败"
  581. br.ErrMsg = "删除失败,系统错误,Err:" + err.Error()
  582. return
  583. }
  584. br.Msg = "删除成功"
  585. br.Success = true
  586. br.Ret = 200
  587. }