users.go 31 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142
  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. resp.UserId = exist.UserId
  360. // 试用客户
  361. if exist.Status == models.UserStatusTrial {
  362. resp.CheckResult = 1
  363. resp.Tips = "该客户已存在试用用户列表,是否确认将该用户移至当前客户下?"
  364. }
  365. // 个人投资者
  366. if exist.Status == models.UserStatusFormal && exist.CompanyId == 0 {
  367. resp.CheckResult = 2
  368. resp.Tips = "该用户已存在个人投资列表"
  369. }
  370. // 机构联系人
  371. if exist.Status == models.UserStatusFormal && exist.CompanyId > 0 {
  372. companyOb := new(models.Company)
  373. company, e := companyOb.GetItemById(exist.CompanyId)
  374. if e != nil {
  375. br.Msg = "操作失败"
  376. br.ErrMsg = fmt.Sprintf("获取联系人机构失败, %v", e)
  377. return
  378. }
  379. resp.CheckResult = 3
  380. resp.Tips = fmt.Sprintf("该用户已存在【%s】客户下", company.CompanyName)
  381. }
  382. }
  383. br.Data = resp
  384. br.Ret = 200
  385. br.Msg = "操作成功"
  386. br.Success = true
  387. }
  388. // Move
  389. // @Title 移动用户
  390. // @Description 移动用户
  391. // @Param request body request.UsersMoveReq true "type json string"
  392. // @Success 200 Ret=200 操作成功
  393. // @router /move [post]
  394. func (this *UsersController) Move() {
  395. br := new(models.BaseResponse).Init()
  396. defer func() {
  397. if br.ErrMsg == "" {
  398. br.IsSendEmail = false
  399. }
  400. this.Data["json"] = br
  401. this.ServeJSON()
  402. }()
  403. sysUser := this.SysUser
  404. if sysUser == nil {
  405. br.Msg = "请登录"
  406. br.ErrMsg = "请登录,SysUser Is Empty"
  407. br.Ret = 408
  408. return
  409. }
  410. var req request.UsersMoveReq
  411. if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
  412. br.Msg = "参数解析异常"
  413. br.ErrMsg = fmt.Sprintf("参数解析异常, %v", e)
  414. return
  415. }
  416. if req.UserId <= 0 {
  417. br.Msg = "请选择用户"
  418. return
  419. }
  420. if req.CompanyId <= 0 {
  421. br.Msg = "请选择机构"
  422. return
  423. }
  424. req.RealName = strings.TrimSpace(req.RealName)
  425. usersOb := new(models.Users)
  426. userItem, e := usersOb.GetItemById(req.UserId)
  427. if e != nil {
  428. if e.Error() == utils.ErrNoRow() {
  429. br.Msg = "用户不存在,请刷新页面"
  430. return
  431. }
  432. br.Msg = "操作失败"
  433. br.ErrMsg = fmt.Sprintf("获取用户失败, %v", e)
  434. return
  435. }
  436. companyOb := new(models.Company)
  437. companyItem, e := companyOb.GetItemById(req.CompanyId)
  438. if e != nil {
  439. if e.Error() == utils.ErrNoRow() {
  440. br.Msg = "机构不存在,请刷新页面"
  441. return
  442. }
  443. br.Msg = "操作失败"
  444. br.ErrMsg = fmt.Sprintf("获取机构失败, %v", e)
  445. return
  446. }
  447. userItem.CompanyId = req.CompanyId
  448. userItem.CompanyName = companyItem.CompanyName
  449. userItem.AuthStatus = companyItem.AuthStatus
  450. userItem.Status = models.UserStatusFormal
  451. userItem.ModifyTime = time.Now().Local()
  452. updateCols := []string{usersOb.Cols().CompanyId, usersOb.Cols().CompanyName, usersOb.Cols().AuthStatus, usersOb.Cols().Status, usersOb.Cols().ModifyTime}
  453. if req.RealName != "" {
  454. userItem.RealName = req.RealName
  455. updateCols = append(updateCols, usersOb.Cols().RealName)
  456. }
  457. if e = userItem.Update(updateCols); e != nil {
  458. br.Msg = "操作失败"
  459. br.ErrMsg = fmt.Sprintf("移动用户失败, %v", e)
  460. return
  461. }
  462. // 操作记录
  463. go func() {
  464. recordOb := new(models.CompanyUserOperateRecord)
  465. recordOb.UserId = userItem.UserId
  466. recordOb.Remark = fmt.Sprintf("%s移动用户至【%s】", sysUser.SysRealName, companyItem.CompanyName)
  467. recordOb.SysUserId = sysUser.SysUserId
  468. recordOb.SysUserRealName = sysUser.SysRealName
  469. recordOb.CreateTime = time.Now().Local()
  470. if e := recordOb.Create(); e != nil {
  471. utils.FileLog.Info(fmt.Sprintf("新增操作记录失败, UserId: %d, MoveCompanyId: %d, ErrMsg: %v", userItem.UserId, companyItem.CompanyId, e))
  472. }
  473. }()
  474. br.Ret = 200
  475. br.Msg = "操作成功"
  476. br.Success = true
  477. }
  478. // Remove
  479. // @Title 删除用户
  480. // @Description 删除用户
  481. // @Param request body request.UsersRemoveReq true "type json string"
  482. // @Success 200 Ret=200 操作成功
  483. // @router /remove [post]
  484. func (this *UsersController) Remove() {
  485. br := new(models.BaseResponse).Init()
  486. defer func() {
  487. if br.ErrMsg == "" {
  488. br.IsSendEmail = false
  489. }
  490. this.Data["json"] = br
  491. this.ServeJSON()
  492. }()
  493. sysUser := this.SysUser
  494. if sysUser == nil {
  495. br.Msg = "请登录"
  496. br.ErrMsg = "请登录,SysUser Is Empty"
  497. br.Ret = 408
  498. return
  499. }
  500. var req request.UsersRemoveReq
  501. if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
  502. br.Msg = "参数解析异常"
  503. br.ErrMsg = fmt.Sprintf("参数解析异常, %v", e)
  504. return
  505. }
  506. if req.UserId <= 0 {
  507. br.Msg = "参数有误"
  508. br.ErrMsg = fmt.Sprintf("用户ID参数有误, UserId: %d", req.UserId)
  509. return
  510. }
  511. userOb := new(models.Users)
  512. usersItem, e := userOb.GetItemById(req.UserId)
  513. if e != nil {
  514. if e.Error() == utils.ErrNoRow() {
  515. br.Ret = 200
  516. br.Msg = "操作成功"
  517. br.Success = true
  518. return
  519. }
  520. br.Msg = "操作失败"
  521. br.ErrMsg = fmt.Sprintf("获取机构失败, %v", e)
  522. return
  523. }
  524. // 操作权限校验
  525. if sysUser.SysRoleId != utils.AdminRoleId {
  526. if sysUser.SysUserId != usersItem.SysUserId && sysUser.SysUserId != usersItem.SellerId {
  527. br.Msg = "无权操作"
  528. return
  529. }
  530. }
  531. // 删除用户并移除微信用户关联
  532. if e = userOb.RemoveUsersAndUserRecord(req.UserId); e != nil {
  533. br.Msg = "操作失败"
  534. br.ErrMsg = fmt.Sprintf("删除用户并移除微信用户关联失败, %v", e)
  535. return
  536. }
  537. // 操作记录
  538. go func() {
  539. recordOb := new(models.CompanyUserOperateRecord)
  540. recordOb.UserId = usersItem.UserId
  541. recordOb.Remark = fmt.Sprintf("%s删除用户", sysUser.SysRealName)
  542. recordOb.SysUserId = sysUser.SysUserId
  543. recordOb.SysUserRealName = sysUser.SysRealName
  544. recordOb.CreateTime = time.Now().Local()
  545. if e := recordOb.Create(); e != nil {
  546. utils.FileLog.Info(fmt.Sprintf("新增操作记录失败, UserId: %d, ErrMsg: %v", usersItem.UserId, e))
  547. }
  548. }()
  549. br.Ret = 200
  550. br.Msg = "操作成功"
  551. br.Success = true
  552. }
  553. // TransFormal
  554. // @Title 转正式
  555. // @Description 转正式
  556. // @Param request body request.UsersTransFormalReq true "type json string"
  557. // @Success 200 Ret=200 操作成功
  558. // @router /trans_formal [post]
  559. func (this *UsersController) TransFormal() {
  560. br := new(models.BaseResponse).Init()
  561. defer func() {
  562. if br.ErrMsg == "" {
  563. br.IsSendEmail = false
  564. }
  565. this.Data["json"] = br
  566. this.ServeJSON()
  567. }()
  568. sysUser := this.SysUser
  569. if sysUser == nil {
  570. br.Msg = "请登录"
  571. br.ErrMsg = "请登录,SysUser Is Empty"
  572. br.Ret = 408
  573. return
  574. }
  575. var req request.UsersTransFormalReq
  576. if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
  577. br.Msg = "参数解析异常"
  578. br.ErrMsg = fmt.Sprintf("参数解析异常, %v", e)
  579. return
  580. }
  581. if req.UserId <= 0 {
  582. br.Msg = "参数有误"
  583. br.ErrMsg = fmt.Sprintf("用户ID有误, UserId: %d", req.UserId)
  584. return
  585. }
  586. req.RealName = strings.TrimSpace(req.RealName)
  587. if req.RealName == "" {
  588. br.Msg = "请输入用户姓名"
  589. return
  590. }
  591. // 用户校验
  592. usersOb := new(models.Users)
  593. userItem, e := usersOb.GetItemById(req.UserId)
  594. if e != nil {
  595. if e.Error() == utils.ErrNoRow() {
  596. br.Msg = "用户不存在,请刷新页面"
  597. return
  598. }
  599. br.Msg = "操作失败"
  600. br.ErrMsg = fmt.Sprintf("获取用户失败, %v", e)
  601. return
  602. }
  603. if userItem.Status != models.UserStatusTrial {
  604. br.Msg = "该用户不是试用客户"
  605. return
  606. }
  607. // 用户类型
  608. var (
  609. companyId int
  610. companyName string
  611. authStatus int
  612. sellerId int
  613. sellerName string
  614. )
  615. switch req.UserType {
  616. case models.UserTypePerson:
  617. if req.SellerId <= 0 {
  618. br.Msg = "请选择营业部"
  619. return
  620. }
  621. authStatus = models.AuthStatusOpen
  622. seller, e := models.GetSysUserById(req.SellerId)
  623. if e != nil {
  624. if e.Error() == utils.ErrNoRow() {
  625. br.Msg = "销售不存在,请刷新页面后重试"
  626. return
  627. }
  628. br.Msg = "操作失败"
  629. br.ErrMsg = fmt.Sprintf("获取销售失败, %v", e)
  630. return
  631. }
  632. sellerId = req.SellerId
  633. sellerName = seller.SysRealName
  634. case models.UserTypeCompany:
  635. if req.CompanyId <= 0 {
  636. br.Msg = "请选择所属机构"
  637. return
  638. }
  639. companyOb := new(models.Company)
  640. companyItem, e := companyOb.GetItemById(req.CompanyId)
  641. if e != nil {
  642. if e.Error() == utils.ErrNoRow() {
  643. br.Msg = "所选机构不存在,请刷新页面"
  644. return
  645. }
  646. br.Msg = "操作失败"
  647. br.ErrMsg = fmt.Sprintf("获取机构失败, %v", e)
  648. return
  649. }
  650. companyId = companyItem.CompanyId
  651. companyName = companyItem.CompanyName
  652. authStatus = companyItem.AuthStatus
  653. sellerId = companyItem.SellerId
  654. sellerName = companyItem.SellerName
  655. default:
  656. br.Msg = "客户类型有误"
  657. br.ErrMsg = fmt.Sprintf("客户类型有误, UserType: %d", req.UserType)
  658. return
  659. }
  660. // 转正式
  661. userItem.RealName = req.RealName
  662. userItem.SellerId = sellerId
  663. userItem.SellerName = sellerName
  664. userItem.CompanyId = companyId
  665. userItem.CompanyName = companyName
  666. userItem.SysUserId = sysUser.SysUserId
  667. userItem.SysUserRealName = sysUser.SysRealName
  668. userItem.Status = models.UserStatusFormal
  669. userItem.AuthStatus = authStatus
  670. userItem.ModifyTime = time.Now().Local()
  671. updateCols := []string{
  672. usersOb.Cols().RealName, usersOb.Cols().SellerId, usersOb.Cols().SellerName, usersOb.Cols().CompanyId, usersOb.Cols().CompanyName,
  673. usersOb.Cols().SysUserId, usersOb.Cols().SysUserRealName, usersOb.Cols().Status, usersOb.Cols().AuthStatus, usersOb.Cols().ModifyTime,
  674. }
  675. if e := userItem.Update(updateCols); e != nil {
  676. br.Msg = "操作失败"
  677. br.ErrMsg = fmt.Sprintf("用户转正式失败, %v", e)
  678. return
  679. }
  680. // 操作记录
  681. go func() {
  682. recordOb := new(models.CompanyUserOperateRecord)
  683. recordOb.UserId = userItem.UserId
  684. recordOb.Remark = fmt.Sprintf("%s试用转正式", sysUser.SysRealName)
  685. recordOb.SysUserId = sysUser.SysUserId
  686. recordOb.SysUserRealName = sysUser.SysRealName
  687. recordOb.CreateTime = time.Now().Local()
  688. if e := recordOb.Create(); e != nil {
  689. utils.FileLog.Info(fmt.Sprintf("新增操作记录失败, UserId: %d, ErrMsg: %v", userItem.UserId, e))
  690. }
  691. }()
  692. br.Ret = 200
  693. br.Msg = "操作成功"
  694. br.Success = true
  695. }
  696. // Detail
  697. // @Title 用户详情
  698. // @Description 用户详情
  699. // @Param UserId query int true "用户ID"
  700. // @Success 200 {object} models.UsersItem
  701. // @router /detail [get]
  702. func (this *UsersController) Detail() {
  703. br := new(models.BaseResponse).Init()
  704. defer func() {
  705. if br.ErrMsg == "" {
  706. br.IsSendEmail = false
  707. }
  708. this.Data["json"] = br
  709. this.ServeJSON()
  710. }()
  711. sysUser := this.SysUser
  712. if sysUser == nil {
  713. br.Msg = "请登录"
  714. br.ErrMsg = "请登录,SysUser Is Empty"
  715. br.Ret = 408
  716. return
  717. }
  718. userId, _ := this.GetInt("UserId")
  719. if userId <= 0 {
  720. br.Msg = "参数有误"
  721. br.ErrMsg = fmt.Sprintf("参数有误, %d", userId)
  722. return
  723. }
  724. usersOb := new(models.Users)
  725. userItem, e := usersOb.GetItemById(userId)
  726. if e != nil {
  727. if e.Error() == utils.ErrNoRow() {
  728. br.Msg = "用户不存在,请刷新页面"
  729. return
  730. }
  731. br.Msg = "获取失败"
  732. br.ErrMsg = fmt.Sprintf("获取用户失败, %v", e)
  733. return
  734. }
  735. resp := userItem.Format2Item()
  736. br.Data = resp
  737. br.Ret = 200
  738. br.Msg = "获取成功"
  739. br.Success = true
  740. }
  741. // PageList
  742. // @Title 用户列表-分页
  743. // @Description 用户列表-分页
  744. // @Param request body request.UsersListForm true "type json string"
  745. // @Success 200 {object} response.UsersPageListResp
  746. // @router /page_list [get]
  747. func (this *UsersController) PageList() {
  748. br := new(models.BaseResponse).Init()
  749. defer func() {
  750. if br.ErrMsg == "" {
  751. br.IsSendEmail = false
  752. }
  753. this.Data["json"] = br
  754. this.ServeJSON()
  755. }()
  756. sysUser := this.SysUser
  757. if sysUser == nil {
  758. br.Msg = "请登录"
  759. br.ErrMsg = "请登录,SysUser Is Empty"
  760. br.Ret = 408
  761. return
  762. }
  763. params := new(request.UsersListForm)
  764. if e := this.ParseForm(params); e != nil {
  765. br.Msg = "参数解析异常"
  766. br.ErrMsg = fmt.Sprintf("参数解析异常, %v", e)
  767. return
  768. }
  769. resp := new(response.UsersPageListResp)
  770. usersOb := new(models.Users)
  771. // 仅超管/创建人/对应销售可见
  772. cond := ``
  773. pars := make([]interface{}, 0)
  774. if params.UserStatus != models.UserStatusTrial && params.CompanyId <= 0 && sysUser.SysRoleId != utils.AdminRoleId {
  775. cond += fmt.Sprintf(` AND (%s = ? OR %s = ?)`, usersOb.Cols().SysUserId, usersOb.Cols().SellerId)
  776. pars = append(pars, sysUser.SysUserId, sysUser.SysUserId)
  777. }
  778. // 筛选项
  779. {
  780. // 机构,默认为个人
  781. cond += fmt.Sprintf(` AND %s = ?`, usersOb.Cols().CompanyId)
  782. pars = append(pars, params.CompanyId)
  783. // 用户类型
  784. if params.UserStatus > 0 {
  785. if params.UserStatus != models.UserStatusTrial && params.UserStatus != models.UserStatusFormal {
  786. br.Msg = "用户类型有误"
  787. br.ErrMsg = fmt.Sprintf("参数用户类型有误, UserStatus: %d", params.UserStatus)
  788. return
  789. }
  790. cond += fmt.Sprintf(` AND %s = ?`, usersOb.Cols().Status)
  791. pars = append(pars, params.UserStatus)
  792. }
  793. // 关键词(联系人名称/联系人手机号)
  794. keywords := strings.TrimSpace(params.Keywords)
  795. if keywords != "" {
  796. kw := fmt.Sprint("%", keywords, "%")
  797. cond += fmt.Sprintf(` AND (%s LIKE ? OR %s LIKE ?)`, usersOb.Cols().RealName, usersOb.Cols().Mobile)
  798. pars = append(pars, kw, kw)
  799. }
  800. // 营业部
  801. params.SellerIds = strings.TrimSpace(params.SellerIds)
  802. if params.SellerIds != "" {
  803. var sellerIds []int
  804. idArr := strings.Split(params.SellerIds, ",")
  805. for _, v := range idArr {
  806. id, _ := strconv.Atoi(v)
  807. if id > 0 {
  808. sellerIds = append(sellerIds, id)
  809. }
  810. }
  811. if len(sellerIds) == 0 {
  812. page := paging.GetPaging(params.CurrentIndex, params.PageSize, 0)
  813. resp.Paging = page
  814. resp.List = make([]*models.UsersItem, 0)
  815. br.Data = resp
  816. br.Ret = 200
  817. br.Msg = "获取成功"
  818. br.Success = true
  819. return
  820. }
  821. cond += fmt.Sprintf(` AND %s IN (%s)`, usersOb.Cols().SellerId, utils.GetOrmInReplace(len(sellerIds)))
  822. pars = append(pars, sellerIds)
  823. }
  824. // 创建时间区间
  825. params.StartTime = strings.TrimSpace(params.StartTime)
  826. params.EndTime = strings.TrimSpace(params.EndTime)
  827. if params.StartTime != "" && params.EndTime != "" {
  828. _, e := time.ParseInLocation(utils.FormatDate, params.StartTime, time.Local)
  829. if e != nil {
  830. br.Msg = "开始时间格式有误"
  831. return
  832. }
  833. _, e = time.ParseInLocation(utils.FormatDate, params.EndTime, time.Local)
  834. if e != nil {
  835. br.Msg = "结束时间格式有误"
  836. return
  837. }
  838. cond += fmt.Sprintf(` AND (%s BETWEEN ? AND ?)`, usersOb.Cols().CreateTime)
  839. pars = append(pars, fmt.Sprintf("%s 00:00:00", params.StartTime), fmt.Sprintf("%s 23:59:59", params.EndTime))
  840. }
  841. }
  842. // 分页
  843. var startSize int
  844. if params.PageSize <= 0 {
  845. params.PageSize = utils.PageSize20
  846. }
  847. if params.CurrentIndex <= 0 {
  848. params.CurrentIndex = 1
  849. }
  850. startSize = utils.StartIndex(params.CurrentIndex, params.PageSize)
  851. // 排序
  852. orderRule := fmt.Sprintf(`%s DESC`, usersOb.Cols().CreateTime)
  853. if params.SortField > 0 && params.SortRule > 0 {
  854. fieldMap := map[int]string{
  855. 1: usersOb.Cols().CreateTime, 2: usersOb.Cols().RegisterTime, 3: usersOb.Cols().LastReadTime, 4: usersOb.Cols().ReadTimes,
  856. }
  857. ruleMap := map[int]string{1: "ASC", 2: "DESC"}
  858. if fieldMap[params.SortField] != "" && ruleMap[params.SortRule] != "" {
  859. orderRule = fmt.Sprintf("%s %s", fieldMap[params.SortField], ruleMap[params.SortRule])
  860. }
  861. }
  862. total, e := usersOb.GetCountByCondition(cond, pars)
  863. if e != nil {
  864. br.Msg = "获取失败"
  865. br.ErrMsg = fmt.Sprintf("获取用户总数失败, %v", e)
  866. return
  867. }
  868. list, e := usersOb.GetPageItemsByCondition(cond, pars, []string{}, orderRule, startSize, params.PageSize)
  869. if e != nil {
  870. br.Msg = "获取失败"
  871. br.ErrMsg = fmt.Sprintf("获取用户分页列表失败, %v", e)
  872. return
  873. }
  874. respList := make([]*models.UsersItem, 0)
  875. for _, v := range list {
  876. respList = append(respList, v.Format2Item())
  877. }
  878. page := paging.GetPaging(params.CurrentIndex, params.PageSize, total)
  879. resp.Paging = page
  880. resp.List = respList
  881. br.Data = resp
  882. br.Ret = 200
  883. br.Msg = "获取成功"
  884. br.Success = true
  885. }
  886. // Search
  887. // @Title 用户列表-搜索
  888. // @Description 用户列表-搜索
  889. // @Param request body request.UsersListForm true "type json string"
  890. // @Success 200 {object} response.UsersPageListResp
  891. // @router /search [get]
  892. func (this *UsersController) Search() {
  893. br := new(models.BaseResponse).Init()
  894. defer func() {
  895. if br.ErrMsg == "" {
  896. br.IsSendEmail = false
  897. }
  898. this.Data["json"] = br
  899. this.ServeJSON()
  900. }()
  901. sysUser := this.SysUser
  902. if sysUser == nil {
  903. br.Msg = "请登录"
  904. br.ErrMsg = "请登录,SysUser Is Empty"
  905. br.Ret = 408
  906. return
  907. }
  908. params := new(request.UsersListForm)
  909. if e := this.ParseForm(params); e != nil {
  910. br.Msg = "参数解析异常"
  911. br.ErrMsg = fmt.Sprintf("参数解析异常, %v", e)
  912. return
  913. }
  914. // 用户检索,所有人可见
  915. resp := new(response.UsersPageListResp)
  916. usersOb := new(models.Users)
  917. cond := ``
  918. pars := make([]interface{}, 0)
  919. // 关键词(机构名称/联系人名称/联系人手机号)
  920. keywords := strings.TrimSpace(params.Keywords)
  921. if keywords != "" {
  922. kw := fmt.Sprint("%", keywords, "%")
  923. cond += fmt.Sprintf(` AND (%s LIKE ? OR %s LIKE ? OR %s LIKE ?)`, usersOb.Cols().CompanyName, usersOb.Cols().RealName, usersOb.Cols().Mobile)
  924. pars = append(pars, kw, kw, kw)
  925. }
  926. // 分页
  927. var startSize int
  928. if params.PageSize <= 0 {
  929. params.PageSize = utils.PageSize20
  930. }
  931. if params.CurrentIndex <= 0 {
  932. params.CurrentIndex = 1
  933. }
  934. startSize = utils.StartIndex(params.CurrentIndex, params.PageSize)
  935. total, e := usersOb.GetCountByCondition(cond, pars)
  936. if e != nil {
  937. br.Msg = "获取失败"
  938. br.ErrMsg = fmt.Sprintf("获取用户总数失败, %v", e)
  939. return
  940. }
  941. list, e := usersOb.GetPageItemsByCondition(cond, pars, []string{}, "", startSize, params.PageSize)
  942. if e != nil {
  943. br.Msg = "获取失败"
  944. br.ErrMsg = fmt.Sprintf("获取用户分页列表失败, %v", e)
  945. return
  946. }
  947. respList := make([]*models.UsersItem, 0)
  948. for _, v := range list {
  949. respList = append(respList, v.Format2Item())
  950. }
  951. page := paging.GetPaging(params.CurrentIndex, params.PageSize, total)
  952. resp.Paging = page
  953. resp.List = respList
  954. br.Data = resp
  955. br.Ret = 200
  956. br.Msg = "获取成功"
  957. br.Success = true
  958. }
  959. // OperateRecords
  960. // @Title 用户-操作记录
  961. // @Description 用户列表-操作记录
  962. // @Param UserId query int true "用户ID"
  963. // @Success 200 {object} models.CompanyUserOperateRecordItem
  964. // @router /operate_records [get]
  965. func (this *UsersController) OperateRecords() {
  966. br := new(models.BaseResponse).Init()
  967. defer func() {
  968. if br.ErrMsg == "" {
  969. br.IsSendEmail = false
  970. }
  971. this.Data["json"] = br
  972. this.ServeJSON()
  973. }()
  974. sysUser := this.SysUser
  975. if sysUser == nil {
  976. br.Msg = "请登录"
  977. br.ErrMsg = "请登录,SysUser Is Empty"
  978. br.Ret = 408
  979. return
  980. }
  981. userId, _ := this.GetInt("UserId")
  982. if userId <= 0 {
  983. br.Msg = "参数有误"
  984. br.ErrMsg = fmt.Sprintf("参数有误, %d", userId)
  985. return
  986. }
  987. resp := make([]*models.CompanyUserOperateRecordItem, 0)
  988. recordOb := new(models.CompanyUserOperateRecord)
  989. cond := fmt.Sprintf(` AND %s = ?`, recordOb.Cols().UserId)
  990. pars := make([]interface{}, 0)
  991. pars = append(pars, userId)
  992. list, e := recordOb.GetItemsByCondition(cond, pars, []string{}, "")
  993. if e != nil {
  994. br.Msg = "获取失败"
  995. br.ErrMsg = fmt.Sprintf("获取操作记录列表失败, %v", e)
  996. return
  997. }
  998. for _, v := range list {
  999. resp = append(resp, v.Format2Item())
  1000. }
  1001. br.Data = resp
  1002. br.Ret = 200
  1003. br.Msg = "获取成功"
  1004. br.Success = true
  1005. }
  1006. // TransAuth
  1007. // @Title 切换阅读权限
  1008. // @Description 切换阅读权限
  1009. // @Param request body request.UsersTransAuthReq true "type json string"
  1010. // @Success 200 Ret=200 操作成功
  1011. // @router /trans_auth [post]
  1012. func (this *UsersController) TransAuth() {
  1013. br := new(models.BaseResponse).Init()
  1014. defer func() {
  1015. if br.ErrMsg == "" {
  1016. br.IsSendEmail = false
  1017. }
  1018. this.Data["json"] = br
  1019. this.ServeJSON()
  1020. }()
  1021. sysUser := this.SysUser
  1022. if sysUser == nil {
  1023. br.Msg = "请登录"
  1024. br.ErrMsg = "请登录,SysUser Is Empty"
  1025. br.Ret = 408
  1026. return
  1027. }
  1028. var req request.UsersTransAuthReq
  1029. if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
  1030. br.Msg = "参数解析异常"
  1031. br.ErrMsg = fmt.Sprintf("参数解析异常, %v", e)
  1032. return
  1033. }
  1034. if req.UserId <= 0 {
  1035. br.Msg = "参数有误"
  1036. br.ErrMsg = fmt.Sprintf("参数有误, UserId: %d", req.UserId)
  1037. return
  1038. }
  1039. usersOb := new(models.Users)
  1040. usersItem, e := usersOb.GetItemById(req.UserId)
  1041. if e != nil {
  1042. if e.Error() == utils.ErrNoRow() {
  1043. br.Ret = 200
  1044. br.Msg = "操作成功"
  1045. br.Success = true
  1046. return
  1047. }
  1048. br.Msg = "操作失败"
  1049. br.ErrMsg = fmt.Sprintf("获取用户失败, %v", e)
  1050. return
  1051. }
  1052. // 操作权限校验
  1053. if sysUser.SysRoleId != utils.AdminRoleId {
  1054. if sysUser.SysUserId != usersItem.SysUserId && sysUser.SysUserId != usersItem.SellerId {
  1055. br.Msg = "无权操作"
  1056. return
  1057. }
  1058. }
  1059. transMapping := map[int]int{models.AuthStatusClose: models.AuthStatusOpen, models.AuthStatusOpen: models.AuthStatusClose}
  1060. optRemarkMapping := map[int]string{models.AuthStatusClose: "关闭", models.AuthStatusOpen: "开启"}
  1061. usersItem.AuthStatus = transMapping[usersItem.AuthStatus]
  1062. usersItem.ModifyTime = time.Now().Local()
  1063. updateCols := []string{usersOb.Cols().AuthStatus, usersOb.Cols().ModifyTime}
  1064. if e = usersItem.Update(updateCols); e != nil {
  1065. br.Msg = "操作失败"
  1066. br.ErrMsg = fmt.Sprintf("切换用户阅读权限失败, %v", e)
  1067. return
  1068. }
  1069. // 操作记录
  1070. go func() {
  1071. recordOb := new(models.CompanyUserOperateRecord)
  1072. recordOb.UserId = usersItem.UserId
  1073. recordOb.Remark = fmt.Sprintf("%s%s用户权限", sysUser.SysRealName, optRemarkMapping[usersItem.AuthStatus])
  1074. recordOb.SysUserId = sysUser.SysUserId
  1075. recordOb.SysUserRealName = sysUser.SysRealName
  1076. recordOb.CreateTime = time.Now().Local()
  1077. if e := recordOb.Create(); e != nil {
  1078. utils.FileLog.Info(fmt.Sprintf("新增操作记录失败, UserId: %d, ErrMsg: %v", usersItem.UserId, e))
  1079. }
  1080. }()
  1081. br.Ret = 200
  1082. br.Msg = "操作成功"
  1083. br.Success = true
  1084. }