assessment_researcher.go 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672
  1. package assessment
  2. import (
  3. "encoding/json"
  4. "eta/eta_api/controllers"
  5. "eta/eta_api/models"
  6. "eta/eta_api/models/system"
  7. "eta/eta_api/utils"
  8. "fmt"
  9. "github.com/rdlucklib/rdluck_tools/paging"
  10. "strconv"
  11. "strings"
  12. "time"
  13. )
  14. // AssessmentResearcherController 考核研究员
  15. type AssessmentResearcherController struct {
  16. controllers.BaseAuthController
  17. }
  18. // Add
  19. // @Title 新增研究员
  20. // @Description 新增研究员
  21. // @Param request body models.AssessmentResearcherAddReq true "type json string"
  22. // @Success 200 string "操作成功"
  23. // @router /researcher/add [post]
  24. func (this *AssessmentResearcherController) 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 models.AssessmentResearcherAddReq
  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. if req.AdminId <= 0 {
  47. br.Msg = "请选择研究员"
  48. return
  49. }
  50. disabledResearcher := new(models.AssessmentResearcher)
  51. researcherOb := new(models.AssessmentResearcher)
  52. mappingOb := new(models.AssessmentResearcherAdminMapping)
  53. // 去重校验:系统用户ID
  54. {
  55. cond := fmt.Sprintf(` AND %s = ?`, researcherOb.Cols().AdminId)
  56. pars := make([]interface{}, 0)
  57. pars = append(pars, req.AdminId)
  58. exists, e := researcherOb.GetItemByCondition(cond, pars, "")
  59. if e != nil && !utils.IsErrNoRow(e) {
  60. br.Msg = "操作失败"
  61. br.ErrMsg = fmt.Sprintf("获取研究员失败, %v", e)
  62. return
  63. }
  64. // PS.由于删除研究员需要保留历史填报数据,如果研究员被删除(即禁用)那么重新启用即可
  65. if exists != nil && exists.AssessmentResearcherId > 0 {
  66. if exists.Enabled == models.AssessmentResearcherEnabled {
  67. br.Msg = "该研究员已添加,请勿重复添加"
  68. return
  69. }
  70. disabledResearcher = exists
  71. }
  72. }
  73. sysAdmin, e := system.GetSysAdminById(req.AdminId)
  74. if e != nil {
  75. if utils.IsErrNoRow(e) {
  76. br.Msg = "该用户不存在,请重新选择"
  77. return
  78. }
  79. br.Msg = "操作失败"
  80. br.ErrMsg = fmt.Sprintf("获取系统用户失败, %v", e)
  81. return
  82. }
  83. if sysAdmin == nil || sysAdmin.AdminId <= 0 {
  84. br.Msg = "该用户不存在,请重新选择"
  85. return
  86. }
  87. if sysAdmin.Enabled != 1 {
  88. br.Msg = "该用户被禁用,请重新选择"
  89. return
  90. }
  91. var researcherId int
  92. if disabledResearcher != nil && disabledResearcher.AssessmentResearcherId > 0 {
  93. disabledResearcher.RealName = sysAdmin.RealName
  94. disabledResearcher.Enabled = models.AssessmentResearcherEnabled
  95. disabledResearcher.ModifyTime = time.Now().Local()
  96. updateCols := []string{researcherOb.Cols().RealName, researcherOb.Cols().Enabled, researcherOb.Cols().ModifyTime}
  97. if e := disabledResearcher.Update(updateCols); e != nil {
  98. br.Msg = "操作失败"
  99. br.ErrMsg = fmt.Sprintf("重新启用研究员失败, %v", e)
  100. return
  101. }
  102. researcherId = disabledResearcher.AssessmentResearcherId
  103. // 清除原有关联
  104. cond := fmt.Sprintf(`%s = ?`, mappingOb.Cols().AssessmentResearcherId)
  105. pars := make([]interface{}, 0)
  106. pars = append(pars, researcherId)
  107. if e = mappingOb.RemoveByCondition(cond, pars); e != nil {
  108. br.Msg = "操作失败"
  109. br.ErrMsg = fmt.Sprintf("清空权限失败, %v", e)
  110. return
  111. }
  112. } else {
  113. newResearcher := new(models.AssessmentResearcher)
  114. newResearcher.AdminId = req.AdminId
  115. newResearcher.RealName = sysAdmin.RealName
  116. newResearcher.Enabled = models.AssessmentResearcherEnabled
  117. newResearcher.CreateTime = time.Now().Local()
  118. newResearcher.ModifyTime = time.Now().Local()
  119. if e = newResearcher.Create(); e != nil {
  120. br.Msg = "操作失败"
  121. br.ErrMsg = fmt.Sprintf("新增研究员失败, %v", e)
  122. return
  123. }
  124. researcherId = newResearcher.AssessmentResearcherId
  125. }
  126. // 查看/统计权限
  127. mappings := make([]*models.AssessmentResearcherAdminMapping, 0)
  128. if len(req.ViewAdminIds) > 0 {
  129. for _, v := range req.ViewAdminIds {
  130. m := new(models.AssessmentResearcherAdminMapping)
  131. m.AssessmentResearcherId = researcherId
  132. m.AdminId = req.AdminId
  133. m.AuthAdminId = v
  134. m.AuthType = models.AssessmentResearcherAdminAuthTypeView
  135. mappings = append(mappings, m)
  136. }
  137. }
  138. if len(req.AssessmentAdminIds) > 0 {
  139. for _, v := range req.AssessmentAdminIds {
  140. m := new(models.AssessmentResearcherAdminMapping)
  141. m.AssessmentResearcherId = researcherId
  142. m.AdminId = req.AdminId
  143. m.AuthAdminId = v
  144. m.AuthType = models.AssessmentResearcherAdminAuthTypeStatistics
  145. mappings = append(mappings, m)
  146. }
  147. }
  148. if len(mappings) > 0 {
  149. if e = mappingOb.CreateMulti(mappings); e != nil {
  150. br.Msg = "操作失败"
  151. br.ErrMsg = fmt.Sprintf("批量新增权限失败, %v", e)
  152. return
  153. }
  154. }
  155. br.Ret = 200
  156. br.Success = true
  157. br.Msg = "操作成功"
  158. }
  159. // Edit
  160. // @Title 编辑研究员
  161. // @Description 编辑研究员
  162. // @Param request body models.AssessmentResearcherEditReq true "type json string"
  163. // @Success 200 string "操作成功"
  164. // @router /researcher/edit [post]
  165. func (this *AssessmentResearcherController) Edit() {
  166. br := new(models.BaseResponse).Init()
  167. defer func() {
  168. if br.ErrMsg == "" {
  169. br.IsSendEmail = false
  170. }
  171. this.Data["json"] = br
  172. this.ServeJSON()
  173. }()
  174. sysUser := this.SysUser
  175. if sysUser == nil {
  176. br.Msg = "请登录"
  177. br.ErrMsg = "请登录,SysUser Is Empty"
  178. br.Ret = 408
  179. return
  180. }
  181. var req models.AssessmentResearcherEditReq
  182. if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
  183. br.Msg = "参数有误"
  184. br.ErrMsg = fmt.Sprintf("参数解析失败, %v", e)
  185. return
  186. }
  187. if req.AssessmentResearcherId <= 0 {
  188. br.Msg = "参数有误"
  189. br.ErrMsg = fmt.Sprintf("参数有误, AssessmentResearcherId: %d", req.AssessmentResearcherId)
  190. return
  191. }
  192. researcherOb := new(models.AssessmentResearcher)
  193. researcher, e := researcherOb.GetItemById(req.AssessmentResearcherId)
  194. if e != nil {
  195. if utils.IsErrNoRow(e) {
  196. br.Msg = "研究员不存在,请刷新页面"
  197. return
  198. }
  199. br.Msg = "操作失败"
  200. br.ErrMsg = fmt.Sprintf("获取研究员失败, %v", e)
  201. return
  202. }
  203. if researcher.Enabled == models.AssessmentResearcherDisabled {
  204. br.Msg = "研究员不存在,请刷新页面"
  205. return
  206. }
  207. // 查看/统计权限
  208. mappings := make([]*models.AssessmentResearcherAdminMapping, 0)
  209. if len(req.ViewAdminIds) > 0 {
  210. for _, v := range req.ViewAdminIds {
  211. m := new(models.AssessmentResearcherAdminMapping)
  212. m.AssessmentResearcherId = researcher.AssessmentResearcherId
  213. m.AdminId = researcher.AdminId
  214. m.AuthAdminId = v
  215. m.AuthType = models.AssessmentResearcherAdminAuthTypeView
  216. mappings = append(mappings, m)
  217. }
  218. }
  219. if len(req.AssessmentAdminIds) > 0 {
  220. for _, v := range req.AssessmentAdminIds {
  221. m := new(models.AssessmentResearcherAdminMapping)
  222. m.AssessmentResearcherId = researcher.AssessmentResearcherId
  223. m.AdminId = researcher.AdminId
  224. m.AuthAdminId = v
  225. m.AuthType = models.AssessmentResearcherAdminAuthTypeStatistics
  226. mappings = append(mappings, m)
  227. }
  228. }
  229. // 清空关联后新增
  230. mappingOb := new(models.AssessmentResearcherAdminMapping)
  231. {
  232. cond := fmt.Sprintf(`%s = ?`, mappingOb.Cols().AssessmentResearcherId)
  233. pars := make([]interface{}, 0)
  234. pars = append(pars, researcher.AssessmentResearcherId)
  235. if e = mappingOb.RemoveByCondition(cond, pars); e != nil {
  236. br.Msg = "操作失败"
  237. br.ErrMsg = fmt.Sprintf("清空权限失败, %v", e)
  238. return
  239. }
  240. }
  241. if len(mappings) > 0 {
  242. if e = mappingOb.CreateMulti(mappings); e != nil {
  243. br.Msg = "操作失败"
  244. br.ErrMsg = fmt.Sprintf("批量新增权限失败, %v", e)
  245. return
  246. }
  247. }
  248. br.Ret = 200
  249. br.Success = true
  250. br.Msg = "操作成功"
  251. }
  252. // Remove
  253. // @Title 删除研究员
  254. // @Description 删除研究员
  255. // @Param request body models.AssessmentResearcherRemoveReq true "type json string"
  256. // @Success 200 string "操作成功"
  257. // @router /researcher/remove [post]
  258. func (this *AssessmentResearcherController) Remove() {
  259. br := new(models.BaseResponse).Init()
  260. defer func() {
  261. if br.ErrMsg == "" {
  262. br.IsSendEmail = false
  263. }
  264. this.Data["json"] = br
  265. this.ServeJSON()
  266. }()
  267. sysUser := this.SysUser
  268. if sysUser == nil {
  269. br.Msg = "请登录"
  270. br.ErrMsg = "请登录,SysUser Is Empty"
  271. br.Ret = 408
  272. return
  273. }
  274. var req models.AssessmentResearcherRemoveReq
  275. if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
  276. br.Msg = "参数有误"
  277. br.ErrMsg = fmt.Sprintf("参数解析失败, %v", e)
  278. return
  279. }
  280. if req.AssessmentResearcherId <= 0 {
  281. br.Msg = "参数有误"
  282. br.ErrMsg = fmt.Sprintf("参数有误, AssessmentResearcherId: %d", req.AssessmentResearcherId)
  283. return
  284. }
  285. researcherOb := new(models.AssessmentResearcher)
  286. researcher, e := researcherOb.GetItemById(req.AssessmentResearcherId)
  287. if e != nil {
  288. if utils.IsErrNoRow(e) {
  289. br.Ret = 200
  290. br.Success = true
  291. br.Msg = "操作成功"
  292. return
  293. }
  294. br.Msg = "操作失败"
  295. br.ErrMsg = fmt.Sprintf("获取研究员失败, %v", e)
  296. return
  297. }
  298. if researcher.Enabled == models.AssessmentResearcherDisabled {
  299. br.Ret = 200
  300. br.Success = true
  301. br.Msg = "操作成功"
  302. return
  303. }
  304. // 由于要保留历史填报数据,这里实际为禁用操作
  305. updateCols := []string{researcherOb.Cols().Enabled, researcherOb.Cols().ModifyTime}
  306. researcher.Enabled = models.AssessmentResearcherDisabled
  307. researcher.ModifyTime = time.Now()
  308. if e = researcher.Update(updateCols); e != nil {
  309. br.Msg = "操作失败"
  310. br.ErrMsg = fmt.Sprintf("禁用研究员失败, %v", e)
  311. return
  312. }
  313. // 关联也不需要清理
  314. //adminMappingOb := new(models.AssessmentResearcherAdminMapping)
  315. //{
  316. // cond := fmt.Sprintf(`%s = ?`, adminMappingOb.Cols().AdminId)
  317. // pars := make([]interface{}, 0)
  318. // pars = append(pars, researcher.AdminId)
  319. // if e = adminMappingOb.RemoveByCondition(cond, pars); e != nil {
  320. // br.Msg = "操作失败"
  321. // br.ErrMsg = fmt.Sprintf("清空权限失败, %v", e)
  322. // return
  323. // }
  324. //}
  325. //varietyMappingOb := new(models.AssessmentResearcherVarietyMapping)
  326. //{
  327. // cond := fmt.Sprintf(`%s = ?`, varietyMappingOb.Cols().AdminId)
  328. // pars := make([]interface{}, 0)
  329. // pars = append(pars, researcher.AdminId)
  330. // if e = varietyMappingOb.RemoveByCondition(cond, pars); e != nil {
  331. // br.Msg = "操作失败"
  332. // br.ErrMsg = fmt.Sprintf("清空品种关联失败, %v", e)
  333. // return
  334. // }
  335. //}
  336. br.Ret = 200
  337. br.Success = true
  338. br.Msg = "操作成功"
  339. }
  340. // Detail
  341. // @Title 研究员详情
  342. // @Description 研究员详情
  343. // @Param AssessmentResearcherId query int true "研究员ID"
  344. // @Success 200 string "操作成功"
  345. // @router /researcher/detail [get]
  346. func (this *AssessmentResearcherController) Detail() {
  347. br := new(models.BaseResponse).Init()
  348. defer func() {
  349. if br.ErrMsg == "" {
  350. br.IsSendEmail = false
  351. }
  352. this.Data["json"] = br
  353. this.ServeJSON()
  354. }()
  355. sysUser := this.SysUser
  356. if sysUser == nil {
  357. br.Msg = "请登录"
  358. br.ErrMsg = "请登录,SysUser Is Empty"
  359. br.Ret = 408
  360. return
  361. }
  362. researcherId, _ := this.GetInt("AssessmentResearcherId")
  363. if researcherId <= 0 {
  364. br.Msg = "参数有误"
  365. br.ErrMsg = fmt.Sprintf("参数有误, AssessmentResearcherId: %d", researcherId)
  366. return
  367. }
  368. researcherOb := new(models.AssessmentResearcher)
  369. researcher, e := researcherOb.GetItemById(researcherId)
  370. if e != nil {
  371. if utils.IsErrNoRow(e) {
  372. br.Msg = "研究员不存在,请重新页面"
  373. return
  374. }
  375. br.Msg = "获取失败"
  376. br.ErrMsg = fmt.Sprintf("获取研究员失败, %v", e)
  377. return
  378. }
  379. if researcher.Enabled == models.AssessmentResearcherDisabled {
  380. br.Msg = "研究员不存在,请刷新页面"
  381. return
  382. }
  383. resp := researcher.Format2Detail()
  384. // 获取系统用户
  385. adminMapping := make(map[int]*system.Admin)
  386. {
  387. admins, e := system.GetSysAdminList(``, make([]interface{}, 0), []string{}, "")
  388. if e != nil {
  389. br.Msg = "获取失败"
  390. br.ErrMsg = fmt.Sprintf("获取系统用户失败, %v", e)
  391. return
  392. }
  393. for _, v := range admins {
  394. adminMapping[v.AdminId] = v
  395. }
  396. }
  397. mappings := make([]*models.AssessmentResearcherAdminMapping, 0)
  398. {
  399. mappingOb := new(models.AssessmentResearcherAdminMapping)
  400. cond := fmt.Sprintf(` AND %s = ?`, mappingOb.Cols().AdminId)
  401. pars := make([]interface{}, 0)
  402. pars = append(pars, researcher.AdminId)
  403. list, e := mappingOb.GetItemsByCondition(cond, pars, []string{}, "")
  404. if e != nil {
  405. br.Msg = "获取失败"
  406. br.ErrMsg = fmt.Sprintf("获取研究员用户权限关系失败, %v", e)
  407. return
  408. }
  409. mappings = list
  410. }
  411. for _, m := range mappings {
  412. ad := adminMapping[m.AuthAdminId]
  413. if ad == nil {
  414. continue
  415. }
  416. // 详情这里只显示启用的系统用户
  417. if ad.Enabled != 1 {
  418. continue
  419. }
  420. ar := models.AssessmentResearcherDetail{
  421. AdminId: m.AuthAdminId,
  422. RealName: ad.RealName,
  423. Enabled: ad.Enabled,
  424. }
  425. if m.AuthType == models.AssessmentResearcherAdminAuthTypeView {
  426. resp.ViewAdmins = append(resp.ViewAdmins, ar)
  427. continue
  428. }
  429. resp.AssessmentAdmins = append(resp.AssessmentAdmins, ar)
  430. }
  431. br.Data = resp
  432. br.Ret = 200
  433. br.Success = true
  434. br.Msg = "获取成功"
  435. }
  436. // PageList
  437. // @Title 研究员列表-分页
  438. // @Description 研究员列表-分页
  439. // @Param request body models.AssessmentResearcherPageListReq true "type json string"
  440. // @Success 200 string "操作成功"
  441. // @router /researcher/page_list [get]
  442. func (this *AssessmentResearcherController) PageList() {
  443. br := new(models.BaseResponse).Init()
  444. defer func() {
  445. if br.ErrMsg == "" {
  446. br.IsSendEmail = false
  447. }
  448. this.Data["json"] = br
  449. this.ServeJSON()
  450. }()
  451. sysUser := this.SysUser
  452. if sysUser == nil {
  453. br.Msg = "请登录"
  454. br.ErrMsg = "请登录,SysUser Is Empty"
  455. br.Ret = 408
  456. return
  457. }
  458. params := new(models.AssessmentResearcherPageListReq)
  459. if e := this.ParseForm(params); e != nil {
  460. br.Msg = "获取失败"
  461. br.ErrMsg = "参数解析失败, Err: " + e.Error()
  462. return
  463. }
  464. params.RealName = strings.TrimSpace(params.RealName)
  465. resp := new(models.AssessmentResearcherPageListResp)
  466. resp.List = make([]*models.AssessmentResearcherDetail, 0)
  467. // 分页
  468. var startSize int
  469. if params.PageSize <= 0 {
  470. params.PageSize = utils.PageSize20
  471. }
  472. if params.CurrentIndex <= 0 {
  473. params.CurrentIndex = 1
  474. }
  475. startSize = utils.StartIndex(params.CurrentIndex, params.PageSize)
  476. // 筛选条件
  477. researcherOb := new(models.AssessmentResearcher)
  478. cond := ``
  479. pars := make([]interface{}, 0)
  480. {
  481. // 研究员姓名
  482. if params.RealName != "" {
  483. kw := fmt.Sprint("%", params.RealName, "%")
  484. cond += fmt.Sprintf(` AND %s LIKE ?`, researcherOb.Cols().RealName)
  485. pars = append(pars, kw)
  486. }
  487. // 研究员IDs
  488. if params.AssessmentResearcherIds != "" {
  489. var researcherIds []int
  490. arr := strings.Split(params.AssessmentResearcherIds, ",")
  491. for _, v := range arr {
  492. i, _ := strconv.Atoi(v)
  493. if i > 0 {
  494. researcherIds = append(researcherIds, i)
  495. }
  496. }
  497. if len(researcherIds) == 0 {
  498. resp.Paging = paging.GetPaging(params.CurrentIndex, params.PageSize, 0)
  499. br.Data = resp
  500. br.Ret = 200
  501. br.Success = true
  502. br.Msg = "获取成功"
  503. return
  504. }
  505. cond += fmt.Sprintf(` AND %s IN (?)`, researcherOb.Cols().PrimaryId)
  506. pars = append(pars, researcherIds)
  507. }
  508. // 仅获取自己有权限的,与研究员IDs条件冲突
  509. if params.AssessmentResearcherIds == "" && params.ResearcherAuthType > 0 {
  510. // 自己如果是研究员的话要把自己也加进去
  511. var researcherIds []int
  512. condResearcher := fmt.Sprintf(` AND %s = ?`, researcherOb.Cols().AdminId)
  513. parsResearcher := make([]interface{}, 0)
  514. parsResearcher = append(parsResearcher, sysUser.AdminId)
  515. researcher, e := researcherOb.GetItemByCondition(condResearcher, parsResearcher, "")
  516. if e != nil && !utils.IsErrNoRow(e) {
  517. br.Msg = "获取失败"
  518. br.ErrMsg = fmt.Sprintf("获取研究员失败, %v", e)
  519. return
  520. }
  521. if researcher != nil && researcher.AssessmentResearcherId > 0 {
  522. researcherIds = append(researcherIds, researcher.AssessmentResearcherId)
  523. }
  524. mappingOb := new(models.AssessmentResearcherAdminMapping)
  525. condMapping := fmt.Sprintf(` AND %s = ? AND %s = ?`, mappingOb.Cols().AuthAdminId, mappingOb.Cols().AuthType)
  526. parsMapping := make([]interface{}, 0)
  527. parsMapping = append(parsMapping, sysUser.AdminId, params.ResearcherAuthType)
  528. list, e := mappingOb.GetItemsByCondition(condMapping, parsMapping, []string{}, "")
  529. if e != nil {
  530. br.Msg = "获取失败"
  531. br.ErrMsg = fmt.Sprintf("获取用户有权限的研究员失败, %v", e)
  532. return
  533. }
  534. for _, v := range list {
  535. researcherIds = append(researcherIds, v.AssessmentResearcherId)
  536. }
  537. if len(researcherIds) == 0 {
  538. resp.Paging = paging.GetPaging(params.CurrentIndex, params.PageSize, 0)
  539. br.Data = resp
  540. br.Ret = 200
  541. br.Success = true
  542. br.Msg = "获取成功"
  543. return
  544. }
  545. cond += fmt.Sprintf(` AND %s IN (?)`, researcherOb.Cols().PrimaryId)
  546. pars = append(pars, researcherIds)
  547. }
  548. // 仅显示启用的
  549. if params.OnlyEnabled {
  550. cond += fmt.Sprintf(` AND %s = ?`, researcherOb.Cols().Enabled)
  551. pars = append(pars, models.AssessmentResearcherEnabled)
  552. }
  553. }
  554. // 分页列表
  555. total, e := researcherOb.GetCountByCondition(cond, pars)
  556. if e != nil {
  557. br.Msg = "获取失败"
  558. br.ErrMsg = fmt.Sprintf("获取研究员列表总数失败, %v", e)
  559. return
  560. }
  561. researchers, e := researcherOb.GetPageItemsByCondition(cond, pars, []string{}, "", startSize, params.PageSize)
  562. if e != nil {
  563. br.Msg = "获取失败"
  564. br.ErrMsg = fmt.Sprintf("获取研究员失败, %v", e)
  565. return
  566. }
  567. var researcherIds []int
  568. for _, v := range researchers {
  569. researcherIds = append(researcherIds, v.AssessmentResearcherId)
  570. }
  571. if total == 0 || len(researcherIds) == 0 {
  572. resp.Paging = paging.GetPaging(params.CurrentIndex, params.PageSize, 0)
  573. br.Data = resp
  574. br.Ret = 200
  575. br.Success = true
  576. br.Msg = "获取成功"
  577. return
  578. }
  579. // 获取系统用户
  580. adminMapping := make(map[int]*system.Admin)
  581. {
  582. admins, e := system.GetSysAdminList(``, make([]interface{}, 0), []string{}, "")
  583. if e != nil {
  584. br.Msg = "获取失败"
  585. br.ErrMsg = fmt.Sprintf("获取系统用户失败, %v", e)
  586. return
  587. }
  588. for _, v := range admins {
  589. adminMapping[v.AdminId] = v
  590. }
  591. }
  592. // 研究员关联权限
  593. viewAdminMappings, assessmentAdminMappings := make(map[int][]models.AssessmentResearcherDetail), make(map[int][]models.AssessmentResearcherDetail)
  594. {
  595. mappingOb := new(models.AssessmentResearcherAdminMapping)
  596. condMapping := fmt.Sprintf(` AND %s IN (?)`, mappingOb.Cols().AssessmentResearcherId)
  597. parsMapping := make([]interface{}, 0)
  598. parsMapping = append(parsMapping, researcherIds)
  599. list, e := mappingOb.GetItemsByCondition(condMapping, parsMapping, []string{}, "")
  600. if e != nil {
  601. br.Msg = "获取失败"
  602. br.ErrMsg = fmt.Sprintf("获取研究员用户权限关系失败, %v", e)
  603. return
  604. }
  605. for _, v := range list {
  606. ad := adminMapping[v.AuthAdminId]
  607. if ad == nil {
  608. continue
  609. }
  610. // 详情这里只显示启用的系统用户
  611. if ad.Enabled != 1 {
  612. continue
  613. }
  614. ar := models.AssessmentResearcherDetail{
  615. AdminId: v.AuthAdminId,
  616. RealName: ad.RealName,
  617. Enabled: ad.Enabled,
  618. }
  619. if v.AuthType == models.AssessmentResearcherAdminAuthTypeView {
  620. viewAdminMappings[v.AdminId] = append(viewAdminMappings[v.AdminId], ar)
  621. continue
  622. }
  623. assessmentAdminMappings[v.AdminId] = append(assessmentAdminMappings[v.AdminId], ar)
  624. }
  625. }
  626. for _, v := range researchers {
  627. t := v.Format2Detail()
  628. t.ViewAdmins = viewAdminMappings[v.AdminId]
  629. t.AssessmentAdmins = assessmentAdminMappings[v.AdminId]
  630. resp.List = append(resp.List, t)
  631. }
  632. resp.Paging = paging.GetPaging(params.CurrentIndex, params.PageSize, total)
  633. br.Data = resp
  634. br.Ret = 200
  635. br.Success = true
  636. br.Msg = "获取成功"
  637. }