users.go 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140
  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. "fmt"
  9. "github.com/rdlucklib/rdluck_tools/paging"
  10. "strconv"
  11. "strings"
  12. "time"
  13. )
  14. // UsersController 用户
  15. type UsersController struct {
  16. BaseAuthController
  17. }
  18. // Add
  19. // @Title 新增用户
  20. // @Description 新增用户
  21. // @Param request body request.UsersAddReq true "type json string"
  22. // @Success 200 Ret=200 操作成功
  23. // @router /add [post]
  24. func (this *UsersController) Add() {
  25. br := new(models.BaseResponse).Init()
  26. defer func() {
  27. if br.ErrMsg == "" {
  28. br.IsSendEmail = false
  29. }
  30. this.Data["json"] = br
  31. this.ServeJSON()
  32. }()
  33. sysUser := this.SysUser
  34. if sysUser == nil {
  35. br.Msg = "请登录"
  36. br.ErrMsg = "请登录,SysUser Is Empty"
  37. br.Ret = 408
  38. return
  39. }
  40. var req request.UsersAddReq
  41. if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
  42. br.Msg = "参数解析异常"
  43. br.ErrMsg = fmt.Sprintf("参数解析异常, %v", e)
  44. return
  45. }
  46. req.RealName = strings.TrimSpace(req.RealName)
  47. if req.RealName == "" {
  48. br.Msg = "请输入用户姓名"
  49. return
  50. }
  51. req.AreaCode = strings.TrimSpace(req.AreaCode)
  52. if req.AreaCode == "" {
  53. br.Msg = "请选择手机号区号"
  54. return
  55. }
  56. req.Mobile = strings.TrimSpace(req.Mobile)
  57. if req.Mobile == "" {
  58. br.Msg = "请输入手机号"
  59. return
  60. }
  61. if req.AreaCode == utils.AreaCodeMainland && !utils.ValidateMobileFormatat(req.Mobile) {
  62. br.Msg = "手机号格式有误"
  63. return
  64. }
  65. // 销售如果是空的那么创建人即为销售
  66. var (
  67. sellerId int
  68. sellerName, companyName string
  69. )
  70. if req.SellerId > 0 {
  71. sellerId = req.SellerId
  72. }
  73. if req.CompanyId > 0 {
  74. companyOb := new(models.Company)
  75. companyItem, e := companyOb.GetItemById(req.CompanyId)
  76. if e != nil {
  77. if e.Error() == utils.ErrNoRow() {
  78. br.Msg = "所选机构不存在,请刷新页面"
  79. return
  80. }
  81. br.Msg = "操作失败"
  82. br.ErrMsg = fmt.Sprintf("获取机构失败, %v", e)
  83. return
  84. }
  85. companyName = companyItem.CompanyName
  86. // 未传销售ID那么取机构销售
  87. if sellerId <= 0 {
  88. sellerId = companyItem.SellerId
  89. }
  90. }
  91. if sellerId > 0 {
  92. sellerItem, e := models.GetSysUserById(sellerId)
  93. if e != nil {
  94. if e.Error() == utils.ErrNoRow() {
  95. br.Msg = "所选营业部不存在,请刷新页面"
  96. return
  97. }
  98. br.Msg = "操作失败"
  99. br.ErrMsg = fmt.Sprintf("获取营业部销售失败, %v", e)
  100. return
  101. }
  102. sellerName = sellerItem.SysRealName
  103. }
  104. // 校验手机号是否存在
  105. usersOb := new(models.Users)
  106. {
  107. cond := fmt.Sprintf(` AND %s = ?`, usersOb.Cols().Mobile)
  108. pars := make([]interface{}, 0)
  109. pars = append(pars, req.Mobile)
  110. exist, e := usersOb.GetItemByCondition(cond, pars, "")
  111. if e != nil && e.Error() != utils.ErrNoRow() {
  112. br.Msg = "操作失败"
  113. br.ErrMsg = fmt.Sprintf("获取重复手机号失败, %v", e)
  114. return
  115. }
  116. if exist != nil && exist.UserId > 0 {
  117. br.Msg = "手机号已存在"
  118. return
  119. }
  120. }
  121. usersOb.RealName = req.RealName
  122. usersOb.Mobile = req.Mobile
  123. usersOb.AreaCode = req.AreaCode
  124. usersOb.SellerId = sellerId
  125. usersOb.SellerName = sellerName
  126. usersOb.SysUserId = sysUser.SysUserId
  127. usersOb.SysUserRealName = sysUser.SysRealName
  128. usersOb.CompanyId = req.CompanyId
  129. usersOb.CompanyName = companyName
  130. usersOb.Status = models.UserStatusFormal
  131. usersOb.AuthStatus = models.AuthStatusOpen
  132. usersOb.CreateTime = time.Now().Local()
  133. usersOb.ModifyTime = time.Now().Local()
  134. if e := usersOb.Create(); e != nil {
  135. br.Msg = "操作失败"
  136. br.ErrMsg = fmt.Sprintf("新增用户失败, %v", e)
  137. return
  138. }
  139. // 操作记录
  140. go func() {
  141. recordOb := new(models.CompanyUserOperateRecord)
  142. recordOb.UserId = usersOb.UserId
  143. recordOb.Remark = fmt.Sprintf("%s新增用户", sysUser.SysRealName)
  144. recordOb.SysUserId = sysUser.SysUserId
  145. recordOb.SysUserRealName = sysUser.SysRealName
  146. recordOb.CreateTime = time.Now().Local()
  147. if e := recordOb.Create(); e != nil {
  148. utils.FileLog.Info(fmt.Sprintf("新增操作记录失败, UserId: %d, ErrMsg: %v", usersOb.UserId, e))
  149. }
  150. }()
  151. br.Ret = 200
  152. br.Msg = "操作成功"
  153. br.Success = true
  154. }
  155. // Edit
  156. // @Title 编辑用户
  157. // @Description 编辑用户
  158. // @Param request body request.UsersEditReq true "type json string"
  159. // @Success 200 Ret=200 操作成功
  160. // @router /edit [post]
  161. func (this *UsersController) Edit() {
  162. br := new(models.BaseResponse).Init()
  163. defer func() {
  164. if br.ErrMsg == "" {
  165. br.IsSendEmail = false
  166. }
  167. this.Data["json"] = br
  168. this.ServeJSON()
  169. }()
  170. sysUser := this.SysUser
  171. if sysUser == nil {
  172. br.Msg = "请登录"
  173. br.ErrMsg = "请登录,SysUser Is Empty"
  174. br.Ret = 408
  175. return
  176. }
  177. var req request.UsersEditReq
  178. if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
  179. br.Msg = "参数解析异常"
  180. br.ErrMsg = fmt.Sprintf("参数解析异常, %v", e)
  181. return
  182. }
  183. if req.UserId <= 0 {
  184. br.Msg = "参数有误"
  185. br.ErrMsg = fmt.Sprintf("参数有误, UserId: %d", req.UserId)
  186. return
  187. }
  188. req.RealName = strings.TrimSpace(req.RealName)
  189. if req.RealName == "" {
  190. br.Msg = "请输入用户姓名"
  191. return
  192. }
  193. req.AreaCode = strings.TrimSpace(req.AreaCode)
  194. if req.AreaCode == "" {
  195. br.Msg = "请选择手机号区号"
  196. return
  197. }
  198. req.Mobile = strings.TrimSpace(req.Mobile)
  199. if req.Mobile == "" {
  200. br.Msg = "请输入手机号"
  201. return
  202. }
  203. if req.AreaCode == utils.AreaCodeMainland && !utils.ValidateMobileFormatat(req.Mobile) {
  204. br.Msg = "手机号格式有误"
  205. return
  206. }
  207. // 销售如果是空的那么创建人即为销售
  208. var sellerName, companyName string
  209. if req.SellerId <= 0 {
  210. req.SellerId = sysUser.SysUserId
  211. sellerName = sysUser.SysRealName
  212. }
  213. if req.SellerId > 0 {
  214. sellerItem, e := models.GetSysUserById(req.SellerId)
  215. if e != nil {
  216. if e.Error() == utils.ErrNoRow() {
  217. br.Msg = "所选营业部不存在,请刷新页面"
  218. return
  219. }
  220. br.Msg = "操作失败"
  221. br.ErrMsg = fmt.Sprintf("获取营业部销售失败, %v", e)
  222. return
  223. }
  224. sellerName = sellerItem.SysRealName
  225. }
  226. if req.CompanyId > 0 {
  227. companyOb := new(models.Company)
  228. companyItem, e := companyOb.GetItemById(req.CompanyId)
  229. if e != nil {
  230. if e.Error() == utils.ErrNoRow() {
  231. br.Msg = "所选机构不存在,请刷新页面"
  232. return
  233. }
  234. br.Msg = "操作失败"
  235. br.ErrMsg = fmt.Sprintf("获取机构失败, %v", e)
  236. return
  237. }
  238. companyName = companyItem.CompanyName
  239. }
  240. usersOb := new(models.Users)
  241. userItem, e := usersOb.GetItemById(req.UserId)
  242. if e != nil {
  243. if e.Error() == utils.ErrNoRow() {
  244. br.Msg = "用户不存在,请刷新页面"
  245. return
  246. }
  247. br.Msg = "获取失败"
  248. br.ErrMsg = fmt.Sprintf("获取用户失败, %v", e)
  249. return
  250. }
  251. // 校验手机号是否存在
  252. {
  253. cond := fmt.Sprintf(` AND %s = ? AND %s <> ?`, usersOb.Cols().Mobile, usersOb.Cols().PrimaryId)
  254. pars := make([]interface{}, 0)
  255. pars = append(pars, req.Mobile, req.UserId)
  256. exist, e := usersOb.GetItemByCondition(cond, pars, "")
  257. if e != nil && e.Error() != utils.ErrNoRow() {
  258. br.Msg = "操作失败"
  259. br.ErrMsg = fmt.Sprintf("获取重复手机号失败, %v", e)
  260. return
  261. }
  262. if exist != nil && exist.UserId > 0 {
  263. br.Msg = "手机号已存在"
  264. return
  265. }
  266. }
  267. updateCols := []string{usersOb.Cols().RealName, usersOb.Cols().Mobile, usersOb.Cols().AreaCode}
  268. userItem.RealName = req.RealName
  269. userItem.Mobile = req.Mobile
  270. userItem.AreaCode = req.AreaCode
  271. if req.SellerId > 0 {
  272. userItem.SellerId = req.SellerId
  273. userItem.SellerName = sellerName
  274. updateCols = append(updateCols, usersOb.Cols().SellerId, usersOb.Cols().SellerName)
  275. }
  276. if req.CompanyId > 0 {
  277. userItem.CompanyId = req.CompanyId
  278. userItem.CompanyName = companyName
  279. updateCols = append(updateCols, usersOb.Cols().CompanyId, usersOb.Cols().CompanyName)
  280. }
  281. userItem.ModifyTime = time.Now().Local()
  282. if e := userItem.Update(updateCols); e != nil {
  283. br.Msg = "操作失败"
  284. br.ErrMsg = fmt.Sprintf("编辑用户失败, %v", e)
  285. return
  286. }
  287. // 操作记录
  288. go func() {
  289. recordOb := new(models.CompanyUserOperateRecord)
  290. recordOb.UserId = userItem.UserId
  291. recordOb.Remark = fmt.Sprintf("%s编辑用户", sysUser.SysRealName)
  292. recordOb.SysUserId = sysUser.SysUserId
  293. recordOb.SysUserRealName = sysUser.SysRealName
  294. recordOb.CreateTime = time.Now().Local()
  295. if e := recordOb.Create(); e != nil {
  296. utils.FileLog.Info(fmt.Sprintf("新增操作记录失败, UserId: %d, ErrMsg: %v", userItem.UserId, e))
  297. }
  298. }()
  299. br.Ret = 200
  300. br.Msg = "操作成功"
  301. br.Success = true
  302. }
  303. // CheckAdd
  304. // @Title 新增用户校验
  305. // @Description 新增用户校验
  306. // @Param request body request.UsersAddReq true "type json string"
  307. // @Success 200 Ret=200 操作成功
  308. // @router /add/check [post]
  309. func (this *UsersController) CheckAdd() {
  310. br := new(models.BaseResponse).Init()
  311. defer func() {
  312. if br.ErrMsg == "" {
  313. br.IsSendEmail = false
  314. }
  315. this.Data["json"] = br
  316. this.ServeJSON()
  317. }()
  318. sysUser := this.SysUser
  319. if sysUser == nil {
  320. br.Msg = "请登录"
  321. br.ErrMsg = "请登录,SysUser Is Empty"
  322. br.Ret = 408
  323. return
  324. }
  325. var req request.UsersAddReq
  326. if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
  327. br.Msg = "参数解析异常"
  328. br.ErrMsg = fmt.Sprintf("参数解析异常, %v", e)
  329. return
  330. }
  331. req.AreaCode = strings.TrimSpace(req.AreaCode)
  332. if req.AreaCode == "" {
  333. br.Msg = "请选择手机号区号"
  334. return
  335. }
  336. req.Mobile = strings.TrimSpace(req.Mobile)
  337. if req.Mobile == "" {
  338. br.Msg = "请输入手机号"
  339. return
  340. }
  341. if req.AreaCode == utils.AreaCodeMainland && !utils.ValidateMobileFormatat(req.Mobile) {
  342. br.Msg = "手机号格式有误"
  343. return
  344. }
  345. // 校验手机号是否存在,区分不同情况
  346. usersOb := new(models.Users)
  347. cond := fmt.Sprintf(` AND %s = ?`, usersOb.Cols().Mobile)
  348. pars := make([]interface{}, 0)
  349. pars = append(pars, req.Mobile)
  350. exist, e := usersOb.GetItemByCondition(cond, pars, "")
  351. if e != nil && e.Error() != utils.ErrNoRow() {
  352. br.Msg = "操作失败"
  353. br.ErrMsg = fmt.Sprintf("获取重复手机号失败, %v", e)
  354. return
  355. }
  356. resp := new(response.UsersAddCheckResp)
  357. resp.Tips = "校验通过"
  358. if exist != nil {
  359. // 试用客户
  360. if exist.Status == models.UserStatusTrial {
  361. resp.CheckResult = 1
  362. resp.Tips = "该客户已存在试用用户列表,是否确认将该用户移至当前客户下?"
  363. }
  364. // 个人投资者
  365. if exist.Status == models.UserStatusFormal && exist.CompanyId == 0 {
  366. resp.CheckResult = 2
  367. resp.Tips = "该用户已存在个人投资列表"
  368. }
  369. // 机构联系人
  370. if exist.Status == models.UserStatusFormal && exist.CompanyId > 0 {
  371. companyOb := new(models.Company)
  372. company, e := companyOb.GetItemById(exist.CompanyId)
  373. if e != nil {
  374. br.Msg = "操作失败"
  375. br.ErrMsg = fmt.Sprintf("获取联系人机构失败, %v", e)
  376. return
  377. }
  378. resp.CheckResult = 3
  379. resp.Tips = fmt.Sprintf("该用户已存在【%s】客户下", company.CompanyName)
  380. }
  381. }
  382. br.Data = resp
  383. br.Ret = 200
  384. br.Msg = "操作成功"
  385. br.Success = true
  386. }
  387. // Move
  388. // @Title 移动用户
  389. // @Description 移动用户
  390. // @Param request body request.UsersMoveReq true "type json string"
  391. // @Success 200 Ret=200 操作成功
  392. // @router /move [post]
  393. func (this *UsersController) Move() {
  394. br := new(models.BaseResponse).Init()
  395. defer func() {
  396. if br.ErrMsg == "" {
  397. br.IsSendEmail = false
  398. }
  399. this.Data["json"] = br
  400. this.ServeJSON()
  401. }()
  402. sysUser := this.SysUser
  403. if sysUser == nil {
  404. br.Msg = "请登录"
  405. br.ErrMsg = "请登录,SysUser Is Empty"
  406. br.Ret = 408
  407. return
  408. }
  409. var req request.UsersMoveReq
  410. if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
  411. br.Msg = "参数解析异常"
  412. br.ErrMsg = fmt.Sprintf("参数解析异常, %v", e)
  413. return
  414. }
  415. if req.UserId <= 0 {
  416. br.Msg = "请选择用户"
  417. return
  418. }
  419. if req.CompanyId <= 0 {
  420. br.Msg = "请选择机构"
  421. return
  422. }
  423. req.RealName = strings.TrimSpace(req.RealName)
  424. usersOb := new(models.Users)
  425. userItem, e := usersOb.GetItemById(req.UserId)
  426. if e != nil {
  427. if e.Error() == utils.ErrNoRow() {
  428. br.Msg = "用户不存在,请刷新页面"
  429. return
  430. }
  431. br.Msg = "操作失败"
  432. br.ErrMsg = fmt.Sprintf("获取用户失败, %v", e)
  433. return
  434. }
  435. companyOb := new(models.Company)
  436. companyItem, e := companyOb.GetItemById(req.CompanyId)
  437. if e != nil {
  438. if e.Error() == utils.ErrNoRow() {
  439. br.Msg = "机构不存在,请刷新页面"
  440. return
  441. }
  442. br.Msg = "操作失败"
  443. br.ErrMsg = fmt.Sprintf("获取机构失败, %v", e)
  444. return
  445. }
  446. userItem.CompanyId = req.CompanyId
  447. userItem.CompanyName = companyItem.CompanyName
  448. userItem.AuthStatus = companyItem.AuthStatus
  449. userItem.ModifyTime = time.Now().Local()
  450. updateCols := []string{usersOb.Cols().CompanyId, usersOb.Cols().CompanyName, usersOb.Cols().AuthStatus, usersOb.Cols().ModifyTime}
  451. if req.RealName != "" {
  452. userItem.RealName = req.RealName
  453. updateCols = append(updateCols, usersOb.Cols().RealName)
  454. }
  455. if e = userItem.Update(updateCols); e != nil {
  456. br.Msg = "操作失败"
  457. br.ErrMsg = fmt.Sprintf("移动用户失败, %v", e)
  458. return
  459. }
  460. // 操作记录
  461. go func() {
  462. recordOb := new(models.CompanyUserOperateRecord)
  463. recordOb.UserId = userItem.UserId
  464. recordOb.Remark = fmt.Sprintf("%s移动用户至【%s】", sysUser.SysRealName, companyItem.CompanyName)
  465. recordOb.SysUserId = sysUser.SysUserId
  466. recordOb.SysUserRealName = sysUser.SysRealName
  467. recordOb.CreateTime = time.Now().Local()
  468. if e := recordOb.Create(); e != nil {
  469. utils.FileLog.Info(fmt.Sprintf("新增操作记录失败, UserId: %d, MoveCompanyId: %d, ErrMsg: %v", userItem.UserId, companyItem.CompanyId, e))
  470. }
  471. }()
  472. br.Ret = 200
  473. br.Msg = "操作成功"
  474. br.Success = true
  475. }
  476. // Remove
  477. // @Title 删除用户
  478. // @Description 删除用户
  479. // @Param request body request.UsersRemoveReq true "type json string"
  480. // @Success 200 Ret=200 操作成功
  481. // @router /remove [post]
  482. func (this *UsersController) Remove() {
  483. br := new(models.BaseResponse).Init()
  484. defer func() {
  485. if br.ErrMsg == "" {
  486. br.IsSendEmail = false
  487. }
  488. this.Data["json"] = br
  489. this.ServeJSON()
  490. }()
  491. sysUser := this.SysUser
  492. if sysUser == nil {
  493. br.Msg = "请登录"
  494. br.ErrMsg = "请登录,SysUser Is Empty"
  495. br.Ret = 408
  496. return
  497. }
  498. var req request.UsersRemoveReq
  499. if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
  500. br.Msg = "参数解析异常"
  501. br.ErrMsg = fmt.Sprintf("参数解析异常, %v", e)
  502. return
  503. }
  504. if req.UserId <= 0 {
  505. br.Msg = "参数有误"
  506. br.ErrMsg = fmt.Sprintf("用户ID参数有误, UserId: %d", req.UserId)
  507. return
  508. }
  509. userOb := new(models.Users)
  510. usersItem, e := userOb.GetItemById(req.UserId)
  511. if e != nil {
  512. if e.Error() == utils.ErrNoRow() {
  513. br.Ret = 200
  514. br.Msg = "操作成功"
  515. br.Success = true
  516. return
  517. }
  518. br.Msg = "操作失败"
  519. br.ErrMsg = fmt.Sprintf("获取机构失败, %v", e)
  520. return
  521. }
  522. // 操作权限校验
  523. if sysUser.SysRoleId != utils.AdminRoleId {
  524. if sysUser.SysUserId != usersItem.SysUserId && sysUser.SysUserId != usersItem.SellerId {
  525. br.Msg = "无权操作"
  526. return
  527. }
  528. }
  529. // 删除用户并移除微信用户关联
  530. if e = userOb.RemoveUsersAndUserRecord(req.UserId); e != nil {
  531. br.Msg = "操作失败"
  532. br.ErrMsg = fmt.Sprintf("删除用户并移除微信用户关联失败, %v", e)
  533. return
  534. }
  535. // 操作记录
  536. go func() {
  537. recordOb := new(models.CompanyUserOperateRecord)
  538. recordOb.UserId = usersItem.UserId
  539. recordOb.Remark = fmt.Sprintf("%s删除用户", sysUser.SysRealName)
  540. recordOb.SysUserId = sysUser.SysUserId
  541. recordOb.SysUserRealName = sysUser.SysRealName
  542. recordOb.CreateTime = time.Now().Local()
  543. if e := recordOb.Create(); e != nil {
  544. utils.FileLog.Info(fmt.Sprintf("新增操作记录失败, UserId: %d, ErrMsg: %v", usersItem.UserId, e))
  545. }
  546. }()
  547. br.Ret = 200
  548. br.Msg = "操作成功"
  549. br.Success = true
  550. }
  551. // TransFormal
  552. // @Title 转正式
  553. // @Description 转正式
  554. // @Param request body request.UsersTransFormalReq true "type json string"
  555. // @Success 200 Ret=200 操作成功
  556. // @router /trans_formal [post]
  557. func (this *UsersController) TransFormal() {
  558. br := new(models.BaseResponse).Init()
  559. defer func() {
  560. if br.ErrMsg == "" {
  561. br.IsSendEmail = false
  562. }
  563. this.Data["json"] = br
  564. this.ServeJSON()
  565. }()
  566. sysUser := this.SysUser
  567. if sysUser == nil {
  568. br.Msg = "请登录"
  569. br.ErrMsg = "请登录,SysUser Is Empty"
  570. br.Ret = 408
  571. return
  572. }
  573. var req request.UsersTransFormalReq
  574. if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
  575. br.Msg = "参数解析异常"
  576. br.ErrMsg = fmt.Sprintf("参数解析异常, %v", e)
  577. return
  578. }
  579. if req.UserId <= 0 {
  580. br.Msg = "参数有误"
  581. br.ErrMsg = fmt.Sprintf("用户ID有误, UserId: %d", req.UserId)
  582. return
  583. }
  584. req.RealName = strings.TrimSpace(req.RealName)
  585. if req.RealName == "" {
  586. br.Msg = "请输入用户姓名"
  587. return
  588. }
  589. // 用户校验
  590. usersOb := new(models.Users)
  591. userItem, e := usersOb.GetItemById(req.UserId)
  592. if e != nil {
  593. if e.Error() == utils.ErrNoRow() {
  594. br.Msg = "用户不存在,请刷新页面"
  595. return
  596. }
  597. br.Msg = "操作失败"
  598. br.ErrMsg = fmt.Sprintf("获取用户失败, %v", e)
  599. return
  600. }
  601. if userItem.Status != models.UserStatusTrial {
  602. br.Msg = "该用户不是试用客户"
  603. return
  604. }
  605. // 用户类型
  606. var (
  607. companyId int
  608. companyName string
  609. authStatus int
  610. sellerId int
  611. sellerName string
  612. )
  613. switch req.UserType {
  614. case models.UserTypePerson:
  615. if req.SellerId <= 0 {
  616. br.Msg = "请选择营业部"
  617. return
  618. }
  619. authStatus = models.AuthStatusOpen
  620. seller, e := models.GetSysUserById(req.SellerId)
  621. if e != nil {
  622. if e.Error() == utils.ErrNoRow() {
  623. br.Msg = "销售不存在,请刷新页面后重试"
  624. return
  625. }
  626. br.Msg = "操作失败"
  627. br.ErrMsg = fmt.Sprintf("获取销售失败, %v", e)
  628. return
  629. }
  630. sellerId = req.SellerId
  631. sellerName = seller.SysRealName
  632. case models.UserTypeCompany:
  633. if req.CompanyId <= 0 {
  634. br.Msg = "请选择所属机构"
  635. return
  636. }
  637. companyOb := new(models.Company)
  638. companyItem, e := companyOb.GetItemById(req.CompanyId)
  639. if e != nil {
  640. if e.Error() == utils.ErrNoRow() {
  641. br.Msg = "所选机构不存在,请刷新页面"
  642. return
  643. }
  644. br.Msg = "操作失败"
  645. br.ErrMsg = fmt.Sprintf("获取机构失败, %v", e)
  646. return
  647. }
  648. companyId = companyItem.CompanyId
  649. companyName = companyItem.CompanyName
  650. authStatus = companyItem.AuthStatus
  651. sellerId = companyItem.SellerId
  652. sellerName = companyItem.SellerName
  653. default:
  654. br.Msg = "客户类型有误"
  655. br.ErrMsg = fmt.Sprintf("客户类型有误, UserType: %d", req.UserType)
  656. return
  657. }
  658. // 转正式
  659. userItem.RealName = req.RealName
  660. userItem.SellerId = sellerId
  661. userItem.SellerName = sellerName
  662. userItem.CompanyId = companyId
  663. userItem.CompanyName = companyName
  664. userItem.SysUserId = sysUser.SysUserId
  665. userItem.SysUserRealName = sysUser.SysRealName
  666. userItem.Status = models.UserStatusFormal
  667. userItem.AuthStatus = authStatus
  668. userItem.ModifyTime = time.Now().Local()
  669. updateCols := []string{
  670. usersOb.Cols().RealName, usersOb.Cols().SellerId, usersOb.Cols().SellerName, usersOb.Cols().CompanyId, usersOb.Cols().CompanyName,
  671. usersOb.Cols().SysUserId, usersOb.Cols().SysUserRealName, usersOb.Cols().Status, usersOb.Cols().AuthStatus, usersOb.Cols().ModifyTime,
  672. }
  673. if e := userItem.Update(updateCols); e != nil {
  674. br.Msg = "操作失败"
  675. br.ErrMsg = fmt.Sprintf("用户转正式失败, %v", e)
  676. return
  677. }
  678. // 操作记录
  679. go func() {
  680. recordOb := new(models.CompanyUserOperateRecord)
  681. recordOb.UserId = userItem.UserId
  682. recordOb.Remark = fmt.Sprintf("%s转正式", sysUser.SysRealName)
  683. recordOb.SysUserId = sysUser.SysUserId
  684. recordOb.SysUserRealName = sysUser.SysRealName
  685. recordOb.CreateTime = time.Now().Local()
  686. if e := recordOb.Create(); e != nil {
  687. utils.FileLog.Info(fmt.Sprintf("新增操作记录失败, UserId: %d, ErrMsg: %v", userItem.UserId, e))
  688. }
  689. }()
  690. br.Ret = 200
  691. br.Msg = "操作成功"
  692. br.Success = true
  693. }
  694. // Detail
  695. // @Title 用户详情
  696. // @Description 用户详情
  697. // @Param UserId query int true "用户ID"
  698. // @Success 200 {object} models.UsersItem
  699. // @router /detail [get]
  700. func (this *UsersController) Detail() {
  701. br := new(models.BaseResponse).Init()
  702. defer func() {
  703. if br.ErrMsg == "" {
  704. br.IsSendEmail = false
  705. }
  706. this.Data["json"] = br
  707. this.ServeJSON()
  708. }()
  709. sysUser := this.SysUser
  710. if sysUser == nil {
  711. br.Msg = "请登录"
  712. br.ErrMsg = "请登录,SysUser Is Empty"
  713. br.Ret = 408
  714. return
  715. }
  716. userId, _ := this.GetInt("UserId")
  717. if userId <= 0 {
  718. br.Msg = "参数有误"
  719. br.ErrMsg = fmt.Sprintf("参数有误, %d", userId)
  720. return
  721. }
  722. usersOb := new(models.Users)
  723. userItem, e := usersOb.GetItemById(userId)
  724. if e != nil {
  725. if e.Error() == utils.ErrNoRow() {
  726. br.Msg = "用户不存在,请刷新页面"
  727. return
  728. }
  729. br.Msg = "获取失败"
  730. br.ErrMsg = fmt.Sprintf("获取用户失败, %v", e)
  731. return
  732. }
  733. resp := userItem.Format2Item()
  734. br.Data = resp
  735. br.Ret = 200
  736. br.Msg = "获取成功"
  737. br.Success = true
  738. }
  739. // PageList
  740. // @Title 用户列表-分页
  741. // @Description 用户列表-分页
  742. // @Param request body request.UsersListForm true "type json string"
  743. // @Success 200 {object} response.UsersPageListResp
  744. // @router /page_list [get]
  745. func (this *UsersController) PageList() {
  746. br := new(models.BaseResponse).Init()
  747. defer func() {
  748. if br.ErrMsg == "" {
  749. br.IsSendEmail = false
  750. }
  751. this.Data["json"] = br
  752. this.ServeJSON()
  753. }()
  754. sysUser := this.SysUser
  755. if sysUser == nil {
  756. br.Msg = "请登录"
  757. br.ErrMsg = "请登录,SysUser Is Empty"
  758. br.Ret = 408
  759. return
  760. }
  761. params := new(request.UsersListForm)
  762. if e := this.ParseForm(params); e != nil {
  763. br.Msg = "参数解析异常"
  764. br.ErrMsg = fmt.Sprintf("参数解析异常, %v", e)
  765. return
  766. }
  767. resp := new(response.UsersPageListResp)
  768. usersOb := new(models.Users)
  769. // 仅超管/创建人/对应销售可见
  770. cond := ``
  771. pars := make([]interface{}, 0)
  772. if params.UserStatus != models.UserStatusTrial && params.CompanyId <= 0 && sysUser.SysRoleId != utils.AdminRoleId {
  773. cond += fmt.Sprintf(` AND (%s = ? OR %s = ?)`, usersOb.Cols().SysUserId, usersOb.Cols().SellerId)
  774. pars = append(pars, sysUser.SysUserId, sysUser.SysUserId)
  775. }
  776. // 筛选项
  777. {
  778. // 机构,默认为个人
  779. cond += fmt.Sprintf(` AND %s = ?`, usersOb.Cols().CompanyId)
  780. pars = append(pars, params.CompanyId)
  781. // 用户类型
  782. if params.UserStatus > 0 {
  783. if params.UserStatus != models.UserStatusTrial && params.UserStatus != models.UserStatusFormal {
  784. br.Msg = "用户类型有误"
  785. br.ErrMsg = fmt.Sprintf("参数用户类型有误, UserStatus: %d", params.UserStatus)
  786. return
  787. }
  788. cond += fmt.Sprintf(` AND %s = ?`, usersOb.Cols().Status)
  789. pars = append(pars, params.UserStatus)
  790. }
  791. // 关键词(联系人名称/联系人手机号)
  792. keywords := strings.TrimSpace(params.Keywords)
  793. if keywords != "" {
  794. kw := fmt.Sprint("%", keywords, "%")
  795. cond += fmt.Sprintf(` AND (%s LIKE ? OR %s LIKE ?)`, usersOb.Cols().RealName, usersOb.Cols().Mobile)
  796. pars = append(pars, kw, kw)
  797. }
  798. // 营业部
  799. params.SellerIds = strings.TrimSpace(params.SellerIds)
  800. if params.SellerIds != "" {
  801. var sellerIds []int
  802. idArr := strings.Split(params.SellerIds, ",")
  803. for _, v := range idArr {
  804. id, _ := strconv.Atoi(v)
  805. if id > 0 {
  806. sellerIds = append(sellerIds, id)
  807. }
  808. }
  809. if len(sellerIds) == 0 {
  810. page := paging.GetPaging(params.CurrentIndex, params.PageSize, 0)
  811. resp.Paging = page
  812. resp.List = make([]*models.UsersItem, 0)
  813. br.Data = resp
  814. br.Ret = 200
  815. br.Msg = "获取成功"
  816. br.Success = true
  817. return
  818. }
  819. cond += fmt.Sprintf(` AND %s IN (%s)`, usersOb.Cols().SellerId, utils.GetOrmInReplace(len(sellerIds)))
  820. pars = append(pars, sellerIds)
  821. }
  822. // 创建时间区间
  823. params.StartTime = strings.TrimSpace(params.StartTime)
  824. params.EndTime = strings.TrimSpace(params.EndTime)
  825. if params.StartTime != "" && params.EndTime != "" {
  826. _, e := time.ParseInLocation(utils.FormatDate, params.StartTime, time.Local)
  827. if e != nil {
  828. br.Msg = "开始时间格式有误"
  829. return
  830. }
  831. _, e = time.ParseInLocation(utils.FormatDate, params.EndTime, time.Local)
  832. if e != nil {
  833. br.Msg = "结束时间格式有误"
  834. return
  835. }
  836. cond += fmt.Sprintf(` AND (%s BETWEEN ? AND ?)`, usersOb.Cols().CreateTime)
  837. pars = append(pars, fmt.Sprintf("%s 00:00:00", params.StartTime), fmt.Sprintf("%s 23:59:59", params.EndTime))
  838. }
  839. }
  840. // 分页
  841. var startSize int
  842. if params.PageSize <= 0 {
  843. params.PageSize = utils.PageSize20
  844. }
  845. if params.CurrentIndex <= 0 {
  846. params.CurrentIndex = 1
  847. }
  848. startSize = utils.StartIndex(params.CurrentIndex, params.PageSize)
  849. // 排序
  850. orderRule := fmt.Sprintf(`%s DESC`, usersOb.Cols().CreateTime)
  851. if params.SortField > 0 && params.SortRule > 0 {
  852. fieldMap := map[int]string{
  853. 1: usersOb.Cols().CreateTime, 2: usersOb.Cols().RegisterTime, 3: usersOb.Cols().LastReadTime, 4: usersOb.Cols().ReadTimes,
  854. }
  855. ruleMap := map[int]string{1: "ASC", 2: "DESC"}
  856. if fieldMap[params.SortField] != "" && ruleMap[params.SortRule] != "" {
  857. orderRule = fmt.Sprintf("%s %s", fieldMap[params.SortField], ruleMap[params.SortRule])
  858. }
  859. }
  860. total, e := usersOb.GetCountByCondition(cond, pars)
  861. if e != nil {
  862. br.Msg = "获取失败"
  863. br.ErrMsg = fmt.Sprintf("获取用户总数失败, %v", e)
  864. return
  865. }
  866. list, e := usersOb.GetPageItemsByCondition(cond, pars, []string{}, orderRule, startSize, params.PageSize)
  867. if e != nil {
  868. br.Msg = "获取失败"
  869. br.ErrMsg = fmt.Sprintf("获取用户分页列表失败, %v", e)
  870. return
  871. }
  872. respList := make([]*models.UsersItem, 0)
  873. for _, v := range list {
  874. respList = append(respList, v.Format2Item())
  875. }
  876. page := paging.GetPaging(params.CurrentIndex, params.PageSize, total)
  877. resp.Paging = page
  878. resp.List = respList
  879. br.Data = resp
  880. br.Ret = 200
  881. br.Msg = "获取成功"
  882. br.Success = true
  883. }
  884. // Search
  885. // @Title 用户列表-搜索
  886. // @Description 用户列表-搜索
  887. // @Param request body request.UsersListForm true "type json string"
  888. // @Success 200 {object} response.UsersPageListResp
  889. // @router /search [get]
  890. func (this *UsersController) Search() {
  891. br := new(models.BaseResponse).Init()
  892. defer func() {
  893. if br.ErrMsg == "" {
  894. br.IsSendEmail = false
  895. }
  896. this.Data["json"] = br
  897. this.ServeJSON()
  898. }()
  899. sysUser := this.SysUser
  900. if sysUser == nil {
  901. br.Msg = "请登录"
  902. br.ErrMsg = "请登录,SysUser Is Empty"
  903. br.Ret = 408
  904. return
  905. }
  906. params := new(request.UsersListForm)
  907. if e := this.ParseForm(params); e != nil {
  908. br.Msg = "参数解析异常"
  909. br.ErrMsg = fmt.Sprintf("参数解析异常, %v", e)
  910. return
  911. }
  912. // 用户检索,所有人可见
  913. resp := new(response.UsersPageListResp)
  914. usersOb := new(models.Users)
  915. cond := ``
  916. pars := make([]interface{}, 0)
  917. // 关键词(机构名称/联系人名称/联系人手机号)
  918. keywords := strings.TrimSpace(params.Keywords)
  919. if keywords != "" {
  920. kw := fmt.Sprint("%", keywords, "%")
  921. cond += fmt.Sprintf(` AND (%s LIKE ? OR %s LIKE ? OR %s LIKE ?)`, usersOb.Cols().CompanyName, usersOb.Cols().RealName, usersOb.Cols().Mobile)
  922. pars = append(pars, kw, kw, kw)
  923. }
  924. // 分页
  925. var startSize int
  926. if params.PageSize <= 0 {
  927. params.PageSize = utils.PageSize20
  928. }
  929. if params.CurrentIndex <= 0 {
  930. params.CurrentIndex = 1
  931. }
  932. startSize = utils.StartIndex(params.CurrentIndex, params.PageSize)
  933. total, e := usersOb.GetCountByCondition(cond, pars)
  934. if e != nil {
  935. br.Msg = "获取失败"
  936. br.ErrMsg = fmt.Sprintf("获取用户总数失败, %v", e)
  937. return
  938. }
  939. list, e := usersOb.GetPageItemsByCondition(cond, pars, []string{}, "", startSize, params.PageSize)
  940. if e != nil {
  941. br.Msg = "获取失败"
  942. br.ErrMsg = fmt.Sprintf("获取用户分页列表失败, %v", e)
  943. return
  944. }
  945. respList := make([]*models.UsersItem, 0)
  946. for _, v := range list {
  947. respList = append(respList, v.Format2Item())
  948. }
  949. page := paging.GetPaging(params.CurrentIndex, params.PageSize, total)
  950. resp.Paging = page
  951. resp.List = respList
  952. br.Data = resp
  953. br.Ret = 200
  954. br.Msg = "获取成功"
  955. br.Success = true
  956. }
  957. // OperateRecords
  958. // @Title 用户-操作记录
  959. // @Description 用户列表-操作记录
  960. // @Param UserId query int true "用户ID"
  961. // @Success 200 {object} models.CompanyUserOperateRecordItem
  962. // @router /operate_records [get]
  963. func (this *UsersController) OperateRecords() {
  964. br := new(models.BaseResponse).Init()
  965. defer func() {
  966. if br.ErrMsg == "" {
  967. br.IsSendEmail = false
  968. }
  969. this.Data["json"] = br
  970. this.ServeJSON()
  971. }()
  972. sysUser := this.SysUser
  973. if sysUser == nil {
  974. br.Msg = "请登录"
  975. br.ErrMsg = "请登录,SysUser Is Empty"
  976. br.Ret = 408
  977. return
  978. }
  979. userId, _ := this.GetInt("UserId")
  980. if userId <= 0 {
  981. br.Msg = "参数有误"
  982. br.ErrMsg = fmt.Sprintf("参数有误, %d", userId)
  983. return
  984. }
  985. resp := make([]*models.CompanyUserOperateRecordItem, 0)
  986. recordOb := new(models.CompanyUserOperateRecord)
  987. cond := fmt.Sprintf(` AND %s = ?`, recordOb.Cols().UserId)
  988. pars := make([]interface{}, 0)
  989. pars = append(pars, userId)
  990. list, e := recordOb.GetItemsByCondition(cond, pars, []string{}, "")
  991. if e != nil {
  992. br.Msg = "获取失败"
  993. br.ErrMsg = fmt.Sprintf("获取操作记录列表失败, %v", e)
  994. return
  995. }
  996. for _, v := range list {
  997. resp = append(resp, v.Format2Item())
  998. }
  999. br.Data = resp
  1000. br.Ret = 200
  1001. br.Msg = "获取成功"
  1002. br.Success = true
  1003. }
  1004. // TransAuth
  1005. // @Title 切换阅读权限
  1006. // @Description 切换阅读权限
  1007. // @Param request body request.UsersTransAuthReq true "type json string"
  1008. // @Success 200 Ret=200 操作成功
  1009. // @router /trans_auth [post]
  1010. func (this *UsersController) TransAuth() {
  1011. br := new(models.BaseResponse).Init()
  1012. defer func() {
  1013. if br.ErrMsg == "" {
  1014. br.IsSendEmail = false
  1015. }
  1016. this.Data["json"] = br
  1017. this.ServeJSON()
  1018. }()
  1019. sysUser := this.SysUser
  1020. if sysUser == nil {
  1021. br.Msg = "请登录"
  1022. br.ErrMsg = "请登录,SysUser Is Empty"
  1023. br.Ret = 408
  1024. return
  1025. }
  1026. var req request.UsersTransAuthReq
  1027. if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
  1028. br.Msg = "参数解析异常"
  1029. br.ErrMsg = fmt.Sprintf("参数解析异常, %v", e)
  1030. return
  1031. }
  1032. if req.UserId <= 0 {
  1033. br.Msg = "参数有误"
  1034. br.ErrMsg = fmt.Sprintf("参数有误, UserId: %d", req.UserId)
  1035. return
  1036. }
  1037. usersOb := new(models.Users)
  1038. usersItem, e := usersOb.GetItemById(req.UserId)
  1039. if e != nil {
  1040. if e.Error() == utils.ErrNoRow() {
  1041. br.Ret = 200
  1042. br.Msg = "操作成功"
  1043. br.Success = true
  1044. return
  1045. }
  1046. br.Msg = "操作失败"
  1047. br.ErrMsg = fmt.Sprintf("获取用户失败, %v", e)
  1048. return
  1049. }
  1050. // 操作权限校验
  1051. if sysUser.SysRoleId != utils.AdminRoleId {
  1052. if sysUser.SysUserId != usersItem.SysUserId && sysUser.SysUserId != usersItem.SellerId {
  1053. br.Msg = "无权操作"
  1054. return
  1055. }
  1056. }
  1057. transMapping := map[int]int{models.AuthStatusClose: models.AuthStatusOpen, models.AuthStatusOpen: models.AuthStatusClose}
  1058. optRemarkMapping := map[int]string{models.AuthStatusClose: "关闭", models.AuthStatusOpen: "开启"}
  1059. usersItem.AuthStatus = transMapping[usersItem.AuthStatus]
  1060. usersItem.ModifyTime = time.Now().Local()
  1061. updateCols := []string{usersOb.Cols().AuthStatus, usersOb.Cols().ModifyTime}
  1062. if e = usersItem.Update(updateCols); e != nil {
  1063. br.Msg = "操作失败"
  1064. br.ErrMsg = fmt.Sprintf("切换用户阅读权限失败, %v", e)
  1065. return
  1066. }
  1067. // 操作记录
  1068. go func() {
  1069. recordOb := new(models.CompanyUserOperateRecord)
  1070. recordOb.UserId = usersItem.UserId
  1071. recordOb.Remark = fmt.Sprintf("%s%s用户权限", sysUser.SysRealName, optRemarkMapping[usersItem.AuthStatus])
  1072. recordOb.SysUserId = sysUser.SysUserId
  1073. recordOb.SysUserRealName = sysUser.SysRealName
  1074. recordOb.CreateTime = time.Now().Local()
  1075. if e := recordOb.Create(); e != nil {
  1076. utils.FileLog.Info(fmt.Sprintf("新增操作记录失败, UserId: %d, ErrMsg: %v", usersItem.UserId, e))
  1077. }
  1078. }()
  1079. br.Ret = 200
  1080. br.Msg = "操作成功"
  1081. br.Success = true
  1082. }