report.go 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373
  1. package controllers
  2. import (
  3. "encoding/json"
  4. "eta/eta_hub/models"
  5. "eta/eta_hub/services"
  6. "eta/eta_hub/utils"
  7. "fmt"
  8. "github.com/rdlucklib/rdluck_tools/paging"
  9. "strings"
  10. "time"
  11. )
  12. // ReportController 报告
  13. type ReportController struct {
  14. BaseAuthController
  15. }
  16. // List
  17. // @Title 获取报告列表接口
  18. // @Description 获取报告列表
  19. // @Param PageSize query int true "每页数据条数"
  20. // @Param CurrentIndex query int true "当前页页码,从1开始"
  21. // @Param Keyword query string false "搜索关键词"
  22. // @Param State query int false "状态"
  23. // @Success 200 {object} models.ReportListResp
  24. // @router /list [get]
  25. func (this *ReportController) List() {
  26. br := new(models.BaseResponse).Init()
  27. defer func() {
  28. this.Data["json"] = br
  29. this.ServeJSON()
  30. }()
  31. pageSize, _ := this.GetInt("PageSize")
  32. currentIndex, _ := this.GetInt("CurrentIndex")
  33. var startSize int
  34. if pageSize <= 0 {
  35. pageSize = utils.PageSize20
  36. }
  37. if currentIndex <= 0 {
  38. currentIndex = 1
  39. }
  40. startSize = utils.StartIndex(currentIndex, pageSize)
  41. var condition string
  42. var pars []interface{}
  43. keyword := this.GetString("Keyword")
  44. keyword = strings.TrimSpace(keyword)
  45. if keyword != "" {
  46. kw := fmt.Sprint("%", keyword, "%")
  47. condition += ` AND (title LIKE ? OR author LIKE ?) `
  48. pars = append(pars, kw, kw)
  49. }
  50. state, _ := this.GetInt("State")
  51. if state > 0 {
  52. condition += ` AND state = ? `
  53. pars = append(pars, state)
  54. }
  55. total, err := models.GetReportListCount(condition, pars, "")
  56. if err != nil {
  57. br.Msg = "获取失败"
  58. br.ErrMsg = "获取失败,Err:" + err.Error()
  59. return
  60. }
  61. list, err := models.GetReportList(condition, pars, startSize, pageSize)
  62. if err != nil {
  63. br.Msg = "获取失败"
  64. br.ErrMsg = "获取失败,Err:" + err.Error()
  65. return
  66. }
  67. results := make([]*models.ReportItem, 0)
  68. for _, v := range list {
  69. t := models.FormatReport2Item(v)
  70. results = append(results, t)
  71. }
  72. page := paging.GetPaging(currentIndex, pageSize, total)
  73. resp := new(models.ReportListResp)
  74. resp.Paging = page
  75. resp.List = results
  76. br.Ret = 200
  77. br.Msg = "获取成功"
  78. br.Data = resp
  79. }
  80. // Detail
  81. // @Title 获取报告详情接口
  82. // @Description 获取报告详情
  83. // @Param ReportId query int true "报告ID"
  84. // @Success 200 {object} models.ReportItem
  85. // @router /detail [get]
  86. func (this *ReportController) Detail() {
  87. br := new(models.BaseResponse).Init()
  88. defer func() {
  89. this.Data["json"] = br
  90. this.ServeJSON()
  91. }()
  92. reportId, err := this.GetInt("ReportId")
  93. if err != nil {
  94. br.Msg = "获取参数失败!"
  95. br.ErrMsg = "获取参数失败,Err:" + err.Error()
  96. return
  97. }
  98. if reportId <= 0 {
  99. br.Msg = "参数错误"
  100. return
  101. }
  102. item, err := models.GetReportById(reportId)
  103. if err != nil {
  104. if err.Error() == utils.ErrNoRow() {
  105. br.Msg = "报告已被删除"
  106. return
  107. }
  108. br.Msg = "获取失败"
  109. br.ErrMsg = "获取失败,Err:" + err.Error()
  110. return
  111. }
  112. resp := models.FormatReport2Item(item)
  113. br.Data = resp
  114. br.Ret = 200
  115. br.Msg = "获取成功"
  116. }
  117. // Approve
  118. // @Title 审批
  119. // @Description 报告审批
  120. // @Param request body models.PublishReq true "type json string"
  121. // @Success 200 Ret=200 发布成功
  122. // @router /approve [post]
  123. func (this *ReportController) Approve() {
  124. br := new(models.BaseResponse).Init()
  125. defer func() {
  126. this.Data["json"] = br
  127. this.ServeJSON()
  128. }()
  129. var req models.ReportApproveReq
  130. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  131. if err != nil {
  132. br.Msg = "参数解析异常!"
  133. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  134. return
  135. }
  136. if req.ReportId <= 0 {
  137. br.Msg = "参数错误"
  138. br.ErrMsg = fmt.Sprintf("参数有误, ReportId: %d", req.ReportId)
  139. return
  140. }
  141. item, e := models.GetReportById(req.ReportId)
  142. if e != nil {
  143. if e.Error() == utils.ErrNoRow() {
  144. br.Msg = "报告已被删除"
  145. return
  146. }
  147. br.Msg = "操作失败"
  148. br.ErrMsg = "获取报告信息失败, Err:" + e.Error()
  149. return
  150. }
  151. if item.State != models.ReportStateWaitApprove {
  152. br.Msg = "报告状态有误"
  153. br.ErrMsg = fmt.Sprintf("报告状态有误, State: %d", item.State)
  154. return
  155. }
  156. if item.Content == "" {
  157. br.Msg = "报告内容为空,请检查内容"
  158. return
  159. }
  160. // 校验审批配置
  161. confMap, e := models.GetBusinessConf()
  162. if e != nil {
  163. br.Msg = "操作失败"
  164. br.ErrMsg = "获取审批配置失败, Err: " + e.Error()
  165. return
  166. }
  167. if confMap[models.BusinessConfIsReportApprove] != "true" {
  168. br.Msg = "未开启审批, 请开启后重新操作"
  169. return
  170. }
  171. if confMap[models.BusinessConfReportApproveType] != models.BusinessConfReportApproveTypeOther {
  172. br.Msg = "未开启第三方审批, 请开启后重新操作"
  173. return
  174. }
  175. stateMap := map[bool]int{false: models.ReportStateRefused, true: models.ReportStatePass}
  176. // 驳回
  177. now := time.Now().Local()
  178. if !req.Pass {
  179. cols := []string{"State", "ModifyTime", "ApproveTime"}
  180. item.State = stateMap[req.Pass]
  181. item.ModifyTime = now
  182. item.ApproveTime = now
  183. if e = item.UpdateReport(cols); e != nil {
  184. br.Msg = "审批失败"
  185. br.ErrMsg = "报告审批驳回失败, Err: " + e.Error()
  186. return
  187. }
  188. }
  189. // 通过审批
  190. if req.Pass {
  191. cols := []string{"State", "ModifyTime", "ApproveTime", "PublishTime"}
  192. item.State = stateMap[req.Pass]
  193. item.ModifyTime = now
  194. item.ApproveTime = now
  195. item.PublishTime = now
  196. if e = item.UpdateReport(cols); e != nil {
  197. br.Msg = "审批失败"
  198. br.ErrMsg = "报告审批通过失败, Err: " + e.Error()
  199. return
  200. }
  201. // 更新报告Es
  202. go func() {
  203. _ = services.UpdateReportEs(req.ReportId, models.ReportStatePublished) // 注:状态用已发布的, 兼容以前的代码
  204. }()
  205. }
  206. // 记录报告变更状态
  207. go func() {
  208. recordItem := &models.ReportStateRecord{
  209. ReportId: req.ReportId,
  210. ReportType: models.ReportTypeChinese,
  211. State: item.State,
  212. CreateTime: time.Now(),
  213. }
  214. _, _ = models.AddReportStateRecord(recordItem)
  215. }()
  216. br.Ret = 200
  217. br.Msg = "审批成功"
  218. }
  219. // @Title 获取分类列表
  220. // @Description 获取分类列表
  221. // @Param PageSize query int true "每页数据条数"
  222. // @Param CurrentIndex query int true "当前页页码,从1开始"
  223. // @Param KeyWord query string true "检索关键词"
  224. // @Param CompanyType query string false "产品类型,枚举值:'ficc','权益';不传默认返回全部"
  225. // @Param HideDayWeek query int false "是否隐藏晨周报"
  226. // @Success 200 {object} models.Classify
  227. // @router /classify/list [get]
  228. func (this *ReportController) ListClassify() {
  229. br := new(models.BaseResponse).Init()
  230. defer func() {
  231. this.Data["json"] = br
  232. this.ServeJSON()
  233. }()
  234. pageSize, _ := this.GetInt("PageSize")
  235. currentIndex, _ := this.GetInt("CurrentIndex")
  236. keyWord := this.GetString("KeyWord")
  237. //companyType := this.GetString("CompanyType")
  238. companyType := ""
  239. var startSize int
  240. if pageSize <= 0 {
  241. pageSize = utils.PageSize20
  242. }
  243. if currentIndex <= 0 {
  244. currentIndex = 1
  245. }
  246. startSize = utils.StartIndex(currentIndex, pageSize)
  247. list, err := models.GetClassifyList(startSize, pageSize, keyWord, companyType)
  248. if err != nil {
  249. br.Msg = "获取失败"
  250. br.ErrMsg = "获取失败,Err:" + err.Error()
  251. return
  252. }
  253. total, err := models.GetClassifyListCount(keyWord, companyType)
  254. if err != nil {
  255. br.Msg = "获取失败"
  256. br.ErrMsg = "获取失败,Err:" + err.Error()
  257. return
  258. }
  259. parentIds := make([]int, 0)
  260. for i := range list {
  261. parentIds = append(parentIds, list[i].Id)
  262. }
  263. parentIdLen := len(parentIds)
  264. if parentIdLen == 0 {
  265. resp := &models.ClassifyListResp{
  266. List: list,
  267. Paging: paging.GetPaging(currentIndex, pageSize, 0),
  268. }
  269. br.Data = resp
  270. br.Ret = 200
  271. br.Msg = "获取成功"
  272. return
  273. }
  274. // 获取一级分类-子目录列表
  275. menuListMap := make(map[int][]*models.ClassifyMenu, 0)
  276. var menuCond string
  277. var menuPars []interface{}
  278. menuCond += ` AND classify_id IN (` + utils.GetOrmInReplace(parentIdLen) + `)`
  279. menuPars = append(menuPars, parentIds)
  280. parentMenus, e := models.GetClassifyMenuList(menuCond, menuPars)
  281. if e != nil {
  282. br.Msg = "获取失败"
  283. br.ErrMsg = "获取一级分类子目录列表失败"
  284. return
  285. }
  286. for i := range parentMenus {
  287. if menuListMap[parentMenus[i].ClassifyId] == nil {
  288. menuListMap[parentMenus[i].ClassifyId] = make([]*models.ClassifyMenu, 0)
  289. }
  290. menuListMap[parentMenus[i].ClassifyId] = append(menuListMap[parentMenus[i].ClassifyId], parentMenus[i])
  291. }
  292. // 获取子分类
  293. children, e := models.GetClassifyChildByParentIds(parentIds, keyWord)
  294. if e != nil {
  295. br.Msg = "获取失败"
  296. br.ErrMsg = "获取子分类失败"
  297. return
  298. }
  299. childrenIds := make([]int, 0)
  300. for i := range children {
  301. childrenIds = append(childrenIds, children[i].Id)
  302. }
  303. childrenIdsLen := len(childrenIds)
  304. // 获取二级分类-子目录关联
  305. relateMap := make(map[int]int, 0)
  306. if childrenIdsLen > 0 {
  307. var relateCond string
  308. var relatePars []interface{}
  309. relateCond += ` AND classify_id IN (` + utils.GetOrmInReplace(childrenIdsLen) + `)`
  310. relatePars = append(relatePars, childrenIds)
  311. relates, e := models.GetClassifyMenuRelationList(relateCond, relatePars)
  312. if e != nil {
  313. br.Msg = "获取失败"
  314. br.ErrMsg = "获取二级分类子目录关联失败, Err: " + e.Error()
  315. return
  316. }
  317. for i := range relates {
  318. relateMap[relates[i].ClassifyId] = relates[i].MenuId
  319. }
  320. }
  321. // 二级分类
  322. childrenMap := make(map[int][]*models.ClassifyItem, 0)
  323. for i := range children {
  324. if childrenMap[children[i].ParentId] == nil {
  325. childrenMap[children[i].ParentId] = make([]*models.ClassifyItem, 0)
  326. }
  327. childrenMap[children[i].ParentId] = append(childrenMap[children[i].ParentId], &models.ClassifyItem{
  328. Classify: *children[i],
  329. //ClassifyMenuId: relateMap[children[i].Id],
  330. })
  331. }
  332. // 一级分类
  333. for i := range list {
  334. //list[i].ClassifyMenuList = menuListMap[list[i].Id]
  335. list[i].Child = childrenMap[list[i].Id]
  336. }
  337. page := paging.GetPaging(currentIndex, pageSize, total)
  338. resp := new(models.ClassifyListResp)
  339. resp.List = list
  340. resp.Paging = page
  341. br.Data = resp
  342. br.Ret = 200
  343. br.Msg = "获取成功"
  344. }