report_approval.go 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  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. "time"
  10. )
  11. // ReportController 报告
  12. type ReportController struct {
  13. BaseAuthController
  14. }
  15. // List
  16. // @Title 获取报告列表接口
  17. // @Description 获取报告列表
  18. // @Param PageSize query int true "每页数据条数"
  19. // @Param CurrentIndex query int true "当前页页码,从1开始"
  20. // @Success 200 {object} models.ReportListResp
  21. // @router /list [get]
  22. func (this *ReportController) List() {
  23. br := new(models.BaseResponse).Init()
  24. defer func() {
  25. this.Data["json"] = br
  26. this.ServeJSON()
  27. }()
  28. pageSize, _ := this.GetInt("PageSize")
  29. currentIndex, _ := this.GetInt("CurrentIndex")
  30. var startSize int
  31. if pageSize <= 0 {
  32. pageSize = utils.PageSize20
  33. }
  34. if currentIndex <= 0 {
  35. currentIndex = 1
  36. }
  37. startSize = utils.StartIndex(currentIndex, pageSize)
  38. var condition string
  39. var pars []interface{}
  40. total, err := models.GetReportListCount(condition, pars, "")
  41. if err != nil {
  42. br.Msg = "获取失败"
  43. br.ErrMsg = "获取失败,Err:" + err.Error()
  44. return
  45. }
  46. list, err := models.GetReportList(condition, pars, startSize, pageSize)
  47. if err != nil {
  48. br.Msg = "获取失败"
  49. br.ErrMsg = "获取失败,Err:" + err.Error()
  50. return
  51. }
  52. results := make([]*models.ReportItem, 0)
  53. for _, v := range list {
  54. t := models.FormatReport2Item(v)
  55. results = append(results, t)
  56. }
  57. page := paging.GetPaging(currentIndex, pageSize, total)
  58. resp := new(models.ReportListResp)
  59. resp.Paging = page
  60. resp.List = results
  61. br.Ret = 200
  62. br.Msg = "获取成功"
  63. br.Data = resp
  64. }
  65. // Detail
  66. // @Title 获取报告详情接口
  67. // @Description 获取报告详情
  68. // @Param ReportId query int true "报告ID"
  69. // @Success 200 {object} models.ReportItem
  70. // @router /detail [get]
  71. func (this *ReportController) Detail() {
  72. br := new(models.BaseResponse).Init()
  73. defer func() {
  74. this.Data["json"] = br
  75. this.ServeJSON()
  76. }()
  77. reportId, err := this.GetInt("ReportId")
  78. if err != nil {
  79. br.Msg = "获取参数失败!"
  80. br.ErrMsg = "获取参数失败,Err:" + err.Error()
  81. return
  82. }
  83. if reportId <= 0 {
  84. br.Msg = "参数错误"
  85. return
  86. }
  87. item, err := models.GetReportById(reportId)
  88. if err != nil {
  89. if err.Error() == utils.ErrNoRow() {
  90. br.Msg = "报告已被删除"
  91. return
  92. }
  93. br.Msg = "获取失败"
  94. br.ErrMsg = "获取失败,Err:" + err.Error()
  95. return
  96. }
  97. resp := models.FormatReport2Item(item)
  98. br.Data = resp
  99. br.Ret = 200
  100. br.Msg = "获取成功"
  101. }
  102. // Approve
  103. // @Title 审批
  104. // @Description 报告审批
  105. // @Param request body models.PublishReq true "type json string"
  106. // @Success 200 Ret=200 发布成功
  107. // @router /approve [post]
  108. func (this *ReportController) Approve() {
  109. br := new(models.BaseResponse).Init()
  110. defer func() {
  111. this.Data["json"] = br
  112. this.ServeJSON()
  113. }()
  114. var req models.ReportApproveReq
  115. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  116. if err != nil {
  117. br.Msg = "参数解析异常!"
  118. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  119. return
  120. }
  121. if req.ReportId <= 0 {
  122. br.Msg = "参数错误"
  123. br.ErrMsg = fmt.Sprintf("参数有误, ReportId: %d", req.ReportId)
  124. return
  125. }
  126. item, e := models.GetReportById(req.ReportId)
  127. if e != nil {
  128. if e.Error() == utils.ErrNoRow() {
  129. br.Msg = "报告已被删除"
  130. return
  131. }
  132. br.Msg = "操作失败"
  133. br.ErrMsg = "获取报告信息失败, Err:" + e.Error()
  134. return
  135. }
  136. if item.State != models.ReportStateWaitApprove {
  137. br.Msg = "报告状态有误"
  138. br.ErrMsg = fmt.Sprintf("报告状态有误, State: %d", item.State)
  139. return
  140. }
  141. if item.Content == "" {
  142. br.Msg = "报告内容为空,请检查内容"
  143. return
  144. }
  145. // 校验审批配置
  146. confMap, e := models.GetBusinessConf()
  147. if e != nil {
  148. br.Msg = "操作失败"
  149. br.ErrMsg = "获取审批配置失败, Err: " + e.Error()
  150. return
  151. }
  152. if confMap[models.BusinessConfIsReportApprove] != "true" {
  153. br.Msg = "未开启审批, 请开启后重新操作"
  154. return
  155. }
  156. if confMap[models.BusinessConfReportApproveType] != models.BusinessConfReportApproveTypeOther {
  157. br.Msg = "未开启第三方审批, 请开启后重新操作"
  158. return
  159. }
  160. stateMap := map[bool]int{false: models.ReportStateRefused, true: models.ReportStatePass}
  161. // 驳回
  162. now := time.Now().Local()
  163. if !req.Pass {
  164. cols := []string{"State", "ModifyTime", "ApproveTime"}
  165. item.State = stateMap[req.Pass]
  166. item.ModifyTime = now
  167. item.ApproveTime = now
  168. if e = item.UpdateReport(cols); e != nil {
  169. br.Msg = "审批失败"
  170. br.ErrMsg = "报告审批驳回失败, Err: " + e.Error()
  171. return
  172. }
  173. }
  174. // 通过审批
  175. if req.Pass {
  176. cols := []string{"State", "ModifyTime", "ApproveTime", "PublishTime"}
  177. item.State = stateMap[req.Pass]
  178. item.ModifyTime = now
  179. item.ApproveTime = now
  180. item.PublishTime = now
  181. if e = item.UpdateReport(cols); e != nil {
  182. br.Msg = "审批失败"
  183. br.ErrMsg = "报告审批通过失败, Err: " + e.Error()
  184. return
  185. }
  186. // 更新报告Es
  187. go func() {
  188. _ = services.UpdateReportEs(req.ReportId, models.ReportStatePublished) // 注:状态用已发布的, 兼容以前的代码
  189. }()
  190. }
  191. // 记录报告变更状态
  192. go func() {
  193. recordItem := &models.ReportStateRecord{
  194. ReportId: req.ReportId,
  195. ReportType: models.ReportTypeChinese,
  196. State: item.State,
  197. CreateTime: time.Now(),
  198. }
  199. _, _ = models.AddReportStateRecord(recordItem)
  200. }()
  201. br.Ret = 200
  202. br.Msg = "审批成功"
  203. }