report.go 10 KB

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