report_pdf.go 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321
  1. package controllers
  2. import (
  3. "eta/eta_mini_crm/models"
  4. "eta/eta_mini_crm/models/response"
  5. "eta/eta_mini_crm/services"
  6. "eta/eta_mini_crm/utils"
  7. "os"
  8. "path"
  9. "strings"
  10. "time"
  11. "github.com/rdlucklib/rdluck_tools/paging"
  12. )
  13. type ReportPdfController struct {
  14. BaseAuthController
  15. }
  16. // Author
  17. // @Title 获取报告作者接口
  18. // @Description 获取报告作者
  19. // @Success 200 {object} models.ReportAuthorResp
  20. // @router /author [get]
  21. func (this *ReportPdfController) Author() {
  22. br := new(models.BaseResponse).Init()
  23. defer func() {
  24. this.Data["json"] = br
  25. this.ServeJSON()
  26. }()
  27. items, err := models.GetReportAuthorList()
  28. if err != nil {
  29. br.Msg = "获取失败!"
  30. br.ErrMsg = "获取失败,Err:" + err.Error()
  31. return
  32. }
  33. br.Ret = 200
  34. br.Success = true
  35. br.Msg = "获取成功"
  36. br.Data = items
  37. }
  38. // Add
  39. // @Title 添加研报
  40. // @Description 添加研报
  41. // @Param File query file true "文件"
  42. // @Param Title query string true "标题"
  43. // @Param Author query string true "作者名称"
  44. // @Param Abstract query string true "摘要"
  45. // @Param ClassifyIdFirst query int true "一级分类id"
  46. // @Param ClassifyIdSecond query int true "二级分类id"
  47. // @Success 200 {object} models.ReportAuthorResp
  48. // @router /add [post]
  49. func (this *ReportPdfController) Add() {
  50. br := new(models.BaseResponse).Init()
  51. defer func() {
  52. this.Data["json"] = br
  53. this.ServeJSON()
  54. }()
  55. f, h, err := this.GetFile("File")
  56. if err != nil {
  57. br.Msg = "获取资源信息失败"
  58. br.ErrMsg = "获取资源信息失败,Err:" + err.Error()
  59. return
  60. }
  61. defer f.Close()
  62. author := this.GetString("Author")
  63. abstract := this.GetString("Abstract")
  64. classifyIdFirst, _ := this.GetInt("ClassifyIdFirst")
  65. classifyIdSecond, _ := this.GetInt("ClassifyIdSecond")
  66. title := this.GetString("Title")
  67. if classifyIdFirst <= 0 {
  68. br.Msg = "请选择研报所属的一级分类"
  69. return
  70. }
  71. if classifyIdSecond <= 0 {
  72. br.Msg = "请选择研报所属的二级分类"
  73. return
  74. }
  75. ext := path.Ext(h.Filename)
  76. dateDir := time.Now().Format("20060102")
  77. uploadDir := utils.STATIC_DIR + "hongze/" + dateDir
  78. err = os.MkdirAll(uploadDir, utils.DIR_MOD)
  79. if err != nil {
  80. br.Msg = "存储目录创建失败"
  81. br.ErrMsg = "存储目录创建失败,Err:" + err.Error()
  82. return
  83. }
  84. randStr := utils.GetRandStringNoSpecialChar(28)
  85. fileName := randStr + ext
  86. fpath := uploadDir + "/" + fileName
  87. defer f.Close() //关闭上传文件
  88. err = this.SaveToFile("file", fpath)
  89. if err != nil {
  90. br.Msg = "文件上传失败"
  91. br.ErrMsg = "文件上传失败,Err:" + err.Error()
  92. return
  93. }
  94. pdfUploadDir := "pdf/"
  95. savePdfToOssPath := pdfUploadDir + time.Now().Format("200601/20060102/")
  96. pptName := utils.GetRandStringNoSpecialChar(28)
  97. savePdfToOssPath += pptName + ".pdf"
  98. defer func() {
  99. _ = os.Remove(fpath)
  100. }()
  101. ossClient := services.NewOssClient()
  102. if ossClient == nil {
  103. br.Msg = "文件上传失败"
  104. br.ErrMsg = "初始化OSS服务失败"
  105. return
  106. }
  107. pdfUrl, err := ossClient.UploadFile("", fpath, savePdfToOssPath)
  108. if err != nil {
  109. br.Msg = "文件上传失败"
  110. br.ErrMsg = "文件上传失败,Err:" + err.Error()
  111. return
  112. }
  113. nameFirst, err := models.GetClassifyById(classifyIdFirst)
  114. if err != nil {
  115. br.Msg = "文件上传失败"
  116. br.ErrMsg = "一级类名获取失败,Err:" + err.Error()
  117. return
  118. }
  119. nameSecond, err := models.GetClassifyById(classifyIdSecond)
  120. if err != nil {
  121. br.Msg = "文件上传失败"
  122. br.ErrMsg = "二级类名获取失败,Err:" + err.Error()
  123. return
  124. }
  125. pdf := &models.ReportPdf{
  126. PdfUrl: pdfUrl,
  127. Title: title,
  128. Author: author,
  129. Abstract: abstract,
  130. ClassifyIdFirst: classifyIdFirst,
  131. ClassifyNameFirst: nameFirst.ClassifyName,
  132. ClassifyIdSecond: classifyIdSecond,
  133. ClassifyNameSecond: nameSecond.ClassifyName,
  134. PublishTime: time.Now(),
  135. ModifyTime: time.Now(),
  136. SysUserId: this.SysUser.SysUserId,
  137. SysRealName: this.SysUser.SysRealName,
  138. State: utils.ReportStatusUp,
  139. }
  140. err = pdf.Add()
  141. if err != nil {
  142. br.Msg = "文件上传失败"
  143. br.ErrMsg = "pdf研报新增失败,Err:" + err.Error()
  144. return
  145. }
  146. br.Msg = "上传成功"
  147. br.Ret = 200
  148. br.Success = true
  149. }
  150. // List
  151. // @Title pdf研报列表
  152. // @Description pdf研报列表
  153. // @Param PageSize query int true "每页数据条数"
  154. // @Param CurrentIndex query int true "当前页页码,从1开始"
  155. // @Param ClassifyIds query string true "二级分类id,可多选用英文,隔开"
  156. // @Param State query int true "研报状态, 1:已发布 2:未发布"
  157. // @Param PublishStartDate query string true "发布开始时间"
  158. // @Param PublishEndDate query string true "发布结束时间"
  159. // @Param ModifyStartDate query string true "更新开始时间"
  160. // @Param ModifyEndDate query string true "更新结束时间"
  161. // @Param KeyWord query string true "报告标题/创建人"
  162. // @Param SortParam query string true "排序字段"
  163. // @Param SortType query string true "排序方式"
  164. // @Success 200 {object} models.ReportAuthorResp
  165. // @router /list [get]
  166. func (this *ReportPdfController) List() {
  167. br := new(models.BaseResponse).Init()
  168. defer func() {
  169. this.Data["json"] = br
  170. this.ServeJSON()
  171. }()
  172. pageSize, _ := this.GetInt("PageSize")
  173. currentIndex, _ := this.GetInt("CurrentIndex")
  174. classifyIds := this.GetString("ClassifyIds")
  175. state, _ := this.GetInt("State")
  176. publishStartDate := this.GetString("PublishStartDate")
  177. publishEndDate := this.GetString("PublishEndDate")
  178. modifyStartDate := this.GetString("ModifyStartDate")
  179. modifyEndDate := this.GetString("ModifyEndDate")
  180. keyWord := this.GetString("KeyWord")
  181. sortParam := this.GetString("SortParam")
  182. sortType := this.GetString("SortType")
  183. var condition string
  184. var pars []interface{}
  185. if pageSize <= 0 {
  186. pageSize = utils.PageSize20
  187. }
  188. if currentIndex <= 0 {
  189. currentIndex = 1
  190. }
  191. if classifyIds != "" {
  192. classifyArr := strings.Split(classifyIds, ",")
  193. condition += " AND classify_id_second in (" + utils.GetOrmReplaceHolder(len(classifyArr)) + ")"
  194. pars = append(pars, classifyArr)
  195. }
  196. switch state {
  197. case utils.ReportStatusUp:
  198. condition += " AND state = ?"
  199. pars = append(pars, state)
  200. case utils.ReportStatusDown:
  201. condition += " AND state = ?"
  202. pars = append(pars, state)
  203. }
  204. if publishStartDate != "" && publishEndDate != "" {
  205. condition += " AND publish_time >= ?"
  206. publishStartTime, err := time.Parse(utils.FormatDate, publishStartDate)
  207. if err != nil {
  208. br.Msg = "日期格式有误"
  209. br.ErrMsg = "日期格式有误,Err:" + err.Error()
  210. return
  211. }
  212. publishStartDateStr := publishStartTime.Format(utils.FormatDateTime)
  213. pars = append(pars, publishStartDateStr)
  214. condition += " AND publish_time <= ?"
  215. publishEndTime, err := time.Parse(utils.FormatDate, publishEndDate)
  216. if err != nil {
  217. br.Msg = "日期格式有误"
  218. br.ErrMsg = "日期格式有误,Err:" + err.Error()
  219. return
  220. }
  221. publishEndTime = publishEndTime.Add(23*time.Hour + 59*time.Minute + 59*time.Second)
  222. publishEndDateStr := publishEndTime.Format(utils.FormatDateTime)
  223. pars = append(pars, publishEndDateStr)
  224. }
  225. if modifyStartDate != "" && modifyEndDate != "" {
  226. condition += " AND modify_time >= ?"
  227. modifyStartTime, err := time.Parse(utils.FormatDate, modifyStartDate)
  228. if err != nil {
  229. br.Msg = "日期格式有误"
  230. br.ErrMsg = "日期格式有误,Err:" + err.Error()
  231. return
  232. }
  233. modifyStartDateStr := modifyStartTime.Format(utils.FormatDateTime)
  234. pars = append(pars, modifyStartDateStr)
  235. condition += " AND modify_time <= ?"
  236. modifyEndTime, err := time.Parse(utils.FormatDate, modifyEndDate)
  237. if err != nil {
  238. br.Msg = "日期格式有误"
  239. br.ErrMsg = "日期格式有误,Err:" + err.Error()
  240. return
  241. }
  242. modifyEndTime = modifyEndTime.Add(23*time.Hour + 59*time.Minute + 59*time.Second)
  243. modifyEndDateStr := modifyEndTime.Format(utils.FormatDateTime)
  244. pars = append(pars, modifyEndDateStr)
  245. }
  246. if keyWord != "" {
  247. condition += ` AND (title like ? OR sys_real_name like ?) `
  248. pars = utils.GetLikeKeywordPars(pars, keyWord, 2)
  249. }
  250. var sortCondition string
  251. if sortParam != "" && sortType != "" {
  252. sortCondition = " ORDER BY "
  253. var param, sort string
  254. switch sortParam {
  255. case "PublishTime":
  256. param = "publish_time"
  257. case "ModifyTime":
  258. param = "modify_time"
  259. }
  260. switch sortType {
  261. case "asc":
  262. sort = " ASC "
  263. case "desc":
  264. sort = " DESC "
  265. }
  266. if param != "" && sort != "" {
  267. sortCondition += param + " " + sort
  268. } else {
  269. sortCondition = ""
  270. }
  271. }
  272. if sortCondition == "" {
  273. sortCondition = ` ORDER BY modify_time DESC `
  274. }
  275. total, err := models.GetReportPdfCountByCondition(condition, pars)
  276. if err != nil {
  277. br.Msg = "获取研报列表失败"
  278. br.ErrMsg = "获取研报列表统计失败,Err:" + err.Error()
  279. return
  280. }
  281. startSize := utils.StartIndex(currentIndex, pageSize)
  282. reportList, err := models.GetReportPdfByCondition(condition, sortCondition, pars, startSize, pageSize)
  283. if err != nil {
  284. br.Msg = "获取研报列表失败"
  285. br.ErrMsg = "获取研报列表失败,Err:" + err.Error()
  286. return
  287. }
  288. page := paging.GetPaging(currentIndex, pageSize, total)
  289. resp := new(response.ReportPdfListResp)
  290. resp.List = reportList
  291. resp.Paging = page
  292. br.Ret = 200
  293. br.Success = true
  294. br.Data = resp
  295. br.Msg = "获取成功"
  296. }